@runfusion/fusion 0.11.0 → 0.13.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 +1644 -509
- package/dist/client/assets/{AgentDetailView-DQBjJSPJ.js → AgentDetailView-B7j297GT.js} +4 -4
- package/dist/client/assets/AgentsView-Dvf_xUkx.js +522 -0
- package/dist/client/assets/{AgentsView-xm_3NO4M.css → AgentsView-V5GhlBYu.css} +1 -1
- package/dist/client/assets/ChatView-BgUt38ty.js +1 -0
- package/dist/client/assets/{DevServerView-BVixhlF0.js → DevServerView-C2qTJch7.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-tvBgHxa7.js → DirectoryPicker-DRfhg9zz.js} +1 -1
- package/dist/client/assets/{DocumentsView-DVw_wT6V.js → DocumentsView-j8ic1xUw.js} +1 -1
- package/dist/client/assets/{InsightsView-G3MZhwSx.js → InsightsView-CpAz3o0i.js} +3 -3
- package/dist/client/assets/{MemoryView-Bl9gx2Dw.js → MemoryView-BcQsi_JK.js} +2 -2
- package/dist/client/assets/{NodesView-dwVhD4V2.js → NodesView-Bo_Yhr4N.js} +4 -4
- package/dist/client/assets/{PiExtensionsManager-CEHp6_Mj.js → PiExtensionsManager-DHt2zFg8.js} +3 -3
- package/dist/client/assets/{PluginManager-Dx0mcwat.js → PluginManager-BQhBHWrB.js} +1 -1
- package/dist/client/assets/ResearchView-BzRdUzNq.css +1 -0
- package/dist/client/assets/{ResearchView-BvlLYC_1.js → ResearchView-CLyyqAWE.js} +1 -1
- package/dist/client/assets/{RoadmapsView-DdYXssP2.js → RoadmapsView-tG7IdOoc.js} +2 -2
- package/dist/client/assets/{SettingsModal-CGWipm3s.js → SettingsModal-CXUGeZ0_.js} +1 -1
- package/dist/client/assets/{SettingsModal-CriZP5Lp.css → SettingsModal-DcGFm6NR.css} +1 -1
- package/dist/client/assets/SettingsModal-UziTDnLh.js +31 -0
- package/dist/client/assets/{SetupWizardModal-CKsJduYM.js → SetupWizardModal-BMJL6eNR.js} +1 -1
- package/dist/client/assets/SkillMultiselect-DDHJnrkn.css +1 -0
- package/dist/client/assets/SkillMultiselect-ILMft-Kz.js +1 -0
- package/dist/client/assets/SkillsView-x4_YwBz6.js +1 -0
- package/dist/client/assets/{TodoView-ByXJ90yL.js → TodoView-BBYcMbXE.js} +2 -2
- package/dist/client/assets/{folder-open-CxOUgHDf.js → folder-open-DDdJt8aE.js} +1 -1
- package/dist/client/assets/index-B15xwijw.css +1 -0
- package/dist/client/assets/index-DmSs2FGE.js +661 -0
- package/dist/client/assets/{list-checks--sf9u9ox.js → list-checks-DFxQ9biT.js} +1 -1
- package/dist/client/assets/{star-CF1f2iPu.js → star-BKs1bgJN.js} +1 -1
- package/dist/client/assets/{upload-rOBd4OhB.js → upload-Bb5Pidne.js} +1 -1
- package/dist/client/assets/{users-De-vFat1.js → users-BImNn91Q.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/theme-data.css +1 -1
- package/dist/client/version.json +1 -1
- package/dist/extension.js +548 -96
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/pi-claude-cli/src/__tests__/prompt-builder.test.ts +36 -0
- package/dist/pi-claude-cli/src/prompt-builder.ts +19 -28
- package/package.json +1 -1
- package/skill/fusion/references/cli-commands.md +14 -0
- package/skill/fusion/references/engine-tools.md +1 -0
- package/dist/client/assets/AgentsView-DlA0yHBg.js +0 -522
- package/dist/client/assets/ChatView-DK5CmiAk.js +0 -1
- package/dist/client/assets/ResearchView-BVJFgfat.css +0 -1
- package/dist/client/assets/SettingsModal-Bgjg_4CD.js +0 -31
- package/dist/client/assets/SkillsView-C4Tz7CxC.js +0 -1
- package/dist/client/assets/index-BCz4ye4p.css +0 -1
- package/dist/client/assets/index-D7gT6mCr.js +0 -656
|
@@ -1,656 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-xterm-DzcZoU0P.js","assets/vendor-react-K0fH_qHe.js","assets/vendor-xterm-LZoznX6r.css","assets/addon-fit-C7jRorKK.js","assets/addon-web-links-CkJwd4cQ.js","assets/addon-webgl-BjvOw43o.js","assets/SetupWizardModal-CKsJduYM.js","assets/DirectoryPicker-tvBgHxa7.js","assets/folder-open-CxOUgHDf.js","assets/DirectoryPicker-DzKVmxOf.css","assets/SetupWizardModal-DRF5fOoR.css","assets/SettingsModal-Bgjg_4CD.js","assets/SettingsModal-CGWipm3s.js","assets/SettingsModal-CriZP5Lp.css","assets/users-De-vFat1.js","assets/star-CF1f2iPu.js","assets/SettingsModal-9HS8MnmW.css","assets/AgentsView-DlA0yHBg.js","assets/upload-rOBd4OhB.js","assets/AgentsView-xm_3NO4M.css","assets/DocumentsView-DVw_wT6V.js","assets/DocumentsView-BrhyOdeE.css","assets/InsightsView-G3MZhwSx.js","assets/InsightsView-4KiUKzbz.css","assets/ResearchView-BvlLYC_1.js","assets/ResearchView-BVJFgfat.css","assets/NodesView-dwVhD4V2.js","assets/NodesView-DCoS6iYh.css","assets/ChatView-DK5CmiAk.js","assets/RoadmapsView-DdYXssP2.js","assets/RoadmapsView-BOYnyMCh.css","assets/SkillsView-C4Tz7CxC.js","assets/SkillsView-Cytf009Z.css","assets/MemoryView-Bl9gx2Dw.js","assets/MemoryView-DiajLXby.css","assets/DevServerView-BVixhlF0.js","assets/DevServerView-DlZpuAnj.css","assets/TodoView-ByXJ90yL.js","assets/list-checks--sf9u9ox.js","assets/TodoView-C1g65hJo.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as a,j as t,R as jo,a as da,g as Qh,c as Lg}from"./vendor-react-K0fH_qHe.js";import"./vendor-xterm-DzcZoU0P.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"]'))i(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"&&i(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 i(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 Xh=(...e)=>e.filter((n,s,i)=>!!n&&n.trim()!==""&&i.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 zg=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 Fg=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(n,s,i)=>i?i.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 Od=e=>{const n=Fg(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 pl={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 Og=e=>{for(const n in e)if(n.startsWith("aria-")||n==="role"||n==="title")return!0;return!1},Ug=a.createContext({}),Bg=()=>a.useContext(Ug),Hg=a.forwardRef(({color:e,size:n,strokeWidth:s,absoluteStrokeWidth:i,className:r="",children:o,iconNode:l,...c},u)=>{const{size:d=24,strokeWidth:m=2,absoluteStrokeWidth:h=!1,color:f="currentColor",className:p=""}=Bg()??{},g=i??h?Number(s??m)*24/Number(n??d):s??m;return a.createElement("svg",{ref:u,...pl,width:n??d??pl.width,height:n??d??pl.height,stroke:e??f,strokeWidth:g,className:Xh("lucide",p,r),...!o&&!Og(c)&&{"aria-hidden":"true"},...c},[...l.map(([b,v])=>a.createElement(b,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 Be=(e,n)=>{const s=a.forwardRef(({className:i,...r},o)=>a.createElement(Hg,{ref:o,iconNode:n,className:Xh(`lucide-${zg(Od(e))}`,`lucide-${e}`,i),...r}));return s.displayName=Od(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 qg=[["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"}]],Is=Be("activity",qg);/**
|
|
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 Vg=[["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"}]],Fo=Be("archive",Vg);/**
|
|
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 Wg=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Er=Be("arrow-down",Wg);/**
|
|
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 Kg=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Ca=Be("arrow-left",Kg);/**
|
|
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 Gg=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],Mr=Be("arrow-right",Gg);/**
|
|
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 Jg=[["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"}]],Zh=Be("arrow-up-down",Jg);/**
|
|
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 Yg=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Fi=Be("arrow-up",Yg);/**
|
|
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 Qg=[["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"}]],Xg=Be("book-open",Qg);/**
|
|
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 Zg=[["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"}]],Cn=Be("bot",Zg);/**
|
|
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 eb=[["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"}]],kc=Be("box",eb);/**
|
|
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 tb=[["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"}]],ko=Be("brain",tb);/**
|
|
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 nb=[["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"}]],ep=Be("calendar",nb);/**
|
|
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 sb=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],ib=Be("check-check",sb);/**
|
|
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 ab=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Bn=Be("check",ab);/**
|
|
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 rb=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],en=Be("chevron-down",rb);/**
|
|
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 ob=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],Oo=Be("chevron-left",ob);/**
|
|
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 lb=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],jn=Be("chevron-right",lb);/**
|
|
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 cb=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],pi=Be("chevron-up",cb);/**
|
|
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 db=[["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"}]],ms=Be("circle-alert",db);/**
|
|
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 ub=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],kn=Be("circle-check-big",ub);/**
|
|
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 mb=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]],Uo=Be("circle-dot",mb);/**
|
|
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 hb=[["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"}]],wc=Be("circle-question-mark",hb);/**
|
|
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 pb=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]],fb=Be("circle-stop",pb);/**
|
|
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 gb=[["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"}]],_r=Be("circle-x",gb);/**
|
|
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 bb=[["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"}]],xb=Be("clipboard-list",bb);/**
|
|
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 vb=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],Ci=Be("clock",vb);/**
|
|
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 yb=[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]],tp=Be("code",yb);/**
|
|
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 jb=[["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"}]],kb=Be("columns-3",jb);/**
|
|
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 wb=[["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"}]],Ui=Be("copy",wb);/**
|
|
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 Nb=[["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"}]],Sb=Be("cpu",Nb);/**
|
|
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 Cb=[["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"}]],Eb=Be("download",Cb);/**
|
|
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 Mb=[["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"}]],_b=Be("ellipsis-vertical",Mb);/**
|
|
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 Ab=[["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"}]],Nc=Be("ellipsis",Ab);/**
|
|
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 Rb=[["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"}]],Tb=Be("external-link",Rb);/**
|
|
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 Pb=[["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"}]],ad=Be("eye-off",Pb);/**
|
|
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 Ib=[["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"}]],Ea=Be("eye",Ib);/**
|
|
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 $b=[["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"}]],Bs=Be("file-code",$b);/**
|
|
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 Db=[["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"}]],Sc=Be("file-diff",Db);/**
|
|
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 Lb=[["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"}]],zb=Be("file-minus",Lb);/**
|
|
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 Fb=[["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"}]],np=Be("file-pen",Fb);/**
|
|
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 Ob=[["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"}]],Ub=Be("file-plus",Ob);/**
|
|
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 Bb=[["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"}]],Hb=Be("file-question-mark",Bb);/**
|
|
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 qb=[["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"}]],Bi=Be("file-text",qb);/**
|
|
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 Vb=[["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"}]],Wb=Be("file-type",Vb);/**
|
|
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 Kb=[["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"}]],sp=Be("file",Kb);/**
|
|
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 Gb=[["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"}]],Cc=Be("folder-git-2",Gb);/**
|
|
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 Jb=[["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"}]],Ud=Be("folder-root",Jb);/**
|
|
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 Yb=[["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"}]],Gn=Be("folder",Yb);/**
|
|
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 Qb=[["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"}]],wo=Be("funnel",Qb);/**
|
|
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 Xb=[["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"}]],Vs=Be("git-branch",Xb);/**
|
|
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 Zb=[["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"}]],Ar=Be("git-commit-horizontal",Zb);/**
|
|
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 ex=[["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"}]],ip=Be("git-merge",ex);/**
|
|
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 tx=[["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"}]],ws=Be("git-pull-request",tx);/**
|
|
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 nx=[["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"}]],Bo=Be("globe",nx);/**
|
|
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 sx=[["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"}]],ap=Be("grid-3x3",sx);/**
|
|
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 ix=[["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"}]],rd=Be("grip-vertical",ix);/**
|
|
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 ax=[["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"}]],rx=Be("hard-drive",ax);/**
|
|
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 ox=[["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"}]],lx=Be("heart",ox);/**
|
|
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 cx=[["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"}]],gr=Be("history",cx);/**
|
|
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 dx=[["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"}]],ar=Be("inbox",dx);/**
|
|
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 ux=[["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"}]],rp=Be("key",ux);/**
|
|
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 mx=[["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"}]],hx=Be("keyboard",mx);/**
|
|
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 px=[["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"}]],Hi=Be("layers",px);/**
|
|
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 fx=[["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"}]],qi=Be("layout-grid",fx);/**
|
|
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 gx=[["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"}]],si=Be("lightbulb",gx);/**
|
|
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 bx=[["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"}]],pa=Be("link",bx);/**
|
|
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 xx=[["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"}]],vx=Be("list-plus",xx);/**
|
|
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 yx=[["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"}]],Ho=Be("list-tree",yx);/**
|
|
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 jx=[["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"}]],Ec=Be("list",jx);/**
|
|
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 kx=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],lt=Be("loader-circle",kx);/**
|
|
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 wx=[["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"}]],qo=Be("lock",wx);/**
|
|
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 Nx=[["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"}]],fa=Be("mail",Nx);/**
|
|
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 Sx=[["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"}]],Mc=Be("map",Sx);/**
|
|
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 Cx=[["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"}]],Vo=Be("maximize-2",Cx);/**
|
|
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 Ex=[["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"}]],Mx=Be("message-square-plus",Ex);/**
|
|
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 _x=[["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"}]],Ni=Be("message-square",_x);/**
|
|
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 Ax=[["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"}]],Rr=Be("minimize-2",Ax);/**
|
|
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 Rx=[["path",{d:"M5 12h14",key:"1ays0h"}]],Tx=Be("minus",Rx);/**
|
|
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 Px=[["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"}]],br=Be("monitor",Px);/**
|
|
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 Ix=[["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"}]],$x=Be("move",Ix);/**
|
|
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 Dx=[["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"}]],_c=Be("package",Dx);/**
|
|
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 Lx=[["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"}]],op=Be("paperclip",Lx);/**
|
|
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 zx=[["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"}]],Hs=Be("pause",zx);/**
|
|
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 Fx=[["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"}]],ds=Be("pencil",Fx);/**
|
|
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 Ox=[["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"}]],En=Be("play",Ox);/**
|
|
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 Ux=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],cn=Be("plus",Ux);/**
|
|
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 Bx=[["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"}]],lp=Be("radio",Bx);/**
|
|
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 Hx=[["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"}]],$n=Be("refresh-cw",Hx);/**
|
|
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 qx=[["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"}]],Bd=Be("rocket",qx);/**
|
|
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 Vx=[["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"}]],Wx=Be("rotate-ccw",Vx);/**
|
|
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 Kx=[["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"}]],Gx=Be("rotate-cw",Kx);/**
|
|
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 Jx=[["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"}]],cp=Be("save",Jx);/**
|
|
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 Yx=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],wi=Be("search",Yx);/**
|
|
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 Qx=[["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"}]],zi=Be("send",Qx);/**
|
|
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 Xx=[["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"}]],xr=Be("server",Xx);/**
|
|
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 Zx=[["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"}]],ur=Be("settings",Zx);/**
|
|
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 ev=[["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"}]],tv=Be("shield-alert",ev);/**
|
|
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 nv=[["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"}]],sv=Be("shield",nv);/**
|
|
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 iv=[["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"}]],av=Be("skull",iv);/**
|
|
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 rv=[["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"}]],as=Be("sparkles",rv);/**
|
|
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 ov=[["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"}]],dp=Be("square-check-big",ov);/**
|
|
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 lv=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],ks=Be("square",lv);/**
|
|
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 cv=[["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"}]],vs=Be("target",cv);/**
|
|
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 dv=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],mi=Be("terminal",dv);/**
|
|
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 uv=[["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"}]],No=Be("text-wrap",uv);/**
|
|
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 mv=[["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"}]],ln=Be("trash-2",mv);/**
|
|
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 hv=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],pv=Be("trending-up",hv);/**
|
|
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 fv=[["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"}]],od=Be("triangle-alert",fv);/**
|
|
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 gv=[["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"}]],Hd=Be("unlink",gv);/**
|
|
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 bv=[["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"}]],ta=Be("user",bv);/**
|
|
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 xv=[["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"}]],up=Be("webhook",xv);/**
|
|
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 vv=[["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"}]],Ac=Be("workflow",vv);/**
|
|
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 yv=[["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"}]],qd=Be("wrench",yv);/**
|
|
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 jv=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Jt=Be("x",jv);/**
|
|
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 kv=[["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"}]],Kn=Be("zap",kv),Rc="fusion:version-reload",Tc="fusion:version-update";function wv(){try{if(sessionStorage.getItem(Tc))return sessionStorage.removeItem(Tc),!0}catch{}return!1}function mp(e){if(sessionStorage.getItem(Rc)){console.warn("[versionCheck] reload already attempted, suppressing",e);return}sessionStorage.setItem(Rc,"1"),console.info("[versionCheck] reloading:",e),window.location.reload()}function Nv(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/i.test(n)}function Sv(e){return Nv(e)?(mp(`chunk load error: ${e?.message??e}`),!0):!1}async function Cv(){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}}let fl=!1;async function gl(){if(!(fl||document.visibilityState!=="visible")){fl=!0;try{const e=await Cv();if(e&&e!=="momfhfvt-de9246c7"){try{sessionStorage.setItem(Tc,"1")}catch{}mp(`build version changed: momfhfvt-de9246c7 -> ${e}`)}}finally{fl=!1}}}function Ev(){window.setTimeout(()=>sessionStorage.removeItem(Rc),5e3),document.addEventListener("visibilitychange",()=>{gl()}),window.addEventListener("focus",()=>{gl()}),window.setTimeout(()=>void gl(),2e3)}class Wo extends a.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),!Sv(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",i=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(od,{size:40})}),t.jsx("div",{className:"error-boundary__title",children:i}),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 ss({children:e,onError:n}){return t.jsx(Wo,{level:"page",onError:n,children:e})}function Ii({children:e,onError:n}){return t.jsx(Wo,{level:"modal",onError:n,children:e})}function Mv({children:e,onError:n}){return t.jsx(Wo,{level:"root",onError:n,children:e})}const _v="modulepreload",Av=function(e){return"/"+e},Vd={},pn=function(n,s,i){let r=Promise.resolve();if(s&&s.length>0){let l=function(d){return Promise.all(d.map(m=>Promise.resolve(m).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),u=c?.nonce||c?.getAttribute("nonce");r=l(s.map(d=>{if(d=Av(d),d in Vd)return;Vd[d]=!0;const m=d.endsWith(".css"),h=m?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${d}"]${h}`))return;const f=document.createElement("link");if(f.rel=m?"stylesheet":_v,m||(f.as="script"),f.crossOrigin="",f.href=d,u&&f.setAttribute("nonce",u),document.head.appendChild(f),m)return new Promise((p,g)=>{f.addEventListener("load",p),f.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${d}`)))})}))}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)})},ld="fn.authToken",Wd="token",Rv="fn_token";let ma,Kd=!1,So=!1;const Pc="fn:auth-token-recovery-required";function Tv(){try{const e=window.localStorage.getItem(ld);return e&&e.length>0?e:void 0}catch{return}}function hp(e){try{window.localStorage.setItem(ld,e)}catch{}}function Pv(){if(!(Kd||typeof window>"u")){Kd=!0;try{const e=new URL(window.location.href),n=e.searchParams.get(Wd);if(!n)return;hp(n),e.searchParams.delete(Wd);const s=e.pathname+(e.search?e.search:"")+e.hash;return window.history.replaceState(window.history.state,"",s),n}catch{return}}}function ga(){if(ma!==void 0)return ma;const e=Pv();if(e)return ma=e,e;const n=Tv();if(n)return ma=n,n}function Iv(e){ma=e,So=!1,hp(e)}function $v(){ma=void 0,So=!1;try{window.localStorage.removeItem(ld)}catch{}}function Gd(e){return e==="ws:"?"http:":e==="wss:"?"https:":e}function Dv(e){return e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function Lv(e){if(typeof window>"u")return!1;const n=new URL(window.location.origin);if(!Dv(e.protocol))return!1;const s=e.hostname===n.hostname,i=e.port===n.port,r=Gd(e.protocol)===Gd(n.protocol);return s&&i&&r}function zv(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 ii(e){const n=ga();if(!n||typeof window>"u")return e;const s=zv(e);return!s||!Lv(s.parsed)?e:(s.parsed.searchParams.set(Rv,n),s.preserveRelativePath?`${s.parsed.pathname}${s.parsed.search}${s.parsed.hash}`:s.parsed.toString())}function fi(e){const n=ga();if(!n)return e;const s=new Headers(e??{});return s.has("Authorization")||s.set("Authorization",`Bearer ${n}`),s}function Fv(e){if(!e||typeof e!="object")return!1;const n=e;return n.error==="Unauthorized"&&n.message==="Valid bearer token required"}function Ov(){typeof window>"u"||So||(So=!0,window.dispatchEvent(new CustomEvent(Pc)))}async function Uv(e){if(e.status===401)try{const n=e.clone();if(!(n.headers.get("content-type")??"").toLowerCase().includes("application/json"))return;const i=await n.json();Fv(i)&&Ov()}catch{}}function Bv(){if(typeof window>"u"||window.__fnAuthFetchInstalled)return;window.__fnAuthFetchInstalled=!0,ga();const e=window.fetch.bind(window);window.fetch=function(s,i){const r=ga(),o=typeof s=="string"?s:s instanceof URL?s.toString():s.url;if(!(()=>{try{const u=new URL(o,window.location.origin);return u.origin!==window.location.origin?!1:u.pathname.startsWith("/api/")||u.pathname==="/api"}catch{return o.startsWith("/api/")||o==="/api"}})())return e(s,i);const c=new Headers(i?.headers??(s instanceof Request?s.headers:void 0));return r&&!c.has("Authorization")&&c.set("Authorization",`Bearer ${r}`),e(s,{...i,headers:c}).then(u=>(Uv(u),u))}}class Hv extends Error{status;details;constructor(n,s,i){super(n),this.name="ApiRequestError",this.status=s,this.details=i}}function qv(e){const n=e.trim();return n.startsWith("<!DOCTYPE")||n.startsWith("<html")||n.startsWith("<HTML")}function rs(e){return`/api${e}`}async function I(e,n={}){const s=rs(e),i=ga(),r=(()=>{if(i){const f=new Headers(n.headers??{});return f.has("Content-Type")||f.set("Content-Type","application/json"),fi(f)}if(!n.headers)return{"Content-Type":"application/json"};const h=new Headers(n.headers);return h.has("Content-Type")||h.set("Content-Type","application/json"),Object.fromEntries(h.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(),u=l.includes("application/json");if(l.includes("text/html")||qv(c))throw new Error(`API returned HTML instead of JSON for ${s}. The endpoint may not be properly configured. (${o.status} ${o.statusText})`);if(!u){const h=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})${h?` Response: ${h}`:""}`)}let m;try{m=c?JSON.parse(c):null}catch{throw new Error(`API returned invalid JSON for ${s}. (${o.status} ${o.statusText})`)}if(!o.ok){const h=m;throw new Hv(h?.error||`Request failed for ${s}: ${o.status} ${o.statusText}`,o.status,h?.details)}return m}function F4(){return I("/health")}function O4(){return I("/updates/check")}function Vv(e,n,s,i,r){const o=new URLSearchParams;s&&o.set("projectId",s),i&&o.set("q",i),r&&o.set("includeArchived","1");const l=o.size>0?`?${o.toString()}`:"";return I(`/tasks${l}`)}async function vr(e,n){const i=rs(q(`/tasks/${e}`,n));for(let r=1;r<=2;r++){const o=await fetch(i,{headers:fi({"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 pp(e,n){const{title:s,description:i,column:r,dependencies:o,breakIntoSubtasks:l,enabledWorkflowSteps:c,assignedAgentId:u,modelPresetId:d,modelProvider:m,modelId:h,validatorModelProvider:f,validatorModelId:p,planningModelProvider:g,planningModelId:b,thinkingLevel:v,summarize:x,reviewLevel:y,executionMode:j,priority:N,source:C}=e;return I(q("/tasks",n),{method:"POST",body:JSON.stringify({title:s,description:i,column:r,dependencies:o,breakIntoSubtasks:l,enabledWorkflowSteps:c,assignedAgentId:u,modelPresetId:d,modelProvider:m,modelId:h,validatorModelProvider:f,validatorModelId:p,planningModelProvider:g,planningModelId:b,thinkingLevel:v,summarize:x,reviewLevel:y,executionMode:j,priority:N,source:C})})}function ni(e,n,s){return I(q(`/tasks/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}function Wv(e,n,s,i,r,o,l,c,u){return I(q("/tasks/batch-update-models",u),{method:"POST",body:JSON.stringify({taskIds:e,modelProvider:n,modelId:s,validatorModelProvider:i,validatorModelId:r,planningModelProvider:o,planningModelId:l,nodeId:c})})}function Kv(e,n,s){return I(q(`/tasks/${e}/move`,s),{method:"POST",body:JSON.stringify({column:n})})}function Gv(e,n,s){const i=new URLSearchParams,r=i.size>0?`?${i.toString()}`:"";return I(q(`/tasks/${e}${r}`,n),{method:"DELETE"})}function Jv(e,n){return I(q(`/tasks/${e}/merge`,n),{method:"POST"})}function Yv(e,n){return I(q(`/tasks/${e}/retry`,n),{method:"POST"})}function Qv(e,n){return I(q(`/tasks/${e}/reset`,n),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({confirm:!0})})}function Xv(e,n){return I(q(`/tasks/${e}/duplicate`,n),{method:"POST"})}function fp(e,n){return I(q(`/tasks/${e}/pause`,n),{method:"POST"})}function Zv(e,n){return I(q(`/tasks/${e}/unpause`,n),{method:"POST"})}function ey(e,n){return I(q(`/tasks/${e}/archive`,n),{method:"POST"})}function ty(e,n){return I(q(`/tasks/${e}/unarchive`,n),{method:"POST"})}function ny(e){return I(q("/tasks/archive-all-done",e),{method:"POST"}).then(n=>n.archived)}function sy(e,n){return I(q(`/tasks/${e}/approve-plan`,n),{method:"POST"})}function iy(e,n){return I(q(`/tasks/${e}/reject-plan`,n),{method:"POST"})}function ay(e){return I(q("/config",e))}function Ko(e){return I(q("/settings",e))}function Kr(e,n){return I(q("/settings",n),{method:"PUT",body:JSON.stringify(e)})}function ry(e){return I(q("/update-check",e))}function U4(e){return I(q("/remote/settings",e))}function B4(e,n){return I(q("/remote/settings",n),{method:"PUT",body:JSON.stringify(e)})}function H4(e){return I(q("/remote/status",e))}function q4(e){return I(q("/remote/install-cloudflared",e),{method:"POST"})}function V4(e){return I(q("/remote/tunnel/start",e),{method:"POST"})}function W4(e){return I(q("/remote/tunnel/stop",e),{method:"POST"})}function K4(e){return I(q("/remote/tunnel/kill-external",e),{method:"POST"})}function G4(e){return I(q("/remote/token/persistent/regenerate",e),{method:"POST"})}function J4(e,n){return I(q("/remote/token/short-lived/generate",n),{method:"POST",body:JSON.stringify({ttlMs:e})})}function gp(e,n,s){const i=new URLSearchParams;e&&i.set("format",e),i.set("tokenType",n),n==="short-lived"&&typeof s=="number"&&Number.isFinite(s)&&i.set("ttlMs",String(s));const r=i.toString();return r?`?${r}`:""}function Y4(e={}){const{projectId:n,tokenType:s="persistent",ttlMs:i}=e,r=gp(null,s,i);return I(q(`/remote/url${r}`,n))}function Q4(e="text",n={}){const{projectId:s,tokenType:i="persistent",ttlMs:r}=n,o=gp(e,i,r);return I(q(`/remote/qr${o}`,s))}function X4(e){return I(q("/memory",e))}function Z4(e,n){return I(q("/memory",n),{method:"PUT",body:JSON.stringify({content:e})})}function e$(e){return I(q("/memory/files",e))}function t$(e,n){const s=`path=${encodeURIComponent(e)}`;return I(q(`/memory/file?${s}`,n))}function n$(e,n,s){return I(q("/memory/file",s),{method:"PUT",body:JSON.stringify({path:e,content:n})})}function s$(e,n){let s,i=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:i=r}return I(q("/memory/compact",i),{method:"POST",body:JSON.stringify(s?{path:s}:{})})}function i$(e){return I(q("/memory/dream",e),{method:"POST"})}function a$(e){return I(q("/memory/insights",e))}function r$(e,n){return I(q("/memory/insights",n),{method:"PUT",body:JSON.stringify({content:e})})}function o$(e){return I(q("/memory/extract",e),{method:"POST"})}function l$(e){return I(q("/memory/audit",e))}function c$(e){return I(q("/memory/stats",e))}function d$(e){return I(q("/memory/backend",e))}function u$(e){return I(q("/memory/install-qmd",e),{method:"POST"})}function m$(e,n){return I(q("/memory/test",n),{method:"POST",body:JSON.stringify({query:e})})}function Ji(){return I("/settings/global")}function fn(e){return I("/settings/global",{method:"PUT",body:JSON.stringify(e)})}function h$(e){return I(q("/settings/scopes",e))}function p$(e){return I(q("/settings/pi-extensions",e))}function f$(e,n){return I(q("/settings/pi-extensions",n),{method:"PUT",body:JSON.stringify({disabledIds:e})})}function g$(e,n,s){return I(q("/settings/test-notification",s),{method:"POST",body:JSON.stringify({providerId:e,...n??{}})})}function b$(){return I("/pi-settings")}async function x$(e){return I("/pi-settings",{method:"PUT",body:JSON.stringify(e)})}async function v$(e){return I("/pi-settings/packages",{method:"POST",body:JSON.stringify({source:e})})}async function y$(e){return I(q("/pi-settings/reinstall-fusion",e),{method:"POST"})}async function yr(e,n,s){const i=new FormData;i.append("file",n);const r=await fetch(rs(q(`/tasks/${e}/attachments`,s)),{method:"POST",headers:fi(),body:i}),o=await r.json();if(!r.ok)throw new Error(o.error||"Upload failed");return o}async function oy(e,n,s){return I(q(`/tasks/${e}/attachments/${n}`,s),{method:"DELETE"})}async function Jd(e,n,s){const i=new URLSearchParams;s?.limit!==void 0&&i.set("limit",String(s.limit)),s?.offset!==void 0&&i.set("offset",String(s.offset));const r=i.toString()?`?${i.toString()}`:"",o=q(`/tasks/${e}/logs${r}`,n),l=await fetch(rs(o),{headers:fi()});if(!l.ok){const m=await l.json().catch(()=>({error:"Failed to fetch agent logs"}));throw new Error(m.error||`HTTP ${l.status}`)}const c=await l.json(),u=l.headers.has("X-Total-Count")?parseInt(l.headers.get("X-Total-Count"),10):c.length,d=l.headers.has("X-Has-More")?l.headers.get("X-Has-More")==="true":!1;return{entries:c,total:u,hasMore:d}}function ly(e,n,s,i){return I(q(`/tasks/${e}/comments/${n}`,i),{method:"PATCH",body:JSON.stringify({text:s})})}function cy(e,n,s){return I(q(`/tasks/${e}/comments/${n}`,s),{method:"DELETE"})}function dy(e,n){return I(q(`/tasks/${e}/documents`,n))}function uy(e,n,s){return I(q(`/tasks/${e}/documents/${n}/revisions`,s))}async function j$(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 i=s.toString(),r=`/documents${i?`?${i}`:""}`;return I(q(r,n))}function k$(e,n){const s=new URLSearchParams;n?.showHidden&&s.set("showHidden","1");const i=s.toString(),r=`/files/markdown-list${i?`?${i}`:""}`;return I(q(r,e))}function Yd(e,n,s,i,r){return I(q(`/tasks/${e}/documents/${n}`,r),{method:"PUT",body:JSON.stringify({content:s,author:i?.author,metadata:i?.metadata})})}function my(e,n,s){return I(q(`/tasks/${e}/documents/${n}`,s),{method:"DELETE"})}function hy(e,n,s){return I(q(`/tasks/${e}/steer`,s),{method:"POST",body:JSON.stringify({text:n})})}function py(e,n,s){return I(q(`/tasks/${e}/spec/revise`,s),{method:"POST",body:JSON.stringify({feedback:n})})}function fy(e,n){return I(q(`/tasks/${e}/spec/rebuild`,n),{method:"POST"})}function gy(e,n,s){return I(q(`/tasks/${e}/refine`,s),{method:"POST",body:JSON.stringify({feedback:n})})}function hs(){return I("/models")}function by(){return I("/usage")}function xy(){return I("/providers/claude-cli/status")}async function w$(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return I(`/providers/hermes/status${n}`)}async function N$(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return(await I(`/providers/hermes/profiles${n}`)).profiles??[]}async function S$(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return I(`/providers/openclaw/status${n}`)}async function C$(e){const n=new URLSearchParams({apiUrl:e.apiUrl});return e.apiKey&&n.set("apiKey",e.apiKey),I(`/providers/paperclip/status?${n.toString()}`)}async function E$(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 M$(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 _$(e){return I("/providers/paperclip/cli-mint-key",{method:"POST",body:JSON.stringify(e)})}async function A$(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 R$(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 T$(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 P$(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 vy(e){return I("/auth/claude-cli",{method:"POST",body:JSON.stringify({enabled:e})})}async function yy(){const n=(await I("/custom-providers")).map(s=>({id:s.id,name:s.name,baseUrl:s.baseUrl,api:s.apiType==="anthropic-compatible"?"anthropic-messages":"openai-completions",apiKey:s.apiKey,models:(s.models??[]).map(i=>({id:i.id,name:i.name}))}));return Object.assign(n,{providers:n})}function jy(e){return I("/custom-providers",{method:"POST",body:JSON.stringify(e)})}function I$(e,n){const s=n,i={...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(i)})}function $$(e){return I(`/custom-providers/${encodeURIComponent(e)}`,{method:"DELETE"})}function ky(e){const n=e.api==="anthropic-messages"?"anthropic-compatible":"openai-compatible";return jy({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}))})}function jr(){return I("/auth/status")}function wy(e){return I("/auth/login",{method:"POST",body:JSON.stringify({provider:e,origin:window.location.origin})})}function Ny(e){return I("/auth/logout",{method:"POST",body:JSON.stringify({provider:e})})}function Sy(e,n){return I("/auth/api-key",{method:"POST",body:JSON.stringify({provider:e,apiKey:n})})}function Cy(e){return I("/auth/api-key",{method:"DELETE",body:JSON.stringify({provider:e})})}function Ey(e,n,s,i){return I("/github/issues/fetch",{method:"POST",body:JSON.stringify({owner:e,repo:n,limit:s,labels:i})})}function My(e,n,s,i){return I(q("/github/issues/import",i),{method:"POST",body:JSON.stringify({owner:e,repo:n,issueNumber:s})})}function _y(e,n,s){return I("/github/pulls/fetch",{method:"POST",body:JSON.stringify({owner:e,repo:n,limit:s})})}function Ay(e,n,s,i){return I(q("/github/pulls/import",i),{method:"POST",body:JSON.stringify({owner:e,repo:n,prNumber:s})})}function Ry(e){return I(q("/git/remotes",e))}function Ty(e){return I(q("/git/remotes/detailed",e))}function Py(e,n,s){return I(q("/git/remotes",s),{method:"POST",body:JSON.stringify({name:e,url:n})})}function Iy(e,n){return I(q(`/git/remotes/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function $y(e,n,s){return I(q(`/git/remotes/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify({newName:n})})}function Dy(e,n,s){return I(q(`/git/remotes/${encodeURIComponent(e)}/url`,s),{method:"PUT",body:JSON.stringify({url:n})})}function Ly(e,n,s){return I(q(`/tasks/${e}/pr/create`,s),{method:"POST",body:JSON.stringify(n)})}function zy(e,n){return I(q(`/tasks/${e}/pr/refresh`,n),{method:"POST"})}async function Fy(e,n){return(await I(q("/github/batch/status",n),{method:"POST",body:JSON.stringify({taskIds:e})})).results}function Gr(e,n,s,i){return I(q("/terminal/sessions",i),{method:"POST",body:JSON.stringify({cwd:e,cols:n,rows:s})})}function Qd(e,n){return I(q(`/terminal/sessions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function Oy(e){return I(q("/terminal/sessions",e))}function Os(e){return I(q("/git/status",e))}function Uy(e,n){const s=e?`?limit=${e}`:"";return I(q(`/git/commits${s}`,n))}function Co(e,n){return I(q(`/git/commits/${e}/diff`,n))}function By(e){return I(q("/git/commits/ahead",e))}function Hy(e,n,s,i){const r=new URLSearchParams;r.set("limit",String(s));const o=r.size>0?`?${r.toString()}`:"";return I(q(`/git/remotes/${encodeURIComponent(e)}/commits${o}`,i))}function Oa(e){return I(q("/git/branches",e))}function qy(e,n,s){const i=`?limit=${n}`;return I(q(`/git/branches/${encodeURIComponent(e)}/commits${i}`,s))}function Vy(e){return I(q("/git/worktrees",e))}function Wy(e,n,s){return I(q("/git/branches",s),{method:"POST",body:JSON.stringify({name:e,base:n})})}function Ky(e,n){return I(q(`/git/branches/${encodeURIComponent(e)}/checkout`,n),{method:"POST"})}function Xd(e,n,s){const i=n?"?force=true":"";return I(q(`/git/branches/${encodeURIComponent(e)}${i}`,s),{method:"DELETE"})}function Gy(e,n){return I(q("/git/fetch",n),{method:"POST",body:JSON.stringify({remote:e})})}function Jy(e){return I(q("/git/pull",e),{method:"POST"})}function Yy(e){return I(q("/git/push",e),{method:"POST"})}function Jr(e){return I(q("/git/stashes",e))}function Qy(e,n){return I(q("/git/stashes",n),{method:"POST",body:JSON.stringify({message:e})})}function Xy(e,n,s){return I(q(`/git/stashes/${e}/apply`,s),{method:"POST",body:JSON.stringify({drop:n})})}function Zy(e,n){return I(q(`/git/stashes/${e}`,n),{method:"DELETE"})}function ej(e,n,s){const i=new URLSearchParams;return i.set("path",e),i.set("staged",String(n)),I(q(`/git/diff/file?${i.toString()}`,s))}function na(e){return I(q("/git/changes",e))}function Zd(e,n){return I(q("/git/stage",n),{method:"POST",body:JSON.stringify({files:e})})}function tj(e,n){return I(q("/git/unstage",n),{method:"POST",body:JSON.stringify({files:e})})}function eu(e,n){return I(q("/git/commit",n),{method:"POST",body:JSON.stringify({message:e})})}function nj(e,n){return I(q("/git/discard",n),{method:"POST",body:JSON.stringify({files:e})})}function sj(e){return I(q("/workspaces",e))}function ij(e,n,s){const i=new URLSearchParams({workspace:e});return n&&i.set("path",n),s&&i.set("projectId",s),I(`/files?${i.toString()}`)}function aj(e,n,s){const i=new URLSearchParams({workspace:e});return s&&i.set("projectId",s),I(`/files/${encodeURIComponent(n)}?${i.toString()}`)}function rj(e,n,s,i){const r=new URLSearchParams({workspace:e});return i&&r.set("projectId",i),I(`/files/${encodeURIComponent(n)}?${r.toString()}`,{method:"POST",body:JSON.stringify({content:s})})}function oj(e,n,s){const i=new URLSearchParams({q:e});return n&&i.set("workspace",n),s&&i.set("projectId",s),I(`/files/search?${i.toString()}`)}function lj(e,n,s,i){const r=new URLSearchParams({workspace:e});return i&&r.set("projectId",i),I(`/files/${encodeURIComponent(n)}/copy?${r.toString()}`,{method:"POST",body:JSON.stringify({destination:s})})}function cj(e,n,s,i){const r=new URLSearchParams({workspace:e});return i&&r.set("projectId",i),I(`/files/${encodeURIComponent(n)}/move?${r.toString()}`,{method:"POST",body:JSON.stringify({destination:s})})}function dj(e,n,s){const i=new URLSearchParams({workspace:e});return s&&i.set("projectId",s),I(`/files/${encodeURIComponent(n)}/delete?${i.toString()}`,{method:"POST"})}function uj(e,n,s,i){const r=new URLSearchParams({workspace:e});return i&&r.set("projectId",i),I(`/files/${encodeURIComponent(n)}/rename?${r.toString()}`,{method:"POST",body:JSON.stringify({newName:s})})}function bp(e,n,s){const i=new URLSearchParams({workspace:e});return s&&i.set("projectId",s),`/api/files/${encodeURIComponent(n)}/download?${i.toString()}`}function mj(e,n,s){const i=new URLSearchParams({workspace:e});return s&&i.set("projectId",s),`/api/files/${encodeURIComponent(n)}/download-zip?${i.toString()}`}function hj(e,n,s){return I(q("/planning/start-streaming",n),{method:"POST",body:JSON.stringify({initialPlan:e,planningModelProvider:s?.planningModelProvider,planningModelId:s?.planningModelId})})}function pj(e,n,s,i){return I(q("/planning/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:i})})}function fj(e,n,s){return I(q(`/planning/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function gj(e,n,s){return I(q(`/planning/${encodeURIComponent(e)}/stop`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function xp(e,n,s){return I(q("/planning/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}function D$(e,n,s,i){return I(q("/agents/onboarding/start-streaming",s),{method:"POST",body:JSON.stringify({intent:e,context:n,planningModelProvider:i?.planningModelProvider,planningModelId:i?.planningModelId})})}function L$(e,n,s){return I(q("/agents/onboarding/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n})})}function z$(e,n){return I(q(`/agents/onboarding/${encodeURIComponent(e)}/retry`,n),{method:"POST"})}function F$(e,n){return I(q(`/agents/onboarding/${encodeURIComponent(e)}/stop`,n),{method:"POST"})}function O$(e,n){return I(q("/agents/onboarding/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e})})}function bj(e,n,s){return I(q("/planning/create-task",s),{method:"POST",body:JSON.stringify(n?{sessionId:e,summary:n}:{sessionId:e})})}function xj(e,n,s){return I(q("/planning/start-breakdown",s),{method:"POST",body:JSON.stringify(n?{sessionId:e,summary:n}:{sessionId:e})})}function vj(e,n,s){return I(q("/planning/create-tasks",s),{method:"POST",body:JSON.stringify({planningSessionId:e,subtasks:n})})}const Ic=new Set;if(typeof window<"u"){const e=()=>{for(const n of Array.from(Ic))try{n.close()}catch{}};window.addEventListener("pagehide",e),window.addEventListener("beforeunload",e)}function yj(e,n){if(n===null||n<=0)return e;const s=e.includes("?")?"&":"?";return`${e}${s}lastEventId=${encodeURIComponent(String(n))}`}function Ma(e,n,s={}){const i=s.maxReconnectAttempts??10;let r=null,o=!1,l=0,c=null,u=null,d=!1;const m=p=>{const g=p.lastEventId;if(!g)return!0;const b=Number.parseInt(g,10);return Number.isFinite(b)?u!==null&&b<=u?!1:(u=b,!0):!0},h=()=>{if(o)return;const p=yj(e,u),g=new EventSource(ii(p));r=g,g.onopen=()=>{l=0,d=!1,s.onConnectionStateChange?.("connected"),n.onOpen?.()},g.onmessage=b=>{const v=b;m(v)&&n.onMessage?.(v)};for(const[b,v]of Object.entries(n.events??{}))g.addEventListener(b,x=>{const y=x;m(y)&&v(y)});g.onerror=()=>{if(o||r!==g)return;if(g.readyState===EventSource.CONNECTING){d||(d=!0,s.onConnectionStateChange?.("reconnecting"));return}if(g.close(),l>=i){s.onFatalError?.("Connection lost");return}d=!0,s.onConnectionStateChange?.("reconnecting"),l+=1;const v=Math.min(1e3*2**(l-1),3e4);c=setTimeout(()=>{c=null,h()},v)}};h();const f={close:()=>{o=!0,c&&(clearTimeout(c),c=null),r?.close(),Ic.delete(f)},isConnected:()=>!o&&r?.readyState===EventSource.OPEN};return Ic.add(f),f}function tu(e){const n=typeof e.source=="string"&&e.source.trim().length>0?e.source.trim():"root",s=n==="root"?".":n,i=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:i,packagePath:r,confidence:o,cwd:s,source:n,workspaceName:typeof e.packageName=="string"?e.packageName:void 0,label:`${c} · ${i} (${l})`}}function ba(e){const n=e.status,s=n==="starting"||n==="running"||n==="failed"||n==="stopped"?n:"stopped",i=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:i,detectedUrl:typeof e.detectedUrl=="string"?e.detectedUrl:i,detectedPort:e.detectedPort,manualPreviewUrl:r,manualUrl:typeof e.manualUrl=="string"?e.manualUrl:r,logs:Array.isArray(e.logHistory)?e.logHistory:[],exitCode:e.exitCode}}function jj(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 kj(e){const s=(Array.isArray(e.lines)?e.lines:[]).map((i,r)=>jj(i,r+1));return{lines:s,totalLines:typeof e.totalLines=="number"&&Number.isFinite(e.totalLines)?e.totalLines:s.length}}function wj(e,n){const s=typeof n.maxLines=="number"&&Number.isFinite(n.maxLines)?Math.max(1,Math.floor(n.maxLines)):100,i=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((d,m)=>({id:m+1,text:d,stream:"stdout",timestamp:""}));if(r!==null)return{lines:l.filter(d=>d.id>r).slice(0,s),totalLines:o};const c=Math.max(o-i,0),u=Math.max(c-s,0);return{lines:l.slice(u,c),totalLines:o}}function nu(e){return Array.isArray(e)?e.map(tu):(e.candidates??[]).map(tu)}async function Nj(e){try{const n=await I(q("/dev-server/candidates",e));return nu(n)}catch(n){if(n instanceof Error&&/\/dev-server\/candidates/.test(n.message)){const s=await I(q("/dev-server/detect",e));return nu(s)}throw n}}function cd(e){return I(q("/dev-server/status",e)).then(ba)}async function U$(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 i=s.size>0?`?${s.toString()}`:"";try{const r=await I(q(`/dev-server/logs/history${i}`,n));return kj(r)}catch(r){if(r instanceof Error&&/\/dev-server\/logs\/history/.test(r.message)){const o=await cd(n);return wj(o.logs,e)}throw r}}function Sj(e,n){const s=e.cwd??e.packagePath??".",i=e.scriptName;return I(q("/dev-server/start",n),{method:"POST",body:JSON.stringify({command:e.command,scriptName:i,scriptId:i,cwd:s,packagePath:e.packagePath})}).then(ba)}function Cj(e){return I(q("/dev-server/stop",e),{method:"POST"}).then(ba)}function Ej(e){return I(q("/dev-server/restart",e),{method:"POST"}).then(ba)}async function Mj(e,n){const s=typeof e=="string"?{url:e}:e;try{const i=await I(q("/dev-server/preview-url",n),{method:"POST",body:JSON.stringify(s)});return ba(i)}catch(i){if(i instanceof Error&&/\/dev-server\/preview-url/.test(i.message)){const r=await I(q("/dev-server/preview-url",n),{method:"PUT",body:JSON.stringify(s)});return ba(r)}throw i}}function B$(e){return rs(q("/dev-server/logs/stream",e))}async function H$(e){try{return(await I(q("/devserver",e))).sessions??[]}catch{try{const n=await cd(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(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}]}catch{return[]}}}async function q$(e,n){try{return await I(q(`/devserver/${encodeURIComponent(e)}`,n))}catch{try{const s=await cd(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(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}:null}catch{return null}}}async function V$(e,n){try{return await I(q(`/devserver/${encodeURIComponent(e)}/start`,n),{method:"POST"})}catch{const s=await Sj({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(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}}async function W$(e,n){try{return await I(q(`/devserver/${encodeURIComponent(e)}/stop`,n),{method:"POST"})}catch{const s=await Cj(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(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}}async function K$(e,n){try{return await I(q(`/devserver/${encodeURIComponent(e)}/restart`,n),{method:"POST"})}catch{const s=await Ej(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(i=>({timestamp:new Date().toISOString(),stream:i.startsWith("[stderr]")?"stderr":"stdout",text:i.replace(/^\[stderr\]\s*/,"")}))}}}async function G$(e,n,s){try{const i=await I(q(`/devserver/${encodeURIComponent(e)}/preview`,s),{method:"POST",body:JSON.stringify({url:n})});return{url:i.url??null,source:i.source??null}}catch{const i=await Mj({url:n},s);return{url:i.previewUrl??i.manualUrl??null,source:"manual"}}}async function J$(e){try{return(await I(q("/devserver/detect",e))).candidates??[]}catch{try{return(await Nj(e)).map(s=>({name:s.name,command:s.command,cwd:s.cwd,scriptName:s.scriptName,packagePath:s.packagePath}))}catch{return[]}}}function Y$(e,n){return rs(q(`/devserver/${encodeURIComponent(e)}/logs/stream`,n))}function Tr(e,n,s=25e3){const i=setInterval(()=>{cw(e,n).catch(()=>{})},s);return{stop:()=>{clearInterval(i)}}}function _j(e,n){return rs(q(`/planning/${encodeURIComponent(e)}/stream`,n))}function Aj(e,n){return rs(q(`/agents/onboarding/${encodeURIComponent(e)}/stream`,n))}function Q$(e,n,s,i){const r=Aj(e,n),o=Ma(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:i?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:l=>s.onError?.(l)});return{close:o.close,isConnected:o.isConnected}}function Rj(e,n,s,i){const r=_j(e,n);let o=null,l=null;const c=()=>{o?.stop(),o=null},u=Ma(r,{onOpen:()=>{c(),o=Tr(e,n)},onMessage:d=>{d.data.startsWith(":")},events:{thinking:d=>{try{s.onThinking?.(JSON.parse(d.data))}catch{s.onThinking?.(d.data)}},question:d=>{try{s.onQuestion?.(JSON.parse(d.data))}catch(m){console.error("[planning] Failed to parse question event:",m)}},summary:d=>{try{s.onSummary?.(JSON.parse(d.data))}catch(m){console.error("[planning] Failed to parse summary event:",m)}},error:d=>{try{const m=JSON.parse(d.data);s.onError?.(m.message||m)}catch{s.onError?.(d.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:i?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:d=>{c(),s.onError?.(d)}});return l={close:()=>{c(),u.close()},isConnected:u.isConnected},l}function Pr(e,n){const s=new URLSearchParams;n?.scope&&s.set("scope",n.scope),n?.projectId&&s.set("projectId",n.projectId);const i=s.toString();return i?`${e}?${i}`:e}function Tj(e){return I(Pr("/routines",e))}function Pj(e,n){return I(Pr("/routines",n),{method:"POST",body:JSON.stringify(e)})}function su(e,n,s){return I(Pr(`/routines/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}async function Ij(e,n){await I(Pr(`/routines/${e}`,n),{method:"DELETE"})}function $j(e,n){return I(Pr(`/routines/${e}/trigger`,n),{method:"POST"})}function iu(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 Dj(e){const n=q("/activity",e);return I(n,{method:"DELETE"})}function Go(e){return I(q("/workflow-steps",e))}function au(e,n){return I(q("/workflow-steps",n),{method:"POST",body:JSON.stringify(e)})}function Lj(e,n,s){return I(q(`/workflow-steps/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}function zj(e,n){return I(q(`/workflow-steps/${e}`,n),{method:"DELETE"})}function ru(e,n){return I(q(`/workflow-steps/${e}/refine`,n),{method:"POST"})}function Fj(e,n){return I(q(`/tasks/${encodeURIComponent(e)}/workflow-results`,n))}function Oj(){return I("/workflow-step-templates")}function Uj(e,n){return I(q(`/workflow-step-templates/${encodeURIComponent(e)}/create`,n),{method:"POST"})}function kr(e){return I(q("/scripts",e))}function Bj(e,n,s){return I(q("/scripts",s),{method:"POST",body:JSON.stringify({name:e,command:n})})}function Hj(e,n){return I(q(`/scripts/${encodeURIComponent(e)}`,n),{method:"DELETE"})}async function vp(e,n,s){return(await I(q("/ai/refine-text",s),{method:"POST",body:JSON.stringify({text:e,type:n})})).refined}const Yr={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 yp(e){if(!(e instanceof Error))return Yr.NETWORK;const n=e.message.toLowerCase();return n.includes("rate limit")||n.includes("429")?Yr.RATE_LIMIT:n.includes("invalid")&&n.includes("type")?Yr.INVALID_TYPE:n.startsWith("text must")||n.includes("text is required")||n.includes("type is required")?e.message:Yr.NETWORK}function qj(e,n){return I(q("/subtasks/start-streaming",n),{method:"POST",body:JSON.stringify({description:e})})}function Vj(e,n,s){return I(q(`/subtasks/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function Wj(e,n){return rs(q(`/subtasks/${encodeURIComponent(e)}/stream`,n))}function Kj(e,n,s,i){let r=null,o=null;const l=()=>{r?.stop(),r=null},c=Ma(Wj(e,n),{onOpen:()=>{l(),r=Tr(e,n)},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},subtasks:u=>{try{s.onSubtasks?.(JSON.parse(u.data))}catch(d){console.error("[subtasks] Failed to parse subtasks event:",d)}},error:u=>{try{const d=JSON.parse(u.data),m=typeof d=="string"&&d.length>0?d:null;s.onError?.(m||"Stream error")}catch{s.onError?.("Stream error")}o?.close()},complete:()=>{s.onComplete?.(),o?.close()}}},{maxReconnectAttempts:i?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{l(),s.onError?.(u)}});return o={close:()=>{l(),c.close()},isConnected:c.isConnected},o}function Gj(e,n,s,i){return I(q("/subtasks/create-tasks",i),{method:"POST",body:JSON.stringify({sessionId:e,parentTaskId:s,subtasks:n.map(r=>({tempId:r.id,title:r.title,description:r.description,size:r.suggestedSize,dependsOn:r.dependsOn}))})})}function jp(e,n,s){return I(q("/subtasks/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}function q(e,n){if(!n)return e;const s=e.includes("?")?"&":"?";return`${e}${s}projectId=${encodeURIComponent(n)}`}function Jj(e,n,s){if(!n||n===s)return e;const i="/api",r=e.startsWith(i)?e.slice(i.length):e;return`/proxy/${encodeURIComponent(n)}${r}`}function Jo(e,n){const{nodeId:s,localNodeId:i,...r}=n??{},o=Jj(e,s,i);return I(o,r)}function _a(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 i=s.size>0?`?${s.toString()}`:"";return I(`/agents${i}`)}function kp(e,n){return I(q(`/agents/${encodeURIComponent(e)}`,n))}function Yj(e,n){return I(q("/agents",n),{method:"POST",body:JSON.stringify(e)})}function Qj(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function X$(e,n){return I(q(`/agents/${encodeURIComponent(e)}/upgrade-heartbeat-procedure`,n),{method:"POST"})}function Z$(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/instructions`,s),{method:"PATCH",body:JSON.stringify(n)})}function eD(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/soul`,s),{method:"PATCH",body:JSON.stringify({soul:n})})}function tD(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/memory`,s),{method:"PATCH",body:JSON.stringify({memory:n})})}function nD(e,n){return I(q(`/agents/${encodeURIComponent(e)}/memory/files`,n))}function sD(e,n,s){const i=`path=${encodeURIComponent(n)}`;return I(q(`/agents/${encodeURIComponent(e)}/memory/file?${i}`,s))}function iD(e,n,s,i){return I(q(`/agents/${encodeURIComponent(e)}/memory/file`,i),{method:"PUT",body:JSON.stringify({path:n,content:s})})}function Xj(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/state`,s),{method:"POST",body:JSON.stringify({state:n})})}function Zj(e,n){return I(q(`/agents/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function aD(e,n,s){const i=new URLSearchParams;i.set("limit",String(n)),s&&i.set("projectId",s);const r=i.size>0?`?${i.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/runs${r}`)}function rD(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/runs/${encodeURIComponent(n)}`,s))}function oD(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/runs/${encodeURIComponent(n)}/logs`,s))}function lD(e,n,s){const i=s?.source??"manual",r=s?.triggerDetail??"Agent activated via dashboard";return I(q(`/agents/${encodeURIComponent(e)}/runs`,n),{method:"POST",body:JSON.stringify({source:i,triggerDetail:r})})}function cD(e,n){return I(q(`/agents/${encodeURIComponent(e)}/runs/stop`,n),{method:"POST"})}function ek(e){return I(q("/agents/stats",e))}function dD(e,n){return I(q(`/agents/${encodeURIComponent(e)}/chain-of-command`,n))}function uD(e,n){const s=new URLSearchParams;e&&s.set("projectId",e),n?.includeEphemeral&&s.set("includeEphemeral","true");const i=s.toString();return I(`/agents/org-tree${i?`?${i}`:""}`)}function mD(e,n){return I(q(`/agents/${encodeURIComponent(e)}/children`,n)).catch(s=>{if(s.message.includes("not found"))return[];throw s})}function ou(e,n,s){return I(q(`/tasks/${encodeURIComponent(e)}/assign`,s),{method:"PATCH",body:JSON.stringify({agentId:n})})}function hD(e,n){return I(q(`/agents/${encodeURIComponent(e)}/tasks`,n))}function pD(){return I("/agents/companies")}function fD(e,n){return I(q("/agents/generate/start",n),{method:"POST",body:JSON.stringify({role:e})})}function gD(e,n){return I(q("/agents/generate/spec",n),{method:"POST",body:JSON.stringify({sessionId:e})})}function bD(e,n){return I(q(`/agents/generate/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function xD(e){return I(q("/backups",e))}function vD(e){return I(q("/backups",e),{method:"POST"})}function yD(e,n){const s=q("/settings/export",n),i=`${s}${s.includes("?")?"&":"?"}scope=${encodeURIComponent(e)}`;return I(i)}function jD(e,n,s){return I(q("/settings/import",s),{method:"POST",body:JSON.stringify({data:e,scope:n?.scope??"both",merge:n?.merge??!0})})}function lu(){return I("/projects/across-nodes")}function mr(e,n){I("/_perf/dashboard-load",{method:"POST",body:JSON.stringify({source:e,message:n})}).catch(()=>{})}function Eo(){return I("/nodes")}function tk(e){return I("/nodes",{method:"POST",body:JSON.stringify(e)})}function nk(e,n){return I(`/nodes/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})}function sk(e){return I(`/nodes/${encodeURIComponent(e)}`,{method:"DELETE"})}async function ik(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()}}function kD(e,n,s,i){const r=s&&s!==i?s:void 0,o=new URLSearchParams;e&&o.set("path",e),n&&o.set("showHidden","true"),r&&o.set("nodeId",r);const l=ga();l&&o.set("fn_token",l);const c=o.toString(),u=`/browse-directory${c?`?${c}`:""}`;return I(u)}function ak(e){return I("/projects",{method:"POST",body:JSON.stringify(e)})}function wp(e){return I(`/projects/${encodeURIComponent(e)}`,{method:"DELETE"})}function cu(e){return I(`/projects/${encodeURIComponent(e)}/health`)}function rk(e){return I(q("/executor/stats",e))}function ok(e){return I(q("/system-stats",e))}function lk(e){return I(q("/kill-vitest",e),{method:"POST"})}function du(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 ck(e){return I(`/projects/${encodeURIComponent(e)}/pause`,{method:"POST"})}function dk(e){return I(`/projects/${encodeURIComponent(e)}/resume`,{method:"POST"})}function wD(){return I("/global-concurrency")}function ND(e){return I("/global-concurrency",{method:"PUT",body:JSON.stringify(e)})}function uk(e,n){return I(`/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})}function Np(e,n,s){const i=new URLSearchParams;n&&i.set("worktree",n),s&&i.set("projectId",s);const r=i.size>0?`?${i.toString()}`:"";return I(`/tasks/${encodeURIComponent(e)}/diff${r}`)}function mk(e){return I(q("/missions",e))}function hk(e,n){return I(q("/missions",n),{method:"POST",body:JSON.stringify(e)})}function Sp(e,n){return I(q(`/missions/${encodeURIComponent(e)}`,n))}function pk(e,n,s){return I(q(`/missions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function fk(e,n){return I(q(`/missions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function gk(e,n,s){const i=new URLSearchParams;i.set("limit",String(n.limit)),n?.offset!==void 0&&i.set("offset",String(n.offset));const r=i.size>0?`?${i.toString()}`:"";return I(q(`/missions/${encodeURIComponent(e)}/events${r}`,s))}function bk(e){return I(q("/missions/health",e))}function xk(e,n,s){return I(q(`/missions/${encodeURIComponent(e)}/milestones`,s),{method:"POST",body:JSON.stringify(n)})}function vk(e,n,s){return I(q(`/missions/milestones/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function yk(e,n){return I(q(`/missions/milestones/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function jk(e,n,s){return I(q(`/missions/milestones/${encodeURIComponent(e)}/slices`,s),{method:"POST",body:JSON.stringify(n)})}function kk(e,n,s){return I(q(`/missions/slices/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function wk(e,n){return I(q(`/missions/slices/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function Nk(e,n){return I(q(`/missions/slices/${encodeURIComponent(e)}/activate`,n),{method:"POST"})}function Sk(e,n,s){return I(q(`/missions/slices/${encodeURIComponent(e)}/features`,s),{method:"POST",body:JSON.stringify(n)})}function Ck(e,n,s){return I(q(`/missions/features/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function Ek(e,n){return I(q(`/missions/features/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function Mk(e,n,s){return I(q(`/missions/features/${encodeURIComponent(e)}/link-task`,s),{method:"POST",body:JSON.stringify({taskId:n})})}function _k(e,n){return I(q(`/missions/features/${encodeURIComponent(e)}/unlink-task`,n),{method:"POST"})}function Ak(e,n,s,i){return I(q(`/missions/features/${encodeURIComponent(e)}/triage`,i),{method:"POST",body:JSON.stringify({taskTitle:n,taskDescription:s})})}function Rk(e,n){return I(q(`/missions/slices/${encodeURIComponent(e)}/triage-all`,n),{method:"POST"})}function bl(e,n){return I(q(`/missions/milestones/${encodeURIComponent(e)}/assertions`,n))}function Tk(e,n,s){return I(q(`/missions/milestones/${encodeURIComponent(e)}/assertions`,s),{method:"POST",body:JSON.stringify(n)})}function Pk(e,n,s){return I(q(`/missions/assertions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function Ik(e,n,s){return I(q(`/missions/features/${encodeURIComponent(e)}/assertions/${encodeURIComponent(n)}/link`,s),{method:"POST"})}function $k(e,n,s){return I(q(`/missions/features/${encodeURIComponent(e)}/assertions/${encodeURIComponent(n)}/unlink`,s),{method:"POST"})}function Dk(e,n){return I(q(`/missions/assertions/${encodeURIComponent(e)}/features`,n))}function xl(e,n){return I(q(`/missions/milestones/${encodeURIComponent(e)}/validation`,n))}function uu(e,n){return I(q(`/missions/milestones/${encodeURIComponent(e)}/validation-telemetry`,n))}function Lk(e,n){return I(q(`/missions/features/${encodeURIComponent(e)}/validate`,n),{method:"POST"})}function mu(e,n){return I(q(`/missions/features/${encodeURIComponent(e)}/validation-loop`,n))}function zk(e,n,s){const i=new URLSearchParams;i.set("limit",String(n.limit)),n?.offset!==void 0&&i.set("offset",String(n.offset));const r=i.size>0?`?${i.toString()}`:"";return I(q(`/missions/features/${encodeURIComponent(e)}/validation-runs${r}`,s)).then(o=>o.runs)}function Fk(e,n){return I(q(`/missions/validation-runs/${encodeURIComponent(e)}`,n))}function Ok(e,n){return I(q(`/missions/${encodeURIComponent(e)}/resume`,n),{method:"POST"})}function Uk(e,n){return I(q(`/missions/${encodeURIComponent(e)}/stop`,n),{method:"POST"})}function Bk(e,n){return I(q(`/missions/${encodeURIComponent(e)}/start`,n),{method:"POST"})}function Hk(e,n,s){return I(q(`/missions/${encodeURIComponent(e)}/autopilot`,s),{method:"PATCH",body:JSON.stringify(n)})}function qk(e,n,s){return I(q("/missions/interview/start",n),{method:"POST",body:JSON.stringify({missionTitle:e,modelProvider:s?.modelProvider,modelId:s?.modelId})})}function Vk(e,n,s,i){return I(q("/missions/interview/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:i})})}function Wk(e,n,s){return I(q(`/missions/interview/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function Cp(e,n,s){return I(q("/missions/interview/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}function Kk(e,n,s){return I(q("/missions/interview/create-mission",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function Gk(e,n,s,i){const r=rs(q(`/missions/interview/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},u=Ma(r,{onOpen:()=>{c(),o=Tr(e,n)},onMessage:d=>{d.data.startsWith(":")},events:{thinking:d=>{try{s.onThinking?.(JSON.parse(d.data))}catch{s.onThinking?.(d.data)}},question:d=>{try{s.onQuestion?.(JSON.parse(d.data))}catch(m){console.error("[mission-interview] Failed to parse question event:",m)}},summary:d=>{try{s.onSummary?.(JSON.parse(d.data))}catch(m){console.error("[mission-interview] Failed to parse summary event:",m)}},error:d=>{try{const m=JSON.parse(d.data);s.onError?.(m.message||m)}catch{s.onError?.(d.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:i?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:d=>{c(),s.onError?.(d)}});return l={close:()=>{c(),u.close()},isConnected:u.isConnected},l}function Ir(e,n,s){return q(`/missions/milestones/${encodeURIComponent(e)}/interview${n}`,s)}function $r(e,n,s){return q(`/missions/slices/${encodeURIComponent(e)}/interview${n}`,s)}function Jk(e,n){return I(Ir(e,"/start",n),{method:"POST"})}function Yk(e,n,s,i){return I(Ir(e,"/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:i})})}function Qk(e,n,s,i){const r=rs(Ir(e,`/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},u=Ma(r,{onOpen:()=>{c(),o=Tr(e,n)},onMessage:d=>{d.data.startsWith(":")},events:{thinking:d=>{try{s.onThinking?.(JSON.parse(d.data))}catch{s.onThinking?.(d.data)}},question:d=>{try{s.onQuestion?.(JSON.parse(d.data))}catch(m){console.error("[milestone-interview] Failed to parse question event:",m)}},summary:d=>{try{s.onSummary?.(JSON.parse(d.data))}catch(m){console.error("[milestone-interview] Failed to parse summary event:",m)}},error:d=>{try{const m=JSON.parse(d.data);s.onError?.(m.message||m)}catch{s.onError?.(d.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:i?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:d=>{c(),s.onError?.(d)}});return l={close:()=>{c(),u.close()},isConnected:u.isConnected},l}function Xk(e,n,s){return I(Ir(e,"/apply",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function Zk(e,n){return I(Ir(e,"/skip",n),{method:"POST"})}function ew(e,n){return I($r(e,"/start",n),{method:"POST"})}function tw(e,n,s,i){return I($r(e,"/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:i})})}function nw(e,n,s,i){const r=rs($r(e,`/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},u=Ma(r,{onOpen:()=>{c(),o=Tr(e,n)},onMessage:d=>{d.data.startsWith(":")},events:{thinking:d=>{try{s.onThinking?.(JSON.parse(d.data))}catch{s.onThinking?.(d.data)}},question:d=>{try{s.onQuestion?.(JSON.parse(d.data))}catch(m){console.error("[slice-interview] Failed to parse question event:",m)}},summary:d=>{try{s.onSummary?.(JSON.parse(d.data))}catch(m){console.error("[slice-interview] Failed to parse summary event:",m)}},error:d=>{try{const m=JSON.parse(d.data);s.onError?.(m.message||m)}catch{s.onError?.(d.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:i?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:d=>{c(),s.onError?.(d)}});return l={close:()=>{c(),u.close()},isConnected:u.isConnected},l}function sw(e,n,s){return I($r(e,"/apply",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function iw(e,n){return I($r(e,"/skip",n),{method:"POST"})}async function aw(e,n){try{return await I(q(`/missions/features/${encodeURIComponent(e)}/preview-description`,n),{method:"POST"})}catch{throw new Error("Preview endpoint not available")}}function SD(e){return I(q("/roadmaps",e))}function CD(e,n){return I(q("/roadmaps",n),{method:"POST",body:JSON.stringify(e)})}function ED(e,n){return I(q(`/roadmaps/${encodeURIComponent(e)}`,n))}function MD(e,n,s){return I(q(`/roadmaps/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function _D(e,n){return I(q(`/roadmaps/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function AD(e,n,s){return I(q(`/roadmaps/${encodeURIComponent(e)}/milestones`,s),{method:"POST",body:JSON.stringify(n)})}function RD(e,n,s){return I(q(`/roadmaps/milestones/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function TD(e,n){return I(q(`/roadmaps/milestones/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function PD(e,n,s){return I(q(`/roadmaps/milestones/${encodeURIComponent(e)}/features`,s),{method:"POST",body:JSON.stringify(n)})}function ID(e,n,s){return I(q(`/roadmaps/features/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function $D(e,n){return I(q(`/roadmaps/features/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function DD(e,n,s){return I(q(`/roadmaps/${encodeURIComponent(e)}/milestones/reorder`,s),{method:"POST",body:JSON.stringify({orderedMilestoneIds:n})})}function LD(e,n,s){return I(q(`/roadmaps/milestones/${encodeURIComponent(e)}/features/reorder`,s),{method:"POST",body:JSON.stringify({orderedFeatureIds:n})})}function zD(e,n,s,i){return I(q(`/roadmaps/features/${encodeURIComponent(e)}/move`,i),{method:"POST",body:JSON.stringify({targetMilestoneId:n,targetIndex:s})})}function FD(e,n){return I(q(`/roadmaps/${encodeURIComponent(e)}/handoff`,n))}function OD(e,n,s,i){return I(q(`/roadmaps/${encodeURIComponent(e)}/suggestions/milestones`,i),{method:"POST",body:JSON.stringify({goalPrompt:n.trim(),...s!==void 0?{count:s}:{}})})}function UD(e,n,s){return I(q(`/roadmaps/milestones/${encodeURIComponent(e)}/suggestions/features`,s),{method:"POST",body:JSON.stringify({...n?.prompt!==void 0?{prompt:n.prompt.trim()}:{},...n?.count!==void 0?{count:n.count}:{}})})}function BD(e){return I(q("/todos",e))}function HD(e,n){const s={title:e};return I(q("/todos",n),{method:"POST",body:JSON.stringify(s)})}function qD(e,n,s){const i={title:n};return I(q(`/todos/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(i)})}function VD(e,n){return I(q(`/todos/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function WD(e,n,s){const i={text:n};return I(q(`/todos/${encodeURIComponent(e)}/items`,s),{method:"POST",body:JSON.stringify(i)})}function KD(e,n,s){const i=n;return I(q(`/todos/items/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(i)})}function GD(e,n){return I(q(`/todos/items/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function JD(e,n,s){return I(q(`/todos/${encodeURIComponent(e)}/items/reorder`,s),{method:"POST",body:JSON.stringify({itemIds:n})})}function xa(e){if(!e)return[];try{const n=JSON.parse(e);return Array.isArray(n)?n:[]}catch{return[]}}async function dd(e){const n=e?`?projectId=${encodeURIComponent(e)}`:"",s=await fetch(rs(`/ai-sessions${n}`),{headers:fi()});return s.ok?(await s.json()).sessions??[]:[]}async function hi(e){const n=await fetch(rs(`/ai-sessions/${encodeURIComponent(e)}`),{headers:fi()});return n.ok?n.json():null}async function rw(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 ow(e,n){return I(`/ai-sessions/${encodeURIComponent(e)}/lock`,{method:"DELETE",body:JSON.stringify({tabId:n})})}function lw(e,n){return I(`/ai-sessions/${encodeURIComponent(e)}/lock/force`,{method:"POST",body:JSON.stringify({tabId:n})})}async function Ep(e){await fetch(rs(`/ai-sessions/${encodeURIComponent(e)}`),{method:"DELETE",headers:fi()})}function cw(e,n){return I(q(`/ai-sessions/${encodeURIComponent(e)}/ping`,n),{method:"POST"})}function dw(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 i=s.size>0?`?${s.toString()}`:"";return I(`/messages/inbox${i}`)}function uw(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 i=s.size>0?`?${s.toString()}`:"";return I(`/messages/outbox${i}`)}function Mp(e){return I(q("/messages/unread-count",e))}function mw(e,n){return I(q("/messages",n),{method:"POST",body:JSON.stringify(e)})}function hw(e,n){return I(q(`/messages/${encodeURIComponent(e)}/read`,n),{method:"POST"})}function pw(e){return I(q("/messages/read-all",e),{method:"POST"})}function fw(e,n){return I(q(`/messages/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function gw(e,n,s){const i=`/messages/conversation/${encodeURIComponent(n)}/${encodeURIComponent(e)}`;return I(q(i,s))}function bw(e,n){return I(q(`/agents/${encodeURIComponent(e)}/mailbox`,n))}function YD(e,n,s){const i=new URLSearchParams;i.set("limit",String(n)),s&&i.set("projectId",s);const r=i.size>0?`?${i.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/reflections${r}`)}function QD(e,n){return I(q(`/agents/${encodeURIComponent(e)}/reflections`,n),{method:"POST"})}function XD(e,n,s){const i=new URLSearchParams;s&&i.set("projectId",s);const r=i.size>0?`?${i.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/performance${r}`)}function ZD(e,n,s){const i=new URLSearchParams;i.set("limit",String(n.limit)),n?.category&&i.set("category",n.category),s&&i.set("projectId",s);const r=i.size>0?`?${i.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/ratings${r}`)}function eL(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/ratings`,s),{method:"POST",body:JSON.stringify(n)})}function tL(e,n){return I(q(`/agents/${encodeURIComponent(e)}/ratings/summary`,n))}function nL(e,n,s){return I(q(`/agents/${encodeURIComponent(e)}/ratings/${encodeURIComponent(n)}`,s),{method:"DELETE"})}function sL(e,n){return I(q(`/agents/${encodeURIComponent(e)}/budget`,n))}function iL(e,n){return I(q(`/agents/${encodeURIComponent(e)}/budget/reset`,n),{method:"POST"})}async function aL(e){return I(q("/plugins",e))}async function rL(e,n){return I(q("/plugins",n),{method:"POST",body:JSON.stringify({mode:"install",...e})})}async function oL(e,n){return I(q(`/plugins/${encodeURIComponent(e)}/enable`,n),{method:"POST"})}async function lL(e,n){return I(q(`/plugins/${encodeURIComponent(e)}/disable`,n),{method:"POST"})}async function cL(e,n){return I(q(`/plugins/${encodeURIComponent(e)}`,n),{method:"DELETE"})}async function dL(e,n){return I(q(`/plugins/${encodeURIComponent(e)}/settings`,n))}async function uL(e,n,s){return I(q(`/plugins/${encodeURIComponent(e)}/settings`,s),{method:"PUT",body:JSON.stringify({settings:n})})}async function mL(e,n){return I(q(`/plugins/${encodeURIComponent(e)}/reload`,n),{method:"POST"})}async function xw(e){return I(q("/plugins/ui-slots",e))}async function hL(e){return I(q("/plugins/runtimes",e))}async function pL(e){return(await I(q("/skills/discovered",e))).skills}async function fL(e,n,s){return I(q("/skills/execution",s),{method:"PATCH",body:JSON.stringify({skillId:e,enabled:n})})}async function gL(e,n,s){const i=new URLSearchParams;e&&i.set("q",e),i.set("limit",String(n));const r=i.size>0?`?${i.toString()}`:"";return I(q(`/skills/catalog${r}`,s))}async function bL(e,n){return(await I(q(`/skills/${encodeURIComponent(e)}/content`,n))).content}function xL(e,n){const s=new URLSearchParams;e&&s.set("projectId",e);const i=s.toString();return I(`/chat/sessions${i?`?${i}`:""}`)}async function vw(e,n){const s=e.agentId.trim();if(!s)throw new Error("agentId is required");const i=e.modelProvider?.trim(),r=e.modelId?.trim();if(i&&!r||!i&&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),i&&r&&(o.set("modelProvider",i),o.set("modelId",r)),{session:(await I(`/chat/sessions?${o.toString()}`)).sessions[0]??null}}function yw(e,n){return I(q("/chat/sessions",n),{method:"POST",body:JSON.stringify(e)})}function vL(e,n,s){return I(q(`/chat/sessions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function yL(e,n){return I(q(`/chat/sessions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function hu(e,n,s){const i=new URLSearchParams;n?.limit!==void 0&&i.set("limit",String(n.limit)),n?.offset!==void 0&&i.set("offset",String(n.offset)),n?.before&&i.set("before",n.before);const r=i.toString();return I(q(`/chat/sessions/${encodeURIComponent(e)}/messages${r?`?${r}`:""}`,s))}function jw(e,n){return I(q(`/chat/sessions/${encodeURIComponent(e)}/cancel`,n),{method:"POST"})}function kw(e,n,s,i,r,o){const l=rs(q(`/chat/sessions/${encodeURIComponent(e)}/messages`,r)),c=new AbortController;let u=!1;const d=(m,h)=>{if(!(!m||!h))switch(m){case"thinking":try{s.onThinking?.(JSON.parse(h))}catch{s.onThinking?.(h)}break;case"text":try{s.onText?.(JSON.parse(h))}catch{s.onText?.(h)}break;case"tool_start":try{s.onToolStart?.(JSON.parse(h))}catch{}break;case"tool_end":try{s.onToolEnd?.(JSON.parse(h))}catch{}break;case"done":try{s.onDone?.(JSON.parse(h))}catch{s.onDone?.({messageId:""})}break;case"error":try{const f=JSON.parse(h);s.onError?.(f.message||f)}catch{s.onError?.(h||"Stream error")}break}};return(async()=>{try{const m=Array.isArray(i)&&i.length>0,h=m?(()=>{const j=new FormData;return j.append("content",n),i.forEach(N=>j.append("attachments",N)),j})():JSON.stringify({content:n}),f=await fetch(l,{method:"POST",headers:m?fi():fi({"Content-Type":"application/json"}),body:h,signal:c.signal});if(!f.ok){const j=await f.text();let N=`Request failed: ${f.status}`;try{N=JSON.parse(j).error||N}catch{}s.onError?.(N);return}if(!f.body){s.onError?.("No response body");return}s.onConnectionStateChange?.("connected");const p=f.body.getReader(),g=new TextDecoder;let b="",v="",x=[];const y=(j,N=!1)=>{b+=j;const C=b.split(`
|
|
613
|
-
`);b=C.pop()||"",N&&b.length>0&&(C.push(b),b="");for(const w of C){const _=w.endsWith("\r")?w.slice(0,-1):w;if(_.startsWith("event:"))v=_.slice(6).trim();else if(_.startsWith("data:")){const S=_.slice(5);x.push(S.startsWith(" ")?S.slice(1):S)}else if(_===""){const S=x.join(`
|
|
614
|
-
`);d(v,S),v="",x=[]}}if(N&&v&&x.length>0){const w=x.join(`
|
|
615
|
-
`);d(v,w),v="",x=[]}};for(;;){const{done:j,value:N}=await p.read();if(j){y(g.decode(),!0);break}y(g.decode(N,{stream:!0}))}}catch(m){if(m instanceof DOMException&&m.name==="AbortError"){u||s.onError?.("Connection aborted");return}if(u)return;s.onError?.(m instanceof Error?m.message:"Connection error")}})(),{close:()=>{u=!0,c.abort()},isConnected:()=>!u}}function jL(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 i=s.size>0?`?${s.toString()}`:"";return I(q(`/insights${i}`,n))}function kL(e,n){return I(q(`/insights/${encodeURIComponent(e)}/dismiss`,n),{method:"POST"})}function wL(e="manual",n,s){return I(q("/insights/run",s),{method:"POST",body:JSON.stringify({trigger:e,inputMetadata:n})})}function NL(e){return I(q("/insights/runs",e))}function SL(e,n){return I(q(`/insights/${encodeURIComponent(e)}/create-task`,n),{method:"POST"})}function CL(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 i=s.size>0?`?${s.toString()}`:"";return I(q(`/research/runs${i}`,n))}function EL(e,n){return I(q("/research/runs",n),{method:"POST",body:JSON.stringify(e)})}function ML(e,n){return I(q(`/research/runs/${encodeURIComponent(e)}`,n))}function _L(e,n){return I(q(`/research/runs/${encodeURIComponent(e)}/cancel`,n),{method:"POST"})}function AL(e,n){return I(q(`/research/runs/${encodeURIComponent(e)}/retry`,n),{method:"POST"})}function RL(e,n,s){return I(q(`/research/runs/${encodeURIComponent(e)}/export?format=${encodeURIComponent(n)}`,s))}function TL(e,n,s){return I(q(`/research/runs/${encodeURIComponent(e)}/create-task`,s),{method:"POST",body:JSON.stringify(n)})}function PL(e,n,s){return I(q(`/research/runs/${encodeURIComponent(e)}/attach-task`,s),{method:"POST",body:JSON.stringify(n)})}function ww(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 Nw({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:i}=ww(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 ${i}`,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 Sw(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Vi({status:e,showLabel:n=!1,className:s,compact:i=!1}){const r=Sw(e);return t.jsxs("span",{className:`node-health-dot${i?" 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 pu=new Map,Cw=6e4;function _p(e){const[n,s]=a.useState([]),[i,r]=a.useState(!0),[o,l]=a.useState(null),c=a.useRef(!1),u=a.useRef(!1),d=a.useCallback(m=>n.filter(h=>h.slot.slotId===m),[n]);return a.useEffect(()=>{const m=e??"default";let h=!1;async function f(){const p=pu.get(m);if(p&&Date.now()<p.expiresAt){if(h||u.current)return;s(p.slots),r(!1);return}!c.current&&r(!0),l(null);try{const b=await xw(e);if(h||u.current)return;pu.set(m,{slots:b,expiresAt:Date.now()+Cw}),s(b),c.current=!0}catch(b){if(h||u.current)return;l(b instanceof Error?b.message:"Failed to fetch UI slots"),c.current=!0}finally{!h&&!u.current&&r(!1)}}return f(),()=>{h=!0}},[e]),a.useEffect(()=>{c.current=!1,u.current=!1},[e]),a.useEffect(()=>()=>{u.current=!0},[]),a.useMemo(()=>({slots:n,getSlotsForId:d,loading:i,error:o}),[n,d,i,o])}function Yo({slotId:e,projectId:n}){const{getSlotsForId:s,loading:i,error:r}=_p(n);if(i||r||!e)return null;const o=s(e);return o.length===0?null:t.jsx(Wo,{level:"page",children:t.jsx(t.Fragment,{children:o.map(l=>t.jsx("div",{"data-plugin-slot":!0,"data-slot-id":l.slot.slotId,"data-plugin-id":l.pluginId,"data-component-path":l.slot.componentPath,"aria-label":l.slot.label},`${l.pluginId}-${l.slot.slotId}`))})})}function Ew(){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 Aa(){const[e,n]=a.useState(Ew);return a.useEffect(()=>{if(typeof window>"u")return;const s=window.matchMedia("(max-width: 768px)"),i=window.matchMedia("(min-width: 769px) and (max-width: 1024px)"),r=()=>{s.matches?n("mobile"):i.matches?n("tablet"):n("desktop")};return s.addEventListener("change",r),i.addEventListener("change",r),()=>{s.removeEventListener("change",r),i.removeEventListener("change",r)}},[]),e}function Ra(e){return e.replace(/\\/g,"/")}function ud(e){return e.replace(/[\\/]+$/g,"")}function md(e){const n=Ra(ud(e));return n?n.split("/").filter(Boolean):[]}function hd(e){const n=Ra(ud(e));if(!n)return e;const s=n.split("/").filter(Boolean);return s[s.length-1]||n}function Ap(e,n){const s=md(e);return s.length===0?Ra(e):s.slice(-2).join("/")}function Mw(e){const n=Ra(ud(e)),s=n.lastIndexOf("/");return s<0?"":n.slice(0,s+1)}function _w(e,n){return!e||e==="."?n:[...md(e),n].join("/")}function Aw(e){const n=md(e);return n.length===0?".":(n.pop(),n.length===0?".":n.join("/"))}function IL(e){const n=Ra(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 i=n.split("/").filter(Boolean);return i.map((r,o)=>({label:r,path:i.slice(0,o+1).join("/")}))}const Rp={active:{color:"var(--success)"},paused:{color:"var(--warning)"},errored:{color:"var(--color-error)"},initializing:{color:"var(--info)"}};function Rw({projects:e,currentProject:n,onViewAll:s,onSelectProject:i}){const[r,o]=a.useState(!1),l=a.useRef(null);a.useEffect(()=>{if(!r)return;const u=d=>{l.current&&!l.current.contains(d.target)&&o(!1)};return document.addEventListener("mousedown",u),()=>document.removeEventListener("mousedown",u)},[r]),a.useEffect(()=>{if(!r)return;const u=d=>{d.key==="Escape"&&o(!1)};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[r]);const c=a.useCallback(u=>{i?.(u),o(!1)},[i]);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(u=>!u),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(en,{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(u=>{const d=n?.id===u.id,m=Rp[u.status]?.color;return t.jsxs("button",{className:`project-selector-item${d?" project-selector-item--current":""}`,onClick:()=>c(u),role:"option","aria-selected":d,children:[t.jsx("span",{className:"project-selector-dot",style:{backgroundColor:m||"var(--text-muted)"}}),t.jsxs("div",{className:"project-selector-info",children:[t.jsx("span",{className:"project-selector-name",children:u.name}),t.jsx("span",{className:"project-selector-path",children:Ap(u.path)})]}),d&&t.jsx(Bn,{size:14,className:"project-selector-check"})]},u.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 fu({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 Tw({onOpenSettings:e,onOpenGitHubImport:n,onOpenPlanning:s,onResumePlanning:i,activePlanningSessionCount:r=0,onOpenUsage:o,onOpenActivityLog:l,onOpenSystemStats:c,onOpenMailbox:u,mailboxUnreadCount:d=0,onOpenSchedules:m,onOpenGitManager:h,onOpenNodes:f,showNodesButton:p,onOpenWorkflowSteps:g,onOpenScripts:b,onRunScript:v,onToggleTerminal:x,onOpenFiles:y,filesOpen:j,globalPaused:N,enginePaused:C,onToggleGlobalPause:w,onToggleEnginePause:_,view:S="board",onChangeView:z,showSkillsTab:M,showAgentsTab:T,searchQuery:U="",onSearchChange:V,projects:L=[],currentProject:R,onSelectProject:F,onViewAllProjects:W,projectId:G,isElectron:te=!1,mobileNavEnabled:E,availableNodes:$=[],currentNode:P,onSelectNode:k,isRemote:O=!1,experimentalFeatures:ne}){const we=Aa(),ie=we==="mobile",ke=ie||we==="tablet",D=ie&&E,[se,Z]=a.useState(!1),[ge,ue]=a.useState(!1),[me,ae]=a.useState(!1),[be,Ae]=a.useState(!1),[Fe,at]=a.useState(!1),[et,Ye]=a.useState(!1),[rt,Oe]=a.useState(!1),[We,oe]=a.useState(!1),[xe,ee]=a.useState(!1),[Re,Ue]=a.useState(!1),[pe,Me]=a.useState(!1),[ze,tt]=a.useState({}),[ye,de]=a.useState(!1),[Ie,fe]=a.useState(-1),[_e,Ge]=a.useState(null),[Pe,ft]=a.useState({}),[Y,le]=a.useState(!1),ve=a.useRef(null),nt=a.useRef(null),Q=a.useRef(null),Je=a.useRef(null),ut=a.useRef(null),ht=a.useRef(null),Et=a.useRef(!1),yt=a.useRef(null),bt=a.useRef(null),vt=a.useRef(null),qt=a.useRef(null),Tt=a.useRef(null),At=a.useRef(null),Lt=a.useRef(null),Vt=a.useRef(null),Kt=a.useRef(!1),Ot=a.useMemo(()=>$.filter(Ne=>Ne.type==="remote"),[$]),Wt=Ot.length>0,_t=a.useMemo(()=>Object.entries(ze).sort(([Ne],[it])=>Ne.localeCompare(it)),[ze]),St=_t.length>0,Yt=_t.length+(St?1:0),Xt=a.useMemo(()=>Object.entries(Pe).sort(([Ne],[it])=>Ne.localeCompare(it)),[Pe]),Qt=a.useMemo(()=>!!(ne?.researchView||ne?.todoView||ne?.insights||ne?.roadmap||M||ne?.memoryView||ne?.devServerView||!D),[ne,M,D]),B=a.useCallback(()=>{const Ne=window.visualViewport;return Ne&&Ne.width>0&&Ne.height>0?{width:Ne.width,height:Ne.height,offsetTop:Ne.offsetTop,offsetLeft:Ne.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),he=a.useCallback(()=>{const Ne=Lt.current;if(!Ne)return;const it=Ne.getBoundingClientRect(),xn=Vt.current,{width:wn,height:Ce,offsetTop:Ke,offsetLeft:mt}=B(),It=16,$t=16,mn=6,On=xn?.offsetWidth||Math.max(it.width,260),nn=Math.min(On,Math.max(wn-It*2,160)),Nn=xn?.offsetHeight||280,_n=Math.min(Nn,Math.max(Ce-$t*2,160)),ls=it.top-Ke,Sn=it.bottom-Ke,Hn=it.right-mt,rn=Ce-Sn,wt=ls,K=rn<_n&&wt>rn,Le=Math.min(Math.max(Hn-nn,It),wn-It-nn)+mt,st=K?Math.max($t+Ke,ls-_n-mn+Ke):Math.min(Sn+mn+Ke,Ce+Ke-$t-_n);Ge({top:st,left:Le,width:nn})},[B]),De=a.useCallback((Ne,it)=>{v?.(Ne,it),Me(!1),fe(-1)},[v]),A=a.useCallback(()=>{b?.(),Me(!1),fe(-1)},[b]),X=a.useCallback(Ne=>{switch(Ne.key){case"ArrowDown":Ne.preventDefault(),Yt>0&&fe(it=>it<Yt-1?it+1:0);break;case"ArrowUp":Ne.preventDefault(),Yt>0&&fe(it=>it>0?it-1:Yt-1);break;case"Enter":if(Ne.preventDefault(),Ie>=0)if(Ie<_t.length){const[it,xn]=_t[Ie];De(it,xn)}else St&&Ie===_t.length&&A();break;case"Home":Ne.preventDefault(),Yt>0&&fe(0);break;case"End":Ne.preventDefault(),Yt>0&&fe(Yt-1);break}},[A,De,Ie,_t,St,Yt]);a.useEffect(()=>{Et.current=Fe},[Fe]),a.useEffect(()=>{Kt.current=pe},[pe]),a.useEffect(()=>{if(!Fe||!ke)return;let Ne=!1;return le(!0),kr(G).then(it=>{Ne||ft(it)}).catch(()=>{Ne||ft({})}).finally(()=>{Ne||le(!1)}),()=>{Ne=!0}},[Fe,ke,G]),a.useEffect(()=>{if(!pe||ke)return;let Ne=!1;return de(!0),kr(G).then(it=>{Ne||tt(it)}).catch(()=>{Ne||tt({})}).finally(()=>{Ne||de(!1)}),()=>{Ne=!0}},[pe,ke,G]),a.useEffect(()=>{if(!pe)return;const Ne=it=>{At.current&&!At.current.contains(it.target)&&Me(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[pe]),a.useEffect(()=>{if(!pe)return;const Ne=it=>{it.key==="Escape"&&(Me(!1),Lt.current?.focus())};return document.addEventListener("keydown",Ne),()=>document.removeEventListener("keydown",Ne)},[pe]),a.useEffect(()=>{if(pe){fe(-1);const Ne=window.setTimeout(()=>Vt.current?.focus(),0);return()=>window.clearTimeout(Ne)}Ge(null)},[pe]),a.useEffect(()=>{if(!pe)return;const Ne=requestAnimationFrame(()=>{he()});return()=>cancelAnimationFrame(Ne)},[pe,ye,_t.length,St,he]),a.useEffect(()=>{if(!pe)return;const Ne=()=>he();window.addEventListener("resize",Ne),window.addEventListener("scroll",Ne,!0);const it=window.visualViewport;return it&&(it.addEventListener("resize",Ne),it.addEventListener("scroll",Ne)),()=>{window.removeEventListener("resize",Ne),window.removeEventListener("scroll",Ne,!0),it&&(it.removeEventListener("resize",Ne),it.removeEventListener("scroll",Ne))}},[pe,he]),a.useEffect(()=>{ke&&(Me(!1),fe(-1))},[ke]);const $e=se||U.length>0,dt=(ge||U.length>0)&&!me,jt=(S==="board"||S==="list")&&!ie&&V&&!me&&U.length===0,zt=(S==="board"||S==="list")&&!ie&&V;a.useEffect(()=>{U===""&&ae(!1)},[U]),a.useEffect(()=>{if(!be)return;const Ne=it=>{nt.current&&!nt.current.contains(it.target)&&ve.current&&!ve.current.contains(it.target)&&Ae(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[be]),a.useEffect(()=>{if(!xe)return;const Ne=it=>{Je.current&&!Je.current.contains(it.target)&&Q.current&&!Q.current.contains(it.target)&&ee(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[xe]),a.useEffect(()=>{if(!et)return;const Ne=it=>{yt.current&&!yt.current.contains(it.target)&&Ye(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[et]),a.useEffect(()=>{const Ne=it=>{if(it.key==="Escape"){if(oe(!1),ee(!1),Et.current){at(!1);return}if(Kt.current){Me(!1),Lt.current?.focus();return}Ae(!1),Z(!1),Ye(!1),Oe(!1)}};return document.addEventListener("keydown",Ne),()=>document.removeEventListener("keydown",Ne)},[]),a.useEffect(()=>{if(!rt)return;const Ne=it=>{bt.current&&!bt.current.contains(it.target)&&Oe(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[rt]),a.useEffect(()=>{if(!Re)return;const Ne=it=>{Tt.current&&!Tt.current.contains(it.target)&&Ue(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[Re]),a.useEffect(()=>{if(!Re)return;const Ne=it=>{it.key==="Escape"&&Ue(!1)};return document.addEventListener("keydown",Ne),()=>document.removeEventListener("keydown",Ne)},[Re]),a.useEffect(()=>{if(!We)return;const Ne=it=>{vt.current&&!vt.current.contains(it.target)&&qt.current&&!qt.current.contains(it.target)&&oe(!1)};return document.addEventListener("mousedown",Ne),()=>document.removeEventListener("mousedown",Ne)},[We]);const Rt=a.useCallback(()=>{Z(Ne=>!Ne)},[]),un=a.useCallback(()=>{ue(!0),ae(!1)},[]),In=a.useCallback(()=>{ue(!1),ae(!0),V&&V("")},[V]),gn=a.useCallback(()=>{Ae(Ne=>!Ne)},[]),Bt=a.useCallback(Ne=>{Ne&&Ne(),Ae(!1),at(!1)},[]),Mn=a.useCallback(()=>{Z(!1),V&&V("")},[V]);return t.jsxs("div",{className:"header-wrapper",children:[t.jsxs("header",{className:"header",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"})]}),ie&&L.length>=1&&F&&t.jsxs("div",{className:"mobile-project-switch",ref:bt,children:[t.jsx("button",{className:`mobile-project-switch-trigger${rt?" mobile-project-switch-trigger--open":""}`,onClick:()=>Oe(Ne=>!Ne),title:"Switch project","aria-label":"Switch project","aria-expanded":rt,"aria-haspopup":"listbox","data-testid":"mobile-project-switch-trigger",children:t.jsx(en,{size:14,className:`mobile-project-switch-chevron${rt?" mobile-project-switch-chevron--open":""}`})}),rt&&t.jsx("div",{className:"mobile-project-switch-dropdown",role:"listbox","aria-label":"Select project","data-testid":"mobile-project-switch-dropdown",children:L.map(Ne=>{const it=R?.id===Ne.id,xn=Rp[Ne.status]?.color;return t.jsxs("button",{className:`mobile-project-switch-item${it?" mobile-project-switch-item--current":""}`,onClick:()=>{F(Ne),Oe(!1)},role:"option","aria-selected":it,"data-testid":`mobile-project-switch-item-${Ne.id}`,children:[t.jsx("span",{className:"mobile-project-switch-dot",style:{backgroundColor:xn||"var(--text-muted)"}}),t.jsxs("div",{className:"mobile-project-switch-info",children:[t.jsx("span",{className:"mobile-project-switch-name",children:Ne.name}),t.jsx("span",{className:"mobile-project-switch-path",children:Ap(Ne.path)})]}),it&&t.jsx(Bn,{size:14,className:"mobile-project-switch-check"})]},Ne.id)})})]}),!ke&&L.length>=1&&W&&t.jsx(Rw,{projects:L,currentProject:R??null,onViewAll:W,onSelectProject:F}),Wt&&t.jsxs("div",{className:`header-node-selector${ie?" header-node-selector--mobile":""}`,ref:ie?void 0:yt,children:[t.jsx(Nw,{node:P??null,showDetails:!ie}),!ie&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:`btn-icon node-selector-trigger${et?" node-selector-trigger--open":""}`,onClick:()=>Ye(Ne=>!Ne),title:"Switch node","aria-label":"Switch node","aria-expanded":et,"aria-haspopup":"listbox","data-testid":"node-selector-trigger",children:t.jsx(jn,{size:12,className:`node-selector-chevron${et?" node-selector-chevron--open":""}`})}),et&&t.jsxs("div",{className:"node-selector-dropdown",role:"listbox","aria-label":"Select node",children:[t.jsxs("button",{className:`node-selector-option${O?"":" node-selector-option--active"}`,onClick:()=>{k?.(null),Ye(!1)},role:"option","aria-selected":!O,"data-testid":"node-option-local",children:[t.jsx(Vi,{status:"online",compact:!0}),t.jsx("span",{className:"node-selector-option-label",children:"Local"})]}),Ot.map(Ne=>t.jsxs("button",{className:`node-selector-option${P?.id===Ne.id?" node-selector-option--active":""}`,onClick:()=>{k?.(Ne),Ye(!1)},role:"option","aria-selected":P?.id===Ne.id,"data-testid":`node-option-${Ne.id}`,children:[t.jsx(Vi,{status:Ne.status,compact:!0}),t.jsx("span",{className:"node-selector-option-label",children:Ne.name}),t.jsx("span",{className:"node-selector-option-status",children:Ne.status})]},Ne.id))]})]})]})]}),t.jsxs("div",{className:"header-actions",children:[D&&z&&(S==="board"||S==="list")&&t.jsxs("div",{className:"view-toggle","data-testid":"mobile-view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${S==="board"?" active":""}`,onClick:()=>z("board"),title:"Board view","aria-label":"Board view","aria-pressed":S==="board","data-testid":"mobile-view-toggle-board",children:t.jsx(qi,{size:16})}),t.jsx("button",{className:`view-toggle-btn${S==="list"?" active":""}`,onClick:()=>z("list"),title:"List view","aria-label":"List view","aria-pressed":S==="list","data-testid":"mobile-view-toggle-list",children:t.jsx(Ec,{size:16})})]}),V&&ie&&(D||S==="board"||S==="list")&&!$e&&t.jsx("button",{className:"btn-icon mobile-search-trigger",onClick:Rt,title:"Open search","aria-label":"Open search","aria-expanded":!1,"data-testid":"mobile-header-search-btn",children:t.jsx(wi,{size:16})}),jt&&t.jsx("button",{className:"btn-icon",onClick:un,title:"Open search","aria-label":"Open search","data-testid":"desktop-header-search-btn",children:t.jsx(wi,{size:16})}),ie&&D&&o&&t.jsx("button",{className:"btn-icon",onClick:Ne=>o(Ne.currentTarget.getBoundingClientRect()),title:"View usage","data-testid":"mobile-header-usage-btn",children:t.jsx(Is,{size:16})}),!D&&z&&t.jsxs("div",{className:"view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${S==="board"?" active":""}`,onClick:()=>z("board"),title:"Board view","aria-label":"Board view","aria-pressed":S==="board",children:t.jsx(qi,{size:16})}),t.jsx("button",{className:`view-toggle-btn${S==="list"?" active":""}`,onClick:()=>z("list"),title:"List view","aria-label":"List view","aria-pressed":S==="list",children:t.jsx(Ec,{size:16})}),T&&t.jsx("button",{className:`view-toggle-btn${S==="agents"?" active":""}`,onClick:()=>z("agents"),title:"Agents view","aria-label":"Agents view","aria-pressed":S==="agents",children:t.jsx(Cn,{size:16})}),t.jsx("button",{className:`view-toggle-btn${S==="missions"?" active":""}`,onClick:()=>z("missions"),title:"Missions view","aria-label":"Missions view","aria-pressed":S==="missions",children:t.jsx(vs,{size:16})}),t.jsx("button",{className:`view-toggle-btn${S==="chat"?" active":""}`,onClick:()=>z("chat"),title:"Chat view","aria-label":"Chat view","aria-pressed":S==="chat",children:t.jsx(Ni,{size:16})}),t.jsx("button",{className:`view-toggle-btn${S==="documents"?" active":""}`,onClick:()=>z("documents"),title:"Documents view","aria-label":"Documents view","aria-pressed":S==="documents",children:t.jsx(Bi,{size:16})}),t.jsx("button",{className:`view-toggle-btn${S==="mailbox"?" active":""}`,onClick:()=>z("mailbox"),title:"Mailbox view","aria-label":"Mailbox view","aria-pressed":S==="mailbox",children:t.jsx(fa,{size:16})}),Qt&&t.jsxs(t.Fragment,{children:[t.jsx("button",{ref:qt,className:`view-toggle-btn${["research","skills","roadmaps","insights","memory","dev-server","devserver"].includes(S)||ne?.todoView&&S==="todos"?" active":""}`,onClick:()=>oe(Ne=>!Ne),title:"More views","aria-label":"More views","aria-haspopup":"menu","aria-expanded":We,"data-testid":"view-toggle-overflow-trigger",children:t.jsx(en,{size:12})}),We&&t.jsxs("div",{ref:vt,className:"view-toggle-overflow-menu",role:"menu","aria-label":"More views",children:[ne?.researchView&&t.jsxs("button",{className:`view-toggle-overflow-item${S==="research"?" active":""}`,onClick:()=>{z("research"),oe(!1)},role:"menuitem","data-testid":"view-overflow-research",children:[t.jsx(wi,{size:14}),t.jsx("span",{children:"Research"})]}),ne?.insights&&t.jsxs("button",{className:`view-toggle-overflow-item${S==="insights"?" active":""}`,onClick:()=>{z("insights"),oe(!1)},role:"menuitem","data-testid":"view-overflow-insights",children:[t.jsx(as,{size:14}),t.jsx("span",{children:"Insights"})]}),ne?.roadmap&&t.jsxs("button",{className:`view-toggle-overflow-item${S==="roadmaps"?" active":""}`,onClick:()=>{z("roadmaps"),oe(!1)},role:"menuitem","data-testid":"view-overflow-roadmaps",children:[t.jsx(Mc,{size:14}),t.jsx("span",{children:"Roadmaps"})]}),M&&t.jsxs("button",{className:`view-toggle-overflow-item${S==="skills"?" active":""}`,onClick:()=>{z("skills"),oe(!1)},role:"menuitem","data-testid":"view-overflow-skills",children:[t.jsx(Kn,{size:14}),t.jsx("span",{children:"Skills"})]}),ne?.memoryView&&t.jsxs("button",{className:`view-toggle-overflow-item${S==="memory"?" active":""}`,onClick:()=>{z("memory"),oe(!1)},role:"menuitem","data-testid":"view-toggle-memory",children:[t.jsx(ko,{size:14}),t.jsx("span",{children:"Memory"})]}),ne?.devServerView&&t.jsxs("button",{className:`view-toggle-overflow-item${S==="dev-server"||S==="devserver"?" active":""}`,onClick:()=>{z("devserver"),oe(!1)},role:"menuitem","data-testid":"view-toggle-devserver",children:[t.jsx(br,{size:14}),t.jsx("span",{children:"Dev Server"}),t.jsx("span",{className:"visually-hidden","data-testid":"view-toggle-dev-server"})]}),ne?.todoView&&t.jsxs("button",{className:`view-toggle-overflow-item${S==="todos"?" active":""}`,onClick:()=>{z("todos"),oe(!1)},role:"menuitem","data-testid":"view-overflow-todos",children:[t.jsx(dp,{size:14}),t.jsx("span",{children:"Todos"})]})]})]})]}),!ke&&o&&t.jsx("button",{className:"btn-icon",onClick:Ne=>o(Ne.currentTarget.getBoundingClientRect()),title:"View usage","data-testid":"desktop-header-usage-btn",children:t.jsx(Is,{size:16})}),!ke&&c&&t.jsx("button",{className:"btn-icon",onClick:c,title:"System Stats","data-testid":"desktop-header-system-stats-btn",children:t.jsx(br,{size:16})}),!ke&&l&&t.jsx("button",{className:"btn-icon",onClick:l,title:"View Activity Log",children:t.jsx(gr,{size:16})}),!ke&&!te&&t.jsx("button",{className:"btn-icon",onClick:n,title:"Import from GitHub",children:t.jsx(fu,{size:16})}),!ke&&t.jsxs("button",{className:`btn-icon${r>0?" btn-icon--has-indicator":""}`,onClick:r>0&&i?i:s,title:r>0?"Resume planning session":"Create a task with AI planning","data-testid":"planning-btn",style:{position:"relative"},children:[t.jsx(si,{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})]}),!ke&&t.jsxs("div",{className:"terminal-split-btn",ref:At,children:[t.jsx("button",{className:"btn-icon btn-icon--terminal terminal-split-btn__main",onClick:x,title:"Open Terminal","data-testid":"terminal-toggle-btn",children:t.jsx(mi,{size:16})}),b&&v&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"terminal-split-btn__divider"}),t.jsx("button",{ref:Lt,className:`btn-icon terminal-split-btn__chevron${pe?" btn-icon--active":""}`,onClick:()=>Me(Ne=>!Ne),title:"Scripts","aria-haspopup":"listbox","aria-expanded":pe,"aria-label":"Quick scripts","data-testid":"scripts-btn",children:t.jsx(en,{size:12,className:`quick-scripts-dropdown__trigger-chevron${pe?" rotate":""}`})}),pe&&t.jsx("div",{ref:Vt,tabIndex:-1,className:"quick-scripts-dropdown__menu",role:"listbox","aria-label":"Scripts",onKeyDown:X,"data-testid":"quick-scripts-dropdown",style:_e?{position:"fixed",top:`${_e.top}px`,left:`${_e.left}px`,width:`${_e.width}px`,right:"auto"}:void 0,children:ye?t.jsxs("div",{className:"quick-scripts-dropdown__loading","data-testid":"quick-scripts-loading",children:[t.jsx(lt,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Loading scripts..."})]}):_t.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(mi,{size:16})}),t.jsx("p",{children:"No scripts configured"}),t.jsx("button",{className:"quick-scripts-dropdown__empty-action btn",onClick:A,children:"Add your first script"})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"quick-scripts-dropdown__list",children:_t.map(([Ne,it],xn)=>t.jsxs("button",{className:`quick-scripts-dropdown__item ${Ie===xn?"highlighted":""}`,onClick:()=>De(Ne,it),role:"option","aria-selected":Ie===xn,"data-testid":`quick-script-item-${Ne}`,children:[t.jsx(En,{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:Ne}),t.jsx("span",{className:"quick-scripts-dropdown__item-command",title:it,children:it.length>50?`${it.slice(0,50)}...`:it})]})]},Ne))}),t.jsx("div",{className:"quick-scripts-dropdown__footer",children:t.jsxs("button",{className:`quick-scripts-dropdown__manage ${St&&Ie===_t.length?"highlighted":""}`,onClick:A,"data-testid":"quick-scripts-manage",children:[t.jsx(ur,{size:14}),t.jsx("span",{children:"Manage Scripts..."})]})})]})})]})]}),!ke&&y&&t.jsx("button",{className:`btn-icon${j?" btn-icon--active":""}`,onClick:y,title:"Browse files","data-testid":"files-toggle-btn",children:t.jsx(Gn,{size:16})}),!ke&&h&&t.jsx("button",{className:"btn-icon",onClick:h,title:"Git Manager","data-testid":"git-manager-btn",children:t.jsx(Vs,{size:16})}),!ke&&g&&t.jsx("button",{className:"btn-icon",onClick:g,title:"Workflow Steps","data-testid":"workflow-steps-btn",children:t.jsx(Ac,{size:16})}),!ke&&t.jsxs("div",{style:{position:"relative"},children:[t.jsx("button",{ref:Q,className:"btn-icon",onClick:()=>ee(Ne=>!Ne),title:"More actions","aria-label":"More actions","aria-expanded":xe,"aria-haspopup":"menu","data-testid":"desktop-overflow-trigger",children:t.jsx(Nc,{size:16})}),xe&&t.jsxs("div",{ref:Je,className:"desktop-overflow-menu",role:"menu","aria-label":"More actions",children:[f&&p!==!1&&t.jsxs("button",{className:"view-toggle-overflow-item",onClick:()=>{f(),ee(!1)},role:"menuitem","data-testid":"desktop-overflow-nodes-btn",children:[t.jsx(xr,{size:14}),t.jsx("span",{children:"Nodes"})]}),t.jsxs("button",{className:"view-toggle-overflow-item",onClick:()=>{Bt(m),ee(!1)},role:"menuitem","data-testid":"desktop-overflow-schedules-btn",children:[t.jsx(Ci,{size:14}),t.jsx("span",{children:"Automation"})]})]})]}),t.jsxs("div",{className:"engine-control-split-btn",ref:Tt,children:[t.jsx("button",{className:`btn-icon engine-control-split-btn__main${N?" btn-icon--stopped":""}`,onClick:w,title:N?"Start AI engine":"Stop AI engine","data-testid":"engine-control-main-btn",children:N?t.jsx(En,{size:16}):t.jsx(ks,{size:16})}),t.jsx("span",{className:"engine-control-split-btn__divider"}),t.jsx("button",{className:`btn-icon engine-control-split-btn__chevron${Re?" btn-icon--active":""}`,onClick:()=>Ue(Ne=>!Ne),title:"Engine options","aria-haspopup":"menu","aria-expanded":Re,"data-testid":"engine-control-chevron-btn",children:t.jsx(en,{size:12})}),Re&&t.jsx("div",{className:"engine-control-split-btn__menu",role:"menu",children:t.jsxs("button",{className:`engine-control-split-btn__menu-item${C?" engine-control-split-btn__menu-item--active":""}`,onClick:()=>{_?.(),Ue(!1)},role:"menuitem",title:C?"Resume scheduling":"Pause triage",disabled:!!N,"data-testid":"engine-control-pause-triage-btn",children:[C?t.jsx(En,{size:14}):t.jsx(Hs,{size:14}),t.jsx("span",{children:C?"Resume scheduling":"Pause triage"})]})})]}),!ke&&t.jsx("button",{className:"btn-icon",onClick:e,title:"Settings",children:t.jsx(ur,{size:16})}),t.jsx(Yo,{slotId:"header-action",projectId:G}),ke&&!D&&t.jsx("button",{ref:ve,className:"btn-icon compact-overflow-trigger",onClick:gn,title:"More header actions","aria-label":"More header actions","aria-expanded":be,"aria-haspopup":"menu",children:t.jsx(Nc,{size:16})}),ke&&!D&&be&&t.jsxs("div",{ref:nt,className:"mobile-overflow-menu",role:"menu","aria-label":"Additional header actions",children:[L.length>=1&&W&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(W),role:"menuitem","data-testid":"overflow-project-selector-btn",children:[t.jsx(ap,{size:16}),t.jsx("span",{children:"Projects"})]}),y&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(y),role:"menuitem","data-testid":"overflow-files-btn",children:[t.jsx(Gn,{size:16}),t.jsx("span",{children:"Browse Files"})]}),t.jsxs("button",{className:`mobile-overflow-item${r>0?" mobile-overflow-item--has-indicator":""}`,onClick:()=>Bt(r>0&&i?i:s),role:"menuitem","data-testid":"overflow-planning-btn",children:[t.jsxs("span",{className:"mobile-overflow-icon-wrapper",children:[t.jsx(si,{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"})]}),h&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(h),role:"menuitem","data-testid":"overflow-git-btn",children:[t.jsx(Vs,{size:16}),t.jsx("span",{children:"Git Manager"})]}),f&&p!==!1&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(f),role:"menuitem","data-testid":"overflow-nodes-btn",children:[t.jsx(xr,{size:16}),t.jsx("span",{children:"Nodes"})]}),!te&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(n),role:"menuitem",children:[t.jsx(fu,{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:()=>Bt(x),role:"menuitem","data-testid":"overflow-terminal-primary-btn",children:[t.jsx(mi,{size:16}),t.jsx("span",{children:"Terminal"})]}),t.jsx("button",{className:"mobile-overflow-split-toggle",onClick:()=>at(Ne=>!Ne),role:"menuitem","aria-expanded":Fe,"aria-haspopup":"menu","aria-label":"Show scripts","data-testid":"overflow-terminal-submenu-toggle",children:t.jsx(jn,{size:14,className:`mobile-overflow-chevron${Fe?" mobile-overflow-chevron--open":""}`})})]}),Fe&&t.jsx("div",{className:"mobile-overflow-submenu",role:"menu","aria-label":"Scripts submenu",children:Y?t.jsxs("div",{className:"mobile-overflow-submenu-loading","data-testid":"overflow-scripts-loading",children:[t.jsx(lt,{size:14,className:"animate-spin"}),t.jsx("span",{children:"Loading scripts…"})]}):Xt.length>0?t.jsxs(t.Fragment,{children:[Xt.map(([Ne,it])=>t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem",onClick:()=>{v&&v(Ne,it),Ae(!1),at(!1)},role:"menuitem","data-testid":`overflow-script-item-${Ne}`,children:[t.jsx(En,{size:14}),t.jsx("span",{children:Ne})]},Ne)),b&&t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem mobile-overflow-subitem--manage",onClick:()=>Bt(b),role:"menuitem","data-testid":"overflow-scripts-manage",children:[t.jsx(Bs,{size:14}),t.jsx("span",{children:"Manage Scripts…"})]})]}):b&&t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem",onClick:()=>Bt(b),role:"menuitem","data-testid":"overflow-scripts-manage",children:[t.jsx(Bs,{size:14}),t.jsx("span",{children:"No scripts — add one…"})]})})]}),t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(m),role:"menuitem","data-testid":"overflow-schedules-btn",children:[t.jsx(Ci,{size:16}),t.jsx("span",{children:"Automation"})]}),l&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(l),role:"menuitem","data-testid":"overflow-activity-log-btn",children:[t.jsx(gr,{size:16}),t.jsx("span",{children:"View Activity Log"})]}),u&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(u),role:"menuitem","data-testid":"overflow-mailbox-btn",children:[t.jsx(fa,{size:16}),t.jsxs("span",{children:["Mailbox",d>0?` (${d})`:""]})]}),o&&t.jsxs("button",{className:"mobile-overflow-item",onClick:Ne=>Bt(()=>o(Ne.currentTarget.getBoundingClientRect())),role:"menuitem","data-testid":"overflow-usage-btn",children:[t.jsx(Is,{size:16}),t.jsx("span",{children:"View Usage"})]}),g&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(g),role:"menuitem","data-testid":"overflow-workflow-steps-btn",children:[t.jsx(Ac,{size:16}),t.jsx("span",{children:"Workflow Steps"})]}),t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>Bt(e),role:"menuitem",children:[t.jsx(ur,{size:16}),t.jsx("span",{children:"Settings"})]})]})]})]}),zt&&dt&&t.jsx("div",{className:"header-floating-search",children:t.jsxs("div",{className:"header-search",children:[t.jsx(wi,{size:14,className:"header-search-icon"}),t.jsx("input",{autoFocus:!0,type:"text",placeholder:"Search tasks...",value:U,onChange:Ne=>V(Ne.target.value),className:"header-search-input"}),t.jsx("button",{className:"header-search-clear",onClick:In,"aria-label":"Close search",children:t.jsx(Jt,{size:14})})]})}),V&&ie&&$e&&t.jsx("div",{className:"header-floating-search",children:t.jsxs("div",{ref:ut,className:"header-search mobile-search-expanded",children:[t.jsx(wi,{size:14,className:"header-search-icon"}),t.jsx("input",{ref:ht,autoFocus:!0,type:"text",placeholder:"Search tasks...",value:U,onChange:Ne=>V(Ne.target.value),className:"header-search-input"}),t.jsx("button",{className:"header-search-clear",onClick:Mn,"aria-label":"Close search",children:t.jsx(Jt,{size:14})})]})})]})}const Pw={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,ntfyEvents:["in-review","merged","failed","awaiting-approval","awaiting-user-review","planning-awaiting-input","gridlock"],ntfyDashboardHost:void 0,webhookEnabled:!1,webhookUrl:void 0,webhookFormat:"generic",webhookEvents:[],notificationProviders:[],customProviders:[],defaultProjectId:void 0,setupComplete:void 0,favoriteProviders:void 0,favoriteModels:void 0,openrouterModelSync:!0,updateCheckEnabled:!0,updateCheckFrequency:"daily",showGitHubStarButton:!0,modelOnboardingComplete:void 0,useClaudeCli: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,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,researchWebSearchProvider:"none",researchSearxngUrl:void 0,researchBraveApiKey:void 0,researchGoogleSearchApiKey:void 0,researchGoogleSearchCx:void 0,researchTavilyApiKey:void 0,researchGitHubEnabled:!1,researchLocalDocsEnabled:!0,researchMaxSearchResults:10,researchFetchTimeoutMs:3e4,researchUserAgent:"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:{}},Iw={globalPause:!1,globalPauseReason:void 0,enginePaused:!1,maxConcurrent:2,maxTriageConcurrent:2,globalMaxConcurrent:4,maxWorktrees:4,pollIntervalMs:15e3,heartbeatMultiplier:1,groupOverlappingFiles:!0,overlapIgnorePaths:[],autoMerge:!0,mergeStrategy:"direct",requirePrApproval:!1,pushAfterMerge:!1,pushRemote:"origin",unavailableNodePolicy:"block",defaultNodeId:void 0,worktreeInitCommand:void 0,testCommand:void 0,buildCommand:void 0,recycleWorktrees:!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,defaultPresetBySize:{},autoResolveConflicts:!0,smartConflictResolution:!0,worktreeRebaseBeforeMerge:!0,worktreeRebaseRemote:"",worktreeRebaseLocalBase:!0,mergeConflictStrategy:"smart-prefer-main",workflowStepTimeoutMs:36e4,strictScopeEnforcement:!1,buildRetryCount:0,verificationFixRetries:3,buildTimeoutMs:3e5,requirePlanApproval:!1,specStalenessEnabled:!1,specStalenessMaxAgeMs:360*60*1e3,taskStuckTimeoutMs:void 0,aiSessionTtlMs:10080*60*1e3,aiSessionCleanupIntervalMs:3600*1e3,autoUnpauseEnabled:!0,autoUnpauseBaseDelayMs:3e5,autoUnpauseMaxDelayMs:36e5,maxStuckKills:6,maxPostReviewFixes:1,maxSpawnedAgentsPerParent:5,maxSpawnedAgentsGlobal:20,maintenanceIntervalMs:9e5,autoArchiveDoneTasksEnabled:!0,autoArchiveDoneAfterMs:2880*60*1e3,archiveAgentLogMode:"compact",autoUpdatePrStatus:!1,githubCommentOnDone:!1,githubCommentTemplate:void 0,autoBackupEnabled:!1,autoBackupSchedule:"0 2 * * *",autoBackupRetention:7,autoBackupDir:".fusion/backups",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,memoryEnabled:!0,memoryBackendType:"qmd",memoryAutoSummarizeEnabled:!1,memoryAutoSummarizeThresholdChars:5e4,memoryAutoSummarizeSchedule:"0 3 * * *",memoryDreamsEnabled:!1,memoryDreamsSchedule:"0 4 * * *",tokenCap: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,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}},researchEnabled:!0,researchMaxConcurrentRuns:3,researchDefaultTimeout:3e5,researchMaxSourcesPerRun:20,researchMaxSynthesisRounds:2},$w=Object.freeze(Object.keys(Pw)),Dw=Object.freeze(Object.keys(Iw));function $L(e){return $w.includes(e)}function DL(e){return Dw.includes(e)}function je(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Lw(e){return!!(e?.provider&&e?.modelId)}function Ei(...e){for(const n of e)if(Lw(n))return{provider:n.provider,modelId:n.modelId};return{}}function Qo(e){return Ei({provider:e?.defaultProviderOverride,modelId:e?.defaultModelIdOverride},{provider:e?.defaultProvider,modelId:e?.defaultModelId})}function zw(e){return Ei({provider:e?.executionProvider,modelId:e?.executionModelId},{provider:e?.executionGlobalProvider,modelId:e?.executionGlobalModelId},Qo(e))}function Fw(e){return Ei({provider:e?.planningProvider,modelId:e?.planningModelId},{provider:e?.planningGlobalProvider,modelId:e?.planningGlobalModelId},Qo(e))}function Ow(e){return Ei({provider:e?.validatorProvider,modelId:e?.validatorModelId},{provider:e?.validatorGlobalProvider,modelId:e?.validatorGlobalModelId},Qo(e))}function LL(e){return Ei({provider:e?.titleSummarizerProvider,modelId:e?.titleSummarizerModelId},{provider:e?.titleSummarizerGlobalProvider,modelId:e?.titleSummarizerGlobalModelId},{provider:e?.planningProvider,modelId:e?.planningModelId},Qo(e))}function Tp(e,n){return Ei({provider:e.modelProvider,modelId:e.modelId},zw(n))}function Pp(e,n){return Ei({provider:e.validatorModelProvider,modelId:e.validatorModelId},Ow(n))}function Ip(e,n){return Ei({provider:e.planningModelProvider,modelId:e.planningModelId},Fw(n))}const zL=["off","minimal","low","medium","high"],Oi=["triage","todo","in-progress","in-review","done","archived"],pd=["low","normal","high","urgent"],Ns="normal",Uw=["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"],Fn={triage:"Planning",todo:"Todo","in-progress":"In Progress","in-review":"In Review",done:"Done",archived:"Archived"},Bw={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"},$c={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 Hw(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)}function qw(e,n=1400){const s=a.useRef(null),[i,r]=a.useState(!1),o=a.useRef(null);return a.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]),i}function Vw({isOpen:e,options:n,onConfirm:s,onCancel:i}){const r=a.useRef(null);return a.useEffect(()=>{if(!e)return;r.current?.focus();const o=l=>{l.key==="Escape"&&(l.preventDefault(),i())};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[e,i]),!e||!n?null:t.jsx("div",{className:"modal-overlay open",onClick:i,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:i,"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:i,children:n.cancelLabel??"Cancel"}),t.jsx("button",{className:`btn ${n.danger?"btn-danger":"btn-primary"}`,onClick:s,children:n.confirmLabel??"Confirm"})]})]})})}const $p=a.createContext(null);function Ww({children:e}){const[n,s]=a.useState([]),i=a.useRef([]),r=a.useCallback(d=>{s(m=>{const h=d(m);return i.current=h,h})},[]),o=a.useCallback(d=>new Promise(m=>{r(h=>[...h,{options:d,resolve:m}])}),[r]),l=a.useCallback(d=>{const m=i.current[0];m&&(m.resolve(d),r(h=>h.slice(1)))},[r]),c=n[0]??null,u=a.useMemo(()=>({confirm:o}),[o]);return jo.createElement($p.Provider,{value:u},e,jo.createElement(Vw,{isOpen:c!==null,options:c?.options??null,onConfirm:()=>l(!0),onCancel:()=>l(!1)}))}function Ws(){const e=a.useContext($p);return e||{confirm:async n=>!1}}function Kw(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 Dp({prInfo:e,issueInfo:n,onIssueRefresh:s}){const i=()=>{e?.url&&window.open(e.url,"_blank","noopener,noreferrer")},r=()=>{n?.url&&window.open(n.url,"_blank","noopener,noreferrer")};return t.jsxs(t.Fragment,{children:[e&&t.jsxs("span",{className:`card-github-badge card-github-badge--${e.status}`,title:`PR #${e.number}: ${e.title}`,onClick:i,children:[t.jsx(ws,{size:12}),t.jsxs("span",{children:["#",e.number]})]}),n&&t.jsxs("span",{className:`card-github-badge ${Kw(n.state,n.stateReason)}`,title:`Issue #${n.number}: ${n.title}`,onClick:r,children:[t.jsx(Uo,{size:12}),t.jsxs("span",{children:["#",n.number]})]})]})}function Qr(e,n){return`${e??"default"}:${n}`}class Gw{ws=null;listeners=new Set;badgeUpdates=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;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,i=[];for(const[r,o]of this.subscriptionsByTask){const l=r.split(":").slice(1).join(":");for(const c of o)i.push({hookId:c,taskId:l})}if(this.projectId=n,this.reset(),s){for(const{hookId:r,taskId:o}of i){const l=Qr(this.projectId,o);this.subscriptionsByTask.set(l,new Set([r]))}this.shouldReconnect=this.subscriptionsByTask.size>0,this.connect()}}subscribeTask(n,s){const i=Qr(this.projectId,s),r=this.subscriptionsByTask.get(i)??new Set,o=!r.has(n);r.add(n),this.subscriptionsByTask.set(i,r),this.shouldReconnect=this.subscriptionsByTask.size>0,this.connect(),o&&this.send({type:"subscribe",taskId:s,projectId:this.projectId})}unsubscribeTask(n,s){const i=Qr(this.projectId,s),r=this.subscriptionsByTask.get(i);r&&(r.delete(n),r.size===0&&(this.subscriptionsByTask.delete(i),this.badgeUpdates.delete(i),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 i=s.split(":").slice(1).join(":");this.unsubscribeTask(n,i)}}reset(){this.disconnect(),this.badgeUpdates.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 i=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/ws`;this.projectId&&(i+=`?projectId=${encodeURIComponent(this.projectId)}`);const r=new WebSocket(ii(i));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=Qr(this.projectId,l.taskId),u=this.badgeUpdates.get(c);this.badgeUpdates.set(c,{prInfo:gu(l,"prInfo")?l.prInfo??null:u?.prInfo,issueInfo:gu(l,"issueInfo")?l.issueInfo??null:u?.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,i=Math.min(this.reconnectDelayMs,5e3);this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,this.projectContextVersionRef===s&&this.shouldReconnect&&this.connect()},i),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 $i=new Gw;let Jw=0;function gu(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function Lp(e){const n=a.useRef(null);n.current===null&&(n.current=`badge-hook-${Jw++}`);const s=a.useSyncExternalStore(o=>$i.subscribe(o),()=>$i.getSnapshot(),()=>$i.getSnapshot()),i=a.useCallback(o=>{$i.subscribeTask(n.current,o)},[]),r=a.useCallback(o=>{$i.unsubscribeTask(n.current,o)},[]);return a.useEffect(()=>{$i.setProjectId(e??null)},[e]),a.useEffect(()=>()=>{$i.cleanupHook(n.current)},[]),{badgeUpdates:s.badgeUpdates,isConnected:s.isConnected,subscribeToBadge:i,unsubscribeFromBadge:r}}function Mo(e,n,s,i){return e===void 0||!n?s:!i||n>=i?e??void 0:s}function Yw({taskId:e,prInfo:n,issueInfo:s,updatedAt:i,isInViewport:r,projectId:o}){const{badgeUpdates:l,subscribeToBadge:c,unsubscribeFromBadge:u}=Lp(o),d=!!(n||s);a.useEffect(()=>{if(!d||!r){u(e);return}return c(e),()=>{u(e)}},[d,r,o,c,e,u]);const m=l.get(`${o??"default"}:${e}`),h=Mo(m?.prInfo,m?.timestamp,n,n?.lastCheckedAt??i),f=Mo(m?.issueInfo,m?.timestamp,s,s?.lastCheckedAt??i);return!h&&!f?null:t.jsx(Dp,{prInfo:h,issueInfo:f})}const Qw=a.memo(Yw);Qw.displayName="TaskCardBadge";const Xw={sm:16,md:20,lg:24};function Zw({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 bu({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 Qs({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 eN({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 xu({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 tN({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 vl({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 vu({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 yu({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 ju({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 Ua({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 ku({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 yl({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 wu({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 jl({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 nN({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 sN({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 Nu({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 kl({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 iN({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 Su({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 wl({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 Cu({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 Nl({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 Eu({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"})]})}const aN={anthropic:{component:Zw,color:"var(--provider-anthropic)"},"claude-cli":{component:Eu,color:"var(--provider-anthropic)",label:"Anthropic — via Claude CLI"},"pi-claude-cli":{component:Eu,color:"var(--provider-anthropic)",label:"Anthropic — via Claude CLI"},openai:{component:bu,color:"var(--provider-openai)"},"openai-codex":{component:bu,color:"var(--provider-openai)",label:"OpenAI Codex"},google:{component:Qs,color:"var(--provider-gemini)"},gemini:{component:Qs,color:"var(--provider-gemini)"},"google-antigravity":{component:Qs,color:"var(--provider-gemini)",label:"Google Gemini"},antigravity:{component:Qs,color:"var(--provider-gemini)",label:"Google Gemini"},"google-vertex":{component:Qs,color:"var(--provider-gemini)",label:"Google Vertex AI"},vertex:{component:Qs,color:"var(--provider-gemini)",label:"Google Vertex AI"},"google-cloud-code":{component:Qs,color:"var(--provider-gemini)",label:"Google Cloud Code"},"cloud-code":{component:Qs,color:"var(--provider-gemini)",label:"Google Cloud Code"},"google-gemini-cli":{component:Qs,color:"var(--provider-gemini)",label:"Google Gemini CLI"},"google-generative-ai":{component:Qs,color:"var(--provider-gemini)",label:"Google Generative AI"},ollama:{component:eN,color:"var(--text)"},github:{component:Su,color:"var(--text)"},"github-copilot":{component:Su,color:"var(--text)",label:"GitHub Copilot"},openrouter:{component:iN,color:"var(--provider-openrouter)"},minimax:{component:xu,color:"var(--provider-minimax)"},"minimax-cn":{component:xu,color:"var(--provider-minimax)",label:"MiniMax (CN)"},zai:{component:tN,color:"var(--provider-zai)"},kimi:{component:vl,color:"var(--provider-kimi)"},moonshot:{component:vl,color:"var(--provider-kimi)"},"kimi-coding":{component:vl,color:"var(--provider-kimi)",label:"Kimi"},bedrock:{component:vu,color:"var(--provider-bedrock)"},"amazon-bedrock":{component:vu,color:"var(--provider-bedrock)",label:"Amazon Bedrock"},xai:{component:yu,color:"var(--text)"},grok:{component:yu,color:"var(--text)",label:"xAI"},opencode:{component:ju,color:"var(--provider-opencode)"},"opencode-go":{component:ju,color:"var(--provider-opencode)",label:"Opencode (Go)"},qwen:{component:Ua,color:"var(--provider-qwen)"},"qwen-ai":{component:Ua,color:"var(--provider-qwen)",label:"Qwen"},"qwen-coder":{component:Ua,color:"var(--provider-qwen)",label:"Qwen Coder"},alibaba:{component:Ua,color:"var(--provider-qwen)",label:"Qwen"},tongyi:{component:Ua,color:"var(--provider-qwen)",label:"Qwen"},lmstudio:{component:ku,color:"var(--provider-lmstudio)",label:"LM Studio"},"lm-studio":{component:ku,color:"var(--provider-lmstudio)",label:"LM Studio"},huggingface:{component:yl,color:"var(--provider-huggingface)",label:"Hugging Face"},"hugging-face":{component:yl,color:"var(--provider-huggingface)",label:"Hugging Face"},hf:{component:yl,color:"var(--provider-huggingface)",label:"Hugging Face"},mistral:{component:wu,color:"var(--provider-mistral)",label:"Mistral AI"},"mistral-ai":{component:wu,color:"var(--provider-mistral)",label:"Mistral AI"},azure:{component:jl,color:"var(--provider-azure)"},"azure-openai":{component:jl,color:"var(--provider-azure)",label:"Azure OpenAI"},"azure-openai-responses":{component:jl,color:"var(--provider-azure)",label:"Azure OpenAI"},fireworks:{component:kl,color:"var(--provider-fireworks)",label:"Fireworks AI"},"fireworks-ai":{component:kl,color:"var(--provider-fireworks)",label:"Fireworks AI"},fireworksai:{component:kl,color:"var(--provider-fireworks)",label:"Fireworks AI"},cerebras:{component:nN,color:"var(--provider-cerebras)"},groq:{component:sN,color:"var(--provider-groq)"},vercel:{component:Nu,color:"var(--provider-vercel)"},"vercel-ai-gateway":{component:Nu,color:"var(--provider-vercel)",label:"Vercel AI Gateway"},hermes:{component:wl,color:"var(--provider-hermes)",label:"Hermes"},"hermes-agent":{component:wl,color:"var(--provider-hermes)",label:"Hermes"},hermesagent:{component:wl,color:"var(--provider-hermes)",label:"Hermes"},openclaw:{component:Cu,color:"var(--provider-openclaw)",label:"OpenClaw"},"open-claw":{component:Cu,color:"var(--provider-openclaw)",label:"OpenClaw"},paperclip:{component:Nl,color:"var(--provider-paperclip)",label:"Paperclip"},paperclipai:{component:Nl,color:"var(--provider-paperclip)",label:"Paperclip"},"paperclip-ai":{component:Nl,color:"var(--provider-paperclip)",label:"Paperclip"}};function Dn({provider:e,size:n="sm"}){const s=e.toLowerCase(),i=aN[s],r=i?.component,o=i?.color??"var(--text-muted)",l=i?.label,c=Xw[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(Sb,{size:c})})}const Rs={data:new Map,pendingPromise:null,lastFetchTime:null},rN=5e3;function bo(e,n){return n?`${n}::${e}`:e}function oN(e,n){const s=Rs.data.get(bo(e,n));if(!(!s||Date.now()-s.timestamp>rN))return s}function lN(e){const[n,s]=a.useState(!1),i=a.useRef(null),r=a.useCallback(async c=>{let d=null;for(let m=0;m<3;m++)try{return await Fy(c,e)}catch(h){d=h instanceof Error?h:new Error(String(h));const f=je(h);if(f?.includes("429")||f?.toLowerCase().includes("rate limit")){const p=Math.min(1e3*Math.pow(2,m),3e4);await new Promise(g=>setTimeout(g,p));continue}break}if(d)throw d;return{}},[e]),o=a.useCallback(async c=>{if(c.length===0)return;const d=Date.now()-5e3;if(c.every(f=>{const p=Rs.data.get(bo(f,e));return p&&p.timestamp>d})&&Rs.lastFetchTime&&Rs.lastFetchTime>d)return;if(i.current&&(clearTimeout(i.current),i.current=null),Rs.pendingPromise){s(!0);try{await Rs.pendingPromise}finally{s(!1)}return}s(!0);const h=r(c);Rs.pendingPromise=h;try{const f=await h,p=Date.now();for(const[g,b]of Object.entries(f))Rs.data.set(bo(g,e),{result:b,timestamp:p});Rs.lastFetchTime=p}catch{}finally{Rs.pendingPromise=null,s(!1)}},[r,e]),l=a.useCallback(c=>Rs.data.get(bo(c,e)),[e]);return{fetchBatch:o,isLoading:n,lastFetchTime:Rs.lastFetchTime,getBatchData:l}}const Dc=new Map,cN=3e4;function zp(e,n,s,i){return`${e}:${n??""}:${s??""}:${i??""}`}function dN(e,n,s,i){const r=zp(e,n,s,i),o=Dc.get(r);return o?Date.now()>o.expiresAt?(Dc.delete(r),null):o.stats:null}function uN(e,n,s,i,r){const o=zp(e,n,s,i);Dc.set(o,{stats:r,expiresAt:Date.now()+cN})}function mN(e,n,s,i,r={}){const o=r.enabled??!0,l=r.worktree,c=r.stepVersion,u=r.pollIntervalMs,[d,m]=a.useState(null),[h,f]=a.useState(!1);return a.useEffect(()=>{if(!o){m(null),f(!1);return}const p=n==="done"&&!!s,g=(n==="in-progress"||n==="in-review")&&!!l;if(!e||!p&&!g){m(null),f(!1);return}const b=g?l:void 0,v=c!==void 0?String(c):void 0;let x=!1;async function y(N=!1){if(!N){const C=dN(e,i,b,v);if(C){x||(m(C),f(!1));return}}f(!0);try{const C=await Np(e,b,i);x||(m(C.stats),uN(e,i,b,v,C.stats))}catch{x||m(null)}finally{x||f(!1)}}y();let j;return u&&g&&(j=setInterval(()=>{y(!0)},u)),()=>{x=!0,j&&clearInterval(j)}},[e,n,s,i,o,l,c,u]),{stats:d,loading:h}}const hN=new Set(["failed","stuck-killed"]);function _o(e,n,s){if(e.column!=="in-progress"||e.status&&hN.has(e.status)||!n||n<=0)return!1;const i=new Date(e.updatedAt).getTime();return(s??Date.now())-i>n}function pN(e){switch(e){case"passed":return"done";case"failed":return"failed";case"skipped":return"skipped";case"pending":default:return"pending"}}function fN(e){return e==="done"||e==="skipped"}function gN(e,n,s){const i=s?.get(e)?.trim();if(i)return i;const r=n?.workflowStepName?.trim();return r||e}function Fp(e,n){const s=(e.steps??[]).map((u,d)=>({id:`step-${d}`,name:u.name,status:u.status,source:"step",phase:"pre-merge"})),i=new Map((e.workflowStepResults??[]).map(u=>[u.workflowStepId,u])),r=(e.enabledWorkflowSteps??[]).map(u=>{const d=i.get(u);return{id:`workflow-${u}`,name:gN(u,d,n),status:d?pN(d.status):"pending",source:"workflow",phase:d?.phase??"pre-merge"}}),o=[...s,...r],l=o.length,c=o.filter(u=>fN(u.status)).length;return{total:l,completed:c,items:o}}function bN(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 Op(e){return e.filter(n=>{const s=typeof n.action=="string"?n.action:"",i=typeof n.outcome=="string"?n.outcome:"";return s.includes("[timing]")||i.includes("[timing]")}).map(n=>{const i=`${n.action??""}
|
|
616
|
-
${n.outcome??""}`.match(/(\d+(?:\.\d+)?)ms\b/i),r=i?Number(i[1]):void 0;return{timestamp:n.timestamp,durationMs:Number.isFinite(r)?r:void 0,summary:bN(n)}})}function xN(e){if(!e||e.length===0)return null;let n=0,s=0;for(const i of Op(e))typeof i.durationMs=="number"&&(n+=i.durationMs,s+=1);return s>0?n:null}const Lc=new Map;async function vN(e,n){const s=Lc.get(e);if(s)return s;try{const i=await Sp(e,n);return Lc.set(e,i.title),i.title}catch{return e}}const Mu=12;function yN(e){return e.length<=Mu?e:e.slice(0,Mu-3)+"..."}const zc=new Map;async function jN(e,n){const s=zc.get(e);if(s)return s;try{const i=await kp(e,n);return zc.set(e,i.name),i.name}catch{return e}}function kN(e){return typeof e=="string"&&pd.includes(e)?e:Ns}function wN(e,n){return e.length<=n?e:e.slice(0,n-3)+"..."}const NN=new Set(["triage","todo"]),_u=new Set(["planning","researching","executing","finalizing","merging"]),Au=new Set(["merging","merging-pr"]),SN={triage:"var(--triage)",todo:"var(--todo)","in-progress":"var(--in-progress)","in-review":"var(--in-review)",done:"var(--done)",archived:"var(--text-muted)"},CN=new Set(["in-progress","in-review","done"]),EN=3e4;function Wi(e){if(!e)return null;const n=Date.parse(e);return Number.isFinite(n)?n:null}function MN(e){const n=Wi(e.columnMovedAt??e.updatedAt);if(n==null)return null;const s=Date.now();return n>s?null:n}function Ru(e,n){const s=Wi(e.columnMovedAt??e.updatedAt);return s==null?null:Math.max(0,n-s)}function rr(e,n){const s=Wi(e.executionStartedAt);if(s==null)return null;const i=Wi(e.executionCompletedAt),r=i!=null&&i>=s?i:n;return Math.max(0,r-s)}function _N(e){return e.column==="done"?MN(e):null}function Up(e,n){const s=Wi(e.updatedAt);return s==null?null:Math.max(0,n-s)}function AN(e,n){const s=rr(e,n);if(s!=null)return s;const i=Up(e,n),r=or(e,n);return r!=null?r+(i??0):i}function RN(e,n){const s=e.workflowStepResults;if(!s||s.length===0)return null;let i=0,r=0;for(const o of s){if(!o.startedAt)continue;const l=Wi(o.startedAt);if(l==null)continue;let c;if(o.completedAt){const u=Wi(o.completedAt);if(u==null||u<l)continue;c=u}else c=Math.max(l,n);i+=c-l,r+=1}return r>0?i:null}function or(e,n){const s=typeof e.timedExecutionMs=="number"?e.timedExecutionMs:xN(e.log),i=RN(e,n);return s==null&&i==null?null:(s??0)+(i??0)}function Tu(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 Pu(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 Iu(e,n){if(!e&&!n)return!0;if(!e||!n)return!1;const s=Object.keys(e),i=Object.keys(n);return s.length!==i.length?!1:s.every(r=>e[r]===n[r])}function TN(e,n){return e.length!==n.length?!1:e.every((s,i)=>s.name===n[i]?.name&&s.status===n[i]?.status)}function PN(e,n){return e.length!==n.length?!1:e.every((s,i)=>s===n[i])}function IN(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,i)=>s===n[i])}function $N(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(i=>typeof i=="string")};const s=e.message.match(/[A-Z]+-\d+/g)??[];return s.length>1?{dependentIds:[...new Set(s.slice(1))]}:null}function DN(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,i)=>{const r=n[i];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 LN(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,i)=>{const r=n[i];return r?s.filename===r.filename&&s.mimeType===r.mimeType&&s.size===r.size:!1})}function zN(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,i)=>{const r=n[i];return r?s.author===r.author&&s.text===r.text&&s.createdAt===r.createdAt:!1})}function FN(e,n){const s=e.task,i=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&&s.id===i.id&&s.title===i.title&&s.description===i.description&&s.column===i.column&&s.columnMovedAt===i.columnMovedAt&&s.timedExecutionMs===i.timedExecutionMs&&s.updatedAt===i.updatedAt&&s.createdAt===i.createdAt&&s.status===i.status&&s.priority===i.priority&&s.executionMode===i.executionMode&&s.paused===i.paused&&s.error===i.error&&s.size===i.size&&s.blockedBy===i.blockedBy&&s.worktree===i.worktree&&s.baseBranch===i.baseBranch&&s.breakIntoSubtasks===i.breakIntoSubtasks&&s.currentStep===i.currentStep&&s.modelProvider===i.modelProvider&&s.modelId===i.modelId&&s.validatorModelProvider===i.validatorModelProvider&&s.validatorModelId===i.validatorModelId&&s.planningModelProvider===i.planningModelProvider&&s.planningModelId===i.planningModelId&&s.reviewLevel===i.reviewLevel&&s.missionId===i.missionId&&s.assignedAgentId===i.assignedAgentId&&s.mergeRetries===i.mergeRetries&&LN(s.attachments,i.attachments)&&zN(s.comments,i.comments)&&PN(s.dependencies,i.dependencies)&&TN(s.steps,i.steps)&&IN(s.enabledWorkflowSteps,i.enabledWorkflowSteps)&&DN(s.workflowStepResults,i.workflowStepResults)&&Iu(s.prInfo,i.prInfo)&&Iu(s.issueInfo,i.issueInfo)}function ON({task:e,projectId:n,queued:s,onOpenDetail:i,addToast:r,globalPaused:o,onUpdateTask:l,onArchiveTask:c,onUnarchiveTask:u,onDeleteTask:d,onRetryTask:m,onOpenDetailWithTab:h,taskStuckTimeoutMs:f,onOpenMission:p,onMoveTask:g,lastFetchTimeMs:b,workflowStepNameLookup:v}){const[x,y]=a.useState(!1),[j,N]=a.useState(!1),[C,w]=a.useState(!1),[_,S]=a.useState(e.description||""),[z,M]=a.useState(!1),[T,U]=a.useState(e.column==="in-progress"||e.column==="triage"&&e.steps.some(A=>A.status==="done"||A.status==="skipped")),[V,L]=a.useState(null),[R,F]=a.useState(null),[W,G]=a.useState(!1),[te,E]=a.useState(!1),[$,P]=a.useState(()=>Date.now()),k=a.useRef(null),O=a.useRef(!1),ne=a.useRef(null),we=a.useRef(null),[ie,ce]=a.useState(!1),{badgeUpdates:ke,subscribeToBadge:D,unsubscribeFromBadge:se}=Lp(n),{confirm:Z}=Ws(),ge=a.useRef(null),ue=a.useRef(!1),me=a.useCallback(A=>A instanceof Element?!!A.closest("button, a, input, textarea, select, label, [role='button']"):!1,[]);a.useEffect(()=>{S(e.description||"")},[e.id,e.description]),a.useEffect(()=>{if(!W)return;const A=X=>{we.current&&!we.current.contains(X.target)&&G(!1)};return document.addEventListener("click",A),()=>document.removeEventListener("click",A)},[W]),a.useEffect(()=>{if(!e.missionId){L(null);return}const A=Lc.get(e.missionId);if(A){L(A);return}let X=!1;return vN(e.missionId,n).then($e=>{X||L($e)}),()=>{X=!0}},[e.missionId,n]),a.useEffect(()=>{if(!e.assignedAgentId){F(null);return}const A=zc.get(e.assignedAgentId);if(A){F(A);return}F(null);let X=!1;return jN(e.assignedAgentId,n).then($e=>{X||F($e)}),()=>{X=!0}},[e.assignedAgentId,n]),a.useEffect(()=>{if(C&&k.current){const A=k.current;A.focus(),A.style.height="auto",A.style.height=A.scrollHeight+"px"}},[C]),a.useEffect(()=>{if(typeof IntersectionObserver>"u"){ce(!0);return}const A=ne.current;if(!A)return;const X=new IntersectionObserver(([$e])=>{ce($e?.isIntersecting??!0)},{rootMargin:"200px"});return X.observe(A),()=>X.disconnect()},[C,e.id]);const ae=a.useCallback(A=>{A.dataTransfer.setData("text/plain",e.id),A.dataTransfer.effectAllowed="move",y(!0)},[e.id]),be=a.useCallback(()=>{y(!1)},[]),Ae=a.useCallback(A=>A.dataTransfer.types.includes("Files"),[]),Fe=a.useCallback(A=>{Ae(A)&&(A.preventDefault(),A.stopPropagation(),A.dataTransfer.dropEffect="copy",N(!0))},[Ae]),at=a.useCallback(A=>{Ae(A)&&(A.preventDefault(),A.stopPropagation(),N(!1))},[Ae]),et=a.useCallback(async A=>{if(!Ae(A))return;A.preventDefault(),A.stopPropagation(),N(!1);const X=Array.from(A.dataTransfer.files);for(const $e of X)try{await yr(e.id,$e,n),r(`Attached ${$e.name} to ${e.id}`,"success")}catch(dt){r(`Failed to attach ${$e.name}: ${je(dt)}`,"error")}},[e.id,Ae,r]),Ye=a.useCallback(()=>{C||i(e)},[e,i,C]),rt=a.useCallback(A=>{if(O.current){O.current=!1;return}me(A.target)||Ye()},[Ye,me]),Oe=a.useCallback(A=>{const X=A.touches[0];X&&(ge.current={x:X.clientX,y:X.clientY,time:Date.now()},ue.current=!1)},[]),We=a.useCallback(A=>{if(!ge.current)return;const X=A.touches[0];if(!X)return;const $e=Math.abs(X.clientX-ge.current.x),dt=Math.abs(X.clientY-ge.current.y);($e>$u||dt>$u)&&(ue.current=!0)},[]),oe=a.useCallback(A=>{if(me(A.target)||!ge.current)return;const $e=Date.now()-ge.current.time<UN,dt=!ue.current;$e&&dt&&(O.current=!0,Ye()),ge.current=null,ue.current=!1},[Ye,me]),xe=a.useCallback(async(A,X)=>{A.stopPropagation();try{const $e=await vr(X,n);i($e)}catch{r(`Failed to load dependency ${X}`,"error")}},[i,r]),ee=e.status==="failed",Re=e.paused===!0,Ue=kN(e.priority),pe=Ue!==Ns,Me=_o(e,f,b),ze=e.column==="triage"&&e.status==="awaiting-approval",tt=e.column==="archived",ye=!o&&!s&&!ee&&!Re&&!Me&&!ze&&(e.column==="in-progress"||_u.has(e.status)),de=!s&&!Re&&!C&&!tt,Ie=NN.has(e.column)&&!ye&&!Re&&!s&&l,fe=!!(e.prInfo||e.issueInfo),_e=!!(e.assignedAgentId&&R===null),Ge=a.useMemo(()=>{const A=[];return e.modelProvider&&A.push(e.modelProvider),e.validatorModelProvider&&!A.includes(e.validatorModelProvider)&&A.push(e.validatorModelProvider),e.planningModelProvider&&!A.includes(e.planningModelProvider)&&A.push(e.planningModelProvider),A},[e.modelProvider,e.validatorModelProvider,e.planningModelProvider]),Pe=a.useMemo(()=>Fp(e,v),[e.steps,e.enabledWorkflowSteps,e.workflowStepResults,v]),ft=Pe.total>0&&(e.status==="executing"||e.column==="in-progress");a.useEffect(()=>{if(e.column!=="in-progress"&&e.column!=="in-review")return;const A=e.status!=null&&Au.has(e.status);if(e.column==="in-progress"){const $e=rr(e,Date.now()),dt=Ru(e,Date.now()),jt=or(e,Date.now());if($e==null&&dt==null&&jt==null)return}if(!A&&e.column==="in-review"){const $e=rr(e,Date.now()),dt=or(e,Date.now());if($e==null&&dt==null)return}P(Date.now());const X=window.setInterval(()=>{P(Date.now())},EN);return()=>window.clearInterval(X)},[e.column,e.status,e.columnMovedAt,e.updatedAt,e.workflowStepResults,e.timedExecutionMs,e.executionStartedAt,e.executionCompletedAt]);const Y=a.useMemo(()=>{if(!CN.has(e.column))return null;if(e.status!=null&&Au.has(e.status)){const zt=AN(e,$);if(zt!=null){const Rt=Pu(zt);if(Rt){const un=Up(e,$),In=un==null?null:Tu(un),gn=In?`Execution time ${Rt}. Merge phase ${In}`:`Execution time ${Rt}. Merging`;return{label:Rt,title:gn,ariaLabel:gn}}}}if(e.column==="in-progress"){const zt=rr(e,$)??Ru(e,$)??or(e,$);if(zt==null)return null;const Rt=Tu(zt);return Rt?{label:Rt,title:`In progress ${Rt}`,ariaLabel:`In progress ${Rt}`}:null}const X=rr(e,$)??or(e,$);if(X==null)return null;const $e=Pu(X);if(!$e)return null;const dt=_N(e);if(dt==null)return{label:$e,title:`Execution time ${$e}`,ariaLabel:`Execution time ${$e}`};const jt=new Date(dt).toLocaleString();return{label:$e,title:`Execution time ${$e}. Completed ${jt}`,ariaLabel:`Execution time ${$e}. Completed ${jt}`}},[e.column,e.status,e.columnMovedAt,e.timedExecutionMs,e.updatedAt,e.workflowStepResults,e.log,e.executionStartedAt,e.executionCompletedAt,$]);a.useEffect(()=>{if(!fe||!ie){se(e.id);return}return D(e.id),()=>{se(e.id)}},[fe,ie,D,e.id,se]);const le=ke.get(`${n??"default"}:${e.id}`),ve=e.column==="in-progress"||e.column==="in-review",nt=a.useMemo(()=>e.steps.map(A=>`${A.name}:${A.status}`).join("|"),[e.steps]),{stats:Q}=mN(e.id,e.column,e.mergeDetails?.commitSha,n,{enabled:ie,worktree:e.worktree,stepVersion:ve?nt:void 0,pollIntervalMs:ve?3e4:void 0}),Je=a.useMemo(()=>oN(e.id,n),[e.id,n]),ut=a.useMemo(()=>{const A=le?.prInfo,X=le?.timestamp,$e=Je?.result?.prInfo,dt=Je?.timestamp?new Date(Je.timestamp).toISOString():void 0,jt=e.prInfo,zt=e.prInfo?.lastCheckedAt??e.updatedAt;let Rt=Mo(A,X,jt,zt);const un=X&&X>=zt?X:zt;return $e&&dt&&(!un||dt>un)&&(Rt=$e),Rt},[le,Je,e.prInfo,e.updatedAt]),ht=a.useMemo(()=>{const A=le?.issueInfo,X=le?.timestamp,$e=Je?.result?.issueInfo,dt=Je?.timestamp?new Date(Je.timestamp).toISOString():void 0,jt=e.issueInfo,zt=e.issueInfo?.lastCheckedAt??e.updatedAt;let Rt=Mo(A,X,jt,zt);const un=X&&X>=zt?X:zt;return $e&&dt&&(!un||dt>un)&&(Rt=$e),Rt},[le,Je,e.issueInfo,e.updatedAt]),Et=a.useCallback(A=>{A?.stopPropagation(),!(!Ie||z)&&(w(!0),S(e.description||""))},[Ie,z,e.description]),yt=a.useCallback(()=>{w(!1),S(e.description||"")},[e.description]),bt=a.useCallback(()=>_!==(e.description||""),[_,e.description]),vt=a.useCallback(async()=>{if(!(!l||z)){if(!bt()){yt();return}M(!0);try{await l(e.id,{description:_.trim()||void 0}),r(`Updated ${e.id}`,"success"),w(!1)}catch(A){r(`Failed to update ${e.id}: ${je(A)}`,"error")}finally{M(!1)}}},[l,e.id,_,z,bt,yt,r]),qt=a.useCallback(A=>{A.key==="Enter"&&!A.shiftKey?(A.preventDefault(),vt()):A.key==="Escape"&&(A.preventDefault(),yt())},[vt,yt]),Tt=a.useCallback(()=>{setTimeout(()=>{const A=document.activeElement;A===k.current||A?.closest(".card-editing-content")||(bt()?vt():yt())},0)},[bt,vt,yt]),At=a.useCallback(A=>{Ie&&(A.stopPropagation(),Et(A))},[Ie,Et]),Lt=a.useCallback(A=>{A.stopPropagation(),Et(A)},[Et]),Vt=a.useCallback(A=>{S(A.target.value);const X=A.target;X.style.height="auto",X.style.height=X.scrollHeight+"px"},[]),Kt=a.useCallback(A=>{A.stopPropagation(),c&&c(e.id).then(()=>{r(`Archived ${e.id}`,"success")}).catch(X=>{r(`Failed to archive ${e.id}: ${je(X)}`,"error")})},[r,c,e.id]),Ot=a.useCallback(A=>{A.stopPropagation(),u&&u(e.id).then(()=>{r(`Unarchived ${e.id}`,"success")}).catch(X=>{r(`Failed to unarchive ${e.id}: ${je(X)}`,"error")})},[r,u,e.id]),Wt=a.useCallback(async A=>{if(A.stopPropagation(),!(!d||!await Z({title:"Delete Task",message:`Delete ${e.id}?`,danger:!0})))try{await d(e.id),r(`Deleted ${e.id}`,"success")}catch($e){const dt=$N($e);if(!dt||dt.dependentIds.length===0){r(`Failed to delete ${e.id}: ${je($e)}`,"error");return}const jt=dt.dependentIds.join(", ");if(!await Z({title:"Force Delete Task",message:`${e.id} is a dependency of ${jt}.
|
|
617
|
-
|
|
618
|
-
Delete anyway by removing these dependency references first?`,danger:!0}))return;try{await d(e.id,{removeDependencyReferences:!0}),r(`Deleted ${e.id} after removing dependency references`,"success")}catch(Rt){r(`Failed to delete ${e.id}: ${je(Rt)}`,"error")}}},[r,Z,d,e.id]),_t=a.useCallback(A=>{A.stopPropagation(),h?.(e,"changes")},[e,h]),St=a.useCallback(A=>{A.stopPropagation(),U(X=>!X)},[]),Yt=a.useCallback(A=>{A.stopPropagation(),e.missionId&&p&&p(e.missionId)},[e.missionId,p]),Xt=a.useCallback(A=>{A.stopPropagation(),G(X=>!X)},[]),Qt=a.useCallback((A,X)=>{A.stopPropagation(),G(!1),g&&g(e.id,X).then(()=>{r(`Moved ${e.id} to ${Fn[X]}`,"success")}).catch($e=>{r(`Failed to move ${e.id}: ${je($e)}`,"error")})},[r,g,e.id]),B=a.useCallback(async A=>{if(A.stopPropagation(),!(!m||te)){E(!0);try{await m(e.id)}catch(X){r(`Failed to retry ${e.id}: ${je(X)}`,"error")}finally{E(!1)}}},[r,te,m,e.id]),he=`card${x?" dragging":""}${s?" queued":""}${ye?" agent-active":""}${ee?" failed":""}${Re?" paused":""}${Me?" stuck":""}${ze?" awaiting-approval":""}${j?" file-drop-target":""}${C?" card-editing":""}${z?" card-saving":""}`,De=(()=>{if(e.column==="in-progress"){const A=Q?.filesChanged,X=A==null||A===0?e.modifiedFiles?.length:void 0,$e=A!=null&&A>0?A:X;return $e==null||$e===0?null:t.jsxs("button",{type:"button",className:"card-session-files",onClick:_t,disabled:!h,children:[t.jsx(Gn,{size:12}),t.jsxs("span",{children:[$e," ",$e===1?"file":"files"," changed"]})]})}if(e.column==="in-review"){const A=Q?.filesChanged,X=A==null||A===0?e.modifiedFiles?.length:void 0,$e=A!=null&&A>0?A:X;return $e==null||$e===0?null:t.jsxs("button",{type:"button",className:"card-session-files",onClick:_t,disabled:!h,children:[t.jsx(Gn,{size:12}),t.jsxs("span",{children:[$e," ",$e===1?"file":"files"," changed"]})]})}if(e.column==="done"){const A=Q?.filesChanged,X=e.mergeDetails?.filesChanged,$e=A??X;if($e!=null&&$e>0)return t.jsxs("button",{type:"button",className:"card-session-files",onClick:_t,disabled:!h,children:[t.jsx(Gn,{size:12}),t.jsxs("span",{children:[$e," ",$e===1?"file":"files"," changed"]})]});const dt=e.modifiedFiles?.length;if(dt!=null&&dt>0)return t.jsxs("button",{type:"button",className:"card-session-files",onClick:_t,disabled:!h,children:[t.jsx(Gn,{size:12}),t.jsxs("span",{children:[dt," ",dt===1?"file":"files"," changed"]})]})}return null})();return C?t.jsx("div",{ref:ne,className:he,"data-id":e.id,onDoubleClick:At,children:t.jsxs("div",{className:"card-editing-content",children:[t.jsx("textarea",{ref:k,className:"card-edit-desc-textarea",placeholder:"Task description",value:_,onChange:Vt,onKeyDown:qt,onBlur:Tt,disabled:z,rows:4}),z&&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:ne,className:he,"data-id":e.id,draggable:de,onDragStart:de?ae:void 0,onDragEnd:de?be:void 0,onDragOver:Fe,onDragLeave:at,onDrop:et,onClick:rt,onTouchStart:Oe,onTouchMove:We,onTouchEnd:oe,onDoubleClick:At,children:[t.jsxs("div",{className:"card-header",children:[t.jsx("span",{className:"card-id",children:e.id}),Re&&t.jsx("span",{className:"card-status-badge paused",children:"paused"}),!Re&&e.status&&e.status!=="queued"&&t.jsx("span",{className:`card-status-badge card-status-badge--${e.column}${ze?" awaiting-approval":""}${_u.has(e.status)?" pulsing":""}${ee?" failed":""}${Me?" stuck":""}`,children:Me?"Stuck":ze?"Awaiting Approval":e.status}),Me&&(Re||!e.status||e.status==="queued")&&t.jsx("span",{className:"card-status-badge stuck",children:"Stuck"}),fe&&t.jsx(Dp,{prInfo:ut,issueInfo:ht}),pe&&t.jsx("span",{className:`card-priority-badge card-priority-badge--${Ue}`,children:Ue}),e.executionMode==="fast"&&t.jsx("span",{className:"card-execution-mode-badge card-execution-mode-badge--fast",children:"Fast"}),e.missionId&&t.jsxs("span",{className:"card-mission-badge",onClick:Yt,title:`Mission: ${V??e.missionId}`,role:p?"button":void 0,tabIndex:p?0:void 0,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[t.jsx(vs,{size:11}),yN(V??e.missionId)]}),t.jsxs("div",{className:"card-header-actions",children:[Ie&&t.jsx("button",{className:"card-edit-btn",onClick:Lt,title:"Edit task","aria-label":"Edit task",children:t.jsx(ds,{size:12})}),e.column==="triage"&&d&&t.jsx("button",{className:"card-delete-btn",onClick:Wt,title:"Delete task","aria-label":"Delete task",children:t.jsx(ln,{size:12})}),e.column==="done"&&c&&t.jsx("button",{className:"card-archive-btn",onClick:Kt,title:"Archive task","aria-label":"Archive task",children:"Archive"}),e.column==="archived"&&u&&t.jsx("button",{className:"card-unarchive-btn",onClick:Ot,title:"Unarchive task","aria-label":"Unarchive task",children:"Unarchive"}),e.column==="in-progress"&&g&&t.jsxs("div",{className:"card-send-back",ref:we,children:[t.jsxs("button",{className:"card-send-back-btn",onClick:Xt,title:"Send back","aria-label":"Send back","aria-haspopup":"menu","aria-expanded":W,children:["Send back",t.jsx(en,{size:10})]}),W&&t.jsx("div",{className:"card-send-back-menu",role:"menu",children:$c["in-progress"].filter(A=>A!=="in-review").map(A=>t.jsx("button",{className:"card-send-back-menu-item",role:"menuitem",onClick:X=>Qt(X,A),children:Fn[A]},A))})]}),e.column==="in-review"&&g&&t.jsxs("div",{className:"card-send-back",ref:we,children:[t.jsxs("button",{className:"card-send-back-btn",onClick:Xt,title:"Move task","aria-label":"Move task","aria-haspopup":"menu","aria-expanded":W,children:["Move",t.jsx(en,{size:10})]}),W&&t.jsx("div",{className:"card-send-back-menu",role:"menu",children:$c["in-review"].map(A=>t.jsx("button",{className:"card-send-back-menu-item",role:"menuitem",onClick:X=>Qt(X,A),children:A==="done"?"Done (no merge)":Fn[A]},A))})]}),e.size&&t.jsx("span",{className:`card-size-badge size-${e.size.toLowerCase()}`,children:e.size})]})]}),ee&&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}),m&&t.jsxs("button",{type:"button",className:"btn btn-sm card-error-retry-btn",onClick:B,disabled:te,children:[t.jsx(Gx,{size:12}),te?"Retrying…":"Retry"]})]}),t.jsx("div",{className:"card-title",title:e.title||e.description||void 0,children:Lu(e.title,Du)||Lu(e.description,Du)||e.id}),ft&&(()=>{const A=Pe.completed/Pe.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:`${A}%`,backgroundColor:SN[e.column]}})}),t.jsxs("span",{className:"card-progress-label",children:[Pe.completed,"/",Pe.total]})]}),t.jsxs("button",{type:"button",className:"card-steps-toggle",onClick:St,"aria-expanded":T,"aria-label":T?"Hide steps":"Show steps",children:[t.jsxs("span",{children:[Pe.total," step",Pe.total===1?"":"s"]}),t.jsx(en,{size:14,className:`card-steps-toggle-icon${T?" expanded":""}`})]}),T&&t.jsx("div",{className:"card-steps-list",children:Pe.items.map(X=>{const $e=X.source==="workflow"&&X.status==="failed";return t.jsxs("div",{className:"card-step-item",children:[t.jsx("span",{className:`card-step-dot card-step-dot--${X.status}${$e?" card-step-dot--workflow-failed":""}`,"aria-hidden":"true"}),t.jsx("span",{className:`card-step-name${X.status==="done"?" completed":""}`,children:X.name}),X.source==="workflow"&&t.jsx("span",{className:`card-step-workflow-badge card-step-workflow-badge--${X.phase}`,title:"Workflow check",children:"workflow"})]},X.id)})})]})})(),(De||Y)&&t.jsxs("div",{className:"card-footer-row",children:[De,Y&&t.jsxs("span",{className:"card-time-indicator",title:Y.title,"aria-label":Y.ariaLabel,children:[t.jsx(Ci,{size:12}),t.jsx("span",{children:Y.label})]})]}),(e.dependencies&&e.dependencies.length>0||s||e.status==="queued"||e.blockedBy)&&t.jsxs("div",{className:"card-meta",children:[e.dependencies&&e.dependencies.length>0&&t.jsx("div",{className:"card-dep-list",children:e.dependencies.map(A=>t.jsxs("span",{className:"card-dep-badge clickable",onClick:X=>void xe(X,A),title:`Click to view ${A}`,children:[t.jsx(pa,{size:12,style:{verticalAlign:"middle"}})," ",A]},A))}),e.blockedBy&&t.jsxs("span",{className:"card-scope-badge","data-tooltip":`Blocked by ${e.blockedBy} (file overlap)`,children:[t.jsx(Hi,{size:12,style:{verticalAlign:"middle"}})," ",e.blockedBy]}),(s||e.status==="queued")&&e.column!=="in-progress"&&t.jsxs("span",{className:"queued-badge",children:[t.jsx(Ci,{size:12,style:{verticalAlign:"middle"}})," Queued"]})]}),(e.assignedAgentId||Ge.length>0)&&t.jsxs("div",{className:"card-agent-row",children:[Ge.length>0&&t.jsx("span",{className:"card-provider-icons","data-testid":"card-provider-icons",children:Ge.map(A=>t.jsx(Dn,{provider:A,size:"sm"},A))}),e.assignedAgentId&&t.jsxs("span",{className:`card-agent-badge${_e?" card-agent-badge--loading":""}`,title:`Assigned to ${R??e.assignedAgentId}`,children:[t.jsx(Cn,{size:11}),t.jsx("span",{className:"card-agent-badge-text",children:wN(R??e.assignedAgentId,15)})]})]}),t.jsx(Yo,{slotId:"task-card-badge",projectId:n})]})}const $u=10,UN=300,Du=140;function Lu(e,n){return e?e.length>n?e.slice(0,n)+"…":e:""}const Ao=a.memo(ON,FN);Ao.displayName="TaskCard";function BN({label:e,activeTasks:n,queuedTasks:s,projectId:i,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:u,onOpenDetailWithTab:d,taskStuckTimeoutMs:m,onOpenMission:h,lastFetchTimeMs:f,workflowStepNameLookup:p}){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(xb,{size:14}):t.jsx(Vs,{size:14})}),t.jsx("span",{className:"worktree-label",children:e})]}),n.map(g=>t.jsx(Ao,{task:g,projectId:i,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:u,onOpenDetailWithTab:d,taskStuckTimeoutMs:m,onOpenMission:h,lastFetchTimeMs:f,workflowStepNameLookup:p},g.id)),s.map(g=>t.jsx(Ao,{task:g,projectId:i,queued:!0,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:u,onOpenDetailWithTab:d,taskStuckTimeoutMs:m,onOpenMission:h,lastFetchTimeMs:f,workflowStepNameLookup:p},g.id))]})}const Bp=a.memo(BN);Bp.displayName="WorktreeGroup";function zu(e){return e.toLowerCase().replace(/[-_./]/g,"")}function HN(e,n){let s=0;for(let i=0;i<n.length&&s<e.length;i++)e[s]===n[i]&&s++;return s===e.length}function qN(e,n,s){const i=e.length,r=n.length;if(i===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<=i;c++){const u=new Array(r+1);u[0]=c;for(let d=1;d<=r;d++){const m=e[c-1]===n[d-1]?0:1;u[d]=Math.min(l[d]+1,u[d-1]+1,l[d-1]+m),c>=2&&d>=2&&e[c-1]===n[d-2]&&e[c-2]===n[d-1]&&(u[d]=Math.min(u[d],o[d-2]+1))}o=l,l=u}for(let c=0;c<=r;c++)if(l[c]<=s)return!0;return!1}function VN(e,n){const s=zu(e),i=zu(n);if(s.length===0||i.includes(s))return!0;const r=i.split(/\s+/).filter(Boolean);for(const o of r)if(s.length>=3&&HN(s,o)||s.length>=4&&qN(s,o,1))return!0;return!1}function WN(e,n){const s=n.toLowerCase().trim().split(/\s+/).filter(Boolean);return s.length===0?e:e.filter(i=>{const r=`${i.provider} ${i.id} ${i.name}`;return s.every(o=>VN(o,r))})}function Jn({models:e,value:n,onChange:s,placeholder:i="Select a model…",disabled:r=!1,id:o,label:l,favoriteProviders:c=[],onToggleFavorite:u,favoriteModels:d=[],onToggleModelFavorite:m,noChangeValue:h,noChangeLabel:f="No change"}){const[p,g]=a.useState(!1),[b,v]=a.useState(""),[x,y]=a.useState(0),[j,N]=a.useState(null),[C,w]=a.useState(null),_=a.useRef(null),S=a.useRef(null),z=a.useRef(null),M=a.useRef(null),T=a.useRef(null),U=a.useMemo(()=>WN(e,b),[e,b]),V=a.useMemo(()=>U.reduce((Z,ge)=>((Z[ge.provider]??=[]).push(ge),Z),{}),[U]),L=a.useMemo(()=>{const Z=[];for(const ge of d){const ue=ge.indexOf("/");if(ue===-1)continue;const me=ge.slice(0,ue),ae=ge.slice(ue+1),be=U.find(Ae=>Ae.provider===me&&Ae.id===ae);be&&Z.push({model:be,fullId:ge})}return Z},[d,U]),R=a.useMemo(()=>{const Z=Object.entries(V),ge=new Set(c);return Z.sort(([ue],[me])=>{const ae=ge.has(ue),be=ge.has(me);if(ae&&!be)return-1;if(!ae&&be)return 1;if(ae&&be){const Ae=c.indexOf(ue),Fe=c.indexOf(me);if(Ae!==Fe)return Ae-Fe}return ue.localeCompare(me)})},[V,c]),F=typeof h=="string"&&h.length>0,W=a.useMemo(()=>{if(!n||F&&n===h)return null;const Z=n.indexOf("/");return Z===-1?null:n.slice(0,Z)},[F,h,n]),G=a.useMemo(()=>{const Z=[];return F&&Z.push({type:"no-change",value:h,label:f}),Z.push({type:"default",value:"",label:"Use default"}),Z},[F,f,h]),te=a.useMemo(()=>{const Z=[...G];for(const{model:ge,fullId:ue}of L)Z.push({type:"favorite",value:ue,label:ge.name,provider:ge.provider});return R.forEach(([ge,ue])=>{Z.push({type:"provider",value:`__group_${ge}`,label:ge,provider:ge}),ue.forEach(me=>{Z.push({type:"model",value:`${me.provider}/${me.id}`,label:me.name,provider:me.provider})})}),Z},[L,R,G]),E=a.useMemo(()=>{if(F&&n===h)return f;if(!n)return"Use default";const Z=n.indexOf("/");if(Z===-1)return n;const ge=n.slice(0,Z),ue=n.slice(Z+1);return e.find(ae=>ae.provider===ge&&ae.id===ue)?.name||n},[F,f,h,n,e]),$=a.useMemo(()=>te.findIndex(Z=>Z.value===n),[te,n]),P=a.useCallback(()=>{const Z=window.visualViewport;return Z&&Z.height>0&&Z.width>0?{width:Z.width,height:Z.height,offsetTop:Z.offsetTop,offsetLeft:Z.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),k=a.useCallback(()=>{const{height:Z}=P(),ge=typeof window.matchMedia=="function",ue=ge?window.matchMedia("(max-width: 640px)").matches:!1,me=ge?window.matchMedia("(max-width: 768px)").matches:!1;return Z<=0?320:ue?Math.min(Z*.6,360):me?Math.min(Z*.7,420):320},[P]),O=a.useCallback(()=>{const Z=S.current;if(!Z)return;const ge=Z.getBoundingClientRect(),{width:ue,height:me,offsetTop:ae,offsetLeft:be}=P(),Ae=16,Fe=16,at=4,et=k(),Ye=ge.bottom-ae,rt=ge.top-ae,Oe=ge.left-be,We=me-Ye,oe=rt,xe=Math.max(We-Fe-at,160),ee=Math.max(oe-Fe-at,160),Re=We<et&&oe>We,Ue=Math.max(Math.min(Re?ee:xe,et),160),pe=Math.min(ge.width,ue-Ae*2),Me=Math.min(Math.max(Oe,Ae),ue-Ae-pe)+be,ze=Re?Math.max(Fe+ae,rt-Ue-at+ae):Math.min(Ye+at+ae,me+ae-Fe-Ue);N({top:ze,left:Me,width:pe,maxHeight:Ue})},[P,k]);a.useEffect(()=>{w(document.body)},[]);const ne=a.useRef(!1);a.useEffect(()=>{if(!p){ne.current=!1;return}if(ne.current||te.length===0)return;const Z=te.findIndex((ge,ue)=>ue>=($>=0?$:0)&&ge.type!=="provider");y(Z>=0?Z:0),ne.current=!0},[p,te,$]),a.useEffect(()=>{p&&ne.current&&(y(0),T.current&&(T.current.scrollTop=0))},[b,p]),a.useEffect(()=>{if(!p)return;O();const Z=requestAnimationFrame(()=>M.current?.focus());return()=>cancelAnimationFrame(Z)},[p,O]),a.useEffect(()=>{if(!p)return;const Z=()=>O();window.addEventListener("resize",Z),window.addEventListener("scroll",Z,!0);const ge=window.visualViewport;return ge&&(ge.addEventListener("resize",Z),ge.addEventListener("scroll",Z)),()=>{window.removeEventListener("resize",Z),window.removeEventListener("scroll",Z,!0),ge&&(ge.removeEventListener("resize",Z),ge.removeEventListener("scroll",Z))}},[p,O]),a.useEffect(()=>{if(!p)return;const Z=ge=>{const ue=ge.target,me=_.current?.contains(ue),ae=z.current?.contains(ue);!me&&!ae&&(g(!1),v(""))};return document.addEventListener("mousedown",Z),()=>document.removeEventListener("mousedown",Z)},[p]);const we=a.useCallback(Z=>{switch(Z.key){case"ArrowDown":if(Z.preventDefault(),!p)g(!0);else{let ge=x;for(let ue=1;ue<=te.length;ue++){const me=(x+ue)%te.length;if(te[me]?.type!=="provider"){ge=me;break}}y(ge)}break;case"ArrowUp":if(Z.preventDefault(),p){let ge=x;for(let ue=1;ue<=te.length;ue++){const me=(x-ue+te.length)%te.length;if(te[me]?.type!=="provider"){ge=me;break}}y(ge)}break;case"Enter":if(Z.preventDefault(),p){const ge=te[x];ge&&ge.type!=="provider"&&ge.type!=="favorite"&&(s(ge.value),g(!1),v(""))}else g(!0);break;case"Escape":Z.preventDefault(),g(!1),v("");break;case"Tab":p&&(g(!1),v(""));break}},[p,x,te,s]),ie=a.useCallback(Z=>{s(Z),g(!1),v("")},[s]),ce=a.useCallback(()=>{v(""),M.current?.focus()},[]),ke=a.useCallback(()=>{r||g(Z=>!Z)},[r]);a.useEffect(()=>{if(p&&T.current){const Z=T.current.querySelector(`[data-index="${x}"]`);Z&&typeof Z.scrollIntoView=="function"&&Z.scrollIntoView({block:"nearest"})}},[x,p]);const D=b.length>0,se=p&&j?t.jsxs("div",{ref:z,className:"model-combobox-dropdown model-combobox-dropdown--portal",role:"listbox","data-testid":"model-combobox-portal",onKeyDown:we,style:{top:`${j.top}px`,left:`${j.left}px`,width:`${j.width}px`,maxHeight:`${j.maxHeight}px`},children:[t.jsxs("div",{className:"model-combobox-search-wrapper",children:[t.jsx("input",{ref:M,type:"text",className:"model-combobox-search",placeholder:"Filter models…",value:b,onChange:Z=>v(Z.target.value),onClick:Z=>Z.stopPropagation()}),D&&t.jsx("button",{type:"button",className:"model-combobox-clear",onClick:ce,"aria-label":"Clear filter",children:"×"})]}),t.jsxs("div",{className:"model-combobox-results-count",children:[U.length," model",U.length!==1?"s":""]}),t.jsxs("div",{ref:T,className:"model-combobox-list",children:[G.map((Z,ge)=>t.jsx("div",{"data-index":ge,className:`model-combobox-option ${x===ge?"model-combobox-option--highlighted":""} ${n===Z.value?"model-combobox-option--selected":""}`,onClick:()=>ie(Z.value),onMouseEnter:()=>y(ge),role:"option","aria-selected":n===Z.value,children:t.jsx("span",{className:"model-combobox-option-text model-combobox-option-text--default",children:Z.label})},`${Z.type}-${Z.value}`)),L.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"model-combobox-divider"}),L.map(({model:Z,fullId:ge},ue)=>{const me=ue+G.length,ae=x===me,be=n===ge;return t.jsxs("div",{"data-index":me,className:`model-combobox-option model-combobox-option--favorite ${ae?"model-combobox-option--highlighted":""} ${be?"model-combobox-option--selected":""}`,onClick:()=>ie(ge),onMouseEnter:()=>y(me),role:"option","aria-selected":be,children:[t.jsxs("span",{className:"model-combobox-option-main",children:[t.jsx("span",{className:"model-combobox-option-icon",children:t.jsx(Dn,{provider:Z.provider,size:"sm"})}),t.jsx("span",{className:"model-combobox-option-text",children:Z.name})]}),t.jsx("span",{className:"model-combobox-option-id",children:Z.id}),m&&t.jsx("button",{type:"button",className:"model-combobox-option-favorite model-combobox-option-favorite--active",onClick:Ae=>{Ae.stopPropagation(),m(ge)},title:"Remove from favorites","aria-label":`Remove ${Z.name} from favorites`,children:"★"})]},ge)}),t.jsx("div",{className:"model-combobox-divider"})]}),R.map(([Z,ge])=>{const ue=te.findIndex(be=>be.value===`__group_${Z}`),me=c.includes(Z),ae=ge.filter(be=>{const Ae=`${be.provider}/${be.id}`;return!d.includes(Ae)});return ae.length===0?null:t.jsxs("div",{className:"model-combobox-group",children:[t.jsxs("div",{className:"model-combobox-optgroup","data-index":ue,children:[t.jsx(Dn,{provider:Z,size:"sm"}),t.jsx("span",{className:"model-combobox-optgroup-text",children:Z}),u&&t.jsx("button",{type:"button",className:`model-combobox-optgroup-favorite ${me?"model-combobox-optgroup-favorite--active":""}`,onClick:be=>{be.stopPropagation(),u(Z)},title:me?"Remove from favorites":"Add to favorites","aria-label":me?`Remove ${Z} from favorites`:`Add ${Z} to favorites`,children:"★"})]}),ae.map(be=>{const Ae=`${be.provider}/${be.id}`,Fe=te.findIndex(rt=>rt.value===Ae),at=x===Fe,et=n===Ae,Ye=d.includes(Ae);return t.jsxs("div",{"data-index":Fe,className:`model-combobox-option ${at?"model-combobox-option--highlighted":""} ${et?"model-combobox-option--selected":""}`,onClick:()=>ie(Ae),onMouseEnter:()=>y(Fe),role:"option","aria-selected":et,children:[t.jsx("span",{className:"model-combobox-option-text",children:be.name}),t.jsx("span",{className:"model-combobox-option-id",children:be.id}),m&&t.jsx("button",{type:"button",className:`model-combobox-option-favorite ${Ye?"model-combobox-option-favorite--active":""}`,onClick:rt=>{rt.stopPropagation(),m(Ae)},title:Ye?"Remove from favorites":"Add to favorites","aria-label":Ye?`Remove ${be.name} from favorites`:`Add ${be.name} to favorites`,children:Ye?"★":"☆"})]},Ae)})]},Z)}),U.length===0&&D&&t.jsxs("div",{className:"model-combobox-no-results",children:["No models match '",b,"'"]})]})]}):null;return t.jsxs(t.Fragment,{children:[t.jsx("div",{ref:_,className:"model-combobox",onKeyDown:we,children:t.jsxs("button",{ref:S,type:"button",id:o,className:"model-combobox-trigger",onClick:ke,disabled:r,"aria-haspopup":"listbox","aria-expanded":p,"aria-label":l,children:[W&&t.jsx("span",{className:"model-combobox-trigger-icon",children:t.jsx(Dn,{provider:W,size:"sm"})}),t.jsx("span",{className:"model-combobox-trigger-text",children:E||i}),t.jsx("span",{className:"model-combobox-trigger-arrow",children:"▼"})]})}),C&&se?da.createPortal(se,C):null]})}function fd(e,n){return typeof n!="string"||n.length===0?e:`kb:${n}:${e}`}function Yn(e,n){return typeof window>"u"?null:window.localStorage.getItem(fd(e,n))}function bs(e,n,s){typeof window>"u"||window.localStorage.setItem(fd(e,s),n)}function wr(e,n){typeof window>"u"||window.localStorage.removeItem(fd(e,n))}const KN=1e4,GN=1e3;function Xo(){const[e,n]=a.useState([]),[s,i]=a.useState(!0),[r,o]=a.useState(null),l=a.useRef(null),c=a.useRef(0),u=a.useCallback(async()=>{try{o(null);const p=await Eo();n(p)}catch(p){o(p instanceof Error?p.message:"Failed to fetch nodes")}},[]);a.useEffect(()=>{let p=!1;async function g(){i(!0);try{const v=await Eo();p||(n(v),o(null))}catch(v){p||o(v instanceof Error?v.message:"Failed to fetch nodes")}finally{p||i(!1)}}g();const b=()=>{if(document.visibilityState!=="visible")return;const v=Date.now();v-c.current<GN||(c.current=v,u())};return document.addEventListener("visibilitychange",b),()=>{p=!0,document.removeEventListener("visibilitychange",b)}},[u]),a.useEffect(()=>{if(!s)return l.current=setInterval(()=>{u()},KN),()=>{l.current&&(clearInterval(l.current),l.current=null)}},[s,u]);const d=a.useCallback(async p=>{const g=await tk(p);return n(b=>[...b,g]),g},[]),m=a.useCallback(async(p,g)=>{const b=await nk(p,g);return n(v=>v.map(x=>x.id===p?b:x)),b},[]),h=a.useCallback(async p=>{await sk(p),n(g=>g.filter(b=>b.id!==p))},[]),f=a.useCallback(async p=>{const g=await ik(p);n(b=>b.map(v=>v.id===p?{...v,status:g.status,updatedAt:g.checkedAt}:v))},[]);return{nodes:e,loading:s,error:r,refresh:u,register:d,update:m,unregister:h,healthCheck:f}}const Ba="kb-quick-entry-text",JN=["image/png","image/jpeg","image/gif","image/webp"];function YN(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}function Sl(e,n){return e&&n?`${e}/${n}`:""}function Cl(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 Hp({onCreate:e,addToast:n,tasks:s=[],availableModels:i,onPlanningMode:r,onSubtaskBreakdown:o,projectId:l,autoExpand:c=!0,favoriteProviders:u,favoriteModels:d,onToggleFavorite:m,onToggleModelFavorite:h}){const[f,p]=a.useState(()=>typeof window<"u"&&Yn(Ba,l)||""),[g,b]=a.useState(!1),[v,x]=a.useState(!1),[y,j]=a.useState(!1),N=a.useRef(null),C=a.useRef(null),w=a.useRef(!1),_=a.useRef(l),[S,z]=a.useState([]),M=a.useRef([]),[T,U]=a.useState([]),[V,L]=a.useState(!1),[R,F]=a.useState(""),[W,G]=a.useState(null),[te,E]=a.useState([]),[$,P]=a.useState(void 0),[k,O]=a.useState(!1),[ne,we]=a.useState(!1),[ie,ce]=a.useState(!1),[ke,D]=a.useState(!1),[se,Z]=a.useState(null),[ge,ue]=a.useState(void 0),[me,ae]=a.useState(void 0),[be,Ae]=a.useState(void 0),[Fe,at]=a.useState(void 0),[et,Ye]=a.useState(void 0),[rt,Oe]=a.useState(void 0),We=a.useRef(null),oe=a.useRef(null),xe=a.useRef(null),ee=a.useRef(null),Re=a.useRef(null),Ue=a.useRef(null),[pe,Me]=a.useState(null),[ze,tt]=a.useState(null),[ye,de]=a.useState(null),Ie=a.useRef(null),fe=a.useRef(null),[_e,Ge]=a.useState(null),[Pe]=a.useState(()=>typeof document<"u"?document.body:null),[ft,Y]=a.useState(!1),[le,ve]=a.useState(null),[nt,Q]=a.useState(i??[]),[Je,ut]=a.useState([]),[ht,Et]=a.useState([]),[yt,bt]=a.useState(null),[vt,qt]=a.useState(void 0),[Tt,At]=a.useState(!1),[Lt,Vt]=a.useState(void 0),{nodes:Kt}=Xo(),[Ot,Wt]=a.useState(!1),[_t,St]=a.useState(!1),Yt=a.useRef(null),Xt=a.useRef(null),[Qt,B]=a.useState(null),he=u??Je,De=d??ht,A=!e;a.useEffect(()=>{if(i)Q(i),Y(!1),ve(null);else{let re=!1;return Y(!0),ve(null),hs().then(Ee=>{re||(Q(Ee.models),u||ut(Ee.favoriteProviders),d||Et(Ee.favoriteModels))}).catch(Ee=>{re||ve(je(Ee)||"Failed to load models")}).finally(()=>{re||Y(!1)}),Ko(l).then(Ee=>{re||bt(Ee)}).catch(()=>{}),()=>{re=!0}}},[i,u,d,l]);const X=Sl(ge,me),$e=Sl(be,Fe),dt=Sl(et,rt),jt=!!(ge&&me),zt=!!(be&&Fe),Rt=!!(et&&rt),un=Number(jt)+Number(zt)+Number(Rt),In=vt?yt?.modelPresets?.find(re=>re.id===vt)?.name??"Models":un>0?`${un} model${un===1?"":"s"}`:"Models",gn=a.useCallback((re,Ee)=>{if(!re||!Ee)return"Using default";const Qe=nt.find(gt=>gt.provider===re&>.id===Ee);return Qe?`${Qe.provider}/${Qe.id}`:`${re}/${Ee}`},[nt]);a.useEffect(()=>{p(Yn(Ba,l)||"")},[l]),a.useEffect(()=>{typeof window<"u"&&bs(Ba,f,l)},[f,l]),a.useEffect(()=>{_.current!==l&&(_.current=l,E([]),P(void 0),G(null),O(!1),Me(null))},[l]),a.useEffect(()=>{typeof window<"u"&&localStorage.removeItem("kb-quick-entry-expanded")},[]),a.useEffect(()=>{M.current=S},[S]),a.useEffect(()=>()=>{M.current.forEach(re=>URL.revokeObjectURL(re.previewUrl))},[]);const Bt=a.useCallback(()=>{const re=N.current;if(!re)return;re.style.height="auto";const Ee=Math.min(re.scrollHeight,200);re.style.height=`${Ee}px`},[]);a.useEffect(()=>{v&&Bt()},[f,v,Bt]),a.useEffect(()=>{if(!g&&f===""&&N.current){const re=setTimeout(()=>{N.current?.focus()},0);return()=>clearTimeout(re)}},[g,f]),a.useEffect(()=>{V||F("")},[V]),a.useEffect(()=>{if(!Ot)return;const re=Ee=>{const Qe=Ee.target,gt=Yt.current?.contains(Qe),xt=Xt.current?.contains(Qe);!gt&&!xt&&Wt(!1)};return document.addEventListener("mousedown",re),()=>document.removeEventListener("mousedown",re)},[Ot]),a.useEffect(()=>{if(!ke)return;const re=Ee=>{const Qe=Ee.target,gt=We.current?.contains(Qe),xt=oe.current?.contains(Qe),sn=Qe instanceof Element&&Qe.closest?.(".model-combobox-dropdown--portal")!=null;!gt&&!xt&&!sn&&(D(!1),Z(null))};return document.addEventListener("mousedown",re),()=>document.removeEventListener("mousedown",re)},[ke]),a.useEffect(()=>{if(!ne)return;const re=Ee=>{const Qe=Ee.target;Re.current?.contains(Qe)||Ue.current?.contains(Qe)||(we(!1),tt(null))};return document.addEventListener("mousedown",re),()=>document.removeEventListener("mousedown",re)},[ne]),a.useEffect(()=>{if(!k)return;const re=Ee=>{const Qe=Ee.target;xe.current?.contains(Qe)||ee.current?.contains(Qe)||(O(!1),Me(null))};return document.addEventListener("mousedown",re),()=>document.removeEventListener("mousedown",re)},[k]);const Mn=a.useCallback(()=>{S.forEach(re=>URL.revokeObjectURL(re.previewUrl)),z([]),C.current&&(C.current.value=""),p(""),U([]),G(null),O(!1),Me(null),we(!1),tt(null),ue(void 0),ae(void 0),Ae(void 0),at(void 0),Ye(void 0),Oe(void 0),qt(void 0),At(!1),Vt(void 0),L(!1),D(!1),de(null),Z(null),Wt(!1),St(!1),x(!1),j(!1),w.current=!0,N.current&&(N.current.style.height="auto"),typeof window<"u"&&wr(Ba,l)},[S,l]),Ne=a.useCallback(re=>{if(!re||re.length===0)return;const Ee=[];for(let Qe=0;Qe<re.length;Qe++){const gt=re[Qe];JN.includes(gt.type)&&Ee.push({file:gt,previewUrl:URL.createObjectURL(gt)})}Ee.length>0&&z(Qe=>[...Qe,...Ee])},[]),it=a.useCallback(re=>{g||Ne(re.clipboardData?.files)},[Ne,g]),xn=a.useCallback(re=>{z(Ee=>{const Qe=Ee[re];return Qe&&URL.revokeObjectURL(Qe.previewUrl),Ee.filter((gt,xt)=>xt!==re)})},[]),wn=a.useCallback(async()=>{const re=f.trim();if(!re||g||!e)return;const Ee=f;b(!0),p("");try{const Qe=await e({description:re,column:"triage",dependencies:T.length?T:void 0,...W?{assignedAgentId:W}:{},modelPresetId:vt,modelProvider:jt?ge:void 0,modelId:jt?me:void 0,validatorModelProvider:zt?be:void 0,validatorModelId:zt?Fe:void 0,planningModelProvider:Rt?et:void 0,planningModelId:Rt?rt:void 0,...Tt?{executionMode:"fast"}:{},nodeId:Lt});if(Qe&&S.length>0){const gt=[];for(const xt of S)try{await yr(Qe.id,xt.file,l)}catch{gt.push(xt.file.name)}gt.length>0&&n(`Failed to upload: ${gt.join(", ")}`,"error")}Mn()}catch(Qe){p(Ee),n(je(Qe)||"Failed to create task","error")}finally{b(!1)}},[f,g,e,T,W,jt,ge,me,zt,be,Fe,Rt,et,rt,S,l,n,Mn,Tt,Lt]),Ce=a.useCallback(re=>{if(re.key==="Enter"){if(re.shiftKey&&v)return;re.preventDefault(),wn()}else if(re.key==="Escape"){if(re.preventDefault(),se){Z(null);return}if(ke){D(!1),de(null);return}if(V){L(!1);return}if(Ot){Wt(!1);return}if(ne){we(!1),tt(null);return}if(k){O(!1),Me(null);return}f.trim()&&(p(""),N.current&&(N.current.style.height="auto"),typeof window<"u"&&wr(Ba,l)),x(!1),j(!1),N.current?.blur()}},[wn,f,v,V,k,ne,ke,se,Ot,l,j]),Ke=a.useCallback(()=>{w.current&&(w.current=!1)},[]),mt=a.useCallback(()=>{c&&x(!0)},[c]),It=a.useCallback(re=>{U(Ee=>Ee.includes(re)?Ee.filter(Qe=>Qe!==re):[...Ee,re])},[]),$t=a.useCallback(()=>{const re=window.visualViewport;return re&&re.width>0&&re.height>0?{width:re.width,height:re.height,offsetTop:re.offsetTop,offsetLeft:re.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),mn=a.useCallback(()=>{const re=We.current;if(!re)return;const Ee=re.getBoundingClientRect(),{width:Qe,height:gt,offsetTop:xt,offsetLeft:sn}=$t(),dn=16,Xe=16,Dt=4,hn=Qe<=768,Xn=Math.min(hn?gt*.6:gt*.5,360),Zn=Math.max(Ee.width*1.35,320),Ln=hn?Math.min(Qe-dn*2,360):Zn,es=Math.min(Ln,Math.max(Qe-dn*2,240)),qn=Ee.top-xt,ps=Ee.bottom-xt,Tn=Ee.left-sn,Vn=gt-ps,fs=qn,Ls=Math.max(Vn-Xe-Dt,160),ns=Math.max(fs-Xe-Dt,160),An=Vn<Xn&&fs>Vn,Un=Math.max(Math.min(An?ns:Ls,Xn),160),zs=Math.min(Math.max(Tn,dn),Qe-dn-es)+sn,di=An?Math.max(Xe+xt,qn-Un-Dt+xt):Math.min(ps+Dt+xt,gt+xt-Xe-Un);de({top:di,left:zs,width:es,maxHeight:Un})},[$t]),On=a.useCallback(()=>{const re=Yt.current?.querySelector(".refine-button");if(!re)return;const Ee=re.getBoundingClientRect(),{width:Qe,height:gt,offsetTop:xt,offsetLeft:sn}=$t(),dn=8,Xe=12,Dt=4,hn=Math.min(200,Math.max(gt-Xe*2,160)),Xn=Math.min(200,Qe-dn*2),Zn=Ee.top-xt,Ln=Ee.bottom-xt,es=Ee.left-sn,qn=gt-Ln,ps=Zn,Tn=qn<hn&&ps>qn,Vn=Math.min(Math.max(es,dn),Qe-dn-Xn)+sn,fs=Tn?Math.max(Xe+xt,Zn-hn-Dt+xt):Math.min(Ln+Dt+xt,gt+xt-Xe-hn);B({top:fs,left:Vn})},[$t]),nn=a.useCallback(()=>{const re=Ie.current;if(!re)return;const Ee=re.getBoundingClientRect(),{width:Qe,height:gt,offsetTop:xt,offsetLeft:sn}=$t(),dn=16,Xe=16,Dt=4,hn=Qe<=768,Xn=Math.min(hn?gt*.6:gt*.5,320),Zn=hn?Math.min(Qe-dn*2,360):Math.max(Ee.width,280),Ln=Math.min(Zn,Math.max(Qe-dn*2,240)),es=Ee.top-xt,qn=Ee.bottom-xt,ps=Ee.left-sn,Tn=gt-qn,Vn=es,fs=Math.max(Tn-Xe-Dt,200),Ls=Math.max(Vn-Xe-Dt,200),ns=Tn<Xn&&Vn>Tn,An=Math.max(Math.min(ns?Ls:fs,Xn),200),Un=Math.min(Math.max(ps,dn),Qe-dn-Ln)+sn,zs=ns?Math.max(Xe+xt,es-An-Dt+xt):Math.min(qn+Dt+xt,gt+xt-Xe-An);Ge({top:zs,left:Un,width:Ln,maxHeight:An})},[$t]),Nn=a.useCallback(()=>{const re=xe.current?.querySelector("button");if(!re)return;const Ee=re.getBoundingClientRect(),{width:Qe,height:gt,offsetTop:xt,offsetLeft:sn}=$t(),dn=16,Xe=16,Dt=4,hn=Qe<=768,Xn=Math.min(hn?gt*.6:gt*.5,320),Zn=hn?Math.min(Qe-dn*2,280):Math.max(Ee.width,240),Ln=Math.min(Zn,Math.max(Qe-dn*2,200)),es=Ee.top-xt,qn=Ee.bottom-xt,ps=Ee.left-sn,Tn=gt-qn,Vn=es,fs=Math.max(Tn-Xe-Dt,160),Ls=Math.max(Vn-Xe-Dt,160),ns=Tn<Xn&&Vn>Tn,An=Math.max(Math.min(ns?Ls:fs,Xn),160),Un=Math.min(Math.max(ps,dn),Qe-dn-Ln)+sn,zs=ns?Math.max(Xe+xt,es-An-Dt+xt):Math.min(qn+Dt+xt,gt+xt-Xe-An);Me({top:zs,left:Un,width:Ln,maxHeight:An})},[$t]),_n=a.useCallback(()=>{const re=Re.current?.querySelector("button");if(!re)return;const Ee=re.getBoundingClientRect(),{width:Qe,height:gt,offsetTop:xt,offsetLeft:sn}=$t(),dn=16,Xe=16,Dt=4,hn=Qe<=768,Xn=Math.min(hn?gt*.6:gt*.5,320),Zn=hn?Math.min(Qe-dn*2,280):Math.max(Ee.width,240),Ln=Math.min(Zn,Math.max(Qe-dn*2,200)),es=Ee.top-xt,qn=Ee.bottom-xt,ps=Ee.left-sn,Tn=gt-qn,Vn=es,fs=Math.max(Tn-Xe-Dt,160),Ls=Math.max(Vn-Xe-Dt,160),ns=Tn<Xn&&Vn>Tn,An=Math.max(Math.min(ns?Ls:fs,Xn),160),Un=Math.min(Math.max(ps,dn),Qe-dn-Ln)+sn,zs=ns?Math.max(Xe+xt,es-An-Dt+xt):Math.min(qn+Dt+xt,gt+xt-Xe-An);tt({top:zs,left:Un,width:Ln,maxHeight:An})},[$t]);a.useEffect(()=>{if(!ke)return;const re=()=>mn();window.addEventListener("resize",re),window.addEventListener("scroll",re,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",re),Ee.addEventListener("scroll",re)),()=>{window.removeEventListener("resize",re),window.removeEventListener("scroll",re,!0),Ee&&(Ee.removeEventListener("resize",re),Ee.removeEventListener("scroll",re))}},[ke,mn]),a.useEffect(()=>{if(!Ot)return;const re=()=>On();window.addEventListener("resize",re),window.addEventListener("scroll",re,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",re),Ee.addEventListener("scroll",re)),()=>{window.removeEventListener("resize",re),window.removeEventListener("scroll",re,!0),Ee&&(Ee.removeEventListener("resize",re),Ee.removeEventListener("scroll",re))}},[Ot,On]),a.useEffect(()=>{if(!V)return;const re=()=>nn();window.addEventListener("resize",re),window.addEventListener("scroll",re,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",re),Ee.addEventListener("scroll",re)),()=>{window.removeEventListener("resize",re),window.removeEventListener("scroll",re,!0),Ee&&(Ee.removeEventListener("resize",re),Ee.removeEventListener("scroll",re))}},[V,nn]),a.useEffect(()=>{if(!k)return;const re=()=>Nn();window.addEventListener("resize",re),window.addEventListener("scroll",re,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",re),Ee.addEventListener("scroll",re)),()=>{window.removeEventListener("resize",re),window.removeEventListener("scroll",re,!0),Ee&&(Ee.removeEventListener("resize",re),Ee.removeEventListener("scroll",re))}},[k,Nn]),a.useEffect(()=>{if(!ne)return;const re=()=>_n();window.addEventListener("resize",re),window.addEventListener("scroll",re,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",re),Ee.addEventListener("scroll",re)),()=>{window.removeEventListener("resize",re),window.removeEventListener("scroll",re,!0),Ee&&(Ee.removeEventListener("resize",re),Ee.removeEventListener("scroll",re))}},[ne,_n]);const ls=a.useCallback(re=>{const Ee=Cl(re);Ye(Ee.provider),Oe(Ee.modelId)},[]),Sn=a.useCallback(re=>{const Ee=Cl(re);ue(Ee.provider),ae(Ee.modelId)},[]),Hn=a.useCallback(re=>{const Ee=Cl(re);Ae(Ee.provider),at(Ee.modelId)},[]),rn=a.useCallback(async re=>{if(m){m(re);return}const Ee=Je,gt=Ee.includes(re)?Ee.filter(xt=>xt!==re):[re,...Ee];ut(gt);try{await fn({favoriteProviders:gt,favoriteModels:ht})}catch{ut(Ee)}},[Je,ht,m]),wt=a.useCallback(async re=>{if(h){h(re);return}const Ee=ht,gt=Ee.includes(re)?Ee.filter(xt=>xt!==re):[re,...Ee];Et(gt);try{await fn({favoriteProviders:Je,favoriteModels:gt})}catch{Et(Ee)}},[ht,Je,h]),K=a.useCallback(()=>{const re=f.trim();if(!re){n("Enter a description first","error");return}r?.(re),Mn()},[f,r,n,Mn]),Le=a.useCallback(()=>{const re=f.trim();if(!re){n("Enter a description first","error");return}o?.(re),Mn()},[f,o,n,Mn]),st=a.useCallback(()=>{wn()},[wn]),ot=a.useCallback(async re=>{const Ee=f.trim();if(!(!Ee||_t)){Wt(!1),St(!0);try{const Qe=await vp(Ee,re,l);p(Qe),n("Description refined with AI","success"),N.current&&(N.current.style.height="auto",N.current.style.height=`${Math.min(N.current.scrollHeight,200)}px`)}catch(Qe){const gt=yp(Qe);n(gt,"error")}finally{St(!1)}}},[f,_t,n,l]),Nt=(re,Ee)=>re.length>Ee?re.slice(0,Ee)+"…":re,Mt=a.useCallback(async()=>{if(i){Q(i),ve(null),Y(!1);return}Y(!0),ve(null);try{const re=await hs();Q(re.models),u||ut(re.favoriteProviders),d||Et(re.favoriteModels)}catch(re){ve(je(re)||"Failed to load models")}finally{Y(!1)}},[i,u,d]),Ft=a.useCallback(async()=>{if(te.length>0&&$===l){O(!0),Nn();return}ce(!0);try{const re=await _a(void 0,l);E(re),P(l),O(!0),Nn()}catch(re){const Ee=je(re);n(Ee?`Failed to load agents: ${Ee}`:"Failed to load agents","error"),O(!1)}finally{ce(!1)}},[te.length,$,l,n,Nn]),Ds=(W?te.find(re=>re.id===W):void 0)?.name??W,ci=Lt?Kt.find(re=>re.id===Lt):void 0,Es=y,Gs=a.useCallback(()=>{j(re=>{const Ee=!re;return x(Ee),Ee})},[]);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:N,className:`quick-entry-input ${v?"quick-entry-input--expanded":""}`,placeholder:g?"Creating...":"Add a task...",value:f,onChange:re=>p(re.target.value),onKeyDown:Ce,onPaste:it,onFocus:mt,onBlur:Ke,disabled:g||A,"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:Gs,"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(en,{size:14})})]})}),t.jsxs("div",{id:"quick-entry-controls",className:"quick-entry-controls",hidden:!Es,"aria-hidden":!Es,children:[Es&&!g&&t.jsxs("div",{className:"quick-entry-actions","data-testid":"quick-entry-actions",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:K,onMouseDown:re=>re.preventDefault(),disabled:!f.trim(),"data-testid":"plan-button",title:"Open planning mode with current description",children:[t.jsx(si,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Plan"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Le,onMouseDown:re=>re.preventDefault(),disabled:!f.trim(),"data-testid":"subtask-button",title:"Break down into AI-generated subtasks",children:[t.jsx(Ho,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Subtask"]}),t.jsxs("div",{className:"refine-trigger-wrap",ref:Yt,children:[t.jsxs("button",{type:"button",className:`btn btn-sm refine-button ${_t?"refine-button--loading":""}`,onClick:()=>{Wt(re=>{const Ee=!re;return Ee?On():B(null),Ee})},disabled:!f.trim()||_t,"data-testid":"refine-button",title:"Refine description with AI",children:[t.jsx(as,{size:12,style:{verticalAlign:"middle"}}),_t?"Refining...":"Refine"]}),Ot&&Pe&&Qt&&da.createPortal(t.jsxs("div",{ref:Xt,className:"refine-menu refine-menu--portal",onMouseDown:re=>re.preventDefault(),style:{position:"fixed",top:`${Qt.top}px`,left:`${Qt.left}px`},children:[t.jsxs("div",{className:"refine-menu-item",onClick:()=>ot("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:()=>ot("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:()=>ot("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:()=>ot("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"})]})]}),Pe)]}),t.jsx("div",{className:"dep-trigger-wrap",children:t.jsxs("button",{ref:Ie,type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-deps",onClick:()=>{L(re=>{const Ee=!re;return Ee?(D(!1),de(null),Z(null),O(!1),Me(null),we(!1),tt(null),nn()):Ge(null),Ee})},children:[t.jsx(pa,{size:12,style:{verticalAlign:"middle"}}),T.length>0?`${T.length} deps`:"Deps"]})}),V&&Pe&&_e&&(()=>{const re=R.toLowerCase(),Ee=(re?s.filter(Qe=>Qe.id.toLowerCase().includes(re)||Qe.title&&Qe.title.toLowerCase().includes(re)||Qe.description&&Qe.description.toLowerCase().includes(re)):[...s]).sort((Qe,gt)=>{const xt=gt.createdAt.localeCompare(Qe.createdAt);if(xt!==0)return xt;const sn=parseInt(Qe.id.slice(Qe.id.lastIndexOf("-")+1),10)||0;return(parseInt(gt.id.slice(gt.id.lastIndexOf("-")+1),10)||0)-sn});return da.createPortal(t.jsxs("div",{ref:fe,className:"dep-dropdown dep-dropdown--portal",onMouseDown:Qe=>Qe.preventDefault(),style:{position:"fixed",top:`${_e.top}px`,left:`${_e.left}px`,width:`${_e.width}px`,maxHeight:_e.maxHeight?`${_e.maxHeight}px`:void 0,overflowY:_e.maxHeight?"auto":void 0},children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:R,onChange:Qe=>F(Qe.target.value),onClick:Qe=>Qe.stopPropagation()}),Ee.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No existing tasks"}):Ee.map(Qe=>t.jsxs("div",{className:`dep-dropdown-item${T.includes(Qe.id)?" selected":""}`,onMouseDown:gt=>gt.preventDefault(),onClick:()=>It(Qe.id),children:[t.jsx("span",{className:"dep-dropdown-id",children:Qe.id}),t.jsx("span",{className:"dep-dropdown-title",children:Nt(Qe.title||Qe.description||Qe.id,60)})]},Qe.id))]}),Pe)})(),t.jsxs("button",{type:"button",className:"btn btn-sm","data-testid":"quick-entry-attach",onClick:()=>C.current?.click(),children:[t.jsx(op,{size:12,style:{verticalAlign:"middle"}}),S.length>0?`Attach (${S.length})`:"Attach"]}),t.jsxs("button",{ref:We,type:"button",className:"btn btn-sm","data-testid":"quick-entry-models",onClick:()=>{L(!1),O(!1),Me(null),we(!1),tt(null),Z(null),D(!0),mn()},children:[t.jsx(ko,{size:12,style:{verticalAlign:"middle"}}),In]}),t.jsx("div",{className:"node-trigger-wrap",ref:Re,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-node-button",onClick:()=>{L(!1),O(!1),Me(null),D(!1),de(null),Z(null),we(re=>{const Ee=!re;return Ee?_n():tt(null),Ee})},children:[t.jsx(xr,{size:12,style:{verticalAlign:"middle"}}),` ${ci?.name??"Node"}`,ci&&t.jsx("span",{className:"quick-entry-node-status",children:t.jsx(Vi,{status:ci.status,showLabel:!0})})]})}),ne&&Pe&&ze&&da.createPortal(t.jsxs("div",{ref:Ue,className:"dep-dropdown node-picker-dropdown node-picker-dropdown--portal",onMouseDown:re=>re.preventDefault(),style:{position:"fixed",top:`${ze.top}px`,left:`${ze.left}px`,width:`${ze.width}px`,maxHeight:ze.maxHeight?`${ze.maxHeight}px`:void 0,overflowY:ze.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${Lt==null?" selected":""}`,onMouseDown:re=>re.preventDefault(),onClick:()=>{Vt(void 0),we(!1),tt(null)},children:t.jsx("span",{className:"node-picker-item-name",children:"Project default / local"})}),Kt.map(re=>t.jsxs("div",{className:`dep-dropdown-item node-picker-item${Lt===re.id?" selected":""}`,onMouseDown:Ee=>Ee.preventDefault(),onClick:()=>{Vt(re.id),we(!1),tt(null)},children:[t.jsx("span",{className:"quick-entry-node-status",children:t.jsx(Vi,{status:re.status})}),t.jsx("span",{className:"node-picker-item-name",children:re.name}),t.jsx("span",{className:"node-picker-item-status",children:YN(re.status)})]},re.id))]}),Pe),t.jsx("div",{className:"agent-trigger-wrap",ref:xe,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{k?(O(!1),Me(null)):(we(!1),tt(null),Ft())},"data-testid":"quick-entry-agent-button",children:[t.jsx(Cn,{size:12,style:{verticalAlign:"middle"}}),Ds?` ${Ds}`:" Agent"]})}),k&&Pe&&pe&&da.createPortal(t.jsxs("div",{ref:ee,className:"dep-dropdown agent-picker-dropdown agent-picker-dropdown--portal",onMouseDown:re=>re.preventDefault(),style:{position:"fixed",top:`${pe.top}px`,left:`${pe.left}px`,width:`${pe.width}px`,maxHeight:pe.maxHeight?`${pe.maxHeight}px`:void 0,overflowY:pe.maxHeight?"auto":void 0},children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select agent"}),ie&&t.jsx("div",{className:"dep-dropdown-empty",children:"Loading agents..."}),!ie&&te.filter(re=>re.state!=="terminated").map(re=>t.jsxs("div",{className:`dep-dropdown-item${W===re.id?" selected":""}`,onMouseDown:Ee=>Ee.preventDefault(),onClick:()=>{G(re.id===W?null:re.id),O(!1),Me(null)},children:[t.jsx(Cn,{size:12,style:{marginRight:6}}),t.jsx("span",{className:"dep-dropdown-id",children:re.role}),t.jsx("span",{className:"dep-dropdown-title",children:re.name})]},re.id)),!ie&&te.filter(re=>re.state!=="terminated").length===0&&t.jsx("div",{className:"dep-dropdown-empty",children:"No agents available"}),W&&t.jsx("div",{className:"dep-dropdown-item",onMouseDown:re=>re.preventDefault(),onClick:()=>{G(null),O(!1),Me(null)},children:t.jsx("span",{className:"dep-dropdown-title",children:"Clear selection"})})]}),Pe),t.jsx("button",{type:"button",className:`btn btn-sm ${Tt?"btn-primary":""}`,onClick:()=>At(re=>!re),onMouseDown:re=>re.preventDefault(),"aria-pressed":Tt,"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:st,onMouseDown:re=>re.preventDefault(),disabled:!f.trim()||g,"data-testid":"quick-entry-save",title:"Create task",children:[t.jsx(cp,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Save"]})]}),S.length>0&&t.jsx("div",{className:"inline-create-previews",children:S.map((re,Ee)=>t.jsxs("div",{className:"inline-create-preview",children:[t.jsx("img",{src:re.previewUrl,alt:re.file.name}),t.jsx("button",{type:"button",className:"inline-create-preview-remove",onClick:()=>xn(Ee),disabled:g,title:"Remove image","data-testid":`quick-entry-preview-remove-${Ee}`,children:"×"})]},re.previewUrl))}),ke&&Pe&&ye&&da.createPortal(t.jsx("div",{ref:oe,className:"model-nested-menu model-nested-menu--portal",onMouseDown:re=>re.preventDefault(),"data-testid":"model-nested-menu",style:{position:"fixed",top:`${ye.top}px`,left:`${ye.left}px`,width:`${ye.width}px`,maxHeight:ye.maxHeight?`${ye.maxHeight}px`:void 0,overflowY:ye.maxHeight?"auto":void 0},children:se===null?t.jsxs("div",{className:"model-menu-items",children:[t.jsxs("button",{type:"button",className:`model-menu-item ${Rt?"model-menu-item--active":""}`,onClick:()=>Z("plan"),"data-testid":"model-menu-plan",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(si,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Plan"]}),t.jsx("span",{className:"model-menu-item-value",children:Rt?gn(et,rt):"Using default"}),t.jsx(jn,{size:12,style:{marginLeft:"auto",color:"var(--text-dim)"}})]}),t.jsxs("button",{type:"button",className:`model-menu-item ${jt?"model-menu-item--active":""}`,onClick:()=>Z("executor"),"data-testid":"model-menu-executor",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(as,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Executor"]}),t.jsx("span",{className:"model-menu-item-value",children:jt?gn(ge,me):"Using default"}),t.jsx(jn,{size:12,style:{marginLeft:"auto",color:"var(--text-dim)"}})]}),t.jsxs("button",{type:"button",className:`model-menu-item ${zt?"model-menu-item--active":""}`,onClick:()=>Z("validator"),"data-testid":"model-menu-validator",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(ko,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Reviewer"]}),t.jsx("span",{className:"model-menu-item-value",children:zt?gn(be,Fe):"Using default"}),t.jsx(jn,{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:()=>Z(null),"data-testid":"model-submenu-back",children:[t.jsx(en,{size:12,style:{transform:"rotate(90deg)",marginRight:4}}),"Back"]}),t.jsxs("div",{className:"model-submenu-header",children:[se==="plan"&&"Plan Model",se==="executor"&&"Executor Model",se==="validator"&&"Reviewer Model"]}),t.jsx(Jn,{models:nt,value:se==="plan"?dt:se==="executor"?X:$e,onChange:se==="plan"?ls:se==="executor"?Sn:Hn,placeholder:"Using default",disabled:ft,id:`model-${se}-select`,label:`${se} model`,favoriteProviders:he,onToggleFavorite:rn,favoriteModels:De,onToggleModelFavorite:wt}),le&&t.jsxs("div",{className:"model-submenu-error",children:[t.jsx("span",{children:le}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:Mt,children:"Retry"})]})]})}),Pe)]}),t.jsx("input",{ref:C,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:re=>{Ne(re.target.files),re.currentTarget.value=""},"data-testid":"quick-entry-file-input"}),t.jsx("div",{className:"quick-entry-hint",children:"Enter to create · Esc to cancel"})]})}function QN(e){return hd(e)||e}function XN(e){const n=new Map(e.map(l=>[l.id,l])),s=[],i=new Set,r=new Set;function o(l){if(i.has(l)||r.has(l))return;r.add(l);const c=n.get(l);if(c)for(const u of c.dependencies||[])n.has(u)&&o(u);r.delete(l),i.add(l),s.push(l)}for(const l of e)o(l.id);return s}function ZN(e,n,s){const i=e.filter(g=>g.worktree),r=e.filter(g=>!g.worktree),o=new Map;for(const g of i){const b=g.worktree,v=o.get(b)||[];v.push(g),o.set(b,v)}const l=new Map(n.map(g=>[g.id,g])),u=n.filter(g=>g.column==="todo").filter(g=>!g.paused&&(g.dependencies||[]).every(b=>{const v=l.get(b);return v&&(v.column==="done"||v.column==="in-review"||v.column==="archived")})),m=XN(u).map(g=>l.get(g)).filter(g=>g!==void 0&&u.includes(g)),h=[],f=Array.from(o.keys());for(const g of f)h.push({label:QN(g),activeTasks:o.get(g),queuedTasks:[]});r.length>0&&h.push({label:"Unassigned",activeTasks:r,queuedTasks:[]});const p=m.slice(0,s);return p.length>0&&h.push({label:"Up Next",activeTasks:[],queuedTasks:p}),h}const Fu=100,El=50,Ou=25;function e1({column:e,tasks:n,projectId:s,maxConcurrent:i,onMoveTask:r,onPauseTask:o,onOpenDetail:l,addToast:c,onQuickCreate:u,onNewTask:d,autoMerge:m,onToggleAutoMerge:h,globalPaused:f,onUpdateTask:p,onRetryTask:g,onArchiveTask:b,onUnarchiveTask:v,onDeleteTask:x,onArchiveAllDone:y,collapsed:j,onToggleCollapse:N,allTasks:C,availableModels:w,onPlanningMode:_,onSubtaskBreakdown:S,onOpenDetailWithTab:z,favoriteProviders:M,favoriteModels:T,onToggleFavorite:U,onToggleModelFavorite:V,isSearchActive:L,taskStuckTimeoutMs:R,onOpenMission:F,lastFetchTimeMs:W,workflowStepNameLookup:G}){const[te,E]=a.useState(!1),[$,P]=a.useState(El),[k,O]=a.useState(!1),[ne,we]=a.useState(!1),[ie,ce]=a.useState(!1),[ke,D]=a.useState(!1),se=a.useRef(null),Z=qw(n.length),{confirm:ge}=Ws();a.useEffect(()=>{if(!k)return;function Me(tt){se.current?.contains(tt.target)||O(!1)}function ze(tt){tt.key==="Escape"&&O(!1)}return document.addEventListener("mousedown",Me),document.addEventListener("keydown",ze),()=>{document.removeEventListener("mousedown",Me),document.removeEventListener("keydown",ze)}},[k]);const ue=e==="archived",me=ue&&j,ae=!ue&&!L&&e!=="in-progress"&&n.length>Fu;a.useEffect(()=>{P(Me=>e==="in-progress"||ue||n.length<=Fu?El:Math.min(Math.max(Me,El),n.length))},[e,ue,n.length]);const be=a.useCallback(Me=>{ue||(Me.preventDefault(),Me.dataTransfer.dropEffect="move",E(!0))},[ue]),Ae=a.useCallback(Me=>{Me.currentTarget.contains(Me.relatedTarget)||E(!1)},[]),Fe=a.useCallback(async Me=>{Me.preventDefault(),E(!1);const ze=Me.dataTransfer.getData("text/plain");if(!ze)return;const tt=n.find(ye=>ye.id===ze);if(!(tt&&tt.column===e))try{await r(ze,e)}catch(ye){c(je(ye),"error")}},[e,r,c,n]),at=a.useMemo(()=>e!=="in-progress"?[]:ZN(n,n,i),[e,n,i]),et=a.useMemo(()=>ae?n.slice(0,$):n,[ae,n,$]),Ye=Math.max(0,n.length-et.length),rt=a.useCallback(()=>{P(Me=>Math.min(Me+Ou,n.length))},[n.length]),Oe=a.useCallback(async()=>{if(O(!1),!(n.length===0||!await ge({title:"Replan All Tasks",message:`Move all ${n.length} todo task${n.length===1?"":"s"} back to planning to be replanned?`}))){we(!0);try{const ze=await Promise.allSettled(n.map(de=>r(de.id,"triage"))),tt=ze.filter(de=>de.status==="rejected").length,ye=ze.length-tt;tt===0?c(`Moved ${ye} task${ye===1?"":"s"} to planning for replanning`,"success"):c(`Moved ${ye} of ${ze.length} tasks; ${tt} failed`,"error")}finally{we(!1)}}},[n,r,c,ge]),We=a.useMemo(()=>n.filter(Me=>!Me.paused),[n]),oe=We.length,xe=e==="todo"||e==="in-progress"||e==="in-review",ee=ne||ie||ke,Re=a.useCallback(async()=>{if(!(!o||(O(!1),oe===0)||!await ge({title:"Stop All Tasks",message:`Stop all ${oe} ${Fn[e].toLowerCase()} task${oe===1?"":"s"}?`,danger:!0}))){ce(!0);try{const ze=await Promise.allSettled(We.map(de=>o(de.id))),tt=ze.filter(de=>de.status==="rejected").length,ye=ze.length-tt;tt===0?c(`Stopped ${ye} task${ye===1?"":"s"}`,"success"):c(`Stopped ${ye} of ${ze.length} tasks; ${tt} failed`,"error")}finally{ce(!1)}}},[o,oe,e,We,c,ge]),Ue=a.useCallback(async()=>{if(O(!1),!(n.length===0||!await ge({title:"Move All to Todo",message:`Move all ${n.length} ${Fn[e].toLowerCase()} task${n.length===1?"":"s"} to Todo?`}))){D(!0);try{const ze=await Promise.allSettled(n.map(de=>r(de.id,"todo"))),tt=ze.filter(de=>de.status==="rejected").length,ye=ze.length-tt;tt===0?c(`Moved ${ye} task${ye===1?"":"s"} to Todo`,"success"):c(`Moved ${ye} of ${ze.length} tasks to Todo; ${tt} failed`,"error")}finally{D(!1)}}},[n,e,r,c,ge]),pe=a.useCallback(async()=>{if(!(!y||n.length===0||!await ge({title:"Archive All Done",message:`Archive all ${n.length} done tasks?`,danger:!0})))try{const ze=await y();c(`Archived ${ze.length} tasks`,"success")}catch(ze){c(je(ze)||"Failed to archive tasks","error")}},[y,n.length,c,ge]);return t.jsxs("div",{className:`column${te?" drag-over":""}${ue?" column-archived":""}${me?" column-collapsed":""}`,"data-column":e,onDragOver:be,onDragLeave:Ae,onDrop:Fe,children:[t.jsxs("div",{className:"column-header",children:[t.jsx("div",{className:`column-dot dot-${e}`}),t.jsx("h2",{children:Fn[e]}),t.jsx("span",{className:`column-count${Z?" count-flash":""}`,children:n.length}),e==="in-review"&&h&&t.jsxs("label",{className:"auto-merge-toggle",title:m?"Auto-merge enabled":"Auto-merge disabled",children:[t.jsx("input",{type:"checkbox",checked:!!m,onChange:h}),t.jsx("span",{className:"toggle-slider"}),t.jsx("span",{className:"toggle-label",children:"Auto-merge"})]}),d&&t.jsx("button",{className:"btn btn-task-create btn-sm",onClick:d,children:"+ New Task"}),e==="done"&&y&&t.jsx("button",{className:"btn btn-icon btn-sm",onClick:pe,disabled:n.length===0,title:"Archive all done tasks","aria-label":"Archive all done tasks",children:t.jsx(Fo,{size:16})}),ue&&N&&t.jsx("button",{className:"btn btn-icon btn-sm",onClick:N,title:j?"Expand archived tasks":"Collapse archived tasks","aria-label":j?"Expand archived tasks":"Collapse archived tasks",children:j?t.jsx(en,{size:16}):t.jsx(pi,{size:16})}),xe&&t.jsxs("div",{className:"column-menu",ref:se,children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>O(Me=>!Me),"aria-haspopup":"menu","aria-expanded":k,"aria-label":`${Fn[e]} column actions`,title:"Column actions",disabled:ee,children:t.jsx(_b,{size:16})}),k&&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 Oe(),disabled:n.length===0||ne,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 Re(),disabled:oe===0||ie||!o,children:["Stop All",t.jsx("span",{className:"column-menu-item-hint",children:n.length===0?"No tasks in this column":oe===0?"All tasks are already paused":`Pause ${oe} active task${oe===1?"":"s"}`})]}),t.jsxs("button",{type:"button",role:"menuitem",className:"column-menu-item",onClick:()=>void Ue(),disabled:n.length===0||ke,children:["Move All to Todo",t.jsxs("span",{className:"column-menu-item-hint",children:["Move ",n.length," task",n.length===1?"":"s"," to Todo"]})]})]})]})]})]}),!me&&t.jsx("p",{className:"column-desc",children:Bw[e]}),!me&&t.jsxs("div",{className:"column-body",children:[e==="triage"&&u&&t.jsx(Hp,{onCreate:u,addToast:c,tasks:C??[],availableModels:w,onPlanningMode:_,onSubtaskBreakdown:S,projectId:s,autoExpand:!1,favoriteProviders:M,favoriteModels:T,onToggleFavorite:U,onToggleModelFavorite:V}),e==="in-progress"?at.length===0?t.jsx("div",{className:"empty-column",children:"No tasks"}):at.map(Me=>t.jsx(Bp,{label:Me.label,activeTasks:Me.activeTasks,queuedTasks:Me.queuedTasks,projectId:s,onOpenDetail:l,addToast:c,globalPaused:f,onUpdateTask:p,onRetryTask:g,onOpenDetailWithTab:z,taskStuckTimeoutMs:R,onOpenMission:F,lastFetchTimeMs:W,workflowStepNameLookup:G},Me.label)):n.length===0?t.jsx("div",{className:"empty-column",children:"No tasks"}):t.jsxs(t.Fragment,{children:[et.map(Me=>t.jsx(Ao,{task:Me,projectId:s,onOpenDetail:l,addToast:c,globalPaused:f,onUpdateTask:p,onRetryTask:g,onArchiveTask:b,onUnarchiveTask:v,onDeleteTask:x,onOpenDetailWithTab:z,taskStuckTimeoutMs:R,onOpenMission:F,onMoveTask:r,lastFetchTimeMs:W,workflowStepNameLookup:G},Me.id)),ae&&Ye>0&&t.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:rt,children:["Load ",Math.min(Ou,Ye)," more (",Ye," remaining)"]})]}),t.jsx(Yo,{slotId:"board-column-footer",projectId:s})]})]})}const qp=a.memo(e1);qp.displayName="Column";function t1(e,n){return[...e].sort((s,i)=>{if(n==="in-review"){const r=s.status==="merging"||s.status==="merging-pr",o=i.status==="merging"||i.status==="merging-pr";if(r!==o)return r?-1:1}return s.columnMovedAt&&i.columnMovedAt?i.columnMovedAt.localeCompare(s.columnMovedAt):s.columnMovedAt&&!i.columnMovedAt?-1:!s.columnMovedAt&&i.columnMovedAt?1:s.createdAt.localeCompare(i.createdAt)})}function n1(e,n){return e.length!==n.length?!1:e.every((s,i)=>s===n[i])}const Uu=new Map;function s1(e,n){if(e.size!==n.size)return!1;for(const[s,i]of e)if(n.get(s)!==i)return!1;return!0}function i1({tasks:e,projectId:n,maxConcurrent:s,onMoveTask:i,onPauseTask:r,onOpenDetail:o,addToast:l,onQuickCreate:c,onNewTask:u,autoMerge:d,onToggleAutoMerge:m,globalPaused:h,onUpdateTask:f,onRetryTask:p,onArchiveTask:g,onUnarchiveTask:b,onDeleteTask:v,onArchiveAllDone:x,onLoadArchivedTasks:y,searchQuery:j="",availableModels:N,onPlanningMode:C,onSubtaskBreakdown:w,onOpenDetailWithTab:_,favoriteProviders:S,favoriteModels:z,onToggleFavorite:M,onToggleModelFavorite:T,taskStuckTimeoutMs:U,onOpenMission:V,lastFetchTimeMs:L}){const[R,F]=a.useState(!0),W=a.useRef(!1),{fetchBatch:G}=lN(n),te=a.useRef(null),[E,$]=a.useState(Uu),P=j.trim()!=="",k=a.useRef({triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]}),O=a.useCallback(()=>{F(ie=>{const ce=!ie;return!ce&&!W.current&&y&&(W.current=!0,y()),ce})},[y]),ne=a.useMemo(()=>{const ie=Object.fromEntries(Oi.map(D=>[D,[]]));for(const D of e)ie[D.column].push(D);const ce=k.current,ke={};for(const D of Oi){const se=t1(ie[D],D);ke[D]=n1(ce[D],se)?ce[D]:se}return k.current=ke,ke},[e]);a.useEffect(()=>{let ie=!1;return Go(n).then(ce=>{if(ie)return;const ke=new Map(ce.map(D=>[D.id,D.name]));$(D=>s1(D,ke)?D:ke)}).catch(()=>{ie||$(ce=>ce.size===0?ce:Uu)}),()=>{ie=!0}},[n]);const we=a.useMemo(()=>e.filter(ie=>ie.prInfo||ie.issueInfo).map(ie=>ie.id),[e]);return a.useEffect(()=>{if(we.length!==0)return te.current&&clearTimeout(te.current),te.current=setTimeout(()=>{const ie=[];for(let ce=0;ce<we.length;ce+=50)ie.push(we.slice(ce,ce+50));ie.forEach(ce=>{G(ce)})},500),()=>{te.current&&clearTimeout(te.current)}},[we,G]),t.jsx(t.Fragment,{children:t.jsx("main",{className:"board",id:"board",children:Oi.map(ie=>t.jsx(qp,{column:ie,tasks:ne[ie],projectId:n,maxConcurrent:s,onMoveTask:i,onPauseTask:r,onOpenDetail:o,addToast:l,globalPaused:h,onUpdateTask:f,onRetryTask:p,onArchiveTask:g,onUnarchiveTask:b,onDeleteTask:v,allTasks:e,availableModels:N,onOpenDetailWithTab:_,favoriteProviders:S,favoriteModels:z,onToggleFavorite:M,onToggleModelFavorite:T,isSearchActive:P,taskStuckTimeoutMs:U,onOpenMission:V,lastFetchTimeMs:L,workflowStepNameLookup:E,...ie==="triage"?{onQuickCreate:c,onNewTask:u,onPlanningMode:C,onSubtaskBreakdown:w}:{},...ie==="in-review"?{autoMerge:d,onToggleAutoMerge:m}:{},...ie==="done"?{onArchiveAllDone:x}:{},...ie==="archived"?{collapsed:R,onToggleCollapse:O}:{}},ie))})})}const Ha={triage:"var(--triage)",todo:"var(--todo)","in-progress":"var(--in-progress)","in-review":"var(--in-review)",done:"var(--done)",archived:"var(--text-secondary)"},Bu=new Set(["planning","researching","executing","finalizing","merging"]),Fc=["id","title","status","column","dependencies","progress"];function a1(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}function r1(e){return e==="online"?"●":e==="connecting"?"◐":e==="error"?"✕":"○"}function Hu(e){try{const n=Yn("kb-dashboard-list-columns",e);if(n){const i=JSON.parse(n).filter(r=>Fc.includes(r));if(i.length>0)return new Set(i)}}catch{}return new Set(Fc)}function qu(e){try{const n=Yn("kb-dashboard-hide-done",e);if(n!==null)return n==="true"}catch{}return!1}function Vu(e){try{const n=Yn("kb-dashboard-list-collapsed",e);if(n){const i=JSON.parse(n).filter(r=>Oi.includes(r));if(i.length>0)return new Set(i)}}catch{}return new Set}function Wu(e){try{const n=Yn("kb-dashboard-selected-tasks",e);if(n){const s=JSON.parse(n);return new Set(s)}}catch{}return new Set}function o1(e){return e.status==="executing"||e.column==="in-progress"}function Ku(e){const n=Fp(e);return n.total===0||!o1(e)?{label:"-",percent:0,hasProgress:!1}:{label:`${n.completed}/${n.total}`,percent:n.completed/n.total*100,hasProgress:!0}}function l1({tasks:e,onMoveTask:n,onOpenDetail:s,addToast:i,globalPaused:r,onNewTask:o,onQuickCreate:l,availableModels:c,favoriteProviders:u=[],favoriteModels:d=[],onToggleFavorite:m,onToggleModelFavorite:h,onPlanningMode:f,onSubtaskBreakdown:p,onTasksUpdated:g,projectId:b,projectName:v,taskStuckTimeoutMs:x,searchQuery:y="",lastFetchTimeMs:j}){const[N,C]=a.useState("id"),[w,_]=a.useState("desc"),[S,z]=a.useState(null),[M,T]=a.useState(null),[U,V]=a.useState(null),R=Aa()==="mobile",[F,W]=a.useState(()=>Hu(b)),[G,te]=a.useState(()=>qu(b)),[E,$]=a.useState(()=>Vu(b));a.useEffect(()=>{typeof window<"u"&&bs("kb-dashboard-list-columns",JSON.stringify([...F]),b)},[b,F]),a.useEffect(()=>{typeof window<"u"&&bs("kb-dashboard-hide-done",G.toString(),b)},[G,b]),a.useEffect(()=>{typeof window<"u"&&bs("kb-dashboard-list-collapsed",JSON.stringify([...E]),b)},[E,b]);const[P,k]=a.useState(!1),O=a.useRef(null),[ne,we]=a.useState(()=>Wu(b));a.useEffect(()=>{W(Hu(b)),te(qu(b)),$(Vu(b)),we(Wu(b))},[b]),a.useEffect(()=>{typeof window<"u"&&bs("kb-dashboard-selected-tasks",JSON.stringify([...ne]),b)},[b,ne]);const ie=a.useCallback(Y=>{we(le=>{const ve=new Set(le);return ve.has(Y)?ve.delete(Y):ve.add(Y),ve})},[]),ce=a.useCallback(()=>{we(new Set)},[]),ke=a.useCallback(Y=>{W(le=>{const ve=new Set(le);return ve.has(Y)?ve.size>1&&ve.delete(Y):ve.add(Y),ve})},[]);a.useEffect(()=>{if(!P)return;const Y=ve=>{O.current&&!O.current.contains(ve.target)&&k(!1)},le=ve=>{ve.key==="Escape"&&k(!1)};return document.addEventListener("mousedown",Y),document.addEventListener("keydown",le),()=>{document.removeEventListener("mousedown",Y),document.removeEventListener("keydown",le)}},[P]);const D={id:"ID",title:"Title",status:"Status",column:"Column",dependencies:"Dependencies",progress:"Progress"},se=a.useCallback(Y=>{N===Y?_(le=>le==="asc"?"desc":"asc"):(C(Y),_("asc"))},[N]),Z=a.useCallback(Y=>{V(le=>le===Y?null:Y)},[]),ge=a.useCallback(Y=>{$(le=>{const ve=new Set(le);return ve.has(Y)?ve.delete(Y):ve.add(Y),ve})},[]),ue=a.useCallback(()=>{V(null)},[]),me=a.useMemo(()=>{let Y=y?e.filter(Q=>Q.id.toLowerCase().includes(y.toLowerCase())||Q.title&&Q.title.toLowerCase().includes(y.toLowerCase())||Q.description.toLowerCase().includes(y.toLowerCase())):[...e];G&&!U&&(Y=Y.filter(Q=>Q.column!=="done"&&Q.column!=="archived"));const ve=[...U?Y.filter(Q=>Q.column===U):Y].sort((Q,Je)=>{let ut=0;switch(N){case"id":ut=Q.id.localeCompare(Je.id);break;case"title":ut=(Q.title||Q.description).localeCompare(Je.title||Je.description);break;case"status":ut=(Q.status||"").localeCompare(Je.status||"");break;case"column":ut=Q.column.localeCompare(Je.column);break}return w==="asc"?ut:-ut}),nt={triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]};return ve.forEach(Q=>nt[Q.column].push(Q)),nt},[e,y,N,w,G,U]),ae=a.useMemo(()=>Object.values(me).reduce((Y,le)=>Y+le.length,0),[me]),be=a.useMemo(()=>e.filter(Y=>Y.column==="done"||Y.column==="archived").length,[e]),Ae=a.useMemo(()=>G?be:0,[G,be]),Fe=a.useCallback(()=>{const Y=Object.values(me).flat().filter(le=>le.column!=="archived").map(le=>le.id);we(le=>{if(Y.every(nt=>le.has(nt))){const nt=new Set(le);return Y.forEach(Q=>nt.delete(Q)),nt}else return new Set([...le,...Y])})},[me]),at=a.useMemo(()=>{const Y=Object.values(me).flat().filter(le=>le.column!=="archived");return Y.length===0?!1:Y.every(le=>ne.has(le.id))},[me,ne]),et=a.useMemo(()=>{const Y=Object.values(me).flat().filter(ve=>ve.column!=="archived");if(Y.length===0)return!1;const le=Y.filter(ve=>ne.has(ve.id)).length;return le>0&&le<Y.length},[me,ne]),[Ye,rt]=a.useState("__no_change__"),[Oe,We]=a.useState("__no_change__"),[oe,xe]=a.useState("__no_change__"),[ee,Re]=a.useState([]),[Ue,pe]=a.useState(!1),Me=a.useMemo(()=>oe&&oe!=="__no_change__"?ee.find(Y=>Y.id===oe):void 0,[ee,oe]),[ze,tt]=a.useState(!1);a.useEffect(()=>{if(ne.size===0)return;let Y=!1;return(async()=>{pe(!0);try{const ve=await Eo();Y||Re(ve)}catch(ve){console.error("Failed to fetch nodes for bulk edit",ve),Y||Re([])}finally{Y||pe(!1)}})(),()=>{Y=!0}},[ne.size]);const ye=a.useCallback(async()=>{if(ne.size===0)return;const Y=Array.from(ne).filter(ve=>{const nt=e.find(Q=>Q.id===ve);return nt&&nt.column!=="archived"});if(Y.length===0){i("No valid tasks to update (archived tasks cannot be modified)","error");return}const le={taskIds:Y};if(Ye!=="__no_change__")if(Ye==="")le.modelProvider=null,le.modelId=null;else{const ve=Ye.indexOf("/");ve!==-1&&(le.modelProvider=Ye.slice(0,ve),le.modelId=Ye.slice(ve+1))}if(Oe!=="__no_change__")if(Oe==="")le.validatorModelProvider=null,le.validatorModelId=null;else{const ve=Oe.indexOf("/");ve!==-1&&(le.validatorModelProvider=Oe.slice(0,ve),le.validatorModelId=Oe.slice(ve+1))}if(oe!=="__no_change__"&&(oe===""?le.nodeId=null:le.nodeId=oe),Object.keys(le).length===1){i("No changes to apply","info");return}tt(!0);try{const ve=await Wv(le.taskIds,le.modelProvider,le.modelId,le.validatorModelProvider,le.validatorModelId,void 0,void 0,le.nodeId,b);g&&g(ve.updated),i(`Updated ${Y.length} task${Y.length===1?"":"s"}`,"success"),ce(),rt("__no_change__"),We("__no_change__"),xe("__no_change__")}catch(ve){i(je(ve)||"Failed to update models","error")}finally{tt(!1)}},[ne,e,Ye,Oe,oe,b,i,ce,g]),de=a.useCallback(Y=>{s(Y)},[s]),Ie=a.useCallback((Y,le)=>{if(le.paused){Y.preventDefault();return}Y.dataTransfer.setData("text/plain",le.id),Y.dataTransfer.effectAllowed="move",z(le.id)},[]),fe=a.useCallback(()=>{z(null),T(null)},[]),_e=a.useCallback((Y,le)=>{Y.preventDefault(),Y.dataTransfer.dropEffect="move",T(le)},[]),Ge=a.useCallback(()=>{T(null)},[]),Pe=a.useCallback(async(Y,le)=>{Y.preventDefault(),T(null);const ve=Y.dataTransfer.getData("text/plain");if(ve){if(le==="archived"){i("Tasks can only be archived via the archive button","error");return}try{await n(ve,le)}catch(nt){i(je(nt),"error")}}},[n,i]),ft=Y=>N!==Y?t.jsx(Zh,{size:14,className:"sort-icon"}):w==="asc"?t.jsx(Fi,{size:14,className:"sort-icon active"}):t.jsx(Er,{size:14,className:"sort-icon active"});return t.jsxs("div",{className:"list-view",children:[t.jsxs("div",{className:"list-toolbar",children:[t.jsxs("div",{className:"list-column-toggle",ref:O,children:[t.jsxs("button",{className:"btn btn-sm",onClick:()=>k(Y=>!Y),"aria-expanded":P,"aria-haspopup":"menu",children:[t.jsx(kb,{size:14}),"Columns"]}),P&&t.jsx("div",{className:"list-column-dropdown",role:"menu",children:Fc.map(Y=>{const le=F.has(Y),ve=le&&F.size===1;return t.jsxs("label",{className:`list-column-dropdown-item${ve?" disabled":""}`,role:"menuitem",title:ve?"At least one column must be visible":"",children:[t.jsx("input",{type:"checkbox",checked:le,onChange:()=>ke(Y),disabled:ve}),t.jsx("span",{children:D[Y]})]},Y)})})]}),t.jsxs("button",{className:"btn btn-sm list-hide-done-toggle",onClick:()=>te(Y=>!Y),"aria-pressed":G,title:G?"Show done tasks":"Hide done tasks",children:[G?t.jsx(Ea,{size:14}):t.jsx(ad,{size:14}),G?"Show Done":"Hide Done"]}),t.jsxs("div",{className:"list-stats",children:[U?`${ae} of ${e.length} tasks in ${Fn[U]}`:`${ae} of ${e.length} tasks`,Ae>0&&!U&&t.jsxs("span",{className:"list-stats-hidden",children:[" (",Ae," hidden)"]}),U&&t.jsx("button",{className:"btn btn-sm",onClick:ue,"aria-label":"Clear column filter",style:{marginLeft:"8px"},children:"Clear"})]}),ne.size>0&&t.jsxs("div",{className:"list-selection-stats",children:[t.jsxs("span",{className:"selection-count",children:[ne.size," selected"]}),t.jsx("button",{className:"btn btn-sm btn-link",onClick:ce,children:"Clear"})]}),ne.size>0&&c&&c.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(Jn,{models:c,value:Ye,onChange:rt,label:"Executor Model",noChangeValue:"__no_change__",noChangeLabel:"No change",favoriteProviders:u,onToggleFavorite:m,favoriteModels:d,onToggleModelFavorite:h})}),t.jsx("div",{className:"bulk-edit-dropdown",children:t.jsx(Jn,{models:c,value:Oe,onChange:We,label:"Reviewer Model",noChangeValue:"__no_change__",noChangeLabel:"No change",favoriteProviders:u,onToggleFavorite:m,favoriteModels:d,onToggleModelFavorite:h})}),t.jsxs("div",{className:"bulk-edit-dropdown bulk-edit-node-wrap",children:[t.jsxs("select",{className:"select bulk-node-select",value:oe,onChange:Y=>xe(Y.target.value),"aria-label":"Node Override",disabled:Ue,children:[t.jsx("option",{value:"__no_change__",children:"No change"}),t.jsx("option",{value:"",children:"Use project default"}),ee.map(Y=>t.jsx("option",{value:Y.id,children:`${r1(Y.status)} ${Y.name||Y.id} (${a1(Y.status)})`},Y.id))]}),Me?t.jsx(Vi,{status:Me.status,showLabel:!0}):null]}),t.jsx("button",{className:"btn btn-primary btn-sm bulk-edit-apply-btn",onClick:ye,disabled:ze||Ye==="__no_change__"&&Oe==="__no_change__"&&oe==="__no_change__",children:ze?"Applying...":"Apply"})]}),o?t.jsx("button",{className:"btn btn-task-create btn-sm",onClick:o,children:"+ New Task"}):null]}),t.jsx("div",{className:"list-drop-zones",children:Oi.map(Y=>{const le=e.filter(Je=>Je.column===Y).length,ve=Y==="done"||Y==="archived",nt=G&&ve?0:le,Q=G&&ve&&le>0;return t.jsxs("div",{className:`list-drop-zone${M===Y?" drag-over":""}${U===Y?" active":""}`,onClick:()=>Z(Y),onDragOver:Je=>_e(Je,Y),onDragLeave:Ge,onDrop:Je=>Pe(Je,Y),"data-column":Y,children:[t.jsx("span",{className:"drop-zone-dot",style:{background:Ha[Y]}}),t.jsx("span",{className:"drop-zone-label",children:Fn[Y]}),t.jsx("span",{className:"drop-zone-count",children:Q?`${nt} of ${le}`:le})]},Y)})}),t.jsxs("div",{className:"list-table-container",children:[t.jsx("div",{className:"list-quick-entry-above-table",children:t.jsx(Hp,{onCreate:l??(async()=>i("Task creation not available","error")),addToast:i,tasks:e,availableModels:c,onPlanningMode:f,onSubtaskBreakdown:p,projectId:b,autoExpand:!1,favoriteProviders:u,favoriteModels:d,onToggleFavorite:m,onToggleModelFavorite:h})}),ae===0?t.jsx("div",{className:"list-empty",children:y?"No tasks match your filter":"No tasks yet"}):R?t.jsx("div",{className:"list-cards",children:Oi.map(Y=>{if(U&&Y!==U||G&&(Y==="done"||Y==="archived")&&!U)return null;const le=me[Y],ve=le.length===0;if(y&&ve)return null;const nt=E.has(Y);return t.jsxs(a.Fragment,{children:[t.jsxs("div",{className:`list-card-section-header${nt?" list-section-header--collapsed":""}`,onClick:()=>ge(Y),"aria-expanded":!nt,role:"button",tabIndex:0,onKeyDown:Q=>{(Q.key==="Enter"||Q.key===" ")&&(Q.preventDefault(),ge(Y))},children:[t.jsx(jn,{size:14,className:`list-section-chevron${nt?"":" list-section-chevron--expanded"}`}),t.jsx("span",{className:`list-section-dot dot-${Y}`}),t.jsx("span",{className:"list-section-title",children:Fn[Y]}),t.jsx("span",{className:"list-section-count",children:le.length})]}),!nt&&t.jsx(t.Fragment,{children:ve?t.jsx("div",{className:"list-empty-cell list-card-empty",children:"No tasks"}):le.map(Q=>{const Je=Q.status==="failed",ut=Q.paused===!0,ht=_o(Q,x,j),Et=!r&&!Je&&!ut&&!ht&&(Q.column==="in-progress"||Bu.has(Q.status)),yt=typeof Q.status=="string"&&Q.status.trim().length>0,bt=!!(Q.dependencies&&Q.dependencies.length>0),vt=Ku(Q),qt=vt.hasProgress,Tt=ne.size>0;return t.jsxs("div",{className:`list-card${Et?" agent-active":""}${Tt?" list-card--selectable":""}`,onClick:()=>de(Q),"data-id":Q.id,children:[Tt&&t.jsx("label",{className:"list-card-checkbox",onClick:At=>At.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:ne.has(Q.id),onChange:At=>{At.stopPropagation(),ie(Q.id)},onClick:At=>At.stopPropagation(),disabled:Q.column==="archived","aria-label":`Select ${Q.id}`})}),t.jsxs("div",{className:"list-card-row",children:[t.jsx("span",{className:"list-card-id",children:Q.id}),Q.executionMode==="fast"&&t.jsx("span",{className:"list-execution-mode-badge list-execution-mode-badge--fast",children:"Fast"}),t.jsx("span",{className:"list-card-spacer"}),ht?t.jsx("span",{className:"list-status-badge stuck",children:"Stuck"}):yt?t.jsx("span",{className:`list-status-badge list-status-badge--${Q.column}${Je?" failed":""}${Et?" pulsing":""}`,children:Q.status}):null]}),t.jsx("div",{className:"list-card-row",children:t.jsx("div",{className:"list-card-title",children:Q.title||Q.description})}),(bt||qt)&&t.jsxs("div",{className:"list-card-row list-card-meta",children:[bt&&t.jsxs("span",{className:"list-dep-badge",title:Q.dependencies.join(", "),children:[t.jsx(pa,{size:12})," ",Q.dependencies.length]}),qt&&t.jsxs("div",{className:"list-progress",children:[t.jsx("div",{className:"list-progress-bar",children:t.jsx("div",{className:"list-progress-fill",style:{width:`${vt.percent}%`,backgroundColor:Ha[Q.column]}})}),t.jsx("span",{className:"list-progress-label",children:vt.label})]})]})]},Q.id)})})]},Y)})}):t.jsxs("table",{className:"list-table",children:[t.jsx("thead",{children:t.jsxs("tr",{children:[t.jsx("th",{className:"list-header-cell list-header-checkbox",children:t.jsx("input",{type:"checkbox",checked:at,ref:Y=>{Y&&(Y.indeterminate=et)},onChange:Fe,"aria-label":"Select all visible tasks"})}),F.has("id")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>se("id"),children:["ID ",ft("id")]}),F.has("title")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>se("title"),children:["Title ",ft("title")]}),F.has("status")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>se("status"),children:["Status ",ft("status")]}),F.has("column")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>se("column"),children:["Column ",ft("column")]}),F.has("dependencies")&&t.jsx("th",{className:"list-header-cell",children:"Dependencies"}),F.has("progress")&&t.jsx("th",{className:"list-header-cell",children:"Progress"})]})}),t.jsx("tbody",{children:Oi.map(Y=>{if(U&&Y!==U||G&&(Y==="done"||Y==="archived")&&!U)return null;const le=me[Y],ve=le.length===0;if(y&&ve)return null;const nt=E.has(Y);return t.jsxs(a.Fragment,{children:[t.jsx("tr",{className:`list-section-header${nt?" list-section-header--collapsed":""}`,onClick:()=>ge(Y),"aria-expanded":!nt,children:t.jsxs("th",{colSpan:F.size+1,className:"list-section-cell",children:[t.jsx(jn,{size:14,className:`list-section-chevron${nt?"":" list-section-chevron--expanded"}`}),t.jsx("span",{className:`list-section-dot dot-${Y}`}),t.jsx("span",{className:"list-section-title",children:Fn[Y]}),t.jsx("span",{className:"list-section-count",children:le.length})]})}),!nt&&t.jsx(t.Fragment,{children:ve?t.jsx("tr",{className:"list-section-empty",children:t.jsx("td",{colSpan:F.size+1,className:"list-empty-cell",children:"No tasks"})}):le.map(Q=>{const Je=Q.status==="failed",ut=Q.paused===!0,ht=_o(Q,x,j),Et=!r&&!Je&&!ut&&!ht&&(Q.column==="in-progress"||Bu.has(Q.status)),yt=S===Q.id;return t.jsxs("tr",{className:`list-row${Je?" failed":""}${ut?" paused":""}${ht?" stuck":""}${Et?" agent-active":""}${yt?" dragging":""}`,onClick:()=>de(Q),draggable:!ut,onDragStart:bt=>Ie(bt,Q),onDragEnd:fe,"data-id":Q.id,children:[t.jsx("td",{className:"list-cell list-cell-checkbox",children:t.jsx("input",{type:"checkbox",checked:ne.has(Q.id),onChange:bt=>{bt.stopPropagation(),ie(Q.id)},onClick:bt=>bt.stopPropagation(),disabled:Q.column==="archived","aria-label":`Select ${Q.id}`})}),F.has("id")&&t.jsx("td",{className:"list-cell list-cell-id",children:Q.id}),F.has("title")&&t.jsx("td",{className:"list-cell list-cell-title",children:t.jsxs("div",{className:"list-title-content",children:[Q.executionMode==="fast"&&t.jsx("span",{className:"list-execution-mode-badge list-execution-mode-badge--fast",children:"Fast"}),t.jsx("span",{className:"list-title-text",children:Q.title||Q.description})]})}),F.has("status")&&t.jsx("td",{className:"list-cell",children:ht?t.jsx("span",{className:"list-status-badge stuck",children:"Stuck"}):Q.status?t.jsx("span",{className:`list-status-badge list-status-badge--${Q.column}${Je?" failed":""}${Et?" pulsing":""}`,children:Q.status}):t.jsx("span",{className:"list-status-badge",children:"-"})}),F.has("column")&&t.jsx("td",{className:"list-cell",children:t.jsx("span",{className:"list-column-badge",style:{background:`${Ha[Q.column]}20`,color:Ha[Q.column]},children:Fn[Q.column]})}),F.has("dependencies")&&t.jsx("td",{className:"list-cell list-cell-deps",children:Q.dependencies&&Q.dependencies.length>0?t.jsxs("span",{className:"list-dep-badge",title:Q.dependencies.join(", "),children:[t.jsx(pa,{size:12})," ",Q.dependencies.length]}):"-"}),F.has("progress")&&t.jsx("td",{className:"list-cell list-cell-progress",children:(()=>{const bt=Ku(Q);return bt.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:`${bt.percent}%`,backgroundColor:Ha[Q.column]}})}),t.jsx("span",{className:"list-progress-label",children:bt.label})]}):"-"})()})]},Q.id)})})]},Y)})})]})]})]})}const c1={active:{label:"Active",color:"var(--success)",icon:En},paused:{label:"Paused",color:"var(--warning)",icon:Hs},errored:{label:"Error",color:"var(--color-error)",icon:ms},initializing:{label:"Initializing",color:"var(--info)",icon:lt}};function d1(e){if(!e)return"Never";const n=new Date(e),i=new Date().getTime()-n.getTime(),r=Math.floor(i/6e4),o=Math.floor(i/36e5),l=Math.floor(i/864e5);return r<1?"Just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString()}function u1(e,n=40){if(e.length<=n)return e;const s=e.slice(0,Math.floor(n/2)-2),i=e.slice(-Math.floor(n/2)+2);return`${s}...${i}`}function m1(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,i=n.health;if(!s&&!i)return!0;if(!s||!i||s.activeTaskCount!==i.activeTaskCount||s.inFlightAgentCount!==i.inFlightAgentCount||s.totalTasksCompleted!==i.totalTasksCompleted||s.totalTasksFailed!==i.totalTasksFailed||s.status!==i.status)return!1;const r=e.node,o=n.node;return!r&&!o?e.nodeNameFallback===n.nodeNameFallback:!r||!o?!1:r.id===o.id&&r.name===o.name&&r.status===o.status&&r.type===o.type}function h1({project:e,health:n,onSelect:s,onPause:i,onResume:r,onRemove:o,node:l,nodeNameFallback:c,isLoading:u=!1}){const[d,m]=a.useState(!1),h=c1[e.status],f=h.icon,p=a.useCallback(()=>{s(e)},[s,e]),g=a.useCallback(N=>{N.stopPropagation(),i(e)},[i,e]),b=a.useCallback(N=>{N.stopPropagation(),r(e)},[r,e]),v=a.useCallback(N=>{if(N.stopPropagation(),!d){m(!0);return}o(e),m(!1)},[d,o,e]),x=e.status==="paused",y=e.status==="errored",j=e.status==="initializing";return t.jsxs("div",{className:`project-card ${u?"project-card-loading":""} ${y?"project-card-errored":""}`,onClick:p,"data-project-id":e.id,role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),p())},children:[t.jsxs("div",{className:"project-card-header",children:[t.jsx("div",{className:"project-card-icon",children:t.jsx(Gn,{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||c)&&t.jsxs("span",{className:"node-badge",title:`Assigned node: ${l?.name??c}`,children:["on: ",l?.name??c]}),t.jsx("span",{className:"project-card-path",title:e.path,children:u1(e.path)})]}),t.jsxs("div",{className:"project-card-status-badge",style:{color:h.color,borderColor:h.color},children:[t.jsx(f,{size:12,className:j?"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:d1(e.lastActivityAt||n?.lastActivityAt)})]}),t.jsxs("div",{className:"project-card-actions",children:[x?t.jsxs("button",{className:"project-card-action project-card-action-resume",onClick:b,disabled:u,title:"Resume project","aria-label":"Resume project",children:[t.jsx(En,{size:14}),t.jsx("span",{children:"Resume"})]}):t.jsxs("button",{className:"project-card-action project-card-action-pause",onClick:g,disabled:u||j,title:j?"Cannot pause while initializing":"Pause project","aria-label":"Pause project",children:[t.jsx(Hs,{size:14}),t.jsx("span",{children:"Pause"})]}),t.jsxs("button",{className:"project-card-action project-card-action-open",onClick:p,disabled:u,title:"Open project","aria-label":"Open project",children:[t.jsx(Mr,{size:14}),t.jsx("span",{children:"Open"})]}),t.jsxs("button",{className:`project-card-action project-card-action-remove ${d?"is-armed":""}`,onClick:v,disabled:u,title:d?"Confirm remove":"Remove project","aria-label":d?"Confirm remove project":"Remove project",children:[t.jsx(ln,{size:14}),t.jsx("span",{children:d?"Confirm":""})]})]})]})]})}const p1=a.memo(h1,m1);function f1(){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(Gn,{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(Is,{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(kn,{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(ms,{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 g1=1e4,Gu=5;function b1(e){const[n,s]=a.useState({}),[i,r]=a.useState(!0),[o,l]=a.useState(null),c=a.useRef(null),u=a.useRef(null),d=a.useRef(!1),m=a.useCallback(async()=>{if(e.length===0){s({}),d.current||(d.current=!0),r(!1);return}u.current&&u.current.abort(),u.current=new AbortController,!d.current&&r(!0),l(null);try{const p={};for(let g=0;g<e.length;g+=Gu){const b=e.slice(g,g+Gu),v=await Promise.allSettled(b.map(async x=>{try{return await cu(x)}catch{return null}}));if(b.forEach((x,y)=>{const j=v[y];p[x]=j.status==="fulfilled"?j.value:null}),u.current?.signal.aborted)return}s(p),d.current=!0}catch(p){if(p instanceof Error&&p.name==="AbortError")return;l(p instanceof Error?p.message:"Failed to fetch health data"),d.current=!0}finally{r(!1)}},[e]),h=a.useCallback(async f=>{try{const p=await cu(f);s(g=>({...g,[f]:p}))}catch(p){console.error(`Failed to fetch health for project ${f}:`,p)}},[]);return a.useEffect(()=>(d.current=!1,m(),()=>{u.current&&u.current.abort()}),[m]),a.useEffect(()=>{if(e.length!==0)return c.current&&clearInterval(c.current),c.current=setInterval(()=>{m()},g1),()=>{c.current&&(clearInterval(c.current),c.current=null)}},[m,e.length]),{healthMap:n,loading:i,error:o,refresh:m,refreshProject:h}}function x1({projects:e,loading:n=!1,onSelectProject:s,onAddProject:i,onPauseProject:r,onResumeProject:o,onRemoveProject:l,nodes:c=[]}){const[u,d]=a.useState("all"),[m,h]=a.useState(null),[f,p]=a.useState("activity"),[g,b]=a.useState("desc");a.useEffect(()=>{if(typeof window>"u")return;const V=localStorage.getItem("kb-dashboard-recent-projects");if(V)try{const L=JSON.parse(V);x(L)}catch{}},[]);const[v,x]=a.useState([]),y=a.useMemo(()=>e.map(V=>V.id),[e]),{healthMap:j,loading:N}=b1(y),C=a.useMemo(()=>e.map(V=>({project:V,health:j[V.id]||null})),[e,j]),w=a.useMemo(()=>{let V=[...C];return u!=="all"&&(V=V.filter(({project:L})=>L.status===u)),m!==null&&(V=V.filter(({project:L})=>L.nodeId===m)),V},[C,u,m]),_=a.useMemo(()=>{const V=[...w];return V.sort((L,R)=>{let F=0;switch(f){case"name":F=L.project.name.localeCompare(R.project.name);break;case"activity":{const W=L.project.lastActivityAt||L.health?.lastActivityAt||L.project.updatedAt,G=R.project.lastActivityAt||R.health?.lastActivityAt||R.project.updatedAt;F=new Date(G).getTime()-new Date(W).getTime();break}case"status":{const W={errored:0,initializing:1,paused:2,active:3};F=W[L.project.status]-W[R.project.status];break}}return g==="asc"?F:-F}),V},[w,f,g]),S=a.useMemo(()=>{const V=e.length,L=e.filter($=>$.status==="active").length,R=e.filter($=>$.status==="errored").length,F=new Set;e.forEach($=>{$.nodeId&&F.add($.nodeId)});const W=F.size||(V>0?1:0);let G=0,te=0,E=0;return Object.values(j).forEach($=>{$&&(G+=$.activeTaskCount,te+=$.totalTasksCompleted,E+=$.inFlightAgentCount)}),{totalProjects:V,activeProjects:L,erroredProjects:R,totalNodes:W,totalActiveTasks:G,totalCompletedTasks:te,totalInFlightAgents:E}},[e,j]),z=a.useMemo(()=>({all:e.length,active:e.filter(V=>V.status==="active").length,paused:e.filter(V=>V.status==="paused").length,errored:e.filter(V=>V.status==="errored").length}),[e]),M=a.useMemo(()=>{const V=new Map;return e.forEach(L=>{const R=L.nodeId,F=V.get(R);if(F)F.count++;else{const G=c.find(te=>te.id===R)?.name??L._sourceNodeName??"Local";V.set(R,{name:G,count:1})}}),Array.from(V.entries()).map(([L,{name:R,count:F}])=>({nodeId:L??null,name:R,count:F}))},[e,c]),T=a.useCallback(V=>{const L=[V.id,...v.filter(R=>R!==V.id)].slice(0,3);x(L),typeof window<"u"&&localStorage.setItem("kb-dashboard-recent-projects",JSON.stringify(L)),s(V)},[s,v]);return n||N&&e.length>0&&Object.keys(j).length===0?t.jsx(f1,{}):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(ar,{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:i,children:[t.jsx(cn,{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(qi,{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(Gn,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:S.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(Is,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:S.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(kn,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:S.totalCompletedTasks}),t.jsx("span",{className:"project-stat__label",children:"Completed"})]})]}),S.erroredProjects>0&&t.jsxs("div",{className:"project-stat project-stat--error",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(ms,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:S.erroredProjects}),t.jsx("span",{className:"project-stat__label",children:"Errored"})]})]}),S.totalNodes>1&&t.jsxs("div",{className:"project-stat project-stat--nodes",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(xr,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:S.totalNodes}),t.jsx("span",{className:"project-stat__label",children:"Nodes"})]})]})]}),t.jsxs("button",{className:"btn btn-primary project-overview__add-btn",onClick:i,children:[t.jsx(cn,{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 ${u==="all"?"active":""}`,onClick:()=>d("all"),children:["All",t.jsx("span",{className:"project-filter-count",children:z.all})]}),t.jsxs("button",{className:`project-filter-tab ${u==="active"?"active":""}`,onClick:()=>d("active"),children:["Active",t.jsx("span",{className:"project-filter-count",children:z.active})]}),t.jsxs("button",{className:`project-filter-tab ${u==="paused"?"active":""}`,onClick:()=>d("paused"),children:["Paused",t.jsx("span",{className:"project-filter-count",children:z.paused})]}),t.jsxs("button",{className:`project-filter-tab ${u==="errored"?"active":""} ${z.errored>0?"has-errors":""}`,onClick:()=>d("errored"),children:["Errored",t.jsx("span",{className:"project-filter-count",children:z.errored})]})]}),M.length>1&&t.jsxs("div",{className:"project-node-filter",children:[t.jsx(xr,{size:14}),t.jsxs("select",{value:m??"",onChange:V=>{h(V.target.value||null)},className:"project-node-filter-select","aria-label":"Filter by node",children:[t.jsx("option",{value:"",children:"All Nodes"}),M.map(({nodeId:V,name:L,count:R})=>t.jsxs("option",{value:V??"",children:[L," (",R,")"]},V??"local"))]})]}),t.jsxs("div",{className:"project-sort",children:[t.jsx(wo,{size:14}),t.jsxs("select",{value:`${f}-${g}`,onChange:V=>{const[L,R]=V.target.value.split("-");p(L),b(R)},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(Zh,{size:14})]})]}),t.jsx("div",{className:"project-grid",children:_.map(({project:V,health:L})=>{const R=c.find(W=>W.id===V.nodeId),F=R?void 0:V._sourceNodeName;return t.jsx(p1,{project:V,health:L,node:R,nodeNameFallback:F,onSelect:T,onPause:r,onResume:o,onRemove:l},V.id)})}),_.length===0&&t.jsxs("div",{className:"project-overview__no-results",children:[t.jsx(wo,{size:32}),t.jsx("p",{children:"No projects match the current filter"}),t.jsx("button",{className:"btn btn-secondary",onClick:()=>d("all"),children:"Show All Projects"})]})]})}const v1=45e3,y1=3e3,j1=2e3,k1=1500,Ju="fusion:sse-client-id";let sa=null;const Si=new Map;function Yu(){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 Vp(){if(!(typeof window>"u")){if(sa)return sa;try{const e=window.sessionStorage.getItem(Ju);if(e)return sa=e,e;const n=Yu();return window.sessionStorage.setItem(Ju,n),sa=n,n}catch{return sa=Yu(),sa}}}function Wp(e){if(!(typeof window>"u"))try{return{parsed:new URL(e,window.location.origin),preserveRelativePath:e.startsWith("/")}}catch{return}}function Kp(e){return e.origin===window.location.origin&&e.pathname==="/api/events"}function w1(e){const n=Vp();if(!n)return e;const s=Wp(e);return!s||!Kp(s.parsed)?e:(s.parsed.searchParams.set("clientId",n),s.preserveRelativePath?`${s.parsed.pathname}${s.parsed.search}${s.parsed.hash}`:s.parsed.toString())}function gd(e,n){const s=Vp();if(!s)return;const i=Wp(e);if(!i||!Kp(i.parsed))return;const r=new URL(`/api/events/${n}`,window.location.origin);r.searchParams.set("clientId",s);const o=i.parsed.searchParams.get("projectId");return o&&r.searchParams.set("projectId",o),ii(`${r.pathname}${r.search}${r.hash}`)}function N1(e){if(typeof window>"u")return;const n=gd(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 Zo(e){e.keepaliveTimer&&(clearInterval(e.keepaliveTimer),e.keepaliveTimer=null)}function Qu(e){if(typeof window>"u"||typeof window.fetch!="function")return;const n=gd(e.url,"keepalive");if(!n)return;const s=typeof AbortController<"u"?new AbortController:null,i=s?window.setTimeout(()=>s.abort(),k1):null;window.fetch(n,{method:"POST",cache:"no-store",signal:s?.signal}).catch(()=>{}).finally(()=>{i!==null&&window.clearTimeout(i)})}function S1(e){Zo(e),gd(e.url,"keepalive")&&(Qu(e),e.keepaliveTimer=window.setInterval(()=>{Qu(e)},j1))}if(typeof window<"u"){const e=()=>{for(const s of Array.from(Si.values()))if(!s.closed){if(Zo(s),N1(s),s.es){try{s.es.close()}catch{}s.es=null}s.closed=!0}},n=s=>{if(s.persisted)for(const i of Array.from(Si.values()))i.subscribers.size!==0&&(i.closed=!1,bd(i))};window.addEventListener("pagehide",e),window.addEventListener("beforeunload",e),window.addEventListener("pageshow",n)}function lr(e){e.heartbeatTimer&&clearTimeout(e.heartbeatTimer),e.heartbeatTimer=setTimeout(()=>{Gp(e)},v1)}function Gp(e){if(e.heartbeatTimer&&(clearTimeout(e.heartbeatTimer),e.heartbeatTimer=null),e.es&&(e.es.close(),e.es=null),Zo(e),e.nativeListeners.clear(),e.closed||e.subscribers.size===0||e.reconnectTimer)return;const n=Si.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=Si.get(e.url);s&&s===e&&e.subscribers.size>0&&bd(e)},y1)}}function bd(e){if(e.es||e.closed)return;e.reconnectTimer&&(clearTimeout(e.reconnectTimer),e.reconnectTimer=null);const n=new EventSource(ii(w1(e.url)));e.es=n,S1(e),n.addEventListener("open",()=>{lr(e);const s=e.hasOpenedOnce;e.hasOpenedOnce=!0;for(const i of e.subscribers)i.onOpen?.(),s&&i.onReconnect?.()}),n.addEventListener("error",s=>{for(const i of e.subscribers)i.onError?.(s);Gp(e)}),n.addEventListener("message",()=>lr(e)),n.addEventListener("heartbeat",()=>lr(e)),Jp(e),lr(e)}function Jp(e){if(!e.es)return;const n=new Set;for(const s of e.subscribers)for(const i of s.events.keys())n.add(i);for(const s of n){if(e.nativeListeners.has(s))continue;const i=r=>{lr(e);const o=r;for(const l of e.subscribers){const c=l.events.get(s);if(c)for(const u of c)u(o)}};e.nativeListeners.set(s,i),e.es.addEventListener(s,i)}}function C1(e){e.closed=!0,e.heartbeatTimer&&clearTimeout(e.heartbeatTimer),Zo(e),e.reconnectTimer&&clearTimeout(e.reconnectTimer),e.es&&e.es.close(),e.es=null,e.nativeListeners.clear(),Si.delete(e.url)}function Ks(e,n={}){let s=Si.get(e);s||(s={url:e,es:null,subscribers:new Set,nativeListeners:new Map,heartbeatTimer:null,keepaliveTimer:null,reconnectTimer:null,hasOpenedOnce:!1,closed:!1},Si.set(e,s));const i={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 u=i.events.get(l);u||(u=new Set,i.events.set(l,u)),u.add(c)}s.subscribers.add(i);const r=!!s.es&&s.hasOpenedOnce;bd(s),Jp(s),r&&queueMicrotask(()=>{s.subscribers.has(i)&&i.onOpen?.()});let o=!0;return()=>{if(!o)return;o=!1;const l=Si.get(e);l&&(l.subscribers.delete(i),l.subscribers.size===0&&C1(l))}}const xd="kb-planning-last-description",vd="kb-subtask-last-description",yd="kb-mission-last-goal";function E1(e,n){bs(xd,e,n)}function M1(e){return Yn(xd,e)||""}function ia(e){wr(xd,e)}function _1(e,n){bs(vd,e,n)}function A1(e){return Yn(vd,e)||""}function Ml(e){wr(vd,e)}function R1(e,n){bs(yd,e,n)}function T1(e){return Yn(yd,e)||""}function vi(e){wr(yd,e)}function P1(e){const{question:n,response:s}=e;if(!n)return s;if(s&&typeof s=="object"&&!Array.isArray(s)){const i=s;if(n.id in i)return i[n.id]}return s}function I1(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(i=>i.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 $1(e){let n=0;const s=[];for(const i of e){if(i.question){n+=1,s.push({...i,questionNumber:n});continue}i.thinkingOutput&&s.push({...i,questionNumber:null})}return s}function $s({entries:e,defaultShowThinking:n=!1}){const[s,i]=a.useState({}),r=$1(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,u=!!o.thinkingOutput,d=s[l]??n,m=c?P1(o):void 0,h=o.question&&m!==void 0?I1(o.question,m):"";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:h||"—"})]}),u&&t.jsxs("div",{className:"conversation-entry-thinking",children:[t.jsxs("button",{type:"button",className:"conversation-thinking-toggle",onClick:()=>{i(f=>({...f,[l]:!d}))},"aria-expanded":d,children:[t.jsx("span",{"aria-hidden":"true",children:d?"▾":"▸"}),d?`Hide ${c?"AI thinking":"AI reasoning"}`:`Show ${c?"AI thinking":"AI reasoning"}`]}),d&&t.jsx("pre",{children:o.thinkingOutput})]})]},`${o.question?.id??"thinking"}-${l}`)})})}const Xu="fusion-tab-id";function D1(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`tab-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Yi(){if(typeof window>"u")return"server-tab";const e=window.sessionStorage.getItem(Xu);if(e)return e;const n=D1();return window.sessionStorage.setItem(Xu,n),n}function el(e){const n=a.useMemo(()=>Yi(),[]),[s,i]=a.useState(!1),[r,o]=a.useState(null),[l,c]=a.useState(!1);a.useEffect(()=>{if(!e){i(!1),o(null),c(!1);return}let d=!0;return c(!0),Promise.resolve(rw(e,n)).then(m=>{if(d){if(m.acquired){i(!1),o(null);return}i(!0),o(m.currentHolder)}}).catch(()=>{d&&(i(!1),o(null))}).finally(()=>{d&&c(!1)}),()=>{d=!1;try{const m=ow(e,n);m&&typeof m.catch=="function"&&m.catch(()=>{})}catch{}}},[e,n]),a.useEffect(()=>{if(!e||typeof window>"u")return;const d=()=>{if(typeof navigator.sendBeacon!="function")return;const m=ii(`/api/ai-sessions/${encodeURIComponent(e)}/lock/beacon?tabId=${encodeURIComponent(n)}`);navigator.sendBeacon(m)};return window.addEventListener("beforeunload",d),()=>{window.removeEventListener("beforeunload",d)}},[e,n]),a.useEffect(()=>!e||typeof EventSource>"u"?void 0:Ks("/api/events",{events:{"ai_session:updated":m=>{try{const h=JSON.parse(m.data);if(h.id!==e)return;const f=h.lockedByTab??null;o(f),i(!!(f&&f!==n))}catch{}}}}),[e,n]);const u=a.useCallback(async()=>{if(e){c(!0);try{await Promise.resolve(lw(e,n)),i(!1),o(null)}finally{c(!1)}}},[e,n]);return{isLockedByOther:s,currentHolder:r,takeControl:u,isLoading:l}}const L1="fusion:ai-session-sync",Zu="fusion:ai-session-sync",z1=3e4,F1=6e4;function Xs(){return Date.now()}function O1(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`tab-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function em(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 U1{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=O1(),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:Xs()})}broadcastUpdate(n){const s=n.timestamp??Xs();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",i=n.timestamp??Xs();this.applySessionUpdate({sessionId:n.sessionId,status:s,needsInput:!1,owningTabId:null},i),this.ownershipBySession.delete(n.sessionId),this.ownedSessions.delete(n.sessionId),this.emit(),this.publish({type:"session:completed",sessionId:n.sessionId,status:s,timestamp:i})}broadcastLock(n,s){const i=Xs();this.applyTabOwnership(n,s,i),this.ownedSessions.set(n,s),this.publish({type:"tab:active",tabId:s,sessionId:n,timestamp:i})}broadcastUnlock(n,s){const i=Xs();this.releaseTabOwnership(n,s,i),this.ownedSessions.delete(n),this.publish({type:"tab:inactive",tabId:s,sessionId:n,timestamp:i})}broadcastHeartbeat(n){const s=Xs();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(L1),this.channel.onmessage=s=>{const i=em(s.data);i&&this.handleIncomingMessage(i)},this.usingStorageFallback=!1;return}catch{}this.usingStorageFallback=!0;const n=s=>{if(!(s.key!==Zu||!s.newValue))try{const i=JSON.parse(s.newValue),r=em(i.message);r&&this.handleIncomingMessage(r)}catch{}};window.addEventListener("storage",n),this.cleanupStorageListener=()=>{window.removeEventListener("storage",n)}}startHeartbeat(){this.heartbeatInterval=setInterval(()=>{const n=Xs();this.updateHeartbeat(this.tabId,n),this.publish({type:"tab:heartbeat",tabId:this.tabId,timestamp:n})},z1)}startStaleSweep(){this.staleSweepInterval=setInterval(()=>{this.emit()},1e4)}setupBeforeUnloadCleanup(){const n=()=>{for(const[s,i]of this.ownedSessions.entries()){const r=Xs();this.publish({type:"tab:inactive",tabId:i,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 i={id:`${s.type}-${s.timestamp}-${Math.random().toString(36).slice(2,8)}`,message:s};window.localStorage.setItem(Zu,JSON.stringify(i))}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}}),i=[...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:i,heartbeats:r,timestamp:Xs()});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,i=!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)),i&&this.emit()}applyTabOwnership(n,s,i,r=!0){const o=this.ownershipBySession.get(n);if(o&&i<o.timestamp)return;this.ownershipBySession.set(n,{tabId:s,timestamp:i}),this.updateHeartbeat(s,i,!1);const l=this.sessionStates.get(n);l&&i>=l.lastEventTimestamp&&this.sessionStates.set(n,{...l,owningTabId:s,lastEventTimestamp:i}),r&&this.emit()}releaseTabOwnership(n,s,i,r=!0){const o=this.ownershipBySession.get(n);if(!o||o.tabId!==s||i<o.timestamp)return;this.ownershipBySession.delete(n);const l=this.sessionStates.get(n);l&&i>=l.lastEventTimestamp&&this.sessionStates.set(n,{...l,owningTabId:null,lastEventTimestamp:i}),r&&this.emit()}updateHeartbeat(n,s,i=!0){const r=this.heartbeatByTab.get(n);r!==void 0&&s<r||(this.heartbeatByTab.set(n,s),i&&this.emit())}emit(){const n=Xs(),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 i=new Map;for(const[r,o]of this.ownershipBySession.entries()){const l=this.heartbeatByTab.get(o.tabId)??o.timestamp,c=n-l>F1;i.set(r,{sessionId:r,tabId:o.tabId,lastHeartbeatTimestamp:l,lastLockTimestamp:o.timestamp,stale:c})}this.snapshot={tabId:this.tabId,sessions:s,activeTabMap:i};for(const r of this.listeners)r()}}const Zs=new U1;function Ta(){const e=a.useSyncExternalStore(c=>Zs.subscribe(c),()=>Zs.getSnapshot(),()=>Zs.getSnapshot());a.useEffect(()=>{Zs.requestSync()},[]);const n=a.useCallback(c=>{Zs.broadcastUpdate(c)},[]),s=a.useCallback(c=>{Zs.broadcastCompleted(c)},[]),i=a.useCallback((c,u)=>{Zs.broadcastLock(c,u)},[]),r=a.useCallback((c,u)=>{Zs.broadcastUnlock(c,u)},[]),o=a.useCallback(c=>{Zs.broadcastHeartbeat(c)},[]),l=a.useCallback(()=>{Zs.requestSync()},[]);return{tabId:e.tabId,sessions:e.sessions,activeTabMap:e.activeTabMap,broadcastUpdate:n,broadcastCompleted:s,broadcastLock:i,broadcastUnlock:r,broadcastHeartbeat:o,requestSync:l}}function B1(e,n){return e&&n?`${e}/${n}`:""}function H1(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 q1=["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 V1({isOpen:e,onClose:n,onMissionCreated:s,projectId:i,initialGoal:r,resumeSessionId:o}){const[l,c]=a.useState(""),[u,d]=a.useState({type:"initial"}),[m,h]=a.useState(null),[f,p]=a.useState([]),[g,b]=a.useState([]),[v,x]=a.useState(null),[y,j]=a.useState(!1),N=a.useRef(!1),[C,w]=a.useState(""),[_,S]=a.useState(!0),[z,M]=a.useState(!1),[T,U]=a.useState(!1),[V,L]=a.useState(!1),R=a.useRef(null),F=a.useRef(null),W=a.useRef(null),G=a.useRef(null),[te,E]=a.useState(o??null),$=a.useMemo(()=>Yi(),[]),{isLockedByOther:P,takeControl:k,isLoading:O}=el(e?te:null),{activeTabMap:ne,broadcastUpdate:we,broadcastCompleted:ie,broadcastLock:ce,broadcastUnlock:ke,broadcastHeartbeat:D}=Ta(),{confirm:se}=Ws(),[Z,ge]=a.useState(void 0),[ue,me]=a.useState(void 0),[ae,be]=a.useState([]),[Ae,Fe]=a.useState(!0),[at,et]=a.useState(null),[Ye,rt]=a.useState([]),[Oe,We]=a.useState([]),oe=B1(Z,ue);a.useEffect(()=>{(async()=>{try{Fe(!0);const le=await hs();be(le.models),rt(le.favoriteProviders),We(le.favoriteModels)}catch(le){et(je(le)||"Failed to load models")}finally{Fe(!1)}})()},[]);const xe=a.useCallback(Y=>{rt(le=>{const ve=le,Q=ve.includes(Y)?ve.filter(Je=>Je!==Y):[Y,...ve];return fn({favoriteProviders:Q,favoriteModels:Oe}).catch(()=>{rt(ve)}),Q})},[Oe]),ee=a.useCallback(Y=>{We(le=>{const ve=le,Q=ve.includes(Y)?ve.filter(Je=>Je!==Y):[Y,...ve];return fn({favoriteProviders:Ye,favoriteModels:Q}).catch(()=>{We(ve)}),Q})},[Ye]),Re=a.useCallback((Y,le)=>{if(!Y||!le)return"Using default";const ve=ae.find(nt=>nt.provider===Y&&nt.id===le);return ve?`${ve.provider}/${ve.id}`:`${Y}/${le}`},[ae]),Ue=a.useCallback(Y=>{F.current?.close();const le=Gk(Y,i,{onThinking:ve=>{w(nt=>nt+ve),we({sessionId:Y,status:"generating",needsInput:!1,owningTabId:$,type:"mission_interview",title:l.trim()||"Mission interview",projectId:i??null})},onQuestion:ve=>{M(!1),U(!1),vi(i),d({type:"question",sessionId:Y,question:ve}),w(""),j(!0),we({sessionId:Y,status:"awaiting_input",needsInput:!0,owningTabId:$,type:"mission_interview",title:l.trim()||"Mission interview",projectId:i??null})},onSummary:ve=>{M(!1),U(!1),vi(i),d({type:"summary",sessionId:Y,summary:ve}),x(ve),w(""),j(!0),we({sessionId:Y,status:"complete",needsInput:!1,owningTabId:$,type:"mission_interview",title:l.trim()||"Mission interview",projectId:i??null})},onError:ve=>{const nt=ve||"Session failed while contacting the AI.";M(!1),U(!1),h(null),d({type:"error",sessionId:Y,errorMessage:nt}),w(""),j(!0),W.current=Y,we({sessionId:Y,status:"error",needsInput:!1,owningTabId:$,type:"mission_interview",title:l.trim()||"Mission interview",projectId:i??null}),ie({sessionId:Y,status:"error"})},onComplete:()=>{M(!1),U(!1),W.current=null,ie({sessionId:Y,status:"complete"})},onConnectionStateChange:ve=>{M(ve==="reconnecting")}});F.current=le},[ie,we,l,i,$]),pe=a.useCallback(async Y=>{const le=Y??l;if(le.trim()){h(null),w(""),p([]),b([]),M(!1),d({type:"loading"});try{const{sessionId:ve}=await qk(le.trim(),i,Z&&ue?{modelProvider:Z,modelId:ue}:void 0);W.current=ve,E(ve),vi(i),Ue(ve),p([])}catch(ve){M(!1),h(je(ve)||"Failed to start interview session"),d({type:"initial"}),W.current=null,E(null)}}},[Ue,l,Z,ue,i]);a.useEffect(()=>{e&&u.type==="initial"&&R.current?.focus()},[e,u.type]),a.useEffect(()=>{if(e&&r&&!N.current&&u.type==="initial"){c(r);const Y=setTimeout(()=>{N.current=!0,pe(r)},0);return()=>clearTimeout(Y)}else if(e&&!r&&!N.current&&u.type==="initial"){const Y=T1(i);Y&&c(Y)}},[e,r,u.type,pe]),a.useEffect(()=>{e||(N.current=!1,M(!1),U(!1),E(null))},[e]),a.useEffect(()=>{if(!e||!o||u.type!=="initial")return;let Y=!1;return hi(o).then(le=>{if(Y||!le)return;const ve=xa(le.conversationHistory);if(b(ve),E(le.id),p(ve.map(nt=>nt.response).filter(nt=>!!(nt&&typeof nt=="object"&&!Array.isArray(nt)))),le.status==="awaiting_input"&&le.currentQuestion)try{vi(i);const nt=JSON.parse(le.currentQuestion);W.current=le.id,j(!0),d({type:"question",sessionId:le.id,question:nt})}catch{h("Failed to restore session question.")}else if(le.status==="complete"&&le.result)try{vi(i);const nt=JSON.parse(le.result);W.current=le.id,j(!0),x(nt),d({type:"summary",sessionId:le.id,summary:nt})}catch{h("Failed to restore session result.")}else le.status==="generating"?(W.current=le.id,j(!0),le.thinkingOutput&&w(le.thinkingOutput),d({type:"loading"}),Ue(le.id)):le.status==="error"&&(W.current=le.id,j(!0),h(null),d({type:"error",sessionId:le.id,errorMessage:le.error??"The session encountered an error."}))}).catch(()=>{Y||h("Failed to resume session.")}),()=>{Y=!0}},[Ue,e,o,u.type,i]),a.useEffect(()=>{if(!e){G.current&&(ke(G.current,$),G.current=null);return}if(te&&G.current!==te){G.current&&ke(G.current,$),ce(te,$),G.current=te;return}!te&&G.current&&(ke(G.current,$),G.current=null)},[ce,ke,e,te,$]),a.useEffect(()=>{if(!e||!te||G.current!==te)return;D($);const Y=setInterval(()=>{D($)},3e4);return()=>{clearInterval(Y)}},[D,e,te,$]),a.useEffect(()=>()=>{F.current?.close(),F.current=null,G.current&&(ke(G.current,$),G.current=null)},[ke,$]),a.useEffect(()=>{if(!e)return;const Y=le=>{(u.type==="question"||u.type==="summary")&&(le.preventDefault(),le.returnValue=""),F.current?.close()};return window.addEventListener("beforeunload",Y),()=>window.removeEventListener("beforeunload",Y)},[e,u]);const Me=a.useCallback(()=>{F.current?.close(),F.current=null,n()},[n]),ze=a.useCallback(async()=>{if(l&&R1(l,i),!(y&&!await se({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,u.type==="question"||u.type==="summary"||u.type==="error")try{await Cp(u.sessionId,i,$)}catch{}c(""),d({type:"initial"}),h(null),p([]),b([]),x(null),w(""),M(!1),U(!1),j(!1),L(!1),ge(void 0),me(void 0),W.current=null,E(null),n()}},[l,y,u,n,i,$,se]);a.useEffect(()=>{if(!e)return;const Y=le=>{le.key==="Escape"&&ze()};return document.addEventListener("keydown",Y),()=>document.removeEventListener("keydown",Y)},[e,ze]);const tt=a.useCallback(async Y=>{if(u.type!=="question")return;const{sessionId:le}=u;h(null),p(ve=>[...ve,Y]),b(ve=>[...ve,{question:u.question,response:Y}]),d({type:"loading"}),w("");try{Ue(le),await Vk(le,Y,i,$),j(!0)}catch(ve){F.current?.close(),F.current=null,h(je(ve)||"Failed to submit response"),d({type:"question",sessionId:le,question:u.question})}},[u,i,$,Ue]),ye=a.useCallback(async()=>{if(u.type!=="error")return;const Y=u.sessionId;h(null),U(!0),w(""),d({type:"loading"}),Ue(Y);try{W.current=Y,E(Y),await Wk(Y,i,$)}catch(le){let ve=le;if((je(le)||"").includes("not in an error state"))try{const Q=await hi(Y);if(!Q)throw new Error("Failed to refresh interview session.");const Je=xa(Q.conversationHistory);if(b(Je),p(Je.map(ut=>ut.response).filter(ut=>!!(ut&&typeof ut=="object"&&!Array.isArray(ut)))),W.current=Q.id,E(Q.id),j(!0),Q.status==="generating")w(Q.thinkingOutput??""),d({type:"loading"}),F.current?.isConnected()||Ue(Q.id);else if(Q.status==="awaiting_input"){if(!Q.currentQuestion)throw new Error("Interview session is awaiting input but has no current question.");vi(i);const ut=JSON.parse(Q.currentQuestion);d({type:"question",sessionId:Q.id,question:ut}),F.current?.isConnected()||Ue(Q.id)}else if(Q.status==="complete"){if(!Q.result)throw new Error("Interview session is complete but has no result.");vi(i);const ut=JSON.parse(Q.result);x(ut),d({type:"summary",sessionId:Q.id,summary:ut})}else Q.status==="error"&&d({type:"error",sessionId:Q.id,errorMessage:Q.error??"Retry failed. Please try again."});M(!1);return}catch(Q){ve=Q}F.current?.close(),F.current=null,d({type:"error",sessionId:Y,errorMessage:je(ve)||"Retry failed. Please try again."}),M(!1)}finally{U(!1)}},[Ue,i,$,u]),de=a.useCallback(async()=>{if(u.type==="summary"){h(null),L(!0);try{const Y=await Kk(u.sessionId,v||void 0,i);s(Y),vi(i),F.current?.close(),F.current=null,c(""),d({type:"initial"}),h(null),p([]),b([]),x(null),w(""),M(!1),U(!1),j(!1),L(!1),W.current=null,E(null),n()}catch(Y){h(je(Y)||"Failed to create mission"),L(!1)}}},[u,v,s,n,i]),Ie=()=>u.type==="question"?Math.min(f.length+1,6):6,fe=u.type==="loading"||u.type==="question"||u.type==="summary"||u.type==="error",_e=te?ne.get(te):null,Ge=_e&&_e.tabId!==$,Pe=!!(Ge&&!_e.stale),ft=P&&(!Ge||_e.stale);return e?t.jsx("div",{className:"modal-overlay open",onClick:Y=>Y.target===Y.currentTarget&&ze(),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(vs,{size:20,className:"icon-triage"}),t.jsx("h3",{children:"Plan Mission with AI"})]}),t.jsxs("div",{className:"modal-header-actions",children:[fe&&t.jsx("button",{className:"modal-send-to-background",onClick:Me,title:"Send to background","aria-label":"Send to background",children:t.jsx(Rr,{size:16})}),t.jsx("button",{className:"modal-close",onClick:ze,"aria-label":"Close",children:t.jsx(Jt,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[m&&t.jsx("div",{className:"form-error planning-error",children:m}),z&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),Pe&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),u.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(as,{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:R,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:Y=>c(Y.target.value),onKeyDown:Y=>{Y.key==="Enter"&&!Y.shiftKey&&l.trim()&&(Y.preventDefault(),pe())}})]}),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:q1.map((Y,le)=>t.jsx("button",{className:"planning-example-chip",onClick:()=>c(Y),children:Y.length>45?Y.slice(0,45)+"...":Y},le))})]}),t.jsxs("div",{className:"planning-model-select-group",children:[t.jsxs("label",{htmlFor:"mission-interview-modal-model",className:"form-label",children:["Planning Model",Ae&&t.jsx("span",{className:"text-muted text-muted-sm",children:"Loading models…"})]}),t.jsx(Jn,{id:"mission-interview-modal-model",label:"Planning Model",value:oe,onChange:Y=>{const{provider:le,modelId:ve}=H1(Y);ge(le),me(ve)},models:ae,disabled:Ae,favoriteProviders:Ye,onToggleFavorite:xe,favoriteModels:Oe,onToggleModelFavorite:ee}),at&&t.jsxs("div",{className:"form-hint form-hint-error",children:[at," ",t.jsx("button",{type:"button",className:"text-link-btn",onClick:()=>{(async()=>{try{Fe(!0);const Y=await hs();be(Y.models),rt(Y.favoriteProviders),We(Y.favoriteModels),et(null)}catch(Y){et(je(Y)||"Failed to load models")}finally{Fe(!1)}})()},children:"Retry"})]}),t.jsx("div",{className:"model-selector-current model-selector-current--spaced",children:t.jsx("span",{className:`model-badge ${Z&&ue?"model-badge-custom":"model-badge-default"}`,children:Re(Z,ue)})})]})]}),t.jsx("div",{className:"planning-view-footer",children:t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>pe(),disabled:!l.trim(),children:[t.jsx(vs,{size:16,className:"icon-mr-8"}),"Start Interview"]})})]}),u.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(lt,{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:()=>S(!_),type:"button",children:_?"Hide thinking":"Show thinking"}),_&&C&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:C})})]})]}),u.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($s,{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:u.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void ye(),disabled:T,children:[T?t.jsx(lt,{size:14,className:"spin"}):t.jsx($n,{size:14}),t.jsx("span",{className:"icon-ml-6",children:T?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:ze,disabled:T,children:"Cancel"})]})]})]})}),u.type==="question"&&t.jsx(W1,{question:u.question,progress:Ie(),historyEntries:g,onSubmit:tt}),u.type==="summary"&&v&&t.jsx(K1,{summary:v,historyEntries:g,onSummaryChange:x,onApprove:de,onStartOver:()=>{d({type:"initial"}),j(!1),x(null),p([]),b([]),E(null),F.current?.close(),F.current=null},isCreating:V}),P&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(qo,{size:16}),t.jsx("span",{children:ft?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),ft&&t.jsx("button",{type:"button",onClick:()=>{k()},disabled:O,className:"btn btn-primary session-lock-take-control",children:O?"Taking control...":"Take Control"})]})})]})]})}):null}function W1({question:e,progress:n,historyEntries:s,onSubmit:i}){const[r,o]=a.useState({}),[l,c]=a.useState(""),u=a.useCallback(()=>{e.type==="text"?i({[e.id]:l}):e.type==="confirm"?i({[e.id]:r[e.id]===!0}):i(r)},[e,r,l,i]);a.useEffect(()=>{o({}),c("")},[e.id]);const d=()=>{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($s,{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(m=>t.jsx("div",{className:`planning-progress-step ${m<=n?"active":""}`},m))}),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:m=>c(m.target.value),onKeyDown:m=>{m.key==="Enter"&&!m.shiftKey&&l.trim()&&(m.preventDefault(),u())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(m=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:m.id,checked:r[e.id]===m.id,onChange:()=>o({[e.id]:m.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:m.label}),m.description&&t.jsx("span",{className:"planning-option-desc",children:m.description})]})]},m.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(m=>{const h=r[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:m.id,checked:h.includes(m.id),onChange:f=>{const p=f.target.checked?[...h,m.id]:h.filter(g=>g!==m.id);o({[e.id]:p})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:m.label}),m.description&&t.jsx("span",{className:"planning-option-desc",children:m.description})]})]},m.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(kn,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!1?"selected":""}`,onClick:()=>o({[e.id]:!1}),children:[t.jsx(Jt,{size:18}),"No"]})]})]})]})]})]}),t.jsx("div",{className:"planning-actions",children:t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:u,disabled:!d(),children:["Continue",t.jsx(Mr,{size:16,className:"icon-ml-4"})]})})]})}function K1({summary:e,historyEntries:n,onSummaryChange:s,onApprove:i,onStartOver:r,isCreating:o}){const[l,c]=a.useState(()=>new Set(e.milestones.map((N,C)=>C))),[u,d]=a.useState(()=>{const N=new Set;return e.milestones.forEach((C,w)=>{C.slices.forEach((_,S)=>N.add(`${w}-${S}`))}),N}),m=N=>{c(C=>{const w=new Set(C);return w.has(N)?w.delete(N):w.add(N),w})},h=N=>{d(C=>{const w=new Set(C);return w.has(N)?w.delete(N):w.add(N),w})},f=(N,C)=>{const w=[...e.milestones];w[N]={...w[N],...C},s({...e,milestones:w})},p=(N,C,w)=>{const _=[...e.milestones],S=[..._[N].slices];S[C]={...S[C],...w},_[N]={..._[N],slices:S},s({...e,milestones:_})},g=(N,C,w,_)=>{const S=[...e.milestones],z=[...S[N].slices],M=[...z[C].features];M[w]={...M[w],..._},z[C]={...z[C],features:M},S[N]={...S[N],slices:z},s({...e,milestones:S})},b=N=>{const C=e.milestones.filter((w,_)=>_!==N);s({...e,milestones:C})},v=(N,C)=>{const w=[...e.milestones];w[N]={...w[N],slices:w[N].slices.filter((_,S)=>S!==C)},s({...e,milestones:w})},x=(N,C,w)=>{const _=[...e.milestones],S=[..._[N].slices];S[C]={...S[C],features:S[C].features.filter((z,M)=>M!==w)},_[N]={..._[N],slices:S},s({...e,milestones:_})},y=(N,C)=>{const w=[...e.milestones],_=[...w[N].slices];_[C]={..._[C],features:[..._[C].features,{title:"New feature",description:""}]},w[N]={...w[N],slices:_},s({...e,milestones:w})},j=e.milestones.reduce((N,C)=>N+C.slices.reduce((w,_)=>w+_.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($s,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(kn,{size:24,className:"icon-success"}),t.jsx("h4",{children:"Mission Plan Ready"}),t.jsxs("p",{className:"text-muted",children:[e.milestones.length," milestones, ",j," 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:N=>s({...e,missionTitle:N.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:N=>s({...e,missionDescription:N.target.value})})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Roadmap"}),t.jsx("div",{className:"roadmap-list",children:e.milestones.map((N,C)=>t.jsxs("div",{className:"roadmap-card",children:[t.jsxs("div",{className:"roadmap-card-header",onClick:()=>m(C),children:[l.has(C)?t.jsx(en,{size:16,className:"icon-text-secondary"}):t.jsx(jn,{size:16,className:"icon-text-secondary"}),t.jsx(Hi,{size:16,className:"icon-milestone"}),t.jsx("input",{type:"text",className:"form-input roadmap-input-title",value:N.title,onChange:w=>f(C,{title:w.target.value}),onClick:w=>w.stopPropagation()}),e.milestones.length>1&&t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:w=>{w.stopPropagation(),b(C)},title:"Remove milestone",children:t.jsx(ln,{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:N.description||"",onChange:w=>f(C,{description:w.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:N.verification||"",onChange:w=>f(C,{verification:w.target.value})})]}),N.slices.map((w,_)=>{const S=`${C}-${_}`;return t.jsxs("div",{className:"roadmap-slice-card",children:[t.jsxs("div",{className:"roadmap-slice-header",onClick:()=>h(S),children:[u.has(S)?t.jsx(en,{size:14,className:"icon-text-secondary"}):t.jsx(jn,{size:14,className:"icon-text-secondary"}),t.jsx(_c,{size:14,className:"icon-slice"}),t.jsx("input",{type:"text",className:"form-input roadmap-input-subtitle",value:w.title,onChange:z=>p(C,_,{title:z.target.value}),onClick:z=>z.stopPropagation()}),N.slices.length>1&&t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:z=>{z.stopPropagation(),v(C,_)},title:"Remove slice",children:t.jsx(ln,{size:12,className:"icon-text-secondary"})})]}),u.has(S)&&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:w.verification||"",onChange:z=>p(C,_,{verification:z.target.value})})]}),w.features.map((z,M)=>t.jsxs("div",{className:"roadmap-feature-row",children:[t.jsx(kc,{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:T=>g(C,_,M,{title:T.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:()=>x(C,_,M),title:"Remove feature",children:t.jsx(ln,{size:12,className:"icon-text-secondary"})})]},M)),t.jsxs("button",{className:"btn roadmap-add-feature-btn",onClick:()=>y(C,_),children:[t.jsx(cn,{size:12}),"Add Feature"]})]})]},_)})]})]},C))})]})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:r,disabled:o,children:[t.jsx(Ca,{size:16,className:"icon-mr-4"}),"Start Over"]}),t.jsx("button",{className:"btn btn-primary",onClick:i,disabled:o||e.milestones.length===0,children:o?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:16,className:"spin icon-mr-8"}),"Creating Mission..."]}):t.jsxs(t.Fragment,{children:[t.jsx(kn,{size:16,className:"icon-mr-8"}),"Approve Plan"]})})]})]})}function G1({isOpen:e,onClose:n,onApplied:s,targetType:i,targetId:r,targetTitle:o,missionContext:l,projectId:c,resumeSessionId:u}){const[d,m]=a.useState({type:"initial"}),[h,f]=a.useState(null),[p,g]=a.useState([]),[b,v]=a.useState([]),[x,y]=a.useState(null),[j,N]=a.useState(""),[C,w]=a.useState(!0),[_,S]=a.useState(!1),[z,M]=a.useState(!1),T=a.useRef(null),U=a.useRef(null),V=a.useRef(null),L=a.useRef(null),[R,F]=a.useState(null),W=a.useMemo(()=>Yi(),[]);el(e?R:null);const{activeTabMap:G,broadcastUpdate:te,broadcastCompleted:E,broadcastLock:$,broadcastUnlock:P,broadcastHeartbeat:k}=Ta(),O=i==="milestone"?Jk:ew,ne=i==="milestone"?Yk:tw,we=i==="milestone"?Qk:nw,ie=i==="milestone"?Xk:sw,ce=i==="milestone"?Zk:iw,ke=i==="milestone"?"Milestone":"Slice",D=i==="milestone"?"milestone_interview":"slice_interview",se=a.useCallback(Oe=>{U.current?.close();const We=we(Oe,c,{onThinking:oe=>{N(xe=>xe+oe),te({sessionId:Oe,status:"generating",needsInput:!1,owningTabId:W,type:D,title:o,projectId:c??null})},onQuestion:oe=>{S(!1),Z(),m({type:"question",sessionId:Oe,question:oe}),N(""),te({sessionId:Oe,status:"awaiting_input",needsInput:!0,owningTabId:W,type:D,title:o,projectId:c??null})},onSummary:oe=>{S(!1),Z(),m({type:"summary",sessionId:Oe,summary:oe}),y(oe),N(""),te({sessionId:Oe,status:"complete",needsInput:!1,owningTabId:W,type:D,title:o,projectId:c??null})},onError:oe=>{const xe=oe||"Session failed while contacting the AI.";S(!1),f(null),m({type:"error",sessionId:Oe,errorMessage:xe}),N(""),V.current=Oe,te({sessionId:Oe,status:"error",needsInput:!1,owningTabId:W,type:D,title:o,projectId:c??null}),E({sessionId:Oe,status:"error"})},onComplete:()=>{S(!1),V.current=null,E({sessionId:Oe,status:"complete"})},onConnectionStateChange:oe=>{S(oe==="reconnecting")}});U.current=We},[E,te,we,D,c,W,o]),Z=()=>{y(null),g([]),v([]),N("")},ge=a.useCallback(async()=>{f(null),Z(),S(!1),m({type:"loading"});try{const{sessionId:Oe}=await O(r,c);V.current=Oe,F(Oe),se(Oe)}catch(Oe){S(!1),f(je(Oe)||`Failed to start ${ke.toLowerCase()} interview`),m({type:"initial"}),V.current=null,F(null)}},[se,c,O,r,ke]),ue=a.useCallback(async()=>{f(null),M(!0);try{await ce(r,c),s(),m({type:"applied"})}catch(Oe){f(je(Oe)||`Failed to skip ${ke.toLowerCase()} interview`),M(!1)}},[s,c,ce,r,ke]);a.useEffect(()=>{e&&d.type==="initial"&&T.current?.focus()},[e,d.type]),a.useEffect(()=>{if(!e||!u||d.type!=="initial")return;let Oe=!1;return hi(u).then(We=>{if(Oe||!We)return;const oe=xa(We.conversationHistory);if(v(oe),F(We.id),g(oe.map(xe=>xe.response).filter(xe=>!!(xe&&typeof xe=="object"&&!Array.isArray(xe)))),We.status==="awaiting_input"&&We.currentQuestion)try{const xe=JSON.parse(We.currentQuestion);V.current=We.id,m({type:"question",sessionId:We.id,question:xe})}catch{f("Failed to restore session question.")}else if(We.status==="complete"&&We.result)try{const xe=JSON.parse(We.result);V.current=We.id,y(xe),m({type:"summary",sessionId:We.id,summary:xe})}catch{f("Failed to restore session result.")}else We.status==="generating"?(V.current=We.id,We.thinkingOutput&&N(We.thinkingOutput),m({type:"loading"}),se(We.id)):We.status==="error"&&(V.current=We.id,f(null),m({type:"error",sessionId:We.id,errorMessage:We.error??"The session encountered an error."}))}).catch(()=>{Oe||f("Failed to resume session.")}),()=>{Oe=!0}},[se,e,u,d.type]),a.useEffect(()=>{e||(S(!1),F(null))},[e]),a.useEffect(()=>{if(!(!e||!R)){if(L.current!==R){L.current&&P(L.current,W),$(R,W),L.current=R;return}!R&&L.current&&(P(L.current,W),L.current=null)}},[$,P,e,R,W]),a.useEffect(()=>{if(!e||!R||L.current!==R)return;k(W);const Oe=setInterval(()=>{k(W)},3e4);return()=>{clearInterval(Oe)}},[k,e,R,W]),a.useEffect(()=>()=>{U.current?.close(),U.current=null,L.current&&(P(L.current,W),L.current=null)},[P,W]);const me=a.useCallback(()=>{U.current?.close(),U.current=null,n()},[n]),ae=a.useCallback(async()=>{U.current?.close(),U.current=null,Z(),m({type:"initial"}),f(null),V.current=null,F(null),n()},[n]),be=a.useCallback(async Oe=>{if(d.type!=="question")return;const{sessionId:We}=d;f(null),g(oe=>[...oe,Oe]),v(oe=>[...oe,{question:d.question,response:Oe}]),m({type:"loading"}),N("");try{se(We),await ne(We,Oe,c,W)}catch(oe){U.current?.close(),U.current=null,f(je(oe)||"Failed to submit response"),m({type:"question",sessionId:We,question:d.question})}},[se,c,ne,W,d]),Ae=a.useCallback(async()=>{if(d.type==="summary"){f(null),M(!0);try{await ie(d.sessionId,x||void 0,c),s(),m({type:"applied"})}catch(Oe){f(je(Oe)||"Failed to apply interview results"),M(!1)}}},[ie,x,s,c,d]),Fe=()=>d.type==="question"?Math.min(p.length+1,6):6,at=d.type==="loading"||d.type==="question"||d.type==="summary"||d.type==="error",et=R?G.get(R):null,rt=!!(et&&et.tabId!==W&&!et.stale);return e?t.jsx("div",{className:"modal-overlay open",onClick:Oe=>Oe.target===Oe.currentTarget&&ae(),role:"dialog","aria-modal":"true","data-testid":"milestone-slice-interview-modal",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(as,{size:20,className:"icon-triage"}),t.jsxs("h3",{children:["Plan ",ke,": ",o]})]}),t.jsxs("div",{className:"modal-header-actions",children:[at&&t.jsx("button",{className:"modal-send-to-background",onClick:me,title:"Send to background","aria-label":"Send to background",children:t.jsx(Rr,{size:16})}),t.jsx("button",{className:"modal-close",onClick:ae,"aria-label":"Close",children:t.jsx(Jt,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[h&&t.jsx("div",{className:"form-error planning-error",children:h}),_&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),rt&&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.jsx("div",{className:"planning-view-scroll",children:t.jsxs("div",{className:"planning-intro",children:[t.jsx(as,{size:32,className:"icon-triage-lg"}),t.jsxs("h4",{children:["Refine ",ke," scope with AI"]}),t.jsxs("p",{className:"text-muted",children:["The AI will interview you to refine the ",i,"'s scope, acceptance criteria, and verification methods. Each ",i," 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 ge(),children:[t.jsx(as,{size:16,className:"icon-mr-8"}),"Start Interview"]}),t.jsxs("button",{className:"btn planning-use-context-btn",onClick:()=>void ue(),disabled:z,children:[z?t.jsx(lt,{size:16,className:"spin"}):null,"Use Mission Context"]}),t.jsx("button",{className:"btn",onClick:ae,children:"Cancel"})]})]}),d.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(lt,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:j?"AI is thinking...":"Preparing next question..."}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>w(!C),type:"button",children:C?"Hide thinking":"Show thinking"}),C&&j&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:j})})]})]}),d.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($s,{entries:b}),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.jsx("div",{className:"ai-error-actions",children:t.jsx("button",{className:"btn",onClick:ae,children:"Cancel"})})]})]})}),d.type==="question"&&t.jsx(J1,{question:d.question,progress:Fe(),historyEntries:b,onSubmit:be}),d.type==="summary"&&x&&t.jsx(Y1,{summary:x,historyEntries:b,onSummaryChange:y,onApply:Ae,onCancel:ae,isApplying:z}),d.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(kn,{size:48,className:"icon-success"}),t.jsxs("h4",{children:[ke," Updated"]}),t.jsxs("p",{className:"text-muted",children:["The ",i,"'s scope and verification have been ",d.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 J1({question:e,progress:n,historyEntries:s,onSubmit:i}){const[r,o]=a.useState({}),[l,c]=a.useState(""),u=a.useCallback(()=>{e.type==="text"?i({[e.id]:l}):e.type==="confirm"?i({[e.id]:r[e.id]===!0}):i(r)},[e,r,l,i]);a.useEffect(()=>{o({}),c("")},[e.id]);const d=()=>{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($s,{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(m=>t.jsx("div",{className:`planning-progress-step ${m<=n?"active":""}`},m))}),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:m=>c(m.target.value),onKeyDown:m=>{m.key==="Enter"&&!m.shiftKey&&l.trim()&&(m.preventDefault(),u())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(m=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:m.id,checked:r[e.id]===m.id,onChange:()=>o({[e.id]:m.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:m.label}),m.description&&t.jsx("span",{className:"planning-option-desc",children:m.description})]})]},m.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(m=>{const h=r[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:m.id,checked:h.includes(m.id),onChange:f=>{const p=f.target.checked?[...h,m.id]:h.filter(g=>g!==m.id);o({[e.id]:p})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:m.label}),m.description&&t.jsx("span",{className:"planning-option-desc",children:m.description})]})]},m.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(kn,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!1?"selected":""}`,onClick:()=>o({[e.id]:!1}),children:[t.jsx(Jt,{size:18}),"No"]})]})]})]})]})]}),t.jsx("div",{className:"planning-actions",children:t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:u,disabled:!d(),children:["Continue",t.jsx(Mr,{size:16,className:"icon-ml-4"})]})})]})}function Y1({summary:e,historyEntries:n,onSummaryChange:s,onApply:i,onCancel:r,isApplying:o}){const[l,c]=a.useState(e),[u,d]=a.useState(!0),m=(h,f)=>{const p={...l,[h]: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($s,{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:()=>d(!u),"aria-expanded":u,children:[u?t.jsx(en,{size:16}):t.jsx(jn,{size:16}),t.jsx("span",{children:"Refined Scope"})]})}),u&&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:h=>m("description",h.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:h=>m("planningNotes",h.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:h=>m("verification",h.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:i,disabled:o,children:[o?t.jsx(lt,{size:16,className:"spin"}):null,"Apply"]}),t.jsx("button",{className:"btn",onClick:r,disabled:o,children:"Cancel"})]})]})}const qa={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)"}},tm={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)"}},nm={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)"}},Xr={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)"}},Zr={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)"}},eo={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)"}},sm={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)"}},Q1=3;function X1(e){return e==="completed"?"planned":e==="needs_update"?"needs_update":"not_started"}function im({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 am(e){return e?e.replace(/_/g," ").replace(/^\w/,n=>n.toUpperCase()):"Not started"}const _l={title:"",description:"",status:"planning",autopilotEnabled:!1},Al={title:"",description:"",status:"planning",dependencies:[]},Rl={title:"",description:"",status:"pending"},Tl={title:"",description:"",acceptanceCriteria:"",status:"defined"},Z1=3600*1e3;function Ro(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 i=Math.floor(s/(60*1e3));if(i<1)return"just now";if(i<60)return`${i}m ago`;const r=Math.floor(i/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function e0(e){if(!e)return"healthy";const n=typeof e.lastErrorAt=="string"&&Date.now()-new Date(e.lastErrorAt).getTime()<=Z1,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 t0(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 n0(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 Pl(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 Yp=["feature_triaged","feature_completed"],Qp=["slice_activated","slice_completed","milestone_completed"],Xp=["mission_started","mission_paused","mission_resumed","mission_completed"],Zp=["autopilot_enabled","autopilot_disabled","autopilot_state_changed","autopilot_retry","autopilot_stale"];function rm(e,n){switch(n){case"errors":return e==="error"||e==="warning";case"state_changes":return Xp.includes(e);case"tasks":return Yp.includes(e);case"slices":return Qp.includes(e);case"autopilot":return Zp.includes(e);default:return!0}}function s0(e){return e==="error"||e==="warning"?"mission-event__type--error":Xp.includes(e)?"mission-event__type--state":Yp.includes(e)?"mission-event__type--task":Qp.includes(e)?"mission-event__type--slice":Zp.includes(e)?"mission-event__type--autopilot":"mission-event__type--default"}function i0(e){return e.replace(/_/g," ")}function a0(e,n){return n?e==="watching"?`Watching since ${Ro(n)}`:`Last activation ${Ro(n)}`:null}function r0({isOpen:e,isInline:n=!1,onClose:s,addToast:i,projectId:r,onSelectTask:o,availableTasks:l=[],resumeSessionId:c,targetMissionId:u,milestoneSliceResumeSessionId:d,onMilestoneSliceResumeFetchError:m}){const h=n||e,[f,p]=a.useState([]),[g,b]=a.useState(null),[v,x]=a.useState(!0),[y,j]=a.useState(!1),[N,C]=a.useState(!1),[w,_]=a.useState(null),[S,z]=a.useState(_l),[M,T]=a.useState(!1),[U,V]=a.useState(new Set),[L,R]=a.useState(new Set),[F,W]=a.useState(null),[G,te]=a.useState(Al),[E,$]=a.useState(!1),[P,k]=a.useState(null),[O,ne]=a.useState(Rl),[we,ie]=a.useState(!1),[ce,ke]=a.useState(null),[D,se]=a.useState(null),[Z,ge]=a.useState(Tl),[ue,me]=a.useState(!1),[ae,be]=a.useState(null),[Ae,Fe]=a.useState(null),[at,et]=a.useState(""),[Ye,rt]=a.useState(!1),[Oe,We]=a.useState([]),[oe,xe]=a.useState(void 0),ee=oe??c,[Re,Ue]=a.useState(null),[pe,Me]=a.useState(null),[ze,tt]=a.useState(null);a.useEffect(()=>{h&&ee&&rt(!0)},[h,ee]),a.useEffect(()=>{if(!h||ee)return;let H=!1;return dd(r).then(Se=>{if(H)return;const Te=Se.filter(pt=>pt.type==="mission_interview"&&(pt.status==="awaiting_input"||pt.status==="error"));We(Te)}).catch(Se=>{console.warn("[MissionManager] Failed to fetch pending interview sessions:",Se)}),()=>{H=!0}},[h,r,ee]),a.useEffect(()=>{if(!h||!d)return;let H=!1;return hi(d).then(Se=>{if(!(H||!Se))try{const Te=JSON.parse(Se.inputPayload||"{}");Te.targetId&&Te.targetType&&Ue({type:Te.targetType,id:Te.targetId,title:Te.targetTitle||Se.title,resumeSessionId:d})}catch{Ue({type:"milestone",id:"",title:Se.title,resumeSessionId:d})}}).catch(Se=>{H||(console.warn("[MissionManager] Failed to fetch session for milestone/slice resume:",Se),m?.())}),()=>{H=!0}},[h,d,m]);const[ye,de]=a.useState(null),[Ie,fe]=a.useState(new Map),[_e,Ge]=a.useState(null),[Pe,ft]=a.useState({title:"",assertion:"",status:"pending"}),[Y,le]=a.useState(!1),[ve,nt]=a.useState(null),[Q,Je]=a.useState(new Map),[ut,ht]=a.useState(new Set),[Et,yt]=a.useState(new Set),[bt,vt]=a.useState(null),[qt,Tt]=a.useState(new Map),[At,Lt]=a.useState(null),[Vt,Kt]=a.useState(null),[Ot,Wt]=a.useState(!0),[_t,St]=a.useState(new Set),[Yt,Xt]=a.useState(new Map),[Qt,B]=a.useState(null),[he,De]=a.useState(new Map),[A,X]=a.useState(null),[$e,dt]=a.useState(new Map),[jt,zt]=a.useState(new Map),[Rt,un]=a.useState("structure"),[In,gn]=a.useState([]),Bt=a.useRef([]),Mn=a.useRef([]),Ne=a.useRef(null),it=a.useRef(null),xn=a.useRef("structure"),wn=a.useRef("all"),[Ce,Ke]=a.useState(!1),[mt,It]=a.useState(0),[$t,mn]=a.useState("all"),[On,nn]=a.useState(new Set),Nn=a.useRef(null),_n=a.useRef(null);Mn.current=f,Ne.current=g,it.current=At,xn.current=Rt,wn.current=$t;const ls=a.useCallback((H="auto")=>{const Se=_n.current;if(Se&&typeof Se.scrollIntoView=="function"){Se.scrollIntoView({block:"end",behavior:H});return}const Te=Nn.current;Te&&(Te.scrollTop=Te.scrollHeight)},[]),Sn=a.useCallback(()=>{const H=Nn.current;return H?H.scrollHeight-H.scrollTop-H.clientHeight<=100:!0},[]),Hn=a.useCallback(async H=>{if(H.length===0){zt(new Map);return}const Se=await bk(r);zt(Te=>{const pt=new Map(Te);for(const[tn,Ut]of Object.entries(Se))t0(Ut)&&pt.set(tn,Ut);return pt})},[r]),rn=a.useCallback(async()=>{try{x(!0);const H=await mk(r);p(H),Hn(H)}catch(H){i(je(H)||"Failed to load missions","error")}finally{x(!1)}},[i,r,Hn]),wt=a.useCallback(async H=>{try{j(!0);const Se=await Sp(H,r);if(b(Se),Se.milestones.length>0){const Te=Se.milestones[0].id;Lt(Te),Wt(!0),V(new Set([Te])),bl(Te,r).then(pt=>{fe(tn=>{const Ut=new Map(tn);return Ut.set(Te,pt),Ut})}).catch(()=>{}),xl(Te,r).then(pt=>{Tt(tn=>{const Ut=new Map(tn);return Ut.set(Te,pt),Ut})}).catch(()=>{}),Se.milestones[0].slices.length>0&&R(new Set([Se.milestones[0].slices[0].id]))}else Lt(null),Kt(null)}catch(Se){i(je(Se)||"Failed to load mission details","error")}finally{j(!1)}},[i,r]);a.useEffect(()=>{if(!h||!At){Kt(null);return}let H=!1;return Kt(null),uu(At,r).then(Se=>{if(!H){if(!Pl(Se)){Kt(null);return}Kt(Se),Tt(Te=>{const pt=new Map(Te);return pt.set(At,Se.rollup),pt})}}).catch(()=>{H||Kt(null)}),()=>{H=!0}},[h,At,r]),a.useEffect(()=>{Wt(!0)},[At]);const K=a.useCallback(H=>{!H||H!==it.current||uu(H,r).then(Se=>{it.current!==H||!Pl(Se)||(Kt(Se),Tt(Te=>{const pt=new Map(Te);return pt.set(H,Se.rollup),pt}))}).catch(()=>{})},[r]),Le=a.useCallback(async(H,Se)=>{const Te=Se?.append??!1,pt=Te?Bt.current.length:0;Te||(Ke(!0),nn(new Set));try{const tn=await gk(H,{limit:50,offset:pt,eventType:void 0},r),Ut=tn.events.filter(on=>rm(on.eventType,$t));gn(on=>{if(!Te)return Ut;const qe=new Set(on.map(kt=>kt.id)),Ve=[...on];for(const kt of Ut)qe.has(kt.id)||Ve.push(kt);return Ve}),It(tn.total),Te||requestAnimationFrame(()=>{ls("auto")})}catch(tn){i(je(tn)||"Failed to load mission activity","error")}finally{Te||Ke(!1)}},[i,$t,r,ls]);a.useEffect(()=>{Bt.current=In},[In]),a.useEffect(()=>{h&&(rn(),b(null),Lt(null),Kt(null),gn([]),It(0),un("structure"),mn("all"),nn(new Set))},[h,rn]);const st=a.useRef(null);a.useEffect(()=>{h&&u&&st.current!==u&&f.length>0&&(st.current=u,wt(u))},[h,u,f,wt]),a.useEffect(()=>{h||(st.current=null)},[h]),a.useEffect(()=>{!h||!g||Rt!=="activity"||Le(g.id)},[Rt,h,Le,g,$t]),a.useEffect(()=>{if(!h||typeof EventSource>"u")return;const H=new URLSearchParams;r&&H.set("projectId",r);const Se=`/api/events${H.size>0?`?${H.toString()}`:""}`,Te=()=>{Hn(Mn.current)},pt=ts=>{Te();const Rn=ts;if(Rn.data)try{const Gt=JSON.parse(Rn.data);Gt?.id&&p(Pi=>Pi.map(As=>As.id===Gt.id?{...As,...Gt}:As))}catch{}Ne.current&&wt(Ne.current.id)},tn=ts=>{Te(),Ne.current&&wt(Ne.current.id)},Ut=()=>{Te(),Ne.current&&wt(Ne.current.id)},on=ts=>{Te(),Ne.current&&wt(Ne.current.id)},qe=ts=>{const Rn=ts;if(Rn.data)try{const Gt=JSON.parse(Rn.data);Gt&&Gt.featureId&&(Ys(Gt.featureId),Pn(Gt.featureId),Gt.milestoneId&&K(Gt.milestoneId))}catch{}},Ve=ts=>{const Rn=ts;if(Rn.data)try{const Gt=JSON.parse(Rn.data);Gt&&Gt.featureId&&(Ys(Gt.featureId),Pn(Gt.featureId),Gt.milestoneId&&K(Gt.milestoneId),Ne.current&&wt(Ne.current.id))}catch{}},kt=ts=>{const Rn=ts;if(Rn.data)try{const Gt=JSON.parse(Rn.data);Gt&&Gt.milestoneId&&(Un(Gt.milestoneId),K(Gt.milestoneId))}catch{}},vn=ts=>{const Rn=ts;if(Rn.data)try{const Gt=JSON.parse(Rn.data);Gt&&Gt.milestoneId&&(An(Gt.milestoneId),Un(Gt.milestoneId),K(Gt.milestoneId))}catch{}};return Ks(Se,{events:{"mission:updated":pt,"slice:updated":tn,"feature:updated":Ut,"milestone:updated":on,"mission:event":ts=>{Te();const Rn=Ne.current;if(!Rn||xn.current!=="activity")return;const Gt=Sn(),Pi=ts;if(Pi.data)try{const As=JSON.parse(Pi.data);if(!n0(As)||As.missionId!==Rn.id||!rm(As.eventType,wn.current))return;gn(ui=>{const ml=ui.filter(hl=>hl.id!==As.id);return[As,...ml].slice(0,100)}),It(ui=>ui+1),Gt&&requestAnimationFrame(()=>{const ui=Nn.current;ui&&(ui.scrollTop=0)})}catch{}},"validator-run:started":qe,"validator-run:completed":Ve,"milestone:validation:updated":kt,"assertion:created":vn,"assertion:updated":vn,"assertion:deleted":vn,"assertion:linked":vn,"assertion:unlinked":vn,"fix-feature:created":ts=>{const Rn=ts;if(Rn.data)try{const Gt=JSON.parse(Rn.data);if(Gt&&Gt.sourceFeatureId){Ys(Gt.sourceFeatureId);const Pi=Gt?.feature?.sliceId,As=Ne.current;if(Pi&&As){const ui=As.milestones.find(ml=>ml.slices.some(hl=>hl.id===Pi));ui&&K(ui.id)}Ne.current&&wt(Ne.current.id)}}catch{}}}})},[h,Sn,wt,Hn,r,K]);const ot=a.useCallback(()=>{C(!0),_(null),z(_l)},[]),Nt=a.useCallback(H=>{_(H.id),C(!1),z({title:H.title,description:H.description||"",status:H.status,autopilotEnabled:H.autopilotEnabled??!1})},[]),Mt=a.useCallback(()=>{_(null),C(!1),z(_l)},[]),Ft=a.useCallback(async()=>{if(!S.title.trim()){i("Mission title is required","error");return}try{if(T(!0),N)await hk({title:S.title.trim(),description:S.description.trim()||void 0,autopilotEnabled:S.autopilotEnabled},r),i("Mission created","success");else if(w){const H={title:S.title.trim(),description:S.description.trim()||void 0,status:S.status,autopilotEnabled:S.autopilotEnabled};S.autopilotEnabled&&(H.autoAdvance=!0),await pk(w,H,r),i("Mission updated","success"),g?.id===w&&await wt(w)}await rn(),Mt()}catch(H){i(je(H)||"Failed to save mission","error")}finally{T(!1)}},[S,N,w,i,rn,wt,g,Mt,r]),Qn=a.useCallback(async H=>{try{await fk(H,r),i("Mission deleted","success"),g?.id===H&&b(null),await rn(),de(null)}catch(Se){i(je(Se)||"Failed to delete mission","error")}},[i,rn,g,r]),Ds=a.useCallback(()=>{$(!0),W(null),te(Al)},[]),ci=a.useCallback(H=>{W(H.id),$(!1),te({title:H.title,description:H.description||"",status:H.status,dependencies:H.dependencies})},[]),Es=a.useCallback(()=>{W(null),$(!1),te(Al)},[]),Gs=a.useCallback(async()=>{if(!G.title.trim()){i("Milestone title is required","error");return}try{T(!0),E&&g?(await xk(g.id,{title:G.title.trim(),description:G.description.trim()||void 0,dependencies:G.dependencies},r),i("Milestone created","success")):F&&(await vk(F,{title:G.title.trim(),description:G.description.trim()||void 0,status:G.status,dependencies:G.dependencies},r),i("Milestone updated","success")),await wt(g.id),Es()}catch(H){i(je(H)||"Failed to save milestone","error")}finally{T(!1)}},[G,E,F,g,i,wt,Es,S.title,r]),re=a.useCallback(async H=>{try{await yk(H,r),i("Milestone deleted","success"),await wt(g.id),de(null)}catch(Se){i(je(Se)||"Failed to delete milestone","error")}},[i,wt,g,r]),Ee=a.useCallback(H=>{Lt(H),Wt(!0),V(Se=>{const Te=new Set(Se);return!Te.has(H)?(Te.add(H),bl(H,r).then(tn=>{fe(Ut=>{const on=new Map(Ut);return on.set(H,tn),on})}).catch(()=>{}),xl(H,r).then(tn=>{Tt(Ut=>{const on=new Map(Ut);return on.set(H,tn),on})}).catch(()=>{})):Te.delete(H),Te})},[r]),Qe=a.useCallback(H=>{ke(H),ie(!0),k(null),ne(Rl)},[]),gt=a.useCallback(H=>{k(H.id),ie(!1),ne({title:H.title,description:H.description||"",status:H.status})},[]),xt=a.useCallback(()=>{k(null),ie(!1),ke(null),ne(Rl)},[]),sn=a.useCallback(async()=>{if(!O.title.trim()){i("Slice title is required","error");return}try{T(!0),we&&ce?(await jk(ce,{title:O.title.trim(),description:O.description.trim()||void 0},r),i("Slice created","success")):P&&(await kk(P,{title:O.title.trim(),description:O.description.trim()||void 0,status:O.status},r),i("Slice updated","success")),await wt(g.id),xt()}catch(H){i(je(H)||"Failed to save slice","error")}finally{T(!1)}},[O,we,P,ce,g,i,wt,xt,r]),dn=a.useCallback(async H=>{try{await wk(H,r),i("Slice deleted","success"),await wt(g.id),de(null)}catch(Se){i(je(Se)||"Failed to delete slice","error")}},[i,wt,g,r]),Xe=a.useCallback(async H=>{try{await Nk(H,r),i("Slice activated","success"),await wt(g.id)}catch(Se){i(je(Se)||"Failed to activate slice","error")}},[i,wt,g,r]),Dt=a.useCallback(H=>{R(Se=>{const Te=new Set(Se);return Te.has(H)?Te.delete(H):Te.add(H),Te})},[]),hn=a.useCallback(H=>{be(H),me(!0),se(null),ge(Tl)},[]),Xn=a.useCallback(H=>{se(H.id),me(!1),ge({title:H.title,description:H.description||"",acceptanceCriteria:H.acceptanceCriteria||"",status:H.status})},[]),Zn=a.useCallback(()=>{se(null),me(!1),be(null),ge(Tl)},[]),Ln=a.useCallback(async()=>{if(!Z.title.trim()){i("Feature title is required","error");return}try{T(!0),ue&&ae?(await Sk(ae,{title:Z.title.trim(),description:Z.description.trim()||void 0,acceptanceCriteria:Z.acceptanceCriteria.trim()||void 0},r),i("Feature created","success")):D&&(await Ck(D,{title:Z.title.trim(),description:Z.description.trim()||void 0,acceptanceCriteria:Z.acceptanceCriteria.trim()||void 0,status:Z.status},r),i("Feature updated","success")),await wt(g.id),Zn()}catch(H){i(je(H)||"Failed to save feature","error")}finally{T(!1)}},[Z,ue,D,ae,g,i,wt,Zn,r]),es=a.useCallback(async H=>{try{await Ek(H,r),i("Feature deleted","success"),await wt(g.id),de(null)}catch(Se){i(je(Se)||"Failed to delete feature","error")}},[i,wt,g,r]),qn=a.useCallback(async()=>{if(!Ae||!at.trim()){i("Task ID is required","error");return}try{await Mk(Ae,at.trim(),r),i("Feature linked to task","success"),await wt(g.id),Fe(null),et("")}catch(H){i(je(H)||"Failed to link feature to task","error")}},[Ae,at,i,wt,g,r]),ps=a.useCallback(async H=>{try{await _k(H,r),i("Feature unlinked from task","success"),await wt(g.id)}catch(Se){i(je(Se)||"Failed to unlink feature","error")}},[i,wt,g,r]),Tn=a.useCallback(async H=>{try{T(!0),await Ak(H,void 0,void 0,r),i("Feature triaged — task created","success"),await wt(g.id)}catch(Se){i(je(Se)||"Failed to triage feature","error")}finally{T(!1)}},[i,wt,g,r]),Vn=a.useCallback(async H=>{tt(H);try{const Se=await aw(H,r);Me({featureId:H,enrichedDescription:Se.description})}catch{await Tn(H)}finally{tt(null)}},[Tn,r]),fs=a.useCallback(async()=>{pe&&(Me(null),await Tn(pe.featureId))},[Tn,pe]),Ls=a.useCallback(()=>{Me(null)},[]),ns=a.useCallback(async H=>{try{T(!0);const Se=await Rk(H,r);i(`Triaged ${Se.count} feature${Se.count!==1?"s":""}`,"success"),await wt(g.id)}catch(Se){i(je(Se)||"Failed to triage slice features","error")}finally{T(!1)}},[i,wt,g,r]),An=a.useCallback(async H=>{try{const Se=await bl(H,r);fe(Te=>{const pt=new Map(Te);return pt.set(H,Se),pt})}catch{}},[r]),Un=a.useCallback(async H=>{try{const Se=await xl(H,r);Tt(Te=>{const pt=new Map(Te);return pt.set(H,Se),pt})}catch{}},[r]),zs=a.useCallback(async H=>{if(!Pe.title.trim()||!Pe.assertion.trim()){i("Title and assertion text are required","error");return}try{T(!0),await Tk(H,{title:Pe.title.trim(),assertion:Pe.assertion.trim(),status:Pe.status},r),i("Assertion created","success"),await An(H),await Un(H),le(!1),ft({title:"",assertion:"",status:"pending"})}catch(Se){i(je(Se)||"Failed to create assertion","error")}finally{T(!1)}},[Pe,i,An,Un,r]),di=a.useCallback(H=>{Ge(H.id),ft({title:H.title,assertion:H.assertion,status:H.status})},[]),bi=a.useCallback(()=>{Ge(null),le(!1),ft({title:"",assertion:"",status:"pending"})},[]),rl=a.useCallback(async(H,Se)=>{if(!Pe.title.trim()||!Pe.assertion.trim()){i("Title and assertion text are required","error");return}try{T(!0),await Pk(H,{title:Pe.title.trim(),assertion:Pe.assertion.trim(),status:Pe.status},r),i("Assertion updated","success"),await An(Se),await Un(Se),bi()}catch(Te){i(je(Te)||"Failed to update assertion","error")}finally{T(!1)}},[Pe,i,An,Un,bi,r]),Js=a.useCallback(async H=>{try{const Se=await Dk(H,r);Je(Te=>{const pt=new Map(Te);return pt.set(H,Se),pt})}catch{}},[r]),$a=a.useCallback(async H=>{const Se=ve!==H;nt(Te=>Te===H?null:H),Se&&await Js(H)},[ve,Js]),Da=a.useCallback(H=>{nt(H),Js(H),requestAnimationFrame(()=>{const Se=document.querySelector(`[data-mission-assertion-id="${H}"]`);Se instanceof HTMLElement&&typeof Se.scrollIntoView=="function"&&Se.scrollIntoView({behavior:"smooth",block:"center"})})},[Js]),Fr=a.useCallback(async(H,Se)=>{try{ht(Te=>new Set(Te).add(Se)),await Ik(H,Se,r),i("Feature linked to assertion","success"),await Js(Se),vt(null)}catch(Te){i(je(Te)||"Failed to link feature","error")}finally{ht(Te=>{const pt=new Set(Te);return pt.delete(Se),pt})}},[i,Js,r]),ol=a.useCallback(async(H,Se)=>{const Te=`${H}-${Se}`;try{yt(pt=>new Set(pt).add(Te)),await $k(H,Se,r),i("Feature unlinked from assertion","success"),await Js(Se)}catch(pt){i(je(pt)||"Failed to unlink feature","error")}finally{yt(pt=>{const tn=new Set(pt);return tn.delete(Te),tn})}},[i,Js,r]),ll=a.useCallback(async H=>{try{St(Te=>new Set(Te).add(H)),await Lk(H,r),i("Validation triggered","success");const Se=await mu(H,r);Xt(Te=>{const pt=new Map(Te);return pt.set(H,Se),pt})}catch(Se){i(je(Se)||"Failed to trigger validation","error")}finally{St(Se=>{const Te=new Set(Se);return Te.delete(H),Te})}},[i,r]),Ys=a.useCallback(async H=>{try{const Se=await mu(H,r);Xt(Te=>{const pt=new Map(Te);return pt.set(H,Se),pt})}catch{}},[r]),Pn=a.useCallback(async H=>{try{const Se=await zk(H,{limit:10},r);De(Te=>{const pt=new Map(Te);return pt.set(H,Se),pt})}catch{}},[r]),xi=a.useCallback(H=>{const Se=Ne.current;if(Se){for(const Te of Se.milestones)for(const pt of Te.slices)if(pt.features.find(Ut=>Ut.id===H)){V(Ut=>{const on=new Set(Ut);return on.add(Te.id),on}),R(Ut=>{const on=new Set(Ut);return on.add(pt.id),on}),B(H),Lt(Te.id),Ys(H),Pn(H),requestAnimationFrame(()=>{const Ut=document.querySelector(`[data-mission-feature-id="${H}"]`);Ut instanceof HTMLElement&&typeof Ut.scrollIntoView=="function"&&Ut.scrollIntoView({behavior:"smooth",block:"center"})});return}}},[Ys,Pn]),cs=a.useCallback(async H=>{try{const Se=await Fk(H,r);dt(Te=>{const pt=new Map(Te);return pt.set(H,Se),pt})}catch{}},[r]),Or=a.useCallback(async H=>{Qt===H?B(null):(B(H),await Ys(H),await Pn(H))},[Qt,Ys,Pn]),Ur=a.useCallback(async H=>{A===H?X(null):(X(H),await cs(H))},[A,cs]),La=a.useCallback(async H=>{try{await Ok(H,r),i("Mission resumed","success"),await wt(H),rn()}catch(Se){i(je(Se)||"Failed to resume mission","error")}},[i,wt,rn,r]),Ai=a.useCallback(async H=>{try{const Te=(await Uk(H,r)).pausedTaskIds?.length??0;i(`Mission stopped (${Te} task${Te!==1?"s":""} paused)`,"success"),await wt(H),rn()}catch(Se){i(je(Se)||"Failed to stop mission","error")}},[i,wt,rn,r]),Br=a.useCallback(async H=>{try{await Bk(H,r),i("Mission started — first slice activated","success"),await wt(H),rn()}catch(Se){i(je(Se)||"Failed to start mission","error")}},[i,wt,rn,r]),Hr=a.useCallback(async(H,Se)=>{try{await Hk(H,{enabled:Se},r),i(Se?"Autopilot enabled":"Autopilot disabled","success"),await wt(H),rn()}catch(Te){i(je(Te)||"Failed to update autopilot","error")}},[i,wt,rn,r]),J=a.useCallback(H=>{un("structure"),Lt(null),Kt(null),gn([]),It(0),mn("all"),nn(new Set),wt(H.id)},[wt]),He=a.useCallback(()=>{b(null),Lt(null),Kt(null),un("structure"),gn([]),It(0),mn("all"),nn(new Set),rn()},[rn]),ct=In.length<mt,Pt=g?.autopilotState??"inactive",Fs=Pt==="watching"||Pt==="activating",Ms=a0(Pt,g?.lastAutopilotActivityAt),Xi=a.useMemo(()=>!Vt||!At||!Pl(Vt)?null:Vt.rollup.milestoneId===At?Vt:null,[At,Vt]),qr=a.useMemo(()=>{const H=new Map;for(const Se of Xi?.validationTelemetry.validationRounds??[]){const Te=H.get(Se.featureId);(!Te||Se.startedAt>Te.startedAt)&&H.set(Se.featureId,Se)}return H},[Xi]),cl=a.useCallback(()=>{!g||Ce||!ct||Le(g.id,{append:!0})},[Ce,ct,Le,g]),dl=a.useCallback(H=>{nn(Se=>{const Te=new Set(Se);return Te.has(H)?Te.delete(H):Te.add(H),Te})},[]),za=a.useCallback(H=>{H.key==="Enter"&&!H.shiftKey&&(H.preventDefault(),Ft())},[Ft]),Vr=a.useCallback(H=>{H.key==="Enter"&&!H.shiftKey&&(H.preventDefault(),Gs())},[Gs]),Wr=a.useCallback(H=>{H.key==="Enter"&&!H.shiftKey&&(H.preventDefault(),sn())},[sn]),Zi=a.useCallback(H=>{H.key==="Enter"&&!H.shiftKey&&(H.preventDefault(),Ln())},[Ln]),Fa=a.useRef(null);if(a.useEffect(()=>{if(!h)return;const H=Se=>{Se.key==="Escape"&&s()};return document.addEventListener("keydown",H),()=>document.removeEventListener("keydown",H)},[h,s]),!h)return null;const Ri=t.jsxs("div",{ref:Fa,className:`mission-manager${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:He,title:"Back to missions","aria-label":"Back to missions list","data-testid":"mission-back-btn",children:t.jsx(Oo,{size:18})}):null,t.jsx(vs,{size:18,className:"mission-manager__header-icon"}),t.jsx("h2",{className:"mission-manager__title",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(Jt,{size:18})})]}),t.jsx("div",{className:"mission-manager__body",children:v?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(lt,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading missions..."})]}):y?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(lt,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading mission details..."})]}):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:[Fs&&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:(qa[g.status]||qa.planning).bg,color:(qa[g.status]||qa.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:H=>Hr(g.id,H.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(Kn,{size:14,className:"mission-detail__autopilot-icon"}),"Autopilot"]})]}),t.jsxs("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:(Zr[Pt]||Zr.inactive).bg,color:(Zr[Pt]||Zr.inactive).text},"data-testid":"autopilot-state-badge",children:[Fs&&t.jsx("span",{className:"mission-detail__autopilot-pulse"}),Pt]})]}),Ms&&t.jsx("span",{className:"mission-detail__autopilot-activity mission-relative-time",children:Ms})]}),t.jsxs("div",{className:"mission-detail__actions",children:[g.status==="active"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>Ai(g.id),title:"Stop mission","aria-label":"Stop mission",children:t.jsx(ks,{size:14})}),g.status==="blocked"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>La(g.id),title:"Resume mission","aria-label":"Resume mission",children:t.jsx(En,{size:14})}),g.status==="planning"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>Br(g.id),title:"Start mission","aria-label":"Start mission",children:t.jsx(En,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Nt(g),title:"Edit mission","aria-label":"Edit mission",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>de({type:"mission",id:g.id}),title:"Delete mission","aria-label":"Delete mission",children:t.jsx(ln,{size:14})})]})]}),w===g.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:S.title,onChange:H=>z({...S,title:H.target.value}),onKeyDown:za,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:S.description,onChange:H=>z({...S,description:H.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__row",children:[t.jsxs("select",{value:S.status,onChange:H=>z({...S,status:H.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:S.autopilotEnabled,onChange:H=>z({...S,autopilotEnabled:H.target.checked})}),t.jsx(Kn,{size:12})," Autopilot"]})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ft,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Mt,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-detail__tabs",role:"tablist","aria-label":"Mission detail tabs",children:[t.jsx("button",{className:`mission-btn ${Rt==="structure"?"mission-btn--primary":"mission-btn--ghost"} mission-btn--sm mission-detail__tab`,onClick:()=>un("structure"),role:"tab","aria-selected":Rt==="structure","data-testid":"mission-tab-structure",children:"Structure"}),t.jsxs("button",{className:`mission-btn ${Rt==="activity"?"mission-btn--primary":"mission-btn--ghost"} mission-btn--sm mission-detail__tab`,onClick:()=>un("activity"),role:"tab","aria-selected":Rt==="activity","data-testid":"mission-tab-activity",children:["Activity (",mt,")"]})]}),Rt==="structure"?t.jsxs("div",{className:"mission-detail__milestones",children:[g.milestones.map(H=>{const Se=Xi?.rollup.milestoneId===H.id?Xi:null,Te=Se?.rollup??qt.get(H.id),pt=Se?.validationTelemetry.validationRounds??[],tn=Se?.fixFeatures??[],Ut=sm[Te?.state??"not_started"]??sm.not_started,on=Te&&(Te.state==="blocked"||Te.state==="failed")?Se?.validationTelemetry.validationRounds.find(qe=>qe.blockedReason)?.blockedReason:void 0;return t.jsxs("div",{className:"mission-milestone",children:[t.jsxs("div",{className:"mission-milestone__header",onClick:()=>Ee(H.id),children:[t.jsx("button",{className:"mission-milestone__expand",children:U.has(H.id)?t.jsx(en,{size:16}):t.jsx(jn,{size:16})}),t.jsx(Hi,{size:16,className:"mission-milestone__icon"}),t.jsx("span",{className:"mission-milestone__title",children:H.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:tm[H.status].bg,color:tm[H.status].text},children:H.status}),t.jsxs("span",{className:"mission-milestone__count",children:[H.slices.length," slices"]}),t.jsx(im,{state:X1(H.interviewState)}),Te&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Ut.bg,color:Ut.text},title:"Validation state",children:am(Te.state)}),Te.totalAssertions>0&&t.jsx("div",{className:"mission-milestone__coverage-bar",title:`${Te.passedAssertions??0} of ${Te.totalAssertions} assertions passing`,children:t.jsx("div",{className:"mission-milestone__coverage-bar-fill",style:{width:`${(Te.passedAssertions??0)/Te.totalAssertions*100}%`,backgroundColor:(Te.passedAssertions??0)===Te.totalAssertions?"var(--color-success)":"var(--color-warning)"}})})]}),H.status!=="complete"&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>Ue({type:"milestone",id:H.id,title:H.title}),title:"Plan milestone","aria-label":"Plan milestone",children:t.jsx(Bi,{size:14})}),t.jsxs("div",{className:"mission-milestone__actions",onClick:qe=>qe.stopPropagation(),children:[t.jsx("button",{className:"mission-icon-btn",onClick:()=>Qe(H.id),title:"Add slice",children:t.jsx(cn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>ci(H),title:"Edit milestone",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>de({type:"milestone",id:H.id}),title:"Delete milestone",children:t.jsx(ln,{size:14})})]})]}),U.has(H.id)&&t.jsxs("div",{className:"mission-milestone__body",children:[(E||F===H.id)&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Milestone title",value:G.title,onChange:qe=>te({...G,title:qe.target.value}),onKeyDown:Vr,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:G.description,onChange:qe=>te({...G,description:qe.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Gs,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),F?"Update":"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Es,children:"Cancel"})]})]}),Se&&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:[Se.validationTelemetry.totalRuns," rounds",Se.validationTelemetry.lastValidatorStatus?` · Last ${Se.validationTelemetry.lastValidatorStatus}`:""]})]}),on&&t.jsxs("div",{className:"mission-blocked-reason",children:[t.jsx("strong",{children:"Blocked reason:"})," ",on]}),pt.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:()=>Wt(qe=>!qe),title:Ot?"Hide validation rounds":"Show validation rounds",children:[Ot?t.jsx(en,{size:12}):t.jsx(jn,{size:12}),"Validation rounds (",pt.length,")"]}),Ot&&t.jsx("div",{className:"mission-validation-rounds__list",children:pt.map(qe=>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--${qe.validatorStatus}`,children:qe.validatorStatus}),t.jsx("span",{className:"mission-validation-round__feature",children:qe.featureTitle}),t.jsxs("span",{className:"mission-validation-round__attempts",children:["impl #",qe.implementationAttempt," · reviewer #",qe.validatorAttempt]})]}),t.jsxs("div",{className:"mission-validation-round__links",children:[t.jsx("span",{className:"mission-validation-round__label",children:"Failed assertions:"}),qe.failedAssertionIds.length>0?t.jsx("div",{className:"mission-validation-round__chip-list",children:qe.failedAssertionIds.map(Ve=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>Da(Ve),title:`Jump to assertion ${Ve}`,children:Ve},`${qe.roundId}-${Ve}`))}):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:"}),qe.generatedFixFeatureIds.length>0?t.jsx("div",{className:"mission-validation-round__chip-list",children:qe.generatedFixFeatureIds.map(Ve=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>xi(Ve),title:`Jump to fix feature ${Ve}`,children:Ve},`${qe.roundId}-${Ve}`))}):t.jsx("span",{className:"mission-validation-round__empty",children:"None"})]}),qe.blockedReason&&t.jsx("div",{className:"mission-validation-round__blocked-reason",children:qe.blockedReason})]},qe.roundId))})]}),tn.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:tn.map(qe=>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:()=>xi(qe.id),title:`Jump to feature ${qe.id}`,children:qe.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Xr[qe.status].bg,color:Xr[qe.status].text},children:qe.status}),qe.loopState&&t.jsx("span",{className:`mission-loop-state mission-loop-state--${qe.loopState}`,children:qe.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:()=>xi(qe.sourceFeatureId),title:`Jump to source feature ${qe.sourceFeatureId}`,children:qe.sourceFeatureId}),t.jsx("span",{children:"Run:"}),t.jsx("span",{className:"mission-fix-feature__run",children:qe.runId})]}),qe.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:qe.failedAssertionIds.map(Ve=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>Da(Ve),title:`Jump to assertion ${Ve}`,children:Ve},`${qe.id}-${Ve}`))})]})]},qe.id))})]})]}),t.jsxs("div",{className:"mission-slices",children:[H.slices.map(qe=>t.jsxs("div",{className:"mission-slice",children:[t.jsxs("div",{className:"mission-slice__header",onClick:()=>Dt(qe.id),children:[t.jsx("button",{className:"mission-slice__expand",children:L.has(qe.id)?t.jsx(en,{size:16}):t.jsx(jn,{size:16})}),t.jsx(_c,{size:16,className:"mission-slice__icon"}),t.jsx("span",{className:"mission-slice__title",children:qe.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:nm[qe.status].bg,color:nm[qe.status].text},children:qe.status}),t.jsxs("span",{className:"mission-slice__count",children:[qe.features?.length||0," features"]}),t.jsx(im,{state:qe.planState??"not_started"}),qe.status!=="complete"&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>Ue({type:"slice",id:qe.id,title:qe.title}),title:"Plan slice","aria-label":"Plan slice",children:t.jsx(Bi,{size:14})}),t.jsxs("div",{className:"mission-slice__actions",onClick:Ve=>Ve.stopPropagation(),children:[qe.status==="pending"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>Xe(qe.id),title:"Activate slice",children:t.jsx(En,{size:14})}),qe.status==="active"&&qe.features?.some(Ve=>Ve.status==="defined")&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>ns(qe.id),title:"Triage all features",disabled:M,children:M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Kn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>hn(qe.id),title:"Add feature",children:t.jsx(cn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>gt(qe),title:"Edit slice",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>de({type:"slice",id:qe.id}),title:"Delete slice",children:t.jsx(ln,{size:14})})]})]}),L.has(qe.id)&&t.jsxs("div",{className:"mission-slice__body",children:[we&&ce===H.id&&!P&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Slice title",value:O.title,onChange:Ve=>ne({...O,title:Ve.target.value}),onKeyDown:Wr,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:O.description,onChange:Ve=>ne({...O,description:Ve.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:sn,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:xt,children:"Cancel"})]})]}),P===qe.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Slice title",value:O.title,onChange:Ve=>ne({...O,title:Ve.target.value}),onKeyDown:Wr,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:O.description,onChange:Ve=>ne({...O,description:Ve.target.value}),rows:2}),t.jsxs("select",{value:O.status,onChange:Ve=>ne({...O,status:Ve.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:sn,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:xt,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-features",children:[qe.features?.map(Ve=>t.jsxs("div",{className:"mission-feature","data-mission-feature-id":Ve.id,children:[t.jsxs("div",{className:"mission-feature__header",children:[t.jsx("button",{className:"mission-feature__expand",onClick:()=>Or(Ve.id),title:Qt===Ve.id?"Collapse details":"Expand to show run history",children:Qt===Ve.id?t.jsx(en,{size:14}):t.jsx(jn,{size:14})}),t.jsx(kc,{size:14,className:"mission-feature__icon"}),t.jsx("span",{className:"mission-feature__title",children:Ve.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Xr[Ve.status].bg,color:Xr[Ve.status].text},children:Ve.status}),Ve.loopState&&Ve.loopState!=="idle"&&t.jsxs("span",{className:`mission-loop-state mission-loop-state--${Ve.loopState}`,title:`Loop state: ${Ve.loopState}`,children:[Ve.loopState==="implementing"&&"⏳",Ve.loopState==="validating"&&"🔄",Ve.loopState==="needs_fix"&&"🔧",Ve.loopState==="passed"&&"✅",Ve.loopState==="blocked"&&"🚫"]}),Ve.generatedFromFeatureId&&t.jsx("button",{className:"mission-feature__lineage",onClick:()=>xi(Ve.generatedFromFeatureId),title:`Generated from feature: ${Ve.generatedFromFeatureId}`,children:"🔗 Fix"}),(Ve.loopState==="validating"||Ve.loopState==="needs_fix")&&(()=>{const kt=Yt.get(Ve.id),vn=qr.get(Ve.id),_s=kt?.implementationAttemptCount??vn?.implementationAttempt??Ve.implementationAttemptCount??0,Ti=kt?.retryBudgetRemaining??Math.max(0,Q1-_s);return t.jsxs("span",{className:"mission-feature__retry-budget",title:"Implementation attempts and remaining retry budget",children:["Attempt ",_s," · ",Ti," ",Ti===1?"retry":"retries"," left"]})})(),Ve.loopState==="implementing"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--validate",onClick:()=>ll(Ve.id),title:"Validate feature",disabled:_t.has(Ve.id),children:_t.has(Ve.id)?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(as,{size:14})}),Ve.taskId&&t.jsx("span",{className:"mission-feature__task-link",onClick:()=>o?.(Ve.taskId),title:"Click to view task",children:Ve.taskId}),t.jsxs("div",{className:"mission-feature__actions",children:[Ve.status==="defined"&&!Ve.taskId&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>Vn(Ve.id),title:"Triage — create task",disabled:M||ze===Ve.id,children:ze===Ve.id?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Kn,{size:14})}),Ve.taskId?t.jsx("button",{className:"mission-icon-btn",onClick:()=>ps(Ve.id),title:"Unlink task",children:t.jsx(Hd,{size:14})}):Ve.status!=="defined"?t.jsx("button",{className:"mission-icon-btn",onClick:()=>Fe(Ve.id),title:"Link to task",children:t.jsx(pa,{size:14})}):null,t.jsx("button",{className:"mission-icon-btn",onClick:()=>Xn(Ve),title:"Edit feature",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>de({type:"feature",id:Ve.id}),title:"Delete feature",children:t.jsx(ln,{size:14})})]})]}),Ve.description&&t.jsx("p",{className:"mission-feature__description",children:Ve.description}),Ve.acceptanceCriteria&&t.jsxs("p",{className:"mission-feature__criteria",children:[t.jsx("strong",{children:"Acceptance:"})," ",Ve.acceptanceCriteria]}),pe?.featureId===Ve.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:pe.enrichedDescription}),t.jsxs("div",{className:"mission-triage-preview__actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:fs,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):null,"Create Task"]}),t.jsx("button",{className:"btn",onClick:Ls,disabled:M,children:"Cancel"})]})]}),D===Ve.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Feature title",value:Z.title,onChange:kt=>ge({...Z,title:kt.target.value}),onKeyDown:Zi,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:Z.description,onChange:kt=>ge({...Z,description:kt.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:Z.acceptanceCriteria,onChange:kt=>ge({...Z,acceptanceCriteria:kt.target.value}),rows:2}),t.jsxs("select",{value:Z.status,onChange:kt=>ge({...Z,status:kt.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:Ln,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Zn,children:"Cancel"})]})]}),Qt===Ve.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"})}),(he.get(Ve.id)??[]).map(kt=>t.jsxs("div",{className:"mission-run",children:[t.jsxs("div",{className:"mission-run__header",onClick:()=>Ur(kt.id),children:[t.jsx("span",{className:`mission-status-badge mission-status-badge--sm mission-run__status mission-run__status--${kt.status}`,title:kt.status,children:kt.status}),t.jsx("span",{className:"mission-run__time",children:new Date(kt.startedAt).toLocaleString()}),kt.completedAt&&t.jsxs("span",{className:"mission-run__duration",children:[Math.round((new Date(kt.completedAt).getTime()-new Date(kt.startedAt).getTime())/1e3),"s"]}),kt.triggerType&&t.jsx("span",{className:"mission-run__trigger",children:kt.triggerType}),t.jsx("button",{className:"mission-icon-btn",title:A===kt.id?"Hide details":"Show details",children:A===kt.id?t.jsx(en,{size:12}):t.jsx(jn,{size:12})})]}),A===kt.id&&$e.get(kt.id)&&t.jsxs("div",{className:"mission-run__details",children:[kt.summary&&t.jsx("p",{className:"mission-run__summary",children:kt.summary}),kt.blockedReason&&t.jsxs("p",{className:"mission-run__blocked-reason",children:[t.jsx("strong",{children:"Blocked:"})," ",kt.blockedReason]}),$e.get(kt.id)?.failures&&$e.get(kt.id).failures.length>0&&t.jsxs("div",{className:"mission-run__failures",children:[t.jsx("span",{className:"mission-run__failures-title",children:"Failed Assertions:"}),$e.get(kt.id).failures.map(vn=>t.jsxs("div",{className:"mission-run__failure",children:[t.jsx("span",{className:"mission-run__failure-message",children:vn.message}),vn.expected&&t.jsxs("span",{className:"mission-run__failure-expected",children:["Expected: ",vn.expected]}),vn.actual&&t.jsxs("span",{className:"mission-run__failure-actual",children:["Actual: ",vn.actual]})]},vn.id))]}),(!$e.get(kt.id)?.failures||$e.get(kt.id).failures.length===0)&&t.jsx("p",{className:"mission-run__no-failures",children:"No assertion failures"})]})]},kt.id)),(!he.get(Ve.id)||he.get(Ve.id).length===0)&&t.jsx("div",{className:"mission-run-history__empty",children:"No validation runs yet."})]})]},Ve.id)),ue&&ae===qe.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Feature title",value:Z.title,onChange:Ve=>ge({...Z,title:Ve.target.value}),onKeyDown:Zi,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:Z.description,onChange:Ve=>ge({...Z,description:Ve.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:Z.acceptanceCriteria,onChange:Ve=>ge({...Z,acceptanceCriteria:Ve.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ln,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Zn,children:"Cancel"})]})]}),!ue&&(!qe.features||qe.features.length===0)&&t.jsxs("div",{className:"mission-manager__empty mission-features__empty",children:[t.jsx(kc,{size:16}),t.jsx("span",{children:"No fix features generated."})]})]})]})]},qe.id)),H.slices.length===0&&!we&&t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(_c,{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"}),Te&&t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Ut.bg,color:Ut.text},children:am(Te.state)}),Te&&Te.totalAssertions>0&&t.jsx("div",{className:"mission-assertions__coverage-bar",title:`${Te.passedAssertions??0} of ${Te.totalAssertions} assertions passing`,children:t.jsx("div",{className:"mission-assertions__coverage-bar-fill",style:{width:`${(Te.passedAssertions??0)/Te.totalAssertions*100}%`,backgroundColor:(Te.passedAssertions??0)===Te.totalAssertions?"var(--color-success)":"var(--color-warning)"}})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>{le(!0),Ge(null),ft({title:"",assertion:"",status:"pending"})},title:"Add assertion",children:t.jsx(cn,{size:14})})]}),Y&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Assertion title",value:Pe.title,onChange:qe=>ft({...Pe,title:qe.target.value}),autoFocus:!0}),t.jsx("textarea",{placeholder:"Assertion text (what should be true when complete)",value:Pe.assertion,onChange:qe=>ft({...Pe,assertion:qe.target.value}),rows:2}),t.jsxs("select",{value:Pe.status,onChange:qe=>ft({...Pe,status:qe.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:()=>zs(H.id),disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:bi,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-assertions__list",children:[(Array.isArray(Ie.get(H.id))?Ie.get(H.id):[]).map(qe=>t.jsxs("div",{className:"mission-assertion","data-mission-assertion-id":qe.id,children:[t.jsx("div",{className:"mission-assertion__header",children:_e===qe.id?t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Assertion title",value:Pe.title,onChange:Ve=>ft({...Pe,title:Ve.target.value}),autoFocus:!0}),t.jsx("textarea",{placeholder:"Assertion text",value:Pe.assertion,onChange:Ve=>ft({...Pe,assertion:Ve.target.value}),rows:2}),t.jsxs("select",{value:Pe.status,onChange:Ve=>ft({...Pe,status:Ve.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:()=>rl(qe.id,H.id),disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Save"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:bi,children:"Cancel"})]})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:(eo[qe.status]??eo.pending).bg,color:(eo[qe.status]??eo.pending).text},children:qe.status}),t.jsx("span",{className:"mission-assertion__title",children:qe.title}),(()=>{const kt=Q.get(qe.id)?.length??0;return kt>0?t.jsxs("span",{className:"mission-assertion__linked-count",title:`${kt} linked feature${kt!==1?"s":""}`,children:["(",kt," linked)"]}):null})(),t.jsx("button",{className:"mission-icon-btn",onClick:()=>$a(qe.id),title:"Toggle details",children:ve===qe.id?t.jsx(en,{size:14}):t.jsx(jn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>di(qe),title:"Edit assertion",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>de({type:"assertion",id:qe.id}),title:"Delete assertion",children:t.jsx(ln,{size:14})})]})}),ve===qe.id&&t.jsxs("div",{className:"mission-assertion__body",children:[t.jsx("p",{className:"mission-assertion__text",children:qe.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()=>{ve!==qe.id&&await $a(qe.id),vt(bt===qe.id?null:qe.id)},title:"Link a feature",children:[t.jsx(pa,{size:12}),"Link Feature"]})]}),bt===qe.id&&t.jsx("div",{className:"mission-assertion__feature-picker",children:t.jsx("div",{className:"mission-assertion__feature-picker-dropdown",children:(()=>{const Ve=new Set((Q.get(qe.id)??[]).map(vn=>vn.id)),kt=[];return g?.milestones.forEach(vn=>vn.slices.forEach(_s=>kt.push(..._s.features.filter(Ti=>!Ve.has(Ti.id))))),kt.length===0?t.jsx("span",{className:"mission-assertion__feature-picker-empty",children:"All features already linked"}):kt.map(vn=>t.jsxs("button",{className:"mission-assertion__feature-picker-item",onClick:()=>Fr(vn.id,qe.id),disabled:ut.has(qe.id),children:[t.jsx("span",{className:"mission-assertion__feature-picker-title",children:vn.title}),ut.has(qe.id)&&t.jsx(lt,{size:12,className:"spinner"})]},vn.id))})()})}),(()=>{const Ve=Q.get(qe.id)??[];return Ve.length===0?t.jsx("span",{className:"mission-assertion__linked-empty",children:"No features linked yet"}):Ve.map(kt=>{const vn=`${kt.id}-${qe.id}`,_s=Et.has(vn);return t.jsxs("div",{className:"mission-assertion__linked-feature",children:[t.jsx("span",{className:"mission-assertion__linked-feature-title",children:kt.title}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>ol(kt.id,qe.id),disabled:_s,title:"Unlink feature",children:_s?t.jsx(lt,{size:12,className:"spinner"}):t.jsx(Hd,{size:12})})]},kt.id)})})()]})]})]},qe.id)),(!Ie.get(H.id)||Ie.get(H.id)?.length===0)&&!Y&&t.jsx("div",{className:"mission-manager__empty mission-assertions__empty",children:t.jsx("span",{children:"No assertions defined. Add one to define completion criteria."})})]})]})]})]})]},H.id)}),g&&!E&&F===null&&t.jsxs("button",{className:"mission-add-btn",onClick:Ds,children:[t.jsx(cn,{size:16}),"Add Milestone"]}),E&&F===null&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Milestone title",value:G.title,onChange:H=>te({...G,title:H.target.value}),onKeyDown:Vr,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:G.description,onChange:H=>te({...G,description:H.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Gs,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Es,children:"Cancel"})]})]}),g.milestones.length===0&&!E&&t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(Hi,{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:$t,onChange:H=>mn(H.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:[In.length," of ",mt]})]}),!Ce&&ct&&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:cl,"data-testid":"mission-activity-load-more",children:"Load more"})}),Ce?t.jsxs("div",{className:"mission-manager__loading mission-detail__activity-loading",children:[t.jsx(lt,{size:18,className:"spinner"}),t.jsx("span",{children:"Loading mission activity..."})]}):In.length===0?t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(Is,{size:18}),t.jsx("span",{children:"No events yet."})]}):t.jsxs("div",{ref:Nn,className:"mission-events","data-testid":"mission-activity-events",children:[In.map(H=>{const Se=!!(H.metadata&&Object.keys(H.metadata).length>0),Te=On.has(H.id);return t.jsxs("div",{className:"mission-event",children:[t.jsxs("div",{className:"mission-event__header",children:[t.jsx("span",{className:`mission-event__type ${s0(H.eventType)}`,children:i0(H.eventType)}),t.jsx("span",{className:"mission-event__time",children:Ro(H.timestamp)})]}),t.jsx("p",{className:"mission-event__description",children:H.description}),t.jsx("span",{className:"mission-event__timestamp",children:new Date(H.timestamp).toLocaleString()}),Se&&t.jsxs("div",{className:"mission-event__metadata",children:[t.jsxs("button",{className:"mission-btn mission-btn--ghost mission-btn--sm",onClick:()=>dl(H.id),"data-testid":`mission-event-metadata-${H.id}`,children:[Te?"Hide":"Show"," metadata"]}),Te&&t.jsx("pre",{className:"mission-event__metadata-content",children:JSON.stringify(H.metadata,null,2)})]})]},H.id)}),t.jsx("div",{ref:_n})]})]})]}):t.jsxs("div",{className:"mission-list",children:[N&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:S.title,onChange:H=>z({...S,title:H.target.value}),onKeyDown:za,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:S.description,onChange:H=>z({...S,description:H.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ft,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Mt,children:"Cancel"})]})]}),f.map(H=>{const Se=H,Te=g,pt=Te&&Te.id===Se.id,tn=qa[Se.status]||{bg:"",text:""},Ut=Se.summary,on=jt.get(Se.id),qe=e0(on),Ve=!!(Ut&&(Ut.totalMilestones>0||Ut.totalFeatures>0)),kt=on?.totalTasks??0,vn=on?.tasksCompleted??0,_s=on?.tasksFailed??0,Ti=on?.estimatedCompletionPercent??Ut?.progressPercent??0,ts=Ve||kt>0||_s>0||!!on?.lastActivityAt,Rn=Se.status==="active"&&(on?.currentMilestoneId||on?.currentSliceId)?"Current milestone/slice in progress":null;return t.jsxs("div",{className:`mission-list__item ${pt?"mission-list__item--selected":""}`,onClick:()=>J(H),children:[t.jsxs("div",{className:"mission-list__item-content",children:[t.jsxs("div",{className:"mission-list__item-header",children:[t.jsx(vs,{size:16,className:"mission-list__item-icon"}),t.jsx("span",{className:"mission-list__item-title",children:Se.title}),H.autopilotEnabled&&t.jsx("span",{title:"Autopilot enabled",children:t.jsx(Kn,{size:12,className:"mission-list__item-autopilot-icon"})}),t.jsx("span",{className:`mission-health-badge mission-health-badge--${qe}`,"data-testid":`mission-health-badge-${Se.id}`,"aria-label":`Mission health: ${qe}`}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:tn.bg,color:tn.text},children:Se.status})]}),Se.description&&t.jsx("p",{className:"mission-list__item-description",children:Se.description}),Rn&&t.jsxs("p",{className:"mission-list__item-active-slice",children:["Active: ",Rn]}),ts&&t.jsxs("div",{className:"mission-list__item-summary",children:[Ve&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:"mission-list__item-stat",children:[Ut.completedMilestones,"/",Ut.totalMilestones," milestones"]}),t.jsxs("span",{className:"mission-list__item-stat",children:[Ut.completedFeatures,"/",Ut.totalFeatures," features"]})]}),t.jsxs("span",{className:"mission-list__item-stat","data-testid":`mission-task-stats-${Se.id}`,children:[vn,"/",kt," tasks"]}),_s>0&&t.jsxs("button",{className:"mission-list__item-failed",onClick:Gt=>{Gt.stopPropagation(),J(H)},"data-testid":`mission-failed-${Se.id}`,title:"View mission failures",children:[_s," failed"]}),t.jsxs("span",{className:"mission-relative-time","data-testid":`mission-last-activity-${Se.id}`,children:["Activity ",Ro(on?.lastActivityAt)]}),t.jsx("div",{className:`mission-list__item-progress mission-list__item-progress--${qe}`,children:t.jsx("div",{className:"mission-list__item-progress-bar",style:{width:`${Ti}%`}})})]})]}),t.jsxs("div",{className:"mission-list__item-actions",onClick:Gt=>Gt.stopPropagation(),children:[Se.status==="active"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>Ai(Se.id),title:"Stop mission",children:t.jsx(ks,{size:14})}),Se.status==="blocked"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>La(Se.id),title:"Resume mission",children:t.jsx(En,{size:14})}),Se.status==="planning"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>Br(Se.id),title:"Start mission",children:t.jsx(En,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Nt(H),title:"Edit mission",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>de({type:"mission",id:Se.id}),title:"Delete mission",children:t.jsx(ln,{size:14})})]})]},Se.id)}),w&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:S.title,onChange:H=>z({...S,title:H.target.value}),onKeyDown:za,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:S.description,onChange:H=>z({...S,description:H.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__row",children:[t.jsxs("select",{value:S.status,onChange:H=>z({...S,status:H.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:S.autopilotEnabled,onChange:H=>z({...S,autopilotEnabled:H.target.checked})}),t.jsx(Kn,{size:12})," Autopilot"]})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ft,disabled:M,children:[M?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(Bn,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Mt,children:"Cancel"})]})]}),f.length===0&&!N&&t.jsxs("div",{className:"mission-manager__empty mission-manager__empty--large",children:[t.jsx(vs,{size:32}),t.jsx("span",{children:"No missions yet. Create one to start planning."})]}),!N&&t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"8px"},children:[Oe.length>0&&t.jsxs("div",{className:"mission-resume-prompt",children:[t.jsx(ms,{size:16}),t.jsx("span",{children:Oe.length===1?`Resume "${Oe[0].title}"?`:`${Oe.length} interview sessions pending`}),t.jsx("div",{style:{display:"flex",gap:"4px",marginLeft:"auto"},children:Oe.map(H=>t.jsxs("button",{className:"mission-add-btn",onClick:()=>{xe(H.id),rt(!0),We([])},children:[H.status==="error"?t.jsx($n,{size:14}):t.jsx(as,{size:14}),H.status==="error"?"Retry":"Resume"]},H.id))})]}),t.jsxs("div",{style:{display:"flex",gap:"8px"},children:[t.jsxs("button",{className:"mission-add-btn",onClick:()=>rt(!0),children:[t.jsx(as,{size:16}),"Plan with AI"]}),t.jsxs("button",{className:"mission-add-btn",onClick:ot,children:[t.jsx(cn,{size:16}),"New Mission"]})]})]})]})}),ye&&t.jsx("div",{className:"mission-confirm-panel mission-confirm-panel--danger",children:t.jsxs("div",{className:"mission-confirm-panel__content",children:[t.jsxs("p",{children:["Delete this ",ye.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()=>{ye.type==="mission"?await Qn(ye.id):ye.type==="milestone"?await re(ye.id):ye.type==="slice"?await dn(ye.id):ye.type==="feature"&&await es(ye.id)},children:"Delete"}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:()=>de(null),children:"Cancel"})]})]})}),Ae&&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:at,onChange:H=>et(H.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(H=>t.jsxs("button",{className:"mission-task-suggestions__item",onClick:()=>et(H.id),children:[H.id,": ",H.title||"Untitled"]},H.id))})]}),t.jsxs("div",{className:"mission-confirm-panel__actions",children:[t.jsx("button",{className:"mission-btn mission-btn--primary",onClick:qn,children:"Link"}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:()=>{Fe(null),et("")},children:"Cancel"})]})]})})]}),ea=t.jsx(V1,{isOpen:Ye,onClose:()=>rt(!1),onMissionCreated:()=>{rn(),i("Mission created from AI interview","success")},projectId:r,resumeSessionId:ee}),ul=Re?t.jsx(G1,{isOpen:!0,onClose:()=>Ue(null),onApplied:()=>{Ue(null),g&&wt(g.id)},targetType:Re.type,targetId:Re.id,targetTitle:Re.title,missionContext:g?.title,projectId:r,resumeSessionId:Re.resumeSessionId}):null;return n?t.jsxs(t.Fragment,{children:[Ri,ea,ul]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"mission-manager-overlay open",onClick:H=>H.target===H.currentTarget&&s(),"data-testid":"mission-manager-overlay",role:"dialog","aria-modal":"true",children:Ri}),ea,ul]})}const to=2e3;function om({recipient:e,replyContext:n,agents:s=[],projectId:i,onSend:r,onCancel:o,addToast:l,isLoadingAgents:c=!1}){const[u,d]=a.useState(e?.id??""),[m,h]=a.useState(e?.type??"agent"),[f,p]=a.useState(""),[g,b]=a.useState(!1),[v,x]=a.useState(null),y=u.trim()!==""&&f.trim().length>0&&f.length<=to,j=a.useCallback(async()=>{if(!(!y||g)){b(!0),x(null);try{const C=m==="agent"?"user-to-agent":"system";await mw({toId:u.trim(),toType:m,content:f.trim(),type:C,...n?{metadata:{replyTo:{messageId:n.messageId}}}:{}},i),r()}catch(C){const w=je(C)||"Failed to send message";x(w),l?.(w,"error")}finally{b(!1)}}},[y,g,u,m,f,n,i,r,l]),N=a.useCallback(C=>{d(C),h("agent")},[]);return 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(Jt,{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:u,onChange:C=>N(C.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(C=>t.jsx("option",{value:C.id,children:C.name||C.id},C.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(Cn,{size:14}),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",className:"message-composer-textarea",placeholder:"Type your message…",value:f,onChange:C=>p(C.target.value),maxLength:to,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>to?"over-limit":"",children:[f.length,"/",to]})})]}),v&&t.jsxs("div",{className:"message-composer-error","data-testid":"message-composer-error",children:[t.jsx(ms,{size:14}),t.jsx("span",{children:v})]})]}),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:j,disabled:!y||g,"data-testid":"message-composer-send",children:g?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:14,className:"spin"}),t.jsx("span",{children:"Sending…"})]}):t.jsxs(t.Fragment,{children:[t.jsx(zi,{size:14}),t.jsx("span",{children:"Send"})]})})]})]})}function aa(e){const n=new Date(e),i=new Date().getTime()-n.getTime(),r=Math.floor(i/6e4),o=Math.floor(i/36e5),l=Math.floor(i/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 o0(e,n,s){if(n==="user")return e==="dashboard"?"You":`User: ${e}`;if(n==="agent"){const i=s?.get(e)?.trim();return i?i===e?`Agent: ${e}`:`Agent: ${i} (${e})`:`Agent: ${e}`}return"System"}function l0(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 lm(e,n=80){return e.length<=n?e:`${e.slice(0,n)}…`}function c0(e){const n=new Map;for(const s of e){const i=`${s.fromType}:${s.fromId}`,r=n.get(i);r?(r.messages.push(s),new Date(s.createdAt)>new Date(r.latestMessage.createdAt)&&(r.latestMessage=s),s.read||r.unreadCount++):n.set(i,{key:i,fromId:s.fromId,fromType:s.fromType,latestMessage:s,messages:[s],unreadCount:s.read?0:1})}return Array.from(n.values()).sort((s,i)=>new Date(i.latestMessage.createdAt).getTime()-new Date(s.latestMessage.createdAt).getTime())}function d0({projectId:e,addToast:n,onUnreadCountChange:s}){const[i,r]=a.useState("inbox"),[o,l]=a.useState(null),[c,u]=a.useState(null),[d,m]=a.useState(0),[h,f]=a.useState(!1),[p,g]=a.useState(null),[b,v]=a.useState([]),[x,y]=a.useState(!1),[j,N]=a.useState(null),[C,w]=a.useState(null),[_,S]=a.useState(null),[z,M]=a.useState("inbox"),[T,U]=a.useState(null),[V,L]=a.useState([]),R=a.useMemo(()=>new Map(V.map(ae=>[ae.id,ae.name??""])),[V]),F=a.useCallback((ae,be)=>o0(ae,be,R),[R]),G=Aa()==="mobile",te=!G,E=a.useCallback(async()=>{f(!0);try{const ae=await dw({limit:50},e);l(ae),m(ae.unreadCount),s?.(ae.unreadCount)}catch{}finally{f(!1)}},[e,s]),$=a.useCallback(async()=>{f(!0);try{const ae=await uw({limit:50},e);u(ae)}catch{}finally{f(!1)}},[e]),P=a.useCallback(async ae=>{f(!0);try{const be=await bw(ae,e);U(be)}catch{}finally{f(!1)}},[e]),k=a.useCallback(async()=>{try{const ae=await _a(void 0,e);L(ae)}catch{}},[e]),O=a.useCallback(async()=>{try{const ae=await Mp(e);m(ae.unreadCount),s?.(ae.unreadCount)}catch{}},[e,s]);a.useEffect(()=>{i==="inbox"?E():i==="outbox"?$():i==="agents"&&k()},[i,E,$,k]),a.useEffect(()=>{_&&P(_)},[_,P]),a.useEffect(()=>{O()},[O]),a.useEffect(()=>{k()},[k]),a.useEffect(()=>{if(typeof EventSource>"u")return;const ae=e?`?projectId=${encodeURIComponent(e)}`:"",be=()=>{O(),i==="inbox"?E():i==="outbox"&&$(),_&&P(_)};return Ks(`/api/events${ae}`,{events:{"message:sent":be,"message:received":be,"message:read":be,"message:deleted":be}})},[e,i,_,O,E,$,P]);const ne=a.useCallback(async ae=>{if(g(ae),!ae.read)try{const be=await hw(ae.id,e);be&&l(Fe=>Fe&&{...Fe,messages:Fe.messages.map(at=>at.id===be.id?be:at),unreadCount:Math.max(0,Fe.unreadCount-1)});const Ae=Math.max(0,d-1);m(Ae),s?.(Ae)}catch{}try{const be=await gw(ae.fromId,ae.fromType,e);v(be)}catch{v([ae])}},[e,d,s]),we=a.useCallback(()=>{g(null),v([])},[]),ie=a.useCallback(async()=>{try{const ae=await pw(e);m(0),s?.(0),l(be=>be&&{...be,messages:be.messages.map(Ae=>({...Ae,read:!0})),unreadCount:0}),n?.(`Marked ${ae.markedAsRead} messages as read`,"success")}catch{n?.("Failed to mark messages as read","error")}},[e,n,s]),ce=a.useCallback(async ae=>{try{await fw(ae,e),g(null),v([]),i==="inbox"?E():i==="outbox"?$():_&&P(_),n?.("Message deleted","success")}catch{n?.("Failed to delete message","error")}},[e,i,_,E,$,P,n]),ke=a.useCallback(ae=>{N({id:ae.fromId,type:ae.fromType}),w({messageId:ae.id,preview:lm(ae.content,120)}),y(!0)},[]),D=a.useCallback(()=>{y(!1),N(null),w(null),n?.("Message sent","success"),i==="outbox"?$():i==="agents"&&_&&P(_),O()},[i,$,_,P,n,O]),se=a.useCallback(()=>{N(i==="agents"&&_?{id:_,type:"agent"}:null),w(null),y(!0)},[i,_]),Z=a.useCallback(()=>{y(!1),N(null),w(null)},[]),ge=()=>!p||x?null:t.jsxs("div",{className:"mailbox-message-detail","data-testid":"mailbox-message-detail",children:[t.jsxs("div",{className:"mailbox-message-detail-header",children:[G&&t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:we,"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:l0(p.type)}),t.jsx("span",{className:"mailbox-message-time",children:aa(p.createdAt)})]}),t.jsxs("div",{className:"mailbox-message-detail-actions",children:[p.fromType==="agent"&&t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:()=>ke(p),"data-testid":"mailbox-reply",children:[t.jsx(Ni,{size:14}),t.jsx("span",{children:"Reply"})]}),t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:()=>ce(p.id),"data-testid":"mailbox-delete",children:[t.jsx(ln,{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(Cn,{size:14}):t.jsx(ta,{size:14}),F(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(Cn,{size:14}):t.jsx(ta,{size:14}),F(p.toId,p.toType)]})]})]}),b.length>1&&t.jsxs("div",{className:"mailbox-conversation","data-testid":"mailbox-conversation",children:[t.jsx("div",{className:"mailbox-conversation-label",children:"Conversation"}),b.map(ae=>{const be=ae.metadata?.replyTo?.messageId,Ae=be?b.find(Fe=>Fe.id===be):void 0;return t.jsxs("div",{className:`mailbox-conversation-msg ${ae.id===p.id?"current":""}`,children:[t.jsxs("div",{className:"mailbox-conversation-msg-header",children:[t.jsx("span",{children:F(ae.fromId,ae.fromType)}),t.jsx("span",{className:"mailbox-message-time",children:aa(ae.createdAt)})]}),be&&t.jsxs("div",{className:"mailbox-reply-context","data-testid":`mailbox-reply-context-${ae.id}`,children:["↪ Replying to ",Ae?lm(Ae.content,60):`message ${be}`]}),t.jsx("div",{className:"mailbox-conversation-msg-body",children:ae.content})]},ae.id)})]}),b.length<=1&&t.jsxs(t.Fragment,{children:[p.metadata?.replyTo?.messageId&&t.jsxs("div",{className:"mailbox-reply-context","data-testid":"mailbox-selected-reply-context",children:["↪ Replying to message ",p.metadata.replyTo.messageId]}),t.jsx("div",{className:"mailbox-message-body","data-testid":"mailbox-message-body",children:p.content})]})]}),ue=()=>t.jsxs(t.Fragment,{children:[i==="inbox"&&t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-inbox-list",children:[h&&!o&&t.jsx(Il,{}),o&&o.messages.length===0&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-inbox-empty",children:[t.jsx(ar,{size:32}),t.jsx("p",{children:"No messages in your inbox"})]}),o&&o.messages.length>0&&t.jsx("div",{className:"mailbox-conversations","data-testid":"mailbox-conversations",children:c0(o.messages).map(ae=>t.jsxs("div",{className:`mailbox-conversation-group ${ae.unreadCount>0?"unread":""}`,onClick:()=>ne(ae.latestMessage),"data-testid":`mailbox-conversation-${ae.key}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:ae.fromType==="agent"?t.jsx(Cn,{size:16}):t.jsx(ta,{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:F(ae.fromId,ae.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:aa(ae.latestMessage.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[ae.latestMessage.content.slice(0,80),ae.latestMessage.content.length>80?"…":""]})]}),ae.unreadCount>0&&t.jsx("div",{className:"mailbox-group-unread-badge","data-testid":`mailbox-unread-badge-${ae.key}`,children:ae.unreadCount>9?"9+":ae.unreadCount})]},ae.key))})]}),i==="outbox"&&t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-outbox-list",children:[h&&!c&&t.jsx(Il,{}),c&&c.messages.length===0&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-outbox-empty",children:[t.jsx(zi,{size:32}),t.jsx("p",{children:"No sent messages"})]}),c?.messages.map(ae=>t.jsxs("div",{className:"mailbox-item",onClick:()=>ne(ae),"data-testid":`mailbox-item-${ae.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:ae.toType==="agent"?t.jsx(Cn,{size:16}):t.jsx(ta,{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: ",F(ae.toId,ae.toType)]}),t.jsx("span",{className:"mailbox-item-time",children:aa(ae.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[ae.content.slice(0,80),ae.content.length>80?"…":""]})]})]},ae.id))]}),i==="agents"&&t.jsx("div",{className:"mailbox-agents","data-testid":"mailbox-agents",children:V.length===0?t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(Cn,{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:_??"",onChange:ae=>{S(ae.target.value||null),M("inbox")},"data-testid":"mailbox-agent-select",children:[t.jsx("option",{value:"",children:"Select an agent…"}),V.map(ae=>t.jsx("option",{value:ae.id,children:ae.name||ae.id},ae.id))]})}),t.jsxs("button",{className:"btn btn-sm btn-secondary mailbox-compose-btn",onClick:se,"data-testid":"mailbox-compose-btn",children:[t.jsx(Ni,{size:14}),t.jsx("span",{children:"Compose"})]})]}),_&&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:()=>M("inbox"),"data-testid":"mailbox-agent-subtab-inbox",children:[t.jsx(ar,{size:12}),t.jsx("span",{children:"Inbox"}),T&&T.unreadCount>0&&t.jsx("span",{className:"mailbox-tab-badge",children:T.unreadCount})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${z==="outbox"?"active":""}`,onClick:()=>M("outbox"),"data-testid":"mailbox-agent-subtab-outbox",children:[t.jsx(zi,{size:12}),t.jsx("span",{children:"Outbox"})]})]}),t.jsxs("div",{className:"mailbox-agents-content",children:[!_&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(Cn,{size:32}),t.jsx("p",{children:"Select an agent to view their mailbox"})]}),_&&h&&!T&&t.jsx(Il,{}),_&&T&&z==="inbox"&&T.inbox.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(ar,{size:32}),t.jsx("p",{children:"No received messages for this agent"})]}),_&&T&&z==="outbox"&&T.outbox.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(zi,{size:32}),t.jsx("p",{children:"No sent messages for this agent"})]}),_&&T&&z==="inbox"&&T.inbox.map(ae=>t.jsxs("div",{className:`mailbox-item ${ae.read?"":"unread"}`,onClick:()=>ne(ae),"data-testid":`mailbox-item-${ae.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:ae.fromType==="agent"?t.jsx(Cn,{size:16}):t.jsx(ta,{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:F(ae.fromId,ae.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:aa(ae.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[ae.content.slice(0,80),ae.content.length>80?"…":""]})]})]},ae.id)),_&&T&&z==="outbox"&&T.outbox.map(ae=>t.jsxs("div",{className:"mailbox-item",onClick:()=>ne(ae),"data-testid":`mailbox-item-${ae.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:ae.toType==="agent"?t.jsx(Cn,{size:16}):t.jsx(ta,{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: ",F(ae.toId,ae.toType)]}),t.jsx("span",{className:"mailbox-item-time",children:aa(ae.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[ae.content.slice(0,80),ae.content.length>80?"…":""]})]})]},ae.id))]})]})})]}),me=()=>x?t.jsx(om,{recipient:j,replyContext:C,agents:V,projectId:e,onSend:D,onCancel:Z,addToast:n}):p?ge():t.jsxs("div",{className:"mailbox-split-empty","data-testid":"mailbox-split-empty",children:[t.jsx(fa,{size:24}),t.jsx("p",{children:"Select a conversation to read messages"})]});return t.jsxs("div",{className:"mailbox-view","data-testid":"mailbox-view",children:[t.jsxs("div",{className:"mailbox-header",children:[t.jsxs("div",{className:"mailbox-title",children:[t.jsx(fa,{size:18}),t.jsx("span",{children:"Mailbox"}),d>0&&t.jsx("span",{className:"mailbox-unread-badge","data-testid":"mailbox-unread-badge",children:d})]}),t.jsxs("div",{className:"mailbox-header-actions",children:[t.jsxs("button",{className:"btn btn-sm btn-primary",onClick:se,title:"Compose message","data-testid":"mailbox-header-compose",children:[t.jsx(Ni,{size:14}),t.jsx("span",{children:"Compose"})]}),i==="inbox"&&d>0&&t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:ie,title:"Mark all as read","data-testid":"mailbox-mark-all-read",children:[t.jsx(ib,{size:14}),t.jsx("span",{children:"Mark all read"})]}),t.jsx("button",{className:"btn-icon",onClick:()=>{i==="inbox"?E():i==="outbox"?$():_&&P(_)},disabled:h,title:"Refresh","data-testid":"mailbox-refresh",children:h?t.jsx(lt,{size:14,className:"spin"}):t.jsx($n,{size:14})})]})]}),t.jsxs("div",{className:"mailbox-tabs","data-testid":"mailbox-tabs",children:[t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${i==="inbox"?"active":""}`,onClick:()=>{r("inbox"),g(null)},"data-testid":"mailbox-tab-inbox",children:[t.jsx(ar,{size:14}),t.jsx("span",{children:"Inbox"}),d>0&&t.jsx("span",{className:"mailbox-tab-badge",children:d})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${i==="outbox"?"active":""}`,onClick:()=>{r("outbox"),g(null)},"data-testid":"mailbox-tab-outbox",children:[t.jsx(zi,{size:14}),t.jsx("span",{children:"Outbox"})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${i==="agents"?"active":""}`,onClick:()=>{r("agents"),g(null)},"data-testid":"mailbox-tab-agents",children:[t.jsx(Cn,{size:14}),t.jsx("span",{children:"Agents"})]})]}),t.jsx("div",{className:"mailbox-content","data-testid":"mailbox-content",children:te?t.jsxs("div",{className:"mailbox-split-layout","data-testid":"mailbox-split-layout",children:[t.jsx("div",{className:"mailbox-split-list-pane","data-testid":"mailbox-split-list-pane",children:ue()}),t.jsx("div",{className:"mailbox-split-detail-pane","data-testid":"mailbox-split-detail-pane",children:me()})]}):t.jsxs(t.Fragment,{children:[ge(),x&&t.jsx(om,{recipient:j,replyContext:C,agents:V,projectId:e,onSend:D,onCancel:Z,addToast:n}),!p&&!x&&ue()]})})]})}function Il(){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))})}function oi(e,n,s){a.useEffect(()=>{if(!n)return;const i=e.current;if(!i)return;try{const u=localStorage.getItem(s);if(u){const{width:d,height:m}=JSON.parse(u);typeof d=="number"&&d>0&&(i.style.width=`${d}px`),typeof m=="number"&&m>0&&(i.style.height=`${m}px`)}}catch{}if(typeof ResizeObserver>"u")return;let r=i.offsetWidth,o=i.offsetHeight,l=null;const c=new ResizeObserver(()=>{const u=i.offsetWidth,d=i.offsetHeight;u===r&&d===o||(r=u,o=d,l&&clearTimeout(l),l=setTimeout(()=>{try{localStorage.setItem(s,JSON.stringify({width:u,height:d}))}catch{}},200))});return c.observe(i),()=>{c.disconnect(),l&&clearTimeout(l)}},[e,n,s])}function Mi(e){const n=a.useRef(!1),s=a.useCallback(r=>{n.current=r.target===r.currentTarget},[]),i=a.useCallback(r=>{const o=n.current&&r.target===r.currentTarget;n.current=!1,o&&e()},[e]);return{onMouseDown:s,onMouseUp:i}}function u0(e,n){const s={};return(e[e.length-1]===""?[...e,""]:e).join((s.padRight?" ":"")+","+(s.padLeft===!1?"":" ")).trim()}const m0=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,h0=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,p0={};function cm(e,n){return(p0.jsx?h0:m0).test(e)}const f0=/[ \t\n\f\r]/g;function g0(e){return typeof e=="object"?e.type==="text"?dm(e.value):!1:dm(e)}function dm(e){return e.replace(f0,"")===""}class Dr{constructor(n,s,i){this.normal=s,this.property=n,i&&(this.space=i)}}Dr.prototype.normal={};Dr.prototype.property={};Dr.prototype.space=void 0;function ef(e,n){const s={},i={};for(const r of e)Object.assign(s,r.property),Object.assign(i,r.normal);return new Dr(s,i,n)}function Oc(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 b0=0;const Ht=Qi(),zn=Qi(),Uc=Qi(),Ze=Qi(),yn=Qi(),ha=Qi(),js=Qi();function Qi(){return 2**++b0}const Bc=Object.freeze(Object.defineProperty({__proto__:null,boolean:Ht,booleanish:zn,commaOrSpaceSeparated:js,commaSeparated:ha,number:Ze,overloadedBoolean:Uc,spaceSeparated:yn},Symbol.toStringTag,{value:"Module"})),$l=Object.keys(Bc);class jd extends ys{constructor(n,s,i,r){let o=-1;if(super(n,s),um(this,"space",r),typeof i=="number")for(;++o<$l.length;){const l=$l[o];um(this,$l[o],(i&Bc[l])===Bc[l])}}}jd.prototype.defined=!0;function um(e,n,s){s&&(e[n]=s)}function Pa(e){const n={},s={};for(const[i,r]of Object.entries(e.properties)){const o=new jd(i,e.transform(e.attributes||{},i),r,e.space);e.mustUseProperty&&e.mustUseProperty.includes(i)&&(o.mustUseProperty=!0),n[i]=o,s[Oc(i)]=i,s[Oc(o.attribute)]=i}return new Dr(n,s,e.space)}const tf=Pa({properties:{ariaActiveDescendant:null,ariaAtomic:zn,ariaAutoComplete:null,ariaBusy:zn,ariaChecked:zn,ariaColCount:Ze,ariaColIndex:Ze,ariaColSpan:Ze,ariaControls:yn,ariaCurrent:null,ariaDescribedBy:yn,ariaDetails:null,ariaDisabled:zn,ariaDropEffect:yn,ariaErrorMessage:null,ariaExpanded:zn,ariaFlowTo:yn,ariaGrabbed:zn,ariaHasPopup:null,ariaHidden:zn,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:yn,ariaLevel:Ze,ariaLive:null,ariaModal:zn,ariaMultiLine:zn,ariaMultiSelectable:zn,ariaOrientation:null,ariaOwns:yn,ariaPlaceholder:null,ariaPosInSet:Ze,ariaPressed:zn,ariaReadOnly:zn,ariaRelevant:null,ariaRequired:zn,ariaRoleDescription:yn,ariaRowCount:Ze,ariaRowIndex:Ze,ariaRowSpan:Ze,ariaSelected:zn,ariaSetSize:Ze,ariaSort:null,ariaValueMax:Ze,ariaValueMin:Ze,ariaValueNow:Ze,ariaValueText:null,role:null},transform(e,n){return n==="role"?n:"aria-"+n.slice(4).toLowerCase()}});function nf(e,n){return n in e?e[n]:n}function sf(e,n){return nf(e,n.toLowerCase())}const x0=Pa({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:ha,acceptCharset:yn,accessKey:yn,action:null,allow:null,allowFullScreen:Ht,allowPaymentRequest:Ht,allowUserMedia:Ht,alt:null,as:null,async:Ht,autoCapitalize:null,autoComplete:yn,autoFocus:Ht,autoPlay:Ht,blocking:yn,capture:null,charSet:null,checked:Ht,cite:null,className:yn,cols:Ze,colSpan:null,content:null,contentEditable:zn,controls:Ht,controlsList:yn,coords:Ze|ha,crossOrigin:null,data:null,dateTime:null,decoding:null,default:Ht,defer:Ht,dir:null,dirName:null,disabled:Ht,download:Uc,draggable:zn,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:Ht,formTarget:null,headers:yn,height:Ze,hidden:Uc,high:Ze,href:null,hrefLang:null,htmlFor:yn,httpEquiv:yn,id:null,imageSizes:null,imageSrcSet:null,inert:Ht,inputMode:null,integrity:null,is:null,isMap:Ht,itemId:null,itemProp:yn,itemRef:yn,itemScope:Ht,itemType:yn,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:Ht,low:Ze,manifest:null,max:null,maxLength:Ze,media:null,method:null,min:null,minLength:Ze,multiple:Ht,muted:Ht,name:null,nonce:null,noModule:Ht,noValidate:Ht,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:Ht,optimum:Ze,pattern:null,ping:yn,placeholder:null,playsInline:Ht,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:Ht,referrerPolicy:null,rel:yn,required:Ht,reversed:Ht,rows:Ze,rowSpan:Ze,sandbox:yn,scope:null,scoped:Ht,seamless:Ht,selected:Ht,shadowRootClonable:Ht,shadowRootDelegatesFocus:Ht,shadowRootMode:null,shape:null,size:Ze,sizes:null,slot:null,span:Ze,spellCheck:zn,src:null,srcDoc:null,srcLang:null,srcSet:null,start:Ze,step:null,style:null,tabIndex:Ze,target:null,title:null,translate:null,type:null,typeMustMatch:Ht,useMap:null,value:zn,width:Ze,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:yn,axis:null,background:null,bgColor:null,border:Ze,borderColor:null,bottomMargin:Ze,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:Ht,declare:Ht,event:null,face:null,frame:null,frameBorder:null,hSpace:Ze,leftMargin:Ze,link:null,longDesc:null,lowSrc:null,marginHeight:Ze,marginWidth:Ze,noResize:Ht,noHref:Ht,noShade:Ht,noWrap:Ht,object:null,profile:null,prompt:null,rev:null,rightMargin:Ze,rules:null,scheme:null,scrolling:zn,standby:null,summary:null,text:null,topMargin:Ze,valueType:null,version:null,vAlign:null,vLink:null,vSpace:Ze,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:Ht,disableRemotePlayback:Ht,prefix:null,property:null,results:Ze,security:null,unselectable:null},space:"html",transform:sf}),v0=Pa({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:js,accentHeight:Ze,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:Ze,amplitude:Ze,arabicForm:null,ascent:Ze,attributeName:null,attributeType:null,azimuth:Ze,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:Ze,by:null,calcMode:null,capHeight:Ze,className:yn,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:Ze,diffuseConstant:Ze,direction:null,display:null,dur:null,divisor:Ze,dominantBaseline:null,download:Ht,dx:null,dy:null,edgeMode:null,editable:null,elevation:Ze,enableBackground:null,end:null,event:null,exponent:Ze,externalResourcesRequired:null,fill:null,fillOpacity:Ze,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:ha,g2:ha,glyphName:ha,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:Ze,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:Ze,horizOriginX:Ze,horizOriginY:Ze,id:null,ideographic:Ze,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:Ze,k:Ze,k1:Ze,k2:Ze,k3:Ze,k4:Ze,kernelMatrix:js,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:Ze,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:Ze,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:Ze,overlineThickness:Ze,paintOrder:null,panose1:null,path:null,pathLength:Ze,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:yn,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:Ze,pointsAtY:Ze,pointsAtZ:Ze,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:js,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:js,rev:js,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:js,requiredFeatures:js,requiredFonts:js,requiredFormats:js,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:Ze,specularExponent:Ze,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:Ze,strikethroughThickness:Ze,string:null,stroke:null,strokeDashArray:js,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:Ze,strokeOpacity:Ze,strokeWidth:null,style:null,surfaceScale:Ze,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:js,tabIndex:Ze,tableValues:null,target:null,targetX:Ze,targetY:Ze,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:js,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:Ze,underlineThickness:Ze,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:Ze,values:null,vAlphabetic:Ze,vMathematical:Ze,vectorEffect:null,vHanging:Ze,vIdeographic:Ze,version:null,vertAdvY:Ze,vertOriginX:Ze,vertOriginY:Ze,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:Ze,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:nf}),af=Pa({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()}}),rf=Pa({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:sf}),of=Pa({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,n){return"xml:"+n.slice(3).toLowerCase()}}),y0={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"},j0=/[A-Z]/g,mm=/-[a-z]/g,k0=/^data[-\w.:]+$/i;function w0(e,n){const s=Oc(n);let i=n,r=ys;if(s in e.normal)return e.property[e.normal[s]];if(s.length>4&&s.slice(0,4)==="data"&&k0.test(n)){if(n.charAt(4)==="-"){const o=n.slice(5).replace(mm,S0);i="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=n.slice(4);if(!mm.test(o)){let l=o.replace(j0,N0);l.charAt(0)!=="-"&&(l="-"+l),n="data"+l}}r=jd}return new r(i,n)}function N0(e){return"-"+e.toLowerCase()}function S0(e){return e.charAt(1).toUpperCase()}const C0=ef([tf,x0,af,rf,of],"html"),kd=ef([tf,v0,af,rf,of],"svg");function E0(e){return e.join(" ").trim()}var ra={},Dl,hm;function M0(){if(hm)return Dl;hm=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,s=/^\s*/,i=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,r=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,c=/^\s+|\s+$/g,u=`
|
|
619
|
-
`,d="/",m="*",h="",f="comment",p="declaration";function g(v,x){if(typeof v!="string")throw new TypeError("First argument must be a string");if(!v)return[];x=x||{};var y=1,j=1;function N(L){var R=L.match(n);R&&(y+=R.length);var F=L.lastIndexOf(u);j=~F?L.length-F:j+L.length}function C(){var L={line:y,column:j};return function(R){return R.position=new w(L),z(),R}}function w(L){this.start=L,this.end={line:y,column:j},this.source=x.source}w.prototype.content=v;function _(L){var R=new Error(x.source+":"+y+":"+j+": "+L);if(R.reason=L,R.filename=x.source,R.line=y,R.column=j,R.source=v,!x.silent)throw R}function S(L){var R=L.exec(v);if(R){var F=R[0];return N(F),v=v.slice(F.length),R}}function z(){S(s)}function M(L){var R;for(L=L||[];R=T();)R!==!1&&L.push(R);return L}function T(){var L=C();if(!(d!=v.charAt(0)||m!=v.charAt(1))){for(var R=2;h!=v.charAt(R)&&(m!=v.charAt(R)||d!=v.charAt(R+1));)++R;if(R+=2,h===v.charAt(R-1))return _("End of comment missing");var F=v.slice(2,R-2);return j+=2,N(F),v=v.slice(R),j+=2,L({type:f,comment:F})}}function U(){var L=C(),R=S(i);if(R){if(T(),!S(r))return _("property missing ':'");var F=S(o),W=L({type:p,property:b(R[0].replace(e,h)),value:F?b(F[0].replace(e,h)):h});return S(l),W}}function V(){var L=[];M(L);for(var R;R=U();)R!==!1&&(L.push(R),M(L));return L}return z(),V()}function b(v){return v?v.replace(c,h):h}return Dl=g,Dl}var pm;function _0(){if(pm)return ra;pm=1;var e=ra&&ra.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ra,"__esModule",{value:!0}),ra.default=s;const n=e(M0());function s(i,r){let o=null;if(!i||typeof i!="string")return o;const l=(0,n.default)(i),c=typeof r=="function";return l.forEach(u=>{if(u.type!=="declaration")return;const{property:d,value:m}=u;c?r(d,m,u):m&&(o=o||{},o[d]=m)}),o}return ra}var Va={},fm;function A0(){if(fm)return Va;fm=1,Object.defineProperty(Va,"__esModule",{value:!0}),Va.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,s=/^[^-]+$/,i=/^-(webkit|moz|ms|o|khtml)-/,r=/^-(ms)-/,o=function(d){return!d||s.test(d)||e.test(d)},l=function(d,m){return m.toUpperCase()},c=function(d,m){return"".concat(m,"-")},u=function(d,m){return m===void 0&&(m={}),o(d)?d:(d=d.toLowerCase(),m.reactCompat?d=d.replace(r,c):d=d.replace(i,c),d.replace(n,l))};return Va.camelCase=u,Va}var Wa,gm;function R0(){if(gm)return Wa;gm=1;var e=Wa&&Wa.__importDefault||function(r){return r&&r.__esModule?r:{default:r}},n=e(_0()),s=A0();function i(r,o){var l={};return!r||typeof r!="string"||(0,n.default)(r,function(c,u){c&&u&&(l[(0,s.camelCase)(c,o)]=u)}),l}return i.default=i,Wa=i,Wa}var T0=R0();const P0=Qh(T0),lf=cf("end"),wd=cf("start");function cf(e){return n;function n(s){const i=s&&s.position&&s.position[e]||{};if(typeof i.line=="number"&&i.line>0&&typeof i.column=="number"&&i.column>0)return{line:i.line,column:i.column,offset:typeof i.offset=="number"&&i.offset>-1?i.offset:void 0}}}function I0(e){const n=wd(e),s=lf(e);if(n&&s)return{start:n,end:s}}function hr(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?bm(e.position):"start"in e||"end"in e?bm(e):"line"in e||"column"in e?Hc(e):""}function Hc(e){return xm(e&&e.line)+":"+xm(e&&e.column)}function bm(e){return Hc(e&&e.start)+"-"+Hc(e&&e.end)}function xm(e){return e&&typeof e=="number"?e:1}class os extends Error{constructor(n,s,i){super(),typeof s=="string"&&(i=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 i=="string"){const u=i.indexOf(":");u===-1?o.ruleId=i:(o.source=i.slice(0,u),o.ruleId=i.slice(u+1))}if(!o.place&&o.ancestors&&o.ancestors){const u=o.ancestors[o.ancestors.length-1];u&&(o.place=u.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=hr(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}}os.prototype.file="";os.prototype.name="";os.prototype.reason="";os.prototype.message="";os.prototype.stack="";os.prototype.column=void 0;os.prototype.line=void 0;os.prototype.ancestors=void 0;os.prototype.cause=void 0;os.prototype.fatal=void 0;os.prototype.place=void 0;os.prototype.ruleId=void 0;os.prototype.source=void 0;const Nd={}.hasOwnProperty,$0=new Map,D0=/[A-Z]/g,L0=new Set(["table","tbody","thead","tfoot","tr"]),z0=new Set(["td","th"]),df="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function F0(e,n){if(!n||n.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const s=n.filePath||void 0;let i;if(n.development){if(typeof n.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");i=K0(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");i=W0(s,n.jsx,n.jsxs)}const r={Fragment:n.Fragment,ancestors:[],components:n.components||{},create:i,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"?kd:C0,stylePropertyNameCase:n.stylePropertyNameCase||"dom",tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},o=uf(r,e,void 0);return o&&typeof o!="string"?o:r.create(e,r.Fragment,{children:o||void 0},void 0)}function uf(e,n,s){if(n.type==="element")return O0(e,n,s);if(n.type==="mdxFlowExpression"||n.type==="mdxTextExpression")return U0(e,n);if(n.type==="mdxJsxFlowElement"||n.type==="mdxJsxTextElement")return H0(e,n,s);if(n.type==="mdxjsEsm")return B0(e,n);if(n.type==="root")return q0(e,n,s);if(n.type==="text")return V0(e,n)}function O0(e,n,s){const i=e.schema;let r=i;n.tagName.toLowerCase()==="svg"&&i.space==="html"&&(r=kd,e.schema=r),e.ancestors.push(n);const o=hf(e,n.tagName,!1),l=G0(e,n);let c=Cd(e,n);return L0.has(n.tagName)&&(c=c.filter(function(u){return typeof u=="string"?!g0(u):!0})),mf(e,l,o,n),Sd(l,c),e.ancestors.pop(),e.schema=i,e.create(n,o,l,s)}function U0(e,n){if(n.data&&n.data.estree&&e.evaluater){const i=n.data.estree.body[0];return i.type,e.evaluater.evaluateExpression(i.expression)}Nr(e,n.position)}function B0(e,n){if(n.data&&n.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(n.data.estree);Nr(e,n.position)}function H0(e,n,s){const i=e.schema;let r=i;n.name==="svg"&&i.space==="html"&&(r=kd,e.schema=r),e.ancestors.push(n);const o=n.name===null?e.Fragment:hf(e,n.name,!0),l=J0(e,n),c=Cd(e,n);return mf(e,l,o,n),Sd(l,c),e.ancestors.pop(),e.schema=i,e.create(n,o,l,s)}function q0(e,n,s){const i={};return Sd(i,Cd(e,n)),e.create(n,e.Fragment,i,s)}function V0(e,n){return n.value}function mf(e,n,s,i){typeof s!="string"&&s!==e.Fragment&&e.passNode&&(n.node=i)}function Sd(e,n){if(n.length>0){const s=n.length>1?n:n[0];s&&(e.children=s)}}function W0(e,n,s){return i;function i(r,o,l,c){const d=Array.isArray(l.children)?s:n;return c?d(o,l,c):d(o,l)}}function K0(e,n){return s;function s(i,r,o,l){const c=Array.isArray(o.children),u=wd(i);return n(r,o,l,c,{columnNumber:u?u.column-1:void 0,fileName:e,lineNumber:u?u.line:void 0},void 0)}}function G0(e,n){const s={};let i,r;for(r in n.properties)if(r!=="children"&&Nd.call(n.properties,r)){const o=Y0(e,r,n.properties[r]);if(o){const[l,c]=o;e.tableCellAlignToStyle&&l==="align"&&typeof c=="string"&&z0.has(n.tagName)?i=c:s[l]=c}}if(i){const o=s.style||(s.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=i}return s}function J0(e,n){const s={};for(const i of n.attributes)if(i.type==="mdxJsxExpressionAttribute")if(i.data&&i.data.estree&&e.evaluater){const o=i.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 Nr(e,n.position);else{const r=i.name;let o;if(i.value&&typeof i.value=="object")if(i.value.data&&i.value.data.estree&&e.evaluater){const c=i.value.data.estree.body[0];c.type,o=e.evaluater.evaluateExpression(c.expression)}else Nr(e,n.position);else o=i.value===null?!0:i.value;s[r]=o}return s}function Cd(e,n){const s=[];let i=-1;const r=e.passKeys?new Map:$0;for(;++i<n.children.length;){const o=n.children[i];let l;if(e.passKeys){const u=o.type==="element"?o.tagName:o.type==="mdxJsxFlowElement"||o.type==="mdxJsxTextElement"?o.name:void 0;if(u){const d=r.get(u)||0;l=u+"-"+d,r.set(u,d+1)}}const c=uf(e,o,l);c!==void 0&&s.push(c)}return s}function Y0(e,n,s){const i=w0(e.schema,n);if(!(s==null||typeof s=="number"&&Number.isNaN(s))){if(Array.isArray(s)&&(s=i.commaSeparated?u0(s):E0(s)),i.property==="style"){let r=typeof s=="object"?s:Q0(e,String(s));return e.stylePropertyNameCase==="css"&&(r=X0(r)),["style",r]}return[e.elementAttributeNameCase==="react"&&i.space?y0[i.property]||i.property:i.attribute,s]}}function Q0(e,n){try{return P0(n,{reactCompat:!0})}catch(s){if(e.ignoreInvalidStyle)return{};const i=s,r=new os("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:i,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=df+"#cannot-parse-style-attribute",r}}function hf(e,n,s){let i;if(!s)i={type:"Literal",value:n};else if(n.includes(".")){const r=n.split(".");let o=-1,l;for(;++o<r.length;){const c=cm(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}i=l}else i=cm(n)&&!/^[a-z]/.test(n)?{type:"Identifier",name:n}:{type:"Literal",value:n};if(i.type==="Literal"){const r=i.value;return Nd.call(e.components,r)?e.components[r]:r}if(e.evaluater)return e.evaluater.evaluateExpression(i);Nr(e)}function Nr(e,n){const s=new os("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=df+"#cannot-handle-mdx-estrees-without-createevaluater",s}function X0(e){const n={};let s;for(s in e)Nd.call(e,s)&&(n[Z0(s)]=e[s]);return n}function Z0(e){let n=e.replace(D0,eS);return n.slice(0,3)==="ms-"&&(n="-"+n),n}function eS(e){return"-"+e.toLowerCase()}const Ll={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"]},tS={};function Ed(e,n){const s=tS,i=typeof s.includeImageAlt=="boolean"?s.includeImageAlt:!0,r=typeof s.includeHtml=="boolean"?s.includeHtml:!0;return pf(e,i,r)}function pf(e,n,s){if(nS(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 vm(e.children,n,s)}return Array.isArray(e)?vm(e,n,s):""}function vm(e,n,s){const i=[];let r=-1;for(;++r<e.length;)i[r]=pf(e[r],n,s);return i.join("")}function nS(e){return!!(e&&typeof e=="object")}const ym=document.createElement("i");function Md(e){const n="&"+e+";";ym.innerHTML=n;const s=ym.textContent;return s.charCodeAt(s.length-1)===59&&e!=="semi"||s===n?!1:s}function Ss(e,n,s,i){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,i.length<1e4)l=Array.from(i),l.unshift(n,s),e.splice(...l);else for(s&&e.splice(n,s);o<i.length;)l=i.slice(o,o+1e4),l.unshift(n,0),e.splice(...l),o+=1e4,n+=1e4}function Ps(e,n){return e.length>0?(Ss(e,e.length,0,n),e):n}const jm={}.hasOwnProperty;function ff(e){const n={};let s=-1;for(;++s<e.length;)sS(n,e[s]);return n}function sS(e,n){let s;for(s in n){const r=(jm.call(e,s)?e[s]:void 0)||(e[s]={}),o=n[s];let l;if(o)for(l in o){jm.call(r,l)||(r[l]=[]);const c=o[l];iS(r[l],Array.isArray(c)?c:c?[c]:[])}}}function iS(e,n){let s=-1;const i=[];for(;++s<n.length;)(n[s].add==="after"?e:i).push(n[s]);Ss(e,0,0,i)}function gf(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 qs(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const us=_i(/[A-Za-z]/),is=_i(/[\dA-Za-z]/),aS=_i(/[#-'*+\--9=?A-Z^-~]/);function To(e){return e!==null&&(e<32||e===127)}const qc=_i(/\d/),rS=_i(/[\dA-Fa-f]/),oS=_i(/[!-/:-@[-`{-~]/);function Ct(e){return e!==null&&e<-2}function bn(e){return e!==null&&(e<0||e===32)}function Zt(e){return e===-2||e===-1||e===32}const tl=_i(/\p{P}|\p{S}/u),Ki=_i(/\s/);function _i(e){return n;function n(s){return s!==null&&s>-1&&e.test(String.fromCharCode(s))}}function Ia(e){const n=[];let s=-1,i=0,r=0;for(;++s<e.length;){const o=e.charCodeAt(s);let l="";if(o===37&&is(e.charCodeAt(s+1))&&is(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(i,s),encodeURIComponent(l)),i=s+r+1,l=""),r&&(s+=r,r=0)}return n.join("")+e.slice(i)}function an(e,n,s,i){const r=i?i-1:Number.POSITIVE_INFINITY;let o=0;return l;function l(u){return Zt(u)?(e.enter(s),c(u)):n(u)}function c(u){return Zt(u)&&o++<r?(e.consume(u),c):(e.exit(s),n(u))}}const lS={tokenize:cS};function cS(e){const n=e.attempt(this.parser.constructs.contentInitial,i,r);let s;return n;function i(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),an(e,n,"linePrefix")}function r(c){return e.enter("paragraph"),o(c)}function o(c){const u=e.enter("chunkText",{contentType:"text",previous:s});return s&&(s.next=u),s=u,l(c)}function l(c){if(c===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(c);return}return Ct(c)?(e.consume(c),e.exit("chunkText"),o):(e.consume(c),l)}}const dS={tokenize:uS},km={tokenize:mS};function uS(e){const n=this,s=[];let i=0,r,o,l;return c;function c(j){if(i<s.length){const N=s[i];return n.containerState=N[1],e.attempt(N[0].continuation,u,d)(j)}return d(j)}function u(j){if(i++,n.containerState._closeFlow){n.containerState._closeFlow=void 0,r&&y();const N=n.events.length;let C=N,w;for(;C--;)if(n.events[C][0]==="exit"&&n.events[C][1].type==="chunkFlow"){w=n.events[C][1].end;break}x(i);let _=N;for(;_<n.events.length;)n.events[_][1].end={...w},_++;return Ss(n.events,C+1,0,n.events.slice(N)),n.events.length=_,d(j)}return c(j)}function d(j){if(i===s.length){if(!r)return f(j);if(r.currentConstruct&&r.currentConstruct.concrete)return g(j);n.interrupt=!!(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return n.containerState={},e.check(km,m,h)(j)}function m(j){return r&&y(),x(i),f(j)}function h(j){return n.parser.lazy[n.now().line]=i!==s.length,l=n.now().offset,g(j)}function f(j){return n.containerState={},e.attempt(km,p,g)(j)}function p(j){return i++,s.push([n.currentConstruct,n.containerState]),f(j)}function g(j){if(j===null){r&&y(),x(0),e.consume(j);return}return r=r||n.parser.flow(n.now()),e.enter("chunkFlow",{_tokenizer:r,contentType:"flow",previous:o}),b(j)}function b(j){if(j===null){v(e.exit("chunkFlow"),!0),x(0),e.consume(j);return}return Ct(j)?(e.consume(j),v(e.exit("chunkFlow")),i=0,n.interrupt=void 0,c):(e.consume(j),b)}function v(j,N){const C=n.sliceStream(j);if(N&&C.push(null),j.previous=o,o&&(o.next=j),o=j,r.defineSkip(j.start),r.write(C),n.parser.lazy[j.start.line]){let w=r.events.length;for(;w--;)if(r.events[w][1].start.offset<l&&(!r.events[w][1].end||r.events[w][1].end.offset>l))return;const _=n.events.length;let S=_,z,M;for(;S--;)if(n.events[S][0]==="exit"&&n.events[S][1].type==="chunkFlow"){if(z){M=n.events[S][1].end;break}z=!0}for(x(i),w=_;w<n.events.length;)n.events[w][1].end={...M},w++;Ss(n.events,S+1,0,n.events.slice(_)),n.events.length=w}}function x(j){let N=s.length;for(;N-- >j;){const C=s[N];n.containerState=C[1],C[0].exit.call(n,e)}s.length=j}function y(){r.write([null]),o=void 0,r=void 0,n.containerState._closeFlow=void 0}}function mS(e,n,s){return an(e,e.attempt(this.parser.constructs.document,n,s),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function va(e){if(e===null||bn(e)||Ki(e))return 1;if(tl(e))return 2}function nl(e,n,s){const i=[];let r=-1;for(;++r<e.length;){const o=e[r].resolveAll;o&&!i.includes(o)&&(n=o(n,s),i.push(o))}return n}const Vc={name:"attention",resolveAll:hS,tokenize:pS};function hS(e,n){let s=-1,i,r,o,l,c,u,d,m;for(;++s<e.length;)if(e[s][0]==="enter"&&e[s][1].type==="attentionSequence"&&e[s][1]._close){for(i=s;i--;)if(e[i][0]==="exit"&&e[i][1].type==="attentionSequence"&&e[i][1]._open&&n.sliceSerialize(e[i][1]).charCodeAt(0)===n.sliceSerialize(e[s][1]).charCodeAt(0)){if((e[i][1]._close||e[s][1]._open)&&(e[s][1].end.offset-e[s][1].start.offset)%3&&!((e[i][1].end.offset-e[i][1].start.offset+e[s][1].end.offset-e[s][1].start.offset)%3))continue;u=e[i][1].end.offset-e[i][1].start.offset>1&&e[s][1].end.offset-e[s][1].start.offset>1?2:1;const h={...e[i][1].end},f={...e[s][1].start};wm(h,-u),wm(f,u),l={type:u>1?"strongSequence":"emphasisSequence",start:h,end:{...e[i][1].end}},c={type:u>1?"strongSequence":"emphasisSequence",start:{...e[s][1].start},end:f},o={type:u>1?"strongText":"emphasisText",start:{...e[i][1].end},end:{...e[s][1].start}},r={type:u>1?"strong":"emphasis",start:{...l.start},end:{...c.end}},e[i][1].end={...l.start},e[s][1].start={...c.end},d=[],e[i][1].end.offset-e[i][1].start.offset&&(d=Ps(d,[["enter",e[i][1],n],["exit",e[i][1],n]])),d=Ps(d,[["enter",r,n],["enter",l,n],["exit",l,n],["enter",o,n]]),d=Ps(d,nl(n.parser.constructs.insideSpan.null,e.slice(i+1,s),n)),d=Ps(d,[["exit",o,n],["enter",c,n],["exit",c,n],["exit",r,n]]),e[s][1].end.offset-e[s][1].start.offset?(m=2,d=Ps(d,[["enter",e[s][1],n],["exit",e[s][1],n]])):m=0,Ss(e,i-1,s-i+3,d),s=i+d.length-m-2;break}}for(s=-1;++s<e.length;)e[s][1].type==="attentionSequence"&&(e[s][1].type="data");return e}function pS(e,n){const s=this.parser.constructs.attentionMarkers.null,i=this.previous,r=va(i);let o;return l;function l(u){return o=u,e.enter("attentionSequence"),c(u)}function c(u){if(u===o)return e.consume(u),c;const d=e.exit("attentionSequence"),m=va(u),h=!m||m===2&&r||s.includes(u),f=!r||r===2&&m||s.includes(i);return d._open=!!(o===42?h:h&&(r||!f)),d._close=!!(o===42?f:f&&(m||!h)),n(u)}}function wm(e,n){e.column+=n,e.offset+=n,e._bufferIndex+=n}const fS={name:"autolink",tokenize:gS};function gS(e,n,s){let i=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 us(p)?(e.consume(p),l):p===64?s(p):d(p)}function l(p){return p===43||p===45||p===46||is(p)?(i=1,c(p)):d(p)}function c(p){return p===58?(e.consume(p),i=0,u):(p===43||p===45||p===46||is(p))&&i++<32?(e.consume(p),c):(i=0,d(p))}function u(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||To(p)?s(p):(e.consume(p),u)}function d(p){return p===64?(e.consume(p),m):aS(p)?(e.consume(p),d):s(p)}function m(p){return is(p)?h(p):s(p)}function h(p){return p===46?(e.consume(p),i=0,m):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||is(p))&&i++<63){const g=p===45?f:h;return e.consume(p),g}return s(p)}}const Lr={partial:!0,tokenize:bS};function bS(e,n,s){return i;function i(o){return Zt(o)?an(e,r,"linePrefix")(o):r(o)}function r(o){return o===null||Ct(o)?n(o):s(o)}}const bf={continuation:{tokenize:vS},exit:yS,name:"blockQuote",tokenize:xS};function xS(e,n,s){const i=this;return r;function r(l){if(l===62){const c=i.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 Zt(l)?(e.enter("blockQuotePrefixWhitespace"),e.consume(l),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),n):(e.exit("blockQuotePrefix"),n(l))}}function vS(e,n,s){const i=this;return r;function r(l){return Zt(l)?an(e,o,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(l):o(l)}function o(l){return e.attempt(bf,n,s)(l)}}function yS(e){e.exit("blockQuote")}const xf={name:"characterEscape",tokenize:jS};function jS(e,n,s){return i;function i(o){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(o),e.exit("escapeMarker"),r}function r(o){return oS(o)?(e.enter("characterEscapeValue"),e.consume(o),e.exit("characterEscapeValue"),e.exit("characterEscape"),n):s(o)}}const vf={name:"characterReference",tokenize:kS};function kS(e,n,s){const i=this;let r=0,o,l;return c;function c(h){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(h),e.exit("characterReferenceMarker"),u}function u(h){return h===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(h),e.exit("characterReferenceMarkerNumeric"),d):(e.enter("characterReferenceValue"),o=31,l=is,m(h))}function d(h){return h===88||h===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(h),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,l=rS,m):(e.enter("characterReferenceValue"),o=7,l=qc,m(h))}function m(h){if(h===59&&r){const f=e.exit("characterReferenceValue");return l===is&&!Md(i.sliceSerialize(f))?s(h):(e.enter("characterReferenceMarker"),e.consume(h),e.exit("characterReferenceMarker"),e.exit("characterReference"),n)}return l(h)&&r++<o?(e.consume(h),m):s(h)}}const Nm={partial:!0,tokenize:NS},Sm={concrete:!0,name:"codeFenced",tokenize:wS};function wS(e,n,s){const i=this,r={partial:!0,tokenize:C};let o=0,l=0,c;return u;function u(w){return d(w)}function d(w){const _=i.events[i.events.length-1];return o=_&&_[1].type==="linePrefix"?_[2].sliceSerialize(_[1],!0).length:0,c=w,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),m(w)}function m(w){return w===c?(l++,e.consume(w),m):l<3?s(w):(e.exit("codeFencedFenceSequence"),Zt(w)?an(e,h,"whitespace")(w):h(w))}function h(w){return w===null||Ct(w)?(e.exit("codeFencedFence"),i.interrupt?n(w):e.check(Nm,b,N)(w)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),f(w))}function f(w){return w===null||Ct(w)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),h(w)):Zt(w)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),an(e,p,"whitespace")(w)):w===96&&w===c?s(w):(e.consume(w),f)}function p(w){return w===null||Ct(w)?h(w):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),g(w))}function g(w){return w===null||Ct(w)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),h(w)):w===96&&w===c?s(w):(e.consume(w),g)}function b(w){return e.attempt(r,N,v)(w)}function v(w){return e.enter("lineEnding"),e.consume(w),e.exit("lineEnding"),x}function x(w){return o>0&&Zt(w)?an(e,y,"linePrefix",o+1)(w):y(w)}function y(w){return w===null||Ct(w)?e.check(Nm,b,N)(w):(e.enter("codeFlowValue"),j(w))}function j(w){return w===null||Ct(w)?(e.exit("codeFlowValue"),y(w)):(e.consume(w),j)}function N(w){return e.exit("codeFenced"),n(w)}function C(w,_,S){let z=0;return M;function M(R){return w.enter("lineEnding"),w.consume(R),w.exit("lineEnding"),T}function T(R){return w.enter("codeFencedFence"),Zt(R)?an(w,U,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(R):U(R)}function U(R){return R===c?(w.enter("codeFencedFenceSequence"),V(R)):S(R)}function V(R){return R===c?(z++,w.consume(R),V):z>=l?(w.exit("codeFencedFenceSequence"),Zt(R)?an(w,L,"whitespace")(R):L(R)):S(R)}function L(R){return R===null||Ct(R)?(w.exit("codeFencedFence"),_(R)):S(R)}}}function NS(e,n,s){const i=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 i.parser.lazy[i.now().line]?s(l):n(l)}}const zl={name:"codeIndented",tokenize:CS},SS={partial:!0,tokenize:ES};function CS(e,n,s){const i=this;return r;function r(d){return e.enter("codeIndented"),an(e,o,"linePrefix",5)(d)}function o(d){const m=i.events[i.events.length-1];return m&&m[1].type==="linePrefix"&&m[2].sliceSerialize(m[1],!0).length>=4?l(d):s(d)}function l(d){return d===null?u(d):Ct(d)?e.attempt(SS,l,u)(d):(e.enter("codeFlowValue"),c(d))}function c(d){return d===null||Ct(d)?(e.exit("codeFlowValue"),l(d)):(e.consume(d),c)}function u(d){return e.exit("codeIndented"),n(d)}}function ES(e,n,s){const i=this;return r;function r(l){return i.parser.lazy[i.now().line]?s(l):Ct(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),r):an(e,o,"linePrefix",5)(l)}function o(l){const c=i.events[i.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?n(l):Ct(l)?r(l):s(l)}}const MS={name:"codeText",previous:AS,resolve:_S,tokenize:RS};function _S(e){let n=e.length-4,s=3,i,r;if((e[s][1].type==="lineEnding"||e[s][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(i=s;++i<n;)if(e[i][1].type==="codeTextData"){e[s][1].type="codeTextPadding",e[n][1].type="codeTextPadding",s+=2,n-=2;break}}for(i=s-1,n++;++i<=n;)r===void 0?i!==n&&e[i][1].type!=="lineEnding"&&(r=i):(i===n||e[i][1].type==="lineEnding")&&(e[r][1].type="codeTextData",i!==r+2&&(e[r][1].end=e[i-1][1].end,e.splice(r+2,i-r-2),n-=i-r-2,i=r+2),r=void 0);return e}function AS(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function RS(e,n,s){let i=0,r,o;return l;function l(h){return e.enter("codeText"),e.enter("codeTextSequence"),c(h)}function c(h){return h===96?(e.consume(h),i++,c):(e.exit("codeTextSequence"),u(h))}function u(h){return h===null?s(h):h===32?(e.enter("space"),e.consume(h),e.exit("space"),u):h===96?(o=e.enter("codeTextSequence"),r=0,m(h)):Ct(h)?(e.enter("lineEnding"),e.consume(h),e.exit("lineEnding"),u):(e.enter("codeTextData"),d(h))}function d(h){return h===null||h===32||h===96||Ct(h)?(e.exit("codeTextData"),u(h)):(e.consume(h),d)}function m(h){return h===96?(e.consume(h),r++,m):r===i?(e.exit("codeTextSequence"),e.exit("codeText"),n(h)):(o.type="codeTextData",d(h))}}class TS{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 i=s??Number.POSITIVE_INFINITY;return i<this.left.length?this.left.slice(n,i):n>this.left.length?this.right.slice(this.right.length-i+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-i+this.left.length).reverse())}splice(n,s,i){const r=s||0;this.setCursor(Math.trunc(n));const o=this.right.splice(this.right.length-r,Number.POSITIVE_INFINITY);return i&&Ka(this.left,i),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),Ka(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),Ka(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);Ka(this.right,s.reverse())}else{const s=this.right.splice(this.left.length+this.right.length-n,Number.POSITIVE_INFINITY);Ka(this.left,s.reverse())}}}function Ka(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 yf(e){const n={};let s=-1,i,r,o,l,c,u,d;const m=new TS(e);for(;++s<m.length;){for(;s in n;)s=n[s];if(i=m.get(s),s&&i[1].type==="chunkFlow"&&m.get(s-1)[1].type==="listItemPrefix"&&(u=i[1]._tokenizer.events,o=0,o<u.length&&u[o][1].type==="lineEndingBlank"&&(o+=2),o<u.length&&u[o][1].type==="content"))for(;++o<u.length&&u[o][1].type!=="content";)u[o][1].type==="chunkText"&&(u[o][1]._isInFirstContentOfListItem=!0,o++);if(i[0]==="enter")i[1].contentType&&(Object.assign(n,PS(m,s)),s=n[s],d=!0);else if(i[1]._container){for(o=s,r=void 0;o--;)if(l=m.get(o),l[1].type==="lineEnding"||l[1].type==="lineEndingBlank")l[0]==="enter"&&(r&&(m.get(r)[1].type="lineEndingBlank"),l[1].type="lineEnding",r=o);else if(!(l[1].type==="linePrefix"||l[1].type==="listItemIndent"))break;r&&(i[1].end={...m.get(r)[1].start},c=m.slice(r,s),c.unshift(i),m.splice(r,s-r+1,c))}}return Ss(e,0,Number.POSITIVE_INFINITY,m.slice(0)),!d}function PS(e,n){const s=e.get(n)[1],i=e.get(n)[2];let r=n-1;const o=[];let l=s._tokenizer;l||(l=i.parser[s.contentType](s.start),s._contentTypeTextTrailing&&(l._contentTypeTextTrailing=!0));const c=l.events,u=[],d={};let m,h,f=-1,p=s,g=0,b=0;const v=[b];for(;p;){for(;e.get(++r)[1]!==p;);o.push(r),p._tokenizer||(m=i.sliceStream(p),p.next||m.push(null),h&&l.defineSkip(p.start),p._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=!0),l.write(m),p._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=void 0)),h=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&&(b=f+1,v.push(b),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 x=c.slice(v[f],v[f+1]),y=o.pop();u.push([y,y+x.length-1]),e.splice(y,2,x)}for(u.reverse(),f=-1;++f<u.length;)d[g+u[f][0]]=g+u[f][1],g+=u[f][1]-u[f][0]-1;return d}const IS={resolve:DS,tokenize:LS},$S={partial:!0,tokenize:zS};function DS(e){return yf(e),e}function LS(e,n){let s;return i;function i(c){return e.enter("content"),s=e.enter("chunkContent",{contentType:"content"}),r(c)}function r(c){return c===null?o(c):Ct(c)?e.check($S,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 zS(e,n,s){const i=this;return r;function r(l){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),an(e,o,"linePrefix")}function o(l){if(l===null||Ct(l))return s(l);const c=i.events[i.events.length-1];return!i.parser.constructs.disable.null.includes("codeIndented")&&c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?n(l):e.interrupt(i.parser.constructs.flow,s,n)(l)}}function jf(e,n,s,i,r,o,l,c,u){const d=u||Number.POSITIVE_INFINITY;let m=0;return h;function h(x){return x===60?(e.enter(i),e.enter(r),e.enter(o),e.consume(x),e.exit(o),f):x===null||x===32||x===41||To(x)?s(x):(e.enter(i),e.enter(l),e.enter(c),e.enter("chunkString",{contentType:"string"}),b(x))}function f(x){return x===62?(e.enter(o),e.consume(x),e.exit(o),e.exit(r),e.exit(i),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),p(x))}function p(x){return x===62?(e.exit("chunkString"),e.exit(c),f(x)):x===null||x===60||Ct(x)?s(x):(e.consume(x),x===92?g:p)}function g(x){return x===60||x===62||x===92?(e.consume(x),p):p(x)}function b(x){return!m&&(x===null||x===41||bn(x))?(e.exit("chunkString"),e.exit(c),e.exit(l),e.exit(i),n(x)):m<d&&x===40?(e.consume(x),m++,b):x===41?(e.consume(x),m--,b):x===null||x===32||x===40||To(x)?s(x):(e.consume(x),x===92?v:b)}function v(x){return x===40||x===41||x===92?(e.consume(x),b):b(x)}}function kf(e,n,s,i,r,o){const l=this;let c=0,u;return d;function d(p){return e.enter(i),e.enter(r),e.consume(p),e.exit(r),e.enter(o),m}function m(p){return c>999||p===null||p===91||p===93&&!u||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(i),n):Ct(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),m):(e.enter("chunkString",{contentType:"string"}),h(p))}function h(p){return p===null||p===91||p===93||Ct(p)||c++>999?(e.exit("chunkString"),m(p)):(e.consume(p),u||(u=!Zt(p)),p===92?f:h)}function f(p){return p===91||p===92||p===93?(e.consume(p),c++,h):h(p)}}function wf(e,n,s,i,r,o){let l;return c;function c(f){return f===34||f===39||f===40?(e.enter(i),e.enter(r),e.consume(f),e.exit(r),l=f===40?41:f,u):s(f)}function u(f){return f===l?(e.enter(r),e.consume(f),e.exit(r),e.exit(i),n):(e.enter(o),d(f))}function d(f){return f===l?(e.exit(o),u(l)):f===null?s(f):Ct(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),an(e,d,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),m(f))}function m(f){return f===l||f===null||Ct(f)?(e.exit("chunkString"),d(f)):(e.consume(f),f===92?h:m)}function h(f){return f===l||f===92?(e.consume(f),m):m(f)}}function pr(e,n){let s;return i;function i(r){return Ct(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),s=!0,i):Zt(r)?an(e,i,s?"linePrefix":"lineSuffix")(r):n(r)}}const FS={name:"definition",tokenize:US},OS={partial:!0,tokenize:BS};function US(e,n,s){const i=this;let r;return o;function o(p){return e.enter("definition"),l(p)}function l(p){return kf.call(i,e,c,s,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function c(p){return r=qs(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),u):s(p)}function u(p){return bn(p)?pr(e,d)(p):d(p)}function d(p){return jf(e,m,s,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function m(p){return e.attempt(OS,h,h)(p)}function h(p){return Zt(p)?an(e,f,"whitespace")(p):f(p)}function f(p){return p===null||Ct(p)?(e.exit("definition"),i.parser.defined.push(r),n(p)):s(p)}}function BS(e,n,s){return i;function i(c){return bn(c)?pr(e,r)(c):s(c)}function r(c){return wf(e,o,s,"definitionTitle","definitionTitleMarker","definitionTitleString")(c)}function o(c){return Zt(c)?an(e,l,"whitespace")(c):l(c)}function l(c){return c===null||Ct(c)?n(c):s(c)}}const HS={name:"hardBreakEscape",tokenize:qS};function qS(e,n,s){return i;function i(o){return e.enter("hardBreakEscape"),e.consume(o),r}function r(o){return Ct(o)?(e.exit("hardBreakEscape"),n(o)):s(o)}}const VS={name:"headingAtx",resolve:WS,tokenize:KS};function WS(e,n){let s=e.length-2,i=3,r,o;return e[i][1].type==="whitespace"&&(i+=2),s-2>i&&e[s][1].type==="whitespace"&&(s-=2),e[s][1].type==="atxHeadingSequence"&&(i===s-1||s-4>i&&e[s-2][1].type==="whitespace")&&(s-=i+1===s?2:4),s>i&&(r={type:"atxHeadingText",start:e[i][1].start,end:e[s][1].end},o={type:"chunkText",start:e[i][1].start,end:e[s][1].end,contentType:"text"},Ss(e,i,s-i+1,[["enter",r,n],["enter",o,n],["exit",o,n],["exit",r,n]])),e}function KS(e,n,s){let i=0;return r;function r(m){return e.enter("atxHeading"),o(m)}function o(m){return e.enter("atxHeadingSequence"),l(m)}function l(m){return m===35&&i++<6?(e.consume(m),l):m===null||bn(m)?(e.exit("atxHeadingSequence"),c(m)):s(m)}function c(m){return m===35?(e.enter("atxHeadingSequence"),u(m)):m===null||Ct(m)?(e.exit("atxHeading"),n(m)):Zt(m)?an(e,c,"whitespace")(m):(e.enter("atxHeadingText"),d(m))}function u(m){return m===35?(e.consume(m),u):(e.exit("atxHeadingSequence"),c(m))}function d(m){return m===null||m===35||bn(m)?(e.exit("atxHeadingText"),c(m)):(e.consume(m),d)}}const GS=["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"],Cm=["pre","script","style","textarea"],JS={concrete:!0,name:"htmlFlow",resolveTo:XS,tokenize:ZS},YS={partial:!0,tokenize:tC},QS={partial:!0,tokenize:eC};function XS(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 ZS(e,n,s){const i=this;let r,o,l,c,u;return d;function d(k){return m(k)}function m(k){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(k),h}function h(k){return k===33?(e.consume(k),f):k===47?(e.consume(k),o=!0,b):k===63?(e.consume(k),r=3,i.interrupt?n:E):us(k)?(e.consume(k),l=String.fromCharCode(k),v):s(k)}function f(k){return k===45?(e.consume(k),r=2,p):k===91?(e.consume(k),r=5,c=0,g):us(k)?(e.consume(k),r=4,i.interrupt?n:E):s(k)}function p(k){return k===45?(e.consume(k),i.interrupt?n:E):s(k)}function g(k){const O="CDATA[";return k===O.charCodeAt(c++)?(e.consume(k),c===O.length?i.interrupt?n:U:g):s(k)}function b(k){return us(k)?(e.consume(k),l=String.fromCharCode(k),v):s(k)}function v(k){if(k===null||k===47||k===62||bn(k)){const O=k===47,ne=l.toLowerCase();return!O&&!o&&Cm.includes(ne)?(r=1,i.interrupt?n(k):U(k)):GS.includes(l.toLowerCase())?(r=6,O?(e.consume(k),x):i.interrupt?n(k):U(k)):(r=7,i.interrupt&&!i.parser.lazy[i.now().line]?s(k):o?y(k):j(k))}return k===45||is(k)?(e.consume(k),l+=String.fromCharCode(k),v):s(k)}function x(k){return k===62?(e.consume(k),i.interrupt?n:U):s(k)}function y(k){return Zt(k)?(e.consume(k),y):M(k)}function j(k){return k===47?(e.consume(k),M):k===58||k===95||us(k)?(e.consume(k),N):Zt(k)?(e.consume(k),j):M(k)}function N(k){return k===45||k===46||k===58||k===95||is(k)?(e.consume(k),N):C(k)}function C(k){return k===61?(e.consume(k),w):Zt(k)?(e.consume(k),C):j(k)}function w(k){return k===null||k===60||k===61||k===62||k===96?s(k):k===34||k===39?(e.consume(k),u=k,_):Zt(k)?(e.consume(k),w):S(k)}function _(k){return k===u?(e.consume(k),u=null,z):k===null||Ct(k)?s(k):(e.consume(k),_)}function S(k){return k===null||k===34||k===39||k===47||k===60||k===61||k===62||k===96||bn(k)?C(k):(e.consume(k),S)}function z(k){return k===47||k===62||Zt(k)?j(k):s(k)}function M(k){return k===62?(e.consume(k),T):s(k)}function T(k){return k===null||Ct(k)?U(k):Zt(k)?(e.consume(k),T):s(k)}function U(k){return k===45&&r===2?(e.consume(k),F):k===60&&r===1?(e.consume(k),W):k===62&&r===4?(e.consume(k),$):k===63&&r===3?(e.consume(k),E):k===93&&r===5?(e.consume(k),te):Ct(k)&&(r===6||r===7)?(e.exit("htmlFlowData"),e.check(YS,P,V)(k)):k===null||Ct(k)?(e.exit("htmlFlowData"),V(k)):(e.consume(k),U)}function V(k){return e.check(QS,L,P)(k)}function L(k){return e.enter("lineEnding"),e.consume(k),e.exit("lineEnding"),R}function R(k){return k===null||Ct(k)?V(k):(e.enter("htmlFlowData"),U(k))}function F(k){return k===45?(e.consume(k),E):U(k)}function W(k){return k===47?(e.consume(k),l="",G):U(k)}function G(k){if(k===62){const O=l.toLowerCase();return Cm.includes(O)?(e.consume(k),$):U(k)}return us(k)&&l.length<8?(e.consume(k),l+=String.fromCharCode(k),G):U(k)}function te(k){return k===93?(e.consume(k),E):U(k)}function E(k){return k===62?(e.consume(k),$):k===45&&r===2?(e.consume(k),E):U(k)}function $(k){return k===null||Ct(k)?(e.exit("htmlFlowData"),P(k)):(e.consume(k),$)}function P(k){return e.exit("htmlFlow"),n(k)}}function eC(e,n,s){const i=this;return r;function r(l){return Ct(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),o):s(l)}function o(l){return i.parser.lazy[i.now().line]?s(l):n(l)}}function tC(e,n,s){return i;function i(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(Lr,n,s)}}const nC={name:"htmlText",tokenize:sC};function sC(e,n,s){const i=this;let r,o,l;return c;function c(E){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(E),u}function u(E){return E===33?(e.consume(E),d):E===47?(e.consume(E),C):E===63?(e.consume(E),j):us(E)?(e.consume(E),S):s(E)}function d(E){return E===45?(e.consume(E),m):E===91?(e.consume(E),o=0,g):us(E)?(e.consume(E),y):s(E)}function m(E){return E===45?(e.consume(E),p):s(E)}function h(E){return E===null?s(E):E===45?(e.consume(E),f):Ct(E)?(l=h,W(E)):(e.consume(E),h)}function f(E){return E===45?(e.consume(E),p):h(E)}function p(E){return E===62?F(E):E===45?f(E):h(E)}function g(E){const $="CDATA[";return E===$.charCodeAt(o++)?(e.consume(E),o===$.length?b:g):s(E)}function b(E){return E===null?s(E):E===93?(e.consume(E),v):Ct(E)?(l=b,W(E)):(e.consume(E),b)}function v(E){return E===93?(e.consume(E),x):b(E)}function x(E){return E===62?F(E):E===93?(e.consume(E),x):b(E)}function y(E){return E===null||E===62?F(E):Ct(E)?(l=y,W(E)):(e.consume(E),y)}function j(E){return E===null?s(E):E===63?(e.consume(E),N):Ct(E)?(l=j,W(E)):(e.consume(E),j)}function N(E){return E===62?F(E):j(E)}function C(E){return us(E)?(e.consume(E),w):s(E)}function w(E){return E===45||is(E)?(e.consume(E),w):_(E)}function _(E){return Ct(E)?(l=_,W(E)):Zt(E)?(e.consume(E),_):F(E)}function S(E){return E===45||is(E)?(e.consume(E),S):E===47||E===62||bn(E)?z(E):s(E)}function z(E){return E===47?(e.consume(E),F):E===58||E===95||us(E)?(e.consume(E),M):Ct(E)?(l=z,W(E)):Zt(E)?(e.consume(E),z):F(E)}function M(E){return E===45||E===46||E===58||E===95||is(E)?(e.consume(E),M):T(E)}function T(E){return E===61?(e.consume(E),U):Ct(E)?(l=T,W(E)):Zt(E)?(e.consume(E),T):z(E)}function U(E){return E===null||E===60||E===61||E===62||E===96?s(E):E===34||E===39?(e.consume(E),r=E,V):Ct(E)?(l=U,W(E)):Zt(E)?(e.consume(E),U):(e.consume(E),L)}function V(E){return E===r?(e.consume(E),r=void 0,R):E===null?s(E):Ct(E)?(l=V,W(E)):(e.consume(E),V)}function L(E){return E===null||E===34||E===39||E===60||E===61||E===96?s(E):E===47||E===62||bn(E)?z(E):(e.consume(E),L)}function R(E){return E===47||E===62||bn(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"),G}function G(E){return Zt(E)?an(e,te,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E):te(E)}function te(E){return e.enter("htmlTextData"),l(E)}}const _d={name:"labelEnd",resolveAll:oC,resolveTo:lC,tokenize:cC},iC={tokenize:dC},aC={tokenize:uC},rC={tokenize:mC};function oC(e){let n=-1;const s=[];for(;++n<e.length;){const i=e[n][1];if(s.push(e[n]),i.type==="labelImage"||i.type==="labelLink"||i.type==="labelEnd"){const r=i.type==="labelImage"?4:2;i.type="data",n+=r}}return e.length!==s.length&&Ss(e,0,e.length,s),e}function lC(e,n){let s=e.length,i=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")){i=2;break}}else r.type==="labelEnd"&&(l=s);const u={type:e[o][1].type==="labelLink"?"link":"image",start:{...e[o][1].start},end:{...e[e.length-1][1].end}},d={type:"label",start:{...e[o][1].start},end:{...e[l][1].end}},m={type:"labelText",start:{...e[o+i+2][1].end},end:{...e[l-2][1].start}};return c=[["enter",u,n],["enter",d,n]],c=Ps(c,e.slice(o+1,o+i+3)),c=Ps(c,[["enter",m,n]]),c=Ps(c,nl(n.parser.constructs.insideSpan.null,e.slice(o+i+4,l-3),n)),c=Ps(c,[["exit",m,n],e[l-2],e[l-1],["exit",d,n]]),c=Ps(c,e.slice(l+1)),c=Ps(c,[["exit",u,n]]),Ss(e,o,e.length,c),e}function cC(e,n,s){const i=this;let r=i.events.length,o,l;for(;r--;)if((i.events[r][1].type==="labelImage"||i.events[r][1].type==="labelLink")&&!i.events[r][1]._balanced){o=i.events[r][1];break}return c;function c(f){return o?o._inactive?h(f):(l=i.parser.defined.includes(qs(i.sliceSerialize({start:o.end,end:i.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(f),e.exit("labelMarker"),e.exit("labelEnd"),u):s(f)}function u(f){return f===40?e.attempt(iC,m,l?m:h)(f):f===91?e.attempt(aC,m,l?d:h)(f):l?m(f):h(f)}function d(f){return e.attempt(rC,m,h)(f)}function m(f){return n(f)}function h(f){return o._balanced=!0,s(f)}}function dC(e,n,s){return i;function i(h){return e.enter("resource"),e.enter("resourceMarker"),e.consume(h),e.exit("resourceMarker"),r}function r(h){return bn(h)?pr(e,o)(h):o(h)}function o(h){return h===41?m(h):jf(e,l,c,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(h)}function l(h){return bn(h)?pr(e,u)(h):m(h)}function c(h){return s(h)}function u(h){return h===34||h===39||h===40?wf(e,d,s,"resourceTitle","resourceTitleMarker","resourceTitleString")(h):m(h)}function d(h){return bn(h)?pr(e,m)(h):m(h)}function m(h){return h===41?(e.enter("resourceMarker"),e.consume(h),e.exit("resourceMarker"),e.exit("resource"),n):s(h)}}function uC(e,n,s){const i=this;return r;function r(c){return kf.call(i,e,o,l,"reference","referenceMarker","referenceString")(c)}function o(c){return i.parser.defined.includes(qs(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)))?n(c):s(c)}function l(c){return s(c)}}function mC(e,n,s){return i;function i(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 hC={name:"labelStartImage",resolveAll:_d.resolveAll,tokenize:pC};function pC(e,n,s){const i=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 i.parser.constructs?s(c):n(c)}}const fC={name:"labelStartLink",resolveAll:_d.resolveAll,tokenize:gC};function gC(e,n,s){const i=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 i.parser.constructs?s(l):n(l)}}const Fl={name:"lineEnding",tokenize:bC};function bC(e,n){return s;function s(i){return e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),an(e,n,"linePrefix")}}const xo={name:"thematicBreak",tokenize:xC};function xC(e,n,s){let i=0,r;return o;function o(d){return e.enter("thematicBreak"),l(d)}function l(d){return r=d,c(d)}function c(d){return d===r?(e.enter("thematicBreakSequence"),u(d)):i>=3&&(d===null||Ct(d))?(e.exit("thematicBreak"),n(d)):s(d)}function u(d){return d===r?(e.consume(d),i++,u):(e.exit("thematicBreakSequence"),Zt(d)?an(e,c,"whitespace")(d):c(d))}}const gs={continuation:{tokenize:kC},exit:NC,name:"list",tokenize:jC},vC={partial:!0,tokenize:SC},yC={partial:!0,tokenize:wC};function jC(e,n,s){const i=this,r=i.events[i.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=i.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(g==="listUnordered"?!i.containerState.marker||p===i.containerState.marker:qc(p)){if(i.containerState.type||(i.containerState.type=g,e.enter(g,{_container:!0})),g==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(xo,s,d)(p):d(p);if(!i.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),u(p)}return s(p)}function u(p){return qc(p)&&++l<10?(e.consume(p),u):(!i.interrupt||l<2)&&(i.containerState.marker?p===i.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),d(p)):s(p)}function d(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),i.containerState.marker=i.containerState.marker||p,e.check(Lr,i.interrupt?s:m,e.attempt(vC,f,h))}function m(p){return i.containerState.initialBlankLine=!0,o++,f(p)}function h(p){return Zt(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),f):s(p)}function f(p){return i.containerState.size=o+i.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(p)}}function kC(e,n,s){const i=this;return i.containerState._closeFlow=void 0,e.check(Lr,r,o);function r(c){return i.containerState.furtherBlankLines=i.containerState.furtherBlankLines||i.containerState.initialBlankLine,an(e,n,"listItemIndent",i.containerState.size+1)(c)}function o(c){return i.containerState.furtherBlankLines||!Zt(c)?(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,l(c)):(i.containerState.furtherBlankLines=void 0,i.containerState.initialBlankLine=void 0,e.attempt(yC,n,l)(c))}function l(c){return i.containerState._closeFlow=!0,i.interrupt=void 0,an(e,e.attempt(gs,n,s),"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(c)}}function wC(e,n,s){const i=this;return an(e,r,"listItemIndent",i.containerState.size+1);function r(o){const l=i.events[i.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===i.containerState.size?n(o):s(o)}}function NC(e){e.exit(this.containerState.type)}function SC(e,n,s){const i=this;return an(e,r,"listItemPrefixWhitespace",i.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function r(o){const l=i.events[i.events.length-1];return!Zt(o)&&l&&l[1].type==="listItemPrefixWhitespace"?n(o):s(o)}}const Em={name:"setextUnderline",resolveTo:CC,tokenize:EC};function CC(e,n){let s=e.length,i,r,o;for(;s--;)if(e[s][0]==="enter"){if(e[s][1].type==="content"){i=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[i][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[i][1],n]),e[i][1].end={...e[o][1].end}):e[i][1]=l,e.push(["exit",l,n]),e}function EC(e,n,s){const i=this;let r;return o;function o(d){let m=i.events.length,h;for(;m--;)if(i.events[m][1].type!=="lineEnding"&&i.events[m][1].type!=="linePrefix"&&i.events[m][1].type!=="content"){h=i.events[m][1].type==="paragraph";break}return!i.parser.lazy[i.now().line]&&(i.interrupt||h)?(e.enter("setextHeadingLine"),r=d,l(d)):s(d)}function l(d){return e.enter("setextHeadingLineSequence"),c(d)}function c(d){return d===r?(e.consume(d),c):(e.exit("setextHeadingLineSequence"),Zt(d)?an(e,u,"lineSuffix")(d):u(d))}function u(d){return d===null||Ct(d)?(e.exit("setextHeadingLine"),n(d)):s(d)}}const MC={tokenize:_C};function _C(e){const n=this,s=e.attempt(Lr,i,e.attempt(this.parser.constructs.flowInitial,r,an(e,e.attempt(this.parser.constructs.flow,r,e.attempt(IS,r)),"linePrefix")));return s;function i(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 AC={resolveAll:Sf()},RC=Nf("string"),TC=Nf("text");function Nf(e){return{resolveAll:Sf(e==="text"?PC:void 0),tokenize:n};function n(s){const i=this,r=this.parser.constructs[e],o=s.attempt(r,l,c);return l;function l(m){return d(m)?o(m):c(m)}function c(m){if(m===null){s.consume(m);return}return s.enter("data"),s.consume(m),u}function u(m){return d(m)?(s.exit("data"),o(m)):(s.consume(m),u)}function d(m){if(m===null)return!0;const h=r[m];let f=-1;if(h)for(;++f<h.length;){const p=h[f];if(!p.previous||p.previous.call(i,i.previous))return!0}return!1}}}function Sf(e){return n;function n(s,i){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,i):s}}function PC(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 i=e[s-1][1],r=n.sliceStream(i);let o=r.length,l=-1,c=0,u;for(;o--;){const d=r[o];if(typeof d=="string"){for(l=d.length;d.charCodeAt(l-1)===32;)c++,l--;if(l)break;l=-1}else if(d===-2)u=!0,c++;else if(d!==-1){o++;break}}if(n._contentTypeTextTrailing&&s===e.length&&(c=0),c){const d={type:s===e.length||u||c<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:o?l:i.start._bufferIndex+l,_index:i.start._index+o,line:i.end.line,column:i.end.column-c,offset:i.end.offset-c},end:{...i.end}};i.end={...d.start},i.start.offset===i.end.offset?Object.assign(i,d):(e.splice(s,0,["enter",d,n],["exit",d,n]),s+=2)}s++}return e}const IC={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:bf},$C={91:FS},DC={[-2]:zl,[-1]:zl,32:zl},LC={35:VS,42:xo,45:[Em,xo],60:JS,61:Em,95:xo,96:Sm,126:Sm},zC={38:vf,92:xf},FC={[-5]:Fl,[-4]:Fl,[-3]:Fl,33:hC,38:vf,42:Vc,60:[fS,nC],91:fC,92:[HS,xf],93:_d,95:Vc,96:MS},OC={null:[Vc,AC]},UC={null:[42,95]},BC={null:[]},HC=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:UC,contentInitial:$C,disable:BC,document:IC,flow:LC,flowInitial:DC,insideSpan:OC,string:zC,text:FC},Symbol.toStringTag,{value:"Module"}));function qC(e,n,s){let i={_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 u={attempt:_(C),check:_(w),consume:y,enter:j,exit:N,interrupt:_(w,{interrupt:!0})},d={code:null,containerState:{},defineSkip:b,events:[],now:g,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:h};let m=n.tokenize.call(d,u);return n.resolveAll&&o.push(n),d;function h(T){return l=Ps(l,T),v(),l[l.length-1]!==null?[]:(S(n,0),d.events=nl(o,d.events,d),d.events)}function f(T,U){return WC(p(T),U)}function p(T){return VC(l,T)}function g(){const{_bufferIndex:T,_index:U,line:V,column:L,offset:R}=i;return{_bufferIndex:T,_index:U,line:V,column:L,offset:R}}function b(T){r[T.line]=T.column,M()}function v(){let T;for(;i._index<l.length;){const U=l[i._index];if(typeof U=="string")for(T=i._index,i._bufferIndex<0&&(i._bufferIndex=0);i._index===T&&i._bufferIndex<U.length;)x(U.charCodeAt(i._bufferIndex));else x(U)}}function x(T){m=m(T)}function y(T){Ct(T)?(i.line++,i.column=1,i.offset+=T===-3?2:1,M()):T!==-1&&(i.column++,i.offset++),i._bufferIndex<0?i._index++:(i._bufferIndex++,i._bufferIndex===l[i._index].length&&(i._bufferIndex=-1,i._index++)),d.previous=T}function j(T,U){const V=U||{};return V.type=T,V.start=g(),d.events.push(["enter",V,d]),c.push(V),V}function N(T){const U=c.pop();return U.end=g(),d.events.push(["exit",U,d]),U}function C(T,U){S(T,U.from)}function w(T,U){U.restore()}function _(T,U){return V;function V(L,R,F){let W,G,te,E;return Array.isArray(L)?P(L):"tokenize"in L?P([L]):$(L);function $(we){return ie;function ie(ce){const ke=ce!==null&&we[ce],D=ce!==null&&we.null,se=[...Array.isArray(ke)?ke:ke?[ke]:[],...Array.isArray(D)?D:D?[D]:[]];return P(se)(ce)}}function P(we){return W=we,G=0,we.length===0?F:k(we[G])}function k(we){return ie;function ie(ce){return E=z(),te=we,we.partial||(d.currentConstruct=we),we.name&&d.parser.constructs.disable.null.includes(we.name)?ne():we.tokenize.call(U?Object.assign(Object.create(d),U):d,u,O,ne)(ce)}}function O(we){return T(te,E),R}function ne(we){return E.restore(),++G<W.length?k(W[G]):F}}}function S(T,U){T.resolveAll&&!o.includes(T)&&o.push(T),T.resolve&&Ss(d.events,U,d.events.length-U,T.resolve(d.events.slice(U),d)),T.resolveTo&&(d.events=T.resolveTo(d.events,d))}function z(){const T=g(),U=d.previous,V=d.currentConstruct,L=d.events.length,R=Array.from(c);return{from:L,restore:F};function F(){i=T,d.previous=U,d.currentConstruct=V,d.events.length=L,c=R,M()}}function M(){i.line in r&&i.column<2&&(i.column=r[i.line],i.offset+=r[i.line]-1)}}function VC(e,n){const s=n.start._index,i=n.start._bufferIndex,r=n.end._index,o=n.end._bufferIndex;let l;if(s===r)l=[e[s].slice(i,o)];else{if(l=e.slice(s,r),i>-1){const c=l[0];typeof c=="string"?l[0]=c.slice(i):l.shift()}o>0&&l.push(e[r].slice(0,o))}return l}function WC(e,n){let s=-1;const i=[];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=`
|
|
620
|
-
`;break}case-3:{l=`\r
|
|
621
|
-
`;break}case-2:{l=n?" ":" ";break}case-1:{if(!n&&r)continue;l=" ";break}default:l=String.fromCharCode(o)}r=o===-2,i.push(l)}return i.join("")}function KC(e){const i={constructs:ff([HC,...(e||{}).extensions||[]]),content:r(lS),defined:[],document:r(dS),flow:r(MC),lazy:{},string:r(RC),text:r(TC)};return i;function r(o){return l;function l(c){return qC(i,o,c)}}}function GC(e){for(;!yf(e););return e}const Mm=/[\0\t\n\r]/g;function JC(){let e=1,n="",s=!0,i;return r;function r(o,l,c){const u=[];let d,m,h,f,p;for(o=n+(typeof o=="string"?o.toString():new TextDecoder(l||void 0).decode(o)),h=0,n="",s&&(o.charCodeAt(0)===65279&&h++,s=void 0);h<o.length;){if(Mm.lastIndex=h,d=Mm.exec(o),f=d&&d.index!==void 0?d.index:o.length,p=o.charCodeAt(f),!d){n=o.slice(h);break}if(p===10&&h===f&&i)u.push(-3),i=void 0;else switch(i&&(u.push(-5),i=void 0),h<f&&(u.push(o.slice(h,f)),e+=f-h),p){case 0:{u.push(65533),e++;break}case 9:{for(m=Math.ceil(e/4)*4,u.push(-2);e++<m;)u.push(-1);break}case 10:{u.push(-4),e=1;break}default:i=!0,e=1}h=f+1}return c&&(i&&u.push(-5),n&&u.push(n),u.push(null)),u}}const YC=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function QC(e){return e.replace(YC,XC)}function XC(e,n,s){if(n)return n;if(s.charCodeAt(0)===35){const r=s.charCodeAt(1),o=r===120||r===88;return gf(s.slice(o?2:1),o?16:10)}return Md(s)||e}const Cf={}.hasOwnProperty;function ZC(e,n,s){return n&&typeof n=="object"&&(s=n,n=void 0),e2(s)(GC(KC(s).document().write(JC()(e,n,!0))))}function e2(e){const n={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(Fe),autolinkProtocol:z,autolinkEmail:z,atxHeading:o(me),blockQuote:o(D),characterEscape:z,characterReference:z,codeFenced:o(se),codeFencedFenceInfo:l,codeFencedFenceMeta:l,codeIndented:o(se,l),codeText:o(Z,l),codeTextData:z,data:z,codeFlowValue:z,definition:o(ge),definitionDestinationString:l,definitionLabelString:l,definitionTitleString:l,emphasis:o(ue),hardBreakEscape:o(ae),hardBreakTrailing:o(ae),htmlFlow:o(be,l),htmlFlowData:z,htmlText:o(be,l),htmlTextData:z,image:o(Ae),label:l,link:o(Fe),listItem:o(et),listItemValue:f,listOrdered:o(at,h),listUnordered:o(at),paragraph:o(Ye),reference:k,referenceString:l,resourceDestinationString:l,resourceTitleString:l,setextHeading:o(me),strong:o(rt),thematicBreak:o(We)},exit:{atxHeading:u(),atxHeadingSequence:C,autolink:u(),autolinkEmail:ke,autolinkProtocol:ce,blockQuote:u(),characterEscapeValue:M,characterReferenceMarkerHexadecimal:ne,characterReferenceMarkerNumeric:ne,characterReferenceValue:we,characterReference:ie,codeFenced:u(v),codeFencedFence:b,codeFencedFenceInfo:p,codeFencedFenceMeta:g,codeFlowValue:M,codeIndented:u(x),codeText:u(R),codeTextData:M,data:M,definition:u(),definitionDestinationString:N,definitionLabelString:y,definitionTitleString:j,emphasis:u(),hardBreakEscape:u(U),hardBreakTrailing:u(U),htmlFlow:u(V),htmlFlowData:M,htmlText:u(L),htmlTextData:M,image:u(W),label:te,labelText:G,lineEnding:T,link:u(F),listItem:u(),listOrdered:u(),listUnordered:u(),paragraph:u(),referenceString:O,resourceDestinationString:E,resourceTitleString:$,resource:P,setextHeading:u(S),setextHeadingLineSequence:_,setextHeadingText:w,strong:u(),thematicBreak:u()}};Ef(n,(e||{}).mdastExtensions||[]);const s={};return i;function i(oe){let xe={type:"root",children:[]};const ee={stack:[xe],tokenStack:[],config:n,enter:c,exit:d,buffer:l,resume:m,data:s},Re=[];let Ue=-1;for(;++Ue<oe.length;)if(oe[Ue][1].type==="listOrdered"||oe[Ue][1].type==="listUnordered")if(oe[Ue][0]==="enter")Re.push(Ue);else{const pe=Re.pop();Ue=r(oe,pe,Ue)}for(Ue=-1;++Ue<oe.length;){const pe=n[oe[Ue][0]];Cf.call(pe,oe[Ue][1].type)&&pe[oe[Ue][1].type].call(Object.assign({sliceSerialize:oe[Ue][2].sliceSerialize},ee),oe[Ue][1])}if(ee.tokenStack.length>0){const pe=ee.tokenStack[ee.tokenStack.length-1];(pe[1]||_m).call(ee,void 0,pe[0])}for(xe.position={start:yi(oe.length>0?oe[0][1].start:{line:1,column:1,offset:0}),end:yi(oe.length>0?oe[oe.length-2][1].end:{line:1,column:1,offset:0})},Ue=-1;++Ue<n.transforms.length;)xe=n.transforms[Ue](xe)||xe;return xe}function r(oe,xe,ee){let Re=xe-1,Ue=-1,pe=!1,Me,ze,tt,ye;for(;++Re<=ee;){const de=oe[Re];switch(de[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{de[0]==="enter"?Ue++:Ue--,ye=void 0;break}case"lineEndingBlank":{de[0]==="enter"&&(Me&&!ye&&!Ue&&!tt&&(tt=Re),ye=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:ye=void 0}if(!Ue&&de[0]==="enter"&&de[1].type==="listItemPrefix"||Ue===-1&&de[0]==="exit"&&(de[1].type==="listUnordered"||de[1].type==="listOrdered")){if(Me){let Ie=Re;for(ze=void 0;Ie--;){const fe=oe[Ie];if(fe[1].type==="lineEnding"||fe[1].type==="lineEndingBlank"){if(fe[0]==="exit")continue;ze&&(oe[ze][1].type="lineEndingBlank",pe=!0),fe[1].type="lineEnding",ze=Ie}else if(!(fe[1].type==="linePrefix"||fe[1].type==="blockQuotePrefix"||fe[1].type==="blockQuotePrefixWhitespace"||fe[1].type==="blockQuoteMarker"||fe[1].type==="listItemIndent"))break}tt&&(!ze||tt<ze)&&(Me._spread=!0),Me.end=Object.assign({},ze?oe[ze][1].start:de[1].end),oe.splice(ze||Re,0,["exit",Me,de[2]]),Re++,ee++}if(de[1].type==="listItemPrefix"){const Ie={type:"listItem",_spread:!1,start:Object.assign({},de[1].start),end:void 0};Me=Ie,oe.splice(Re,0,["enter",Ie,de[2]]),Re++,ee++,tt=void 0,ye=!0}}}return oe[xe][1]._spread=pe,ee}function o(oe,xe){return ee;function ee(Re){c.call(this,oe(Re),Re),xe&&xe.call(this,Re)}}function l(){this.stack.push({type:"fragment",children:[]})}function c(oe,xe,ee){this.stack[this.stack.length-1].children.push(oe),this.stack.push(oe),this.tokenStack.push([xe,ee||void 0]),oe.position={start:yi(xe.start),end:void 0}}function u(oe){return xe;function xe(ee){oe&&oe.call(this,ee),d.call(this,ee)}}function d(oe,xe){const ee=this.stack.pop(),Re=this.tokenStack.pop();if(Re)Re[0].type!==oe.type&&(xe?xe.call(this,oe,Re[0]):(Re[1]||_m).call(this,oe,Re[0]));else throw new Error("Cannot close `"+oe.type+"` ("+hr({start:oe.start,end:oe.end})+"): it’s not open");ee.position.end=yi(oe.end)}function m(){return Ed(this.stack.pop())}function h(){this.data.expectingFirstListItemValue=!0}function f(oe){if(this.data.expectingFirstListItemValue){const xe=this.stack[this.stack.length-2];xe.start=Number.parseInt(this.sliceSerialize(oe),10),this.data.expectingFirstListItemValue=void 0}}function p(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.lang=oe}function g(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.meta=oe}function b(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function v(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.value=oe.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function x(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.value=oe.replace(/(\r?\n|\r)$/g,"")}function y(oe){const xe=this.resume(),ee=this.stack[this.stack.length-1];ee.label=xe,ee.identifier=qs(this.sliceSerialize(oe)).toLowerCase()}function j(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.title=oe}function N(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.url=oe}function C(oe){const xe=this.stack[this.stack.length-1];if(!xe.depth){const ee=this.sliceSerialize(oe).length;xe.depth=ee}}function w(){this.data.setextHeadingSlurpLineEnding=!0}function _(oe){const xe=this.stack[this.stack.length-1];xe.depth=this.sliceSerialize(oe).codePointAt(0)===61?1:2}function S(){this.data.setextHeadingSlurpLineEnding=void 0}function z(oe){const ee=this.stack[this.stack.length-1].children;let Re=ee[ee.length-1];(!Re||Re.type!=="text")&&(Re=Oe(),Re.position={start:yi(oe.start),end:void 0},ee.push(Re)),this.stack.push(Re)}function M(oe){const xe=this.stack.pop();xe.value+=this.sliceSerialize(oe),xe.position.end=yi(oe.end)}function T(oe){const xe=this.stack[this.stack.length-1];if(this.data.atHardBreak){const ee=xe.children[xe.children.length-1];ee.position.end=yi(oe.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&n.canContainEols.includes(xe.type)&&(z.call(this,oe),M.call(this,oe))}function U(){this.data.atHardBreak=!0}function V(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.value=oe}function L(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.value=oe}function R(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.value=oe}function F(){const oe=this.stack[this.stack.length-1];if(this.data.inReference){const xe=this.data.referenceType||"shortcut";oe.type+="Reference",oe.referenceType=xe,delete oe.url,delete oe.title}else delete oe.identifier,delete oe.label;this.data.referenceType=void 0}function W(){const oe=this.stack[this.stack.length-1];if(this.data.inReference){const xe=this.data.referenceType||"shortcut";oe.type+="Reference",oe.referenceType=xe,delete oe.url,delete oe.title}else delete oe.identifier,delete oe.label;this.data.referenceType=void 0}function G(oe){const xe=this.sliceSerialize(oe),ee=this.stack[this.stack.length-2];ee.label=QC(xe),ee.identifier=qs(xe).toLowerCase()}function te(){const oe=this.stack[this.stack.length-1],xe=this.resume(),ee=this.stack[this.stack.length-1];if(this.data.inReference=!0,ee.type==="link"){const Re=oe.children;ee.children=Re}else ee.alt=xe}function E(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.url=oe}function $(){const oe=this.resume(),xe=this.stack[this.stack.length-1];xe.title=oe}function P(){this.data.inReference=void 0}function k(){this.data.referenceType="collapsed"}function O(oe){const xe=this.resume(),ee=this.stack[this.stack.length-1];ee.label=xe,ee.identifier=qs(this.sliceSerialize(oe)).toLowerCase(),this.data.referenceType="full"}function ne(oe){this.data.characterReferenceType=oe.type}function we(oe){const xe=this.sliceSerialize(oe),ee=this.data.characterReferenceType;let Re;ee?(Re=gf(xe,ee==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):Re=Md(xe);const Ue=this.stack[this.stack.length-1];Ue.value+=Re}function ie(oe){const xe=this.stack.pop();xe.position.end=yi(oe.end)}function ce(oe){M.call(this,oe);const xe=this.stack[this.stack.length-1];xe.url=this.sliceSerialize(oe)}function ke(oe){M.call(this,oe);const xe=this.stack[this.stack.length-1];xe.url="mailto:"+this.sliceSerialize(oe)}function D(){return{type:"blockquote",children:[]}}function se(){return{type:"code",lang:null,meta:null,value:""}}function Z(){return{type:"inlineCode",value:""}}function ge(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function ue(){return{type:"emphasis",children:[]}}function me(){return{type:"heading",depth:0,children:[]}}function ae(){return{type:"break"}}function be(){return{type:"html",value:""}}function Ae(){return{type:"image",title:null,url:"",alt:null}}function Fe(){return{type:"link",title:null,url:"",children:[]}}function at(oe){return{type:"list",ordered:oe.type==="listOrdered",start:null,spread:oe._spread,children:[]}}function et(oe){return{type:"listItem",spread:oe._spread,checked:null,children:[]}}function Ye(){return{type:"paragraph",children:[]}}function rt(){return{type:"strong",children:[]}}function Oe(){return{type:"text",value:""}}function We(){return{type:"thematicBreak"}}}function yi(e){return{line:e.line,column:e.column,offset:e.offset}}function Ef(e,n){let s=-1;for(;++s<n.length;){const i=n[s];Array.isArray(i)?Ef(e,i):t2(e,i)}}function t2(e,n){let s;for(s in n)if(Cf.call(n,s))switch(s){case"canContainEols":{const i=n[s];i&&e[s].push(...i);break}case"transforms":{const i=n[s];i&&e[s].push(...i);break}case"enter":case"exit":{const i=n[s];i&&Object.assign(e[s],i);break}}}function _m(e,n){throw e?new Error("Cannot close `"+e.type+"` ("+hr({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+hr({start:n.start,end:n.end})+") is open"):new Error("Cannot close document, a token (`"+n.type+"`, "+hr({start:n.start,end:n.end})+") is still open")}function n2(e){const n=this;n.parser=s;function s(i){return ZC(i,{...n.data("settings"),...e,extensions:n.data("micromarkExtensions")||[],mdastExtensions:n.data("fromMarkdownExtensions")||[]})}}function s2(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 i2(e,n){const s={type:"element",tagName:"br",properties:{},children:[]};return e.patch(n,s),[e.applyData(n,s),{type:"text",value:`
|
|
622
|
-
`}]}function a2(e,n){const s=n.value?n.value+`
|
|
623
|
-
`:"",i={},r=n.lang?n.lang.split(/\s+/):[];r.length>0&&(i.className=["language-"+r[0]]);let o={type:"element",tagName:"code",properties:i,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 r2(e,n){const s={type:"element",tagName:"del",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function o2(e,n){const s={type:"element",tagName:"em",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function l2(e,n){const s=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",i=String(n.identifier).toUpperCase(),r=Ia(i.toLowerCase()),o=e.footnoteOrder.indexOf(i);let l,c=e.footnoteCounts.get(i);c===void 0?(c=0,e.footnoteOrder.push(i),l=e.footnoteOrder.length):l=o+1,c+=1,e.footnoteCounts.set(i,c);const u={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,u);const d={type:"element",tagName:"sup",properties:{},children:[u]};return e.patch(n,d),e.applyData(n,d)}function c2(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 d2(e,n){if(e.options.allowDangerousHtml){const s={type:"raw",value:n.value};return e.patch(n,s),e.applyData(n,s)}}function Mf(e,n){const s=n.referenceType;let i="]";if(s==="collapsed"?i+="[]":s==="full"&&(i+="["+(n.label||n.identifier)+"]"),n.type==="imageReference")return[{type:"text",value:"!["+n.alt+i}];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+=i:r.push({type:"text",value:i}),r}function u2(e,n){const s=String(n.identifier).toUpperCase(),i=e.definitionById.get(s);if(!i)return Mf(e,n);const r={src:Ia(i.url||""),alt:n.alt};i.title!==null&&i.title!==void 0&&(r.title=i.title);const o={type:"element",tagName:"img",properties:r,children:[]};return e.patch(n,o),e.applyData(n,o)}function m2(e,n){const s={src:Ia(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 i={type:"element",tagName:"img",properties:s,children:[]};return e.patch(n,i),e.applyData(n,i)}function h2(e,n){const s={type:"text",value:n.value.replace(/\r?\n|\r/g," ")};e.patch(n,s);const i={type:"element",tagName:"code",properties:{},children:[s]};return e.patch(n,i),e.applyData(n,i)}function p2(e,n){const s=String(n.identifier).toUpperCase(),i=e.definitionById.get(s);if(!i)return Mf(e,n);const r={href:Ia(i.url||"")};i.title!==null&&i.title!==void 0&&(r.title=i.title);const o={type:"element",tagName:"a",properties:r,children:e.all(n)};return e.patch(n,o),e.applyData(n,o)}function f2(e,n){const s={href:Ia(n.url)};n.title!==null&&n.title!==void 0&&(s.title=n.title);const i={type:"element",tagName:"a",properties:s,children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function g2(e,n,s){const i=e.all(n),r=s?b2(s):_f(n),o={},l=[];if(typeof n.checked=="boolean"){const m=i[0];let h;m&&m.type==="element"&&m.tagName==="p"?h=m:(h={type:"element",tagName:"p",properties:{},children:[]},i.unshift(h)),h.children.length>0&&h.children.unshift({type:"text",value:" "}),h.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<i.length;){const m=i[c];(r||c!==0||m.type!=="element"||m.tagName!=="p")&&l.push({type:"text",value:`
|
|
624
|
-
`}),m.type==="element"&&m.tagName==="p"&&!r?l.push(...m.children):l.push(m)}const u=i[i.length-1];u&&(r||u.type!=="element"||u.tagName!=="p")&&l.push({type:"text",value:`
|
|
625
|
-
`});const d={type:"element",tagName:"li",properties:o,children:l};return e.patch(n,d),e.applyData(n,d)}function b2(e){let n=!1;if(e.type==="list"){n=e.spread||!1;const s=e.children;let i=-1;for(;!n&&++i<s.length;)n=_f(s[i])}return n}function _f(e){const n=e.spread;return n??e.children.length>1}function x2(e,n){const s={},i=e.all(n);let r=-1;for(typeof n.start=="number"&&n.start!==1&&(s.start=n.start);++r<i.length;){const l=i[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(i,!0)};return e.patch(n,o),e.applyData(n,o)}function v2(e,n){const s={type:"element",tagName:"p",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function y2(e,n){const s={type:"root",children:e.wrap(e.all(n))};return e.patch(n,s),e.applyData(n,s)}function j2(e,n){const s={type:"element",tagName:"strong",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function k2(e,n){const s=e.all(n),i=s.shift(),r=[];if(i){const l={type:"element",tagName:"thead",properties:{},children:e.wrap([i],!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=wd(n.children[1]),u=lf(n.children[n.children.length-1]);c&&u&&(l.position={start:c,end:u}),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 w2(e,n,s){const i=s?s.children:void 0,o=(i?i.indexOf(n):1)===0?"th":"td",l=s&&s.type==="table"?s.align:void 0,c=l?l.length:n.children.length;let u=-1;const d=[];for(;++u<c;){const h=n.children[u],f={},p=l?l[u]:void 0;p&&(f.align=p);let g={type:"element",tagName:o,properties:f,children:[]};h&&(g.children=e.all(h),e.patch(h,g),g=e.applyData(h,g)),d.push(g)}const m={type:"element",tagName:"tr",properties:{},children:e.wrap(d,!0)};return e.patch(n,m),e.applyData(n,m)}function N2(e,n){const s={type:"element",tagName:"td",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}const Am=9,Rm=32;function S2(e){const n=String(e),s=/\r?\n|\r/g;let i=s.exec(n),r=0;const o=[];for(;i;)o.push(Tm(n.slice(r,i.index),r>0,!0),i[0]),r=i.index+i[0].length,i=s.exec(n);return o.push(Tm(n.slice(r),r>0,!1)),o.join("")}function Tm(e,n,s){let i=0,r=e.length;if(n){let o=e.codePointAt(i);for(;o===Am||o===Rm;)i++,o=e.codePointAt(i)}if(s){let o=e.codePointAt(r-1);for(;o===Am||o===Rm;)r--,o=e.codePointAt(r-1)}return r>i?e.slice(i,r):""}function C2(e,n){const s={type:"text",value:S2(String(n.value))};return e.patch(n,s),e.applyData(n,s)}function E2(e,n){const s={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(n,s),e.applyData(n,s)}const M2={blockquote:s2,break:i2,code:a2,delete:r2,emphasis:o2,footnoteReference:l2,heading:c2,html:d2,imageReference:u2,image:m2,inlineCode:h2,linkReference:p2,link:f2,listItem:g2,list:x2,paragraph:v2,root:y2,strong:j2,table:k2,tableCell:N2,tableRow:w2,text:C2,thematicBreak:E2,toml:no,yaml:no,definition:no,footnoteDefinition:no};function no(){}const Af=-1,sl=0,fr=1,Po=2,Ad=3,Rd=4,Td=5,Pd=6,Rf=7,Tf=8,Pm=typeof self=="object"?self:globalThis,_2=(e,n)=>{const s=(r,o)=>(e.set(o,r),r),i=r=>{if(e.has(r))return e.get(r);const[o,l]=n[r];switch(o){case sl:case Af:return s(l,r);case fr:{const c=s([],r);for(const u of l)c.push(i(u));return c}case Po:{const c=s({},r);for(const[u,d]of l)c[i(u)]=i(d);return c}case Ad:return s(new Date(l),r);case Rd:{const{source:c,flags:u}=l;return s(new RegExp(c,u),r)}case Td:{const c=s(new Map,r);for(const[u,d]of l)c.set(i(u),i(d));return c}case Pd:{const c=s(new Set,r);for(const u of l)c.add(i(u));return c}case Rf:{const{name:c,message:u}=l;return s(new Pm[c](u),r)}case Tf: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 Pm[o](l),r)};return i},Im=e=>_2(new Map,e)(0),oa="",{toString:A2}={},{keys:R2}=Object,Ga=e=>{const n=typeof e;if(n!=="object"||!e)return[sl,n];const s=A2.call(e).slice(8,-1);switch(s){case"Array":return[fr,oa];case"Object":return[Po,oa];case"Date":return[Ad,oa];case"RegExp":return[Rd,oa];case"Map":return[Td,oa];case"Set":return[Pd,oa];case"DataView":return[fr,s]}return s.includes("Array")?[fr,s]:s.includes("Error")?[Rf,s]:[Po,s]},so=([e,n])=>e===sl&&(n==="function"||n==="symbol"),T2=(e,n,s,i)=>{const r=(l,c)=>{const u=i.push(l)-1;return s.set(c,u),u},o=l=>{if(s.has(l))return s.get(l);let[c,u]=Ga(l);switch(c){case sl:{let m=l;switch(u){case"bigint":c=Tf,m=l.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+u);m=null;break;case"undefined":return r([Af],l)}return r([c,m],l)}case fr:{if(u){let f=l;return u==="DataView"?f=new Uint8Array(l.buffer):u==="ArrayBuffer"&&(f=new Uint8Array(l)),r([u,[...f]],l)}const m=[],h=r([c,m],l);for(const f of l)m.push(o(f));return h}case Po:{if(u)switch(u){case"BigInt":return r([u,l.toString()],l);case"Boolean":case"Number":case"String":return r([u,l.valueOf()],l)}if(n&&"toJSON"in l)return o(l.toJSON());const m=[],h=r([c,m],l);for(const f of R2(l))(e||!so(Ga(l[f])))&&m.push([o(f),o(l[f])]);return h}case Ad:return r([c,l.toISOString()],l);case Rd:{const{source:m,flags:h}=l;return r([c,{source:m,flags:h}],l)}case Td:{const m=[],h=r([c,m],l);for(const[f,p]of l)(e||!(so(Ga(f))||so(Ga(p))))&&m.push([o(f),o(p)]);return h}case Pd:{const m=[],h=r([c,m],l);for(const f of l)(e||!so(Ga(f)))&&m.push(o(f));return h}}const{message:d}=l;return r([c,{name:u,message:d}],l)};return o},$m=(e,{json:n,lossy:s}={})=>{const i=[];return T2(!(n||s),!!n,new Map,i)(e),i},Io=typeof structuredClone=="function"?(e,n)=>n&&("json"in n||"lossy"in n)?Im($m(e,n)):structuredClone(e):(e,n)=>Im($m(e,n));function P2(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 I2(e,n){return"Back to reference "+(e+1)+(n>1?"-"+n:"")}function $2(e){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",s=e.options.footnoteBackContent||P2,i=e.options.footnoteBackLabel||I2,r=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",l=e.options.footnoteLabelProperties||{className:["sr-only"]},c=[];let u=-1;for(;++u<e.footnoteOrder.length;){const d=e.footnoteById.get(e.footnoteOrder[u]);if(!d)continue;const m=e.all(d),h=String(d.identifier).toUpperCase(),f=Ia(h.toLowerCase());let p=0;const g=[],b=e.footnoteCounts.get(h);for(;b!==void 0&&++p<=b;){g.length>0&&g.push({type:"text",value:" "});let y=typeof s=="string"?s:s(u,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 i=="string"?i:i(u,p),className:["data-footnote-backref"]},children:Array.isArray(y)?y:[y]})}const v=m[m.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 m.push(...g);const x={type:"element",tagName:"li",properties:{id:n+"fn-"+f},children:e.wrap(m,!0)};e.patch(d,x),c.push(x)}if(c.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...Io(l),id:"footnote-label"},children:[{type:"text",value:r}]},{type:"text",value:`
|
|
626
|
-
`},{type:"element",tagName:"ol",properties:{},children:e.wrap(c,!0)},{type:"text",value:`
|
|
627
|
-
`}]}}const il=(function(e){if(e==null)return F2;if(typeof e=="function")return al(e);if(typeof e=="object")return Array.isArray(e)?D2(e):L2(e);if(typeof e=="string")return z2(e);throw new Error("Expected function, string, or object as test")});function D2(e){const n=[];let s=-1;for(;++s<e.length;)n[s]=il(e[s]);return al(i);function i(...r){let o=-1;for(;++o<n.length;)if(n[o].apply(this,r))return!0;return!1}}function L2(e){const n=e;return al(s);function s(i){const r=i;let o;for(o in e)if(r[o]!==n[o])return!1;return!0}}function z2(e){return al(n);function n(s){return s&&s.type===e}}function al(e){return n;function n(s,i,r){return!!(O2(s)&&e.call(this,s,typeof i=="number"?i:void 0,r||void 0))}}function F2(){return!0}function O2(e){return e!==null&&typeof e=="object"&&"type"in e}const Pf=[],U2=!0,Wc=!1,B2="skip";function If(e,n,s,i){let r;typeof n=="function"&&typeof s!="function"?(i=s,s=n):r=n;const o=il(r),l=i?-1:1;c(e,void 0,[])();function c(u,d,m){const h=u&&typeof u=="object"?u:{};if(typeof h.type=="string"){const p=typeof h.tagName=="string"?h.tagName:typeof h.name=="string"?h.name:void 0;Object.defineProperty(f,"name",{value:"node ("+(u.type+(p?"<"+p+">":""))+")"})}return f;function f(){let p=Pf,g,b,v;if((!n||o(u,d,m[m.length-1]||void 0))&&(p=H2(s(u,m)),p[0]===Wc))return p;if("children"in u&&u.children){const x=u;if(x.children&&p[0]!==B2)for(b=(i?x.children.length:-1)+l,v=m.concat(x);b>-1&&b<x.children.length;){const y=x.children[b];if(g=c(y,b,v)(),g[0]===Wc)return g;b=typeof g[1]=="number"?g[1]:b+l}}return p}}}function H2(e){return Array.isArray(e)?e:typeof e=="number"?[U2,e]:e==null?Pf:[e]}function Id(e,n,s,i){let r,o,l;typeof n=="function"&&typeof s!="function"?(o=void 0,l=n,r=s):(o=n,l=s,r=i),If(e,o,c,r);function c(u,d){const m=d[d.length-1],h=m?m.children.indexOf(u):void 0;return l(u,h,m)}}const Kc={}.hasOwnProperty,q2={};function V2(e,n){const s=n||q2,i=new Map,r=new Map,o=new Map,l={...M2,...s.handlers},c={all:d,applyData:K2,definitionById:i,footnoteById:r,footnoteCounts:o,footnoteOrder:[],handlers:l,one:u,options:s,patch:W2,wrap:J2};return Id(e,function(m){if(m.type==="definition"||m.type==="footnoteDefinition"){const h=m.type==="definition"?i:r,f=String(m.identifier).toUpperCase();h.has(f)||h.set(f,m)}}),c;function u(m,h){const f=m.type,p=c.handlers[f];if(Kc.call(c.handlers,f)&&p)return p(c,m,h);if(c.options.passThrough&&c.options.passThrough.includes(f)){if("children"in m){const{children:b,...v}=m,x=Io(v);return x.children=c.all(m),x}return Io(m)}return(c.options.unknownHandler||G2)(c,m,h)}function d(m){const h=[];if("children"in m){const f=m.children;let p=-1;for(;++p<f.length;){const g=c.one(f[p],m);if(g){if(p&&f[p-1].type==="break"&&(!Array.isArray(g)&&g.type==="text"&&(g.value=Dm(g.value)),!Array.isArray(g)&&g.type==="element")){const b=g.children[0];b&&b.type==="text"&&(b.value=Dm(b.value))}Array.isArray(g)?h.push(...g):h.push(g)}}}return h}}function W2(e,n){e.position&&(n.position=I0(e))}function K2(e,n){let s=n;if(e&&e.data){const i=e.data.hName,r=e.data.hChildren,o=e.data.hProperties;if(typeof i=="string")if(s.type==="element")s.tagName=i;else{const l="children"in s?s.children:[s];s={type:"element",tagName:i,properties:{},children:l}}s.type==="element"&&o&&Object.assign(s.properties,Io(o)),"children"in s&&s.children&&r!==null&&r!==void 0&&(s.children=r)}return s}function G2(e,n){const s=n.data||{},i="value"in n&&!(Kc.call(s,"hProperties")||Kc.call(s,"hChildren"))?{type:"text",value:n.value}:{type:"element",tagName:"div",properties:{},children:e.all(n)};return e.patch(n,i),e.applyData(n,i)}function J2(e,n){const s=[];let i=-1;for(n&&s.push({type:"text",value:`
|
|
628
|
-
`});++i<e.length;)i&&s.push({type:"text",value:`
|
|
629
|
-
`}),s.push(e[i]);return n&&e.length>0&&s.push({type:"text",value:`
|
|
630
|
-
`}),s}function Dm(e){let n=0,s=e.charCodeAt(n);for(;s===9||s===32;)n++,s=e.charCodeAt(n);return e.slice(n)}function Lm(e,n){const s=V2(e,n),i=s.one(e,void 0),r=$2(s),o=Array.isArray(i)?{type:"root",children:i}:i||{type:"root",children:[]};return r&&o.children.push({type:"text",value:`
|
|
631
|
-
`},r),o}function Y2(e,n){return e&&"run"in e?async function(s,i){const r=Lm(s,{file:i,...n});await e.run(r,i)}:function(s,i){return Lm(s,{file:i,...e||n})}}function zm(e){if(e)throw e}var Ol,Fm;function Q2(){if(Fm)return Ol;Fm=1;var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,s=Object.defineProperty,i=Object.getOwnPropertyDescriptor,r=function(d){return typeof Array.isArray=="function"?Array.isArray(d):n.call(d)==="[object Array]"},o=function(d){if(!d||n.call(d)!=="[object Object]")return!1;var m=e.call(d,"constructor"),h=d.constructor&&d.constructor.prototype&&e.call(d.constructor.prototype,"isPrototypeOf");if(d.constructor&&!m&&!h)return!1;var f;for(f in d);return typeof f>"u"||e.call(d,f)},l=function(d,m){s&&m.name==="__proto__"?s(d,m.name,{enumerable:!0,configurable:!0,value:m.newValue,writable:!0}):d[m.name]=m.newValue},c=function(d,m){if(m==="__proto__")if(e.call(d,m)){if(i)return i(d,m).value}else return;return d[m]};return Ol=function u(){var d,m,h,f,p,g,b=arguments[0],v=1,x=arguments.length,y=!1;for(typeof b=="boolean"&&(y=b,b=arguments[1]||{},v=2),(b==null||typeof b!="object"&&typeof b!="function")&&(b={});v<x;++v)if(d=arguments[v],d!=null)for(m in d)h=c(b,m),f=c(d,m),b!==f&&(y&&f&&(o(f)||(p=r(f)))?(p?(p=!1,g=h&&r(h)?h:[]):g=h&&o(h)?h:{},l(b,{name:m,newValue:u(y,g,f)})):typeof f<"u"&&l(b,{name:m,newValue:f}));return b},Ol}var X2=Q2();const Ul=Qh(X2);function Gc(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 Z2(){const e=[],n={run:s,use:i};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(u,...d){const m=e[++o];let h=-1;if(u){l(u);return}for(;++h<r.length;)(d[h]===null||d[h]===void 0)&&(d[h]=r[h]);r=d,m?eE(m,c)(...d):l(null,...d)}}function i(r){if(typeof r!="function")throw new TypeError("Expected `middelware` to be a function, not "+r);return e.push(r),n}}function eE(e,n){let s;return i;function i(...l){const c=e.length>l.length;let u;c&&l.push(r);try{u=e.apply(this,l)}catch(d){const m=d;if(c&&s)throw m;return r(m)}c||(u&&u.then&&typeof u.then=="function"?u.then(o,r):u instanceof Error?r(u):o(u))}function r(l,...c){s||(s=!0,n(l,...c))}function o(l){r(null,l)}}const ei={basename:tE,dirname:nE,extname:sE,join:iE,sep:"/"};function tE(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');zr(e);let s=0,i=-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 i<0&&(o=!0,i=r+1);return i<0?"":e.slice(s,i)}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&&(i=r):(c=-1,i=l));return s===i?i=l:i<0&&(i=e.length),e.slice(s,i)}function nE(e){if(zr(e),e.length===0)return".";let n=-1,s=e.length,i;for(;--s;)if(e.codePointAt(s)===47){if(i){n=s;break}}else i||(i=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function sE(e){zr(e);let n=e.length,s=-1,i=0,r=-1,o=0,l;for(;n--;){const c=e.codePointAt(n);if(c===47){if(l){i=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===i+1?"":e.slice(r,s)}function iE(...e){let n=-1,s;for(;++n<e.length;)zr(e[n]),e[n]&&(s=s===void 0?e[n]:s+"/"+e[n]);return s===void 0?".":aE(s)}function aE(e){zr(e);const n=e.codePointAt(0)===47;let s=rE(e,!n);return s.length===0&&!n&&(s="."),s.length>0&&e.codePointAt(e.length-1)===47&&(s+="/"),n?"/"+s:s}function rE(e,n){let s="",i=0,r=-1,o=0,l=-1,c,u;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||i!==2||s.codePointAt(s.length-1)!==46||s.codePointAt(s.length-2)!==46){if(s.length>2){if(u=s.lastIndexOf("/"),u!==s.length-1){u<0?(s="",i=0):(s=s.slice(0,u),i=s.length-1-s.lastIndexOf("/")),r=l,o=0;continue}}else if(s.length>0){s="",i=0,r=l,o=0;continue}}n&&(s=s.length>0?s+"/..":"..",i=2)}else s.length>0?s+="/"+e.slice(r+1,l):s=e.slice(r+1,l),i=l-r-1;r=l,o=0}else c===46&&o>-1?o++:o=-1}return s}function zr(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const oE={cwd:lE};function lE(){return"/"}function Jc(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function cE(e){if(typeof e=="string")e=new URL(e);else if(!Jc(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 dE(e)}function dE(e){if(e.hostname!==""){const i=new TypeError('File URL host must be "localhost" or empty on darwin');throw i.code="ERR_INVALID_FILE_URL_HOST",i}const n=e.pathname;let s=-1;for(;++s<n.length;)if(n.codePointAt(s)===37&&n.codePointAt(s+1)===50){const i=n.codePointAt(s+2);if(i===70||i===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 Bl=["history","path","basename","stem","extname","dirname"];class $f{constructor(n){let s;n?Jc(n)?s={path:n}:typeof n=="string"||uE(n)?s={value:n}:s=n:s={},this.cwd="cwd"in s?"":oE.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let i=-1;for(;++i<Bl.length;){const o=Bl[i];o in s&&s[o]!==void 0&&s[o]!==null&&(this[o]=o==="history"?[...s[o]]:s[o])}let r;for(r in s)Bl.includes(r)||(this[r]=s[r])}get basename(){return typeof this.path=="string"?ei.basename(this.path):void 0}set basename(n){ql(n,"basename"),Hl(n,"basename"),this.path=ei.join(this.dirname||"",n)}get dirname(){return typeof this.path=="string"?ei.dirname(this.path):void 0}set dirname(n){Om(this.basename,"dirname"),this.path=ei.join(n||"",this.basename)}get extname(){return typeof this.path=="string"?ei.extname(this.path):void 0}set extname(n){if(Hl(n,"extname"),Om(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=ei.join(this.dirname,this.stem+(n||""))}get path(){return this.history[this.history.length-1]}set path(n){Jc(n)&&(n=cE(n)),ql(n,"path"),this.path!==n&&this.history.push(n)}get stem(){return typeof this.path=="string"?ei.basename(this.path,this.extname):void 0}set stem(n){ql(n,"stem"),Hl(n,"stem"),this.path=ei.join(this.dirname||"",n+(this.extname||""))}fail(n,s,i){const r=this.message(n,s,i);throw r.fatal=!0,r}info(n,s,i){const r=this.message(n,s,i);return r.fatal=void 0,r}message(n,s,i){const r=new os(n,s,i);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 Hl(e,n){if(e&&e.includes(ei.sep))throw new Error("`"+n+"` cannot be a path: did not expect `"+ei.sep+"`")}function ql(e,n){if(!e)throw new Error("`"+n+"` cannot be empty")}function Om(e,n){if(!e)throw new Error("Setting `"+n+"` requires `path` to be set too")}function uE(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const mE=(function(e){const i=this.constructor.prototype,r=i[e],o=function(){return r.apply(o,arguments)};return Object.setPrototypeOf(o,i),o}),hE={}.hasOwnProperty;class $d extends mE{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=Z2()}copy(){const n=new $d;let s=-1;for(;++s<this.attachers.length;){const i=this.attachers[s];n.use(...i)}return n.data(Ul(!0,{},this.namespace)),n}data(n,s){return typeof n=="string"?arguments.length===2?(Kl("data",this.frozen),this.namespace[n]=s,this):hE.call(this.namespace,n)&&this.namespace[n]||void 0:n?(Kl("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,...i]=this.attachers[this.freezeIndex];if(i[0]===!1)continue;i[0]===!0&&(i[0]=void 0);const r=s.call(n,...i);typeof r=="function"&&this.transformers.use(r)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(n){this.freeze();const s=io(n),i=this.parser||this.Parser;return Vl("parse",i),i(String(s),s)}process(n,s){const i=this;return this.freeze(),Vl("process",this.parser||this.Parser),Wl("process",this.compiler||this.Compiler),s?r(void 0,s):new Promise(r);function r(o,l){const c=io(n),u=i.parse(c);i.run(u,c,function(m,h,f){if(m||!h||!f)return d(m);const p=h,g=i.stringify(p,f);gE(g)?f.value=g:f.result=g,d(m,f)});function d(m,h){m||!h?l(m):o?o(h):s(void 0,h)}}}processSync(n){let s=!1,i;return this.freeze(),Vl("processSync",this.parser||this.Parser),Wl("processSync",this.compiler||this.Compiler),this.process(n,r),Bm("processSync","process",s),i;function r(o,l){s=!0,zm(o),i=l}}run(n,s,i){Um(n),this.freeze();const r=this.transformers;return!i&&typeof s=="function"&&(i=s,s=void 0),i?o(void 0,i):new Promise(o);function o(l,c){const u=io(s);r.run(n,u,d);function d(m,h,f){const p=h||n;m?c(m):l?l(p):i(void 0,p,f)}}}runSync(n,s){let i=!1,r;return this.run(n,s,o),Bm("runSync","run",i),r;function o(l,c){zm(l),r=c,i=!0}}stringify(n,s){this.freeze();const i=io(s),r=this.compiler||this.Compiler;return Wl("stringify",r),Um(n),r(n,i)}use(n,...s){const i=this.attachers,r=this.namespace;if(Kl("use",this.frozen),n!=null)if(typeof n=="function")u(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(d){if(typeof d=="function")u(d,[]);else if(typeof d=="object")if(Array.isArray(d)){const[m,...h]=d;u(m,h)}else l(d);else throw new TypeError("Expected usable value, not `"+d+"`")}function l(d){if(!("plugins"in d)&&!("settings"in d))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(d.plugins),d.settings&&(r.settings=Ul(!0,r.settings,d.settings))}function c(d){let m=-1;if(d!=null)if(Array.isArray(d))for(;++m<d.length;){const h=d[m];o(h)}else throw new TypeError("Expected a list of plugins, not `"+d+"`")}function u(d,m){let h=-1,f=-1;for(;++h<i.length;)if(i[h][0]===d){f=h;break}if(f===-1)i.push([d,...m]);else if(m.length>0){let[p,...g]=m;const b=i[f][1];Gc(b)&&Gc(p)&&(p=Ul(!0,b,p)),i[f]=[d,p,...g]}}}}const pE=new $d().freeze();function Vl(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function Wl(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Kl(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 Um(e){if(!Gc(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Bm(e,n,s){if(!s)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function io(e){return fE(e)?e:new $f(e)}function fE(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function gE(e){return typeof e=="string"||bE(e)}function bE(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const xE="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Hm=[],qm={allowDangerousHtml:!0},vE=/^(https?|ircs?|mailto|xmpp)$/i,yE=[{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 ai(e){const n=jE(e),s=kE(e);return wE(n.runSync(n.parse(s),s),e)}function jE(e){const n=e.rehypePlugins||Hm,s=e.remarkPlugins||Hm,i=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...qm}:qm;return pE().use(n2).use(s).use(Y2,i).use(n)}function kE(e){const n=e.children||"",s=new $f;return typeof n=="string"&&(s.value=n),s}function wE(e,n){const s=n.allowedElements,i=n.allowElement,r=n.components,o=n.disallowedElements,l=n.skipHtml,c=n.unwrapDisallowed,u=n.urlTransform||NE;for(const m of yE)Object.hasOwn(n,m.from)&&(""+m.from+(m.to?"use `"+m.to+"` instead":"remove it")+xE+m.id,void 0);return Id(e,d),F0(e,{Fragment:t.Fragment,components:r,ignoreInvalidStyle:!0,jsx:t.jsx,jsxs:t.jsxs,passKeys:!0,passNode:!0});function d(m,h,f){if(m.type==="raw"&&f&&typeof h=="number")return l?f.children.splice(h,1):f.children[h]={type:"text",value:m.value},h;if(m.type==="element"){let p;for(p in Ll)if(Object.hasOwn(Ll,p)&&Object.hasOwn(m.properties,p)){const g=m.properties[p],b=Ll[p];(b===null||b.includes(m.tagName))&&(m.properties[p]=u(String(g||""),p,m))}}if(m.type==="element"){let p=s?!s.includes(m.tagName):o?o.includes(m.tagName):!1;if(!p&&i&&typeof h=="number"&&(p=!i(m,h,f)),p&&f&&typeof h=="number")return c&&m.children?f.children.splice(h,1,...m.children):f.children.splice(h,1),h}}}function NE(e){const n=e.indexOf(":"),s=e.indexOf("?"),i=e.indexOf("#"),r=e.indexOf("/");return n===-1||r!==-1&&n>r||s!==-1&&n>s||i!==-1&&n>i||vE.test(e.slice(0,n))?e:""}function Vm(e,n){const s=String(e);if(typeof n!="string")throw new TypeError("Expected character");let i=0,r=s.indexOf(n);for(;r!==-1;)i++,r=s.indexOf(n,r+n.length);return i}function SE(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function CE(e,n,s){const r=il((s||{}).ignore||[]),o=EE(n);let l=-1;for(;++l<o.length;)If(e,"text",c);function c(d,m){let h=-1,f;for(;++h<m.length;){const p=m[h],g=f?f.children:void 0;if(r(p,g?g.indexOf(p):void 0,f))return;f=p}if(f)return u(d,m)}function u(d,m){const h=m[m.length-1],f=o[l][0],p=o[l][1];let g=0;const v=h.children.indexOf(d);let x=!1,y=[];f.lastIndex=0;let j=f.exec(d.value);for(;j;){const N=j.index,C={index:j.index,input:j.input,stack:[...m,d]};let w=p(...j,C);if(typeof w=="string"&&(w=w.length>0?{type:"text",value:w}:void 0),w===!1?f.lastIndex=N+1:(g!==N&&y.push({type:"text",value:d.value.slice(g,N)}),Array.isArray(w)?y.push(...w):w&&y.push(w),g=N+j[0].length,x=!0),!f.global)break;j=f.exec(d.value)}return x?(g<d.value.length&&y.push({type:"text",value:d.value.slice(g)}),h.children.splice(v,1,...y)):y=[d],v+y.length}}function EE(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 i=-1;for(;++i<s.length;){const r=s[i];n.push([ME(r[0]),_E(r[1])])}return n}function ME(e){return typeof e=="string"?new RegExp(SE(e),"g"):e}function _E(e){return typeof e=="function"?e:function(){return e}}const Gl="phrasing",Jl=["autolink","link","image","label"];function AE(){return{transforms:[LE],enter:{literalAutolink:TE,literalAutolinkEmail:Yl,literalAutolinkHttp:Yl,literalAutolinkWww:Yl},exit:{literalAutolink:DE,literalAutolinkEmail:$E,literalAutolinkHttp:PE,literalAutolinkWww:IE}}}function RE(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Gl,notInConstruct:Jl},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Gl,notInConstruct:Jl},{character:":",before:"[ps]",after:"\\/",inConstruct:Gl,notInConstruct:Jl}]}}function TE(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function Yl(e){this.config.enter.autolinkProtocol.call(this,e)}function PE(e){this.config.exit.autolinkProtocol.call(this,e)}function IE(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 $E(e){this.config.exit.autolinkEmail.call(this,e)}function DE(e){this.exit(e)}function LE(e){CE(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,zE],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,FE]],{ignore:["link","linkReference"]})}function zE(e,n,s,i,r){let o="";if(!Df(r)||(/^w/i.test(n)&&(s=n+s,n="",o="http://"),!OE(s)))return!1;const l=UE(s+i);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 FE(e,n,s,i){return!Df(i,!0)||/[-\d_]$/.test(s)?!1:{type:"link",title:null,url:"mailto:"+n+"@"+s,children:[{type:"text",value:n+"@"+s}]}}function OE(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 UE(e){const n=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!n)return[e,void 0];e=e.slice(0,n.index);let s=n[0],i=s.indexOf(")");const r=Vm(e,"(");let o=Vm(e,")");for(;i!==-1&&r>o;)e+=s.slice(0,i+1),s=s.slice(i+1),i=s.indexOf(")"),o++;return[e,s]}function Df(e,n){const s=e.input.charCodeAt(e.index-1);return(e.index===0||Ki(s)||tl(s))&&(!n||s!==47)}Lf.peek=YE;function BE(){this.buffer()}function HE(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function qE(){this.buffer()}function VE(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function WE(e){const n=this.resume(),s=this.stack[this.stack.length-1];s.type,s.identifier=qs(this.sliceSerialize(e)).toLowerCase(),s.label=n}function KE(e){this.exit(e)}function GE(e){const n=this.resume(),s=this.stack[this.stack.length-1];s.type,s.identifier=qs(this.sliceSerialize(e)).toLowerCase(),s.label=n}function JE(e){this.exit(e)}function YE(){return"["}function Lf(e,n,s,i){const r=s.createTracker(i);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 QE(){return{enter:{gfmFootnoteCallString:BE,gfmFootnoteCall:HE,gfmFootnoteDefinitionLabelString:qE,gfmFootnoteDefinition:VE},exit:{gfmFootnoteCallString:WE,gfmFootnoteCall:KE,gfmFootnoteDefinitionLabelString:GE,gfmFootnoteDefinition:JE}}}function XE(e){let n=!1;return e&&e.firstLineBlank&&(n=!0),{handlers:{footnoteDefinition:s,footnoteReference:Lf},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function s(i,r,o,l){const c=o.createTracker(l);let u=c.move("[^");const d=o.enter("footnoteDefinition"),m=o.enter("label");return u+=c.move(o.safe(o.associationId(i),{before:u,after:"]"})),m(),u+=c.move("]:"),i.children&&i.children.length>0&&(c.shift(4),u+=c.move((n?`
|
|
632
|
-
`:" ")+o.indentLines(o.containerFlow(i,c.current()),n?zf:ZE))),d(),u}}function ZE(e,n,s){return n===0?e:zf(e,n,s)}function zf(e,n,s){return(s?"":" ")+e}const eM=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];Ff.peek=aM;function tM(){return{canContainEols:["delete"],enter:{strikethrough:sM},exit:{strikethrough:iM}}}function nM(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:eM}],handlers:{delete:Ff}}}function sM(e){this.enter({type:"delete",children:[]},e)}function iM(e){this.exit(e)}function Ff(e,n,s,i){const r=s.createTracker(i),o=s.enter("strikethrough");let l=r.move("~~");return l+=s.containerPhrasing(e,{...r.current(),before:l,after:"~"}),l+=r.move("~~"),o(),l}function aM(){return"~"}function rM(e){return e.length}function oM(e,n){const s=n||{},i=(s.align||[]).concat(),r=s.stringLength||rM,o=[],l=[],c=[],u=[];let d=0,m=-1;for(;++m<e.length;){const b=[],v=[];let x=-1;for(e[m].length>d&&(d=e[m].length);++x<e[m].length;){const y=lM(e[m][x]);if(s.alignDelimiters!==!1){const j=r(y);v[x]=j,(u[x]===void 0||j>u[x])&&(u[x]=j)}b.push(y)}l[m]=b,c[m]=v}let h=-1;if(typeof i=="object"&&"length"in i)for(;++h<d;)o[h]=Wm(i[h]);else{const b=Wm(i);for(;++h<d;)o[h]=b}h=-1;const f=[],p=[];for(;++h<d;){const b=o[h];let v="",x="";b===99?(v=":",x=":"):b===108?v=":":b===114&&(x=":");let y=s.alignDelimiters===!1?1:Math.max(1,u[h]-v.length-x.length);const j=v+"-".repeat(y)+x;s.alignDelimiters!==!1&&(y=v.length+y+x.length,y>u[h]&&(u[h]=y),p[h]=y),f[h]=j}l.splice(1,0,f),c.splice(1,0,p),m=-1;const g=[];for(;++m<l.length;){const b=l[m],v=c[m];h=-1;const x=[];for(;++h<d;){const y=b[h]||"";let j="",N="";if(s.alignDelimiters!==!1){const C=u[h]-(v[h]||0),w=o[h];w===114?j=" ".repeat(C):w===99?C%2?(j=" ".repeat(C/2+.5),N=" ".repeat(C/2-.5)):(j=" ".repeat(C/2),N=j):N=" ".repeat(C)}s.delimiterStart!==!1&&!h&&x.push("|"),s.padding!==!1&&!(s.alignDelimiters===!1&&y==="")&&(s.delimiterStart!==!1||h)&&x.push(" "),s.alignDelimiters!==!1&&x.push(j),x.push(y),s.alignDelimiters!==!1&&x.push(N),s.padding!==!1&&x.push(" "),(s.delimiterEnd!==!1||h!==d-1)&&x.push("|")}g.push(s.delimiterEnd===!1?x.join("").replace(/ +$/,""):x.join(""))}return g.join(`
|
|
633
|
-
`)}function lM(e){return e==null?"":String(e)}function Wm(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 cM(e,n,s,i){const r=s.enter("blockquote"),o=s.createTracker(i);o.move("> "),o.shift(2);const l=s.indentLines(s.containerFlow(e,o.current()),dM);return r(),l}function dM(e,n,s){return">"+(s?"":" ")+e}function uM(e,n){return Km(e,n.inConstruct,!0)&&!Km(e,n.notInConstruct,!1)}function Km(e,n,s){if(typeof n=="string"&&(n=[n]),!n||n.length===0)return s;let i=-1;for(;++i<n.length;)if(e.includes(n[i]))return!0;return!1}function Gm(e,n,s,i){let r=-1;for(;++r<s.unsafe.length;)if(s.unsafe[r].character===`
|
|
634
|
-
`&&uM(s.stack,s.unsafe[r]))return/[ \t]/.test(i.before)?"":" ";return`\\
|
|
635
|
-
`}function mM(e,n){const s=String(e);let i=s.indexOf(n),r=i,o=0,l=0;if(typeof n!="string")throw new TypeError("Expected substring");for(;i!==-1;)i===r?++o>l&&(l=o):o=1,r=i+n.length,i=s.indexOf(n,r);return l}function hM(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 pM(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 fM(e,n,s,i){const r=pM(s),o=e.value||"",l=r==="`"?"GraveAccent":"Tilde";if(hM(e,s)){const h=s.enter("codeIndented"),f=s.indentLines(o,gM);return h(),f}const c=s.createTracker(i),u=r.repeat(Math.max(mM(o,r)+1,3)),d=s.enter("codeFenced");let m=c.move(u);if(e.lang){const h=s.enter(`codeFencedLang${l}`);m+=c.move(s.safe(e.lang,{before:m,after:" ",encode:["`"],...c.current()})),h()}if(e.lang&&e.meta){const h=s.enter(`codeFencedMeta${l}`);m+=c.move(" "),m+=c.move(s.safe(e.meta,{before:m,after:`
|
|
636
|
-
`,encode:["`"],...c.current()})),h()}return m+=c.move(`
|
|
637
|
-
`),o&&(m+=c.move(o+`
|
|
638
|
-
`)),m+=c.move(u),d(),m}function gM(e,n,s){return(s?"":" ")+e}function Dd(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 bM(e,n,s,i){const r=Dd(s),o=r==='"'?"Quote":"Apostrophe",l=s.enter("definition");let c=s.enter("label");const u=s.createTracker(i);let d=u.move("[");return d+=u.move(s.safe(s.associationId(e),{before:d,after:"]",...u.current()})),d+=u.move("]: "),c(),!e.url||/[\0- \u007F]/.test(e.url)?(c=s.enter("destinationLiteral"),d+=u.move("<"),d+=u.move(s.safe(e.url,{before:d,after:">",...u.current()})),d+=u.move(">")):(c=s.enter("destinationRaw"),d+=u.move(s.safe(e.url,{before:d,after:e.title?" ":`
|
|
639
|
-
`,...u.current()}))),c(),e.title&&(c=s.enter(`title${o}`),d+=u.move(" "+r),d+=u.move(s.safe(e.title,{before:d,after:r,...u.current()})),d+=u.move(r),c()),l(),d}function xM(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 Sr(e){return"&#x"+e.toString(16).toUpperCase()+";"}function $o(e,n,s){const i=va(e),r=va(n);return i===void 0?r===void 0?s==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:i===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}}Of.peek=vM;function Of(e,n,s,i){const r=xM(s),o=s.enter("emphasis"),l=s.createTracker(i),c=l.move(r);let u=l.move(s.containerPhrasing(e,{after:r,before:c,...l.current()}));const d=u.charCodeAt(0),m=$o(i.before.charCodeAt(i.before.length-1),d,r);m.inside&&(u=Sr(d)+u.slice(1));const h=u.charCodeAt(u.length-1),f=$o(i.after.charCodeAt(0),h,r);f.inside&&(u=u.slice(0,-1)+Sr(h));const p=l.move(r);return o(),s.attentionEncodeSurroundingInfo={after:f.outside,before:m.outside},c+u+p}function vM(e,n,s){return s.options.emphasis||"*"}function yM(e,n){let s=!1;return Id(e,function(i){if("value"in i&&/\r?\n|\r/.test(i.value)||i.type==="break")return s=!0,Wc}),!!((!e.depth||e.depth<3)&&Ed(e)&&(n.options.setext||s))}function jM(e,n,s,i){const r=Math.max(Math.min(6,e.depth||1),1),o=s.createTracker(i);if(yM(e,s)){const m=s.enter("headingSetext"),h=s.enter("phrasing"),f=s.containerPhrasing(e,{...o.current(),before:`
|
|
640
|
-
`,after:`
|
|
641
|
-
`});return h(),m(),f+`
|
|
642
|
-
`+(r===1?"=":"-").repeat(f.length-(Math.max(f.lastIndexOf("\r"),f.lastIndexOf(`
|
|
643
|
-
`))+1))}const l="#".repeat(r),c=s.enter("headingAtx"),u=s.enter("phrasing");o.move(l+" ");let d=s.containerPhrasing(e,{before:"# ",after:`
|
|
644
|
-
`,...o.current()});return/^[\t ]/.test(d)&&(d=Sr(d.charCodeAt(0))+d.slice(1)),d=d?l+" "+d:l,s.options.closeAtx&&(d+=" "+l),u(),c(),d}Uf.peek=kM;function Uf(e){return e.value||""}function kM(){return"<"}Bf.peek=wM;function Bf(e,n,s,i){const r=Dd(s),o=r==='"'?"Quote":"Apostrophe",l=s.enter("image");let c=s.enter("label");const u=s.createTracker(i);let d=u.move("![");return d+=u.move(s.safe(e.alt,{before:d,after:"]",...u.current()})),d+=u.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=s.enter("destinationLiteral"),d+=u.move("<"),d+=u.move(s.safe(e.url,{before:d,after:">",...u.current()})),d+=u.move(">")):(c=s.enter("destinationRaw"),d+=u.move(s.safe(e.url,{before:d,after:e.title?" ":")",...u.current()}))),c(),e.title&&(c=s.enter(`title${o}`),d+=u.move(" "+r),d+=u.move(s.safe(e.title,{before:d,after:r,...u.current()})),d+=u.move(r),c()),d+=u.move(")"),l(),d}function wM(){return"!"}Hf.peek=NM;function Hf(e,n,s,i){const r=e.referenceType,o=s.enter("imageReference");let l=s.enter("label");const c=s.createTracker(i);let u=c.move("![");const d=s.safe(e.alt,{before:u,after:"]",...c.current()});u+=c.move(d+"]["),l();const m=s.stack;s.stack=[],l=s.enter("reference");const h=s.safe(s.associationId(e),{before:u,after:"]",...c.current()});return l(),s.stack=m,o(),r==="full"||!d||d!==h?u+=c.move(h+"]"):r==="shortcut"?u=u.slice(0,-1):u+=c.move("]"),u}function NM(){return"!"}qf.peek=SM;function qf(e,n,s){let i=e.value||"",r="`",o=-1;for(;new RegExp("(^|[^`])"+r+"([^`]|$)").test(i);)r+="`";for(/[^ \r\n]/.test(i)&&(/^[ \r\n]/.test(i)&&/[ \r\n]$/.test(i)||/^`|`$/.test(i))&&(i=" "+i+" ");++o<s.unsafe.length;){const l=s.unsafe[o],c=s.compilePattern(l);let u;if(l.atBreak)for(;u=c.exec(i);){let d=u.index;i.charCodeAt(d)===10&&i.charCodeAt(d-1)===13&&d--,i=i.slice(0,d)+" "+i.slice(u.index+1)}}return r+i+r}function SM(){return"`"}function Vf(e,n){const s=Ed(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))}Wf.peek=CM;function Wf(e,n,s,i){const r=Dd(s),o=r==='"'?"Quote":"Apostrophe",l=s.createTracker(i);let c,u;if(Vf(e,s)){const m=s.stack;s.stack=[],c=s.enter("autolink");let h=l.move("<");return h+=l.move(s.containerPhrasing(e,{before:h,after:">",...l.current()})),h+=l.move(">"),c(),s.stack=m,h}c=s.enter("link"),u=s.enter("label");let d=l.move("[");return d+=l.move(s.containerPhrasing(e,{before:d,after:"](",...l.current()})),d+=l.move("]("),u(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(u=s.enter("destinationLiteral"),d+=l.move("<"),d+=l.move(s.safe(e.url,{before:d,after:">",...l.current()})),d+=l.move(">")):(u=s.enter("destinationRaw"),d+=l.move(s.safe(e.url,{before:d,after:e.title?" ":")",...l.current()}))),u(),e.title&&(u=s.enter(`title${o}`),d+=l.move(" "+r),d+=l.move(s.safe(e.title,{before:d,after:r,...l.current()})),d+=l.move(r),u()),d+=l.move(")"),c(),d}function CM(e,n,s){return Vf(e,s)?"<":"["}Kf.peek=EM;function Kf(e,n,s,i){const r=e.referenceType,o=s.enter("linkReference");let l=s.enter("label");const c=s.createTracker(i);let u=c.move("[");const d=s.containerPhrasing(e,{before:u,after:"]",...c.current()});u+=c.move(d+"]["),l();const m=s.stack;s.stack=[],l=s.enter("reference");const h=s.safe(s.associationId(e),{before:u,after:"]",...c.current()});return l(),s.stack=m,o(),r==="full"||!d||d!==h?u+=c.move(h+"]"):r==="shortcut"?u=u.slice(0,-1):u+=c.move("]"),u}function EM(){return"["}function Ld(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 MM(e){const n=Ld(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 _M(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 Gf(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 AM(e,n,s,i){const r=s.enter("list"),o=s.bulletCurrent;let l=e.ordered?_M(s):Ld(s);const c=e.ordered?l==="."?")":".":MM(s);let u=n&&s.bulletLastUsed?l===s.bulletLastUsed:!1;if(!e.ordered){const m=e.children?e.children[0]:void 0;if((l==="*"||l==="-")&&m&&(!m.children||!m.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&&(u=!0),Gf(s)===l&&m){let h=-1;for(;++h<e.children.length;){const f=e.children[h];if(f&&f.type==="listItem"&&f.children&&f.children[0]&&f.children[0].type==="thematicBreak"){u=!0;break}}}}u&&(l=c),s.bulletCurrent=l;const d=s.containerFlow(e,i);return s.bulletLastUsed=l,s.bulletCurrent=o,r(),d}function RM(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 TM(e,n,s,i){const r=RM(s);let o=s.bulletCurrent||Ld(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(i);c.move(o+" ".repeat(l-o.length)),c.shift(l);const u=s.enter("listItem"),d=s.indentLines(s.containerFlow(e,c.current()),m);return u(),d;function m(h,f,p){return f?(p?"":" ".repeat(l))+h:(p?o:o+" ".repeat(l-o.length))+h}}function PM(e,n,s,i){const r=s.enter("paragraph"),o=s.enter("phrasing"),l=s.containerPhrasing(e,i);return o(),r(),l}const IM=il(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function $M(e,n,s,i){return(e.children.some(function(l){return IM(l)})?s.containerPhrasing:s.containerFlow).call(s,e,i)}function DM(e){const n=e.options.strong||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize strong with `"+n+"` for `options.strong`, expected `*`, or `_`");return n}Jf.peek=LM;function Jf(e,n,s,i){const r=DM(s),o=s.enter("strong"),l=s.createTracker(i),c=l.move(r+r);let u=l.move(s.containerPhrasing(e,{after:r,before:c,...l.current()}));const d=u.charCodeAt(0),m=$o(i.before.charCodeAt(i.before.length-1),d,r);m.inside&&(u=Sr(d)+u.slice(1));const h=u.charCodeAt(u.length-1),f=$o(i.after.charCodeAt(0),h,r);f.inside&&(u=u.slice(0,-1)+Sr(h));const p=l.move(r+r);return o(),s.attentionEncodeSurroundingInfo={after:f.outside,before:m.outside},c+u+p}function LM(e,n,s){return s.options.strong||"*"}function zM(e,n,s,i){return s.safe(e.value,i)}function FM(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 OM(e,n,s){const i=(Gf(s)+(s.options.ruleSpaces?" ":"")).repeat(FM(s));return s.options.ruleSpaces?i.slice(0,-1):i}const Yf={blockquote:cM,break:Gm,code:fM,definition:bM,emphasis:Of,hardBreak:Gm,heading:jM,html:Uf,image:Bf,imageReference:Hf,inlineCode:qf,link:Wf,linkReference:Kf,list:AM,listItem:TM,paragraph:PM,root:$M,strong:Jf,text:zM,thematicBreak:OM};function UM(){return{enter:{table:BM,tableData:Jm,tableHeader:Jm,tableRow:qM},exit:{codeText:VM,table:HM,tableData:Ql,tableHeader:Ql,tableRow:Ql}}}function BM(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 HM(e){this.exit(e),this.data.inTable=void 0}function qM(e){this.enter({type:"tableRow",children:[]},e)}function Ql(e){this.exit(e)}function Jm(e){this.enter({type:"tableCell",children:[]},e)}function VM(e){let n=this.resume();this.data.inTable&&(n=n.replace(/\\([\\|])/g,WM));const s=this.stack[this.stack.length-1];s.type,s.value=n,this.exit(e)}function WM(e,n){return n==="|"?n:e}function KM(e){const n=e||{},s=n.tableCellPadding,i=n.tablePipeAlign,r=n.stringLength,o=s?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:`
|
|
645
|
-
`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:f,table:l,tableCell:u,tableRow:c}};function l(p,g,b,v){return d(m(p,b,v),p.align)}function c(p,g,b,v){const x=h(p,b,v),y=d([x]);return y.slice(0,y.indexOf(`
|
|
646
|
-
`))}function u(p,g,b,v){const x=b.enter("tableCell"),y=b.enter("phrasing"),j=b.containerPhrasing(p,{...v,before:o,after:o});return y(),x(),j}function d(p,g){return oM(p,{align:g,alignDelimiters:i,padding:s,stringLength:r})}function m(p,g,b){const v=p.children;let x=-1;const y=[],j=g.enter("table");for(;++x<v.length;)y[x]=h(v[x],g,b);return j(),y}function h(p,g,b){const v=p.children;let x=-1;const y=[],j=g.enter("tableRow");for(;++x<v.length;)y[x]=u(v[x],p,g,b);return j(),y}function f(p,g,b){let v=Yf.inlineCode(p,g,b);return b.stack.includes("tableCell")&&(v=v.replace(/\|/g,"\\$&")),v}}function GM(){return{exit:{taskListCheckValueChecked:Ym,taskListCheckValueUnchecked:Ym,paragraph:YM}}}function JM(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:QM}}}function Ym(e){const n=this.stack[this.stack.length-2];n.type,n.checked=e.type==="taskListCheckValueChecked"}function YM(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 i=s.children[0];if(i&&i.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&&(i.value=i.value.slice(1),i.value.length===0?s.children.shift():s.position&&i.position&&typeof i.position.start.offset=="number"&&(i.position.start.column++,i.position.start.offset++,s.position.start=Object.assign({},i.position.start)))}}this.exit(e)}function QM(e,n,s,i){const r=e.children[0],o=typeof e.checked=="boolean"&&r&&r.type==="paragraph",l="["+(e.checked?"x":" ")+"] ",c=s.createTracker(i);o&&c.move(l);let u=Yf.listItem(e,n,s,{...i,...c.current()});return o&&(u=u.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,d)),u;function d(m){return m+l}}function XM(){return[AE(),QE(),tM(),UM(),GM()]}function ZM(e){return{extensions:[RE(),XE(e),nM(),KM(e),JM()]}}const e_={tokenize:r_,partial:!0},Qf={tokenize:o_,partial:!0},Xf={tokenize:l_,partial:!0},Zf={tokenize:c_,partial:!0},t_={tokenize:d_,partial:!0},eg={name:"wwwAutolink",tokenize:i_,previous:ng},tg={name:"protocolAutolink",tokenize:a_,previous:sg},gi={name:"emailAutolink",tokenize:s_,previous:ig},li={};function n_(){return{text:li}}let Di=48;for(;Di<123;)li[Di]=gi,Di++,Di===58?Di=65:Di===91&&(Di=97);li[43]=gi;li[45]=gi;li[46]=gi;li[95]=gi;li[72]=[gi,tg];li[104]=[gi,tg];li[87]=[gi,eg];li[119]=[gi,eg];function s_(e,n,s){const i=this;let r,o;return l;function l(h){return!Yc(h)||!ig.call(i,i.previous)||zd(i.events)?s(h):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),c(h))}function c(h){return Yc(h)?(e.consume(h),c):h===64?(e.consume(h),u):s(h)}function u(h){return h===46?e.check(t_,m,d)(h):h===45||h===95||is(h)?(o=!0,e.consume(h),u):m(h)}function d(h){return e.consume(h),r=!0,u}function m(h){return o&&r&&us(i.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),n(h)):s(h)}}function i_(e,n,s){const i=this;return r;function r(l){return l!==87&&l!==119||!ng.call(i,i.previous)||zd(i.events)?s(l):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(e_,e.attempt(Qf,e.attempt(Xf,o),s),s)(l))}function o(l){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),n(l)}}function a_(e,n,s){const i=this;let r="",o=!1;return l;function l(h){return(h===72||h===104)&&sg.call(i,i.previous)&&!zd(i.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),r+=String.fromCodePoint(h),e.consume(h),c):s(h)}function c(h){if(us(h)&&r.length<5)return r+=String.fromCodePoint(h),e.consume(h),c;if(h===58){const f=r.toLowerCase();if(f==="http"||f==="https")return e.consume(h),u}return s(h)}function u(h){return h===47?(e.consume(h),o?d:(o=!0,u)):s(h)}function d(h){return h===null||To(h)||bn(h)||Ki(h)||tl(h)?s(h):e.attempt(Qf,e.attempt(Xf,m),s)(h)}function m(h){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),n(h)}}function r_(e,n,s){let i=0;return r;function r(l){return(l===87||l===119)&&i<3?(i++,e.consume(l),r):l===46&&i===3?(e.consume(l),o):s(l)}function o(l){return l===null?s(l):n(l)}}function o_(e,n,s){let i,r,o;return l;function l(d){return d===46||d===95?e.check(Zf,u,c)(d):d===null||bn(d)||Ki(d)||d!==45&&tl(d)?u(d):(o=!0,e.consume(d),l)}function c(d){return d===95?i=!0:(r=i,i=void 0),e.consume(d),l}function u(d){return r||i||!o?s(d):n(d)}}function l_(e,n){let s=0,i=0;return r;function r(l){return l===40?(s++,e.consume(l),r):l===41&&i<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(Zf,n,o)(l):l===null||bn(l)||Ki(l)?n(l):(e.consume(l),r)}function o(l){return l===41&&i++,e.consume(l),r}}function c_(e,n,s){return i;function i(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),i):c===38?(e.consume(c),o):c===93?(e.consume(c),r):c===60||c===null||bn(c)||Ki(c)?n(c):s(c)}function r(c){return c===null||c===40||c===91||bn(c)||Ki(c)?n(c):i(c)}function o(c){return us(c)?l(c):s(c)}function l(c){return c===59?(e.consume(c),i):us(c)?(e.consume(c),l):s(c)}}function d_(e,n,s){return i;function i(o){return e.consume(o),r}function r(o){return is(o)?s(o):n(o)}}function ng(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||bn(e)}function sg(e){return!us(e)}function ig(e){return!(e===47||Yc(e))}function Yc(e){return e===43||e===45||e===46||e===95||is(e)}function zd(e){let n=e.length,s=!1;for(;n--;){const i=e[n][1];if((i.type==="labelLink"||i.type==="labelImage")&&!i._balanced){s=!0;break}if(i._gfmAutolinkLiteralWalkedInto){s=!1;break}}return e.length>0&&!s&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),s}const u_={tokenize:v_,partial:!0};function m_(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:g_,continuation:{tokenize:b_},exit:x_}},text:{91:{name:"gfmFootnoteCall",tokenize:f_},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:h_,resolveTo:p_}}}}function h_(e,n,s){const i=this;let r=i.events.length;const o=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);let l;for(;r--;){const u=i.events[r][1];if(u.type==="labelImage"){l=u;break}if(u.type==="gfmFootnoteCall"||u.type==="labelLink"||u.type==="label"||u.type==="image"||u.type==="link")break}return c;function c(u){if(!l||!l._balanced)return s(u);const d=qs(i.sliceSerialize({start:l.end,end:i.now()}));return d.codePointAt(0)!==94||!o.includes(d.slice(1))?s(u):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(u),e.exit("gfmFootnoteCallLabelMarker"),n(u))}}function p_(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 i={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",i,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",i,n]];return e.splice(s,e.length-s+1,...c),e}function f_(e,n,s){const i=this,r=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);let o=0,l;return c;function c(h){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),u}function u(h){return h!==94?s(h):(e.enter("gfmFootnoteCallMarker"),e.consume(h),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",d)}function d(h){if(o>999||h===93&&!l||h===null||h===91||bn(h))return s(h);if(h===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return r.includes(qs(i.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):s(h)}return bn(h)||(l=!0),o++,e.consume(h),h===92?m:d}function m(h){return h===91||h===92||h===93?(e.consume(h),o++,d):d(h)}}function g_(e,n,s){const i=this,r=i.parser.gfmFootnotes||(i.parser.gfmFootnotes=[]);let o,l=0,c;return u;function u(g){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),d}function d(g){return g===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",m):s(g)}function m(g){if(l>999||g===93&&!c||g===null||g===91||bn(g))return s(g);if(g===93){e.exit("chunkString");const b=e.exit("gfmFootnoteDefinitionLabelString");return o=qs(i.sliceSerialize(b)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return bn(g)||(c=!0),l++,e.consume(g),g===92?h:m}function h(g){return g===91||g===92||g===93?(e.consume(g),l++,m):m(g)}function f(g){return g===58?(e.enter("definitionMarker"),e.consume(g),e.exit("definitionMarker"),r.includes(o)||r.push(o),an(e,p,"gfmFootnoteDefinitionWhitespace")):s(g)}function p(g){return n(g)}}function b_(e,n,s){return e.check(Lr,n,e.attempt(u_,n,s))}function x_(e){e.exit("gfmFootnoteDefinition")}function v_(e,n,s){const i=this;return an(e,r,"gfmFootnoteDefinitionIndent",5);function r(o){const l=i.events[i.events.length-1];return l&&l[1].type==="gfmFootnoteDefinitionIndent"&&l[2].sliceSerialize(l[1],!0).length===4?n(o):s(o)}}function y_(e){let s=(e||{}).singleTilde;const i={name:"strikethrough",tokenize:o,resolveAll:r};return s==null&&(s=!0),{text:{126:i},insideSpan:{null:[i]},attentionMarkers:{null:[126]}};function r(l,c){let u=-1;for(;++u<l.length;)if(l[u][0]==="enter"&&l[u][1].type==="strikethroughSequenceTemporary"&&l[u][1]._close){let d=u;for(;d--;)if(l[d][0]==="exit"&&l[d][1].type==="strikethroughSequenceTemporary"&&l[d][1]._open&&l[u][1].end.offset-l[u][1].start.offset===l[d][1].end.offset-l[d][1].start.offset){l[u][1].type="strikethroughSequence",l[d][1].type="strikethroughSequence";const m={type:"strikethrough",start:Object.assign({},l[d][1].start),end:Object.assign({},l[u][1].end)},h={type:"strikethroughText",start:Object.assign({},l[d][1].end),end:Object.assign({},l[u][1].start)},f=[["enter",m,c],["enter",l[d][1],c],["exit",l[d][1],c],["enter",h,c]],p=c.parser.constructs.insideSpan.null;p&&Ss(f,f.length,0,nl(p,l.slice(d+1,u),c)),Ss(f,f.length,0,[["exit",h,c],["enter",l[u][1],c],["exit",l[u][1],c],["exit",m,c]]),Ss(l,d-1,u-d+3,f),u=d+f.length-2;break}}for(u=-1;++u<l.length;)l[u][1].type==="strikethroughSequenceTemporary"&&(l[u][1].type="data");return l}function o(l,c,u){const d=this.previous,m=this.events;let h=0;return f;function f(g){return d===126&&m[m.length-1][1].type!=="characterEscape"?u(g):(l.enter("strikethroughSequenceTemporary"),p(g))}function p(g){const b=va(d);if(g===126)return h>1?u(g):(l.consume(g),h++,p);if(h<2&&!s)return u(g);const v=l.exit("strikethroughSequenceTemporary"),x=va(g);return v._open=!x||x===2&&!!b,v._close=!b||b===2&&!!x,c(g)}}}class j_{constructor(){this.map=[]}add(n,s,i){k_(this,n,s,i)}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 i=[];for(;s>0;)s-=1,i.push(n.slice(this.map[s][0]+this.map[s][1]),this.map[s][2]),n.length=this.map[s][0];i.push(n.slice()),n.length=0;let r=i.pop();for(;r;){for(const o of r)n.push(o);r=i.pop()}this.map.length=0}}function k_(e,n,s,i){let r=0;if(!(s===0&&i.length===0)){for(;r<e.map.length;){if(e.map[r][0]===n){e.map[r][1]+=s,e.map[r][2].push(...i);return}r+=1}e.map.push([n,s,i])}}function w_(e,n){let s=!1;const i=[];for(;n<e.length;){const r=e[n];if(s){if(r[0]==="enter")r[1].type==="tableContent"&&i.push(e[n+1][1].type==="tableDelimiterMarker"?"left":"none");else if(r[1].type==="tableContent"){if(e[n-1][1].type==="tableDelimiterMarker"){const o=i.length-1;i[o]=i[o]==="left"?"center":"right"}}else if(r[1].type==="tableDelimiterRow")break}else r[0]==="enter"&&r[1].type==="tableDelimiterRow"&&(s=!0);n+=1}return i}function N_(){return{flow:{null:{name:"table",tokenize:S_,resolveAll:C_}}}}function S_(e,n,s){const i=this;let r=0,o=0,l;return c;function c(M){let T=i.events.length-1;for(;T>-1;){const L=i.events[T][1].type;if(L==="lineEnding"||L==="linePrefix")T--;else break}const U=T>-1?i.events[T][1].type:null,V=U==="tableHead"||U==="tableRow"?w:u;return V===w&&i.parser.lazy[i.now().line]?s(M):V(M)}function u(M){return e.enter("tableHead"),e.enter("tableRow"),d(M)}function d(M){return M===124||(l=!0,o+=1),m(M)}function m(M){return M===null?s(M):Ct(M)?o>1?(o=0,i.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(M),e.exit("lineEnding"),p):s(M):Zt(M)?an(e,m,"whitespace")(M):(o+=1,l&&(l=!1,r+=1),M===124?(e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),l=!0,m):(e.enter("data"),h(M)))}function h(M){return M===null||M===124||bn(M)?(e.exit("data"),m(M)):(e.consume(M),M===92?f:h)}function f(M){return M===92||M===124?(e.consume(M),h):h(M)}function p(M){return i.interrupt=!1,i.parser.lazy[i.now().line]?s(M):(e.enter("tableDelimiterRow"),l=!1,Zt(M)?an(e,g,"linePrefix",i.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(M):g(M))}function g(M){return M===45||M===58?v(M):M===124?(l=!0,e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),b):C(M)}function b(M){return Zt(M)?an(e,v,"whitespace")(M):v(M)}function v(M){return M===58?(o+=1,l=!0,e.enter("tableDelimiterMarker"),e.consume(M),e.exit("tableDelimiterMarker"),x):M===45?(o+=1,x(M)):M===null||Ct(M)?N(M):C(M)}function x(M){return M===45?(e.enter("tableDelimiterFiller"),y(M)):C(M)}function y(M){return M===45?(e.consume(M),y):M===58?(l=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(M),e.exit("tableDelimiterMarker"),j):(e.exit("tableDelimiterFiller"),j(M))}function j(M){return Zt(M)?an(e,N,"whitespace")(M):N(M)}function N(M){return M===124?g(M):M===null||Ct(M)?!l||r!==o?C(M):(e.exit("tableDelimiterRow"),e.exit("tableHead"),n(M)):C(M)}function C(M){return s(M)}function w(M){return e.enter("tableRow"),_(M)}function _(M){return M===124?(e.enter("tableCellDivider"),e.consume(M),e.exit("tableCellDivider"),_):M===null||Ct(M)?(e.exit("tableRow"),n(M)):Zt(M)?an(e,_,"whitespace")(M):(e.enter("data"),S(M))}function S(M){return M===null||M===124||bn(M)?(e.exit("data"),_(M)):(e.consume(M),M===92?z:S)}function z(M){return M===92||M===124?(e.consume(M),S):S(M)}}function C_(e,n){let s=-1,i=!0,r=0,o=[0,0,0,0],l=[0,0,0,0],c=!1,u=0,d,m,h;const f=new j_;for(;++s<e.length;){const p=e[s],g=p[1];p[0]==="enter"?g.type==="tableHead"?(c=!1,u!==0&&(Qm(f,n,u,d,m),m=void 0,u=0),d={type:"table",start:Object.assign({},g.start),end:Object.assign({},g.end)},f.add(s,0,[["enter",d,n]])):g.type==="tableRow"||g.type==="tableDelimiterRow"?(i=!0,h=void 0,o=[0,0,0,0],l=[0,s+1,0,0],c&&(c=!1,m={type:"tableBody",start:Object.assign({},g.start),end:Object.assign({},g.end)},f.add(s,0,[["enter",m,n]])),r=g.type==="tableDelimiterRow"?2:m?3:1):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")?(i=!1,l[2]===0&&(o[1]!==0&&(l[0]=l[1],h=ao(f,n,o,r,void 0,h),o=[0,0,0,0]),l[2]=s)):g.type==="tableCellDivider"&&(i?i=!1:(o[1]!==0&&(l[0]=l[1],h=ao(f,n,o,r,void 0,h)),o=l,l=[o[1],s,0,0])):g.type==="tableHead"?(c=!0,u=s):g.type==="tableRow"||g.type==="tableDelimiterRow"?(u=s,o[1]!==0?(l[0]=l[1],h=ao(f,n,o,r,s,h)):l[1]!==0&&(h=ao(f,n,l,r,s,h)),r=0):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")&&(l[3]=s)}for(u!==0&&Qm(f,n,u,d,m),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=w_(n.events,s))}return e}function ao(e,n,s,i,r,o){const l=i===1?"tableHeader":i===2?"tableDelimiter":"tableData",c="tableContent";s[0]!==0&&(o.end=Object.assign({},ua(n.events,s[0])),e.add(s[0],0,[["exit",o,n]]));const u=ua(n.events,s[1]);if(o={type:l,start:Object.assign({},u),end:Object.assign({},u)},e.add(s[1],0,[["enter",o,n]]),s[2]!==0){const d=ua(n.events,s[2]),m=ua(n.events,s[3]),h={type:c,start:Object.assign({},d),end:Object.assign({},m)};if(e.add(s[2],0,[["enter",h,n]]),i!==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,b=s[3]-s[2]-1;e.add(g,b,[])}}e.add(s[3]+1,0,[["exit",h,n]])}return r!==void 0&&(o.end=Object.assign({},ua(n.events,r)),e.add(r,0,[["exit",o,n]]),o=void 0),o}function Qm(e,n,s,i,r){const o=[],l=ua(n.events,s);r&&(r.end=Object.assign({},l),o.push(["exit",r,n])),i.end=Object.assign({},l),o.push(["exit",i,n]),e.add(s+1,0,o)}function ua(e,n){const s=e[n],i=s[0]==="enter"?"start":"end";return s[1][i]}const E_={name:"tasklistCheck",tokenize:__};function M_(){return{text:{91:E_}}}function __(e,n,s){const i=this;return r;function r(u){return i.previous!==null||!i._gfmTasklistFirstContentOfListItem?s(u):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(u),e.exit("taskListCheckMarker"),o)}function o(u){return bn(u)?(e.enter("taskListCheckValueUnchecked"),e.consume(u),e.exit("taskListCheckValueUnchecked"),l):u===88||u===120?(e.enter("taskListCheckValueChecked"),e.consume(u),e.exit("taskListCheckValueChecked"),l):s(u)}function l(u){return u===93?(e.enter("taskListCheckMarker"),e.consume(u),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),c):s(u)}function c(u){return Ct(u)?n(u):Zt(u)?e.check({tokenize:A_},n,s)(u):s(u)}}function A_(e,n,s){return an(e,i,"whitespace");function i(r){return r===null?s(r):n(r)}}function R_(e){return ff([n_(),m_(),y_(e),N_(),M_()])}const T_={};function ri(e){const n=this,s=e||T_,i=n.data(),r=i.micromarkExtensions||(i.micromarkExtensions=[]),o=i.fromMarkdownExtensions||(i.fromMarkdownExtensions=[]),l=i.toMarkdownExtensions||(i.toMarkdownExtensions=[]);r.push(R_(s)),o.push(XM()),l.push(ZM(s))}const Xm=100;function ag(e,n,s){const[i,r]=a.useState([]),[o,l]=a.useState(!1),[c,u]=a.useState(!1),[d,m]=a.useState(null),[h,f]=a.useState(!1),p=a.useRef(null),g=a.useRef(!1),b=a.useRef(0),v=a.useRef(e),x=a.useRef(s),y=a.useRef(n),j=a.useRef(0);(v.current!==e||x.current!==s||y.current!==n)&&(v.current=e,x.current=s,y.current=n,b.current++,g.current=!0,r([]),l(!1),u(!1),m(null),f(!1),p.current&&(p.current(),p.current=null)),a.useEffect(()=>{if(!e||!n){p.current&&(p.current(),p.current=null);return}const _=b.current,S=++j.current;g.current=!1;const z=e,M=s;async function T(){if(!z)return;l(!0),f(!1);try{const V=await Jd(z,M,{limit:Xm});if(g.current||b.current!==_||j.current!==S)return;r(V.entries),u(V.hasMore),m(V.total)}catch{if(g.current||b.current!==_||j.current!==S)return;r([]),u(!1),m(null)}finally{!g.current&&b.current===_&&j.current===S&&l(!1)}const U=M?`?projectId=${encodeURIComponent(M)}`:"";p.current=Ks(`/api/tasks/${z}/logs/stream${U}`,{events:{"agent:log":V=>{if(!(g.current||b.current!==_))try{const L=JSON.parse(V.data);r(R=>[...R,L]),m(R=>R!==null?R+1:null)}catch{}}}})}return T(),()=>{g.current=!0,p.current&&(p.current(),p.current=null)}},[e,n,s]);const C=a.useCallback(async()=>{if(!e||h)return;const _=b.current,S=i.length,z=e;f(!0);try{const M=await Jd(z,s,{limit:Xm,offset:S});if(g.current||b.current!==_)return;r(T=>[...M.entries,...T]),u(M.hasMore),m(M.total)}catch{}finally{f(!1)}},[e,s,i.length,h]),w=a.useCallback(()=>r([]),[]);return{entries:i,loading:o,clear:w,loadMore:C,hasMore:c,total:d,loadingMore:h}}function P_(e){const n=new Date(e),i=new Date().getTime()-n.getTime(),r=Math.floor(i/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 Zm={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})},rg=50,I_={triage:"Plan"};function eh(e){return e.scrollHeight-(e.scrollTop+e.clientHeight)<=rg}function Qc(e){return[e.taskId,e.timestamp,e.agent??"",e.type,e.text,e.detail??""].join("|")}function $_(e){const n=new Map;return e.map(s=>{const i=Qc(s),r=n.get(i)??0;return n.set(i,r+1),`${i}|${r}`})}function D_(e){return e==="tool"||e==="tool_result"||e==="tool_error"}function Xl(e){return e?t.jsx("pre",{className:"agent-log-tool-detail",children:e}):null}function L_(e,n){return e.agent?D_(e.type)?!0:!n||n.agent!==e.agent||n.type!==e.type:!1}function z_(e,n){const s=[];for(let i=0;i<e.length;i+=1){const r=e[i],o=n[i]??`${Qc(r)}|fallback`,l=i>0?e[i-1]:void 0,c=L_(r,l);if(r.type==="text"||r.type==="thinking"){const u=[r];let d=i+1;for(;d<e.length;){const h=e[d];if(h.type!==r.type||h.agent!==r.agent)break;u.push(h),d+=1}const m=n[d-1]??`${Qc(e[d-1])}|fallback`;s.push({kind:r.type,entries:u,key:`${o}->${m}`,showBadge:c}),i=d-1;continue}s.push({kind:"single",entry:r,key:o,showBadge:c})}return s}function F_({entries:e,loading:n,executorModel:s,validatorModel:i,planningModel:r,hasMore:o=!1,onLoadMore:l,loadingMore:c=!1,totalCount:u=null}){const d=a.useRef(null),m=a.useRef(0),h=a.useRef(0),f=a.useRef(null),p=a.useRef(null),[g,b]=a.useState(!0),[v,x]=a.useState(!1),[y,j]=a.useState(!1),[N,C]=a.useState(!0),w=a.useMemo(()=>$_(e),[e]),_=a.useMemo(()=>z_(e,w),[e,w]);a.useLayoutEffect(()=>{const R=d.current;if(!R)return;const F=e.length,W=m.current,G=h.current||R.scrollHeight,te=w[0]??null,E=w[w.length-1]??null,$=f.current!==te,P=p.current!==E;if(F>W)if(W===0)R.scrollTop=R.scrollHeight;else{const k=G-(R.scrollTop+R.clientHeight)<=rg,O=P&&!$,ne=$&&!P;if(O&&k&&(R.scrollTop=R.scrollHeight),ne){const we=R.scrollHeight-G;we>0&&(R.scrollTop+=we)}}m.current=F,h.current=R.scrollHeight,f.current=te,p.current=E,C(eh(R))},[e,w]);const S=a.useCallback(()=>{const R=d.current;R&&C(eh(R))},[]),z=a.useCallback(()=>{const R=d.current;R&&(R.scrollTop=R.scrollHeight,C(!0))},[]),M=a.useCallback(R=>{R.key==="Escape"&&v&&x(!1)},[v]);a.useEffect(()=>{if(v)return document.addEventListener("keydown",M),()=>{document.removeEventListener("keydown",M)}},[v,M]);const T=s?.provider&&s?.modelId,U=i?.provider&&i?.modelId,V=r?.provider&&r?.modelId,L=a.useMemo(()=>{const R=[];return T&&R.push({role:"Executor",provider:s.provider,modelId:s.modelId}),U&&R.push({role:"Reviewer",provider:i.provider,modelId:i.modelId}),V&&R.push({role:"Planning",provider:r.provider,modelId:r.modelId}),R},[T,s,U,i,V,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${v?" 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:[L.map(R=>t.jsx(Dn,{provider:R.provider,size:"sm"},`${R.role}-${R.provider}-${R.modelId??"default"}`)),t.jsx("button",{className:"agent-log-model-expand-btn",onClick:()=>j(R=>!R),"aria-label":y?"Collapse model details":"Expand model details","aria-expanded":y,"aria-controls":"agent-log-model-details","data-testid":"agent-log-model-expand",children:y?t.jsx(en,{size:14}):t.jsx(jn,{size:14})})]}),t.jsxs("div",{className:"agent-log-model-header-toggle",children:[t.jsx("button",{className:"agent-log-mode-toggle",onClick:()=>b(R=>!R),"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:()=>x(R=>!R),"aria-label":v?"Exit full screen":"Expand agent log to full screen","data-testid":"agent-log-fullscreen-toggle",title:v?"Exit full screen":"Expand agent log to full screen",children:v?t.jsx(Rr,{size:14}):t.jsx(Vo,{size:14})})]}),y&&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(Dn,{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:"}),U?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Dn,{provider:i.provider,size:"sm"}),t.jsxs("span",{children:[i.provider,"/",i.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:"}),V?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Dn,{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:d,className:"agent-log-viewer-scroll",onScroll:S,children:[u!==null&&t.jsxs("div",{className:"agent-log-summary","data-testid":"agent-log-summary",children:["Showing ",e.length," of ",u," entries"]}),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(lt,{size:14,className:"animate-spin"}),"Loading…"]}):"Load More"})}),_.map(R=>{const F=R.kind==="single"?R.entry:R.entries[0],W=R.showBadge?t.jsx("span",{className:"agent-log-timestamp","data-testid":"agent-log-timestamp",children:P_(F.timestamp)}):null,G=R.showBadge?t.jsxs("span",{className:"agent-log-badge-row",children:[t.jsxs("span",{className:"agent-log-agent-badge",children:["[",I_[F.agent]??F.agent,"]"]}),W]}):null;if(R.kind==="single"){const{entry:E}=R;if(E.type==="tool")return t.jsxs("div",{className:"agent-log-tool",children:[G,t.jsxs("div",{className:"agent-log-tool-title",children:["⚡ ",E.text]}),Xl(E.detail)]},R.key);if(E.type==="tool_result")return t.jsxs("div",{className:"agent-log-tool-result",children:[G,t.jsxs("div",{className:"agent-log-tool-title",children:["✓ ",E.text]}),Xl(E.detail)]},R.key);if(E.type==="tool_error")return t.jsxs("div",{className:"agent-log-tool-error",children:[G,t.jsxs("div",{className:"agent-log-tool-title",children:["✗ ",E.text]}),Xl(E.detail)]},R.key)}const te=R.kind==="single"?F.text:R.entries.map(E=>E.text).join("");return R.kind==="thinking"?t.jsxs("div",{className:"agent-log-thinking",children:[G,g?t.jsx("div",{className:"markdown-body",children:t.jsx(ai,{remarkPlugins:[ri],components:Zm,children:te})}):t.jsx("pre",{className:"agent-log-plain-block",children:te})]},R.key):t.jsxs("div",{className:"agent-log-text",children:[G,g?t.jsx("div",{className:"markdown-body",children:t.jsx(ai,{remarkPlugins:[ri],components:Zm,children:te})}):t.jsx("pre",{className:"agent-log-plain-block",children:te})]},R.key)}),!N&&t.jsxs("button",{type:"button",className:"agent-log-return-to-live",onClick:z,"data-testid":"agent-log-return-to-live",children:[t.jsx(en,{size:12}),t.jsx("span",{children:"Live"})]})]})]})}function ya(e){return e??void 0}function ro(e){return{provider:ya(e.modelProvider),modelId:ya(e.modelId)}}function oo(e){return{provider:ya(e.validatorModelProvider),modelId:ya(e.validatorModelId)}}function lo(e){return{provider:ya(e.planningModelProvider),modelId:ya(e.planningModelId)}}function O_(e,n){return Tp(e,n)}function U_(e,n){return Pp(e,n)}function B_(e,n){return Ip(e,n)}function Zl(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 ec(e){return e.provider&&e.modelId?`${e.provider}/${e.modelId}`:""}function tc(e,n){return e.provider===n.provider&&e.modelId===n.modelId}function H_(e,n){const i={executor:"Executor",validator:"Reviewer",planning:"Planning"}[e]||e;return!n.provider||!n.modelId?`${i} model set to default`:`${i} model set to ${n.provider}/${n.modelId}`}function q_({task:e,addToast:n,onTaskUpdated:s,settings:i}){const[r,o]=a.useState([]),[l,c]=a.useState([]),[u,d]=a.useState([]),[m,h]=a.useState(!1),[f,p]=a.useState(null),[g,b]=a.useState(()=>ro(e)),[v,x]=a.useState(()=>ro(e)),[y,j]=a.useState(()=>oo(e)),[N,C]=a.useState(()=>oo(e)),[w,_]=a.useState(()=>lo(e)),[S,z]=a.useState(()=>lo(e)),[M,T]=a.useState(()=>e.thinkingLevel??null),[U,V]=a.useState(()=>e.thinkingLevel??null),[L,R]=a.useState(null),F=a.useRef(e.id);a.useEffect(()=>{h(!0),p(null),hs().then(ue=>{o(ue.models),c(ue.favoriteProviders),d(ue.favoriteModels)}).catch(ue=>{p(ue.message||"Failed to load models")}).finally(()=>{h(!1)})},[]);const W=a.useCallback(async ue=>{const me=l,be=me.includes(ue)?me.filter(Ae=>Ae!==ue):[ue,...me];c(be);try{await fn({favoriteProviders:be,favoriteModels:u})}catch{c(me),n("Failed to update favorites","error")}},[l,u,n]),G=a.useCallback(async ue=>{const me=u,be=me.includes(ue)?me.filter(Ae=>Ae!==ue):[ue,...me];d(be);try{await fn({favoriteProviders:l,favoriteModels:be})}catch{d(me),n("Failed to update model favorites","error")}},[u,l,n]);a.useEffect(()=>{F.current=e.id;const ue=ro(e),me=oo(e),ae=lo(e);b(ue),x(ue),j(me),C(me),_(ae),z(ae);const be=e.thinkingLevel??null;T(be),V(be),R(null)},[e.id,e.modelProvider,e.modelId,e.validatorModelProvider,e.validatorModelId,e.planningModelProvider,e.planningModelId,e.thinkingLevel]);const te=a.useMemo(()=>ec(g),[g]),E=a.useMemo(()=>ec(y),[y]),$=a.useMemo(()=>ec(w),[w]),P=a.useMemo(()=>O_(e,i),[e,i]),k=a.useMemo(()=>U_(e,i),[e,i]),O=a.useMemo(()=>B_(e,i),[e,i]),ne=L!==null,we=a.useCallback(async(ue,me)=>{const ae=e.id,be=v,Ae=N,Fe=S;R(ue);try{const at=s?ue==="executor"?{modelProvider:me.provider??null,modelId:me.modelId??null}:ue==="validator"?{validatorModelProvider:me.provider??null,validatorModelId:me.modelId??null}:{planningModelProvider:me.provider??null,planningModelId:me.modelId??null}:{modelProvider:(ue==="executor"?me:v).provider??null,modelId:(ue==="executor"?me:v).modelId??null,validatorModelProvider:(ue==="validator"?me:N).provider??null,validatorModelId:(ue==="validator"?me:N).modelId??null,planningModelProvider:(ue==="planning"?me:S).provider??null,planningModelId:(ue==="planning"?me:S).modelId??null},et=await ni(ae,at);if(F.current!==ae)return;const Ye=ro(et),rt=oo(et),Oe=lo(et);x(Ye),b(Ye),C(rt),j(rt),z(Oe),_(Oe),s?.(et),n(H_(ue,{executor:Ye,validator:rt,planning:Oe}[ue]),"success")}catch(at){if(F.current!==ae)return;ue==="executor"?b(be):ue==="validator"?j(Ae):_(Fe),n(je(at)||"Failed to save model settings","error")}finally{F.current===ae&&R(null)}},[e.id,v,N,S,n,s]),ie=a.useCallback(ue=>{const me=Zl(ue);b(me),!tc(me,v)&&we("executor",me)},[v,we]),ce=a.useCallback(ue=>{const me=Zl(ue);j(me),!tc(me,N)&&we("validator",me)},[N,we]),ke=a.useCallback(ue=>{const me=Zl(ue);_(me),!tc(me,S)&&we("planning",me)},[S,we]),D=a.useCallback(async ue=>{const me=e.id,ae=U,be=ue===""?null:ue;T(be),R("thinking");try{const Ae=await ni(me,{thinkingLevel:be});if(F.current!==me)return;const Fe=Ae.thinkingLevel??null;V(Fe),T(Fe),s?.(Ae);const at=i?.defaultThinkingLevel??"off";n(Fe===null?`Thinking level set to default (${at})`:`Thinking level set to ${Fe}`,"success")}catch(Ae){if(F.current!==me)return;T(ae),n(je(Ae)||"Failed to save thinking level","error")}finally{F.current===me&&R(null)}},[e.id,U,i,n,s]),se=!v.provider&&!v.modelId,Z=!N.provider&&!N.modelId,ge=!S.provider&&!S.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."}),m?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:()=>{h(!0),p(null),hs().then(ue=>{o(ue.models),c(ue.favoriteProviders),d(ue.favoriteModels)}).catch(ue=>p(ue.message)).finally(()=>h(!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:se?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",P.provider&&P.modelId?` (${P.provider}/${P.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[v.provider&&t.jsx(Dn,{provider:v.provider,size:"sm"}),v.provider,"/",v.modelId]})}),t.jsx(Jn,{id:"executorModel",label:"Executor Model",value:te,onChange:ie,models:r,disabled:ne,placeholder:"Select executor model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:u,onToggleModelFavorite:G}),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:Z?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",k.provider&&k.modelId?` (${k.provider}/${k.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[N.provider&&t.jsx(Dn,{provider:N.provider,size:"sm"}),N.provider,"/",N.modelId]})}),t.jsx(Jn,{id:"validatorModel",label:"Reviewer Model",value:E,onChange:ce,models:r,disabled:ne,placeholder:"Select reviewer model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:u,onToggleModelFavorite:G}),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:ge?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",O.provider&&O.modelId?` (${O.provider}/${O.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[S.provider&&t.jsx(Dn,{provider:S.provider,size:"sm"}),S.provider,"/",S.modelId]})}),t.jsx(Jn,{id:"planningModel",label:"Planning Model",value:$,onChange:ke,models:r,disabled:ne,placeholder:"Select planning model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:u,onToggleModelFavorite:G}),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:U===null?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default (",i?.defaultThinkingLevel??"off",")"]}):t.jsx("span",{className:"model-badge model-badge-custom",children:U})}),t.jsxs("select",{id:"thinkingLevel",value:M??"",onChange:ue=>D(ue.target.value),disabled:ne,className:"thinking-level-select",children:[t.jsxs("option",{value:"",children:["Default (",i?.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:se&&Z&&ge&&U===null?"Using project or global default models.":"Model settings are up to date."})]})]})}const V_={open:t.jsx(Uo,{size:16}),closed:t.jsx(_r,{size:16}),merged:t.jsx(ip,{size:16})};function W_({taskId:e,projectId:n,prInfo:s,automationStatus:i,autoMerge:r=!1,prAuthAvailable:o,onPrCreated:l,onPrUpdated:c,addToast:u}){const[d,m]=a.useState(!1),[h,f]=a.useState(""),[p,g]=a.useState(""),[b,v]=a.useState(!1),[x,y]=a.useState(!1),[j,N]=a.useState(null),C=a.useCallback(async()=>{if(h.trim()){v(!0);try{const z=await Ly(e,{title:h.trim(),body:p.trim()||void 0},n);l(z),m(!1),f(""),g(""),u(`Created PR #${z.number}`,"success")}catch(z){u(je(z)||"Failed to create PR","error")}finally{v(!1)}}},[e,h,p,n,l,u]),w=a.useCallback(async()=>{if(s){y(!0);try{const z=await zy(e,n);N(z),c(z.prInfo),u("PR status refreshed","success")}catch(z){u(je(z)||"Failed to refresh PR","error")}finally{y(!1)}}},[e,s,n,c,u]);if(!s)return i==="creating-pr"?t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(ws,{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(ws,{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."})]}):d?t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(ws,{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:h,onChange:z=>f(z.target.value),disabled:b,className:"pr-input"}),t.jsx("textarea",{placeholder:"PR description (optional)",value:p,onChange:z=>g(z.target.value),disabled:b,className:"pr-textarea",rows:3}),t.jsxs("div",{className:"pr-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>m(!1),disabled:b,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:C,disabled:!h.trim()||b,children:b?"Creating…":"Create PR"})]})]})]}):t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(ws,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>m(!0),disabled:!o,title:o?"Create a PR for this task":"PR auth unavailable — run 'gh auth login'",children:[t.jsx(cn,{size:14,className:"pr-section-icon--sm"}),"Create PR"]}),!o&&t.jsxs("div",{className:"pr-hint pr-hint--subtle",children:["Run ",t.jsx("code",{children:"gh auth login"})," to enable PR creation."]})]});const _=V_[s.status]??t.jsx(Uo,{size:16}),S=j?.blockingReasons??[];return t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(ws,{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:_}),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:w,disabled:x,title:"Refresh PR status",children:t.jsx($n,{size:14,style:{verticalAlign:"middle",opacity:x?.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})]}),i==="merging-pr"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:"fn is merging this pull request automatically."}),i==="awaiting-pr-checks"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:S.length>0?`Waiting for: ${S.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(Ni,{size:14}),s.commentCount]}),t.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"pr-link",children:[t.jsx(Tb,{size:14}),"View on GitHub"]})]})]})]})}const th=2e3;function K_(e){const n=e.updatedAt||e.createdAt,s=new Date(n).toLocaleString();return e.updatedAt?`${s} (edited)`:s}function G_(e){return e==="agent"||e==="system"}function J_({task:e,onTaskUpdated:n,addToast:s,currentAuthor:i="user",projectId:r}){const[o,l]=a.useState(""),[c,u]=a.useState(null),[d,m]=a.useState(""),[h,f]=a.useState(!1),[p,g]=a.useState(null),b=a.useMemo(()=>[...e.comments||[]].sort((_,S)=>new Date(S.createdAt).getTime()-new Date(_.createdAt).getTime()),[e.comments]),v=o.length>th;async function x(){const _=o.trim();if(_){f(!0);try{const S=await hy(e.id,_,r);l(""),n?.(S),s("Comment added","success")}catch(S){s(je(S)||"Failed to add comment","error")}finally{f(!1)}}}async function y(_){const S=d.trim();if(S){f(!0);try{const z=await ly(e.id,_,S,r);u(null),m(""),n?.(z),s("Comment updated","success")}catch(z){s(je(z)||"Failed to update comment","error")}finally{f(!1)}}}async function j(_){g(_);try{const S=await cy(e.id,_,r);n?.(S),s("Comment deleted","success")}catch(S){s(je(S)||"Failed to delete comment","error")}finally{g(null)}}function N(_){_.key==="Enter"&&(_.ctrlKey||_.metaKey)&&(_.preventDefault(),x())}return t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Comments"}),b.length===0?t.jsx("div",{className:"detail-log-empty",children:"No comments yet."}):t.jsx("div",{className:"detail-activity-list",children:b.map(_=>{const S=_.author===i,z=c===_.id,M=G_(_.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:[M?t.jsx("span",{className:"ai-guidance-badge","data-testid":"ai-guidance-badge",children:"AI Guidance"}):t.jsx("strong",{children:_.author}),t.jsx("span",{className:"detail-log-timestamp",children:K_(_)})]}),S&&!z?t.jsxs("div",{className:"comments-actions-row",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{u(_.id),m(_.text)},children:"Edit"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>void j(_.id),disabled:p===_.id,children:p===_.id?"Deleting…":"Delete"})]}):null]}),z?t.jsxs("div",{className:"comments-edit-form",children:[t.jsx("textarea",{value:d,onChange:T=>m(T.target.value),rows:3,className:"comments-textarea"}),t.jsxs("div",{className:"comments-edit-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{u(null),m("")},disabled:h,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void y(_.id),disabled:h||!d.trim(),children:"Save"})]})]}):t.jsx("div",{className:"detail-log-outcome comments-outcome-text",children:_.text})]},_.id)})}),t.jsxs("div",{className:"comments-compose-form",children:[t.jsx("textarea",{value:o,onChange:_=>l(_.target.value),onKeyDown:N,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," / ",th]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void x(),disabled:h||!o.trim()||v,children:h?"Posting…":"Add Comment"})]})]})]})}function Y_(e){return e?e.slice(0,7):"Unknown"}function Q_({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:Y_(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"}),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 og(e){return e.split(`
|
|
647
|
-
`).map((s,i)=>{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}
|
|
648
|
-
`},i):t.jsx(jo.Fragment,{children:`${s}
|
|
649
|
-
`},i)})}function X_(e){switch(e){case"added":return"A";case"deleted":return"D";case"modified":return"M";default:return"?"}}function Z_({isOpen:e,taskId:n,files:s,stats:i,mergeDetails:r,column:o,onClose:l,onRefresh:c}){const[u,d]=a.useState(null),[m,h]=a.useState(!0),f=a.useRef(null);oi(f,e,"fusion:changes-diff-modal-size");const p=Mi(l);a.useEffect(()=>{s.length>0&&u===null&&d(0)},[s,u]);const g=a.useCallback(()=>{d(y=>y!==null&&y>0?y-1:y)},[]),b=a.useCallback(()=>{d(y=>y!==null&&y<s.length-1?y+1:y)},[]);if(a.useEffect(()=>{if(!e)return;const y=j=>{if(j.key==="Escape"){l();return}j.key==="ArrowUp"&&(j.metaKey||j.ctrlKey)&&(j.preventDefault(),g()),j.key==="ArrowDown"&&(j.metaKey||j.ctrlKey)&&(j.preventDefault(),b())};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[e,l,g,b]),!e)return null;const v=u!==null?s[u]:null,x=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(Bs,{size:18}),t.jsxs("span",{children:["Changes — ",n]}),t.jsxs("span",{className:"changes-stat-summary",children:[t.jsxs("span",{className:"diff-add",children:["+",i.additions]})," ",t.jsxs("span",{className:"diff-del",children:["-",i.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:u===null||u<=0,title:"Previous file (Ctrl+↑)","aria-label":"Previous file",children:t.jsx(Oo,{size:14})}),t.jsx("span",{className:"changes-nav-indicator","aria-live":"polite",children:u!==null?`${u+1}/${s.length}`:`—/${s.length}`}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:b,disabled:u===null||u>=s.length-1,title:"Next file (Ctrl+↓)","aria-label":"Next file",children:t.jsx(jn,{size:14})})]}),t.jsx("button",{className:`btn btn-sm ${m?"btn-primary":""}`,onClick:()=>h(y=>!y),title:m?"Disable word wrap":"Enable word wrap","aria-label":"Toggle word wrap",children:t.jsx(No,{size:14})}),c&&t.jsxs("button",{className:"btn btn-sm",onClick:c,children:[t.jsx($n,{size:14}),"Refresh"]}),t.jsx("button",{className:"modal-close",onClick:l,"aria-label":"Close",children:t.jsx(Jt,{size:20})})]})]}),t.jsxs("div",{className:"changes-diff-body",children:[t.jsxs("div",{className:"changes-diff-sidebar",children:[x&&r&&t.jsxs("div",{className:"commit-diff-meta",children:[r.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ar,{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,j)=>t.jsxs("button",{className:`changes-diff-file-item ${u===j?"selected":""}`,onClick:()=>d(j),title:y.path,children:[t.jsx("span",{className:`changes-file-status changes-file-status--${y.status}`,children:X_(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 ${m?"changes-diff-patch--wrap":"changes-diff-patch--nowrap"}`,children:t.jsx("code",{children:og(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(Bs,{size:48,opacity:.3}),t.jsx("p",{children:"Select a file to view its diff"})]})})]})]})})}function lg(e){switch(e){case"added":return"A";case"deleted":return"D";case"modified":return"M";default:return"?"}}function nc(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(Ar,{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(Bs,{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(i=>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:lg("unknown")}),t.jsx("span",{className:"changes-file-path",title:i,children:t.jsx("bdo",{dir:"ltr",children:i})})]})},i))})]})}function eA({taskId:e,worktree:n,projectId:s,column:i,mergeDetails:r,modifiedFiles:o}){const[l,c]=a.useState([]),[u,d]=a.useState({filesChanged:0,additions:0,deletions:0}),[m,h]=a.useState(!0),[f,p]=a.useState(null),[g,b]=a.useState(new Set),[v,x]=a.useState(null),[y,j]=a.useState(!0),[N,C]=a.useState(!1),w=i==="done",_=w&&!!r?.commitSha,S=i==="in-progress"||i==="in-review"||_,z=a.useCallback(async()=>{if(!S){h(!1);return}try{h(!0),p(null);const L=await Np(e,void 0,s),R=L.files.map(F=>({path:F.path,status:F.status,additions:F.additions,deletions:F.deletions,patch:F.patch}));c(R),d(L.stats),R.length>0&&(b(new Set([R[0].path])),x(0))}catch(L){p(je(L)||"Failed to load diff")}finally{h(!1)}},[e,s,S]);a.useEffect(()=>{z()},[z]);const M=L=>{b(R=>{const F=new Set(R);if(F.has(L))F.delete(L);else{F.add(L);const W=l.findIndex(G=>G.path===L);W!==-1&&x(W)}return F})},T=L=>{if(L<0||L>=l.length)return;const R=l[L].path;b(new Set([R])),x(L)},U=v!==null&&v>0,V=v!==null&&v<l.length-1;if(m)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(ms,{size:16}),t.jsxs("span",{children:["Error loading changes: ",f]})]})});if(!w&&!n)return o&&o.length>0?nc(o,!1):t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Bs,{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."})]})});if(w&&!_){if(o&&o.length>0)return nc(o,!0,r);const L=r?.filesChanged,R=r?.insertions,F=r?.deletions,W=L!=null||R!=null||F!=null;return t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Bs,{size:24}),t.jsx("p",{children:"Detailed file changes unavailable."}),t.jsx("span",{className:"task-changes-state-hint",children:W?`Merge summary: ${L??0} file${(L??0)===1?"":"s"} changed, +${R??0} additions, -${F??0} deletions.`:"No merge commit was recorded for this task."})]})})}return l.length===0?o&&o.length>0?nc(o,w,r):t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Bs,{size:24}),t.jsx("p",{children:"No files modified."}),t.jsx("span",{className:"task-changes-state-hint",children:w?"No file changes were recorded in the merge commit.":"The agent did not modify any files during execution."})]})}):t.jsxs("div",{className:"detail-section task-changes-tab",children:[w&&r&&t.jsxs("div",{className:"commit-diff-meta",children:[r.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ar,{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(Bs,{size:16}),"Files Changed (",u.filesChanged,")"]}),t.jsxs("span",{className:"task-changes-stats changes-stat-summary",children:[t.jsxs("span",{className:"diff-add",children:["+",u.additions]})," ",t.jsxs("span",{className:"diff-del",children:["-",u.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:()=>U&&T(v-1),disabled:!U,title:"Previous file","aria-label":"Previous file",children:t.jsx(Oo,{size:14})}),t.jsx("span",{className:"changes-nav-indicator","aria-live":"polite",children:v!==null?`${v+1}/${l.length}`:`—/${l.length}`}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>V&&T(v+1),disabled:!V,title:"Next file","aria-label":"Next file",children:t.jsx(jn,{size:14})})]}),t.jsx("button",{className:`btn btn-sm ${y?"btn-primary":""}`,onClick:()=>j(L=>!L),title:y?"Disable word wrap":"Enable word wrap","aria-label":"Toggle word wrap",children:t.jsx(No,{size:14})})]}),t.jsxs("div",{className:"changes-header-actions-secondary",children:[t.jsx("button",{className:"btn btn-sm",onClick:z,disabled:m,children:"Refresh"}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>C(!0),title:"Expand to full-screen diff view","aria-label":"Expand diff view",children:t.jsx(Vo,{size:14})})]})]})]}),t.jsx("div",{className:"changes-file-list task-changes-file-list--compact",children:l.map(L=>{const R=g.has(L.path);return t.jsxs("div",{className:`changes-file-item ${R?"expanded":""}`,children:[t.jsxs("button",{className:"changes-file-header",onClick:()=>M(L.path),children:[t.jsx("span",{className:"changes-file-toggle",children:R?t.jsx(en,{size:14}):t.jsx(jn,{size:14})}),t.jsx("span",{className:`changes-file-status changes-file-status--${L.status}`,title:L.status,children:lg(L.status)}),t.jsx("span",{className:"changes-file-path",title:L.path,children:t.jsx("bdo",{dir:"ltr",children:L.path})}),t.jsxs("span",{className:"changes-file-stat",title:`+${L.additions} -${L.deletions}`,children:["+",L.additions," -",L.deletions]})]}),R&&L.patch&&t.jsx("div",{className:"changes-file-content",children:t.jsx("pre",{className:`changes-diff-patch ${y?"changes-diff-patch--wrap":"changes-diff-patch--nowrap"}`,children:t.jsx("code",{children:og(L.patch)})})})]},L.path)})}),t.jsx(Z_,{isOpen:N,taskId:e,files:l,stats:u,mergeDetails:r,column:i,onClose:()=>C(!1),onRefresh:z})]})}function nh(e){return{executorValue:e?.executorProvider&&e?.executorModelId?`${e.executorProvider}/${e.executorModelId}`:"",validatorValue:e?.validatorProvider&&e?.validatorModelId?`${e.validatorProvider}/${e.validatorModelId}`:""}}function tA(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/-+/g,"-").replace(/^[-_]+|[-_]+$/g,"").slice(0,32)||"preset"}function FL(e,n){const s=tA(e),i=new Set(n.map(c=>c.id));if(!i.has(s))return s;const r=30;let o=s,l=1;for(;i.has(o)&&l<100;){const c=`-${l}`;o=`${s.slice(0,r-c.length)}${c}`,l++}return o}function nA(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}const sh=["image/png","image/jpeg","image/gif","image/webp"];function sA(e,n,s){const i=e==="post-merge"?"phase-badge--post-merge":"phase-badge--pre-merge";return t.jsx("span",{className:`phase-badge ${i}`,"data-testid":`${s}-${n}`,children:e==="post-merge"?"Post-merge":"Pre-merge"})}function cg({mode:e,description:n,onDescriptionChange:s,title:i,onTitleChange:r,dependencies:o,onDependenciesChange:l,nodeId:c,onNodeIdChange:u,nodeOptions:d,nodeOverrideDisabled:m=!1,nodeOverrideDisabledReason:h,priority:f,onPriorityChange:p,executorModel:g,onExecutorModelChange:b,validatorModel:v,onValidatorModelChange:x,planningModel:y,onPlanningModelChange:j,thinkingLevel:N,onThinkingLevelChange:C,presetMode:w,onPresetModeChange:_,selectedPresetId:S,onSelectedPresetIdChange:z,selectedWorkflowSteps:M,onWorkflowStepsChange:T,onDefaultOnApplied:U,pendingImages:V,onImagesChange:L,tasks:R,projectId:F,disabled:W=!1,addToast:G,isActive:te=!0,onAutoSaveDescription:E,onPlanningMode:$,onSubtaskBreakdown:P,onClose:k,renderBelowPrimary:O,renderBelowModelConfiguration:ne,hideDependencies:we,autoExpandMoreOptionsOnSelection:ie=!0,reviewLevel:ce,onReviewLevelChange:ke,executionMode:D,onExecutionModeChange:se}){const Z=(we?!1:o.length>0)||V.length>0||M.length>0||w!=="default"||(f??Ns)!==Ns||g!==""||v!==""||(y||"")!==""||(N||"")!==""||ce!==void 0||D==="fast"||(c||"")!=="",[ge,ue]=a.useState(!1),[me,ae]=a.useState(ie?Z:!1),[be,Ae]=a.useState(""),[Fe,at]=a.useState([]),[et,Ye]=a.useState([]),[rt,Oe]=a.useState([]),[We,oe]=a.useState(!1),[xe,ee]=a.useState(null),[Re,Ue]=a.useState([]),[pe,Me]=a.useState("idle"),[ze,tt]=a.useState(!1),[ye,de]=a.useState(!1),[Ie,fe]=a.useState(!1),_e=a.useRef(null),Ge=a.useRef(null),Pe=a.useRef(null),ft=a.useRef(null),Y=a.useRef(null),le=a.useRef(null),ve=a.useRef(null),nt=a.useRef(!1),Q=a.useRef(Z),Je=a.useRef(n.trim()),ut=a.useRef(n.trim());a.useEffect(()=>{te&&(oe(!0),hs().then(A=>{at(A.models),Ye(A.favoriteProviders),Oe(A.favoriteModels)}).catch(()=>{}).finally(()=>oe(!1)),Ko(F).then(A=>ee(A)).catch(()=>ee(null)),Go(F).then(A=>Ue(A.filter(X=>X.enabled))).catch(()=>Ue([])))},[te,F]);const ht=xe?.modelPresets||[],Et=ht.find(A=>A.id===S),yt=(we?!1:o.length>0)||V.length>0||M.length>0||w!=="default"||(f??Ns)!==Ns||g!==""||v!==""||(y||"")!==""||(N||"")!==""||ce!==void 0||D==="fast"||(c||"")!=="";a.useEffect(()=>{if(e!=="create"||!te||!xe?.autoSelectModelPreset)return;const A=(xe.defaultPresetBySize,void 0);if(A){const X=nh(A);z(A.id),_("preset"),b(X.executorValue),x(X.validatorValue)}},[te,xe,ht,e]);const bt=a.useRef(!1);a.useEffect(()=>{if(e!=="create"||!te||bt.current||Re.length===0)return;const A=Re.filter($e=>$e.defaultOn);if(A.length===0)return;bt.current=!0;const X=A.map($e=>$e.id);T(X),U?.(X)},[e,te,Re]),a.useEffect(()=>{te||(bt.current=!1)},[te]),a.useEffect(()=>{if(!ie){Q.current=yt;return}yt&&!Q.current&&ae(!0),Q.current=yt},[yt,ie]),a.useEffect(()=>{me||(ue(!1),Ae(""))},[me]),a.useEffect(()=>{e!=="edit"||!te||ft.current&&(ft.current.focus(),ft.current.select())},[e,te]),a.useEffect(()=>{if(!ge)return;const A=X=>{Ge.current&&!Ge.current.contains(X.target)&&ue(!1)};return document.addEventListener("mousedown",A),()=>document.removeEventListener("mousedown",A)},[ge]),a.useEffect(()=>{(e!=="edit"||W)&&fe(!1)},[e,W]),a.useEffect(()=>{if(e!=="edit"){Me("idle");return}const A=n.trim();Je.current=A,ut.current=A,Me("idle")},[e]),a.useEffect(()=>{if(e!=="edit"||!E||!te)return;const A=n.trim(),X=Je.current;if(A===X||A===ut.current){le.current&&(clearTimeout(le.current),le.current=null),nt.current||Me("idle");return}return le.current&&clearTimeout(le.current),le.current=setTimeout(async()=>{if(!nt.current){nt.current=!0,Me("saving");try{await E(A),ut.current=A,Me("saved"),ve.current&&clearTimeout(ve.current),ve.current=setTimeout(()=>{Me("idle"),ve.current=null},2e3)}catch{Me("idle")}finally{nt.current=!1,le.current=null}}},1500),()=>{le.current&&(clearTimeout(le.current),le.current=null)}},[e,n,E,te]),a.useEffect(()=>()=>{le.current&&clearTimeout(le.current),ve.current&&clearTimeout(ve.current)},[]),a.useEffect(()=>{if(!ze)return;const A=X=>{_e.current&&!_e.current.contains(X.target)&&tt(!1)};return document.addEventListener("mousedown",A),()=>document.removeEventListener("mousedown",A)},[ze]);const vt=a.useCallback(A=>{const X=A.clipboardData?.items;if(X)for(let $e=0;$e<X.length;$e++){const dt=X[$e];if(dt.type.startsWith("image/")){const jt=dt.getAsFile();if(jt&&sh.includes(jt.type)){A.preventDefault(),L([...V,{file:jt,previewUrl:URL.createObjectURL(jt)}]);return}}}},[V,L]),qt=a.useCallback(A=>{A.preventDefault();const X=A.dataTransfer.files;for(let $e=0;$e<X.length;$e++){const dt=X[$e];if(sh.includes(dt.type)){L([...V,{file:dt,previewUrl:URL.createObjectURL(dt)}]);return}}},[V,L]),Tt=a.useCallback(A=>{const X=V[A];X&&URL.revokeObjectURL(X.previewUrl),L(V.filter(($e,dt)=>dt!==A))},[V,L]),At=a.useCallback(A=>{l(o.includes(A)?o.filter(X=>X!==A):[...o,A])},[o,l]),Lt=(A,X)=>A.length>X?A.slice(0,X)+"…":A,Vt=a.useCallback(A=>{s(A.target.value);const X=A.target;X.style.height="auto",X.style.height=X.scrollHeight+"px"},[s]),Kt=a.useCallback(()=>{fe(A=>!A)},[]),Ot=a.useCallback(A=>{!Ie||A.key!=="Escape"||(A.preventDefault(),A.stopPropagation(),fe(!1))},[Ie]),Wt=a.useCallback(async A=>{const X=n.trim();if(!(!X||ye)){de(!0);try{const $e=await vp(X,A,F);s($e),tt(!1),G("Description refined with AI","success"),Pe.current&&(Pe.current.style.height="auto",Pe.current.style.height=Pe.current.scrollHeight+"px")}catch($e){const dt=yp($e);G(dt,"error")}finally{de(!1)}}},[n,ye,G,s,F]),_t=a.useCallback(async A=>{const X=et,dt=X.includes(A)?X.filter(jt=>jt!==A):[A,...X];Ye(dt);try{await fn({favoriteProviders:dt,favoriteModels:rt})}catch{Ye(X)}},[et,rt]),St=a.useCallback(async A=>{const X=rt,dt=X.includes(A)?X.filter(jt=>jt!==A):[A,...X];Oe(dt);try{await fn({favoriteProviders:et,favoriteModels:dt})}catch{Oe(X)}},[rt,et]),Yt=a.useCallback(A=>{if(A<=0)return;const X=[...M];[X[A-1],X[A]]=[X[A],X[A-1]],T(X)},[M,T]),Xt=a.useCallback(A=>{if(A>=M.length-1)return;const X=[...M];[X[A],X[A+1]]=[X[A+1],X[A]],T(X)},[M,T]),Qt=a.useCallback(A=>{T(M.filter(X=>X!==A))},[M,T]),B=new Map;for(const A of Re)B.set(A.id,{name:A.name,description:A.description});const he=R.filter(A=>!o.includes(A.id)).sort((A,X)=>{const $e=X.createdAt.localeCompare(A.createdAt);if($e!==0)return $e;const dt=parseInt(A.id.slice(A.id.lastIndexOf("-")+1),10)||0;return(parseInt(X.id.slice(X.id.lastIndexOf("-")+1),10)||0)-dt}),De=be?he.filter(A=>A.id.toLowerCase().includes(be.toLowerCase())||A.title&&A.title.toLowerCase().includes(be.toLowerCase())||A.description&&A.description.toLowerCase().includes(be.toLowerCase())):he;return t.jsxs("div",{className:"task-form",onDrop:qt,onDragOver:A=>A.preventDefault(),onPaste:vt,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:ft,autoFocus:!0,id:"task-form-title",type:"text",className:"modal-edit-input",placeholder:"Task title",value:i||"",onChange:A=>r(A.target.value),disabled:W})]}),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${pe==="idle"?"":" is-visible"}`,"aria-live":"polite",children:pe==="saving"?"Saving...":pe==="saved"?"Saved":""})]}),t.jsxs("div",{className:`description-with-refine${Ie?" description--fullscreen":""}`,ref:_e,onKeyDown:Ot,children:[Ie&&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:Kt,"aria-label":"Collapse description",title:"Collapse description",children:t.jsx(Rr,{size:14})})]}),t.jsx("textarea",{ref:Pe,autoFocus:e==="create",id:"task-form-description",value:n,onChange:Vt,placeholder:"What needs to be done?",rows:e==="edit"?8:5,disabled:W||ye}),(()=>{const A=!!n.trim()&&!W;return t.jsxs(t.Fragment,{children:[!Ie&&t.jsx("button",{type:"button",className:`btn btn-sm description-expand-btn${A?" description-expand-btn--offset":" description-expand-btn--flush"}`,onClick:Kt,"aria-label":"Expand description",title:"Expand description",children:t.jsx(Vo,{size:14})}),A&&t.jsxs("button",{type:"button",className:`btn btn-sm refine-button ${ye?"refine-button--loading":""}`,onClick:()=>tt(X=>!X),disabled:ye,"data-testid":"refine-button",title:"Refine description with AI",children:[t.jsx(as,{size:12,style:{verticalAlign:"middle"}}),ye?"Refining...":"Refine"]})]})})(),ze&&t.jsxs("div",{className:"refine-menu refine-menu--modal",onMouseDown:A=>A.preventDefault(),children:[t.jsxs("div",{className:"refine-menu-item",onClick:()=>Wt("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:()=>Wt("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:()=>Wt("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:()=>Wt("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"&&($||P)&&t.jsxs("div",{className:"task-form-description-actions","data-testid":"task-form-description-actions",children:[$&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{const A=n.trim();if(!A){G("Enter a description first","error");return}k?.(),$(A)},disabled:W||!n.trim(),"data-testid":"task-form-plan-button",children:"Plan"}),P&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{const A=n.trim();if(!A){G("Enter a description first","error");return}k?.(),P(A)},disabled:W||!n.trim(),"data-testid":"task-form-subtask-button",children:"Subtask"})]})]}),O,t.jsxs("button",{type:"button",className:"task-form-more-options-toggle",onClick:()=>ae(A=>!A),"aria-expanded":me,"aria-controls":"task-form-more-options",disabled:W,"data-testid":"task-form-more-options-toggle",children:[t.jsx("span",{children:"More options"}),me?t.jsx(pi,{size:14}):t.jsx(en,{size:14})]}),t.jsxs("div",{id:"task-form-more-options",className:`task-form-more-options${me?"":" collapsed"}`,"aria-hidden":!me,hidden:!me,"data-testid":"task-form-more-options",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Attachments"}),V.length>0&&t.jsx("div",{className:"inline-create-previews",children:V.map((A,X)=>t.jsxs("div",{className:"inline-create-preview",children:[t.jsx("img",{src:A.previewUrl,alt:A.file.name}),t.jsx("button",{type:"button",className:"inline-create-preview-remove",onClick:()=>Tt(X),disabled:W,title:"Remove image",children:"×"})]},A.previewUrl))}),t.jsx("input",{ref:Y,type:"file",accept:"image/*",onChange:A=>{const X=A.target.files?.[0];X&&(L([...V,{file:X,previewUrl:URL.createObjectURL(X)}]),A.target.value="")},style:{display:"none"}}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>Y.current?.click(),disabled:W,children:"Attach Screenshot"}),t.jsx("small",{children:"You can also paste images or drag & drop"})]}),u&&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:c??"",onChange:A=>u(A.target.value||void 0),disabled:W||m,children:[t.jsx("option",{value:"",children:"Use project default / local"}),(d??[]).map(A=>t.jsxs("option",{value:A.id,children:[A.name," (",nA(A.status),")"]},A.id))]}),(()=>{const A=(d??[]).find(X=>X.id===c);return A?t.jsx("div",{className:"task-form-node-status",children:t.jsx(Vi,{status:A.status,showLabel:!0})}):null})(),t.jsx("small",{children:h??"Task override takes priority over project default node routing."})]}),!we&&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:Ge,children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>ue(A=>!A),disabled:W,children:o.length>0?`${o.length} selected`:"Add dependencies"}),ge&&t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:be,onChange:A=>Ae(A.target.value),onClick:A=>A.stopPropagation()}),De.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):De.map(A=>t.jsxs("div",{className:`dep-dropdown-item${o.includes(A.id)?" selected":""}`,onClick:()=>At(A.id),onMouseDown:X=>X.preventDefault(),children:[t.jsx("span",{className:"dep-dropdown-id",children:A.id}),t.jsx("span",{className:"dep-dropdown-title",children:Lt(A.title||A.description||A.id,30)})]},A.id))]})]}),o.length>0&&t.jsx("div",{className:"selected-deps",children:o.map(A=>t.jsxs("span",{className:"dep-chip",children:[A,t.jsx("button",{type:"button",className:"dep-chip-remove",onClick:()=>At(A),disabled:W,children:"×"})]},A))})]})}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Model Configuration"}),p&&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:f??Ns,onChange:A=>p(A.target.value),disabled:W,children:pd.map(A=>t.jsx("option",{value:A,children:A[0].toUpperCase()+A.slice(1)},A))})]}),se&&D!==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:D,onChange:A=>se(A.target.value),disabled:W,children:[t.jsx("option",{value:"standard",children:"Standard"}),t.jsx("option",{value:"fast",children:"Fast"})]})]}),We?t.jsx("div",{className:"model-selector-loading",children:"Loading models…"}):Fe.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:w==="preset"?S:w,onChange:A=>{const X=A.target.value;if(X==="default"){_("default"),z(""),b(""),x("");return}if(X==="custom"){_("custom"),z("");return}const $e=ht.find(jt=>jt.id===X),dt=nh($e);_("preset"),z(X),b(dt.executorValue),x(dt.validatorValue)},disabled:W,children:[t.jsx("option",{value:"default",children:"Use default"}),ht.length>0?t.jsx("option",{disabled:!0,children:"──────────"}):null,ht.map(A=>t.jsx("option",{value:A.id,children:A.name},A.id)),t.jsx("option",{value:"custom",children:"Custom"})]})]}),w==="preset"&&Et?t.jsxs("small",{children:["Using preset: ",Et.name]}):null,w==="preset"?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>_("custom"),disabled:W,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(Jn,{id:"executor-model",label:"Executor Model",value:g,onChange:A=>{_("custom"),z(""),b(A)},models:Fe,disabled:W||w==="preset",favoriteProviders:et,onToggleFavorite:_t,favoriteModels:rt,onToggleModelFavorite:St})]}),t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"validator-model",className:"model-select-label",children:"Reviewer"}),t.jsx(Jn,{id:"validator-model",label:"Reviewer Model",value:v,onChange:A=>{_("custom"),z(""),x(A)},models:Fe,disabled:W||w==="preset",favoriteProviders:et,onToggleFavorite:_t,favoriteModels:rt,onToggleModelFavorite:St})]}),j&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"planning-model",className:"model-select-label",children:"Planning"}),t.jsx(Jn,{id:"planning-model",label:"Planning Model",value:y||"",onChange:A=>{_("custom"),z(""),j(A)},models:Fe,disabled:W||w==="preset",favoriteProviders:et,onToggleFavorite:_t,favoriteModels:rt,onToggleModelFavorite:St})]}),C&&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:N||"",onChange:A=>C(A.target.value),disabled:W||w==="preset",children:[t.jsxs("option",{value:"",children:["Default (",xe?.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"})]})]}),ke&&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:ce??"",onChange:A=>ke(A.target.value===""?void 0:parseInt(A.target.value,10)),disabled:W,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"})]})]})]})]}),ne,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:Re.length>0&&Re.map(A=>t.jsxs("label",{className:"checkbox-label workflow-step-item","data-testid":`workflow-step-checkbox-${A.id}`,children:[t.jsx("input",{type:"checkbox",checked:M.includes(A.id),onChange:X=>{T(X.target.checked?[...M,A.id]:M.filter($e=>$e!==A.id))},disabled:W}),t.jsxs("div",{children:[t.jsxs("span",{className:"workflow-step-name",children:[A.name,sA(A.phase||"pre-merge",A.id,"workflow-step-phase")]}),t.jsx("div",{className:"workflow-step-description",children:A.description})]})]},A.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((A,X)=>{const $e=B.get(A);return t.jsxs("div",{className:"workflow-step-order-item","data-testid":`workflow-step-order-item-${A}`,children:[t.jsx("span",{className:"workflow-step-order-number",children:X+1}),t.jsx("span",{className:"workflow-step-order-name",children:$e?.name||A}),t.jsxs("div",{className:"workflow-step-order-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Yt(X),disabled:W||X===0,"data-testid":`workflow-step-move-up-${A}`,title:"Move up",children:t.jsx(pi,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Xt(X),disabled:W||X===M.length-1,"data-testid":`workflow-step-move-down-${A}`,title:"Move down",children:t.jsx(en,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Qt(A),disabled:W,"data-testid":`workflow-step-remove-${A}`,title:"Remove",children:t.jsx(Jt,{size:14})})]})]},A)})]})]})]})]})}const ih={pre:({children:e,className:n,...s})=>t.jsx("pre",{...s,className:["workflow-markdown-pre",n].filter(Boolean).join(" "),children:e}),table:({children:e,className:n,...s})=>t.jsx("table",{...s,className:["workflow-markdown-table",n].filter(Boolean).join(" "),children:e})};function iA(e){switch(e){case"passed":return"Passed";case"failed":return"Failed";case"skipped":return"Skipped";case"pending":return"Running…";default:return e}}function aA(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 rA(e){return e?new Date(e).toLocaleString():null}function oA(e){const n=e.split(`
|
|
650
|
-
`);return n.length<=1?e:`${n.length} lines`}function co(e,n,s){const i=e==="post-merge"?"phase-badge--post-merge":"phase-badge--pre-merge";return t.jsx("span",{className:`phase-badge ${i}`,"data-testid":`${s}-${n}`,children:e==="post-merge"?"Post-merge":"Pre-merge"})}function lA({entries:e,startedAt:n,stepId:s}){const i=a.useRef(null),r=new Date(n).getTime(),o=e.filter(l=>new Date(l.timestamp).getTime()>=r);return a.useEffect(()=>{const l=i.current;l&&(l.scrollTop=l.scrollHeight)},[o.length]),e.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:i,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:["⚡ ",l.text,l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",l.detail]})]},c):l.type==="tool_result"?t.jsxs("div",{className:"workflow-live-log-tool-result",children:["✓ ",l.text,l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",l.detail]})]},c):l.type==="tool_error"?t.jsxs("div",{className:"workflow-live-log-tool-error",children:["✗ ",l.text,l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",l.detail]})]},c):l.type==="thinking"?t.jsx("div",{className:"workflow-live-log-thinking",children:l.text},c):t.jsx("span",{className:"workflow-live-log-text",children:l.text},c))})}function cA({taskId:e,results:n,loading:s,enabledWorkflowSteps:i,canEdit:r,projectId:o,isTaskInProgress:l,onWorkflowStepsChange:c}){const[u,d]=a.useState({}),[m,h]=a.useState({}),[f,p]=a.useState(null),[g,b]=a.useState([]),[v,x]=a.useState(!1),y=n.some(k=>k.status==="pending"),{entries:j}=ag(e,!!l&&y,o);a.useEffect(()=>{let k=!1;return Go(o).then(O=>{k||b(O.filter(ne=>ne.enabled))}).catch(()=>{k||b([])}),()=>{k=!0}},[o]);const N=i??[],C=a.useMemo(()=>g.map(k=>({id:k.id,name:k.name,description:k.description,phase:k.phase||"pre-merge"})),[g]),w=a.useMemo(()=>new Map(C.map(k=>[k.id,k])),[C]),_=k=>{d(O=>({...O,[k]:!O[k]}))},S=k=>{h(O=>{const ne=O[k]??"markdown";return{...O,[k]:ne==="markdown"?"plain":"markdown"}})},z=k=>{p(k)},M=()=>{p(null)};a.useEffect(()=>{if(!f)return;const k=O=>{O.key==="Escape"&&M()};return document.addEventListener("keydown",k),()=>{document.removeEventListener("keydown",k)}},[f]);const T=a.useCallback((k,O)=>{if(c){if(O){if(N.includes(k)){c(N);return}c([...N,k]);return}c(N.filter(ne=>ne!==k))}},[c,N]),U=a.useCallback(k=>{if(!c||k<=0)return;const O=[...N];[O[k-1],O[k]]=[O[k],O[k-1]],c(O)},[c,N]),V=a.useCallback(k=>{if(!c||k>=N.length-1)return;const O=[...N];[O[k],O[k+1]]=[O[k+1],O[k]],c(O)},[c,N]),L=a.useCallback(k=>{c&&c(N.filter(O=>O!==k))},[c,N]),R=n.length>0,F=N.length>0;a.useEffect(()=>{r||x(!1)},[r]);const W=a.useMemo(()=>N.map(k=>{const O=w.get(k);return{id:k,name:O?.name||k,description:O?.description||"Step definition not found.",phase:O?.phase||"pre-merge"}}),[N,w]),G=()=>!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(k=>t.jsxs("label",{className:"checkbox-label workflow-step-item","data-testid":`workflow-step-checkbox-${k.id}`,children:[t.jsx("input",{type:"checkbox",checked:N.includes(k.id),onChange:O=>T(k.id,O.target.checked)}),t.jsxs("div",{children:[t.jsxs("span",{className:"workflow-step-name",children:[k.name,co(k.phase,k.id,"workflow-step-phase")]}),t.jsx("div",{className:"workflow-step-description",children:k.description})]})]},k.id))})]}),N.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:"}),N.map((k,O)=>{const ne=w.get(k);return t.jsxs("div",{className:"workflow-step-order-item","data-testid":`workflow-step-order-item-${k}`,children:[t.jsx("span",{className:"workflow-step-order-number",children:O+1}),t.jsx("span",{className:"workflow-step-order-name",children:ne?.name||k}),t.jsxs("div",{className:"workflow-step-order-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>U(O),disabled:O===0,"data-testid":`workflow-step-move-up-${k}`,title:"Move up",children:t.jsx(pi,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>V(O),disabled:O===N.length-1,"data-testid":`workflow-step-move-down-${k}`,title:"Move down",children:t.jsx(en,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>L(k),"data-testid":`workflow-step-remove-${k}`,title:"Remove",children:t.jsx(Jt,{size:14})})]})]},k)})]})]}),te=()=>{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(!R)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 k=n.filter(ce=>ce.status==="passed").length,O=n.filter(ce=>ce.status==="failed").length,ne=n.filter(ce=>ce.status==="skipped").length,we=n.filter(ce=>ce.status==="pending").length,ie=[`${n.length} step${n.length!==1?"s":""}`];return k>0&&ie.push(`${k} passed`),O>0&&ie.push(`${O} failed`),ne>0&&ie.push(`${ne} skipped`),we>0&&ie.push(`${we} 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:ie.join(" · ")}),n.map((ce,ke)=>{const D=ce.phase||"pre-merge",se=u[ce.workflowStepId]??!1;return t.jsxs("div",{className:`workflow-result-item workflow-result-item--${ce.status}`,"data-testid":`workflow-result-item-${ce.workflowStepId}`,children:[t.jsxs("div",{className:"workflow-result-header",children:[t.jsxs("div",{className:"workflow-result-name",children:[ce.workflowStepName,co(D,ce.workflowStepId,"workflow-result-phase")]}),t.jsx("span",{className:`workflow-result-badge workflow-result-badge--${ce.status}`,"data-testid":`workflow-result-badge-${ce.workflowStepId}`,children:iA(ce.status)})]}),t.jsxs("div",{className:"workflow-result-meta",children:[ce.startedAt&&t.jsxs("span",{className:"workflow-result-timestamp",children:["Started: ",rA(ce.startedAt)]}),ce.completedAt&&t.jsx("span",{className:"workflow-result-duration",children:aA(ce.startedAt,ce.completedAt)})]}),ce.status==="pending"&&ce.startedAt?t.jsx(lA,{entries:j,startedAt:ce.startedAt,stepId:ce.workflowStepId}):ce.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",{className:"workflow-result-toggle",onClick:()=>_(ce.workflowStepId),"data-testid":`workflow-result-toggle-${ce.workflowStepId}`,children:se?"Hide output":"Show output"}),!se&&t.jsx("span",{className:"workflow-result-output-preview","data-testid":`workflow-result-preview-${ce.workflowStepId}`,children:oA(ce.output)}),se&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"workflow-result-mode-toggle",onClick:()=>S(ce.workflowStepId),"data-testid":`workflow-result-mode-toggle-${ce.workflowStepId}`,title:(m[ce.workflowStepId]??"markdown")==="markdown"?"Switch to plain text":"Switch to markdown",children:(m[ce.workflowStepId]??"markdown")==="markdown"?"Markdown":"Plain"}),t.jsx("button",{className:"workflow-result-expand-toggle",onClick:()=>z(ce.workflowStepId),"data-testid":`workflow-result-expand-${ce.workflowStepId}`,title:"Expand output",children:t.jsx(Vo,{size:12})})]})]}),se&&t.jsx("div",{className:`workflow-result-output${(m[ce.workflowStepId]??"markdown")==="markdown"?" workflow-result-output--markdown":""}`,"data-testid":`workflow-result-output-${ce.workflowStepId}`,children:(m[ce.workflowStepId]??"markdown")==="markdown"?t.jsx("div",{className:"markdown-body",children:t.jsx(ai,{remarkPlugins:[ri],components:ih,children:ce.output})}):t.jsx("pre",{className:"workflow-result-output-text",children:ce.output})})]}):null]},`${ce.workflowStepId}-${ke}`)})]})},E=r?t.jsx("button",{type:"button",className:"modal-edit-btn workflow-results-edit-toggle",onClick:()=>x(k=>!k),"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(Bn,{size:14}),"Done"]}):t.jsxs(t.Fragment,{children:[t.jsx(ds,{size:14}),"Edit"]})}):null,$=!s&&!R&&F,P=r&&R;return t.jsxs("div",{className:"workflow-results-tab","data-task-id":e,children:[$?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(k=>t.jsxs("div",{className:"workflow-configured-item","data-testid":`workflow-configured-step-${k.id}`,children:[t.jsxs("div",{className:"workflow-configured-name",children:[k.name,co(k.phase,k.id,"workflow-configured-phase")]}),t.jsx("p",{className:"workflow-configured-description",children:k.description})]},k.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."}),G()]}):t.jsxs(t.Fragment,{children:[P&&t.jsxs("div",{className:"workflow-results-edit-header","data-testid":"workflow-results-edit-header",children:[t.jsx("h4",{children:"Workflow Steps"}),E]}),te(),G()]}),f&&(()=>{const k=n.find(we=>we.workflowStepId===f);if(!k)return null;const O=m[k.workflowStepId]??"markdown",ne=k.phase||"pre-merge";return t.jsx("div",{className:"workflow-output-modal-overlay",onClick:we=>{we.target===we.currentTarget&&M()},"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:k.workflowStepName}),co(ne,k.workflowStepId,"workflow-output-modal-phase")]}),t.jsxs("div",{className:"workflow-output-modal-controls",children:[t.jsx("button",{className:"workflow-result-mode-toggle",onClick:()=>S(k.workflowStepId),"data-testid":"workflow-output-modal-mode-toggle",title:O==="markdown"?"Switch to plain text":"Switch to markdown",children:O==="markdown"?"Markdown":"Plain"}),t.jsx("button",{className:"workflow-output-modal-close",onClick:M,"data-testid":"workflow-output-modal-close","aria-label":"Close",children:t.jsx(Jt,{size:16})})]})]}),t.jsx("div",{className:"workflow-output-modal-body",children:t.jsx("div",{className:`workflow-result-output workflow-result-output--expanded${O==="markdown"?" workflow-result-output--markdown":""}`,"data-testid":"workflow-output-modal-content",children:O==="markdown"?t.jsx("div",{className:"markdown-body",children:t.jsx(ai,{remarkPlugins:[ri],components:ih,children:k.output})}):t.jsx("pre",{className:"workflow-result-output-text",children:k.output})})})]})})})()]})}function dA(e){return e==="block"?"Block execution":e==="fallback-local"?"Fall back to local":"Not configured"}const uA=new Set(["planning","researching","executing","finalizing","merging"]);function mA(e){return e!==void 0&&e!=="online"}function hA({task:e,settings:n,addToast:s,onTaskUpdated:i}){const[r,o]=a.useState([]),[l,c]=a.useState(!1),[u,d]=a.useState(null),[m,h]=a.useState(e.nodeId??""),[f,p]=a.useState(!1),g=a.useRef(e.id);a.useEffect(()=>{g.current=e.id,h(e.nodeId??""),p(!1)},[e.id,e.nodeId]),a.useEffect(()=>{c(!0),d(null),Eo().then(M=>{o(M)}).catch(M=>{d(je(M)||"Failed to load nodes")}).finally(()=>{c(!1)})},[]);const b=a.useMemo(()=>new Map(r.map(M=>[M.id,M])),[r]),v=a.useMemo(()=>[...r].sort((M,T)=>M.name.localeCompare(T.name)),[r]),x=n,y=e.nodeId??x?.defaultNodeId??null,j=e.nodeId?"Per-task override":x?.defaultNodeId?"Project default":"No routing",N=y?b.get(y):void 0,C=N?`${N.name} (${N.type})`:y?`${y} (node unavailable or unknown)`:"Local (no routing configured)",w=e.column==="in-progress"||uA.has(e.status),_=w||f||l,S=a.useCallback(async M=>{if(M===m)return;const T=e.id,U=m;h(M),p(!0);try{const V=await ni(T,{nodeId:M||null});if(g.current!==T)return;h(V.nodeId??""),i?.(V),s(M?"Node override updated":"Node override cleared","success")}catch(V){if(g.current!==T)return;h(U),s(je(V)||"Failed to update node override","error")}finally{g.current===T&&p(!1)}},[s,i,m,e.id]),z=a.useCallback(()=>{S("")},[S]);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:[N?t.jsx(Vi,{status:N.status,compact:!0}):null,C,mA(N?.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:j})]}),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:dA(x?.unavailableNodePolicy)})]})]}),w&&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"}),w?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:m,disabled:_,onChange:M=>{S(M.target.value)},children:[t.jsx("option",{value:"",children:"Use project default"}),v.map(M=>t.jsxs("option",{value:M.id,title:`Status: ${M.status}`,children:[M.name," (",M.type,") — ",M.status]},M.id))]}),u?t.jsx("div",{className:"routing-tab__error",children:u}):null,e.nodeId?t.jsxs("div",{className:"routing-tab__override-row",children:[t.jsxs("span",{className:"routing-tab__override-text",children:["Override set to: ",b.get(e.nodeId)?.name??e.nodeId]}),t.jsx("button",{type:"button",className:"btn btn-sm",disabled:w||f,onClick:z,children:"Clear override"})]}):null]})]})}const pA=/^[a-zA-Z0-9_-]{1,64}$/,fA=200;function ah(e){return e?new Date(e).toLocaleString():""}function gA(e,n=fA){return e.length<=n?e:e.substring(0,n)+"…"}function bA({taskId:e,addToast:n,onTaskUpdated:s,projectId:i,canEdit:r=!1}){const[o,l]=a.useState([]),[c,u]=a.useState(!0),[d,m]=a.useState(null),[h,f]=a.useState(""),[p,g]=a.useState(null),[b,v]=a.useState(""),[x,y]=a.useState(null),[j,N]=a.useState([]),[C,w]=a.useState(!1),[_,S]=a.useState(!1),[z,M]=a.useState(""),[T,U]=a.useState(""),[V,L]=a.useState(!1),[R,F]=a.useState(null),[W,G]=a.useState(null),[te,E]=a.useState(!1),$=a.useCallback(async()=>{try{const D=await dy(e,i);l(D)}catch(D){n(je(D)||"Failed to load documents","error")}finally{u(!1)}},[e,i,n]);a.useEffect(()=>{$()},[$]);async function P(D){d===D.key?(m(null),f(""),g(null),v(""),y(null),N([]),E(!1)):(m(D.key),f(D.content),g(null),v(""),y(null),N([]),E(!1))}async function k(D){if(x===D)y(null),N([]);else{y(D),w(!0);try{const se=await uy(e,D,i);N(se)}catch(se){n(je(se)||"Failed to load revisions","error")}finally{w(!1)}}}function O(){d&&(g(d),v(h))}function ne(){g(null),v("")}async function we(){if(!(!p||!b.trim())){L(!0);try{await Yd(e,p,b,{},i),g(null),v(""),await $();const D=o.find(se=>se.key===p);D&&f(D.content),n("Document saved","success")}catch(D){n(je(D)||"Failed to save document","error")}finally{L(!1)}}}async function ie(){const D=z.trim(),se=T.trim();if(!D){n("Document key is required","error");return}if(!pA.test(D)){n("Invalid key format. Use 1-64 alphanumeric characters, hyphens, or underscores.","error");return}if(!se){n("Content is required","error");return}L(!0);try{await Yd(e,D,se,{},i),S(!1),M(""),U(""),await $(),n("Document created","success")}catch(Z){n(je(Z)||"Failed to create document","error")}finally{L(!1)}}async function ce(D){F(D);try{await my(e,D,i),G(null),F(null),d===D&&(m(null),f("")),x===D&&(y(null),N([])),await $(),n("Document deleted","success")}catch(se){n(je(se)||"Failed to delete document","error")}finally{F(null)}}function ke(D){f(D.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"}),_&&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:D=>M(D.target.value),placeholder:"e.g., plan, notes, research",disabled:V}),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:T,onChange:D=>U(D.target.value),rows:6,placeholder:"Enter document content…",disabled:V})]}),t.jsxs("div",{className:"form-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{S(!1),M(""),U("")},disabled:V,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void ie(),disabled:V||!z.trim()||!T.trim(),children:V?"Creating…":"Create"})]})]}),o.length===0&&!_?t.jsx("div",{className:"detail-log-empty",children:"No documents yet."}):t.jsx("div",{className:"task-documents-list",children:o.map(D=>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(Bi,{size:14}),t.jsx("span",{className:"task-document-key",children:D.key}),t.jsxs("span",{className:"task-document-revision-badge",children:["v",D.revision]})]}),t.jsxs("div",{className:"task-document-meta",children:[t.jsx("span",{className:"task-document-author",children:D.author}),t.jsx("span",{className:"task-document-timestamp",children:ah(D.updatedAt||D.createdAt)})]})]}),d===D.key&&p!==D.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(se=>!se),"aria-label":te?"Switch to plain text":"Switch to markdown","aria-pressed":te,title:te?"Switch to plain text":"Switch to markdown",children:te?"Markdown":"Plain"})}),t.jsx("div",{className:"task-document-content",children:te?t.jsx("div",{className:"task-document-content-markdown",children:t.jsx("div",{className:"markdown-body",children:t.jsx(ai,{remarkPlugins:[ri],children:h})})}):t.jsx("pre",{className:"task-document-content-text",children:h})}),x===D.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…"}):j.length<=1?t.jsx("div",{className:"detail-log-empty",children:"No previous revisions."}):t.jsx("div",{className:"task-document-revision-list",children:j.filter(se=>se.revision<D.revision).sort((se,Z)=>Z.revision-se.revision).map(se=>t.jsxs("div",{className:"task-document-revision-item",onClick:()=>ke(se),children:[t.jsxs("div",{className:"revision-header",children:[t.jsxs("span",{className:"revision-badge",children:["v",se.revision]}),t.jsx("span",{className:"revision-author",children:se.author}),t.jsx("span",{className:"revision-timestamp",children:ah(se.createdAt)})]}),t.jsx("div",{className:"revision-preview",children:gA(se.content,100)})]},se.id))})]})]}),p===D.key&&t.jsxs("div",{className:"task-document-edit-form",children:[t.jsx("textarea",{value:b,onChange:se=>v(se.target.value),rows:10,disabled:V}),t.jsxs("div",{className:"form-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:ne,disabled:V,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void we(),disabled:V||!b.trim(),children:V?"Saving…":"Save"})]})]}),t.jsxs("div",{className:"task-document-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>void P(D),children:d===D.key?t.jsxs(t.Fragment,{children:[t.jsx(pi,{size:14})," Collapse"]}):t.jsxs(t.Fragment,{children:[t.jsx(en,{size:14})," Expand"]})}),d===D.key&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm",onClick:()=>void k(D.key),children:[t.jsx(gr,{size:14})," History"]}),r&&p!==D.key&&t.jsx("button",{className:"btn btn-sm",onClick:O,children:"Edit"}),r&&(W===D.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 ce(D.key),disabled:R===D.key,children:R===D.key?"…":"Yes"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>G(null),disabled:R===D.key,children:"No"})]}):t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>G(D.key),children:t.jsx(ln,{size:14})}))]})]})]},D.key))}),r&&!_&&t.jsxs("button",{className:"btn btn-sm task-document-new-btn",onClick:()=>S(!0),children:[t.jsx(cn,{size:14})," New Document"]})]})}function uo(e){return e.toLocaleString()}function sc(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString()}function Ja(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),i=Math.round(n%60);return`${s}m ${i}s`}function xA(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 u=new Date(o.completedAt).getTime();if(Number.isNaN(u)||u<l)return null;c=u}else c=Math.max(l,n);return{name:o.workflowStepName||o.workflowStepId,durationMs:c-l}}).filter(o=>o!==null),i=s.reduce((o,l)=>o+l.durationMs,0),r=s.reduce((o,l)=>!o||l.durationMs>o.durationMs?l:o,void 0);return{timedStepCount:s.length,totalDurationMs:i,longestStep:r}}function vA({tokenUsage:e,loading:n,task:s}){const i=Op(s?.log??[]),r=i.filter(m=>typeof m.durationMs=="number"),o=r.reduce((m,h)=>m+(h.durationMs??0),0),l=Math.max(o,s?.timedExecutionMs??0),c=r.reduce((m,h)=>!m||(h.durationMs??0)>(m.durationMs??0)?h:m,void 0),u=xA(s?.workflowStepResults??[]),d=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:i.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:Ja(l)})]}),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:u.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:Ja(u.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:Ja(l+u.totalDurationMs)})]})]}),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:c?.durationMs?`${c.summary} (${Ja(c.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:u.longestStep?`${u.longestStep.name} (${Ja(u.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:d>0?`${Math.min((s?.currentStep??0)+1,d)} / ${d}`:"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 ${sc(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:uo(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:uo(e.outputTokens)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Cached"}),t.jsx("span",{className:"task-token-stats-panel__value",children:uo(e.cachedTokens)})]}),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:uo(e.totalTokens)})]})]}),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:sc(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:sc(e.lastUsedAt)})})]})]})]}):t.jsx("div",{className:"task-token-stats-panel__empty",role:"status",children:"No token usage recorded for this task yet."})]})]})}const yA=new Set(["planning","researching","executing","finalizing","merging"]);function jA(e,n){return Tp(e,n)}function kA(e,n){return Pp(e,n)}function wA(e){let n=null;for(const s of e){if(s.agent!=="triage"||s.type!=="text")continue;const i=s.text.match(/^Triage using model: (.+?)\/(.+)$/);i&&(n={provider:i[1],modelId:i[2]})}return n}function NA(e,n,s){if(e.planningModelProvider&&e.planningModelId)return{provider:e.planningModelProvider,modelId:e.planningModelId};const i=wA(n);return i||Ip(e,s)}function SA(e){switch(e){case"done":return"var(--color-success, #3fb950)";case"in-progress":return"var(--todo, #58a6ff)";case"skipped":return"var(--text-dim, #484f58)";case"pending":default:return"var(--border, #30363d)"}}function CA(e){const n=new Date(e),i=new Date().getTime()-n.getTime(),r=Math.floor(i/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()}function EA(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function MA(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(i=>typeof i=="string")};const s=e.message.match(/[A-Z]+-\d+/g)??[];return s.length>1?{dependentIds:[...new Set(s.slice(1))]}:null}function rh(e,n){return e.length>n?e.slice(0,n)+"…":e}function oh(e=[],n=[]){return e.length===n.length&&e.every((s,i)=>s===n[i])}function ic(e){const n=e.indexOf("/");return!e||n===-1?null:{provider:e.slice(0,n),modelId:e.slice(n+1)}}function ac(e){return e.trim()}function _A(e){const n=e.trim();return n.length>0?n:void 0}function Ya(e){return typeof e=="string"&&pd.includes(e)?e:Ns}function Qa(e){return e==="fast"?"fast":"standard"}function AA(e){const n=e?.issueUrl;return typeof n=="string"&&n.length>0?n:void 0}function RA(e){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:e.sourceAgentId?`Agent (${e.sourceAgentId})`:"Agent"};case"automation":return{label:"Automation"};case"cron":return{label:"Scheduled Task"};case"workflow_step":return{label:"Workflow Step"};case"github_import":return{label:"GitHub Import",contextInfo:AA(e.sourceMetadata)};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 rc=200,TA=new Set(["triage","todo"]);function PA({task:e,projectId:n,tasks:s=[],onClose:i,onOpenDetail:r,onMoveTask:o,onDeleteTask:l,onMergeTask:c,onRetryTask:u,onResetTask:d,onDuplicateTask:m,onTaskUpdated:h,addToast:f,prAuthAvailable:p,initialTab:g="definition"}){const[b,v]=a.useState(g),[x,y]=a.useState(()=>"prompt"in e?e:null),[j,N]=a.useState(()=>!("prompt"in e));a.useEffect(()=>{if("prompt"in e){y(e),N(!1);return}let J=!1;return N(!0),y(null),vr(e.id,n).then(He=>{J||(y(He),N(!1))}).catch(()=>{J||N(!1)}),()=>{J=!0}},[e.id,n]);const C=x?{...x,...e,prompt:x.prompt,log:x.log}:{...e,prompt:""},w=e.status==="failed"||e.status==="stuck-killed"||e.status==="planning"||e.status==="needs-replan"||(e.stuckKillCount??0)>0||(e.recoveryRetryCount??0)>0||!!e.nextRecoveryAt,_=RA(C);a.useEffect(()=>{v(g)},[g]),a.useEffect(()=>{T(!1)},[e.id]);const[S,z]=a.useState("activity"),[M,T]=a.useState(!1),[U,V]=a.useState(e.attachments||[]),[L,R]=a.useState(!1),[F,W]=a.useState(e.dependencies||[]),[G,te]=a.useState(!1),[E,$]=a.useState(""),[P,k]=a.useState(null),[O,ne]=a.useState([]),[we,ie]=a.useState(!1),[ce,ke]=a.useState(!1),[D,se]=a.useState(!1),[Z,ge]=a.useState(!1),[ue,me]=a.useState(!1),[ae,be]=a.useState(C.prompt||""),[Ae,Fe]=a.useState(""),[at,et]=a.useState(!1),[Ye,rt]=a.useState(""),[Oe,We]=a.useState(!1),[oe,xe]=a.useState(!1),[ee,Re]=a.useState(e.title||""),[Ue,pe]=a.useState(e.description||""),[Me,ze]=a.useState(e.dependencies||[]),[tt,ye]=a.useState(""),[de,Ie]=a.useState(""),[fe,_e]=a.useState(""),[Ge,Pe]=a.useState(""),[ft,Y]=a.useState("default"),[le,ve]=a.useState(void 0),[nt,Q]=a.useState(Ns),[Je,ut]=a.useState(e.nodeId),[ht,Et]=a.useState(Qa(e.executionMode)),[yt,bt]=a.useState(""),[vt,qt]=a.useState(e.enabledWorkflowSteps||[]),[Tt,At]=a.useState(e.sourceIssue?.provider??""),[Lt,Vt]=a.useState(e.sourceIssue?.repository??""),[Kt,Ot]=a.useState(e.sourceIssue?.externalIssueId??""),[Wt,_t]=a.useState(e.sourceIssue?.url??""),[St,Yt]=a.useState([]),[Xt,Qt]=a.useState(!1),B=a.useRef(!1),[he,De]=a.useState(!1),[A,X]=a.useState(!1),[$e,dt]=a.useState(!1),jt=a.useRef(null),zt=a.useRef(null),Rt=a.useRef(null),un=a.useRef(null);oi(un,!0,"fusion:task-detail-modal-size");const{getSlotsForId:In}=_p(n),gn=In("task-detail-tab");a.useEffect(()=>(B.current=!0,()=>{B.current=!1}),[]);const[Bt,Mn]=a.useState(void 0),[Ne,it]=a.useState([]),[xn,wn]=a.useState(!1),[Ce,Ke]=a.useState(e.enabledWorkflowSteps||[]),mt=e.column==="in-progress"||yA.has(e.status);a.useEffect(()=>{Re(e.title||""),pe(e.description||""),At(e.sourceIssue?.provider??""),Vt(e.sourceIssue?.repository??""),Ot(e.sourceIssue?.externalIssueId??""),_t(e.sourceIssue?.url??""),Et(Qa(e.executionMode)),dt(!1),xe(!1)},[e.id,e.title,e.description,e.sourceIssue,e.executionMode]),a.useEffect(()=>{Ke(e.enabledWorkflowSteps||[])},[e.id,e.enabledWorkflowSteps]),a.useEffect(()=>{let J=!1;return Ko(n).then(He=>{J||Mn(He)}).catch(()=>{}),()=>{J=!0}},[n]),a.useEffect(()=>{if(b!=="workflow")return;let J=!1;return wn(!0),Fj(e.id,n).then(He=>{J||it(He)}).catch(He=>{J||f(`Failed to load workflow results: ${je(He)}`,"error")}).finally(()=>{J||wn(!1)}),()=>{J=!0}},[b,e.id,n,f]),a.useEffect(()=>{if(b!=="workflow")return;const J=n?`?projectId=${encodeURIComponent(n)}`:"",He=ct=>{try{const Pt=JSON.parse(ct.data);Pt.id===e.id&&Array.isArray(Pt.workflowStepResults)&&it(Pt.workflowStepResults)}catch{}};return Ks(`/api/events${J}`,{events:{"task:updated":He}})},[b,e.id,n]),a.useEffect(()=>{G||$("")},[G]),a.useEffect(()=>{if(!e.assignedAgentId){k(null);return}const J=O.find(ct=>ct.id===e.assignedAgentId);if(J){k(J);return}let He=!1;return kp(e.assignedAgentId,n).then(ct=>{He||k(ct)}).catch(()=>{He||k(null)}),()=>{He=!0}},[e.assignedAgentId,n,O]),a.useEffect(()=>{ie(!1)},[e.id]),a.useEffect(()=>{if(!(he||A))return;const He=ct=>{const Pt=ct.target,Fs=jt.current?.contains(Pt),Ms=Rt.current?.contains(Pt);!Fs&&he&&De(!1),!Ms&&A&&X(!1)};return document.addEventListener("mousedown",He),()=>document.removeEventListener("mousedown",He)},[he,A]),a.useEffect(()=>{if(!(he||A))return;const He=ct=>{ct.key==="Escape"&&(ct.stopPropagation(),he&&De(!1),A&&X(!1))};return document.addEventListener("keydown",He),()=>document.removeEventListener("keydown",He)},[he,A]),a.useEffect(()=>{me(!1),be(C.prompt||""),Fe("")},[e.id,C.prompt]);const It=TA.has(e.column)&&!Xt,$t=a.useCallback(()=>{if(!It)return;xe(!0),Re(e.title||""),pe(e.description||""),ze(e.dependencies||[]);const J=e.modelProvider&&e.modelId?`${e.modelProvider}/${e.modelId}`:"",He=e.validatorModelProvider&&e.validatorModelId?`${e.validatorModelProvider}/${e.validatorModelId}`:"",ct=e.planningModelProvider&&e.planningModelId?`${e.planningModelProvider}/${e.planningModelId}`:"";ye(J),Ie(He),_e(ct),Pe(e.thinkingLevel??""),ut(e.nodeId),Y(J||He||ct?"custom":"default"),bt(""),qt(e.enabledWorkflowSteps||[]),Et(Qa(e.executionMode)),At(e.sourceIssue?.provider??""),Vt(e.sourceIssue?.repository??""),Ot(e.sourceIssue?.externalIssueId??""),_t(e.sourceIssue?.url??""),Yt([]),ve(e.reviewLevel),Q(Ya(e.priority))},[It,e]),mn=a.useCallback(()=>{xe(!1),Re(e.title||""),pe(e.description||""),ze(e.dependencies||[]),ut(e.nodeId),At(e.sourceIssue?.provider??""),Vt(e.sourceIssue?.repository??""),Ot(e.sourceIssue?.externalIssueId??""),_t(e.sourceIssue?.url??""),Q(Ya(e.priority)),Et(Qa(e.executionMode)),St.forEach(J=>URL.revokeObjectURL(J.previewUrl)),Yt([])},[e.title,e.description,e.dependencies,e.nodeId,e.priority,e.executionMode,St]),On=a.useCallback(async()=>{Qt(!0);try{const J={},He=ee.trim(),ct=Ue.trim();He&&He!==(e.title??"")&&(J.title=He),ct&&ct!==(e.description??"")&&(J.description=ct),oh(Me,e.dependencies??[])||(J.dependencies=Me),oh(vt,e.enabledWorkflowSteps??[])||(J.enabledWorkflowSteps=vt);const Pt=ic(tt),Fs=e.modelProvider&&e.modelId?`${e.modelProvider}/${e.modelId}`:"";tt!==Fs&&(J.modelProvider=Pt?.provider??null,J.modelId=Pt?.modelId??null);const Ms=ic(de),Xi=e.validatorModelProvider&&e.validatorModelId?`${e.validatorModelProvider}/${e.validatorModelId}`:"";de!==Xi&&(J.validatorModelProvider=Ms?.provider??null,J.validatorModelId=Ms?.modelId??null);const qr=ic(fe),cl=e.planningModelProvider&&e.planningModelId?`${e.planningModelProvider}/${e.planningModelId}`:"";fe!==cl&&(J.planningModelProvider=qr?.provider??null,J.planningModelId=qr?.modelId??null);const dl=e.thinkingLevel??"";Ge!==dl&&(J.thinkingLevel=Ge!==""?Ge:null),(e.nodeId??void 0)!==Je&&(J.nodeId=Je??null);const za=e.reviewLevel;le!==za&&(J.reviewLevel=le);const Vr=Ya(e.priority);nt!==Vr&&(J.priority=nt);const Wr=Qa(e.executionMode);ht!==Wr&&(J.executionMode=ht==="fast"?"fast":null);const Zi=ac(Tt),Fa=ac(Lt),Ri=ac(Kt),ea=_A(Wt);if(Zi.length===0&&Fa.length===0&&Ri.length===0&&!ea)e.sourceIssue&&(J.sourceIssue=null);else{if(!Zi||!Fa||!Ri){f("Source issue provider, repository, and issue identifier are required","error"),Qt(!1);return}const Se=Number.parseInt(Ri,10),Te=e.sourceIssue?.issueNumber??Se;if(!Number.isFinite(Te)||Te<=0){f("Source issue identifier must be numeric for new metadata","error"),Qt(!1);return}const pt={provider:Zi,repository:Fa,externalIssueId:Ri,issueNumber:Te,...ea?{url:ea}:{}},tn=e.sourceIssue;(!tn||tn.provider!==pt.provider||tn.repository!==pt.repository||tn.externalIssueId!==pt.externalIssueId||tn.issueNumber!==pt.issueNumber||(tn.url??void 0)!==pt.url)&&(J.sourceIssue=pt)}if(Object.keys(J).length>0){const Se=await ni(e.id,J,n);h?.(Se)}if(St.length>0){const Se=[];for(const Te of St)try{const pt=await yr(e.id,Te.file,n);V(tn=>[...tn,pt])}catch{Se.push(Te.file.name)}Se.length>0&&f(`Failed to upload: ${Se.join(", ")}`,"error")}St.forEach(Se=>URL.revokeObjectURL(Se.previewUrl)),Yt([]),f(`Updated ${e.id}`,"success"),xe(!1)}catch(J){f(`Failed to update ${e.id}: ${je(J)}`,"error")}finally{B.current&&Qt(!1)}},[e,ee,Ue,Me,tt,de,fe,Ge,Je,le,nt,ht,vt,Tt,Lt,Kt,Wt,St,f,n,h]),nn=a.useCallback(async J=>{try{await ni(e.id,{description:J},n),f("Description saved","success")}catch(He){f(`Failed to save: ${je(He)}`,"error")}},[e.id,f,n]),Nn=a.useCallback(J=>{oe&&(J.key==="Escape"?(J.preventDefault(),mn()):J.key==="Enter"&&(J.ctrlKey||J.metaKey)&&(J.preventDefault(),On()))},[oe,mn,On]);a.useEffect(()=>{if(oe)return document.addEventListener("keydown",Nn),()=>document.removeEventListener("keydown",Nn)},[oe,Nn]);const _n=a.useRef(null),{nodes:ls}=Xo(),{confirm:Sn}=Ws(),{entries:Hn,loading:rn,loadMore:wt,hasMore:K,total:Le,loadingMore:st}=ag(e.id,b==="logs"&&S==="agent-log",n);a.useEffect(()=>{const J=He=>{He.key==="Escape"&&!oe&&i()};return document.addEventListener("keydown",J),()=>document.removeEventListener("keydown",J)},[i,oe]);const ot=Mi(i),Nt=a.useCallback(async J=>{try{await o(e.id,J),i(),f(`Moved to ${Fn[J]}`,"success")}catch(He){f(je(He),"error")}},[e.id,o,i,f]),Mt=a.useCallback(async()=>{if(await Sn({title:"Delete Task",message:`Delete ${e.id}?`,danger:!0}))try{await l(e.id),i(),f(`Deleted ${e.id}`,"info")}catch(He){const ct=MA(He);if(!ct||ct.dependentIds.length===0){f(je(He),"error");return}const Pt=ct.dependentIds.join(", ");if(!await Sn({title:"Force Delete Task",message:`${e.id} is a dependency of ${Pt}.
|
|
651
|
-
|
|
652
|
-
Delete anyway by removing these dependency references first?`,danger:!0}))return;try{await l(e.id,{removeDependencyReferences:!0}),i(),f(`Deleted ${e.id} after removing dependency references`,"info")}catch(Ms){f(je(Ms),"error")}}},[e.id,l,i,f,Sn]),Ft=a.useCallback(async()=>{await Sn({title:"Merge Task",message:`Merge ${e.id} into the current branch?`})&&(i(),f(`Merging ${e.id}...`,"info"),c(e.id).then(He=>{const ct=He.merged?`Merged ${e.id} (branch: ${He.branch})`:`Closed ${e.id} (${He.error||"no branch to merge"})`;f(ct,"success")}).catch(He=>{f(je(He),"error")}))},[e.id,c,i,f,Sn]),Qn=a.useCallback(()=>{u&&(i(),u(e.id).then(()=>{f(`Retried ${e.id}`,"success")}).catch(J=>{f(je(J),"error")}))},[e.id,u,i,f]),Ds=a.useCallback(()=>{d&&window.confirm(`This will erase all progress for ${e.id} and start the task from scratch. Continue?`)&&(i(),d(e.id).then(()=>{f(`Reset ${e.id} — fresh run will be allocated`,"success")}).catch(J=>{f(je(J),"error")}))},[e.id,d,i,f]),ci=a.useCallback(async()=>{if(!(!m||!await Sn({title:"Duplicate Task",message:`Duplicate ${e.id}? This will create a new task in Triage with the same description and prompt.`})))try{const He=await m(e.id);i(),f(`Duplicated ${e.id} → ${He.id}`,"success")}catch(He){f(je(He),"error")}},[e.id,m,i,f,Sn]),Es=a.useCallback(async()=>{try{e.paused?(await Zv(e.id,n),f(`Unpaused ${e.id}`,"success")):(await fp(e.id,n),f(`Paused ${e.id}`,"success")),i()}catch(J){f(je(J),"error")}},[e.id,e.paused,i,f]),Gs=a.useCallback(async()=>{try{await sy(e.id,n),f(`Plan approved — ${e.id} moved to Todo`,"success"),i()}catch(J){f(je(J),"error")}},[e.id,i,f]),re=a.useCallback(async()=>{if(await Sn({title:"Reject Plan",message:"Reject this plan? The specification will be discarded and regenerated.",danger:!0}))try{await iy(e.id,n),f(`Plan rejected — ${e.id} returned to Planning for replanning`,"info"),i()}catch(He){f(je(He),"error")}},[e.id,i,f,Sn]),Ee=a.useCallback(async()=>{if(await Sn({title:"Rebuild Plan",message:"Rebuild the plan for this task? The task will move to planning for replanning."}))try{await fy(e.id,n),i(),f(`Replanning ${e.id}...`,"info")}catch(He){f(je(He),"error")}},[e.id,n,i,f,Sn]),Qe=a.useCallback(()=>{et(!0),rt("")},[]),gt=a.useCallback(()=>{De(!1),X(!1)},[]),xt=a.useCallback(J=>{gt(),Nt(J)},[gt]),sn=a.useCallback(J=>{gt(),J()},[gt]),dn=a.useCallback(()=>{gt(),Ft()},[gt,Ft]),Xe=a.useCallback(()=>{et(!1),rt(""),We(!1)},[]),Dt=a.useCallback(async()=>{if(!Ye.trim()){f("Please enter feedback describing what needs refinement","error");return}if(Ye.length>2e3){f("Feedback must be 2000 characters or less","error");return}We(!0);try{const J=await gy(e.id,Ye.trim(),n);f(`Refinement task created: ${J.id}`,"success"),i()}catch(J){f(je(J),"error")}finally{We(!1)}},[e.id,Ye,f,i]),hn=a.useCallback(async J=>{R(!0);try{const He=await yr(e.id,J,n);V(ct=>[...ct,He]),f("Screenshot attached","success")}catch(He){f(je(He),"error")}finally{R(!1)}},[e.id,f]),Xn=a.useCallback(async J=>{const He=J.target.files?.[0];He&&(await hn(He),_n.current&&(_n.current.value=""))},[hn]);a.useEffect(()=>{const J=He=>{const ct=He.clipboardData?.items;if(ct)for(let Pt=0;Pt<ct.length;Pt++){const Fs=ct[Pt];if(Fs.type.startsWith("image/")){const Ms=Fs.getAsFile();if(Ms){He.preventDefault(),hn(Ms);return}}}};return document.addEventListener("paste",J),()=>document.removeEventListener("paste",J)},[hn]);const Zn=a.useCallback(J=>{J.preventDefault()},[]),Ln=a.useCallback(J=>{J.preventDefault();const He=J.dataTransfer.files;for(let ct=0;ct<He.length;ct++){const Pt=He[ct];if(Pt.type.startsWith("image/")){hn(Pt);return}}},[hn]),es=a.useCallback(async J=>{try{await oy(e.id,J,n),V(He=>He.filter(ct=>ct.filename!==J)),f("Attachment deleted","info")}catch(He){f(je(He),"error")}},[e.id,f]),qn=a.useCallback(async J=>{const He=Ce;Ke(J);try{const ct=await ni(e.id,{enabledWorkflowSteps:J},n);f("Workflow steps updated","success"),h?.(ct)}catch(ct){Ke(He),f(`Failed to update workflow steps: ${je(ct)}`,"error")}},[e.id,n,Ce,h,f]),ps=a.useCallback(async()=>{ke(!0);try{const J=await _a(void 0,n);ne(J),ie(!0)}catch(J){f(`Failed to load agents: ${je(J)}`,"error"),ie(!1)}finally{ke(!1)}},[n,f]),Tn=a.useCallback(async J=>{try{const He=await ou(e.id,J,n),ct=O.find(Pt=>Pt.id===J)??null;k(ct||(Pt=>Pt?.id===J?Pt:null)),ie(!1),h?.(He),f("Assigned agent updated","success")}catch(He){f(`Failed to assign agent: ${je(He)}`,"error")}},[e.id,n,O,h,f]),Vn=a.useCallback(async()=>{try{const J=await ou(e.id,null,n);k(null),ie(!1),h?.(J),f("Agent unassigned","success")}catch(J){f(`Failed to unassign agent: ${je(J)}`,"error")}},[e.id,n,h,f]),fs=a.useCallback(async J=>{const He=[...F,J];W(He);try{await ni(e.id,{dependencies:He},n)}catch(ct){W(F),f(je(ct),"error")}},[e.id,F,f]),Ls=a.useCallback(async(J,He)=>{J.stopPropagation();const ct=F.filter(Pt=>Pt!==He);W(ct);try{await ni(e.id,{dependencies:ct},n)}catch(Pt){W(F),f(je(Pt),"error")}},[e.id,F,f]),ns=a.useCallback(async J=>{try{const He=await vr(J,n);r(He)}catch{f(`Failed to load dependency ${J}`,"error")}},[r,f]),An=a.useCallback(async J=>{se(!0);try{await ni(C.id,{prompt:J},n),f("Spec updated","success"),x&&(x.prompt=J)}catch(He){throw f(je(He),"error"),He}finally{se(!1)}},[C,x,f]),Un=a.useCallback(async J=>{ge(!0);try{await py(e.id,J,n),f("AI revision requested. Task moved to planning.","success"),i()}catch(He){const ct=je(He);ct.includes("done")||ct.includes("archived")?f("Cannot request revision: Task must be in 'triage', 'todo', 'in-progress', or 'in-review' column.","error"):f(ct,"error")}finally{ge(!1)}},[e.id,f,i]),zs=a.useCallback(()=>{me(!0),be(C.prompt||""),Fe("")},[C.prompt]),di=a.useCallback(()=>{me(!1),be(C.prompt||""),Fe("")},[C.prompt]),bi=a.useCallback(async()=>{if(ae===(C.prompt||"")){di();return}me(!1);try{await An(ae)}catch(J){throw me(!0),J}},[ae,C.prompt,An,di]),rl=a.useCallback(async()=>{Ae.trim()&&await Un(Ae.trim())},[Ae,Un]),Js=a.useCallback(J=>{J.key==="Escape"?(J.preventDefault(),di()):J.key==="Enter"&&(J.ctrlKey||J.metaKey)&&(J.preventDefault(),bi())},[di,bi]),$a=s.filter(J=>J.id!==e.id&&!F.includes(J.id)).sort((J,He)=>{const ct=He.createdAt.localeCompare(J.createdAt);if(ct!==0)return ct;const Pt=parseInt(J.id.slice(J.id.lastIndexOf("-")+1),10)||0;return(parseInt(He.id.slice(He.id.lastIndexOf("-")+1),10)||0)-Pt}),Da=P?.name??e.assignedAgentId??null,Fr=a.useMemo(()=>{const J=[];return C.modelProvider&&J.push(C.modelProvider),C.validatorModelProvider&&!J.includes(C.validatorModelProvider)&&J.push(C.validatorModelProvider),C.planningModelProvider&&!J.includes(C.planningModelProvider)&&J.push(C.planningModelProvider),J},[C.modelProvider,C.validatorModelProvider,C.planningModelProvider]),ol=$c[e.column]||[],ll=["todo","in-progress"],Ys=e.column==="in-review"?ll:ol,Pn=Ys[0],xi=Ys.slice(1),cs=xi.length>0,Or=a.useCallback(()=>{De(!1),zt.current?.focus()},[]),Ur=a.useCallback(J=>{if(!cs){Pn&&xt(Pn);return}const He=J.currentTarget.querySelector(".detail-move-btn__arrow");if(!!(J.target instanceof Element&&J.target.closest(".detail-move-btn__arrow")||He&&J.clientX>0&&J.clientX>=He.getBoundingClientRect().left)){De(Pt=>!Pt),X(!1);return}Pn&&xt(Pn)},[cs,Pn,xt]),La=a.useCallback(J=>{!cs||!(J.key==="ArrowDown"||J.altKey&&J.key==="ArrowDown")||(J.preventDefault(),De(!0),X(!1))},[cs]),Ai=a.useCallback(J=>{J.key==="Escape"&&(J.preventDefault(),J.stopPropagation(),Or())},[Or]);a.useEffect(()=>{if(!he)return;jt.current?.querySelector(".detail-move-menu-item")?.focus()},[he]);const Br={"creating-pr":"Creating PR…","awaiting-pr-checks":"Awaiting PR checks","merging-pr":"Merging PR…"},Hr=e.status?Br[e.status]:void 0;return t.jsx("div",{className:"modal-overlay open",...ot,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg task-detail-modal",ref:un,onDragOver:Zn,onDrop:Ln,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:Fn[e.column]})]}),t.jsxs("div",{className:"modal-header-actions",children:[!oe&&It&&t.jsx("button",{className:"modal-edit-btn",onClick:$t,title:"Edit task","aria-label":"Edit task",children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"modal-close",onClick:i,"aria-label":"Close",children:"×"})]})]}),t.jsxs("div",{className:`detail-body${b==="logs"&&S==="agent-log"&&!oe?" detail-body--agent-log":""}`,children:[oe?t.jsx("div",{className:"modal-edit-form",children:t.jsx(cg,{mode:"edit",title:ee,onTitleChange:Re,description:Ue,onDescriptionChange:pe,dependencies:Me,onDependenciesChange:ze,executorModel:tt,onExecutorModelChange:ye,validatorModel:de,onValidatorModelChange:Ie,planningModel:fe,onPlanningModelChange:_e,thinkingLevel:Ge,onThinkingLevelChange:Pe,presetMode:ft,onPresetModeChange:Y,selectedPresetId:yt,onSelectedPresetIdChange:bt,selectedWorkflowSteps:vt,onWorkflowStepsChange:qt,pendingImages:St,onImagesChange:Yt,tasks:s.filter(J=>J.id!==e.id),projectId:n,disabled:Xt,addToast:f,isActive:oe,onAutoSaveDescription:nn,reviewLevel:le,onReviewLevelChange:ve,priority:nt,onPriorityChange:Q,nodeId:Je,onNodeIdChange:ut,nodeOptions:ls,nodeOverrideDisabled:mt,nodeOverrideDisabledReason:mt?"Execution node override is locked while a task is active/in progress.":void 0,executionMode:ht,onExecutionModeChange:Et,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:Tt,onChange:J=>At(J.target.value),disabled:Xt,"data-testid":"task-source-provider-input"}),t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Repository (e.g. owner/repo)",value:Lt,onChange:J=>Vt(J.target.value),disabled:Xt,"data-testid":"task-source-repository-input"}),t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Issue identifier",value:Kt,onChange:J=>Ot(J.target.value),disabled:Xt,"data-testid":"task-source-external-id-input"}),t.jsx("input",{type:"url",className:"modal-edit-input",placeholder:"Issue URL",value:Wt,onChange:J=>_t(J.target.value),disabled:Xt,"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 J=e.title||e.description||e.id,He=!M&&J.length>rc;return t.jsxs(t.Fragment,{children:[t.jsx("h2",{className:"detail-title",children:He?J.slice(0,rc)+"…":J}),J.length>rc&&t.jsx("button",{className:"detail-description-toggle",onClick:()=>T(!M),children:M?"Show less":"Show more"})]})})(),t.jsxs("div",{className:"detail-meta",children:["Created ",new Date(e.createdAt).toLocaleDateString()," · Updated"," ",new Date(e.updatedAt).toLocaleDateString()," ·",t.jsxs("span",{className:`detail-priority-chip detail-priority-chip--${Ya(e.priority)}`,children:["Priority: ",Ya(e.priority)]}),_&&t.jsxs("div",{className:"detail-provenance",children:[t.jsx(Vs,{"aria-hidden":"true"}),t.jsxs("span",{children:["Created via ",_.label,_.parentTaskId&&t.jsxs(t.Fragment,{children:[" ","of"," ",t.jsx("button",{type:"button",className:"detail-provenance-link",onClick:()=>ns(_.parentTaskId),children:_.parentTaskId})]}),_.contextInfo?` (${_.contextInfo})`:""]})]})]})]}),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})]})]}),!oe&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"detail-tabs",children:[t.jsx("button",{className:`detail-tab${b==="definition"?" detail-tab-active":""}`,onClick:()=>v("definition"),children:"Definition"}),t.jsx("button",{className:`detail-tab${b==="logs"?" detail-tab-active":""}`,onClick:()=>v("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:()=>v("changes"),children:"Changes"}),t.jsx("button",{className:`detail-tab${b==="comments"?" detail-tab-active":""}`,onClick:()=>v("comments"),children:"Comments"}),t.jsx("button",{className:`detail-tab${b==="documents"?" detail-tab-active":""}`,onClick:()=>v("documents"),children:"Documents"}),t.jsx("button",{className:`detail-tab${b==="model"?" detail-tab-active":""}`,onClick:()=>v("model"),children:"Model"}),t.jsx("button",{className:`detail-tab${b==="workflow"?" detail-tab-active":""}`,onClick:()=>v("workflow"),children:"Workflow"}),t.jsx("button",{className:`detail-tab${b==="stats"?" detail-tab-active":""}`,onClick:()=>v("stats"),children:"Stats"}),t.jsx("button",{className:`detail-tab${b==="routing"?" detail-tab-active":""}`,onClick:()=>v("routing"),children:"Routing"}),gn.map((J,He)=>{const ct=`plugin-${He}`;return t.jsx("button",{className:`detail-tab${b===ct?" detail-tab-active":""}`,onClick:()=>v(ct),children:J.slot.label},`plugin-tab-${J.pluginId}`)})]}),b==="workflow"?t.jsx("div",{className:"detail-section",children:t.jsx(cA,{taskId:e.id,results:Ne,loading:xn,enabledWorkflowSteps:Ce,canEdit:It,projectId:n,isTaskInProgress:e.column==="in-progress"&&e.status!=="paused",onWorkflowStepsChange:qn})}):b==="model"?t.jsx("div",{className:"detail-section",children:t.jsx(q_,{task:e,addToast:f,onTaskUpdated:h,settings:Bt})}):b==="logs"?t.jsxs("div",{className:`detail-section${S==="agent-log"?" detail-section--agent-log":""}`,children:[t.jsxs("div",{className:"log-subview-toggle",children:[t.jsx("button",{className:`log-subview-btn${S==="activity"?" log-subview-btn-active":""}`,onClick:()=>z("activity"),children:"Activity"}),t.jsx("button",{className:`log-subview-btn${S==="agent-log"?" log-subview-btn-active":""}`,onClick:()=>z("agent-log"),children:"Agent Log"})]}),S==="agent-log"?t.jsx(F_,{entries:Hn,loading:rn,executorModel:jA(e,Bt),validatorModel:kA(e,Bt),planningModel:NA(e,Hn,Bt),hasMore:K,onLoadMore:wt,loadingMore:st,totalCount:Le}):t.jsxs("div",{className:"detail-activity",children:[t.jsx("h4",{children:"Activity"}),C.activityLogTruncatedCount?t.jsxs("div",{className:"detail-log-truncated",children:["Showing the most recent ",C.log.length," activity entries."]}):null,C.log&&C.log.length>0?t.jsx("div",{className:"detail-activity-list",children:[...C.log].reverse().map((J,He)=>t.jsxs("div",{className:"detail-log-entry",children:[t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-timestamp",children:CA(J.timestamp)}),t.jsx("span",{className:"detail-log-action",children:J.action})]}),J.outcome&&t.jsx("div",{className:"detail-log-outcome",children:J.outcome})]},He))}):t.jsx("div",{className:"detail-log-empty",children:"(no activity)"})]})]}):b==="changes"?t.jsx(eA,{taskId:e.id,worktree:e.worktree,projectId:n,column:e.column,mergeDetails:e.mergeDetails,modifiedFiles:e.modifiedFiles}):b==="comments"?t.jsx(J_,{task:e,addToast:f,projectId:n,onTaskUpdated:h}):b==="documents"?t.jsx(bA,{taskId:e.id,addToast:f,projectId:n,onTaskUpdated:h,canEdit:It}):typeof b=="string"&&b.startsWith("plugin-")?t.jsx("div",{className:"detail-section",children:t.jsx(Yo,{slotId:"task-detail-tab",projectId:n})}):b==="stats"?t.jsx("div",{className:"detail-section",children:t.jsx(vA,{tokenUsage:C.tokenUsage,loading:j,task:C})}):b==="routing"?t.jsx("div",{className:"detail-section",children:t.jsx(hA,{task:e,settings:Bt,addToast:f,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(ai,{remarkPlugins:[ri],children:e.summary})})]}),t.jsx(Q_,{task:e}),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.url?t.jsx("a",{className:"detail-source-link 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":$e,"aria-label":$e?"Collapse source issue details":"Expand source issue details",onClick:()=>dt(J=>!J),children:t.jsx(jn,{size:16,className:$e?"detail-source-chevron--expanded":void 0})})]}),$e&&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)"})})]})]})]}),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:[Fr.length>0&&t.jsx("span",{className:"detail-provider-icons","data-testid":"detail-provider-icons",children:Fr.map(J=>t.jsx(Dn,{provider:J,size:"sm"},J))}),t.jsxs("span",{className:"detail-meta-label",children:[t.jsx(Cn,{size:14,style:{verticalAlign:"middle",marginRight:6}}),"Agent"]})]}),t.jsxs("div",{className:"detail-agent-actions",children:[Da?t.jsxs("span",{className:"detail-agent-chip",children:[t.jsx(Cn,{size:14}),Da,t.jsx("button",{className:"detail-agent-clear",onClick:()=>void Vn(),title:"Unassign agent",children:t.jsx(Jt,{size:12})})]}):t.jsx("button",{className:"btn btn-sm",onClick:()=>{we?ie(!1):ps()},children:"Assign Agent"}),we&&t.jsxs("div",{className:"agent-picker-dropdown",children:[ce&&t.jsx("div",{className:"agent-picker-loading",children:"Loading agents..."}),!ce&&O.filter(J=>J.state!=="terminated").map(J=>t.jsxs("button",{className:`agent-picker-item${e.assignedAgentId===J.id?" selected":""}`,onClick:()=>void Tn(J.id),children:[t.jsx(Cn,{size:14}),t.jsx("span",{className:"agent-picker-name",children:J.name}),t.jsx("span",{className:"agent-picker-role",children:J.role})]},J.id)),!ce&&O.filter(J=>J.state!=="terminated").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"}),C.steps&&C.steps.length>0?t.jsxs("div",{className:"step-progress-wrapper",children:[t.jsx("div",{className:"step-progress-bar",children:C.steps.map((J,He)=>t.jsx("div",{className:`step-progress-segment step-progress-segment--${J.status}`,"data-tooltip":`${J.name} (${J.status})`,style:{backgroundColor:SA(J.status)}},He))}),t.jsxs("span",{className:"step-progress-label",children:[C.steps.filter(J=>J.status==="done").length,"/",C.steps.length," step",C.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:zs,children:"Edit"})}),ue?t.jsxs("div",{className:"spec-editor-edit-mode",children:[t.jsx("textarea",{className:"spec-editor-textarea",value:ae,onChange:J=>be(J.target.value),onKeyDown:Js,disabled:D,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:di,disabled:D,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void bi(),disabled:ae===(C.prompt||"")||D,children:D?"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:Ae,onChange:J=>Fe(J.target.value),placeholder:"e.g., 'Add more details about error handling', 'Split this into smaller steps', 'Include tests for the API endpoints'...",disabled:Z,rows:4,maxLength:2e3}),t.jsxs("div",{className:"spec-editor-revision-actions",children:[t.jsxs("span",{className:"spec-editor-char-count",children:[Ae.length,"/2000"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void rl(),disabled:!Ae.trim()||Z,children:Z?"Requesting…":"Request AI Revision"})]})]})]}):j?t.jsx("div",{className:"spec-loading",children:"Loading specification…"}):C.prompt?t.jsx("div",{className:"markdown-body",children:t.jsx(ai,{remarkPlugins:[ri],children:C.prompt.replace(/^#\s+[^\n]*\n+/,"")})}):t.jsx("div",{className:"detail-prompt",children:"(no prompt)"})]}),t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Attachments"}),U.length>0?t.jsx("div",{className:"detail-attachments-grid",children:U.map(J=>{const He=ii(`/api/tasks/${e.id}/attachments/${J.filename}`);return t.jsxs("div",{className:"detail-attachment-card",children:[t.jsx("a",{className:"detail-attachment-link",href:He,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{src:He,alt:J.originalName,className:"detail-attachment-image"})}),t.jsxs("div",{className:"detail-attachment-meta",children:[J.originalName," (",EA(J.size),")"]}),t.jsx("button",{className:"detail-attachment-delete",onClick:()=>es(J.filename),title:"Delete attachment",children:"×"})]},J.filename)})}):t.jsx("div",{className:"detail-empty-inline",children:"(no attachments)"}),t.jsx("input",{className:"detail-hidden-file-input",ref:_n,type:"file",accept:"image/*",onChange:Xn}),t.jsx("button",{className:"btn btn-sm",onClick:()=>_n.current?.click(),disabled:L,children:L?"Uploading…":"Attach Screenshot"})]}),t.jsxs("div",{className:"detail-deps",children:[t.jsx("h4",{children:"Dependencies"}),F.length>0?t.jsx("ul",{className:"detail-dep-list",children:F.map(J=>{const He=s.find(Pt=>Pt.id===J),ct=He?.title||He?.description||J;return t.jsxs("li",{className:"detail-dep-item",children:[t.jsxs("span",{className:"detail-dep-link",onClick:()=>ns(J),onKeyDown:Pt=>{(Pt.key==="Enter"||Pt.key===" ")&&(Pt.preventDefault(),ns(J))},role:"link",tabIndex:0,title:`Click to view ${J}`,children:[t.jsx("span",{className:"detail-dep-id",children:J}),t.jsx("span",{className:"detail-dep-label",children:rh(ct,40)})]}),t.jsx("button",{className:"dep-remove-btn",onClick:Pt=>Ls(Pt,J),title:`Remove dependency ${J}`,children:"×"})]},J)})}):t.jsx("div",{className:"detail-empty-inline",children:"(no dependencies)"}),t.jsxs("div",{className:"dep-trigger-wrap",children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{G&&$(""),te(J=>!J)},children:"Add Dependency"}),G&&(()=>{const J=E.toLowerCase(),He=J?$a.filter(ct=>ct.id.toLowerCase().includes(J)||ct.title&&ct.title.toLowerCase().includes(J)||ct.description&&ct.description.toLowerCase().includes(J)):$a;return t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:E,onChange:ct=>$(ct.target.value),onClick:ct=>ct.stopPropagation()}),He.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):He.map(ct=>t.jsxs("div",{className:"dep-dropdown-item",onClick:()=>{fs(ct.id),te(!1)},children:[t.jsx("span",{className:"dep-dropdown-id",children:ct.id}),t.jsx("span",{className:"dep-dropdown-title",children:rh(ct.title||ct.description||ct.id,30)})]},ct.id))]})})()]})]}),e.column==="in-review"&&t.jsx(W_,{taskId:e.id,projectId:n,prInfo:e.prInfo,automationStatus:e.status??null,autoMerge:Bt?.autoMerge??!1,prAuthAvailable:p??!1,onPrCreated:J=>{e.prInfo=J,f(`PR #${J.number} created`,"success")},onPrUpdated:J=>{e.prInfo=J},addToast:f})]})]})]}),t.jsx("div",{className:"modal-actions",children:oe?t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:"modal-edit-hint",children:[t.jsx("kbd",{children:"Ctrl+Enter"})," to save · ",t.jsx("kbd",{children:"Escape"})," to cancel"]}),t.jsx("div",{className:"modal-actions-spacer"}),t.jsx("button",{className:"btn btn-sm",onClick:mn,disabled:Xt,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:On,disabled:Xt,children:Xt?"Saving…":"Save"})]}):t.jsxs(t.Fragment,{children:[e.column==="triage"&&e.status==="awaiting-approval"&&C.prompt&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-primary btn-sm",onClick:Gs,children:"Approve Plan"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:re,children:"Reject Plan"})]}),e.column==="triage"&&e.status!=="awaiting-approval"&&!w&&t.jsx("button",{className:"btn btn-sm btn-danger",onClick:Mt,"aria-label":"Delete task",title:"Delete task",children:"Delete"}),(e.column!=="triage"||e.status==="awaiting-approval"||w||e.paused)&&t.jsxs("div",{className:"detail-actions-dropdown",ref:Rt,children:[t.jsxs("button",{className:"btn btn-sm",onClick:()=>{X(J=>!J),De(!1)},"aria-haspopup":"menu","aria-expanded":A,children:["Actions",t.jsx(en,{size:12})]}),A&&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:()=>sn(Mt),children:"Delete"}),m&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>sn(ci),children:"Duplicate"}),(e.column==="done"||e.column==="in-review")&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>sn(Qe),children:"Refine"}),t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>sn(Ee),children:"Respecify"}),w&&u&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>sn(Qn),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:()=>sn(Ds),children:"Reset"}),e.column!=="done"&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>sn(Es),children:e.paused?"Unpause":"Pause"})]})]}),t.jsx("div",{className:"modal-actions-spacer"}),t.jsx("div",{className:"detail-move-dropdown",ref:jt,children:e.column==="in-review"?t.jsxs("div",{className:"detail-move-actions-in-review",children:[t.jsxs("div",{children:[t.jsxs("button",{ref:zt,className:"btn btn-primary btn-sm detail-move-btn",onClick:Ur,onKeyDown:La,disabled:!Pn,"aria-label":Pn?`Move to ${Fn[Pn]}`:void 0,"aria-haspopup":cs?"menu":void 0,"aria-expanded":cs?he:void 0,children:[t.jsxs("span",{className:"detail-move-btn__label",children:["Move to ",Pn?Fn[Pn]:""]}),cs&&t.jsx("span",{className:"detail-move-btn__arrow","aria-hidden":"true",children:t.jsx(en,{size:12})})]}),he&&cs&&t.jsx("div",{className:"detail-move-menu",role:"menu",onKeyDown:Ai,children:xi.map(J=>t.jsx("button",{className:"detail-move-menu-item",role:"menuitem",onClick:()=>xt(J),onKeyDown:Ai,children:J==="in-progress"?"Back to In Progress":`Move to ${Fn[J]}`},J))})]}),Hr?t.jsx("button",{className:"btn btn-primary btn-sm",disabled:!0,children:Hr}):t.jsx("button",{className:"btn btn-primary btn-sm",onClick:dn,children:"Merge & Close"})]}):t.jsxs("div",{children:[t.jsxs("button",{ref:zt,className:"btn btn-primary btn-sm detail-move-btn",onClick:Ur,onKeyDown:La,disabled:!Pn,"aria-label":Pn?`Move to ${Fn[Pn]}`:void 0,"aria-haspopup":cs?"menu":void 0,"aria-expanded":cs?he:void 0,children:[t.jsxs("span",{className:"detail-move-btn__label",children:["Move to ",Pn?Fn[Pn]:""]}),cs&&t.jsx("span",{className:"detail-move-btn__arrow","aria-hidden":"true",children:t.jsx(en,{size:12})})]}),he&&cs&&t.jsx("div",{className:"detail-move-menu",role:"menu",onKeyDown:Ai,children:xi.map(J=>t.jsxs("button",{className:"detail-move-menu-item",role:"menuitem",onClick:()=>xt(J),onKeyDown:Ai,children:["Move to ",Fn[J]]},J))})]})})]})}),at&&t.jsx("div",{className:"modal-overlay open detail-refine-overlay",onClick:Xe,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal detail-refine-modal",onClick:J=>J.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:Xe,"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:Ye,onChange:J=>rt(J.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:[Ye.length,"/2000 characters"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:Dt,disabled:!Ye.trim()||Oe,children:Oe?"Creating...":"Create Refinement Task"})]})]}),t.jsx("div",{className:"modal-actions",children:t.jsx("button",{className:"btn btn-sm",onClick:Xe,disabled:Oe,children:"Cancel"})})]})})]})})}const IA=640;function $A({isOpen:e,onClose:n,onImport:s,tasks:i,projectId:r}){const[o,l]=a.useState(""),[c,u]=a.useState(""),[d,m]=a.useState(""),[h,f]=a.useState(!1),[p,g]=a.useState("issues"),[b,v]=a.useState([]),[x,y]=a.useState(null),[j,N]=a.useState([]),[C,w]=a.useState(null),[_,S]=a.useState(null),[z,M]=a.useState(!1),[T,U]=a.useState([]),[V,L]=a.useState(!1),[R,F]=a.useState(""),W=a.useRef(!1),G=a.useRef(null);oi(G,e,"fusion:github-modal-size");const te=Mi(n),[E,$]=a.useState(!1),[P,k]=a.useState("list"),O=a.useRef(null),ne=new Set;for(const pe of i){const Me=pe.description.match(/Source: (https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+)/);Me&&ne.add(Me[1]);const ze=pe.description.match(/PR: (https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+)/);ze&&ne.add(ze[1])}a.useEffect(()=>{if(e)return l(""),u(""),m(""),v([]),y(null),N([]),w(null),g("issues"),S(null),M(!1),U([]),L(!0),F(""),O.current=null,W.current=!0,Ry().then(pe=>{if(W.current)if(U(pe),L(!1),pe.length===1){const Me=pe[0];l(Me.owner),u(Me.repo),F(Me.name)}else pe.length>1&&(l(""),u(""),F(""))}).catch(()=>{W.current&&L(!1)}),()=>{W.current=!1}},[e]);const we=a.useCallback(pe=>{if(F(pe),pe==="")l(""),u("");else{const Me=T.find(ze=>ze.name===pe);Me&&(l(Me.owner),u(Me.repo))}},[T]),ie=a.useCallback(async()=>{if(!o.trim()||!c.trim()){S("Repository must be selected");return}f(!0),S(null),v([]),y(null);try{const pe=d.split(",").map(ze=>ze.trim()).filter(Boolean),Me=await Ey(o.trim(),c.trim(),30,pe.length>0?pe:void 0);v(Me),Me.length===0&&S("No open issues found")}catch(pe){S(je(pe)||"Failed to fetch issues")}finally{f(!1)}},[o,c,d]),ce=a.useCallback(async()=>{if(!o.trim()||!c.trim()){S("Repository must be selected");return}f(!0),S(null),N([]),w(null);try{const pe=await _y(o.trim(),c.trim(),30);N(pe),pe.length===0&&S("No open pull requests found")}catch(pe){S(je(pe)||"Failed to fetch pull requests")}finally{f(!1)}},[o,c]);a.useEffect(()=>{if(!e||!o.trim()||!c.trim()||h||z)return;const pe={owner:o.trim(),repo:c.trim(),labels:d.trim(),tab:p};O.current?.owner===pe.owner&&O.current?.repo===pe.repo&&O.current?.labels===pe.labels&&O.current?.tab===pe.tab||(O.current=pe,p==="issues"?ie():ce())},[o,c,d,p,e,h,z,ie,ce]),a.useEffect(()=>{if(!e)return;const pe=Me=>{Me.key==="Escape"&&n()};return document.addEventListener("keydown",pe),()=>document.removeEventListener("keydown",pe)},[e,n]),a.useEffect(()=>{if(!e)return;const pe=()=>{$(window.innerWidth<=IA)};return pe(),window.addEventListener("resize",pe),()=>window.removeEventListener("resize",pe)},[e]);const ke=a.useCallback(pe=>{y(pe),E&&k("preview")},[E]),D=a.useCallback(pe=>{w(pe),E&&k("preview")},[E]),se=a.useCallback(()=>{k("list")},[]),Z=a.useCallback(async()=>{if(p==="issues"){if(x===null)return;M(!0),S(null);try{const pe=await My(o.trim(),c.trim(),x,r);s(pe),y(null),E&&P==="preview"&&k("list")}catch(pe){const Me=je(pe);Me?.includes("already imported")?S(Me):S(Me||"Failed to import issue")}finally{M(!1)}}else{if(C===null)return;M(!0),S(null);try{const pe=await Ay(o.trim(),c.trim(),C,r);s(pe),w(null),E&&P==="preview"&&k("list")}catch(pe){const Me=je(pe);Me?.includes("already imported")?S(Me):S(Me||"Failed to import pull request")}finally{M(!1)}}},[p,x,C,o,c,s,E,P]),ge=b.find(pe=>pe.number===x),ue=j.find(pe=>pe.number===C);if(!e)return null;const me=T.length>0,ae=T.length===1,be=b.filter(pe=>ne.has(pe.html_url)).length,Ae=j.filter(pe=>ne.has(pe.html_url)).length,Fe=_==="No open issues found",at=_==="No open pull requests found",et=p==="issues"?Fe:at,Ye=!!_&&!Fe&&b.length===0&&!h,rt=!!_&&!at&&j.length===0&&!h,Oe=p==="issues"?Ye:rt,We=h||b.length>0||Fe||Ye,oe=h||j.length>0||at||rt,xe=p==="issues"?We:oe,ee=!!_&&b.length>0&&!Fe,Re=!!_&&j.length>0&&!at,Ue=p==="issues"?ee:Re;return t.jsx("div",{className:"modal-overlay open",...te,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg github-import-modal",ref:G,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"),w(null)},disabled:h||z,children:[t.jsx(Uo,{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:h||z,children:[t.jsx(ws,{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:V?t.jsxs("div",{className:"github-import-toolbar__loading",role:"status","aria-live":"polite",children:[t.jsx(lt,{size:16,className:"spin"}),t.jsx("span",{children:"Detecting…"})]}):me?ae?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:T[0].name}),t.jsxs("span",{className:"github-import-remote-pill__repo",children:[T[0].owner,"/",T[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:R,onChange:pe=>we(pe.target.value),disabled:h||z,"aria-label":"Select Git remote",children:[t.jsx("option",{value:"",children:"Select remote…"}),T.map(pe=>t.jsxs("option",{value:pe.name,children:[pe.name," (",pe.owner,"/",pe.repo,")"]},pe.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:d,onChange:pe=>m(pe.target.value),onKeyDown:pe=>pe.key==="Enter"&&ie(),disabled:h||z||!me,"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"?ie:ce,disabled:h||z||!o.trim()||!c.trim(),"aria-label":h?`Loading ${p}`:`Load ${p} from repository`,title:h?"Loading…":`Load ${p}`,children:[h?t.jsx(lt,{size:14,className:"spin"}):t.jsx($n,{size:14}),t.jsx("span",{children:h?"Loading…":"Load"})]})})]}),!V&&!me&&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"})]}),Ue&&t.jsx("div",{className:"form-error github-import-banner",role:"alert",children:_}),t.jsxs("div",{className:"github-import-workspace",children:[t.jsxs("section",{className:`github-import-list-pane ${E?"mobile":""} ${P==="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"&&b.length>0&&t.jsxs("div",{className:"github-import-results-meta","aria-live":"polite",children:[t.jsxs("span",{children:[b.length," issue",b.length===1?"":"s"]}),t.jsxs("span",{children:[be," imported"]})]}),p==="pulls"&&j.length>0&&t.jsxs("div",{className:"github-import-results-meta","aria-live":"polite",children:[t.jsxs("span",{children:[j.length," pull request",j.length===1?"":"s"]}),t.jsxs("span",{children:[Ae," imported"]})]})]}),t.jsxs("div",{className:"github-import-pane-content",children:[!xe&&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."})]})}),h&&t.jsxs("div",{className:"github-import-state github-import-state--loading",role:"status","aria-live":"polite",children:[t.jsx(lt,{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."})]})]}),Oe&&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:_})]})}),et&&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"&&b.length>0&&t.jsx("div",{className:"issues-list","aria-live":"polite",children:b.map(pe=>{const Me=ne.has(pe.html_url);return t.jsxs("div",{className:`issue-item ${x===pe.number?"selected":""} ${Me?"imported":""}`,onClick:()=>!Me&&ke(pe.number),children:[t.jsx("input",{type:"radio",name:"issue",checked:x===pe.number,onChange:()=>ke(pe.number),disabled:Me,"aria-label":`Select issue #${pe.number}`}),t.jsxs("div",{className:"issue-main",children:[t.jsxs("div",{className:"issue-heading-row",children:[t.jsxs("span",{className:"issue-number",children:["#",pe.number]}),t.jsx("span",{className:"issue-title",children:pe.title})]}),pe.labels.length>0&&t.jsx("span",{className:"issue-labels",children:pe.labels.map(ze=>t.jsx("span",{className:"label-chip",children:ze.name},ze.name))})]}),Me&&t.jsx("span",{className:"imported-badge",children:"Imported"})]},pe.number)})}),p==="pulls"&&j.length>0&&t.jsx("div",{className:"issues-list","aria-live":"polite",children:j.map(pe=>{const Me=ne.has(pe.html_url);return t.jsxs("div",{className:`issue-item ${C===pe.number?"selected":""} ${Me?"imported":""}`,onClick:()=>!Me&&D(pe.number),children:[t.jsx("input",{type:"radio",name:"pull",checked:C===pe.number,onChange:()=>D(pe.number),disabled:Me,"aria-label":`Select pull request #${pe.number}`}),t.jsxs("div",{className:"issue-main",children:[t.jsxs("div",{className:"issue-heading-row",children:[t.jsxs("span",{className:"issue-number",children:["#",pe.number]}),t.jsx("span",{className:"issue-title",children:pe.title})]}),t.jsxs("span",{className:"pull-branch-info",children:[pe.headBranch," → ",pe.baseBranch]})]}),Me&&t.jsx("span",{className:"imported-badge",children:"Imported"})]},pe.number)})})]})]}),t.jsxs("section",{className:`github-import-preview-pane ${E?"mobile":""} ${P==="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:se,"data-testid":"github-import-back-button","aria-label":`Back to ${p==="issues"?"issues":"pull requests"} list`,children:[t.jsx(Ca,{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"&&ge?t.jsxs("div",{className:"issue-preview","data-testid":"github-import-preview-card",children:[t.jsxs("div",{className:"preview-meta",children:["Issue #",ge.number]}),t.jsx("div",{className:"preview-title",children:ge.title}),t.jsx("div",{className:"preview-body",children:ge.body?ge.body.slice(0,200)+(ge.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"&&ue?t.jsxs("div",{className:"issue-preview","data-testid":"github-import-preview-card",children:[t.jsxs("div",{className:"preview-meta",children:["Pull Request #",ue.number]}),t.jsx("div",{className:"preview-title",children:ue.title}),t.jsxs("div",{className:"preview-branch",children:[t.jsx("strong",{children:"Branch:"})," ",ue.headBranch," → ",ue.baseBranch]}),t.jsx("div",{className:"preview-body",children:ue.body?ue.body.slice(0,200)+(ue.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:Z,disabled:(p==="issues"?x===null:C===null)||z,children:z?t.jsx(lt,{size:14,className:"spin"}):"Import"})]})]})})}const DA=["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 LA(e,n){return e&&n?`${e}/${n}`:""}function zA(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 FA({isOpen:e,onClose:n,onTaskCreated:s,onTasksCreated:i,tasks:r,initialPlan:o,projectId:l,resumeSessionId:c}){const[u,d]=a.useState(""),[m,h]=a.useState({type:"initial"}),[f,p]=a.useState(null),[g,b]=a.useState([]),[v,x]=a.useState([]),[y,j]=a.useState(null),N=a.useRef(!1),C=a.useRef(!1),[w,_]=a.useState(""),[S,z]=a.useState(!0),[M,T]=a.useState(!1),[U,V]=a.useState(!1),[L,R]=a.useState(null),[F,W]=a.useState(0),G=a.useRef(null),te=a.useRef(null),E=a.useRef(null),$=a.useRef(null),[P,k]=a.useState(c??null),O=a.useMemo(()=>Yi(),[]),{isLockedByOther:ne,takeControl:we,isLoading:ie}=el(e?P:null),{activeTabMap:ce,broadcastUpdate:ke,broadcastCompleted:D,broadcastLock:se,broadcastUnlock:Z,broadcastHeartbeat:ge}=Ta(),[ue,me]=a.useState(void 0),[ae,be]=a.useState(void 0),[Ae,Fe]=a.useState([]),[at,et]=a.useState(!1),[Ye,rt]=a.useState(null),[Oe,We]=a.useState([]),[oe,xe]=a.useState([]),ee=a.useRef(null),[Re,Ue]=a.useState([]),[pe,Me]=a.useState(!1),[ze,tt]=a.useState(c??null),[ye,de]=a.useState(!!c),[Ie,fe]=a.useState(null),_e=a.useRef(!1),Ge=a.useRef(null);oi(te,e,"fusion:planning-modal-size"),a.useEffect(()=>{const B=Ge.current;if(!B)return;B.scrollHeight-B.scrollTop-B.clientHeight<32&&(B.scrollTop=B.scrollHeight)},[w]),a.useEffect(()=>{if(m.type!=="loading"){R(null),W(0);return}const B=Date.now();R(B),W(0);const he=setInterval(()=>{W(Math.max(0,Math.floor((Date.now()-B)/1e3)))},1e3);return()=>clearInterval(he)},[m.type]);const Pe=a.useCallback(()=>{d(""),h({type:"initial"}),p(null),b([]),x([]),j(null),_(""),T(!1),V(!1),me(void 0),be(void 0),$.current=null,k(null)},[]),ft=LA(ue,ae),Y=a.useCallback((B,he)=>{if(!B||!he)return"Using default";const De=Ae.find(A=>A.provider===B&&A.id===he);return De?`${De.provider}/${De.id}`:`${B}/${he}`},[Ae]),le=a.useCallback(async()=>{et(!0),rt(null);try{const B=await hs();Fe(B.models),We(B.favoriteProviders),xe(B.favoriteModels)}catch(B){rt(je(B)||"Failed to load models")}finally{et(!1)}},[]),ve=a.useCallback(B=>{We(he=>{const De=he,X=De.includes(B)?De.filter($e=>$e!==B):[B,...De];return fn({favoriteProviders:X,favoriteModels:oe}).catch(()=>{We(De)}),X})},[oe]),nt=a.useCallback(B=>{xe(he=>{const De=he,X=De.includes(B)?De.filter($e=>$e!==B):[B,...De];return fn({favoriteProviders:Oe,favoriteModels:X}).catch(()=>{xe(De)}),X})},[Oe]),Q=a.useCallback(B=>{E.current?.close();const he=Rj(B,l,{onThinking:De=>{_(A=>A+De),ke({sessionId:B,status:"generating",needsInput:!1,owningTabId:O,type:"planning",title:u.trim()||"Planning session",projectId:l??null})},onQuestion:De=>{T(!1),V(!1),ia(l),h({type:"question",session:{sessionId:B,currentQuestion:De,summary:null}}),_(""),ke({sessionId:B,status:"awaiting_input",needsInput:!0,owningTabId:O,type:"planning",title:u.trim()||"Planning session",projectId:l??null})},onSummary:De=>{T(!1),V(!1),ia(l),h({type:"summary",session:{sessionId:B,currentQuestion:null,summary:De},summary:De}),j(De),_(""),ke({sessionId:B,status:"complete",needsInput:!1,owningTabId:O,type:"planning",title:u.trim()||"Planning session",projectId:l??null})},onError:De=>{const A=De||"Session failed while contacting the AI.";T(!0),(async()=>{try{const X=await hi(B);if(X&&(X.status==="generating"||X.status==="awaiting_input")){Q(B);return}}catch{}T(!1),V(!1),p(null),h(X=>X.type==="question"||X.type==="summary"||X.type==="error"?{type:"error",session:X.session,errorMessage:A}:{type:"error",session:{sessionId:B,currentQuestion:null,summary:null},errorMessage:A}),_(""),$.current=B,ke({sessionId:B,status:"error",needsInput:!1,owningTabId:O,type:"planning",title:u.trim()||"Planning session",projectId:l??null}),D({sessionId:B,status:"error"})})()},onComplete:()=>{T(!1),V(!1),$.current=null,D({sessionId:B,status:"complete"})},onConnectionStateChange:De=>{T(De==="reconnecting")}});E.current=he},[D,ke,u,l,O]),Je=a.useCallback(async B=>{const he=B??u;if(he.trim()){p(null),_(""),x([]),b([]),T(!1),h({type:"loading"});try{const De=ue&&ae?{planningModelProvider:ue,planningModelId:ae}:void 0,{sessionId:A}=await hj(he.trim(),l,De);$.current=A,k(A),tt(A),Q(A),b([])}catch(De){T(!1),p(je(De)||"Failed to start planning session"),h({type:"initial"}),$.current=null,k(null)}}},[Q,u,ae,ue,l]);a.useEffect(()=>{e&&m.type==="initial"&&G.current?.focus()},[e,m.type]),a.useEffect(()=>{e&&le()},[e,le]),a.useEffect(()=>{if(e&&o&&!N.current&&m.type==="initial"){d(o);const B=setTimeout(()=>{N.current=!0,Je(o)},0);return()=>clearTimeout(B)}else if(e&&!o&&!N.current&&!C.current&&m.type==="initial"){C.current=!0;const B=M1(l);B&&d(B)}},[e,o,m.type,Je,l]);const ut=a.useCallback(async B=>{E.current?.close(),E.current=null,p(null),_(""),b([]),x([]),j(null),V(!1),h({type:"loading"});try{const he=await hi(B);if(!he){tt(null),de(!1),h({type:"initial"});return}$.current=B,k(B);const De=xa(he.conversationHistory);if(x(De),b(De.map(A=>A.response).filter(A=>!!(A&&typeof A=="object"&&!Array.isArray(A)))),he.status==="awaiting_input"&&he.currentQuestion){ia(l);const A=JSON.parse(he.currentQuestion);h({type:"question",session:{sessionId:B,currentQuestion:A,summary:null}}),he.thinkingOutput&&_(he.thinkingOutput),Q(B)}else if(he.status==="complete"&&he.result){ia(l);const A=JSON.parse(he.result);h({type:"summary",session:{sessionId:B,currentQuestion:null,summary:A},summary:A}),j(A)}else he.status==="generating"?(h({type:"loading"}),he.thinkingOutput&&_(he.thinkingOutput),Q(B)):he.status==="error"&&h({type:"error",session:{sessionId:B,currentQuestion:null,summary:null},errorMessage:he.error||"Session failed"})}catch{p("Failed to load session"),h({type:"initial"})}},[Q,l]);a.useEffect(()=>{!e||!c||$.current!==c&&(tt(c),de(!0),ut(c))},[e,c,ut]),a.useEffect(()=>{e&&ze&&(c&&c===ze||E.current?.isConnected()||ut(ze))},[e]);const ht=a.useCallback(async()=>{Me(!0);try{const he=(await dd(l)).filter(De=>De.type==="planning").sort((De,A)=>Date.parse(A.updatedAt)-Date.parse(De.updatedAt));Ue(he)}catch{}finally{Me(!1)}},[l]);a.useEffect(()=>{e&&ht()},[e,ht]),a.useEffect(()=>{if(!e)return;const B=l?`?projectId=${encodeURIComponent(l)}`:"",he=A=>{try{const X=JSON.parse(A.data);if(X.type!=="planning")return;Ue($e=>{const dt=$e.findIndex(zt=>zt.id===X.id);return(dt>=0?[...$e.slice(0,dt),X,...$e.slice(dt+1)]:[X,...$e]).sort((zt,Rt)=>Date.parse(Rt.updatedAt)-Date.parse(zt.updatedAt))})}catch{}},De=A=>{try{const X=JSON.parse(A.data);Ue($e=>$e.filter(dt=>dt.id!==X))}catch{}};return Ks(`/api/events${B}`,{events:{"ai_session:updated":he,"ai_session:deleted":De},onReconnect:()=>{ht()}})},[e,l,ht]);const Et=a.useCallback(B=>{if(ze===B){de(!0);return}tt(B),de(!0),ut(B)},[ut,ze]),yt=a.useCallback(()=>{E.current?.close(),E.current=null,Pe(),tt(null),de(!0)},[Pe]),bt=a.useCallback(()=>{de(!1)},[]),vt=a.useCallback(async B=>{const he=A=>A==="generating"||A==="awaiting_input",De=Re.find(A=>A.id===B);if(De&&he(De.status))try{await xp(B,l,O)}catch{}try{await Ep(B)}catch{}D({sessionId:B,status:"complete",timestamp:Date.now()}),Ue(A=>A.filter(X=>X.id!==B)),ze===B&&(E.current?.close(),E.current=null,Pe(),tt(null),de(!1)),fe(null)},[D,Re,l,Pe,ze,O]);a.useEffect(()=>{e||(N.current=!1,C.current=!1,T(!1),V(!1),k(null))},[e]),a.useEffect(()=>{if(!e){ee.current&&(Z(ee.current,O),ee.current=null);return}if(P&&ee.current!==P){ee.current&&Z(ee.current,O),se(P,O),ee.current=P;return}!P&&ee.current&&(Z(ee.current,O),ee.current=null)},[se,Z,e,P,O]),a.useEffect(()=>{if(!e||!P||ee.current!==P)return;ge(O);const B=setInterval(()=>{ge(O)},3e4);return()=>{clearInterval(B)}},[ge,e,P,O]),a.useEffect(()=>()=>{E.current?.close(),E.current=null,ee.current&&(Z(ee.current,O),ee.current=null)},[Z,O]),a.useEffect(()=>{if(!e)return;const B=()=>{E.current?.close(),E.current=null};return window.addEventListener("beforeunload",B),()=>window.removeEventListener("beforeunload",B)},[e]);const qt=a.useCallback(()=>{u&&m.type==="initial"&&E1(u,l),E.current?.close(),E.current=null,T(!1),V(!1),n()},[u,n,l,m.type]);a.useEffect(()=>{if(!e)return;const B=he=>{he.key==="Escape"&&qt()};return document.addEventListener("keydown",B),()=>document.removeEventListener("keydown",B)},[e,qt]);const Tt=a.useCallback(async B=>{if(m.type!=="question")return;const{session:he}=m,De=he.sessionId,A=he.currentQuestion;if(!A){p("No active question in session");return}p(null),b(X=>[...X,B]),x(X=>[...X,{question:A,response:B}]),h({type:"loading"}),_("");try{await pj(De,B,l,O)}catch(X){p(je(X)||"Failed to submit response"),h({type:"question",session:he})}},[l,O,m]),At=a.useCallback(async()=>{const B=$.current;if(B){try{await gj(B,l,O)}catch{}E.current?.close(),E.current=null,T(!1),V(!1),h({type:"error",session:{sessionId:B,currentQuestion:null,summary:null},errorMessage:"Generation stopped by user. You can retry or start a new session."}),_("")}},[l,O]),Lt=a.useCallback(async()=>{if(m.type!=="error")return;const B=m.session;p(null),V(!0),_(""),h({type:"loading"}),Q(B.sessionId);try{$.current=B.sessionId,k(B.sessionId),await fj(B.sessionId,l,O)}catch(he){let De=he;if((je(he)||"").includes("not in an error state"))try{const X=await hi(B.sessionId);if(!X)throw new Error("Failed to refresh planning session.");if($.current=X.id,k(X.id),X.status==="generating")_(X.thinkingOutput??""),h({type:"loading"});else if(X.status==="awaiting_input"){if(!X.currentQuestion)throw new Error("Planning session is awaiting input but has no current question.");const $e=JSON.parse(X.currentQuestion);ia(l),h({type:"question",session:{sessionId:X.id,currentQuestion:$e,summary:null}}),E.current?.isConnected()||Q(X.id)}else if(X.status==="complete"){if(!X.result)throw new Error("Planning session is complete but has no result.");const $e=JSON.parse(X.result);ia(l),h({type:"summary",session:{sessionId:X.id,currentQuestion:null,summary:$e},summary:$e}),j($e)}else X.status==="error"&&h({type:"error",session:{sessionId:X.id,currentQuestion:null,summary:null},errorMessage:X.error||"Retry failed. Please try again."});T(!1);return}catch(X){De=X}E.current?.close(),E.current=null,h({type:"error",session:B,errorMessage:je(De)||"Retry failed. Please try again."}),T(!1)}finally{V(!1)}},[Q,l,O,m]),Vt=a.useCallback(async()=>{if(m.type==="summary"){p(null),h({type:"loading"});try{const B=m.session.sessionId,he=await bj(B,y??void 0,l);s(he),tt(null),Ue(De=>De.filter(A=>A.id!==B)),D({sessionId:B,status:"complete",timestamp:Date.now()}),qt()}catch(B){p(je(B)||"Failed to create task"),h({type:"summary",session:m.session,summary:m.summary})}}},[D,y,m,l,s,qt]),Kt=a.useCallback(async()=>{if(m.type==="summary"){p(null),h({type:"loading"});try{const B=await xj(m.session.sessionId,y??void 0,l);k(B.sessionId),h({type:"breakdown",sessionId:B.sessionId,subtasks:B.subtasks,dirty:!1})}catch(B){p(je(B)||"Failed to start breakdown"),h({type:"summary",session:m.session,summary:m.summary})}}},[y,m,l]),Ot=a.useCallback(async()=>{if(m.type==="breakdown"){p(null),h({type:"creating"});try{const B=m.sessionId,he=await vj(B,m.subtasks,l);i(he.tasks),Ue(De=>De.filter(A=>A.id!==B)),D({sessionId:B,status:"complete",timestamp:Date.now()}),d(""),h({type:"initial"}),p(null),b([]),x([]),j(null),_(""),me(void 0),be(void 0),$.current=null,k(null),tt(null),n()}catch(B){p(je(B)||"Failed to create tasks"),h({type:"breakdown",sessionId:m.sessionId,subtasks:m.subtasks,dirty:m.dirty})}}},[D,m,i,n,l]),Wt=a.useCallback(()=>{if(m.type==="question"&&g.length>0){const B=g.slice(0,-1);b(B),h({type:"question",session:m.session})}},[m,g]),_t=()=>m.type==="question"?Math.min(g.length+1,3):3,St=P?ce.get(P):null,Yt=St&&St.tabId!==O,Xt=!!(Yt&&!St.stale),Qt=ne&&(!Yt||St.stale);return e?t.jsx("div",{className:"modal-overlay open",onMouseDown:B=>{_e.current=B.target===B.currentTarget},onClick:B=>{B.target===B.currentTarget&&_e.current&&qt(),_e.current=!1},role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg planning-modal",ref:te,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[ye&&t.jsx("button",{className:"modal-back planning-mobile-back",onClick:bt,"aria-label":"Back to sessions",title:"Back to sessions",children:t.jsx(Oo,{size:18})}),t.jsx(si,{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:qt,"aria-label":"Close",children:t.jsx(Jt,{size:20})})})]}),t.jsxs("div",{className:`planning-modal-body planning-modal-body--split ${ye?"planning-modal-body--show-detail":"planning-modal-body--show-list"}`,children:[t.jsx(qA,{sessions:Re,loading:pe,selectedSessionId:ze,pendingDeleteId:Ie,onSelectSession:Et,onNewSession:yt,onRequestDelete:fe,onConfirmDelete:B=>void vt(B),onCancelDelete:()=>fe(null)}),t.jsxs("div",{className:"planning-detail",children:[f&&t.jsx("div",{className:"form-error planning-error",children:f}),M&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),Xt&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),m.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(as,{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:G,id:"initial-plan",rows:4,className:"planning-textarea",placeholder:"e.g., Build a user authentication system with login, signup, and password reset...",value:u,onChange:B=>d(B.target.value),onKeyDown:B=>{B.key==="Enter"&&!B.shiftKey&&u.trim()&&(B.preventDefault(),Je())}})]}),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:DA.map((B,he)=>t.jsx("button",{className:"planning-example-chip",onClick:()=>d(B),children:B.length>40?B.slice(0,40)+"...":B},he))})]}),t.jsxs("div",{className:"planning-model-select-group",children:[t.jsxs("label",{htmlFor:"planning-modal-model",className:"form-label",children:["Planning Model",at&&t.jsx("span",{className:"text-muted text-muted-sm",children:"Loading models…"})]}),t.jsx(Jn,{id:"planning-modal-model",label:"Planning Model",value:ft,onChange:B=>{const{provider:he,modelId:De}=zA(B);me(he),be(De)},models:Ae,disabled:at,favoriteProviders:Oe,onToggleFavorite:ve,favoriteModels:oe,onToggleModelFavorite:nt}),Ye&&t.jsxs("div",{className:"form-hint form-hint-error",children:[Ye," ",t.jsx("button",{type:"button",className:"text-link-btn",onClick:()=>{le()},children:"Retry"})]}),t.jsx("div",{className:"model-selector-current model-selector-current--spaced",children:t.jsx("span",{className:`model-badge ${ue&&ae?"model-badge-custom":"model-badge-default"}`,children:Y(ue,ae)})})]})]}),t.jsx("div",{className:"planning-view-footer",children:t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>Je(),disabled:!u.trim(),children:[t.jsx(si,{size:16,className:"icon-mr-8"}),"Start Planning"]})})]}),m.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(lt,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:w?"AI is thinking...":"Generating next question..."}),L&&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(!S),type:"button",children:S?"Hide thinking":"Show thinking"}),t.jsx("div",{className:"planning-loading-actions",children:t.jsxs("button",{className:"btn planning-stop-btn",type:"button",onClick:()=>void At(),children:[t.jsx(fb,{size:14}),t.jsx("span",{className:"icon-ml-6",children:"Stop"})]})}),S&&w&&t.jsx("div",{className:"planning-thinking-output",ref:Ge,children:t.jsx("pre",{children:w})})]})]}),m.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($s,{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:m.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void Lt(),disabled:U,children:[U?t.jsx(lt,{size:14,className:"spin"}):t.jsx($n,{size:14}),t.jsx("span",{className:"icon-ml-6",children:U?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:qt,disabled:U,children:"Dismiss"})]})]})]})}),m.type==="creating"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(lt,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:"Creating tasks..."})]}),m.type==="question"&&m.session.currentQuestion&&t.jsx("div",{className:"planning-question",children:t.jsx(OA,{question:m.session.currentQuestion,progress:_t(),historyEntries:v,onSubmit:Tt,onBack:g.length>0?Wt:void 0})}),m.type==="summary"&&y&&t.jsx(UA,{summary:y,historyEntries:v,onSummaryChange:j,tasks:r,onCreateTask:Vt,onBreakIntoTasks:Kt,onRefine:()=>{h({type:"question",session:m.session})},isLoading:!1}),m.type==="breakdown"&&t.jsx(HA,{subtasks:m.subtasks,dirty:m.dirty,isLoading:!1,onUpdateSubtasks:B=>h({...m,subtasks:B,dirty:!0}),onCreateTasks:Ot,onBack:()=>{const he={sessionId:m.sessionId,currentQuestion:null,summary:y??null};y&&h({type:"summary",session:he,summary:y})}})]}),ne&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(qo,{size:16}),t.jsx("span",{children:Qt?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),Qt&&t.jsx("button",{type:"button",onClick:()=>{we()},disabled:ie,className:"btn btn-primary session-lock-take-control",children:ie?"Taking control...":"Take Control"})]})})]})]})}):null}function OA({question:e,progress:n,historyEntries:s,onSubmit:i,onBack:r}){const[o,l]=a.useState({}),[c,u]=a.useState(""),d=a.useCallback(()=>{e.type==="text"?i({[e.id]:c}):e.type==="confirm"?i({[e.id]:o[e.id]===!0}):i(o)},[e,o,c,i]);a.useEffect(()=>{l({}),u("")},[e.id]);const m=()=>{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($s,{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(h=>t.jsx("div",{className:`planning-progress-step ${h<=n?"active":""}`},h))}),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:h=>u(h.target.value),onKeyDown:h=>{h.key==="Enter"&&!h.shiftKey&&c.trim()&&(h.preventDefault(),d())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(h=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:h.id,checked:o[e.id]===h.id,onChange:()=>l({[e.id]:h.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:h.label}),h.description&&t.jsx("span",{className:"planning-option-desc",children:h.description})]})]},h.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(h=>{const f=o[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:h.id,checked:f.includes(h.id),onChange:p=>{const g=p.target.checked?[...f,h.id]:f.filter(b=>b!==h.id);l({[e.id]:g})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:h.label}),h.description&&t.jsx("span",{className:"planning-option-desc",children:h.description})]})]},h.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(kn,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${o[e.id]===!1?"selected":""}`,onClick:()=>l({[e.id]:!1}),children:[t.jsx(Jt,{size:18}),"No"]})]})]})]})]})]}),t.jsxs("div",{className:"planning-actions",children:[r&&t.jsxs("button",{className:"btn",onClick:r,children:[t.jsx(Ca,{size:16,className:"icon-mr-4"}),"Back"]}),t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:d,disabled:!m(),children:["Continue",t.jsx(Mr,{size:16,className:"icon-ml-4"})]})]})]})}function UA({summary:e,historyEntries:n,onSummaryChange:s,tasks:i,onCreateTask:r,onBreakIntoTasks:o,onRefine:l,isLoading:c}){const[u,d]=a.useState(!1),[m,h]=a.useState(e.suggestedDependencies),f=p=>{const g=m.includes(p)?m.filter(b=>b!==p):[...m,p];h(g),s({...e,suggestedDependencies:g})};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($s,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(kn,{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:()=>d(!u),children:u?"Collapse":"Expand"})]}),t.jsx("textarea",{className:`planning-textarea ${u?"expanded":""}`,rows:u?10:4,value:e.description,onChange:p=>s({...e,description:p.target.value})})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Suggested Size"}),t.jsxs("select",{className:"planning-size-select",value:e.suggestedSize,onChange:p=>s({...e,suggestedSize:p.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)"})]})]}),i.length>0&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Suggested Dependencies"}),t.jsx("div",{className:"planning-deps-list",children:i.map(p=>t.jsxs("label",{className:`planning-dep-chip ${m.includes(p.id)?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:m.includes(p.id),onChange:()=>f(p.id)}),t.jsx("span",{className:"planning-dep-id",children:p.id}),t.jsx("span",{className:"planning-dep-title",children:p.title||p.description.slice(0,30)})]},p.id))})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Key Deliverables"}),t.jsx("ul",{className:"planning-deliverables",children:e.keyDeliverables.map((p,g)=>t.jsx("li",{children:p},g))})]})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:l,disabled:c,children:[t.jsx(Ca,{size:16,className:"icon-mr-4"}),"Refine Further"]}),t.jsxs("div",{className:"planning-summary-actions-right",children:[t.jsx("button",{className:"btn",onClick:o,disabled:c,title:"Break the plan into multiple tasks with dependencies",children:c?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:16,className:"spin icon-mr-8"}),"Breaking down..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Ho,{size:16,className:"icon-mr-8"}),"Break into Tasks"]})}),t.jsx("button",{className:"btn btn-primary",onClick:r,disabled:c,children:c?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:16,className:"spin icon-mr-8"}),"Creating..."]}):t.jsxs(t.Fragment,{children:[t.jsx(kn,{size:16,className:"icon-mr-8"}),"Create Task"]})})]})]})]})}function lh(e){const n=new Map(e.map(o=>[o.id,o.dependsOn])),s=new Set,i=new Set,r=o=>{if(s.has(o))return!0;if(i.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),i.add(o),!1};return e.some(o=>r(o.id))}function BA(e){return{id:`subtask-${e}`,title:"",description:"",suggestedSize:"M",dependsOn:[]}}function HA({subtasks:e,dirty:n,isLoading:s,onUpdateSubtasks:i,onCreateTasks:r,onBack:o}){const[l,c]=a.useState(null),[u,d]=a.useState(null),[m,h]=a.useState(null),f=a.useRef([]),p=a.useMemo(()=>e.length===0||e.some(_=>!_.title.trim())?!0:lh(e),[e]),g=a.useCallback((_,S)=>{i(e.map(z=>z.id===_?{...z,...S}:z))},[e,i]),b=a.useCallback(()=>{i([...e,BA(e.length+1)])},[e,i]),v=a.useCallback(_=>{i(e.filter(S=>S.id!==_).map(S=>({...S,dependsOn:S.dependsOn.filter(z=>z!==_)})))},[e,i]),x=a.useCallback((_,S)=>{if(S<0||S>=e.length)return;const z=[...e],[M]=z.splice(_,1);z.splice(S,0,M),i(z)},[e,i]),y=a.useCallback(_=>S=>{c(_),S.dataTransfer.setData("text/plain",_),S.dataTransfer.effectAllowed="move"},[]),j=a.useCallback(()=>{c(null),d(null),h(null)},[]),N=a.useCallback(_=>S=>{if(S.preventDefault(),_===l)return;const z=S.currentTarget.getBoundingClientRect(),M=z.top+z.height/2,T=S.clientY<M?"before":"after";d(_),h(T)},[l]),C=a.useCallback(_=>S=>{S.preventDefault();const z=S.dataTransfer.getData("text/plain");if(!z||z===_){j();return}const M=e.findIndex(R=>R.id===z),T=e.findIndex(R=>R.id===_);if(M===-1||T===-1){j();return}const U=[...e],[V]=U.splice(M,1);let L=T;m==="after"&&M<T&&L--,m==="after"&&L++,U.splice(L,0,V),i(U),j()},[e,m,i,j]),w=a.useCallback(_=>{const S=_.currentTarget.getBoundingClientRect(),z=_.clientX,M=_.clientY;(z<S.left||z>S.right||M<S.top||M>S.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(Ho,{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, and dependencies before creating."})]}),t.jsxs("div",{className:"planning-summary-form",children:[e.map((_,S)=>{const z=l===_.id,M=u===_.id,T=["task-detail-section","subtask-item",z?"subtask-item-dragging":"",M?"subtask-item-drop-target":"",M&&m==="before"?"subtask-item-drop-before":"",M&&m==="after"?"subtask-item-drop-after":""].filter(Boolean).join(" ");return t.jsxs("div",{className:T,"data-testid":`subtask-item-${S}`,draggable:!s,onDragStart:y(_.id),onDragEnd:j,onDragOver:N(_.id),onDrop:C(_.id),onDragLeave:w,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(rd,{size:16}),t.jsx("strong",{children:_.id})]}),t.jsxs("div",{className:"subtask-item-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>x(S,S-1),disabled:s||S===0,title:"Move up","aria-label":"Move subtask up",children:t.jsx(Fi,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>x(S,S+1),disabled:s||S===e.length-1,title:"Move down","aria-label":"Move subtask down",children:t.jsx(Er,{size:14})}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>v(_.id),disabled:s,children:[t.jsx(ln,{size:14})," Remove"]})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Title"}),t.jsx("input",{ref:U=>{f.current[S]=U},value:_.title,onChange:U=>g(_.id,{title:U.target.value}),onKeyDown:U=>{U.key==="Enter"&&(U.preventDefault(),S<e.length-1&&f.current[S+1]?.focus())},disabled:s})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:3,value:_.description,onChange:U=>g(_.id,{description:U.target.value}),disabled:s})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Size"}),t.jsxs("select",{className:"planning-size-select",value:_.suggestedSize,onChange:U=>g(_.id,{suggestedSize:U.target.value}),disabled:s,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:[e.slice(0,S).filter(U=>U.id!==_.id).map(U=>{const V=_.dependsOn.includes(U.id);return t.jsxs("label",{className:`planning-dep-chip ${V?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:V,onChange:()=>{const L=V?_.dependsOn.filter(R=>R!==U.id):[..._.dependsOn,U.id];g(_.id,{dependsOn:L})},disabled:s}),t.jsx("span",{className:"planning-dep-id",children:U.id}),t.jsx("span",{className:"planning-dep-title",children:U.title||"Untitled"})]},U.id)}),S===0&&t.jsx("div",{className:"text-muted",children:"First subtask cannot have dependencies."}),S>0&&e.slice(0,S).filter(U=>U.id!==_.id).length===0&&t.jsx("div",{className:"text-muted",children:"No previous subtasks available."})]})]})]},_.id)}),t.jsxs("button",{type:"button",className:"btn",onClick:b,disabled:s,children:[t.jsx(cn,{size:16,className:"icon-mr-6"})," Add subtask"]}),lh(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:o,disabled:s,children:[t.jsx(Ca,{size:16,className:"icon-mr-4"}),"Back to Summary"]}),t.jsx("button",{className:"btn btn-primary",onClick:r,disabled:s||p,children:s?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:16,className:"spin icon-mr-6"}),"Creating..."]}):t.jsx(t.Fragment,{children:"Create Tasks"})})]})]})}function qA({sessions:e,loading:n,selectedSessionId:s,pendingDeleteId:i,onSelectSession:r,onNewSession:o,onRequestDelete:l,onConfirmDelete:c,onCancelDelete:u}){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:o,type:"button",children:[t.jsx(Mx,{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(d=>{const m=d.id===s,h=i===d.id;return t.jsxs("div",{className:`planning-sidebar-item ${m?"selected":""} ${h?"pending-delete":""}`,children:[t.jsxs("button",{type:"button",className:"planning-sidebar-item-button",onClick:()=>r(d.id),children:[t.jsx(VA,{status:d.status}),t.jsxs("span",{className:"planning-sidebar-item-body",children:[t.jsx("span",{className:"planning-sidebar-item-title",children:d.title||"Untitled session"}),t.jsxs("span",{className:"planning-sidebar-item-meta",children:[t.jsx(WA,{status:d.status}),t.jsx("span",{"aria-hidden":!0,children:" · "}),t.jsx("span",{children:KA(d.updatedAt)})]})]})]}),h?t.jsxs("div",{className:"planning-sidebar-confirm",children:[t.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>c(d.id),children:"Delete"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:u,children:"Cancel"})]}):t.jsx("button",{type:"button",className:"planning-sidebar-item-delete",onClick:f=>{f.stopPropagation(),l(d.id)},"aria-label":"Delete session",title:"Delete session",children:t.jsx(ln,{size:14})})]},d.id)})]})]})}function VA({status:e}){switch(e){case"generating":return t.jsx(lt,{size:14,className:"spin planning-sidebar-status-icon planning-sidebar-status-generating"});case"awaiting_input":return t.jsx(wc,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-awaiting"});case"complete":return t.jsx(kn,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-complete"});case"error":return t.jsx(ms,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-error"});default:return t.jsx(Ci,{size:14,className:"planning-sidebar-status-icon"})}}function WA({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 KA(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 i=Math.floor(s/60);if(i<60)return`${i}m ago`;const r=Math.floor(i/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 GA(e){return{id:`subtask-${e}`,title:"",description:"",suggestedSize:"M",dependsOn:[]}}function ch(e){const n=new Map(e.map(o=>[o.id,o.dependsOn])),s=new Set,i=new Set,r=o=>{if(s.has(o))return!0;if(i.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),i.add(o),!1};return e.some(o=>r(o.id))}function JA({isOpen:e,onClose:n,initialDescription:s,onTasksCreated:i,parentTaskId:r,projectId:o,resumeSessionId:l}){const[c,u]=a.useState({type:"initial"}),[d,m]=a.useState([]),[h,f]=a.useState([]),[p,g]=a.useState(""),[b,v]=a.useState(!0),[x,y]=a.useState(!1),[j,N]=a.useState(!1),[C,w]=a.useState(s),[_,S]=a.useState(null),[z,M]=a.useState(!1),[T,U]=a.useState(null),[V,L]=a.useState(null),[R,F]=a.useState(null),W=a.useRef(null),G=a.useRef([]),te=a.useRef(!1),E=a.useRef(null),$=c.type==="generating"||c.type==="editing"||c.type==="creating"||c.type==="error"?c.sessionId:null,P=a.useMemo(()=>Yi(),[]),{isLockedByOther:k,takeControl:O,isLoading:ne}=el(e?$:null),{activeTabMap:we,broadcastUpdate:ie,broadcastCompleted:ce,broadcastLock:ke,broadcastUnlock:D,broadcastHeartbeat:se}=Ta(),Z=a.useMemo(()=>d.length===0||d.some(de=>!de.title.trim())?!0:ch(d),[d]),ge=c.type==="generating"||c.type==="editing"||c.type==="error",ue=$?we.get($):null,{confirm:me}=Ws(),ae=ue&&ue.tabId!==P,be=!!(ae&&!ue.stale),Ae=k&&(!ae||ue.stale),Fe=a.useCallback(()=>{C&&_1(C,o),W.current?.close(),W.current=null,u({type:"initial"}),m([]),f([]),g(""),v(!0),y(!1),N(!1),S(null),M(!1),te.current=!1},[C,o]),at=a.useCallback(()=>{W.current?.close(),W.current=null,n()},[n]),et=a.useCallback(async()=>{if(!((z||c.type==="editing"||c.type==="creating")&&!await me({title:"Discard Changes",message:"Close subtask breakdown? Unsaved changes will be lost.",danger:!0}))){if($)try{await jp($,o,P)}catch{}Fe(),n()}},[z,n,Fe,$,P,c.type,o,me]),Ye=a.useCallback(de=>{W.current?.close(),W.current=Kj(de,o,{onThinking:Ie=>{g(fe=>fe+Ie),ie({sessionId:de,status:"generating",needsInput:!1,owningTabId:P,type:"subtask",title:C.trim()||"Subtask breakdown",projectId:o??null})},onSubtasks:Ie=>{y(!1),N(!1),Ml(o),m(Ie),u({type:"editing",sessionId:de}),M(!1),ie({sessionId:de,status:"awaiting_input",needsInput:!0,owningTabId:P,type:"subtask",title:C.trim()||"Subtask breakdown",projectId:o??null})},onError:Ie=>{const fe=Ie||"Session failed while contacting the AI.";y(!1),N(!1),S(null),u({type:"error",sessionId:de,errorMessage:fe}),ie({sessionId:de,status:"error",needsInput:!1,owningTabId:P,type:"subtask",title:C.trim()||"Subtask breakdown",projectId:o??null}),ce({sessionId:de,status:"error"})},onComplete:()=>{ce({sessionId:de,status:"complete"})},onConnectionStateChange:Ie=>{y(Ie==="reconnecting")}})},[ce,ie,C,o,P]),rt=a.useCallback(async()=>{if(C.trim()){S(null),f([]),g(""),y(!1);try{const{sessionId:de}=await qj(C.trim(),o);u({type:"generating",sessionId:de}),Ye(de)}catch(de){S(je(de)||"Failed to start subtask breakdown"),u({type:"initial"})}}},[Ye,C,o]);a.useEffect(()=>{if(!e){Fe();return}if(e&&s&&!te.current)w(s),te.current=!0,rt();else if(e&&!s&&!te.current){const de=A1(o);de&&w(de)}},[e,s,rt,Fe]),a.useEffect(()=>{!e||!l||c.type!=="initial"||(async()=>{try{const de=await hi(l);if(!de)return;const Ie=xa(de.conversationHistory);if(f(Ie),de.status==="generating"||de.status==="awaiting_input")g(de.thinkingOutput??""),u({type:"generating",sessionId:l}),Ye(l);else if(de.status==="complete"&&de.result){Ml(o);const fe=JSON.parse(de.result);m(fe),u({type:"editing",sessionId:l})}else de.status==="error"&&(S(null),u({type:"error",sessionId:l,errorMessage:de.error??"Session encountered an error"}))}catch(de){S(je(de)||"Failed to resume session")}})()},[Ye,e,l,c.type,o]),a.useEffect(()=>{if(!e){E.current&&(D(E.current,P),E.current=null);return}if($&&E.current!==$){E.current&&D(E.current,P),ke($,P),E.current=$;return}!$&&E.current&&(D(E.current,P),E.current=null)},[ke,D,e,$,P]),a.useEffect(()=>{if(!e||!$||E.current!==$)return;se(P);const de=setInterval(()=>{se(P)},3e4);return()=>{clearInterval(de)}},[se,e,$,P]),a.useEffect(()=>()=>{W.current?.close(),E.current&&(D(E.current,P),E.current=null)},[D,P]),a.useEffect(()=>{if(!e)return;const de=Ie=>{Ie.key==="Escape"&&(Ie.preventDefault(),et())};return document.addEventListener("keydown",de),()=>document.removeEventListener("keydown",de)},[e,et]);const Oe=a.useCallback((de,Ie)=>{m(fe=>fe.map(_e=>_e.id===de?{..._e,...Ie}:_e)),M(!0)},[]),We=a.useCallback(()=>{m(de=>[...de,GA(de.length+1)]),M(!0)},[]),oe=a.useCallback(de=>{m(Ie=>Ie.filter(fe=>fe.id!==de).map(fe=>({...fe,dependsOn:fe.dependsOn.filter(_e=>_e!==de)}))),M(!0)},[]),xe=a.useCallback(de=>Ie=>{U(de),Ie.dataTransfer.setData("text/plain",de),Ie.dataTransfer.effectAllowed="move"},[]),ee=a.useCallback(()=>{U(null),L(null),F(null)},[]),Re=a.useCallback(de=>Ie=>{if(Ie.preventDefault(),de===T)return;const fe=Ie.currentTarget.getBoundingClientRect(),_e=fe.top+fe.height/2,Ge=Ie.clientY<_e?"before":"after";L(de),F(Ge)},[T]),Ue=a.useCallback(de=>Ie=>{Ie.preventDefault();const fe=Ie.dataTransfer.getData("text/plain");if(!fe||fe===de){U(null),L(null),F(null);return}m(_e=>{const Ge=_e.findIndex(ve=>ve.id===fe),Pe=_e.findIndex(ve=>ve.id===de);if(Ge===-1||Pe===-1)return _e;const ft=[..._e],[Y]=ft.splice(Ge,1);let le=Pe;return R==="after"&&Ge<Pe&&le--,R==="after"&&le++,ft.splice(le,0,Y),ft}),M(!0),U(null),L(null),F(null)},[R]),pe=a.useCallback(de=>{const Ie=de.currentTarget.getBoundingClientRect(),fe=de.clientX,_e=de.clientY;(fe<Ie.left||fe>Ie.right||_e<Ie.top||_e>Ie.bottom)&&(L(null),F(null))},[]),Me=a.useCallback((de,Ie)=>{Ie<0||Ie>=d.length||(m(fe=>{const _e=[...fe],[Ge]=_e.splice(de,1);return _e.splice(Ie,0,Ge),_e}),M(!0))},[d.length]),ze=a.useCallback(de=>{G.current[de+1]?.focus()},[]),tt=a.useCallback(async()=>{if(!(!$||Z)){S(null),u({type:"creating",sessionId:$});try{const de=await Gj($,d,r,o);i(de.tasks),Fe(),n()}catch(de){S(je(de)||"Failed to create tasks"),u({type:"editing",sessionId:$})}}},[Z,n,i,r,o,Fe,$,d]),ye=a.useCallback(async()=>{if(c.type!=="error")return;const de=c.sessionId;S(null),N(!0),g(""),u({type:"generating",sessionId:de}),Ye(de);try{await Vj(de,o,P)}catch(Ie){let fe=Ie;if((je(Ie)||"").includes("not in an error state"))try{const Ge=await hi(de);if(!Ge)throw new Error("Failed to refresh subtask session.");if(f(xa(Ge.conversationHistory)),Ge.status==="generating"||Ge.status==="awaiting_input")g(Ge.thinkingOutput??""),u({type:"generating",sessionId:Ge.id}),W.current?.isConnected()||Ye(Ge.id);else if(Ge.status==="complete"){if(!Ge.result)throw new Error("Subtask session is complete but has no result.");Ml(o);const Pe=JSON.parse(Ge.result);m(Pe),u({type:"editing",sessionId:Ge.id}),M(!1)}else Ge.status==="error"&&u({type:"error",sessionId:Ge.id,errorMessage:Ge.error??"Retry failed. Please try again."});y(!1);return}catch(Ge){fe=Ge}W.current?.close(),W.current=null,u({type:"error",sessionId:de,errorMessage:je(fe)||"Retry failed. Please try again."}),y(!1)}finally{N(!1)}},[Ye,o,P,c]);return e?t.jsx("div",{className:"modal-overlay open",onClick:de=>de.target===de.currentTarget&&void et(),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(Ho,{size:20,className:"icon-triage"}),t.jsx("h3",{children:"Subtask Breakdown"})]}),t.jsxs("div",{className:"modal-header-actions",children:[ge&&t.jsx("button",{className:"modal-send-to-background",onClick:at,title:"Send to background","aria-label":"Send to background",children:t.jsx(Rr,{size:16})}),t.jsx("button",{className:"modal-close",onClick:()=>void et(),"aria-label":"Close",children:t.jsx(Jt,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[_&&t.jsx("div",{className:"form-error planning-error",children:_}),x&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),be&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),c.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:C})]})}),c.type==="generating"&&t.jsxs("div",{className:"planning-loading",children:[h.length>0&&t.jsxs(t.Fragment,{children:[t.jsx($s,{entries:h,defaultShowThinking:!0}),t.jsx("div",{className:"conversation-separator"})]}),t.jsx(lt,{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:()=>v(!b),type:"button",children:b?"Hide thinking":"Show thinking"}),b&&p&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:p})})]})]}),c.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[h.length>0&&t.jsxs(t.Fragment,{children:[t.jsx($s,{entries:h,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:c.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void ye(),disabled:j,children:[j?t.jsx(lt,{size:14,className:"spin"}):t.jsx($n,{size:14}),t.jsx("span",{className:"icon-ml-6",children:j?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:()=>void et(),disabled:j,children:"Cancel"})]})]})]})}),(c.type==="editing"||c.type==="creating")&&t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[h.length>0&&t.jsxs(t.Fragment,{children:[t.jsx($s,{entries:h}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(kn,{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:[d.map((de,Ie)=>{const fe=T===de.id,_e=V===de.id,Ge=["task-detail-section","subtask-item",fe?"subtask-item-dragging":"",_e?"subtask-item-drop-target":"",_e&&R==="before"?"subtask-item-drop-before":"",_e&&R==="after"?"subtask-item-drop-after":""].filter(Boolean).join(" ");return t.jsxs("div",{className:Ge,"data-testid":`subtask-item-${Ie}`,draggable:c.type!=="creating",onDragStart:xe(de.id),onDragEnd:ee,onDragOver:Re(de.id),onDrop:Ue(de.id),onDragLeave:pe,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(rd,{size:16}),t.jsx("strong",{children:de.id})]}),t.jsxs("div",{className:"subtask-item-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Me(Ie,Ie-1),disabled:c.type==="creating"||Ie===0,title:"Move up","aria-label":"Move subtask up",children:t.jsx(Fi,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Me(Ie,Ie+1),disabled:c.type==="creating"||Ie===d.length-1,title:"Move down","aria-label":"Move subtask down",children:t.jsx(Er,{size:14})}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>oe(de.id),disabled:c.type==="creating",children:[t.jsx(ln,{size:14})," Remove"]})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Title"}),t.jsx("input",{ref:Pe=>{G.current[Ie]=Pe},value:de.title,onChange:Pe=>Oe(de.id,{title:Pe.target.value}),onKeyDown:Pe=>{Pe.key==="Enter"&&(Pe.preventDefault(),ze(Ie))},disabled:c.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:8,value:de.description,onChange:Pe=>Oe(de.id,{description:Pe.target.value}),disabled:c.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Size"}),t.jsxs("select",{className:"planning-size-select",value:de.suggestedSize,onChange:Pe=>Oe(de.id,{suggestedSize:Pe.target.value}),disabled:c.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:[d.slice(0,Ie).filter(Pe=>Pe.id!==de.id).map(Pe=>{const ft=de.dependsOn.includes(Pe.id);return t.jsxs("label",{className:`planning-dep-chip ${ft?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:ft,onChange:()=>{const Y=ft?de.dependsOn.filter(le=>le!==Pe.id):[...de.dependsOn,Pe.id];Oe(de.id,{dependsOn:Y})},disabled:c.type==="creating"}),t.jsx("span",{className:"planning-dep-id",children:Pe.id}),t.jsx("span",{className:"planning-dep-title",children:Pe.title||"Untitled"})]},Pe.id)}),Ie===0&&t.jsx("div",{className:"text-muted",children:"First subtask cannot have dependencies."}),Ie>0&&d.slice(0,Ie).filter(Pe=>Pe.id!==de.id).length===0&&t.jsx("div",{className:"text-muted",children:"No previous subtasks available."})]})]})]},de.id)}),t.jsxs("button",{type:"button",className:"btn",onClick:We,disabled:c.type==="creating",children:[t.jsx(cn,{size:16,className:"icon-mr-6"})," Add subtask"]}),ch(d)&&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 et(),disabled:c.type==="creating",children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:()=>void tt(),disabled:c.type==="creating"||Z,children:c.type==="creating"?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:16,className:"spin icon-mr-6"}),"Creating..."]}):t.jsx(t.Fragment,{children:"Create Tasks"})})]})]}),k&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(qo,{size:16}),t.jsx("span",{children:Ae?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),Ae&&t.jsx("button",{type:"button",onClick:()=>{O()},disabled:ne,className:"btn btn-primary session-lock-take-control",children:ne?"Taking control...":"Take Control"})]})})]})]})}):null}const YA=5,QA=1e3,XA=45e3;function mo(){return{scrollback:null,connected:null,data:[]}}function ZA(e,n){const[s,i]=a.useState("disconnected"),r=a.useRef(0),o=a.useRef(e),l=a.useRef(n),c=o.current!==e||l.current!==n;c&&(o.current=e,l.current=n,r.current++);const u=a.useRef(null),d=a.useRef(0),m=a.useRef(null),h=a.useRef(null),f=a.useRef(!1),p=a.useRef(new Set),g=a.useRef(new Set),b=a.useRef(new Set),v=a.useRef(new Set),x=a.useRef(new Set),y=a.useRef(mo()),j=a.useCallback(L=>{p.current.add(L);const R=y.current;return R.data.length>0&&(R.data.forEach(F=>L(F)),R.data=[]),()=>p.current.delete(L)},[]),N=a.useCallback(L=>(g.current.add(L),()=>g.current.delete(L)),[]),C=a.useCallback(L=>{b.current.add(L);const R=y.current;return R.connected&&(L(R.connected),R.connected=null),()=>b.current.delete(L)},[]),w=a.useCallback(L=>{v.current.add(L);const R=y.current;return R.scrollback&&(L(R.scrollback),R.scrollback=null),()=>v.current.delete(L)},[]),_=a.useCallback(L=>(x.current.add(L),()=>x.current.delete(L)),[]),S=a.useCallback(L=>{const R=u.current;R?.readyState===WebSocket.OPEN&&R.send(JSON.stringify({type:"input",data:L}))},[]),z=a.useCallback((L,R)=>{const F=u.current;F?.readyState===WebSocket.OPEN&&F.send(JSON.stringify({type:"resize",cols:L,rows:R}))},[]),M=a.useCallback(()=>{m.current&&(clearTimeout(m.current),m.current=null),h.current&&(clearInterval(h.current),h.current=null),u.current&&(u.current.onopen=null,u.current.onmessage=null,u.current.onclose=null,u.current.onerror=null,u.current.close(),u.current=null),y.current=mo()},[]),T=a.useCallback(()=>{m.current&&(clearTimeout(m.current),m.current=null),h.current&&(clearInterval(h.current),h.current=null),u.current&&(f.current=!0,u.current.close(),u.current=null),y.current=mo()},[]),U=a.useCallback(()=>{if(!e){i("disconnected");return}if(u.current?.readyState===WebSocket.OPEN)return;u.current&&(f.current=!0,u.current.close()),f.current=!1,i("connecting");const L=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(ii(F));u.current=W,W.onopen=()=>{if(r.current!==L){W.close();return}y.current=mo(),i("connected"),d.current=0,h.current&&clearInterval(h.current),h.current=setInterval(()=>{r.current===L&&W.readyState===WebSocket.OPEN&&W.send(JSON.stringify({type:"ping"}))},XA)},W.onmessage=G=>{if(r.current===L)try{const te=JSON.parse(G.data),E=y.current;switch(te.type){case"data":te.data&&(p.current.size===0&&E.data.push(te.data),p.current.forEach($=>$(te.data)));break;case"scrollback":te.data&&(E.scrollback=te.data,v.current.forEach($=>$(te.data)));break;case"connected":te.shell&&te.cwd&&(E.connected={shell:te.shell,cwd:te.cwd},b.current.forEach($=>$({shell:te.shell,cwd:te.cwd})));break;case"exit":te.exitCode!==void 0&&g.current.forEach($=>$(te.exitCode));break;case"ping":W.readyState===WebSocket.OPEN&&W.send(JSON.stringify({type:"pong"}));break;case"pong":break}}catch{}},W.onclose=G=>{if(r.current!==L)return;if(u.current=null,h.current&&(clearInterval(h.current),h.current=null),f.current){i("disconnected");return}if(G.code===4e3||G.code===4004){i("disconnected"),G.code===4004&&x.current.forEach($=>$());return}if(d.current++,d.current>YA){i("disconnected");return}const te=QA*Math.pow(2,d.current-1);i("reconnecting");const E=r.current;m.current=setTimeout(()=>{r.current===E&&(f.current||U())},Math.min(te,16e3))},W.onerror=()=>{}},[e,n]),V=a.useCallback(()=>{d.current=0,T(),U()},[T,U]);return a.useEffect(()=>(c&&(M(),d.current=0,i("disconnected")),e?U():i("disconnected"),T),[e,n,c,U,T,M]),{connectionStatus:s,sendInput:S,resize:z,onData:j,onExit:N,onConnect:C,onScrollback:w,reconnect:V,onSessionInvalid:_}}const dg="kb-terminal-tabs",eR=15e3,tR=15e3;function dh(){return`tab-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function uh(e){if(typeof window>"u")return[];try{const n=Yn(dg,e);if(n)return JSON.parse(n)}catch{}return[]}function oc(e){const n=e instanceof Error?e.message:typeof e=="string"?e:"";return n.includes("Failed to parse URL")||n.includes("Invalid URL")}function mh(e,n,s){let i;const r=new Promise((o,l)=>{i=setTimeout(()=>l(new Error(`${s} timed out after ${n}ms`)),n)});return Promise.race([e,r]).finally(()=>clearTimeout(i))}function nR(e){const[n,s]=a.useState(()=>uh(e)),[i,r]=a.useState(!1),[o,l]=a.useState(!0),[c,u]=a.useState(null),[d,m]=a.useState(0),h=a.useRef(0);a.useEffect(()=>{h.current+=1,s(uh(e)),r(!1),l(!0),u(null)},[e]),a.useEffect(()=>{try{bs(dg,JSON.stringify(n),e)}catch{}},[e,n]),a.useEffect(()=>{let C=!1;const w=h.current;return(async()=>{if(!C)try{const S=await mh(Oy(e),eR,"listTerminalSessions");if(C||w!==h.current)return;const z=new Set(S.map(M=>M.id));l(!0),s(M=>{if(C||w!==h.current)return M;const U=M.map(R=>({...R,_verified:z.has(R.sessionId)})).filter(R=>R._verified);if(U.length===0)return[];const V=U.map(({_verified:R,...F})=>F);return V.find(R=>R.isActive)?V:V.map((R,F)=>({...R,isActive:F===0}))}),r(!0)}catch(S){if(C||w!==h.current)return;const z=oc(S);z||console.warn("Failed to validate terminal sessions with server:",S),l(!z),r(!0)}})(),()=>{C=!0}},[e]),a.useEffect(()=>{if(n.length===0&&i&&o){const C=h.current,w=setTimeout(()=>{mh(Gr(void 0,void 0,void 0,e),tR,"createTerminalSession").then(_=>{if(C!==h.current)return;const S={id:dh(),sessionId:_.sessionId,title:`Terminal ${n.length+1}`,isActive:!0,createdAt:Date.now()};s(z=>z.length>0?z:[...z.map(T=>({...T,isActive:!1})),S]),u(null)}).catch(_=>{if(C!==h.current)return;oc(_)||console.error(_);const S=_ instanceof Error?_.message:typeof _=="string"?_:"Failed to create terminal session";u(S)})},0);return()=>clearTimeout(w)}},[i,o,n.length,d]);const f=a.useCallback(async()=>{const C=await Gr(void 0,void 0,void 0,e),w={id:dh(),sessionId:C.sessionId,title:`Terminal ${n.length+1}`,isActive:!0,createdAt:Date.now()};return s(_=>[..._.map(z=>({...z,isActive:!1})),w]),w},[n.length]),p=a.useCallback(async()=>f(),[f]),g=a.useCallback(C=>{s(w=>{const _=w.find(T=>T.id===C);if(!_)return w;Qd(_.sessionId,e).catch(T=>{console.warn(`Failed to kill terminal session ${_.sessionId}:`,T)});const S=w.findIndex(T=>T.id===C),z=_.isActive,M=w.filter(T=>T.id!==C);if(M.length===0)return[];if(z){const T=Math.min(S,M.length-1);return M.map((U,V)=>({...U,isActive:V===T}))}return M})},[]),b=a.useCallback(C=>{s(w=>{let _=!1;const S=w.map(z=>z.id===C?(_=!0,{...z,isActive:!0}):{...z,isActive:!1});return _?S:w})},[]),v=a.useCallback((C,w)=>{s(_=>_.map(S=>S.id===C?{...S,title:w}:S))},[]),x=a.useCallback(async()=>{s(_=>{const S=_.find(z=>z.isActive);return S&&Qd(S.sessionId,e).catch(z=>{console.warn(`Failed to kill old session ${S.sessionId}:`,z)}),_});const C=n.find(_=>_.isActive);if(!C)return;const w=await Gr(void 0,void 0,void 0,e);s(_=>_.map(S=>S.id===C.id?{...S,sessionId:w.sessionId}:S))},[n]),y=a.useCallback(async()=>{const C=n.find(w=>w.isActive);if(C)try{const w=await Gr(void 0,void 0,void 0,e);s(_=>_.map(S=>S.id===C.id?{...S,sessionId:w.sessionId}:S)),u(null)}catch(w){oc(w)||console.error(w);const _=w instanceof Error?w.message:typeof w=="string"?w:"Failed to create terminal session";u(_)}},[n]),j=n.find(C=>C.isActive)??null,N=a.useCallback(()=>{u(null),h.current+=1,m(C=>C+1)},[]);return{tabs:n,activeTab:j,isReady:i,bootstrapError:c,createTab:p,closeTab:g,setActiveTab:b,updateTabTitle:v,restartActiveTab:x,retryBootstrap:N,replaceActiveTabSession:y}}const sR=1e4,iR=[500,1500,3e3],ug="kb-terminal-font-size",cr=14,aR=8,rR=32,oR='"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 lR(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 cR(e){return`\x1B${e}`}const dR=[{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 dr(e){return Math.min(rR,Math.max(aR,e))}function uR(){if(typeof window>"u")return cr;try{const e=window.localStorage.getItem(ug);if(!e)return cr;const n=Number.parseInt(e,10);return Number.isFinite(n)?dr(n):cr}catch{return cr}}function mR(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 hR(e){return new Promise(n=>setTimeout(n,e))}async function pR(e,n=iR){let s;for(let i=0;i<=n.length;i+=1)try{return await e()}catch(r){if(!mR(r))throw r;s===void 0&&(s=r);const o=n[i];if(o===void 0)throw s??r;const l=r instanceof Error?r.message:String(r);console.warn(`[TerminalModal] Dynamic xterm import failed (attempt ${i+1}/${n.length+1}). Retrying in ${o}ms...`,l),await hR(o)}throw s??new Error("Dynamic import failed")}function hh(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}function fR(){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 i=gR()-e.offsetTop-e.height;return i>=30&&i>80?i:0}let lc=null;function gR(){return lc===null&&(lc=window.innerHeight),lc}function bR({isOpen:e,onClose:n,initialCommand:s,projectId:i}){const[r,o]=a.useState(null),[l,c]=a.useState(null),[u,d]=a.useState(!1),[m,h]=a.useState(null),[f,p]=a.useState(0),[g,b]=a.useState(0),[v,x]=a.useState(null),[y,j]=a.useState(()=>uR()),[N,C]=a.useState(!1),[w,_]=a.useState(null),S=a.useRef(null),z=a.useRef(null),M=a.useRef(!1);oi(z,e,"fusion:terminal-modal-size");const T=a.useRef(null),U=a.useRef(null),V=a.useRef(!1),L=a.useRef(!1),R=a.useRef(null),F=a.useRef(()=>{}),W=a.useRef(null),G=a.useRef(0),te=a.useRef(y),E=a.useRef(null),$=a.useRef(i);G.current=g,te.current=y;const P=a.useCallback(fe=>{if(fe&&L.current!==fe)return;const _e=U.current,Ge=T.current,Pe=R.current;if(!(!_e||!Ge)&&!(fe&&L.current!==fe))try{_e.fit(),Pe&&Pe(Ge.cols,Ge.rows)}catch{}},[]);a.useEffect(()=>{e&&p(fe=>fe+1)},[e]),a.useEffect(()=>{if(!e||!hh())return;const fe=window.visualViewport;if(!fe)return;const _e=()=>{const Ge=fR();b(Ge),x(fe.height),Ge>0&&z.current?.scrollIntoView&&z.current.scrollIntoView({block:"end",behavior:"smooth"}),E.current!==null&&(cancelAnimationFrame(E.current),E.current=null);const Pe=typeof L.current=="string"?L.current:void 0;E.current=requestAnimationFrame(()=>{E.current=null,P(Pe)})};return _e(),fe.addEventListener("resize",_e),fe.addEventListener("scroll",_e),()=>{fe.removeEventListener("resize",_e),fe.removeEventListener("scroll",_e),E.current!==null&&(cancelAnimationFrame(E.current),E.current=null),b(0),x(null)}},[P,e]),a.useEffect(()=>{if(!e)return;const fe=z.current;if(!fe||typeof ResizeObserver>"u")return;let _e=null;const Ge=new ResizeObserver(()=>{_e!==null&&cancelAnimationFrame(_e),_e=requestAnimationFrame(()=>{_e=null;const Pe=typeof L.current=="string"?L.current:void 0;P(Pe)})});return Ge.observe(fe),()=>{Ge.disconnect(),_e!==null&&cancelAnimationFrame(_e)}},[P,e]);const{tabs:k,activeTab:O,isReady:ne,bootstrapError:we,createTab:ie,closeTab:ce,setActiveTab:ke,updateTabTitle:D,restartActiveTab:se,retryBootstrap:Z,replaceActiveTabSession:ge}=nR(i),{connectionStatus:ue,sendInput:me,resize:ae,onData:be,onConnect:Ae,onExit:Fe,onScrollback:at,reconnect:et,onSessionInvalid:Ye}=ZA(O?.sessionId??null,i);R.current=ae,F.current=me,a.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(ug,String(y))}catch{}},[y]);const rt=a.useCallback(()=>{const fe=T.current;if(fe)try{U.current?.fit(),ae(fe.cols,fe.rows)}catch{}},[ae]);a.useEffect(()=>{if(!e||!ne)return;const fe=O?.sessionId;if(!fe)return;const _e=$.current!==i;if(_e&&($.current=i),L.current===fe&&T.current&&!_e)return;T.current&&(L.current!==fe||_e)&&(T.current.dispose(),T.current=null,U.current=null,L.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),d(!1),h(null));let Ge=!0,Pe;return(async()=>{const Y=pR(()=>Promise.all([pn(()=>import("./vendor-xterm-DzcZoU0P.js").then(Q=>Q.x),__vite__mapDeps([0,1,2])),pn(()=>import("./addon-fit-C7jRorKK.js").then(Q=>Q.a),__vite__mapDeps([3,1])),pn(()=>import("./addon-web-links-CkJwd4cQ.js").then(Q=>Q.a),__vite__mapDeps([4,1]))])),le=new Promise((Q,Je)=>{Pe=setTimeout(()=>{Je(new Error("xterm initialization timed out"))},sR)});let ve,nt;try{const[{Terminal:Q},{FitAddon:Je},{WebLinksAddon:ut}]=await Promise.race([Y,le]);if(!Ge||!S.current||T.current)return;ve=new Q({cursorBlink:!0,cursorStyle:"block",fontSize:te.current,fontFamily:oR,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}),nt=new Je,ve.loadAddon(nt);const ht=new ut;if(ve.loadAddon(ht),!hh())try{const{WebglAddon:bt}=await pn(async()=>{const{WebglAddon:qt}=await import("./addon-webgl-BjvOw43o.js").then(Tt=>Tt.a);return{WebglAddon:qt}},__vite__mapDeps([5,1])),vt=new bt;vt.onContextLoss(()=>{vt.dispose()}),ve.loadAddon(vt)}catch{}ve.open(S.current),Pe&&clearTimeout(Pe);const Et=S.current?.querySelector(".xterm-helper-textarea");if(Et&&Et.focus(),S.current)try{S.current.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))}catch{}setTimeout(()=>{nt.fit();const bt=S.current?.querySelector(".xterm-helper-textarea");bt&&bt.focus()},50),T.current=ve,U.current=nt,L.current=fe,G.current>0&&(E.current!==null&&(cancelAnimationFrame(E.current),E.current=null),E.current=requestAnimationFrame(()=>{E.current=null,P(fe)})),ve.onData(bt=>{L.current===fe&&F.current(bt)});const yt=()=>{if(L.current===fe&&U.current&&T.current)try{U.current.fit();const{cols:bt,rows:vt}=T.current;R.current?.(bt,vt)}catch{}};window.addEventListener("resize",yt),W.current&&window.removeEventListener("resize",W.current),W.current=yt,d(!0),h(null)}catch(Q){if(Pe&&clearTimeout(Pe),!Ge)return;const Je=Q instanceof Error?Q.message:"xterm initialization failed";h(Je)}})(),()=>{Ge=!1,Pe&&clearTimeout(Pe)}},[P,e,ne,O?.sessionId,i]),a.useEffect(()=>{e||(T.current&&(T.current.dispose(),T.current=null),U.current=null,L.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),d(!1),h(null),V.current=!1,o(null),c(null),C(!1),_(null))},[e]),a.useEffect(()=>{if(!u||!T.current||!O)return;const fe=O.sessionId,_e=le=>{L.current===fe&&T.current?.write(le)},Ge=be(le=>{_e(le)}),Pe=at(le=>{_e(le)}),ft=Ae(le=>{D(O.id,hd(le.shell)||le.shell)}),Y=Fe(le=>{L.current===fe&&(c(le),T.current?.write(`\r
|
|
653
|
-
\x1B[33m[Process exited with code ${le}]\x1B[0m\r
|
|
654
|
-
`))});return()=>{Ge(),Pe(),ft(),Y()}},[u,O?.sessionId,O?.id,O,ue,be,at,Ae,Fe,D]),a.useEffect(()=>{ue==="connected"&&s&&V.current!==s&&O&&(V.current=s,setTimeout(()=>{me(s+`
|
|
655
|
-
`)},500))},[ue,s,me,O,f]),a.useEffect(()=>{if(!u||!T.current)return;T.current.options.fontSize=y,E.current!==null&&(cancelAnimationFrame(E.current),E.current=null);const fe=requestAnimationFrame(()=>{E.current=null,rt()});return E.current=fe,()=>{E.current===fe&&(cancelAnimationFrame(fe),E.current=null)}},[y,u,rt]),a.useEffect(()=>{if(!e)return;const fe=_e=>{if(!(!_e.ctrlKey&&!_e.metaKey)){if(_e.code==="Equal"||_e.code==="NumpadAdd"){_e.preventDefault(),j(Ge=>dr(Ge+1));return}if(_e.code==="Minus"||_e.code==="NumpadSubtract"){_e.preventDefault(),j(Ge=>dr(Ge-1));return}if(_e.code==="Digit0"||_e.code==="Numpad0"){_e.preventDefault(),j(cr);return}}};return window.addEventListener("keydown",fe),()=>window.removeEventListener("keydown",fe)},[e,rt]),a.useEffect(()=>{if(!e)return;const fe=_e=>{_e.key==="Escape"&&n()};return document.addEventListener("keydown",fe),()=>document.removeEventListener("keydown",fe)},[e,n]),a.useEffect(()=>{ue==="connected"&&T.current&&setTimeout(()=>{if(!T.current||!S.current)return;const fe=S.current.querySelector(".xterm-helper-textarea");fe&&fe.focus();try{S.current.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))}catch{}},100)},[ue]);const Oe=a.useCallback(()=>{if(!S.current||typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(hover: none) and (pointer: coarse)")?.matches===!0)return;T.current?.focus();const _e=S.current.querySelector(".xterm-helper-textarea");if(!_e)return;_e.autocapitalize="off",_e.autocomplete="off",_e.autocorrect="off",_e.spellcheck=!1,_e.setAttribute("inputmode","text");try{_e.focus({preventScroll:!0})}catch{_e.focus()}const Ge=_e.value.length;_e.setSelectionRange(Ge,Ge)},[]);a.useEffect(()=>Ye(()=>{T.current?.clear(),c(null),V.current=!1,T.current&&(T.current.dispose(),T.current=null),U.current=null,L.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),d(!1),h(null),ge().catch(_e=>{console.error("Failed to replace invalid terminal session:",_e)})}),[Ye,ge]);const We=a.useCallback(fe=>{fe.target===fe.currentTarget&&(M.current=!0)},[]),oe=a.useCallback(fe=>{M.current&&fe.target===fe.currentTarget&&n(),M.current=!1},[n]),xe=a.useCallback(()=>{T.current?.clear()},[]),ee=a.useCallback(async()=>{T.current?.clear(),c(null),V.current=!1;try{await se()}catch(fe){o(je(fe)||"Failed to restart terminal session")}},[se]),Re=a.useCallback(()=>{T.current&&(T.current.dispose(),T.current=null),U.current=null,L.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),h(null),d(!1)},[]),Ue=a.useCallback(()=>{window.location.reload()},[]),pe=a.useCallback(()=>{j(fe=>dr(fe+1))},[]),Me=a.useCallback(()=>{j(fe=>dr(fe-1))},[]),ze=a.useCallback(fe=>{_(_e=>_e===fe?null:fe)},[]),tt=a.useCallback(fe=>{if(w==="ctrl"){me(lR(fe)),_(null);return}if(w==="alt"){me(cR(fe)),_(null);return}me(fe)},[me,w]),ye=a.useCallback(fe=>{me(fe),_(null)},[me]);if(!e)return null;const de=()=>{switch(ue){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}},Ie=!ne||!O&&!we;return t.jsx("div",{className:"modal-overlay open",onMouseDown:We,onMouseUp:oe,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:[k.map(fe=>t.jsxs("div",{className:`terminal-tab ${fe.isActive?"terminal-tab--active":""}`,onClick:()=>ke(fe.id),title:fe.title,role:"tab","aria-selected":fe.isActive,children:[t.jsx("span",{className:"terminal-tab-label",children:fe.title}),k.length>1&&t.jsx("button",{className:"terminal-tab-close",onClick:_e=>{_e.stopPropagation(),ce(fe.id)},title:"Close tab",children:"×"})]},fe.id)),t.jsx("button",{className:"terminal-tab terminal-tab--new",onClick:ie,title:"New terminal",children:"+"})]}),t.jsxs("div",{className:"terminal-title","data-testid":"terminal-title",children:[t.jsx(mi,{size:16}),de()]}),t.jsxs("div",{className:"terminal-actions","data-testid":"terminal-actions",children:[ue==="disconnected"&&O&&t.jsxs("button",{className:"terminal-reconnect-btn",onClick:et,title:"Reconnect","data-testid":"terminal-reconnect-btn",children:[t.jsx($n,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"Reconnect"})]}),l!==null&&t.jsxs("button",{className:"terminal-restart-btn",onClick:ee,title:"New Session","data-testid":"terminal-restart-btn",children:[t.jsx($n,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"New Session"})]}),t.jsxs("button",{className:"terminal-clear-btn",onClick:xe,"data-testid":"terminal-clear-btn",title:"Clear terminal",children:[t.jsx(ln,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"Clear"})]}),t.jsxs("button",{className:"terminal-clear-btn terminal-clear-btn--shortcut",onClick:()=>C(fe=>!fe),"data-testid":"terminal-shortcut-toggle",title:"Shortcuts","aria-pressed":N,children:[t.jsx(hx,{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(Jt,{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:[Ie&&!we&&t.jsxs("div",{className:"terminal-loading","data-testid":"terminal-loading",children:[t.jsx("div",{className:"terminal-spinner"}),t.jsx("span",{children:"Starting terminal..."})]}),we&&!O&&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: ",we]}),t.jsxs("div",{className:"terminal-error-actions",children:[t.jsxs("button",{className:"terminal-retry-btn",onClick:Z,"data-testid":"terminal-retry-btn",children:[t.jsx($n,{size:14}),"Retry"]}),t.jsxs("button",{className:"terminal-retry-btn",onClick:Ue,"data-testid":"terminal-bootstrap-refresh-btn",children:[t.jsx($n,{size:14}),"Refresh page"]})]})]})}),m&&O&&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: ",m]}),t.jsxs("div",{className:"terminal-error-actions",children:[t.jsxs("button",{className:"terminal-retry-btn",onClick:Re,"data-testid":"terminal-reinit-btn",children:[t.jsx($n,{size:14}),"Reinitialize"]}),t.jsxs("button",{className:"terminal-retry-btn",onClick:Ue,"data-testid":"terminal-xterm-refresh-btn",children:[t.jsx($n,{size:14}),"Refresh page"]})]})]})}),t.jsx("div",{ref:S,className:"terminal-xterm","data-testid":"terminal-xterm",onPointerDown:Oe,onTouchStart:Oe},O?.sessionId)]}),N&&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 ${w==="ctrl"?"is-active":""}`,"data-testid":"terminal-modifier-ctrl",onClick:()=>ze("ctrl"),"aria-pressed":w==="ctrl",children:"Ctrl"}),t.jsx("button",{type:"button",className:`terminal-shortcut-btn terminal-shortcut-btn--modifier ${w==="alt"?"is-active":""}`,"data-testid":"terminal-modifier-alt",onClick:()=>ze("alt"),"aria-pressed":w==="alt",children:"Alt"}),t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>ye("\x1B"),children:"ESC"}),t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>ye(" "),children:"Tab"})]}),dR.map(fe=>t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>tt(fe.key),title:fe.description,children:fe.label},fe.label))]}),t.jsxs("div",{className:"terminal-status-bar","data-testid":"terminal-status-bar",children:[t.jsxs("span",{className:`terminal-connection-status ${ue}`,children:[ue==="connected"&&"Connected",ue==="connecting"&&"Connecting...",ue==="reconnecting"&&"Reconnecting...",ue==="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(Tx,{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:pe,"data-testid":"terminal-font-size-increase","aria-label":"Increase terminal font size",children:t.jsx(cn,{size:14})})]}),t.jsx("span",{className:"terminal-shortcuts",children:"Ctrl++/- zoom • ⌨ Shortcuts panel • Esc close"})]})]})})}const Xa={name:"",command:""};function ph(e){return/^[a-zA-Z0-9_-]+$/.test(e)}function xR(e,n=60){return e.length<=n?e:e.slice(0,n-3)+"..."}function vR({isOpen:e,onClose:n,addToast:s,projectId:i,onRunScript:r}){const[o,l]=a.useState({}),[c,u]=a.useState(!0),[d,m]=a.useState(!1),[h,f]=a.useState(null),[p,g]=a.useState(Xa),[b,v]=a.useState(!1),[x,y]=a.useState(null),[j,N]=a.useState(null),C=Mi(n),w=a.useCallback(async()=>{try{u(!0);const F=await kr(i);l(F)}catch(F){s(je(F)||"Failed to load scripts","error")}finally{u(!1)}},[s,i]);a.useEffect(()=>{e&&w()},[e,w]);const _=a.useCallback(()=>{m(!0),f(null),g(Xa),N(null)},[]),S=a.useCallback((F,W)=>{f(F),m(!1),g({name:F,command:W}),N(null)},[]),z=a.useCallback(()=>{f(null),m(!1),g(Xa),N(null)},[]),M=a.useCallback(F=>{g(W=>({...W,name:F})),F&&!ph(F)?N("Name must contain only letters, numbers, hyphens, and underscores (no spaces)"):N(null)},[]),T=a.useCallback(async()=>{const F=p.name.trim(),W=p.command.trim();if(!F){s("Script name is required","error");return}if(!ph(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 Bj(F,W,i),s(h?"Script updated":"Script created","success"),f(null),m(!1),g(Xa),N(null),await w()}catch(G){const te=je(G);te?.includes("already exists")?s("A script with this name already exists","error"):s(te||"Failed to save script","error")}finally{v(!1)}},[p,h,s,w,i]),U=a.useCallback(async F=>{try{await Hj(F,i),s("Script deleted","success"),y(null),h===F&&(f(null),g(Xa)),await w()}catch(W){s(je(W)||"Failed to delete script","error")}},[h,s,w,i]),V=a.useCallback((F,W)=>{r&&r(F,W)},[r]);if(!e)return null;const L=d||h!==null,R=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(mi,{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(lt,{size:24,className:"spin",style:{margin:"0 auto 8px",display:"block"}}),"Loading scripts..."]}):L?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=>M(F.target.value),placeholder:"e.g., build, test, lint",disabled:b||h!==null,"data-testid":"script-name-input",style:{width:"100%",borderColor:j?"var(--color-error)":void 0}}),j&&t.jsx("div",{style:{fontSize:"12px",color:"var(--color-error)",marginTop:"4px"},"data-testid":"script-name-error",children:j}),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:b,"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:b,"data-testid":"script-cancel-btn",children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:T,disabled:b||!!j,"data-testid":"script-save-btn",children:b?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:14,className:"spin",style:{marginRight:"6px"}}),"Saving..."]}):h?"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:R.length===0?"No scripts defined":`${R.length} script${R.length===1?"":"s"}`}),t.jsxs("button",{className:"btn btn-primary",onClick:_,"data-testid":"add-script-btn",style:{display:"flex",alignItems:"center",gap:"6px"},children:[t.jsx(cn,{size:14}),"Add Script"]})]}),R.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(mi,{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:R.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:xR(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:()=>V(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(En,{size:12}),"Run"]}),t.jsx("button",{className:"btn-icon",onClick:()=>S(F.name,F.command),title:"Edit","aria-label":`Edit ${F.name}`,"data-testid":`edit-script-${F.name}`,children:t.jsx(cn,{size:14,style:{transform:"rotate(45deg)"}})}),x===F.name?t.jsxs("div",{className:"script-delete-confirm",style:{display:"flex",gap:"4px",alignItems:"center"},children:[t.jsx("button",{className:"btn-icon",onClick:()=>U(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(ln,{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(Jt,{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(ln,{size:14})})]})]})},F.name))})]})})]})})}function yR(e,n,s){const[i,r]=a.useState([]),[o,l]=a.useState("."),[c,u]=a.useState(!1),[d,m]=a.useState(null),[h,f]=a.useState(0),p=a.useCallback(()=>{f(b=>b+1)},[]),g=a.useCallback(b=>{l(b),m(null)},[]);return a.useEffect(()=>{l("."),m(null),r([])},[e]),a.useEffect(()=>{if(!n||!e)return;let b=!1;async function v(){u(!0),m(null);try{const x=await ij(e,o==="."?void 0:o,s);b||r(x.entries)}catch(x){b||(m(je(x)||"Failed to load files"),r([]))}finally{b||u(!1)}}return v(),()=>{b=!0}},[e,o,n,h,s]),{entries:i,currentPath:o,setPath:g,loading:c,error:d,refresh:p}}function jR(e,n,s,i){const[r,o]=a.useState(""),[l,c]=a.useState(""),[u,d]=a.useState(null),[m,h]=a.useState(!1),[f,p]=a.useState(!1),[g,b]=a.useState(null),v=a.useCallback(j=>{o(j),b(null)},[]);a.useEffect(()=>{if(!e||!n){o(""),c(""),d(null),b(null);return}let j=!1;async function N(){h(!0),b(null);try{const C=await aj(e,n,i);j||(o(C.content),c(C.content),d(C.mtime))}catch(C){j||(b(je(C)||"Failed to load file"),o(""),c(""),d(null))}finally{j||h(!1)}}return N(),()=>{j=!0}},[e,n,s,i]);const x=r!==l,y=a.useCallback(async()=>{if(!(!e||!n||!x)){p(!0),b(null);try{const j=await rj(e,n,r,i);c(r),d(j.mtime)}catch(j){throw b(je(j)||"Failed to save file"),j}finally{p(!1)}}},[e,n,r,x,i]);return{content:r,setContent:v,originalContent:l,loading:m,saving:f,error:g,save:y,hasChanges:x,mtime:u}}const kR=1e4;function wR(e){const s=e.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean);return s[s.length-1]||e||"Project Root"}function NR(e){return{id:e.id,label:e.id,title:e.title,worktree:e.worktree,kind:"task"}}function SR(e){const[n,s]=a.useState("Project Root"),[i,r]=a.useState([]),[o,l]=a.useState(!0),[c,u]=a.useState(null);return a.useEffect(()=>{let d=!1;async function m(){try{const f=await sj(e);if(d)return;s(wR(f.project)),r(f.tasks.map(NR)),u(null)}catch(f){d||u(je(f)||"Failed to load workspaces")}finally{d||l(!1)}}m();const h=window.setInterval(()=>{m()},kR);return()=>{d=!0,window.clearInterval(h)}},[e]),{projectName:n,workspaces:i,loading:o,error:c}}function CR(e){return e===void 0?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ER(e){return e?new Date(e).toLocaleDateString():""}function fh(e,n){return _w(e,n)}const Za={visible:!1,x:0,y:0,entry:null,entryFullPath:""},cc={type:null,entry:null,entryFullPath:""},MR=200,_R=500,gh=10;function AR({x:e,y:n,entry:s,onAction:i,onClose:r}){const o=a.useRef(null),[l,c]=a.useState({x:e,y:n});a.useEffect(()=>{const m=o.current;if(!m)return;const h=m.getBoundingClientRect(),f=window.visualViewport,p=f?.width&&f.width>0?f.width:window.innerWidth,g=f?.height&&f.height>0?f.height:window.innerHeight,b=f?.offsetLeft??0,v=f?.offsetTop??0,x=8;let y=e-b,j=n-v;y+h.width>p-x&&(y=p-x-h.width),j+h.height>g-x&&(j=g-x-h.height),y<x&&(y=x),j<x&&(j=x),c({x:y+b,y:j+v})},[e,n]),a.useEffect(()=>{const m=h=>{h.key==="Escape"&&r()};return document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)},[r]);const u=s.type==="directory",d=[{id:"copy",label:"Copy",icon:Ui,disabled:!1},{id:"move",label:"Move",icon:$x,disabled:!1},{id:"rename",label:"Rename",icon:ds,disabled:!1},...u?[{id:"download-zip",label:"Download as ZIP",icon:Fo,disabled:!1}]:[{id:"download",label:"Download",icon:Eb,disabled:!1}],{id:"divider",label:"",icon:Ui,disabled:!0},{id:"delete",label:"Delete",icon:ln,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:m=>m.stopPropagation(),children:d.map(m=>m.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 ${m.disabled?"file-browser-context-menu__disabled":""} ${m.id==="delete"?"file-browser-context-menu__item--danger":""}`,disabled:m.disabled,onClick:()=>i(m.id),children:[t.jsx(m.icon,{size:14,className:"file-browser-context-menu__item-icon"}),t.jsx("span",{children:m.label})]},m.id))})})}function RR({type:e,entry:n,entryFullPath:s,onConfirm:i,onCancel:r,loading:o,error:l}){const c=a.useRef(null),u=e==="rename"?n.name:"",[d,m]=a.useState(u);a.useEffect(()=>{setTimeout(()=>c.current?.focus(),50)},[]),a.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 h=g=>{g.key==="Enter"&&d.trim()&&i(d.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:()=>i(""),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:d,onChange:g=>m(g.target.value),placeholder:p.placeholder,onKeyDown:h,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:()=>i(d.trim()),disabled:o||!d.trim(),children:o?`${p.confirm}ing...`:p.confirm})]})]})})}function TR({entries:e,currentPath:n,onSelectFile:s,onNavigate:i,loading:r,error:o,onRetry:l,workspace:c,onRefresh:u,projectId:d}){const[m,h]=a.useState(Za),[f,p]=a.useState(cc),[g,b]=a.useState(!1),[v,x]=a.useState(null),[y,j]=a.useState(!1),[N,C]=a.useState(null),w=a.useRef(null),_=a.useRef(null),S=a.useRef(null),z=a.useRef(!1),M=a.useCallback(()=>{w.current!==null&&(window.clearTimeout(w.current),w.current=null),_.current!==null&&(window.clearTimeout(_.current),_.current=null)},[]),T=a.useCallback(()=>{M(),S.current=null,j(!1),C(null)},[M]);a.useEffect(()=>()=>{M()},[M]);const U=a.useCallback(($,P,k,O)=>{h({visible:!0,x:$,y:P,entry:k,entryFullPath:O})},[]),V=a.useCallback(($,P,k)=>{if($.touches.length!==1)return;const O=$.touches[0];O&&(T(),S.current={x:O.clientX,y:O.clientY},_.current=window.setTimeout(()=>{j(!0),C(k)},MR),w.current=window.setTimeout(()=>{const ne=S.current;ne&&(z.current=!0,j(!1),C(null),M(),U(ne.x,ne.y,P,k))},_R))},[T,M,U]),L=a.useCallback($=>{const P=S.current,k=$.touches[0];!P||!k||(Math.abs(k.clientX-P.x)>gh||Math.abs(k.clientY-P.y)>gh)&&T()},[T]),R=a.useCallback(()=>{T()},[T]);a.useEffect(()=>{if(!m.visible)return;const $=document.querySelector(".file-browser-list"),P=()=>{z.current=!1,T(),h(Za)};return $?.addEventListener("scroll",P),()=>$?.removeEventListener("scroll",P)},[T,m.visible]),a.useEffect(()=>{if(!m.visible)return;const $=P=>{P.key==="Escape"&&(z.current=!1,h(Za))};return document.addEventListener("keydown",$),()=>document.removeEventListener("keydown",$)},[m.visible]);const F=a.useCallback(($,P)=>{$.preventDefault(),$.stopPropagation(),T(),z.current=!1,U($.clientX,$.clientY,P,fh(n,P.name))},[T,n,U]),W=a.useCallback($=>{if(!m.entry)return;z.current=!1;const P=m.entry,k=m.entryFullPath;if(h(Za),$==="download"){if(!c)return;const O=bp(c,k,d);window.open(ii(O),"_blank");return}if($==="download-zip"){if(!c)return;const O=mj(c,k,d);window.open(ii(O),"_blank");return}p({type:$,entry:P,entryFullPath:k}),x(null)},[m,c,d]),G=a.useCallback(async $=>{if(!(!f.type||!f.entry||!c)){b(!0),x(null);try{switch(f.type){case"copy":await lj(c,f.entryFullPath,$,d);break;case"move":await cj(c,f.entryFullPath,$,d);break;case"rename":await uj(c,f.entryFullPath,$,d);break;case"delete":await dj(c,f.entryFullPath,d);break}p(cc),u?.()}catch(P){x(je(P)||"Operation failed")}finally{b(!1)}}},[f,c,u,d]),te=a.useCallback(()=>{p(cc),x(null)},[]),E=a.useCallback(($,P)=>{if(z.current){z.current=!1;return}m.visible||($.type==="directory"?i(P):s(P))},[m.visible,i,s]);return r?t.jsxs("div",{className:"file-browser-loading",children:[t.jsx(lt,{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:()=>{i(Aw(n))},children:[t.jsx(jn,{size:16,style:{transform:"rotate(-90deg)"}}),"Up one level"]}),t.jsx("span",{className:"file-browser-path",children:n==="."?"Root":Ra(n)})]}),t.jsx("div",{className:"file-browser-list",children:e.length===0?t.jsx("div",{className:"file-browser-empty",children:"(empty directory)"}):e.map($=>{const P=fh(n,$.name),k=y&&N===P;return t.jsxs("div",{className:`file-node file-node--${$.type} ${k?"file-node--long-pressing":""}`,onClick:()=>E($,P),onContextMenu:O=>F(O,$),onTouchStart:O=>V(O,$,P),onTouchMove:L,onTouchEnd:R,onTouchCancel:R,children:[t.jsx("div",{className:"file-node-icon",children:$.type==="directory"?t.jsx(Gn,{size:16}):t.jsx(sp,{size:16})}),t.jsx("div",{className:"file-node-name",children:$.name}),$.type==="file"&&$.size!==void 0&&t.jsx("div",{className:"file-node-size",children:CR($.size)}),$.mtime&&t.jsx("div",{className:"file-node-time",children:ER($.mtime)})]},$.name)})}),m.visible&&m.entry&&t.jsx(AR,{x:m.x,y:m.y,entry:m.entry,onAction:W,onClose:()=>{z.current=!1,h(Za)}}),f.type&&f.entry&&t.jsx(RR,{type:f.type,entry:f.entry,entryFullPath:f.entryFullPath,onConfirm:G,onCancel:te,loading:g,error:v})]})}function PR(e){if(!e)return!1;const n=e.toLowerCase();return n.endsWith(".md")||n.endsWith(".markdown")||n.endsWith(".mdx")}function IR({content:e,onChange:n,readOnly:s,filePath:i}){const[r,o]=a.useState(!1),[l,c]=a.useState(!0),u=PR(i),d=u&&(s?!0:r),m=a.useCallback(()=>{o(!1)},[]),h=a.useCallback(()=>{o(!0)},[]),f=a.useCallback(()=>{c(p=>!p)},[]);return t.jsxs("div",{className:"file-editor-container",children:[u?t.jsxs("div",{className:"file-editor-toolbar",children:[t.jsxs("div",{className:"file-editor-mode-toggle",children:[!s&&t.jsxs("button",{className:`btn btn-sm ${d?"":"btn-primary"}`,onClick:m,disabled:!d,"aria-label":"Edit mode",children:[t.jsx(np,{size:14}),"Edit"]}),t.jsxs("button",{className:`btn btn-sm ${d?"btn-primary":""}`,onClick:h,disabled:d,"aria-label":"Preview mode",children:[t.jsx(Ea,{size:14}),"Preview"]})]}),!s&&t.jsx("button",{className:`btn btn-sm ${l?"btn-primary":""}`,onClick:f,"aria-label":"Toggle word wrap",title:"Toggle word wrap",children:t.jsx(No,{size:14})})]}):!s&&t.jsxs("div",{className:"file-editor-toolbar",children:[t.jsx("div",{className:"file-editor-mode-toggle"}),t.jsx("button",{className:`btn btn-sm ${l?"btn-primary":""}`,onClick:f,"aria-label":"Toggle word wrap",title:"Toggle word wrap",children:t.jsx(No,{size:14})})]}),d?t.jsx("div",{className:"file-editor-preview markdown-body",children:t.jsx(ai,{remarkPlugins:[ri],children:e})}):t.jsx("textarea",{className:`file-editor-textarea ${l?"file-editor-textarea--wrap":""}`,value:e,onChange:p=>n(p.target.value),readOnly:s,spellCheck:!1,"aria-label":i?`Editor for ${i}`:"File editor"})]})}function $R(e,n=44){if(e)return e.length<=n?e:`${e.slice(0,n-1)}…`}function DR({currentWorkspace:e,projectName:n,workspaces:s,onSelect:i}){const[r,o]=a.useState(!1),l=a.useMemo(()=>e==="project"?n||"Project Root":s.find(u=>u.id===e)?.label??e,[e,n,s]);return t.jsxs("div",{className:"workspace-selector",children:[t.jsxs("button",{type:"button",className:"workspace-selector-trigger",onClick:()=>o(c=>!c),"aria-haspopup":"listbox","aria-expanded":r,children:[e==="project"?t.jsx(Ud,{size:14}):t.jsx(Cc,{size:14}),t.jsx("span",{className:"workspace-selector-trigger-label",children:l}),t.jsx(en,{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${e==="project"?" active":""}`,onClick:()=>{i("project"),o(!1)},children:[t.jsxs("div",{className:"workspace-selector-option-main",children:[t.jsx(Ud,{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(c=>t.jsxs("button",{type:"button",className:`workspace-selector-option${e===c.id?" active":""}`,onClick:()=>{i(c.id),o(!1)},children:[t.jsxs("div",{className:"workspace-selector-option-main",children:[t.jsx(Cc,{size:14}),t.jsx("span",{children:c.id})]}),c.title&&t.jsx("span",{className:"workspace-selector-option-meta",title:c.title,children:$R(c.title)})]},c.id))]})]})]})}const LR=768,zR=280,ho=180,po=500,bh="fusion:file-browser-sidebar-width",mg=new Set([".png",".jpg",".jpeg",".gif",".webp",".ico",".bmp",".svgz"]),FR=new Set([...mg,".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 xh(e){const n=e.slice(e.lastIndexOf(".")).toLowerCase();return FR.has(n)}function OR(e){const n=e.slice(e.lastIndexOf(".")).toLowerCase();return mg.has(n)}function UR({initialWorkspace:e="project",onClose:n,onWorkspaceChange:s,projectId:i}){const{projectName:r,workspaces:o}=SR(i),l=a.useRef(null);oi(l,!0,"fusion:files-modal-size");const c=Mi(n),[u,d]=a.useState(e),[m,h]=a.useState(null),[f,p]=a.useState(!1),[g,b]=a.useState("list"),[v,x]=a.useState(zR),{entries:y,currentPath:j,setPath:N,loading:C,error:w,refresh:_}=yR(u,!0,i),{content:S,setContent:z,originalContent:M,loading:T,saving:U,error:V,save:L,hasChanges:R,mtime:F}=jR(u,m,!0,i);a.useEffect(()=>{d(e)},[e]),a.useEffect(()=>{const ce=()=>{p(window.innerWidth<=LR)};return ce(),window.addEventListener("resize",ce),()=>window.removeEventListener("resize",ce)},[]),a.useEffect(()=>{m||b("list")},[m]),a.useEffect(()=>{try{const ce=localStorage.getItem(bh);if(!ce)return;const ke=Number.parseInt(ce,10);if(!Number.isNaN(ke)){const D=Math.max(ho,Math.min(po,ke));x(D)}}catch{}},[]),a.useEffect(()=>{const ce=ke=>{ke.key==="Escape"&&n(),(ke.metaKey||ke.ctrlKey)&&ke.key==="s"&&(ke.preventDefault(),R&&!U&&L())};return document.addEventListener("keydown",ce),()=>document.removeEventListener("keydown",ce)},[n,R,U,L]);const W=a.useCallback(ce=>{h(ce),f&&b("editor")},[f]),G=a.useCallback(()=>{b("list")},[]),te=a.useCallback(()=>{z(M)},[M,z]),E=a.useCallback(ce=>{d(ce),h(null),b("list"),s?.(ce)},[s]),$=a.useCallback(ce=>{try{localStorage.setItem(bh,String(ce))}catch{}},[]),P=a.useCallback(ce=>{if(f)return;ce.preventDefault(),ce.stopPropagation();const ke=ce.currentTarget;typeof ke.setPointerCapture=="function"&&ke.setPointerCapture(ce.pointerId);const D=ce.clientX,se=v;let Z=se;document.body.style.userSelect="none";const ge=me=>{const ae=me.clientX-D,be=Math.max(ho,Math.min(po,se+ae));Z=be,x(be)},ue=me=>{typeof ke.releasePointerCapture=="function"&&ke.releasePointerCapture(me.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",ge),document.removeEventListener("pointerup",ue),$(Z)};document.addEventListener("pointermove",ge),document.addEventListener("pointerup",ue)},[f,$,v]),k=a.useCallback(ce=>{if(f)return;const ke=20;if(ce.key!=="ArrowLeft"&&ce.key!=="ArrowRight")return;ce.preventDefault();const D=ce.key==="ArrowLeft"?-ke:ke,se=Math.max(ho,Math.min(po,v+D));x(se),$(se)},[f,$,v]),ne=`Files — ${a.useMemo(()=>u==="project"?"Project":o.find(ce=>ce.id===u)?.id??u,[u,o])}`,we=a.useMemo(()=>!m||!OR(m)?null:bp(u,m,i),[m,u,i]),ie=ce=>{const ke=new Blob([ce]).size;return ke<1024?`${ke} B`:`${(ke/1024).toFixed(1)} KB`};return t.jsx("div",{className:"modal-overlay open",...c,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal file-browser-modal",ref:l,children:[t.jsxs("div",{className:"modal-header file-browser-modal-header",children:[t.jsxs("div",{className:"file-browser-header-title",children:[t.jsx(Gn,{size:18}),t.jsx("span",{children:ne}),m&&t.jsx("span",{className:"file-browser-header-path",children:m})]}),t.jsxs("div",{className:"file-browser-header-actions",children:[t.jsx(DR,{currentWorkspace:u,projectName:r,workspaces:o,onSelect:E}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:t.jsx(Jt,{size:20})})]})]}),t.jsxs("div",{className:"file-browser-body",children:[t.jsx("div",{className:`file-browser-sidebar ${f?"mobile":""} ${g==="list"?"active":""}`,style:f?void 0:{width:`${v}px`},children:t.jsx(TR,{entries:y,currentPath:j,onSelectFile:W,onNavigate:N,loading:C,error:w,onRetry:_,workspace:u,onRefresh:_,projectId:i})}),!f&&t.jsx("div",{className:"file-browser-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":ho,"aria-valuemax":po,"aria-valuenow":v,"aria-label":"Resize sidebar",tabIndex:0,onPointerDown:P,onKeyDown:k}),t.jsx("div",{className:`file-browser-content ${f?"mobile":""} ${g==="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:[f&&g==="editor"&&t.jsxs("button",{className:"file-browser-back-button",onClick:G,"aria-label":"Back to file list",children:[t.jsx(Ca,{size:16}),t.jsx("span",{children:"Back"})]}),m,xh(m)&&t.jsxs("span",{className:"file-browser-binary-indicator",children:[t.jsx(Wb,{size:12}),"Binary file — read only"]}),F&&t.jsxs("span",{className:"file-browser-mtime",children:["Modified: ",new Date(F).toLocaleString()]}),T&&t.jsx("span",{className:"file-browser-loading",children:"Loading..."})]}),t.jsx("div",{className:"file-browser-actions",children:!we&&R&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm",onClick:te,disabled:U,children:[t.jsx(Wx,{size:14}),"Discard"]}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>void L(),disabled:U,children:[t.jsx(cp,{size:14}),U?"Saving...":"Save"]})]})})]}),V&&!we&&t.jsx("div",{className:"file-browser-error-banner",children:V}),we?t.jsx("div",{className:"file-browser-image-preview",children:t.jsx("img",{src:we,alt:m??"",className:"file-browser-image"})}):t.jsx("div",{className:"file-editor-wrapper",children:t.jsx(IR,{content:S,onChange:z,filePath:m,readOnly:xh(m)})}),!we&&t.jsxs("div",{className:"file-browser-footer",children:[t.jsx("span",{children:ie(S)}),R&&t.jsx("span",{className:"file-browser-unsaved",children:"Unsaved changes"})]})]}):t.jsxs("div",{className:"file-browser-placeholder",children:[t.jsx(Gn,{size:48,opacity:.3}),t.jsx("p",{children:"Select a file to edit"})]})})]})]})})}function BR(e={}){const{pollInterval:n=3e4,autoRefresh:s=!0}=e,[i,r]=a.useState({providers:[],loading:!0,error:null,lastUpdated:null}),o=a.useRef(null),l=a.useRef(null),c=a.useCallback(async(d=!1)=>{l.current&&l.current.abort(),l.current=new AbortController,d&&r(m=>({...m,loading:!0,error:null}));try{const{providers:m}=await by();r({providers:m,loading:!1,error:null,lastUpdated:new Date})}catch(m){if(m instanceof Error&&m.name==="AbortError")return;r(h=>({...h,loading:!1,error:je(m)||"Failed to fetch usage data"}))}},[]);a.useEffect(()=>{c()},[c]),a.useEffect(()=>{if(s)return o.current=setInterval(()=>{c(!1)},n),()=>{o.current&&(clearInterval(o.current),o.current=null)}},[s,n,c]),a.useEffect(()=>()=>{l.current&&l.current.abort(),o.current&&clearInterval(o.current)},[]);const u=a.useCallback(()=>c(!0),[c]);return{providers:i.providers,loading:i.loading,error:i.error,lastUpdated:i.lastUpdated,refresh:u}}function HR(e){const n=new Date(e),s=new Date,i=n.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0});if(n.toDateString()===s.toDateString())return i;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"})} ${i}`:`${n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}, ${i}`}function qR(e){return e>90?"usage-progress-fill--high":e>70?"usage-progress-fill--medium":"usage-progress-fill--low"}const hg="kb-usage-hidden-windows";function vh(e){const n=Yn(hg,e);if(!n)return{};try{const s=JSON.parse(n);return!s||typeof s!="object"?{}:Object.entries(s).reduce((i,[r,o])=>{if(Array.isArray(o)){const l=o.filter(c=>typeof c=="string");l.length>0&&(i[r]=l)}return i},{})}catch{return{}}}function VR(e,n){bs(hg,JSON.stringify(e),n)}function pg(e,n,s){return s[e]?.includes(n)??!1}function WR({window:e,viewMode:n,isHidden:s,onToggleHidden:i}){const r=qR(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`,u=o?`${Math.round(e.percentUsed)}% used`:`${Math.round(e.percentLeft)}% left`;let d=e.resetText;if(!d&&e.resetAt){const v=new Date(e.resetAt).getTime()-Date.now();if(v>0){const x=Math.floor(v/36e5),y=Math.floor(x/24),j=x%24;y>0&&j>0?d=`resets in ${y}d ${j}h`:y>0?d=`resets in ${y}d`:x>0?d=`resets in ${x}h`:d=`resets in ${Math.floor(v/6e4)}m`}}const m=e.pace,h=m!==void 0;let f=0;h&&(f=o?100-m.percentElapsed:m.percentElapsed);const p=m?.status==="ahead",g=m?.status==="behind",b=m?.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:i,"aria-label":`Hide ${e.label}`,"data-testid":"usage-window-hide-btn",children:t.jsx(Ea,{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}`})}),h&&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:u}),t.jsxs("span",{className:"usage-window-reset-group",children:[d&&t.jsx("span",{className:"usage-window-reset",children:d}),e.resetAt&&t.jsx("span",{className:"usage-window-reset-at",children:HR(e.resetAt)})]})]}),h&&t.jsxs("div",{className:"usage-pace-row","data-testid":"pace-row",children:[p&&t.jsxs(t.Fragment,{children:[t.jsx(od,{size:14,className:"pace-icon pace-ahead"}),t.jsx("span",{className:"pace-text pace-ahead",children:m.message})]}),g&&t.jsxs(t.Fragment,{children:[t.jsx(pv,{size:14,className:"pace-icon pace-behind"}),t.jsx("span",{className:"pace-text pace-behind",children:m.message})]}),b&&t.jsxs(t.Fragment,{children:[t.jsx(kn,{size:14,className:"pace-icon pace-ontrack"}),t.jsx("span",{className:"pace-text pace-ontrack",children:m.message})]})]})]})}function KR(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 GR({provider:e,viewMode:n,hiddenWindows:s,onToggleWindow:i,onShowAllHidden:r}){const o=s[e.name]?.length??0,l=()=>{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","data-provider":e.name,"data-status":e.status,children:[t.jsxs("div",{className:"usage-provider-header",children:[t.jsxs("div",{className:"usage-provider-info",children:[t.jsx(Dn,{provider:KR(e.name),size:"md"}),t.jsx("span",{className:"usage-provider-name",children:e.name}),o>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 (",o,")"]})]}),t.jsx("div",{className:"usage-provider-actions",children:l()})]}),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((c,u)=>{const d=pg(e.name,c.label,s);return t.jsx(WR,{window:c,viewMode:n,isHidden:d,onToggleHidden:()=>i(e.name,c.label)},`${e.name}-${c.label}-${u}`)})}):e.status==="ok"?t.jsx("div",{className:"usage-provider-empty",children:"No usage data available"}):null]})}function JR(){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 YR({isOpen:e,onClose:n,projectId:s,anchorRect:i}){const{providers:r,loading:o,error:l,lastUpdated:c,refresh:u}=BR({autoRefresh:e}),[d,m]=a.useState(!1),[h,f]=a.useState(()=>typeof window<"u"?window.innerWidth>=769:!1),[p,g]=a.useState("used"),[b,v]=a.useState(()=>vh(s)),x=a.useRef(null),y=a.useRef(e),j=a.useRef(!1);a.useEffect(()=>{e||(j.current=!1)},[e]),a.useEffect(()=>{r.length>0&&(j.current=!0)},[r.length]),a.useEffect(()=>{if(typeof window>"u")return;const R=()=>{f(window.innerWidth>=769)};return window.addEventListener("resize",R),()=>window.removeEventListener("resize",R)},[]),a.useEffect(()=>{!y.current&&e&&(!c||Date.now()-c.getTime()>5e3)&&u(),y.current=e},[e,c,u]),a.useEffect(()=>{const R=Yn("kb-usage-view-mode",s);if(R==="used"||R==="remaining"){g(R);return}g("used")},[s]);const N=a.useCallback(R=>{g(R),bs("kb-usage-view-mode",R,s)},[s]);a.useEffect(()=>{v(vh(s))},[s]),a.useEffect(()=>{VR(b,s)},[b,s]);const C=a.useCallback((R,F)=>{v(W=>{if(pg(R,F,W)){const G=(W[R]??[]).filter(te=>te!==F);if(G.length===0){const{[R]:te,...E}=W;return E}return{...W,[R]:G}}return{...W,[R]:[...W[R]??[],F]}})},[]),w=a.useCallback(R=>{v(F=>{if(!F[R])return F;const{[R]:W,...G}=F;return G})},[]),_=a.useCallback(async()=>{m(!0),await u(),m(!1)},[u]);a.useEffect(()=>{if(!e)return;const R=F=>{F.key==="Escape"&&n()};return document.addEventListener("keydown",R),()=>document.removeEventListener("keydown",R)},[e,n]);const S=a.useCallback(R=>{R.target===R.currentTarget&&n()},[n]);if(!e)return null;const z=!!(i&&h),U=z?Math.min((i?.bottom??0)+8,window.innerHeight-12):void 0,V=z?Math.max(window.innerWidth-(i?.right??0),0):void 0,L=t.jsxs("div",{className:`usage-modal${z?" usage-modal--popover":" modal"}`,"data-testid":"usage-modal",style:z?{position:"fixed",top:U,right:V}:void 0,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"usage-header",children:[t.jsx(Is,{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 ${p==="used"?"active":""}`,onClick:()=>N("used"),"aria-pressed":p==="used","data-testid":"usage-view-toggle-used",children:"Used"}),t.jsx("button",{className:`usage-view-toggle-btn ${p==="remaining"?"active":""}`,onClick:()=>N("remaining"),"aria-pressed":p==="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(Jt,{size:20})})]})]}),t.jsx("div",{className:"usage-content",ref:x,children:(o||!j.current&&!l)&&r.length===0?t.jsx(JR,{}):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:_,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:r.map(R=>t.jsx(GR,{provider:R,viewMode:p,hiddenWindows:b,onToggleWindow:C,onShowAllHidden:w},R.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:_,disabled:o||d,"data-testid":"usage-refresh-btn",children:[t.jsx($n,{size:14,className:d?"spin":"",style:{marginRight:6}}),"Refresh"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:n,children:"Close"})]})]})]});return z?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"usage-popover-backdrop",onClick:n,"data-testid":"usage-modal-overlay"}),L]}):t.jsx("div",{className:"modal-overlay open",onClick:S,"data-testid":"usage-modal-overlay",children:L})}function fg(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),i=n%60;if(s<60)return i>0?`${s}m ${i}s`:`${s}m`;const r=Math.floor(s/60),o=s%60;return o>0?`${r}h ${o}m`:`${r}h`}function Do(e){const n=Date.now(),s=new Date(e).getTime(),i=n-s;if(i<0){const r=Math.abs(i);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 i<6e4?"just now":i<36e5?`${Math.floor(i/6e4)}m ago`:i<864e5?`${Math.floor(i/36e5)}h ago`:`${Math.floor(i/864e5)}d ago`}const QR={cron:"var(--color-blue, #3b82f6)",webhook:"var(--color-purple, #a855f7)",api:"var(--color-green, #22c55e)",manual:"var(--color-gray, #6b7280)"},gg={cron:"Cron",webhook:"Webhook",api:"API",manual:"Manual"},XR={cron:ep,webhook:up,api:tp,manual:Kn},ZR={parallel:"Concurrent",queue:"Queued",reject:"Exclusive"},eT={run:"Catch up",skip:"Skip missed",run_one:"Catch up (latest)"};function tT({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(kn,{size:12}):t.jsx(_r,{size:12}),t.jsx("span",{children:e.success?"Success":"Failed"}),n>0&&t.jsx("span",{className:"schedule-run-duration",children:fg(n)})]})}function nT({result:e,index:n}){const[s,i]=a.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:()=>i(!s),"aria-expanded":s,"aria-label":`Run #${n+1}: ${e.success?"succeeded":"failed"} ${Do(e.startedAt)}`,children:[t.jsx("span",{className:`schedule-history-status ${e.success?"success":"failure"}`,children:e.success?t.jsx(kn,{size:12}):t.jsx(_r,{size:12})}),t.jsx("span",{className:"schedule-history-time",children:Do(e.startedAt)}),e.triggerType&&t.jsx("span",{className:"routine-history-trigger-type",children:gg[e.triggerType]}),t.jsx("span",{className:"schedule-history-duration",children:fg(r)}),s?t.jsx(pi,{size:12}):t.jsx(en,{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 sT({routine:e,onEdit:n,onDelete:s,onRun:i,onToggle:r,running:o,lastRunOutput:l}){const[c,u]=a.useState(!1),{confirm:d}=Ws(),m=a.useCallback(async()=>{await d({title:"Delete Routine",message:`Delete routine "${e.name}"? This cannot be undone.`,danger:!0})&&s(e)},[e,s,d]),h=QR[e.trigger.type],f=XR[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:h,color:h},children:[t.jsx(f,{size:10}),gg[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(Bo,{size:10}):t.jsx(Gn,{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:()=>i(e),disabled:o,title:o?"Running…":"Run now","aria-label":o?"Running…":`Run ${e.name} now`,children:o?t.jsx(lt,{size:14,className:"spinner"}):t.jsx(En,{size:14})}),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(Hs,{size:14}):t.jsx(En,{size:14})}),t.jsx("button",{className:"btn-icon",onClick:()=>n(e),title:"Edit","aria-label":`Edit ${e.name}`,children:t.jsx(ds,{size:14})}),t.jsx("button",{className:"btn-icon",onClick:m,title:"Delete","aria-label":`Delete ${e.name}`,children:t.jsx(ln,{size:14})})]})]}),t.jsxs("div",{className:"routine-card-meta",children:[e.steps&&e.steps.length>0?t.jsxs("div",{className:"routine-meta-item",children:[t.jsx(Hi,{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(Ci,{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:ZR[e.executionPolicy]})}),t.jsx("div",{className:"routine-meta-item",children:t.jsx("span",{className:"routine-policy-badge",title:`Catch-up policy: ${e.catchUpPolicy}`,children:eT[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:Do(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:Do(e.lastRunAt)})]}),e.lastRunResult&&t.jsx(tT,{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:()=>u(g=>!g),"aria-expanded":c,children:[c?t.jsx(pi,{size:12}):t.jsx(en,{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,b)=>t.jsx(nT,{result:g,index:b},`${g.startedAt}-${b}`)),e.runHistory.length>10&&t.jsxs("div",{className:"schedule-history-more",children:["…and ",e.runHistory.length-10," more"]})]})]})]})}function iT({type:e,size:n=12}){return e==="command"?t.jsxs("span",{className:"step-type-badge step-type-command",title:"Command step",children:[t.jsx(mi,{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(vx,{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(as,{size:n}),t.jsx("span",{children:"AI Prompt"})]})}function dc(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`step-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function aT(e){return e==="command"?{id:dc(),type:e,name:"New Command Step",command:"",continueOnFailure:!1}:e==="ai-prompt"?{id:dc(),type:e,name:"New AI Prompt Step",prompt:"",continueOnFailure:!1}:{id:dc(),type:e,name:"New Create Task Step",taskDescription:"",taskColumn:"triage",continueOnFailure:!1}}function rT({step:e,onSave:n,onCancel:s}){const[i,r]=a.useState(e.name),[o,l]=a.useState(e.type),[c,u]=a.useState(e.command??""),[d,m]=a.useState(e.prompt??""),[h,f]=a.useState(e.modelProvider??""),[p,g]=a.useState(e.modelId??""),[b,v]=a.useState(e.taskTitle??""),[x,y]=a.useState(e.taskDescription??""),[j,N]=a.useState(e.taskColumn??"triage"),[C,w]=a.useState(e.timeoutMs),[_,S]=a.useState(e.continueOnFailure??!1),[z,M]=a.useState({}),[T,U]=a.useState([]),[V,L]=a.useState(!1),[R,F]=a.useState(null);a.useEffect(()=>{let $=!1;return L(!0),F(null),hs().then(P=>{$||U(P.models)}).catch(P=>{$||F(P instanceof Error?P.message:"Failed to load models")}).finally(()=>{$||L(!1)}),()=>{$=!0}},[]);const W=a.useCallback(()=>{const $={};return i.trim()||($.name="Step name is required"),o==="command"&&!c.trim()&&($.command="Command is required"),o==="ai-prompt"&&!d.trim()&&($.prompt="Prompt is required"),o==="create-task"&&!x.trim()&&($.taskDescription="Task description is required"),(o==="ai-prompt"||o==="create-task")&&(h||p)&&(!h||!p)&&($.modelProvider="Both model provider and model ID must be set together"),C!==void 0&&C<1e3&&($.timeoutMs="Timeout must be at least 1 second (1000ms)"),M($),Object.keys($).length===0},[i,o,c,d,x,h,p,C]),G=h&&p?`${h}/${p}`:"",te=a.useCallback($=>{if(!$)f(""),g("");else{const P=$.indexOf("/");P!==-1&&(f($.slice(0,P)),g($.slice(P+1)))}},[]),E=a.useCallback(()=>{if(!W())return;const $={...e,name:i.trim(),type:o,command:o==="command"?c.trim():void 0,prompt:o==="ai-prompt"?d.trim():void 0,taskTitle:o==="create-task"&&b.trim()?b.trim():void 0,taskDescription:o==="create-task"&&x.trim()?x.trim():void 0,taskColumn:o==="create-task"?j:void 0,modelProvider:(o==="ai-prompt"||o==="create-task")&&h.trim()?h.trim():void 0,modelId:(o==="ai-prompt"||o==="create-task")&&p.trim()?p.trim():void 0,timeoutMs:C||void 0,continueOnFailure:_};o!=="ai-prompt"&&delete $.prompt,o!=="create-task"&&(delete $.taskTitle,delete $.taskDescription,delete $.taskColumn),n($)},[W,n,e,i,o,c,d,b,x,j,h,p,C,_]);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:i,onChange:$=>r($.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:$=>l($.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:$=>u($.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:d,onChange:$=>m($.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(Jn,{id:`step-model-${e.id}`,label:"Model",models:T,value:G,onChange:te,placeholder:"Use default",disabled:V}),R&&t.jsx("small",{className:"field-error",children:R}),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:b,onChange:$=>v($.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:x,onChange:$=>y($.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:j,onChange:$=>N($.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(Jn,{id:`step-task-model-${e.id}`,label:"Model",models:T,value:G,onChange:te,placeholder:"Use default",disabled:V}),R&&t.jsx("small",{className:"field-error",children:R}),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:$=>w($.target.value?Number($.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:_,onChange:$=>S($.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 oT({steps:e,onChange:n,onEditingChange:s}){const[i,r]=a.useState(null);a.useEffect(()=>{s?.(i!==null)},[i,s]);const o=a.useCallback(d=>{const m=aT(d);n([...e,m]),r(m.id)},[e,n]),l=a.useCallback(d=>{n(e.filter(m=>m.id!==d)),i===d&&r(null)},[e,n,i]),c=a.useCallback((d,m)=>{const h=e.findIndex(g=>g.id===d);if(h<0)return;const f=m==="up"?h-1:h+1;if(f<0||f>=e.length)return;const p=[...e];[p[h],p[f]]=[p[f],p[h]],n(p)},[e,n]),u=a.useCallback(d=>{n(e.map(m=>m.id===d.id?d:m)),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((d,m)=>t.jsx("div",{className:"step-card",children:i===d.id?t.jsx(rT,{step:d,onSave:u,onCancel:()=>r(null)}):t.jsxs("div",{className:"step-card-row",children:[t.jsx("div",{className:"step-card-drag",children:t.jsx(rd,{size:14})}),t.jsx("span",{className:"step-card-index",children:m+1}),t.jsx(iT,{type:d.type}),t.jsx("span",{className:"step-card-name",children:d.name}),d.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(d.id,"up"),disabled:m===0,title:"Move up","aria-label":`Move ${d.name} up`,children:t.jsx(pi,{size:14})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>c(d.id,"down"),disabled:m===e.length-1,title:"Move down","aria-label":`Move ${d.name} down`,children:t.jsx(en,{size:14})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>r(d.id),title:"Edit","aria-label":`Edit ${d.name}`,children:t.jsx(ds,{size:14})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>l(d.id),title:"Delete","aria-label":`Delete ${d.name}`,children:t.jsx(ln,{size:14})})]})]})},d.id))}),t.jsxs("div",{className:"steps-add-buttons",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("command"),children:[t.jsx(cn,{size:14}),"Add Command Step"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("ai-prompt"),children:[t.jsx(cn,{size:14}),"Add AI Prompt Step"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("create-task"),children:[t.jsx(cn,{size:14}),"Add Create Task Step"]})]})]})}const bg={hourly:"0 * * * *",daily:"0 0 * * *",weekly:"0 0 * * 1",monthly:"0 0 1 * *"},lT={hourly:"Every hour",daily:"Every day (midnight)",weekly:"Every week (Monday)",monthly:"Every month (1st)",custom:"Custom cron expression"};function cT(e){const n=e.trim();for(const[s,i]of Object.entries(bg))if(i===n)return s;return"custom"}function dT(e){const n=e.trim().split(/\s+/);return n.length!==5?!1:n.every(s=>/^[\d*,/-]+$/.test(s))}function uT(e,n,s,i,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:i||void 0};case"api":return{type:"api",endpoint:r||"/api/routine/"+Math.random().toString(36).slice(2,10)};case"manual":return{type:"manual"}}}function mT(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 hT=[{value:"parallel",label:"Allow concurrent runs"},{value:"queue",label:"Queue after current (one at a time)"},{value:"reject",label:"Reject new runs while running"}],pT=[{value:"skip",label:"Skip missed runs"},{value:"run_one",label:"Run the most recent missed run"},{value:"run",label:"Run all missed runs"}];function yh(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`step-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function jh({routine:e,onSubmit:n,onCancel:s,scope:i,projectId:r,onScopeChange:o}){const l=!!e,c=e?mT(e):{triggerType:"cron",cronExpression:"0 * * * *",webhookPath:"",webhookSecret:"",endpoint:""},[u,d]=a.useState(e?.name??""),[m,h]=a.useState(e?.description??""),[f,p]=a.useState(c.triggerType),[g,b]=a.useState(c.cronExpression),[v,x]=a.useState(()=>c.triggerType!=="cron"?"custom":cT(c.cronExpression)),[y,j]=a.useState(c.webhookPath),[N,C]=a.useState(c.webhookSecret),[w,_]=a.useState(c.endpoint),[S,z]=a.useState(e?.executionPolicy??"queue"),[M,T]=a.useState(e?.catchUpPolicy??"run_one"),[U,V]=a.useState(e?.enabled??!0),L=e?.steps&&e.steps.length===1&&e.steps[0].type==="ai-prompt"&&!e.command,R=e?.steps&&e.steps.length===1&&e.steps[0].type==="create-task"&&!e.command,[F,W]=a.useState(e?.steps&&e.steps.length>0&&!L&&!R?"advanced":"simple"),[G,te]=a.useState(()=>L?"ai-prompt":R?"create-task":"command"),[E,$]=a.useState(e?.command??""),[P,k]=a.useState(e?.steps??[]),[O,ne]=a.useState(!1),[we,ie]=a.useState(e?.timeoutMs??3e5),[ce,ke]=a.useState(L?e.steps?.[0]?.prompt??"":""),[D,se]=a.useState(R?e.steps?.[0]?.taskTitle??"":""),[Z,ge]=a.useState(R?e.steps?.[0]?.taskDescription??"":""),[ue,me]=a.useState(R?e.steps?.[0]?.taskColumn??"triage":"triage"),[ae,be]=a.useState(L||R?e.steps?.[0]?.modelProvider??"":""),[Ae,Fe]=a.useState(L||R?e.steps?.[0]?.modelId??"":""),[at,et]=a.useState([]),[Ye,rt]=a.useState(!1),[Oe,We]=a.useState(null),[oe,xe]=a.useState(i??"global"),[ee,Re]=a.useState({}),[Ue,pe]=a.useState(!1),Me=a.useRef(!0);a.useEffect(()=>()=>{Me.current=!1},[]),a.useEffect(()=>{i&&xe(i)},[i]),a.useEffect(()=>{let Q=!1;return rt(!0),We(null),hs().then(Je=>{Q||et(Je.models)}).catch(Je=>{Q||We(Je instanceof Error?Je.message:"Failed to load models")}).finally(()=>{Q||rt(!1)}),()=>{Q=!0}},[]);const ze=ae&&Ae?`${ae}/${Ae}`:"",tt=a.useCallback(Q=>{if(!Q){be(""),Fe("");return}const Je=Q.indexOf("/");Je!==-1&&(be(Q.slice(0,Je)),Fe(Q.slice(Je+1)))},[]),ye=a.useCallback(()=>{const Q={};if(u.trim()||(Q.name="Name is required"),oe==="project"&&!r&&(Q.scope="Project-specific entries require an active project."),f==="cron"&&v==="custom"&&(g.trim()?dT(g)||(Q.cronExpression="Invalid cron format — expected 5 fields (e.g. '0 */6 * * *')"):Q.cronExpression="Cron expression is required"),f==="webhook"&&!y.trim()&&(Q.webhookPath="Webhook path is required"),f==="api"&&!w.trim()&&(Q.endpoint="API endpoint is required"),F==="simple")G==="command"&&!E.trim()&&(Q.command="Command is required"),G==="ai-prompt"&&!ce.trim()&&(Q.prompt="Prompt is required"),G==="create-task"&&!Z.trim()&&(Q.taskDescription="Task description is required"),(ae.trim()&&!Ae.trim()||!ae.trim()&&Ae.trim())&&(Q.model="Both model provider and model ID must be set, or both must be empty");else{P.length===0&&(Q.steps="At least one step is required"),O&&(Q.stepsEditing="Please save or cancel all step edits before saving the routine");const Je=[];P.forEach((ut,ht)=>{ut.name?.trim()||Je.push(`Step ${ht+1}: Name is required`),ut.type==="command"&&!ut.command?.trim()&&Je.push(`Step ${ht+1}: Command is required`),ut.type==="ai-prompt"&&!ut.prompt?.trim()&&Je.push(`Step ${ht+1}: Prompt is required`),ut.type==="create-task"&&!ut.taskDescription?.trim()&&Je.push(`Step ${ht+1}: Task description is required`)}),Je.length>0&&(Q.steps=Je.join("; "))}return we<1e3&&(Q.timeoutMs="Timeout must be at least 1 second (1000ms)"),Re(Q),Object.keys(Q).length===0},[u,f,g,v,y,w,oe,r,F,G,E,ce,Z,ae,Ae,P,O,we]),de=a.useCallback(async Q=>{if(Q.preventDefault(),!!ye()){pe(!0);try{let Je=e?.scope??oe??(r?"project":"global");Je==="project"&&!r&&(Je="global");const ut=uT(f,g,y,N,w);let ht,Et;F==="simple"?G==="command"?ht=E.trim()||void 0:G==="ai-prompt"?Et=[{id:yh(),type:"ai-prompt",name:u.trim(),prompt:ce.trim(),modelProvider:ae.trim()||void 0,modelId:Ae.trim()||void 0}]:Et=[{id:yh(),type:"create-task",name:u.trim(),taskTitle:D.trim()||void 0,taskDescription:Z.trim(),taskColumn:ue,modelProvider:ae.trim()||void 0,modelId:Ae.trim()||void 0}]:Et=P;const yt={name:u.trim(),agentId:e?.agentId??"",description:m.trim()||void 0,trigger:ut,command:ht,steps:Et,timeoutMs:we,executionPolicy:S,catchUpPolicy:M,enabled:U,scope:Je};await n(yt)}finally{Me.current&&pe(!1)}}},[ye,n,u,m,f,g,y,N,w,F,G,E,ce,ae,Ae,D,Z,ue,P,we,S,M,U,oe,r,e?.scope,e?.agentId]),Ie="routine-name-error",fe="routine-cron-error",_e="routine-webhook-error",Ge="routine-endpoint-error",Pe="routine-command-error",ft="routine-prompt-error",Y="routine-task-description-error",le="routine-model-error",ve="routine-timeout-error",nt=a.useCallback(Q=>{x(Q),Q!=="custom"&&b(bg[Q])},[]);return t.jsxs("form",{className:"routine-form",onSubmit:de,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:u,onChange:Q=>d(Q.target.value),"aria-invalid":!!ee.name,"aria-describedby":ee.name?Ie:void 0}),ee.name&&t.jsx("small",{id:Ie,className:"field-error",children:ee.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:m,onChange:Q=>h(Q.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${oe==="global"?" active":""}`,onClick:()=>{xe("global"),o?.("global")},role:"radio","aria-checked":oe==="global"?"true":"false",disabled:!!e?.scope,title:e?.scope?`Scope is locked to ${e.scope} for existing routines`:"Global scope",children:[t.jsx(Bo,{size:12}),"Global"]}),t.jsxs("button",{type:"button",className:`routine-scope-btn${oe==="project"?" active":""}`,onClick:()=>{xe("project"),o?.("project")},role:"radio","aria-checked":oe==="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(Gn,{size:12}),"Project"]})]}),t.jsx("small",{children:!r&&!e?.scope?"No active project. Routines will be created at global scope.":oe==="project"&&r?"This routine will be scoped to the current project.":"This routine will be created at global scope."}),ee.scope&&t.jsx("small",{className:"field-error",children:ee.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(ep,{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(up,{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(tp,{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(Kn,{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:Q=>nt(Q.target.value),children:Object.entries(lT).map(([Q,Je])=>t.jsx("option",{value:Q,children:Je},Q))}),t.jsx("label",{htmlFor:"routine-cron",children:"Cron Expression"}),t.jsx("input",{id:"routine-cron",type:"text",placeholder:"* * * * *",value:g,onChange:Q=>b(Q.target.value),disabled:v!=="custom","aria-invalid":!!ee.cronExpression,"aria-describedby":ee.cronExpression?fe:void 0}),ee.cronExpression?t.jsx("small",{id:fe,className:"field-error",children:ee.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:Q=>j(Q.target.value),"aria-invalid":!!ee.webhookPath,"aria-describedby":ee.webhookPath?_e:void 0}),ee.webhookPath?t.jsx("small",{id:_e,className:"field-error",children:ee.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:N,onChange:Q=>C(Q.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:w,onChange:Q=>_(Q.target.value),"aria-invalid":!!ee.endpoint,"aria-describedby":ee.endpoint?Ge:void 0}),ee.endpoint?t.jsx("small",{id:Ge,className:"field-error",children:ee.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${G==="command"?" active":""}`,onClick:()=>te("command"),role:"radio","aria-checked":G==="command",children:"Command"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${G==="ai-prompt"?" active":""}`,onClick:()=>te("ai-prompt"),role:"radio","aria-checked":G==="ai-prompt",children:"AI Prompt"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${G==="create-task"?" active":""}`,onClick:()=>te("create-task"),role:"radio","aria-checked":G==="create-task",children:"Create Task"})]})]}),G==="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:Q=>$(Q.target.value),"aria-invalid":!!ee.command,"aria-describedby":ee.command?Pe:void 0}),ee.command?t.jsx("small",{id:Pe,className:"field-error",children:ee.command}):t.jsx("small",{children:"Shell command to execute."})]}):G==="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:ce,onChange:Q=>ke(Q.target.value),rows:3,"aria-invalid":!!ee.prompt,"aria-describedby":ee.prompt?ft:void 0}),ee.prompt?t.jsx("small",{id:ft,className:"field-error",children:ee.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(Jn,{id:"routine-model",label:"Model",models:at,value:ze,onChange:tt,placeholder:"Use default",disabled:Ye}),Oe&&t.jsx("small",{className:"field-error",children:Oe}),ee.model&&t.jsx("small",{id:le,className:"field-error",children:ee.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:D,onChange:Q=>se(Q.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:Z,onChange:Q=>ge(Q.target.value),rows:4,"aria-invalid":!!ee.taskDescription,"aria-describedby":ee.taskDescription?Y:void 0}),ee.taskDescription?t.jsx("small",{id:Y,className:"field-error",children:ee.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:ue,onChange:Q=>me(Q.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(Jn,{id:"routine-task-model",label:"Executor Model",models:at,value:ze,onChange:tt,placeholder:"Use default",disabled:Ye}),Oe&&t.jsx("small",{className:"field-error",children:Oe}),ee.model&&t.jsx("small",{id:le,className:"field-error",children:ee.model})]})]})]}):t.jsxs(t.Fragment,{children:[t.jsx(oT,{steps:P,onChange:k,onEditingChange:ne}),ee.steps&&t.jsx("small",{className:"field-error",children:ee.steps}),ee.stepsEditing&&t.jsx("small",{className:"field-error",children:ee.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:we,onChange:Q=>ie(Number(Q.target.value)),"aria-invalid":!!ee.timeoutMs,"aria-describedby":ee.timeoutMs?ve:void 0}),ee.timeoutMs?t.jsx("small",{id:ve,className:"field-error",children:ee.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:S,onChange:Q=>z(Q.target.value),children:hT.map(Q=>t.jsx("option",{value:Q.value,children:Q.label},Q.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:M,onChange:Q=>T(Q.target.value),children:pT.map(Q=>t.jsx("option",{value:Q.value,children:Q.label},Q.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:U,onChange:Q=>V(Q.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:Ue,children:"Cancel"}),t.jsx("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:Ue,children:Ue?"Saving…":l?"Save Changes":"Create Routine"})]})]})}const fT=3e4;function gT({onClose:e,addToast:n,projectId:s}){const[i,r]=a.useState(()=>s?"project":"global"),[o,l]=a.useState([]),[c,u]=a.useState("list"),[d,m]=a.useState(),[h,f]=a.useState(null),[p,g]=a.useState({}),b=a.useRef(null);oi(b,!0,"fusion:automation-modal-size");const v=a.useMemo(()=>({scope:i,projectId:i==="project"?s:void 0}),[i,s]),x=a.useCallback(async()=>{try{const L=await Tj(v);l(L),g(R=>{const F={...R};for(const W of L){const G=F[W.id];if(!G||!W.lastRunResult)continue;const te=W.lastRunResult;te.success===G.success&&(te.output||"")===G.output&&(te.error||"")===(G.error||"")&&delete F[W.id]}return F})}catch(L){n(je(L)||"Failed to load routines","error")}},[n,v]);a.useEffect(()=>{x()},[x]),a.useEffect(()=>{const L=setInterval(()=>{x()},fT);return()=>clearInterval(L)},[x]),a.useEffect(()=>{const L=R=>{R.key==="Escape"&&(c!=="list"?(u("list"),m(void 0)):e())};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[e,c]);const y=Mi(e),j=a.useCallback(async L=>{try{await Pj(L,v),n("Routine created","success"),u("list"),await x()}catch(R){n(je(R)||"Failed to create routine","error")}},[n,x,v]),N=a.useCallback(L=>{m(L),u("edit")},[]),C=a.useCallback(async L=>{if(d)try{await su(d.id,L,v),n("Routine updated","success"),u("list"),m(void 0),await x()}catch(R){n(je(R)||"Failed to update routine","error")}},[d,n,x,v]),w=a.useCallback(async L=>{try{await Ij(L.id,v),n(`Deleted "${L.name}"`,"success"),await x()}catch(R){n(je(R)||"Failed to delete routine","error")}},[n,x,v]),_=a.useCallback(async L=>{f(L.id);try{const{result:R}=await $j(L.id,v);g(F=>({...F,[L.id]:{output:R.output||"",error:R.error,success:R.success}})),R.success?n(`"${L.name}" completed successfully`,"success"):n(`"${L.name}" failed: ${R.error||"Unknown error"}`,"error"),await x()}catch(R){n(je(R)||"Failed to run routine","error")}finally{f(null)}},[n,x,v]),S=a.useCallback(async L=>{try{await su(L.id,{enabled:!L.enabled},v),n(`"${L.name}" ${L.enabled?"disabled":"enabled"}`,"success"),await x()}catch(R){n(je(R)||"Failed to toggle routine","error")}},[n,x,v]),z=a.useCallback(()=>{u("list"),m(void 0)},[]);a.useEffect(()=>{c!=="list"&&g({})},[c]);const M=a.useCallback(L=>{r(L),u("list"),m(void 0),g({})},[]),T=()=>c==="create"?t.jsx(jh,{onSubmit:j,onCancel:z,scope:i,projectId:s}):c==="edit"&&d?t.jsx(jh,{routine:d,onSubmit:C,onCancel:z,scope:i,projectId:s}):o.length===0?t.jsxs("div",{className:"routine-empty-state",children:[t.jsx(Kn,{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:()=>u("create"),children:[t.jsx(cn,{size:14}),"Create your first automation"]})]}):t.jsx("div",{className:"routine-list",children:o.map(L=>t.jsx(sT,{routine:L,onEdit:N,onDelete:w,onRun:_,onToggle:S,running:h===L.id,lastRunOutput:p[L.id]??null},L.id))}),U=()=>T(),V=c==="list"&&o.length>0;return t.jsx("div",{className:"modal-overlay open",...y,children:t.jsxs("div",{ref:b,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(Kn,{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(Jt,{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${i==="global"?" active":""}`,onClick:()=>M("global"),"aria-pressed":i==="global",title:"Global (user-level) automations",children:[t.jsx(Bo,{size:14}),"Global"]}),t.jsxs("button",{type:"button",className:`scope-btn${i==="project"?" active":""}`,onClick:()=>M("project"),"aria-pressed":i==="project",title:"Project-scoped automations",children:[t.jsx(Gn,{size:14}),"Project"]})]}),t.jsxs("span",{className:"scheduling-count",children:[t.jsx(Kn,{size:14}),o.length," automation",o.length===1?"":"s"]})]}),t.jsx("div",{className:"scheduling-toolbar-right",children:V&&t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>u("create"),"aria-label":"Create new automation",children:[t.jsx(cn,{size:14}),"New Automation"]})})]}),t.jsx("div",{className:"schedule-modal-content",id:"scheduled-tasks-content",children:U()})]})})}const bT=3e4,Xc=new Map,uc=new Map;function kh(e){return e??"default"}function wh(e){const n=Xc.get(e);return n?Date.now()>=n.expiresAt?(Xc.delete(e),null):n:null}function xT(e,n){const s=e.some(r=>r.id!=="github"&&r.authenticated),i=e.some(r=>r.id==="github"&&r.authenticated)||(n?.authenticated??!1);return{hasAiProvider:s,hasGithub:i}}async function vT(e){const n=uc.get(e);if(n)return n;const s=jr().then(({providers:i,ghCli:r})=>{const l={...xT(i,r),ghCli:r,expiresAt:Date.now()+bT};return Xc.set(e,l),l}).finally(()=>{uc.delete(e)});return uc.set(e,s),s}function xg(e){const n=kh(e),s=wh(n),[i,r]=a.useState(s?.hasAiProvider??!1),[o,l]=a.useState(s?.hasGithub??!1),[,c]=a.useState(s?.ghCli),[u,d]=a.useState(s==null),m=a.useRef(!!s);return a.useEffect(()=>{let h=!1;const f=kh(e),p=wh(f);if(p)return r(p.hasAiProvider),l(p.hasGithub),c(p.ghCli),d(!1),m.current=!0,()=>{h=!0};m.current=!1;async function g(){!m.current&&d(!0);try{const v=await vT(f);if(h)return;r(v.hasAiProvider),l(v.hasGithub),c(v.ghCli)}catch{}finally{h||(m.current=!0,d(!1))}}return g(),()=>{h=!0}},[e]),a.useMemo(()=>({hasAiProvider:i,hasGithub:o,loading:u,hasWarnings:!i||!o}),[i,o,u])}function vg({hasAiProvider:e,hasGithub:n,compact:s=!1,onDismiss:i}){if(e&&n)return null;const r=i?t.jsx("button",{type:"button",className:"setup-warning-banner__dismiss touch-target","aria-label":"Dismiss setup warning",onClick:i,children:t.jsx(Jt,{size:16,"aria-hidden":"true"})}):null;if(s)return t.jsxs("div",{className:`setup-warning-banner setup-warning-banner--compact${i?" 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${i?" 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 yT({isOpen:e,onClose:n,projectId:s,tasks:i,onCreateTask:r,addToast:o,onPlanningMode:l,onSubtaskBreakdown:c}){const{confirm:u}=Ws(),[d,m]=a.useState(""),[h,f]=a.useState([]),[p,g]=a.useState([]),[b,v]=a.useState(!1),[x,y]=a.useState(""),[j,N]=a.useState(""),[C,w]=a.useState(""),[_,S]=a.useState(""),[z,M]=a.useState(""),[T,U]=a.useState("default"),[V,L]=a.useState(!1),[R,F]=a.useState([]),[W,G]=a.useState(!1),[te,E]=a.useState(void 0),[$,P]=a.useState(Ns),[k,O]=a.useState(void 0),[ne,we]=a.useState(null),[ie,ce]=a.useState([]),[ke,D]=a.useState(!1),[se,Z]=a.useState(!1),ge=a.useRef(null),[ue,me]=a.useState(!1),[ae,be]=a.useState(""),Ae=a.useRef(null),{hasAiProvider:Fe,hasGithub:at,loading:et}=xg(s),{nodes:Ye}=Xo(),rt=a.useCallback(ye=>{G(!0),F(ye)},[]),Oe=a.useCallback(()=>{G(!1)},[]),We=a.useCallback(async()=>{if(ie.length>0){D(!0);return}Z(!0);try{const ye=await _a(void 0,s);ce(ye),D(!0)}catch(ye){const de=je(ye);o(de?`Failed to load agents: ${de}`:"Failed to load agents","error"),D(!1)}finally{Z(!1)}},[ie.length,s,o]);a.useEffect(()=>{if(!ke)return;const ye=de=>{ge.current&&!ge.current.contains(de.target)&&D(!1)};return document.addEventListener("mousedown",ye),()=>document.removeEventListener("mousedown",ye)},[ke]),a.useEffect(()=>{if(!ue)return;const ye=de=>{Ae.current&&!Ae.current.contains(de.target)&&(me(!1),be(""))};return document.addEventListener("mousedown",ye),()=>document.removeEventListener("mousedown",ye)},[ue]);const oe=i.filter(ye=>!h.includes(ye.id)).sort((ye,de)=>{const Ie=de.createdAt.localeCompare(ye.createdAt);if(Ie!==0)return Ie;const fe=parseInt(ye.id.slice(ye.id.lastIndexOf("-")+1),10)||0;return(parseInt(de.id.slice(de.id.lastIndexOf("-")+1),10)||0)-fe}),xe=ae?oe.filter(ye=>ye.id.toLowerCase().includes(ae.toLowerCase())||ye.title&&ye.title.toLowerCase().includes(ae.toLowerCase())||ye.description&&ye.description.toLowerCase().includes(ae.toLowerCase())):oe,ee=(ye,de)=>ye.length>de?ye.slice(0,de)+"…":ye;a.useEffect(()=>{const ye=d.trim()!==""||h.length>0||p.length>0||x!==""||j!==""||C!==""||_!==""||R.length>0||ne!==null||te!==void 0||$!==Ns||k!==void 0;L(ye)},[d,h,p,x,j,C,_,R,ne,te,$,k]);const Re=a.useCallback(async()=>{V&&!await u({title:"Discard Changes",message:"You have unsaved changes. Discard them?",danger:!0})||(p.forEach(ye=>URL.revokeObjectURL(ye.previewUrl)),g([]),m(""),f([]),y(""),N(""),w(""),S(""),M(""),U("default"),F([]),G(!1),we(null),D(!1),E(void 0),P(Ns),O(void 0),L(!1),n())},[V,n,p,u]),Ue=a.useCallback(async()=>{const ye=d.trim();if(!(!ye||b)){v(!0);try{const de=x.indexOf("/"),Ie=j.indexOf("/"),fe=C.indexOf("/"),_e=await r({title:void 0,description:ye,column:"triage",dependencies:h.length?h:void 0,enabledWorkflowSteps:W?R.length>0?R:[]:void 0,...ne?{assignedAgentId:ne}:{},modelPresetId:T==="preset"&&z||void 0,modelProvider:x&&de!==-1?x.slice(0,de):void 0,modelId:x&&de!==-1?x.slice(de+1):void 0,validatorModelProvider:j&&Ie!==-1?j.slice(0,Ie):void 0,validatorModelId:j&&Ie!==-1?j.slice(Ie+1):void 0,planningModelProvider:C&&fe!==-1?C.slice(0,fe):void 0,planningModelId:C&&fe!==-1?C.slice(fe+1):void 0,thinkingLevel:_!==""?_:void 0,reviewLevel:te,priority:$,nodeId:k});if(p.length>0){const Ge=[];for(const Pe of p)try{await yr(_e.id,Pe.file,s)}catch{Ge.push(Pe.file.name)}Ge.length>0&&o(`Failed to upload: ${Ge.join(", ")}`,"error")}p.forEach(Ge=>URL.revokeObjectURL(Ge.previewUrl)),g([]),m(""),f([]),y(""),N(""),w(""),S(""),M(""),U("default"),F([]),G(!1),we(null),D(!1),E(void 0),P(Ns),O(void 0),o(`Created ${_e.id}`,"success"),n()}catch(de){o(je(de)||"Failed to create task","error")}finally{v(!1)}}},[d,h,p,x,j,C,_,b,r,o,n,s,T,z,R,W,ne,te,$,k]),pe=a.useCallback(ye=>{ye.key==="Escape"&&(ye.preventDefault(),Re())},[Re]),ze=(ne?ie.find(ye=>ye.id===ne):void 0)?.name??ne,tt=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:Ae,children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>me(ye=>!ye),disabled:b,"data-testid":"dep-trigger",children:h.length>0?`${h.length} selected`:"Add dependencies"}),ue&&t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:ae,onChange:ye=>be(ye.target.value),onClick:ye=>ye.stopPropagation()}),xe.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):xe.map(ye=>t.jsxs("div",{className:`dep-dropdown-item${h.includes(ye.id)?" selected":""}`,onClick:()=>{f(h.includes(ye.id)?h.filter(de=>de!==ye.id):[...h,ye.id]),me(!1),be("")},onMouseDown:de=>de.preventDefault(),children:[t.jsx("span",{className:"dep-dropdown-id",children:ye.id}),t.jsx("span",{className:"dep-dropdown-title",children:ee(ye.title||ye.description||ye.id,30)})]},ye.id))]})]}),h.length>0&&t.jsx("div",{className:"selected-deps",children:h.map(ye=>t.jsxs("span",{className:"dep-chip",children:[ye,t.jsx("button",{type:"button",className:"dep-chip-remove",onClick:()=>f(h.filter(de=>de!==ye)),disabled:b,children:"×"})]},ye))})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Assign Agent"}),t.jsxs("div",{className:"agent-trigger-wrap",ref:ge,children:[t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{ke?D(!1):We()},disabled:b,"data-testid":"new-task-agent-button",children:[t.jsx(Cn,{size:12,style:{verticalAlign:"middle"}}),ze?` ${ze}`:" Assign agent"]}),ke&&t.jsxs("div",{className:"dep-dropdown agent-picker-dropdown",onMouseDown:ye=>ye.preventDefault(),children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select agent"}),se&&t.jsx("div",{className:"dep-dropdown-empty",children:"Loading agents..."}),!se&&ie.filter(ye=>ye.state!=="terminated").map(ye=>t.jsxs("div",{className:`dep-dropdown-item${ne===ye.id?" selected":""}`,onMouseDown:de=>de.preventDefault(),onClick:()=>{we(ye.id===ne?null:ye.id),D(!1)},"data-testid":`agent-option-${ye.id}`,children:[t.jsx(Cn,{size:12,style:{marginRight:6}}),t.jsx("span",{className:"dep-dropdown-id",children:ye.role}),t.jsx("span",{className:"dep-dropdown-title",children:ye.name})]},ye.id)),!se&&ie.filter(ye=>ye.state!=="terminated").length===0&&t.jsx("div",{className:"dep-dropdown-empty",children:"No agents available"}),ne&&t.jsx("div",{className:"dep-dropdown-item",onMouseDown:ye=>ye.preventDefault(),onClick:()=>{we(null),D(!1)},children:t.jsx("span",{className:"dep-dropdown-title",children:"Clear selection"})})]})]})]})]});return e?t.jsx("div",{className:"modal-overlay open",onClick:Re,onKeyDown:pe,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg new-task-modal",onClick:ye=>ye.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:"New Task"}),t.jsx("button",{className:"modal-close",onClick:Re,disabled:b,"aria-label":"Close",children:"×"})]}),t.jsxs("div",{className:"modal-body",children:[!et&&t.jsx(vg,{hasAiProvider:Fe,hasGithub:at}),t.jsx(cg,{mode:"create",description:d,onDescriptionChange:m,dependencies:h,onDependenciesChange:f,executorModel:x,onExecutorModelChange:y,validatorModel:j,onValidatorModelChange:N,presetMode:T,onPresetModeChange:U,selectedPresetId:z,onSelectedPresetIdChange:M,selectedWorkflowSteps:R,onWorkflowStepsChange:rt,onDefaultOnApplied:Oe,pendingImages:p,onImagesChange:g,tasks:i,projectId:s,disabled:b,addToast:o,isActive:e,onPlanningMode:l,onSubtaskBreakdown:c,onClose:Re,planningModel:C,onPlanningModelChange:w,thinkingLevel:_,onThinkingLevelChange:S,reviewLevel:te,onReviewLevelChange:E,priority:$,onPriorityChange:P,nodeId:k,onNodeIdChange:O,nodeOptions:Ye,renderBelowPrimary:tt,hideDependencies:!0,autoExpandMoreOptionsOnSelection:!1})]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:Re,disabled:b,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:Ue,disabled:!d.trim()||b,children:b?"Creating...":"Create Task"})]})]})}):null}function Us(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 Nh(e,n){return!Number.isFinite(e)||!Number.isFinite(n)||n<=0?"—":`${(e/n*100).toFixed(1)}%`}function jT(e,n){if(n<=0)return"normal";const s=e/n;return s>=.85?"critical":s>=.65?"warning":"normal"}function kT(e,n){if(n<=0)return"normal";const s=e/n;return s>=.5?"critical":s>=.25?"warning":"normal"}function wT(e,n){if(n<=0)return"normal";const s=e/n;return s>=.9?"critical":s>=.75?"warning":"normal"}function mc(e){return e==="critical"?"system-stats-modal__value--critical":e==="warning"?"system-stats-modal__value--warning":""}function NT(e){if(!e)return"Not yet";const n=new Date(e);return Number.isNaN(n.getTime())?"Not yet":n.toLocaleString()}function ST({isOpen:e,onClose:n,projectId:s}){const[i,r]=a.useState(null),[o,l]=a.useState(!1),[c,u]=a.useState(null),[d,m]=a.useState(!0),[h,f]=a.useState(90),[p,g]=a.useState(!1),[b,v]=a.useState(!1),[x,y]=a.useState(null),[j,N]=a.useState(null),[C,w]=a.useState(null),_=a.useCallback(async O=>{l(!0);try{const ne=await ok(s);r(ne),u(null),w(Date.now()),O?.preserveKillResult||y(null)}catch(ne){u(ne instanceof Error?ne.message:"Failed to load system stats")}finally{l(!1)}},[s]);a.useEffect(()=>{if(!e)return;_();const O=window.setInterval(()=>{_()},5e3);return()=>{window.clearInterval(O)}},[e,_]),a.useEffect(()=>{if(!e)return;(async()=>{try{const ne=await Ji();m(ne.vitestAutoKillEnabled??!0),f(ne.vitestKillThresholdPct??90),N(null)}catch(ne){N(ne instanceof Error?ne.message:"Failed to load vitest settings")}})()},[e]),a.useEffect(()=>{if(!e)return;const O=ne=>{ne.key==="Escape"&&n()};return document.addEventListener("keydown",O),()=>document.removeEventListener("keydown",O)},[e,n]);const S=a.useMemo(()=>{if(!i)return[];const O=i.systemStats,ne=mc(jT(O.heapUsed,O.heapLimit)),we=mc(kT(O.rss,O.systemTotalMem));return[{label:"RSS",value:Us(O.rss),detail:Nh(O.rss,O.systemTotalMem),className:we},{label:"Heap Used",value:Us(O.heapUsed),detail:`of ${Us(O.heapTotal)}`,className:ne},{label:"Heap Limit",value:Us(O.heapLimit),detail:"V8 limit"},{label:"External",value:Us(O.external)},{label:"Array Buffers",value:Us(O.arrayBuffers)}]},[i]),z=a.useCallback(async O=>{m(O);try{await fn({vitestAutoKillEnabled:O}),N(null)}catch(ne){N(ne instanceof Error?ne.message:"Failed to save vitest settings")}},[]),M=a.useCallback(async O=>{const ne=Math.min(99,Math.max(50,Number.isFinite(O)?Math.round(O):90));f(ne);try{await fn({vitestKillThresholdPct:ne}),N(null)}catch(we){N(we instanceof Error?we.message:"Failed to save vitest settings")}},[]),T=a.useCallback(async()=>{if(!p){if(!b){v(!0);return}g(!0);try{const O=await lk(s);y(O),v(!1),await _({preserveKillResult:!0})}catch(O){u(O instanceof Error?O.message:"Failed to kill vitest processes")}finally{g(!1)}}},[b,p,_,s]);if(!e)return null;const U=i?.systemStats,V=o&&!!i,L=C?`Updated ${new Date(C).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`:"Waiting for first update",R=i?.taskStats,F=U?U.systemTotalMem-U.systemFreeMem:0,W=U?wT(F,U.systemTotalMem):"normal",G=U?mc(W):"",te=U&&Number.isFinite(U.systemTotalMem)&&U.systemTotalMem>0?Math.max(0,Math.min(100,F/U.systemTotalMem*100)):0,E=U?`System memory used: ${te.toFixed(1)}% (${Us(F)} of ${Us(U.systemTotalMem)})`:"System memory usage unavailable",$=i?.vitestProcessCount,P=x?x.killed>0?"system-stats-modal__kill-result system-stats-modal__kill-result--success":"system-stats-modal__kill-result system-stats-modal__kill-result--error":"",k=NT(i?.vitestLastAutoKillAt);return t.jsx("div",{className:"modal-overlay open",role:"dialog","aria-modal":"true","aria-labelledby":"system-stats-modal-title",onClick:O=>{O.target===O.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(br,{}),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:L})]}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>void _(),title:"Refresh","aria-label":"Refresh system stats",children:t.jsx($n,{size:16,className:V?"system-stats-modal__refresh--spinning":void 0})}),t.jsx("button",{type:"button",className:"modal-close",onClick:n,"aria-label":"Close",children:t.jsx(Jt,{})})]})]}),o&&!i&&t.jsx("div",{className:"system-stats-modal__state",children:"Loading system stats…"}),c&&!i&&t.jsx("div",{className:"system-stats-modal__state system-stats-modal__state--error",role:"alert",children:c}),i&&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:S.map(O=>t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:O.label}),t.jsxs("dd",{children:[t.jsx("span",{className:`system-stats-modal__value ${O.className}`.trim(),children:O.value}),O.detail?t.jsx("span",{className:"system-stats-modal__detail",children:O.detail}):null]})]},O.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",children:[t.jsx("dt",{children:"Load Avg"}),t.jsx("dd",{children:U?.loadAvg.map(O=>O.toFixed(2)).join(" ")??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Cores"}),t.jsx("dd",{children:U?.cpuCount??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Platform"}),t.jsx("dd",{children:U?.platform??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Node"}),t.jsx("dd",{children:U?.nodeVersion??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"PID"}),t.jsx("dd",{children:U?.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 ${G}`.trim(),children:U?Us(F):"—"}),t.jsx("span",{className:"system-stats-modal__detail",children:U?`${Nh(F,U.systemTotalMem)} of ${Us(U.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(te),"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:`${te}%`}})})})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Memory Free"}),t.jsx("dd",{children:U?Us(U.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:R?.total??0})]}),Object.entries(R?.byColumn??{}).map(([O,ne])=>t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:O}),t.jsx("dd",{children:ne})]},O))]})]}),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:R?.agents.idle??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"active"}),t.jsx("dd",{children:R?.agents.active??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"running"}),t.jsx("dd",{children:R?.agents.running??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"error"}),t.jsx("dd",{children:R?.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(tv,{}),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:$??"—"})]})}),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 T(),disabled:p||$===0,children:[t.jsx(av,{}),t.jsx("span",{children:b?"Confirm Kill?":"Kill Vitest Processes"})]})}),t.jsxs("label",{className:"system-stats-modal__toggle-row",children:[t.jsx("input",{type:"checkbox",checked:d,onChange:O=>{z(O.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:h,"aria-label":"Kill threshold slider (%)",onChange:O=>{const ne=Number.parseInt(O.target.value,10);M(Number.isNaN(ne)?90:ne)}}),t.jsx("input",{id:"vitest-threshold-number",type:"number",className:"input",min:50,max:99,value:h,"aria-label":"Kill threshold (%)",onChange:O=>{const ne=Number.parseInt(O.target.value,10);M(Number.isNaN(ne)?90:ne)},onBlur:()=>{M(h)}})]})]}),x&&t.jsxs("p",{className:P,children:["Killed ",x.killed," processes"]}),t.jsxs("p",{className:"system-stats-modal__last-kill",children:["Last auto-kill: ",k]}),j&&t.jsx("p",{className:"system-stats-modal__kill-result system-stats-modal__kill-result--error",children:j})]})]})]}),c&&i&&t.jsxs("div",{className:"system-stats-modal__footer-error",children:["Latest refresh failed: ",c]})]})})}const CT=5e3;function ET(e={}){const{projectId:n,type:s,limit:i=50,autoRefresh:r=!0,useCentralFeed:o=!1}=e,[l,c]=a.useState([]),[u,d]=a.useState(!1),[m,h]=a.useState(null),[f,p]=a.useState(!1),g=a.useRef(null),b=a.useRef(void 0),v=a.useCallback(async()=>{try{d(!0),h(null);let j;o?j=await du({limit:i,projectId:n,type:s}):j=(await iu({limit:i,type:s,projectId:n})).map(C=>({...C,projectId:n??"",projectName:""})),c(j),p(j.length===i),j.length>0&&(b.current=j[j.length-1].timestamp)}catch(j){h(j instanceof Error?j.message:"Failed to load activity log")}finally{d(!1)}},[i,n,s,o]),x=a.useCallback(async()=>{if(b.current)try{d(!0);let j;o?j=await du({limit:i,projectId:n,type:s,since:b.current}):j=(await iu({limit:i,type:s,since:b.current,projectId:n})).map(C=>({...C,projectId:n??"",projectName:""})),c(N=>[...N,...j]),p(j.length===i),j.length>0&&(b.current=j[j.length-1].timestamp)}catch(j){h(j instanceof Error?j.message:"Failed to load more entries")}finally{d(!1)}},[i,n,s,o]),y=a.useCallback(()=>{c([]),p(!1),b.current=void 0},[]);return a.useEffect(()=>{v()},[v]),a.useEffect(()=>{if(r)return g.current=setInterval(()=>{v()},CT),()=>{g.current&&(clearInterval(g.current),g.current=null)}},[r,v]),{entries:l,loading:u,error:m,refresh:v,clear:y,hasMore:f,loadMore:x}}const hc={"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"},MT={"task:created":t.jsx(cn,{size:14,className:"activity-icon created"}),"task:moved":t.jsx(Mr,{size:14,className:"activity-icon moved"}),"task:updated":t.jsx($n,{size:14,className:"activity-icon updated"}),"task:deleted":t.jsx(Jt,{size:14,className:"activity-icon deleted"}),"task:merged":t.jsx(kn,{size:14,className:"activity-icon merged"}),"task:failed":t.jsx(_r,{size:14,className:"activity-icon failed"}),"settings:updated":t.jsx(ur,{size:14,className:"activity-icon settings"})};function _T(e){const n=new Date(e),i=new Date().getTime()-n.getTime(),r=Math.floor(i/6e4),o=Math.floor(i/36e5),l=Math.floor(i/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 AT({isOpen:e,onClose:n,tasks:s,onOpenTaskDetail:i,projectId:r,projects:o=[],onProjectFilterChange:l,currentProject:c}){const[u,d]=a.useState("all"),[m,h]=a.useState(r||"all"),[f,p]=a.useState(!1);a.useEffect(()=>{h(r||"all")},[r]);const g=u==="all"?void 0:u,b=m==="all"?void 0:m,v=!c&&o.length>0,{entries:x,loading:y,error:j,refresh:N,hasMore:C}=ET({projectId:b,type:g,limit:100,autoRefresh:e,useCentralFeed:v}),w=x.map(T=>({id:T.id,timestamp:T.timestamp,type:T.type,taskId:T.taskId,taskTitle:T.taskTitle,details:T.details,metadata:T.metadata,projectId:T.projectId,projectName:T.projectName})),_=async()=>{try{await Dj(),N(),p(!1)}catch{p(!1)}},S=T=>{i&&i(T)},z=T=>{h(T),l?.(T==="all"?void 0:T)};a.useEffect(()=>{if(!e)return;const T=U=>{U.key==="Escape"&&(f?p(!1):n())};return document.addEventListener("keydown",T),()=>document.removeEventListener("keydown",T)},[e,n,f]);const M=u!=="all"||m!=="all";return e?t.jsx("div",{className:"modal-overlay open",onClick:T=>{T.target===T.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(gr,{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(Gn,{size:14}),t.jsxs("select",{value:m,onChange:T=>z(T.target.value),className:"activity-log-filter-select","data-testid":"activity-project-filter",children:[t.jsx("option",{value:"all",children:"All Projects"}),o.map(T=>t.jsx("option",{value:T.id,children:T.name},T.id))]})]}),t.jsxs("div",{className:"activity-log-filter",children:[t.jsx(wo,{size:14}),t.jsxs("select",{value:u,onChange:T=>d(T.target.value),className:"activity-log-filter-select","data-testid":"activity-filter",children:[t.jsx("option",{value:"all",children:"All Events"}),Object.entries(hc).map(([T,U])=>t.jsx("option",{value:T,children:U},T))]})]}),t.jsx("button",{className:"activity-log-refresh",onClick:()=>N(),title:"Refresh","data-testid":"activity-refresh",children:y?t.jsx(lt,{size:14,className:"spin"}):t.jsx($n,{size:14})}),w.length>0&&t.jsx("button",{className:"activity-log-clear",onClick:()=>p(!0),title:"Clear Log","data-testid":"activity-clear",children:t.jsx(ln,{size:14})})]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",title:"Close","data-testid":"activity-close",children:"×"})]}),M&&t.jsxs("div",{className:"activity-log-active-filters",children:[t.jsx("span",{className:"activity-log-filter-label",children:"Active filters:"}),m!=="all"&&t.jsxs("span",{className:"activity-log-filter-badge",children:["Project: ",o.find(T=>T.id===m)?.name||m]}),u!=="all"&&t.jsxs("span",{className:"activity-log-filter-badge",children:["Type: ",hc[u]]}),t.jsx("button",{className:"activity-log-clear-filters",onClick:()=>{d("all"),h("all"),l?.(void 0)},children:"Clear all"})]}),t.jsxs("div",{className:"activity-log-content","data-testid":"activity-log-content",children:[j&&t.jsxs("div",{className:"activity-log-error","data-testid":"activity-error",children:[t.jsx(ms,{size:16}),t.jsx("span",{children:j})]}),w.length===0&&!y&&!j&&t.jsxs("div",{className:"activity-log-empty","data-testid":"activity-empty",children:[t.jsx(gr,{size:48,className:"activity-log-empty-icon"}),t.jsx("p",{children:M?"No activity matches the current filters":"No activity recorded yet"}),M&&t.jsx("button",{className:"btn btn-secondary",onClick:()=>{d("all"),h("all"),l?.(void 0)},children:"Clear Filters"})]}),t.jsx("div",{className:"activity-log-list",children:w.map(T=>t.jsxs("div",{className:"activity-log-entry","data-testid":"activity-entry",children:[t.jsx("div",{className:"activity-log-entry-icon",children:MT[T.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:hc[T.type]}),t.jsx("span",{className:"activity-log-entry-time",children:_T(T.timestamp)})]}),t.jsxs("div",{className:"activity-log-entry-details",children:[T.taskId&&t.jsx("button",{className:"activity-log-task-link",onClick:()=>S(T.taskId),"data-testid":"activity-task-link",children:T.taskId}),T.taskTitle&&t.jsx("span",{className:"activity-log-task-title",children:T.taskTitle}),t.jsx("span",{className:"activity-log-entry-text",children:T.details})]}),T.metadata&&Object.keys(T.metadata).length>0&&t.jsxs("div",{className:"activity-log-entry-metadata",children:[typeof T.metadata.from=="string"&&typeof T.metadata.to=="string"&&t.jsxs("span",{className:"activity-log-metadata-item",children:[T.metadata.from," → ",T.metadata.to]}),typeof T.metadata.merged=="boolean"&&t.jsx("span",{className:`activity-log-metadata-item ${T.metadata.merged?"success":"error"}`,children:T.metadata.merged?"Merged":"Not merged"})]})]})]},T.id))}),C&&!y&&t.jsx("button",{className:"activity-log-load-more",onClick:N,"data-testid":"activity-load-more",children:"Load More"}),y&&w.length>0&&t.jsx("div",{className:"activity-log-loading",children:t.jsx(lt,{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:_,children:"Clear Log"})]})]})})]})}):null}const er=[{id:"status",label:"Status",icon:lp},{id:"changes",label:"Changes",icon:Sc},{id:"commits",label:"Commits",icon:Ar},{id:"branches",label:"Branches",icon:Vs},{id:"worktrees",label:"Worktrees",icon:rx},{id:"stashes",label:"Stashes",icon:Fo},{id:"remotes",label:"Remotes",icon:ip}];function Sh({status:e}){switch(e){case"added":case"untracked":return t.jsx(Ub,{size:14,className:"gm-file-icon gm-file-added"});case"modified":return t.jsx(np,{size:14,className:"gm-file-icon gm-file-modified"});case"deleted":return t.jsx(zb,{size:14,className:"gm-file-icon gm-file-deleted"});case"renamed":case"copied":return t.jsx(Bi,{size:14,className:"gm-file-icon gm-file-renamed"});default:return t.jsx(Hb,{size:14,className:"gm-file-icon"})}}function Ch({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 RT(e){return a.useCallback(async(n,s)=>{try{await navigator.clipboard.writeText(n),e(`Copied ${s||"to clipboard"}`,"success")}catch{e("Failed to copy","error")}},[e])}function ja(e){if(!e)return"—";const n=new Date(e);if(isNaN(n.getTime()))return"—";const i=new Date().getTime()-n.getTime(),r=Math.floor(i/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 TT({isOpen:e,onClose:n,tasks:s,addToast:i,projectId:r}){const o=Ws(),[l,c]=a.useState("status"),[u,d]=a.useState(!1),[m,h]=a.useState(null),f=a.useRef(null);oi(f,e,"fusion:git-modal-size");const p=Mi(n),g=RT(i),[b,v]=a.useState(null),[x,y]=a.useState([]),[j,N]=a.useState(new Set),[C,w]=a.useState(""),[_,S]=a.useState(!1),[z,M]=a.useState(null),[T,U]=a.useState(!1),[V,L]=a.useState(null),[R,F]=a.useState(null),W=a.useRef(0),[G,te]=a.useState([]),[E,$]=a.useState(null),[P,k]=a.useState(null),[O,ne]=a.useState(!1),[we,ie]=a.useState(20),[ce,ke]=a.useState(""),[D,se]=a.useState([]),[Z,ge]=a.useState(""),[ue,me]=a.useState(""),[ae,be]=a.useState(""),[Ae,Fe]=a.useState(null),[at,et]=a.useState([]),[Ye,rt]=a.useState(!1),[Oe,We]=a.useState(null),[oe,xe]=a.useState(null),[ee,Re]=a.useState(!1),[Ue,pe]=a.useState([]),[Me,ze]=a.useState([]),[tt,ye]=a.useState(""),[de,Ie]=a.useState(null),[fe,_e]=a.useState(null),[Ge,Pe]=a.useState(null),ft=a.useCallback(async()=>{if(e){d(!0),h(null);try{switch(l){case"status":{const B=await Os(r);v(B);break}case"changes":{const[B,he]=await Promise.all([Os(r),na(r)]);v(B),y(he),N(new Set),F(null),M(null),L(null);break}case"commits":{const B=await Uy(we,r);te(B);break}case"branches":{const[B,he]=await Promise.all([Oa(r),Os(r)]);se(B),v(he);break}case"worktrees":{const B=await Vy(r);pe(B);break}case"stashes":{const B=await Jr(r);ze(B);break}case"remotes":{const B=await Os(r);v(B);break}}}catch(B){h(je(B)||"Failed to fetch git data"),i(je(B)||"Failed to fetch git data","error")}finally{d(!1)}}},[l,e,we,i,r]);a.useEffect(()=>{e&&ft()},[ft,e]),a.useEffect(()=>{if(!e)return;const B=he=>{if(he.key==="Escape"){n();return}if((he.key==="ArrowUp"||he.key==="ArrowDown")&&he.altKey){he.preventDefault();const De=er.findIndex(A=>A.id===l);he.key==="ArrowUp"&&De>0?c(er[De-1].id):he.key==="ArrowDown"&&De<er.length-1&&c(er[De+1].id)}};return document.addEventListener("keydown",B),()=>document.removeEventListener("keydown",B)},[e,n,l]);const Y=a.useCallback(async B=>{try{await Zd(B,r),i(`Staged ${B.length} file(s)`,"success");const he=await na(r);y(he),N(new Set),F(null),M(null),L(null)}catch(he){i(je(he)||"Failed to stage files","error")}},[i,r]),le=a.useCallback(async B=>{try{await tj(B,r),i(`Unstaged ${B.length} file(s)`,"success");const he=await na(r);y(he),N(new Set),F(null),M(null),L(null)}catch(he){i(je(he)||"Failed to unstage files","error")}},[i,r]),ve=a.useCallback(async B=>{if(await o.confirm({title:"Discard Changes",message:`Discard changes to ${B.length} file(s)? This cannot be undone.`,danger:!0}))try{await nj(B,r),i(`Discarded changes to ${B.length} file(s)`,"success");const[De,A]=await Promise.all([na(r),Os(r)]);y(De),v(A),N(new Set),F(null),M(null),L(null)}catch(De){i(je(De)||"Failed to discard changes","error")}},[i,r,confirm]),nt=a.useCallback(async B=>{if(B.preventDefault(),!!C.trim()){S(!0);try{const he=await eu(C.trim(),r);i(`Committed: ${he.hash}`,"success"),w("");const[De,A]=await Promise.all([na(r),Os(r)]);y(De),v(A),F(null),M(null),L(null)}catch(he){i(je(he)||"Failed to commit","error")}finally{S(!1)}}},[C,i,r]),Q=a.useCallback(async()=>{if(C.trim()){S(!0);try{const B=x.filter(X=>!X.staged).map(X=>X.file);B.length>0&&await Zd(B,r);const he=await eu(C.trim(),r);i(`Committed: ${he.hash}`,"success"),w("");const[De,A]=await Promise.all([na(r),Os(r)]);y(De),v(A),F(null),M(null),L(null)}catch(B){i(je(B)||"Failed to commit","error")}finally{S(!1)}}},[C,x,i,r]),Je=a.useCallback(async(B,he)=>{F({file:B,staged:he}),U(!0),L(null);const De=W.current+1;W.current=De;try{const A=await ej(B,he,r);if(W.current!==De)return;M(A)}catch(A){if(W.current!==De)return;const X=je(A)||"Failed to load file diff";M(null),L(X),i(X,"error")}finally{W.current===De&&U(!1)}},[i,r]),ut=a.useCallback(B=>{N(he=>{const De=new Set(he);return De.has(B)?De.delete(B):De.add(B),De})},[]),ht=a.useCallback(async B=>{if(E===B){$(null),k(null);return}$(B),ne(!0);try{const he=await Co(B,r);k(he)}catch(he){i(je(he)||"Failed to load diff","error"),k(null)}finally{ne(!1)}},[E,i,r]),Et=a.useCallback(()=>{ie(B=>Math.min(B+20,100))},[]),yt=a.useMemo(()=>{if(!ce.trim())return G;const B=ce.toLowerCase();return G.filter(he=>he.message.toLowerCase().includes(B)||he.author.toLowerCase().includes(B)||he.shortHash.toLowerCase().includes(B))},[G,ce]),bt=a.useCallback(async B=>{if(B.preventDefault(),!!Z.trim()){d(!0);try{await Wy(Z.trim(),ue.trim()||void 0,r),i(`Created branch ${Z}`,"success"),ge(""),me("");const he=await Oa(r);se(he)}catch(he){i(je(he)||"Failed to create branch","error")}finally{d(!1)}}},[Z,ue,i,r]),vt=a.useCallback(async B=>{d(!0);try{await Ky(B,r),i(`Switched to ${B}`,"success");const[he,De]=await Promise.all([Os(r),Oa(r)]);v(he),se(De)}catch(he){i(je(he)||"Failed to checkout branch","error")}finally{d(!1)}},[i,r]),qt=a.useCallback(async B=>{if(await o.confirm({title:"Delete Branch",message:`Delete branch "${B}"?`,danger:!0})){d(!0);try{await Xd(B,void 0,r),i(`Deleted branch ${B}`,"success");const De=await Oa(r);se(De)}catch(De){if(je(De).includes("not fully merged")){if(await o.confirm({title:"Force Delete Branch",message:"Branch has unmerged commits. Force delete?",danger:!0}))try{await Xd(B,!0,r),i(`Force deleted branch ${B}`,"success");const X=await Oa(r);se(X)}catch(X){i(je(X)||"Failed to delete branch","error")}}else i(je(De)||"Failed to delete branch","error")}finally{d(!1)}}},[i,r,confirm]),Tt=a.useMemo(()=>{if(!ae.trim())return D;const B=ae.toLowerCase();return D.filter(he=>he.name.toLowerCase().includes(B))},[D,ae]),At=a.useCallback(async B=>{if(Ae===B){Fe(null),et([]),We(null),xe(null);return}Fe(B),et([]),We(null),xe(null),rt(!0);try{const he=await qy(B,10,r);et(he)}catch{et([])}finally{rt(!1)}},[Ae,r]),Lt=a.useCallback(async B=>{if(Oe===B){We(null),xe(null);return}We(B),xe(null),Re(!0);try{const he=await Co(B,r);xe(he)}catch{xe(null)}finally{Re(!1)}},[Oe,r]),Vt=a.useCallback(()=>{Fe(null),et([]),We(null),xe(null)},[]),Kt=a.useCallback(async B=>{B.preventDefault(),Ie("create");try{await Qy(tt.trim()||void 0,r),i("Changes stashed","success"),ye("");const he=await Jr(r);ze(he)}catch(he){i(je(he)||"Failed to stash changes","error")}finally{Ie(null)}},[tt,i,r]),Ot=a.useCallback(async(B,he=!1)=>{Ie(`apply-${B}`);try{await Xy(B,he,r),i(he?"Stash popped":"Stash applied","success");const De=await Jr(r);ze(De)}catch(De){i(je(De)||"Failed to apply stash","error")}finally{Ie(null)}},[i,r]),Wt=a.useCallback(async B=>{if(await o.confirm({title:"Drop Stash",message:`Drop stash@{${B}}? This cannot be undone.`,danger:!0})){Ie(`drop-${B}`);try{await Zy(B,r),i("Stash dropped","success");const De=await Jr(r);ze(De)}catch(De){i(je(De)||"Failed to drop stash","error")}finally{Ie(null)}}},[i,r,confirm]),_t=a.useCallback(async()=>{_e("fetch");try{const B=await Gy(void 0,r);Pe(B),i(B.message||"Fetch completed",B.fetched?"success":"info");const he=await Os(r);v(he)}catch(B){i(je(B)||"Fetch failed","error")}finally{_e(null)}},[i,r]),St=a.useCallback(async()=>{_e("pull");try{const B=await Jy(r);Pe(B),B.conflict?i("Merge conflict detected. Resolve manually.","error"):i(B.message||"Pull completed","success");const he=await Os(r);v(he)}catch(B){i(je(B)||"Pull failed","error")}finally{_e(null)}},[i,r]),Yt=a.useCallback(async()=>{_e("push");try{const B=await Yy(r);Pe(B),i(B.message||"Push completed","success");const he=await Os(r);v(he)}catch(B){i(je(B)||"Push failed","error")}finally{_e(null)}},[i,r]),Xt=a.useMemo(()=>x.filter(B=>B.staged),[x]),Qt=a.useMemo(()=>x.filter(B=>!B.staged),[x]);return e?t.jsx("div",{className:"modal-overlay open",...p,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal gm-modal",ref:f,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h3",{children:[t.jsx(Cc,{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:ft,disabled:u,title:"Refresh",children:t.jsx($n,{size:14,className:u?"spin":""})}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:t.jsx(Jt,{size:18})})]})]}),t.jsxs("div",{className:"gm-layout",children:[t.jsx("nav",{className:"gm-sidebar",role:"tablist","aria-label":"Git Manager Sections",children:er.map(B=>{const he=B.icon;return t.jsxs("button",{role:"tab","aria-selected":l===B.id,className:`gm-nav-item${l===B.id?" active":""}`,onClick:()=>c(B.id),children:[t.jsx(he,{size:16}),t.jsx("span",{className:"gm-nav-label",children:B.label})]},B.id)})}),t.jsxs("div",{className:"gm-content",role:"tabpanel",children:[u&&t.jsxs("div",{className:"gm-loading",children:[t.jsx(lt,{size:24,className:"spin"}),t.jsx("span",{children:"Loading..."})]}),m&&!u&&t.jsxs("div",{className:"gm-error",children:[t.jsx(ms,{size:18}),t.jsx("span",{children:m}),t.jsx("button",{className:"btn btn-sm",onClick:ft,children:"Retry"})]}),l==="status"&&!u&&b&&t.jsx(PT,{status:b,copyToClipboard:g}),l==="changes"&&!u&&t.jsx(IT,{status:b,stagedFiles:Xt,unstagedFiles:Qt,selectedFiles:j,toggleFileSelection:ut,onStageFiles:Y,onUnstageFiles:le,onDiscardChanges:ve,onSelectDiffFile:Je,selectedDiffTarget:R,changeDiff:z,loadingChangeDiff:T,changeDiffError:V,commitMessage:C,setCommitMessage:w,onCommit:nt,onStageAllAndCommit:Q,committing:_}),l==="commits"&&!u&&t.jsx($T,{commits:yt,commitSearch:ce,setCommitSearch:ke,selectedCommit:E,commitDiff:P,loadingDiff:O,onCommitClick:ht,onLoadMore:Et,canLoadMore:G.length>=we&&we<100,copyToClipboard:g}),l==="branches"&&!u&&t.jsx(DT,{branches:Tt,branchSearch:ae,setBranchSearch:be,newBranchName:Z,setNewBranchName:ge,branchBase:ue,setBranchBase:me,onCreateBranch:bt,onCheckoutBranch:vt,onDeleteBranch:qt,loading:u,allBranches:D,selectedBranch:Ae,branchCommits:at,loadingBranchCommits:Ye,expandedBranchCommit:Oe,branchCommitDiff:oe,loadingBranchCommitDiff:ee,onSelectBranch:At,onBranchCommitClick:Lt,onCloseBranchDetails:Vt}),l==="worktrees"&&!u&&t.jsx(LT,{worktrees:Ue}),l==="stashes"&&!u&&t.jsx(zT,{stashes:Me,stashMessage:tt,setStashMessage:ye,onCreateStash:Kt,onApplyStash:Ot,onDropStash:Wt,stashLoading:de}),l==="remotes"&&!u&&t.jsx(FT,{status:b,remoteLoading:fe,lastRemoteResult:Ge,onFetch:_t,onPull:St,onPush:Yt,addToast:i,projectId:r,copyToClipboard:g})]})]})]})}):null}function PT({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(Vs,{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(Ui,{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(ms,{size:12}),"Modified"]}):t.jsxs(t.Fragment,{children:[t.jsx(kn,{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(Fi,{size:12}),e.ahead]}),e.behind>0&&t.jsxs("span",{className:"gm-behind",title:`${e.behind} commit(s) behind`,children:[t.jsx(Er,{size:12}),e.behind]}),e.ahead===0&&e.behind===0&&t.jsxs("span",{className:"gm-in-sync",children:[t.jsx(kn,{size:12}),"Up to date"]})]})]})]})]})}function IT({status:e,stagedFiles:n,unstagedFiles:s,selectedFiles:i,toggleFileSelection:r,onStageFiles:o,onUnstageFiles:l,onDiscardChanges:c,onSelectDiffFile:u,selectedDiffTarget:d,changeDiff:m,loadingChangeDiff:h,changeDiffError:f,commitMessage:p,setCommitMessage:g,onCommit:b,onStageAllAndCommit:v,committing:x}){const y=s.filter(N=>i.has(`unstaged:${N.file}`)),j=n.filter(N=>i.has(`staged:${N.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(Vs,{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(N=>N.file)),title:"Stage selected",children:[t.jsx(cn,{size:12})," Stage (",y.length,")"]}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>c(y.map(N=>N.file)),title:"Discard selected",children:t.jsx(_r,{size:12})})]}),s.length>0&&t.jsx("button",{className:"btn btn-sm",onClick:()=>o(s.map(N=>N.file)),title:"Stage all",children:"Stage All"})]})]}),t.jsx("div",{className:"gm-file-list",children:s.length===0?t.jsx("div",{className:"gm-empty",children:"No unstaged changes"}):s.map(N=>{const C=d?.file===N.file&&d.staged===!1;return t.jsxs("div",{className:`gm-file-item${C?" active":""}`,onClick:()=>u(N.file,!1),role:"button",tabIndex:0,onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),u(N.file,!1))},children:[t.jsx("label",{className:"gm-file-checkbox",onClick:w=>w.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:i.has(`unstaged:${N.file}`),onChange:()=>r(`unstaged:${N.file}`)})}),t.jsx(Sh,{status:N.status}),t.jsx("span",{className:"gm-file-name",title:N.file,children:t.jsx("bdo",{dir:"ltr",children:N.file})}),t.jsx(Ch,{status:N.status}),t.jsx("button",{className:"gm-icon-btn",onClick:w=>{w.stopPropagation(),o([N.file])},title:"Stage file",children:t.jsx(cn,{size:12})})]},`unstaged:${N.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:[j.length>0&&t.jsxs("button",{className:"btn btn-sm",onClick:()=>l(j.map(N=>N.file)),title:"Unstage selected",children:["Unstage (",j.length,")"]}),n.length>0&&t.jsx("button",{className:"btn btn-sm",onClick:()=>l(n.map(N=>N.file)),title:"Unstage all",children:"Unstage All"})]})]}),t.jsx("div",{className:"gm-file-list",children:n.length===0?t.jsx("div",{className:"gm-empty",children:"No staged changes"}):n.map(N=>{const C=d?.file===N.file&&d.staged===!0;return t.jsxs("div",{className:`gm-file-item staged${C?" active":""}`,onClick:()=>u(N.file,!0),role:"button",tabIndex:0,onKeyDown:w=>{(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),u(N.file,!0))},children:[t.jsx("label",{className:"gm-file-checkbox",onClick:w=>w.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:i.has(`staged:${N.file}`),onChange:()=>r(`staged:${N.file}`)})}),t.jsx(Sh,{status:N.status}),t.jsx("span",{className:"gm-file-name",title:N.file,children:t.jsx("bdo",{dir:"ltr",children:N.file})}),t.jsx(Ch,{status:N.status}),t.jsx("button",{className:"gm-icon-btn",onClick:w=>{w.stopPropagation(),l([N.file])},title:"Unstage file",children:t.jsx(Jt,{size:12})})]},`staged:${N.file}`)})})]})]}),t.jsx("div",{className:"gm-changes-diff",children:d||h||m||f?t.jsxs("div",{className:"gm-diff-section",children:[d&&t.jsxs("div",{className:"gm-diff-target",children:[t.jsx(Sc,{size:14}),t.jsxs("span",{children:[d.staged?"Staged":"Unstaged"," diff: "]}),t.jsx("code",{children:d.file})]}),h&&t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(lt,{size:16,className:"spin"}),"Loading diff..."]}),f&&!h&&t.jsx("div",{className:"gm-diff-error",children:f}),m&&!h&&t.jsxs("div",{className:"gm-diff-viewer",children:[m.stat&&t.jsx("pre",{className:"gm-diff-stat",children:m.stat}),t.jsx("pre",{className:"gm-diff-patch",children:m.patch})]})]}):t.jsxs("div",{className:"gm-diff-empty",children:[t.jsx(Sc,{size:20}),t.jsx("span",{children:"Select a file to view its diff"})]})})]}),t.jsxs("form",{className:"gm-commit-form",onSubmit:b,children:[t.jsx("textarea",{className:"gm-commit-input",placeholder:"Commit message...",value:p,onChange:N=>g(N.target.value),rows:3,disabled:x}),t.jsxs("div",{className:"gm-commit-actions",children:[t.jsxs("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:x||!p.trim()||n.length===0,title:n.length===0?"No staged changes to commit":"Commit staged changes",children:[x?t.jsx(lt,{size:14,className:"spin"}):t.jsx(zi,{size:14}),"Commit"]}),s.length>0&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:v,disabled:x||!p.trim(),title:"Stage all and commit",children:"Stage All & Commit"})]})]})]})}function $T({commits:e,commitSearch:n,setCommitSearch:s,selectedCommit:i,commitDiff:r,loadingDiff:o,onCommitClick:l,onLoadMore:c,canLoadMore:u,copyToClipboard:d}){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(wi,{size:14}),t.jsx("input",{type:"text",placeholder:"Search commits...",value:n,onChange:m=>s(m.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((m,h)=>t.jsxs("div",{className:"gm-commit-item",children:[t.jsxs("div",{className:"gm-commit-graph",children:[t.jsx("div",{className:"gm-commit-dot"}),h<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(m.hash),children:[t.jsxs("div",{className:"gm-commit-top-row",children:[t.jsx("code",{className:"gm-hash",children:m.shortHash}),t.jsx("span",{className:"gm-commit-message",title:m.message,children:m.message})]}),t.jsxs("div",{className:"gm-commit-meta",children:[t.jsx("span",{children:m.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:ja(m.date)}),m.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:()=>d(m.hash,"commit hash"),title:"Copy full hash",children:t.jsx(Ui,{size:12})})}),i===m.hash&&t.jsx("div",{className:"gm-commit-diff",children:o?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(lt,{size:16,className:"spin"}),"Loading diff..."]}):r?t.jsxs(t.Fragment,{children:[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"})})]})]},m.hash))}),u&&t.jsx("button",{className:"gm-load-more",onClick:c,children:"Load more commits"})]})}function DT({branches:e,branchSearch:n,setBranchSearch:s,newBranchName:i,setNewBranchName:r,branchBase:o,setBranchBase:l,onCreateBranch:c,onCheckoutBranch:u,onDeleteBranch:d,loading:m,allBranches:h,selectedBranch:f,branchCommits:p,loadingBranchCommits:g,expandedBranchCommit:b,branchCommitDiff:v,loadingBranchCommitDiff:x,onSelectBranch:y,onBranchCommitClick:j,onCloseBranchDetails:N}){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(wi,{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:i,onChange:C=>r(C.target.value),disabled:m}),t.jsxs("select",{value:o,onChange:C=>l(C.target.value),disabled:m,className:"gm-branch-select",children:[t.jsx("option",{value:"",children:"Base: HEAD"}),h.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:m||!i.trim(),children:[t.jsx(cn,{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(Bn,{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:ja(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:w=>{w.stopPropagation(),u(C.name)},disabled:m,title:"Checkout",children:t.jsx(Vs,{size:14})}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:w=>{w.stopPropagation(),d(C.name)},disabled:m,title:"Delete",children:t.jsx(ln,{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(Ar,{size:14}),"Commits on ",C.name]}),t.jsx("button",{className:"gm-icon-btn",onClick:N,title:"Close","data-testid":"close-branch-details",children:t.jsx(Jt,{size:14})})]}),g?t.jsxs("div",{className:"gm-branch-details-loading",children:[t.jsx(lt,{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(w=>t.jsxs("div",{className:"gm-branch-commit",children:[t.jsxs("button",{className:"gm-branch-commit-row",onClick:()=>j(w.hash),"data-testid":`branch-commit-${w.shortHash}`,children:[t.jsx("span",{className:"gm-commit-hash",children:w.shortHash}),t.jsx("span",{className:"gm-commit-message",title:w.message,children:w.message}),t.jsxs("div",{className:"gm-commit-meta",children:[t.jsx("span",{children:w.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:ja(w.date)}),w.parents.length>1&&t.jsx("span",{className:"gm-merge-badge",children:"merge"})]})]}),b===w.hash&&t.jsx("div",{className:"gm-commit-diff",children:x?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(lt,{size:16,className:"spin"}),"Loading diff..."]}):v?t.jsxs(t.Fragment,{children:[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"})})]},w.hash))})]})]},C.name))})]})}function LT({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:hd(n.path)||n.path})]}),t.jsxs("div",{className:"gm-worktree-detail",children:[n.branch&&t.jsxs("span",{className:"gm-worktree-branch",children:[t.jsx(Vs,{size:12}),n.branch]}),n.taskId&&t.jsx("span",{className:"gm-worktree-task",children:n.taskId})]})]})},n.path))})]})}function zT({stashes:e,stashMessage:n,setStashMessage:s,onCreateStash:i,onApplyStash:r,onDropStash:o,stashLoading:l}){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:i,children:[t.jsx("input",{type:"text",placeholder:"Stash message (optional)",value:n,onChange:c=>s(c.target.value),disabled:l!==null}),t.jsxs("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:l!==null,children:[l==="create"?t.jsx(lt,{size:14,className:"spin"}):t.jsx(Fo,{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(c=>t.jsxs("div",{className:"gm-stash-item",children:[t.jsxs("div",{className:"gm-stash-info",children:[t.jsxs("span",{className:"gm-stash-ref",children:["stash@",`{${c.index}}`]}),t.jsx("span",{className:"gm-stash-message",children:c.message}),t.jsxs("div",{className:"gm-stash-meta",children:[c.branch&&t.jsxs("span",{className:"gm-stash-branch",children:[t.jsx(Vs,{size:12}),c.branch]}),t.jsx("span",{children:ja(c.date)})]})]}),t.jsxs("div",{className:"gm-stash-actions",children:[t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>r(c.index,!1),disabled:l!==null,title:"Apply stash (keep)",children:l===`apply-${c.index}`?t.jsx(lt,{size:14,className:"spin"}):"Apply"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>r(c.index,!0),disabled:l!==null,title:"Pop stash (apply and drop)",children:"Pop"}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>o(c.index),disabled:l!==null,title:"Drop stash",children:l===`drop-${c.index}`?t.jsx(lt,{size:14,className:"spin"}):t.jsx(ln,{size:14})})]})]},c.index))})]})}function FT({status:e,remoteLoading:n,lastRemoteResult:s,onFetch:i,onPull:r,onPush:o,addToast:l,projectId:c,copyToClipboard:u}){const d=ee=>{try{return new URL(ee).hostname}catch{return ee.replace(/^git@/,"").split(":")[0]||ee}},[m,h]=a.useState([]),[f,p]=a.useState(!1),[g,b]=a.useState(null),[v,x]=a.useState(""),[y,j]=a.useState(""),[N,C]=a.useState(null),[w,_]=a.useState(""),[S,z]=a.useState(""),[M,T]=a.useState(!1),[U,V]=a.useState([]),[L,R]=a.useState(!1),[F,W]=a.useState(null),[G,te]=a.useState([]),[E,$]=a.useState(!1),[P,k]=a.useState(null),O=m.find(ee=>ee.name===F),[ne,we]=a.useState(null),[ie,ce]=a.useState(null),[ke,D]=a.useState(!1),[se,Z]=a.useState(null),[ge,ue]=a.useState(null),[me,ae]=a.useState(!1);a.useEffect(()=>{be()},[]),a.useEffect(()=>{e&&e.ahead>0?Ae():e&&e.ahead===0&&V([])},[e?.ahead]),a.useEffect(()=>{m.length>0&&!F&&W(m[0].name)},[m]),a.useEffect(()=>{F?Fe(F):(te([]),k(null))},[F]),a.useEffect(()=>{F&&!m.find(ee=>ee.name===F)&&W(m.length>0?m[0].name:null)},[m,F]);const be=async()=>{p(!0);try{const ee=await Ty(c);h(ee)}catch(ee){l(je(ee)||"Failed to load remotes","error")}finally{p(!1)}},Ae=async()=>{R(!0);try{const ee=await By(c);V(ee)}catch{V([])}finally{R(!1)}},Fe=async ee=>{$(!0),k(null);try{const Re=await Hy(ee,void 0,10,c);te(Re)}catch(Re){k(je(Re)||"Failed to load remote commits"),te([])}finally{$(!1)}},at=Ws(),et=async ee=>{if(ee.preventDefault(),!(!v.trim()||!y.trim())){b("add");try{await Py(v.trim(),y.trim(),c),l(`Remote '${v}' added successfully`,"success"),x(""),j(""),T(!1),await be()}catch(Re){l(je(Re)||"Failed to add remote","error")}finally{b(null)}}},Ye=async ee=>{if(await at.confirm({title:"Remove Remote",message:`Are you sure you want to remove remote '${ee}'?`,danger:!0})){b(`remove-${ee}`);try{await Iy(ee,c),l(`Remote '${ee}' removed`,"success"),await be()}catch(Ue){l(je(Ue)||"Failed to remove remote","error")}finally{b(null)}}},rt=async ee=>{if(S.trim()){b(`rename-${ee}`);try{await $y(ee,S.trim(),c),l(`Remote renamed to '${S.trim()}'`,"success"),C(null),z(""),await be()}catch(Re){l(je(Re)||"Failed to rename remote","error")}finally{b(null)}}},Oe=async ee=>{if(w.trim()){b(`url-${ee}`);try{await Dy(ee,w.trim(),c),l("Remote URL updated","success"),C(null),_(""),await be()}catch(Re){l(je(Re)||"Failed to update remote URL","error")}finally{b(null)}}},We=a.useCallback(async(ee,Re)=>{if(Re==="ahead"){if(ne===ee){we(null),ce(null);return}we(ee),ce(null),D(!0);try{const Ue=await Co(ee);ce(Ue)}catch{ce(null)}finally{D(!1)}}else{if(se===ee){Z(null),ue(null);return}Z(ee),ue(null),ae(!0);try{const Ue=await Co(ee);ue(Ue)}catch{ue(null)}finally{ae(!1)}}},[ne,se]),oe=ee=>{C(`url-${ee.name}`),_(ee.pushUrl||ee.fetchUrl)},xe=ee=>{C(`name-${ee.name}`),z(ee.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:()=>T(!M),disabled:g!==null,title:M?"Cancel":"Add Remote",children:M?t.jsx(Jt,{size:14}):t.jsx(cn,{size:14})})]}),M&&t.jsxs("form",{className:"gm-remote-form",onSubmit:et,children:[t.jsx("input",{type:"text",placeholder:"Remote name",value:v,onChange:ee=>x(ee.target.value),disabled:g==="add",className:"gm-input"}),t.jsx("input",{type:"text",placeholder:"Repository URL",value:y,onChange:ee=>j(ee.target.value),disabled:g==="add",className:"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(lt,{size:12,className:"spin"}):t.jsx(cn,{size:12}),"Add"]})]}),f?t.jsxs("div",{className:"gm-loading",children:[t.jsx(lt,{size:16,className:"spin"}),"Loading..."]}):m.length===0?t.jsx("div",{className:"gm-empty",children:"No remotes"}):m.map(ee=>t.jsxs("div",{className:`gm-remote-selector-item${F===ee.name?" selected":""}`,onClick:()=>W(ee.name),role:"button",tabIndex:0,children:[t.jsxs("div",{className:"gm-remote-selector-info",children:[t.jsxs("span",{className:"gm-remote-selector-name",children:[ee.name,ee.name==="origin"&&t.jsx("span",{className:"gm-remote-default-badge",children:"default"})]}),t.jsx("span",{className:"gm-remote-selector-host",children:d(ee.fetchUrl)})]}),t.jsx("button",{className:"btn btn-icon btn-sm",onClick:Re=>{Re.stopPropagation(),Ye(ee.name)},disabled:g!==null,title:"Remove remote",children:t.jsx(ln,{size:14})})]},ee.name))]}),t.jsxs("div",{className:"gm-remote-detail","data-testid":"remote-detail-panel",children:[F&&O?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:F}),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(Fi,{size:14}),e.ahead," to push"]}),e.behind>0&&t.jsxs("div",{className:"gm-remote-indicator behind",children:[t.jsx(Er,{size:14}),e.behind," to pull"]})]})]}),t.jsxs("div",{className:"gm-remote-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:i,disabled:n!==null||f,children:[n==="fetch"?t.jsx(lt,{size:14,className:"spin"}):t.jsx($n,{size:14}),"Fetch"]}),t.jsxs("button",{className:"btn btn-primary",onClick:r,disabled:n!==null||f,children:[n==="pull"?t.jsx(lt,{size:14,className:"spin"}):t.jsx(ws,{size:14}),"Pull"]}),t.jsxs("button",{className:"btn btn-primary",onClick:o,disabled:n!==null||f,children:[n==="push"?t.jsx(lt,{size:14,className:"spin"}):t.jsx(Fi,{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:"}),N===`url-${F}`?t.jsxs("div",{className:"gm-remote-edit",children:[t.jsx("input",{type:"text",value:w,onChange:ee=>_(ee.target.value),className:"gm-input",autoFocus:!0}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>Oe(F),disabled:g===`url-${F}`,children:g===`url-${F}`?t.jsx(lt,{size:12,className:"spin"}):t.jsx(Bn,{size:12})}),t.jsx("button",{className:"btn btn-sm",onClick:()=>{C(null),_("")},title:"Cancel",children:t.jsx(Jt,{size:12})})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"gm-url-value",title:O.fetchUrl,children:O.fetchUrl}),t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>u(O.fetchUrl,"fetch URL"),title:"Copy fetch URL",children:t.jsx(Ui,{size:14})}),t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>oe(O),disabled:g!==null,title:"Edit remote URL",children:t.jsx(ds,{size:14})})]})]}),O.pushUrl&&O.pushUrl!==O.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:O.pushUrl,children:O.pushUrl}),t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>u(O.pushUrl,"push URL"),title:"Copy push URL",children:t.jsx(Ui,{size:14})})]})]}),t.jsx("div",{className:"gm-remote-detail-name-row",children:N===`name-${F}`?t.jsxs("div",{className:"gm-remote-edit",children:[t.jsx("input",{type:"text",value:S,onChange:ee=>z(ee.target.value),className:"gm-input",autoFocus:!0}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>rt(F),disabled:g===`rename-${F}`,children:g===`rename-${F}`?t.jsx(lt,{size:12,className:"spin"}):t.jsx(Bn,{size:12})}),t.jsx("button",{className:"btn btn-sm",onClick:()=>{C(null),z("")},title:"Cancel",children:t.jsx(Jt,{size:12})})]}):t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>xe(O),disabled:g!==null,title:"Edit remote name",children:t.jsx(ds,{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(Fi,{size:14}),"Commits to Push (",e.ahead,")"]})}),L?t.jsxs("div",{className:"gm-loading",children:[t.jsx(lt,{size:14,className:"spin"}),"Loading..."]}):U.length>0?t.jsx("div",{className:"gm-ahead-commits-list","data-testid":"ahead-commits-list",children:U.map(ee=>t.jsxs("div",{className:"gm-commit-item-compact-wrapper",children:[t.jsxs("div",{className:"gm-commit-item-compact gm-commit-clickable",onClick:()=>We(ee.hash,"ahead"),role:"button",tabIndex:0,title:"Click to view diff",children:[t.jsx("div",{className:"gm-commit-compact-hash",children:t.jsx("code",{className:"gm-hash",children:ee.shortHash})}),t.jsxs("div",{className:"gm-commit-compact-info",children:[t.jsx("span",{className:"gm-commit-message",title:ee.message,children:ee.message}),t.jsxs("span",{className:"gm-commit-meta",children:[t.jsx("span",{children:ee.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:ja(ee.date)})]})]}),t.jsx("span",{className:"gm-commit-expand-icon",children:ne===ee.hash?t.jsx(en,{size:14}):t.jsx(jn,{size:14})})]}),ne===ee.hash&&t.jsx("div",{className:"gm-commit-diff gm-commit-diff-compact",children:ke?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(lt,{size:16,className:"spin"}),"Loading diff..."]}):ie?t.jsxs(t.Fragment,{children:[ee.message&&t.jsx("div",{className:"gm-commit-message-full",children:ee.message}),ie.stat&&t.jsx("pre",{className:"gm-diff-stat",children:ie.stat}),t.jsx("pre",{className:"gm-diff-patch",children:ie.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},ee.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(lp,{size:14}),"Recent commits on ",F]})}),E?t.jsxs("div",{className:"gm-loading",children:[t.jsx(lt,{size:14,className:"spin"}),"Loading commits..."]}):P?t.jsxs("div",{className:"gm-error",children:[t.jsx(ms,{size:14}),P]}):G.length===0?t.jsxs("div",{className:"gm-empty",children:["No commits found on ",F,". Try fetching first."]}):t.jsx("div",{className:"gm-remote-commits-list","data-testid":"remote-commits-list",children:G.map(ee=>t.jsxs("div",{className:"gm-commit-item-compact-wrapper",children:[t.jsxs("div",{className:"gm-commit-item-compact gm-commit-clickable",onClick:()=>We(ee.hash,"remote"),role:"button",tabIndex:0,title:"Click to view diff",children:[t.jsx("div",{className:"gm-commit-compact-hash",children:t.jsx("code",{className:"gm-hash",children:ee.shortHash})}),t.jsxs("div",{className:"gm-commit-compact-info",children:[t.jsx("span",{className:"gm-commit-message",title:ee.message,children:ee.message}),t.jsxs("span",{className:"gm-commit-meta",children:[t.jsx("span",{children:ee.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:ja(ee.date)})]})]}),t.jsx("span",{className:"gm-commit-expand-icon",children:se===ee.hash?t.jsx(en,{size:14}):t.jsx(jn,{size:14})})]}),se===ee.hash&&t.jsx("div",{className:"gm-commit-diff gm-commit-diff-compact",children:me?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(lt,{size:16,className:"spin"}),"Loading diff..."]}):ge?t.jsxs(t.Fragment,{children:[ee.message&&t.jsx("div",{className:"gm-commit-message-full",children:ee.message}),ge.stat&&t.jsx("pre",{className:"gm-diff-stat",children:ge.stat}),t.jsx("pre",{className:"gm-diff-patch",children:ge.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},ee.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 tr={name:"",description:"",mode:"prompt",phase:"pre-merge",prompt:"",scriptName:"",enabled:!0,defaultOn:!1,modelProvider:"",modelId:""};function OT(e,n){return e&&n?`${e}/${n}`:""}function UT(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 BT(e){switch(e){case"file-text":return Bi;case"check-circle":return kn;case"shield":return sv;case"zap":return Kn;case"eye":return Ea;case"globe":return Bo;case"layout-grid":return qi;default:return kn}}function HT(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 qT({isOpen:e,onClose:n,addToast:s,projectId:i}){const[r,o]=a.useState([]),[l,c]=a.useState([]),[u,d]=a.useState(!0),[m,h]=a.useState(!0),[f,p]=a.useState("my-steps"),[g,b]=a.useState(null),[v,x]=a.useState(!1),[y,j]=a.useState(tr),[N,C]=a.useState(!1),[w,_]=a.useState(!1),[S,z]=a.useState(null),[M,T]=a.useState(null),[U,V]=a.useState({}),[L,R]=a.useState([]),F=a.useRef(null);oi(F,e,"fusion:workflow-steps-modal-size");const W=a.useCallback(async()=>{try{d(!0);const D=await Go(i);o(D)}catch(D){s(je(D)||"Failed to load workflow steps","error")}finally{d(!1)}},[s,i]),G=a.useCallback(async()=>{try{const D=await kr(i);V(D||{})}catch{}},[i]),te=a.useCallback(async()=>{try{const D=await hs();R(D.models||[])}catch{}},[]),E=a.useCallback(async()=>{try{h(!0);const D=await Oj();c(D.templates)}catch(D){s(je(D)||"Failed to load templates","error")}finally{h(!1)}},[s]);a.useEffect(()=>{e&&(W(),E(),G(),te())},[e,W,E,G,te]);const $=a.useCallback(()=>{x(!0),b(null),j(tr)},[]),P=a.useCallback(D=>{b(D.id),x(!1),j({name:D.name,description:D.description,mode:D.mode||"prompt",phase:D.phase||"pre-merge",prompt:D.prompt,scriptName:D.scriptName||"",enabled:D.enabled,defaultOn:D.defaultOn||!1,modelProvider:D.modelProvider||"",modelId:D.modelId||""})},[]),k=a.useCallback(()=>{b(null),x(!1),j(tr)},[]),O=a.useCallback(async()=>{if(!y.name.trim()||!y.description.trim()){s("Name and description are required","error");return}C(!0);try{const D=y.mode==="prompt"&&y.modelProvider&&y.modelId?{modelProvider:y.modelProvider,modelId:y.modelId}:y.mode==="prompt"?{modelProvider:void 0,modelId:void 0}:{};if(v){const se={name:y.name.trim(),description:y.description.trim(),mode:y.mode,phase:y.phase,prompt:y.mode==="prompt"&&y.prompt.trim()||void 0,scriptName:y.mode==="script"?y.scriptName.trim():void 0,enabled:y.enabled,defaultOn:y.defaultOn||void 0,...D};await au(se,i),s("Workflow step created","success")}else g&&(await Lj(g,{name:y.name.trim(),description:y.description.trim(),mode:y.mode,phase:y.phase,prompt:y.mode==="prompt"?y.prompt:"",scriptName:y.mode==="script"?y.scriptName.trim():void 0,enabled:y.enabled,defaultOn:y.defaultOn,...D},i),s("Workflow step updated","success"));x(!1),b(null),j(tr),await W()}catch(D){s(je(D)||"Failed to save workflow step","error")}finally{C(!1)}},[y,v,g,s,W]),ne=a.useCallback(async D=>{try{await zj(D,i),s("Workflow step deleted","success"),z(null),g===D&&(b(null),j(tr)),await W()}catch(se){s(je(se)||"Failed to delete workflow step","error")}},[g,s,W]),we=a.useCallback(async()=>{if(!(!g&&!v)&&y.mode==="prompt"){if(v){if(!y.name.trim()||!y.description.trim()){s("Name and description are required before refining","error");return}C(!0);try{const D=y.modelProvider&&y.modelId?{modelProvider:y.modelProvider,modelId:y.modelId}:{},se={name:y.name.trim(),description:y.description.trim(),mode:"prompt",prompt:y.prompt.trim()||void 0,enabled:y.enabled,defaultOn:y.defaultOn||void 0,...D},Z=await au(se,i);x(!1),b(Z.id),_(!0);const ge=await ru(Z.id,i);j(ue=>({...ue,prompt:ge.prompt})),s("Prompt refined with AI","success"),await W()}catch(D){s(je(D)||"Failed to refine prompt","error")}finally{C(!1),_(!1)}return}if(g){_(!0);try{const D=await ru(g,i);j(se=>({...se,prompt:D.prompt})),s("Prompt refined with AI","success"),await W()}catch(D){s(je(D)||"Failed to refine prompt","error")}finally{_(!1)}}}},[g,v,y,s,W]),ie=a.useCallback(async D=>{T(D.id);try{await Uj(D.id,i),s(`Added ${D.name} workflow step`,"success"),await W(),p("my-steps")}catch(se){const Z=je(se);Z?.includes("already exists")?s(`A workflow step named '${D.name}' already exists`,"error"):s(Z||"Failed to add workflow step from template","error")}finally{T(null)}},[s,W]),ce=Mi(n);if(!e)return null;const ke=v||g!==null;return t.jsx("div",{className:"modal-overlay open",...ce,"data-testid":"workflow-step-manager",children:t.jsxs("div",{ref:F,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:u?t.jsx("div",{className:"wfm-loading",children:"Loading..."}):t.jsxs(t.Fragment,{children:[!ke&&t.jsxs("div",{className:"wfm-tab-row",children:[t.jsxs("button",{className:`btn ${f==="my-steps"?"btn-primary":"btn-secondary"} wfm-tab-btn`,onClick:()=>p("my-steps"),"data-testid":"tab-my-steps",children:[t.jsx(Xg,{size:14}),"My Workflow Steps (",r.length,")"]}),t.jsxs("button",{className:`btn ${f==="templates"?"btn-primary":"btn-secondary"} wfm-tab-btn`,onClick:()=>p("templates"),"data-testid":"tab-templates",children:[t.jsx(qi,{size:14}),"Templates (",l.length,")"]})]}),f==="my-steps"&&!ke&&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(D=>t.jsx("div",{className:"wfm-step-card","data-testid":`workflow-step-${D.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:D.name}),t.jsx("span",{className:`wfm-badge ${D.enabled?"wfm-badge-enabled":"wfm-badge-disabled"}`,children:D.enabled?"Enabled":"Disabled"}),t.jsx("span",{className:`wfm-badge ${(D.mode||"prompt")==="script"?"wfm-badge-script":"wfm-badge-prompt"}`,children:(D.mode||"prompt")==="script"?"Script":"AI Prompt"}),t.jsx("span",{className:`wfm-badge ${(D.phase||"pre-merge")==="post-merge"?"wfm-badge-post-merge":"wfm-badge-pre-merge"}`,children:(D.phase||"pre-merge")==="post-merge"?"Post-merge":"Pre-merge"}),D.defaultOn&&t.jsx("span",{className:"wfm-badge wfm-badge-default-on",children:"Default on"})]}),t.jsx("div",{className:"wfm-step-card-desc",children:D.description})]}),t.jsxs("div",{className:"wfm-step-card-actions",children:[t.jsx("button",{className:"btn-icon",onClick:()=>P(D),title:"Edit","aria-label":`Edit ${D.name}`,children:t.jsx(ds,{size:14})}),S===D.id?t.jsxs("div",{className:"wfm-delete-confirm",children:[t.jsx("button",{className:"btn-icon wfm-delete-confirm-btn",onClick:()=>ne(D.id),title:"Confirm delete","aria-label":`Confirm delete ${D.name}`,children:t.jsx(Bn,{size:14})}),t.jsx("button",{className:"btn-icon",onClick:()=>z(null),title:"Cancel delete","aria-label":"Cancel delete",children:t.jsx(Jt,{size:14})})]}):t.jsx("button",{className:"btn-icon",onClick:()=>z(D.id),title:"Delete","aria-label":`Delete ${D.name}`,children:t.jsx(ln,{size:14})})]})]})},D.id))})]}),f==="templates"&&!ke&&t.jsx(t.Fragment,{children:m?t.jsxs("div",{className:"wfm-loading",children:[t.jsx(lt,{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(D=>{const se=BT(D.icon),Z=HT(D.category),ge=M===D.id;return t.jsx("div",{className:"wfm-template-card","data-testid":`template-${D.id}`,children:t.jsxs("div",{className:"wfm-template-inner",children:[t.jsx("div",{className:"wfm-template-icon",children:t.jsx(se,{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:D.name}),t.jsx("span",{className:Z,children:D.category})]}),t.jsx("div",{className:"wfm-template-desc",children:D.description}),t.jsx("button",{className:"btn btn-primary wfm-template-add-btn",onClick:()=>ie(D),disabled:ge,"data-testid":`add-template-${D.id}`,children:ge?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:12,className:"spin"}),"Adding..."]}):t.jsxs(t.Fragment,{children:[t.jsx(cn,{size:12}),"Add"]})})]})]})},D.id)})})}),ke&&t.jsxs("div",{className:"wfm-form","data-testid":"workflow-step-form",children:[t.jsx("h3",{className:"wfm-form-title",children:v?"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:y.name,onChange:D=>j(se=>({...se,name:D.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:y.description,onChange:D=>j(se=>({...se,description:D.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 ${y.mode==="prompt"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>j(D=>({...D,mode:"prompt",scriptName:""})),"data-testid":"mode-prompt",children:[t.jsx(Ni,{size:14}),"AI Prompt"]}),t.jsxs("button",{className:`btn ${y.mode==="script"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>j(D=>({...D,mode:"script",prompt:"",modelProvider:"",modelId:""})),"data-testid":"mode-script",children:[t.jsx(mi,{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 ${y.phase==="pre-merge"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>j(D=>({...D,phase:"pre-merge"})),"data-testid":"phase-pre-merge",children:"Pre-merge"}),t.jsx("button",{className:`btn ${y.phase==="post-merge"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>j(D=>({...D,phase:"post-merge"})),"data-testid":"phase-post-merge",children:"Post-merge"})]}),t.jsx("div",{className:"wfm-field-hint",children:y.phase==="pre-merge"?"Runs before merge — can block merge on failure":"Runs after merge success — failures are logged but do not block"})]}),y.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:we,disabled:!y.description.trim()||w,title:"Refine with AI","aria-label":"Refine prompt with AI","data-testid":"refine-btn",children:[w?t.jsx(lt,{size:12,className:"spin"}):t.jsx(as,{size:12}),t.jsx("span",{children:"Refine with AI"})]})]}),t.jsx("textarea",{value:y.prompt,onChange:D=>j(se=>({...se,prompt:D.target.value})),placeholder:"Leave empty to use AI refinement",rows:6,className:"wfm-prompt-textarea","data-testid":"workflow-step-prompt"})]}),y.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"}),y.modelProvider&&y.modelId&&t.jsxs("button",{type:"button",className:"btn-icon wfm-model-clear-btn",onClick:()=>j(D=>({...D,modelProvider:"",modelId:""})),title:"Clear model override (use global default)","data-testid":"clear-model-override",children:[t.jsx(Jt,{size:12}),t.jsx("span",{children:"Use default"})]})]}),t.jsx("span",{className:"wfm-model-hint",children:y.modelProvider&&y.modelId?`Using ${y.modelProvider}/${y.modelId}`:"Using global default model"}),t.jsx("div",{"data-testid":"workflow-step-model-select",children:t.jsx(Jn,{models:L,value:OT(y.modelProvider,y.modelId),onChange:D=>{const se=UT(D);j(Z=>({...Z,modelProvider:se.provider,modelId:se.modelId}))},placeholder:"Select a model override…",label:"Model override for this workflow step"})})]}),y.mode==="script"&&t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Script"}),Object.keys(U).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:y.scriptName,onChange:D=>j(se=>({...se,scriptName:D.target.value})),"data-testid":"workflow-step-script-select",children:[t.jsx("option",{value:"",children:"Select a script…"}),Object.entries(U).map(([D,se])=>t.jsxs("option",{value:D,children:[D," (",se,")"]},D))]})]}),t.jsxs("label",{className:"wfm-checkbox-label",children:[t.jsx("input",{type:"checkbox",checked:y.enabled,onChange:D=>j(se=>({...se,enabled:D.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:y.defaultOn,onChange:D=>j(se=>({...se,defaultOn:D.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:k,disabled:N,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:O,disabled:N||!y.name.trim()||!y.description.trim()||y.mode==="script"&&!y.scriptName.trim(),"data-testid":"save-workflow-step",children:N?"Saving...":v?"Create":"Save"})]})]})]})]})}),!ke&&t.jsx("div",{className:"wfm-footer",children:t.jsxs("button",{className:"btn btn-primary wfm-footer-add-btn",onClick:$,"data-testid":"add-workflow-step",children:[t.jsx(cn,{size:14}),"Add Workflow Step"]})})]})})}const VT=36e5,WT=3e5,pc=[{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 KT(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 GT(e){return typeof e!="number"||!Number.isFinite(e)?VT:Math.max(WT,Math.round(e))}function OL(e){if(pc.some(s=>s.value===e))return[...pc];const n={value:e,label:`${KT(e)} (custom)`};return[...pc,n].sort((s,i)=>s.value-i.value)}const JT=4,YT=5*6e4;function QT(e){const n=GT(e?.heartbeatIntervalMs);return Math.max(n*JT,YT)}function XT(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 ZT(e){const{state:n,lastHeartbeatAt:s,lastError:i,pauseReason:r,runtimeConfig:o}=e,l=XT(e),c=l||o?.enabled!==!1;if(n==="terminated")return{label:"Terminated",icon:t.jsx(ks,{size:14}),color:"var(--state-error-text)",stateDerived:!0};if(n==="error")return{label:i??"Error",icon:t.jsx(Is,{size:14}),color:"var(--state-error-text)",stateDerived:!i};if(n==="paused")return{label:r?`Paused: ${r}`:"Paused",icon:t.jsx(Hs,{size:14}),color:"var(--state-paused-text)",stateDerived:!r};if(n==="running"||l&&n==="active")return{label:"Running",icon:t.jsx(Is,{size:14}),color:"var(--state-active-text)",stateDerived:!0};if(!c)return{label:"Heartbeat Disabled",icon:t.jsx(Hs,{size:14}),color:"var(--state-paused-text)",stateDerived:!1};if(!s)return{label:n==="active"?"Starting...":"Idle",icon:t.jsx(Cn,{size:14}),color:"var(--text-secondary)",stateDerived:!1};const u=new Date(s).getTime(),d=Date.now()-u,m=QT(o);return d>m?{label:"Unresponsive",icon:t.jsx(Is,{size:14}),color:"var(--state-error-text)",stateDerived:!1}:{label:"Healthy",icon:t.jsx(lx,{size:14}),color:"var(--state-active-text)",stateDerived:!1}}const nr=[{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 eP({isOpen:e,onClose:n,addToast:s,projectId:i}){const[r,o]=a.useState([]),[l,c]=a.useState(!1),[u,d]=a.useState(!1),[m,h]=a.useState(""),[f,p]=a.useState("custom"),[g,b]=a.useState("all"),[v,x]=a.useState(()=>{if(typeof window>"u")return"list";const P=Yn("fn-agent-view",i);return P==="board"||P==="list"?P:"list"});a.useEffect(()=>{const P=Yn("fn-agent-view",i);if(P==="board"||P==="list"){x(P);return}x("list")},[i]),a.useEffect(()=>{bs("fn-agent-view",v,i)},[i,v]);const[y,j]=a.useState(null),N=a.useRef(null),[C,w]=a.useState(new Set),[_,S]=a.useState(new Map),{confirm:z}=Ws(),M=a.useMemo(()=>_.size===0?r:r.map(P=>{const k=_.get(P.id);return k?{...P,state:k}:P}),[r,_]),T=a.useMemo(()=>g==="all"?M.filter(P=>P.state!=="terminated"):M,[M,g]),U=a.useCallback(async()=>{c(!0);try{const k=await _a(g!=="all"?{state:g}:void 0,i);o(k)}catch(P){s(`Failed to load agents: ${je(P)}`,"error")}finally{c(!1)}},[g,s,i]);a.useEffect(()=>{e&&U()},[e,U]),a.useEffect(()=>{if(!e)return;const P=setInterval(()=>{U()},3e4);return()=>{clearInterval(P)}},[e,U]);const V=async()=>{if(m.trim())try{await Yj({name:m.trim(),role:f},i),s(`Agent "${m}" created`,"success"),h(""),d(!1),U()}catch(P){s(`Failed to create agent: ${je(P)}`,"error")}},L=async(P,k)=>{if(!C.has(P)){w(O=>new Set(O).add(P)),S(O=>{const ne=new Map(O);return ne.set(P,k),ne});try{await Xj(P,k,i),s(`Agent state updated to ${k}`,"success"),await U(),S(O=>{const ne=new Map(O);return ne.delete(P),ne})}catch(O){S(ne=>{const we=new Map(ne);return we.delete(P),we}),s(`Failed to update state: ${je(O)}`,"error")}finally{w(O=>{const ne=new Set(O);return ne.delete(P),ne})}}},R=async(P,k)=>{if(await z({title:"Delete Agent",message:`Delete agent "${k}"? This cannot be undone.`,danger:!0}))try{await Zj(P,i),s(`Agent "${k}" deleted`,"success"),U()}catch(ne){s(`Failed to delete agent: ${je(ne)}`,"error")}},F=async(P,k)=>{const O=r.find(ne=>ne.id===P);if(O){if(O.role===k){j(null);return}try{await Qj(P,{role:k},i),s(`Agent role updated to ${nr.find(ne=>ne.value===k)?.label??k}`,"success"),j(null),U()}catch(ne){s(`Failed to update role: ${je(ne)}`,"error")}}},W=(P,k)=>{P.key==="Escape"&&j(null)},G=P=>nr.find(k=>k.value===P)?.label??P,te=P=>nr.find(k=>k.value===P)?.icon??"◆",E=P=>ZT(P),$=P=>P.color==="var(--state-active-text)"?"active":P.color==="var(--state-paused-text)"?"paused":P.color==="var(--state-error-text)"?"error":"muted";return e?t.jsx("div",{className:"modal-overlay open",onClick:P=>P.target===P.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(Cn,{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:()=>x("board"),title:"Board view","aria-label":"Board view","aria-pressed":v==="board",children:t.jsx(qi,{size:16})}),t.jsx("button",{className:`view-toggle-btn${v==="list"?" active":""}`,onClick:()=>x("list"),title:"List view","aria-label":"List view","aria-pressed":v==="list",children:t.jsx(Ec,{size:16})})]}),t.jsx("button",{className:"btn-icon",onClick:()=>void U(),title:"Refresh",disabled:l,children:t.jsx($n,{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(wo,{size:14}),t.jsxs("select",{className:"agent-state-filter-select",value:g,onChange:P=>b(P.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.jsx("option",{value:"terminated",children:"Terminated"})]})]}),t.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>d(!u),children:[t.jsx(cn,{size:16}),u?"Cancel":"New Agent"]})]}),u&&t.jsxs("div",{className:"agent-create-form",children:[t.jsx("input",{type:"text",placeholder:"Agent name...",value:m,onChange:P=>h(P.target.value),onKeyDown:P=>P.key==="Enter"&&V(),className:"input",autoFocus:!0}),t.jsx("select",{className:"select",value:f,onChange:P=>p(P.target.value),children:nr.map(P=>t.jsxs("option",{value:P.value,children:[P.icon," ",P.label]},P.value))}),t.jsx("button",{className:"btn btn-task-create btn-sm",onClick:()=>void V(),children:"Create"})]}),t.jsx("div",{className:v==="board"?"agent-board":"agent-list",children:T.length===0?t.jsxs("div",{className:"agent-empty",children:[t.jsx(Cn,{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"?T.map(P=>{const k=E(P),O=$(k);return t.jsxs("div",{className:"agent-board-card","data-state":P.state,children:[t.jsxs("div",{className:"agent-board-header",children:[t.jsx("span",{className:"agent-board-icon",children:te(P.role)}),t.jsx("span",{className:"agent-board-badge","data-state":P.state,children:P.state}),t.jsx("span",{className:"agent-board-health","data-health":O,title:k.label,children:k.icon})]}),t.jsx("div",{className:"agent-board-name",title:P.name,children:P.name}),t.jsx("div",{className:"agent-board-id",children:P.id}),t.jsxs("div",{className:"agent-board-actions",children:[P.state==="idle"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"active"),disabled:C.has(P.id),title:"Activate",children:t.jsx(En,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void R(P.id,P.name),title:"Delete",children:t.jsx(ln,{size:14})})]}),P.state==="active"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"paused"),disabled:C.has(P.id),title:"Pause",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:t.jsx(ks,{size:14})})]}),P.state==="paused"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"active"),disabled:C.has(P.id),title:"Resume",children:t.jsx(En,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:t.jsx(ks,{size:14})})]}),P.state==="running"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"paused"),disabled:C.has(P.id),title:"Pause",children:t.jsx(Hs,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:t.jsx(ks,{size:14})})]}),P.state==="error"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"active"),disabled:C.has(P.id),title:"Retry",children:t.jsx(En,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:t.jsx(ks,{size:14})})]}),P.state==="terminated"&&t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void R(P.id,P.name),title:"Delete",children:t.jsx(ln,{size:14})})]})]},P.id)}):T.map(P=>{const k=E(P),O=$(k);return t.jsxs("div",{className:"agent-card","data-state":P.state,children:[t.jsxs("div",{className:"agent-card-header",children:[t.jsxs("div",{className:"agent-info",children:[y===P.id?t.jsx("select",{ref:N,className:"select agent-role-select",value:P.role,onChange:ne=>void F(P.id,ne.target.value),onKeyDown:ne=>W(ne,P.id),onBlur:()=>j(null),autoFocus:!0,children:nr.map(ne=>t.jsxs("option",{value:ne.value,children:[ne.icon," ",ne.label]},ne.value))}):t.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:()=>j(P.id),title:"Click to change role",role:"button",tabIndex:0,onKeyDown:ne=>{(ne.key==="Enter"||ne.key===" ")&&j(P.id)},children:te(P.role)}),t.jsxs("div",{className:"agent-meta",children:[t.jsx("span",{className:"agent-name",children:P.name}),t.jsx("span",{className:"agent-id text-secondary",children:P.id})]})]}),t.jsxs("div",{className:"agent-badges",children:[t.jsx("span",{className:"badge agent-list-state-badge","data-state":P.state,children:P.state}),t.jsxs("span",{className:"badge agent-list-health-badge","data-health":O,title:k.label,children:[k.icon,!k.stateDerived&&` ${k.label}`]}),t.jsx("span",{className:"badge text-secondary",children:G(P.role)})]})]}),t.jsxs("div",{className:"agent-card-body",children:[P.taskId&&t.jsxs("div",{className:"agent-task",children:[t.jsx("span",{className:"text-secondary",children:"Working on:"}),t.jsx("span",{className:"badge",children:P.taskId})]}),P.lastHeartbeatAt&&t.jsxs("div",{className:"agent-heartbeat",children:[t.jsx("span",{className:"text-secondary",children:"Last heartbeat:"}),t.jsx("span",{children:new Date(P.lastHeartbeatAt).toLocaleString()})]})]}),t.jsxs("div",{className:"agent-card-actions",children:[P.state==="idle"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"active"),disabled:C.has(P.id),title:"Activate",children:[t.jsx(En,{size:14})," Start"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void R(P.id,P.name),title:"Delete",children:[t.jsx(ln,{size:14})," Delete"]})]}),P.state==="active"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"paused"),disabled:C.has(P.id),title:"Pause",children:[t.jsx(Hs,{size:14})," Pause"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:[t.jsx(ks,{size:14})," Stop"]})]}),P.state==="paused"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"active"),disabled:C.has(P.id),title:"Resume",children:[t.jsx(En,{size:14})," Resume"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:[t.jsx(ks,{size:14})," Stop"]})]}),P.state==="running"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"paused"),disabled:C.has(P.id),title:"Pause",children:[t.jsx(Hs,{size:14})," Pause"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:[t.jsx(ks,{size:14})," Stop"]})]}),P.state==="error"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void L(P.id,"active"),disabled:C.has(P.id),title:"Retry",children:[t.jsx(En,{size:14})," Retry"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void L(P.id,"terminated"),disabled:C.has(P.id),title:"Stop",children:[t.jsx(ks,{size:14})," Stop"]})]}),P.state==="terminated"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm btn-task-create",onClick:()=>void L(P.id,"active"),disabled:C.has(P.id),title:"Start",children:[t.jsx(En,{size:14})," Start"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void R(P.id,P.name),title:"Delete",children:[t.jsx(ln,{size:14})," Delete"]})]})]})]},P.id)})})]})]})}):null}function tP({authenticated:e,onToggled:n,compact:s=!1}){const[i,r]=a.useState(null),[o,l]=a.useState(null),[c,u]=a.useState(null),d=a.useRef(!0);a.useEffect(()=>(d.current=!0,()=>{d.current=!1}),[]);const m=a.useCallback(async()=>{try{const x=await xy();return d.current&&r(x),x}catch(x){return d.current&&u({kind:"error",message:x instanceof Error?x.message:String(x)}),null}},[]);a.useEffect(()=>{m()},[m]);const h=a.useCallback(async()=>{l("testing"),u(null),await m(),d.current&&l(null)},[m]),f=a.useCallback(async x=>{l(x?"enabling":"disabling"),u(null);try{const y=await vy(x);d.current&&u({kind:y.enabled?"enabled":"disabled",restartRequired:y.restartRequired}),n?.(y.enabled),await m()}catch(y){d.current&&u({kind:"error",message:y instanceof Error?y.message:String(y)})}finally{d.current&&l(null)}},[n,m]),p=i?.binary.available??!1,g=i?.enabled??e,b=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:h,disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(lt,{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(Dn,{provider:"claude-cli",size:"sm"}),t.jsx("strong",{children:"Anthropic — via Claude CLI"}),t.jsx(nP,{status:i,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:[b,t.jsx(Eh,{status:i,authenticated:e}),c&&t.jsx(Mh,{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(Dn,{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"}),b,t.jsx(Eh,{status:i,authenticated:e})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:v}),c&&t.jsx(Mh,{action:c})]})}function nP({status:e,authenticated:n}){const s=e?.enabled??n,i=e?.binary.available??!1;return s?t.jsx("span",{className:"auth-status-badge authenticated",children:"✓ Active"}):!i&&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 Eh({status:e,authenticated:n}){if(!e)return t.jsxs("small",{className:"settings-muted",children:[t.jsx(lt,{size:10,className:"animate-spin"})," Probing local CLI…"]});const{binary:s,enabled:i,extension:r,ready:o}=e;return s.available?i?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 Mh({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 sP(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"),i=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(i);if(l?.[1])return l[1];const c=e.match(r);return c?.[1]?c[1]:null}function fc({instructions:e,"data-testid":n}){const[s,i]=a.useState(!1),r=sP(e),o=a.useRef(null),l=a.useCallback(()=>{i(!0),setTimeout(()=>i(!1),2e3)},[]),c=a.useCallback(async()=>{const u=r??e;try{await navigator.clipboard.writeText(u),l()}catch{}},[r,e,l]);return a.useEffect(()=>{const u=o.current===null&&r!==null;if(o.current=r,!u)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((u,d,m)=>t.jsxs("span",{children:[u,d<m.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(Bn,{size:12}):t.jsx(Ui,{size:12})})]})]},d))}):e})}const iP=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"]),aP=/^[a-z][a-z0-9-]*$/,_h=["openai-completions","openai-responses","anthropic-messages","google-generative-ai"];function Ah(){return{id:"",name:"",reasoning:!1}}function rP({initialConfig:e,onSave:n,onCancel:s,saving:i=!1,error:r}){const o=!!e,[l,c]=a.useState(e?.id??""),[u,d]=a.useState(e?.name??""),[m,h]=a.useState(e?.baseUrl??""),[f,p]=a.useState(e?.api??"openai-completions"),[g,b]=a.useState(e?.apiKey??""),[v,x]=a.useState(e?.models?.length?e.models:[Ah()]),[y,j]=a.useState(null),N=v.length>1,C=a.useMemo(()=>y??r??null,[y,r]);function w(M,T){x(U=>U.map((V,L)=>L===M?{...V,...T}:V))}function _(M){x(T=>T.length<=1?T:T.filter((U,V)=>V!==M))}function S(){if(!l.trim())return"Provider ID is required.";if(!aP.test(l.trim()))return"Provider ID must be kebab-case.";if(!o&&iP.has(l.trim()))return"Provider ID conflicts with a built-in provider.";if(!m.trim())return"Base URL is required.";try{const M=new URL(m.trim());if(M.protocol!=="http:"&&M.protocol!=="https:")return"Base URL must use http or https."}catch{return"Base URL must be a valid URL."}return _h.includes(f)?v.length===0?"At least one model is required.":v.some(M=>!M.id?.trim())?"Each model must have a model ID.":null:"API type is required."}async function z(M){M.preventDefault();const T=S();j(T),!T&&await n({id:l.trim(),name:u.trim()||void 0,baseUrl:m.trim(),api:f,apiKey:g.trim()||void 0,models:v.map(U=>({id:U.id.trim(),name:U.name?.trim()||void 0,reasoning:!!U.reasoning,contextWindow:U.contextWindow,maxTokens:U.maxTokens}))})}return t.jsxs("form",{onSubmit:z,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:M=>c(M.target.value),disabled:o||i})]}),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:u,onChange:M=>d(M.target.value),disabled:i})]}),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:m,onChange:M=>h(M.target.value),disabled:i})]}),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:M=>p(M.target.value),disabled:i,children:_h.map(M=>t.jsx("option",{value:M,children:M},M))})]}),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:M=>b(M.target.value),disabled:i})]}),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((M,T)=>t.jsxs("div",{className:"custom-provider-form__model-row",children:[t.jsx("input",{className:"input","aria-label":`Model ID ${T+1}`,placeholder:"Model ID",value:M.id,onChange:U=>w(T,{id:U.target.value}),disabled:i}),t.jsx("input",{className:"input","aria-label":`Model name ${T+1}`,placeholder:"Display name",value:M.name??"",onChange:U=>w(T,{name:U.target.value}),disabled:i}),t.jsxs("label",{className:"checkbox-label custom-provider-form__toggle",children:[t.jsx("input",{type:"checkbox",checked:!!M.reasoning,onChange:U=>w(T,{reasoning:U.target.checked}),disabled:i}),"Reasoning"]}),t.jsx("input",{className:"input","aria-label":`Context window ${T+1}`,placeholder:"Context window",type:"number",value:M.contextWindow??"",onChange:U=>w(T,{contextWindow:U.target.value?Number(U.target.value):void 0}),disabled:i}),t.jsx("input",{className:"input","aria-label":`Max tokens ${T+1}`,placeholder:"Max tokens",type:"number",value:M.maxTokens??"",onChange:U=>w(T,{maxTokens:U.target.value?Number(U.target.value):void 0}),disabled:i}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>_(T),disabled:i||!N,"aria-label":`Remove model ${T+1}`,children:"×"})]},`${T}-model`))}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>x(M=>[...M,Ah()]),disabled:i,children:"+ Add model"})]}),C?t.jsx("div",{className:"form-error",children:C}):null,t.jsxs("div",{className:"custom-provider-form__actions",children:[s?t.jsx("button",{type:"button",className:"btn",onClick:s,disabled:i,children:"Cancel"}):null,t.jsx("button",{type:"submit",className:"btn btn-primary",disabled:i,children:i?"Saving...":"Save Provider"})]})]})}const Gi="fusion_model_onboarding_state",ka=[],wa=[],Lo=!1,zo=!1,Na={},oP=void 0,ji=["ai-setup","github","project-setup","first-task"],lP={"ai-setup":"AI Setup",github:"GitHub","project-setup":"Project","first-task":"First Task",complete:"Complete"};function Cs(){if(typeof window>"u")return null;try{const e=localStorage.getItem(Gi);if(!e)return null;const n=JSON.parse(e);return n&&typeof n=="object"&&"currentStep"in n&&typeof n.currentStep=="string"?cP(n):null}catch{return null}}function cP(e){const n=e.postOnboardingDismissedAt??oP;return{...e,completedSteps:e.completedSteps??ka,skippedSteps:e.skippedSteps??wa,dismissed:e.dismissed??Lo,completed:e.completed??zo,stepData:e.stepData??Na,...n?{postOnboardingDismissedAt:n}:{}}}function fo(e,n){if(!(typeof window>"u")){if(!n){const s={currentStep:e,updatedAt:new Date().toISOString(),completedSteps:ka,skippedSteps:wa,dismissed:Lo,completed:zo,stepData:Na};try{localStorage.setItem(Gi,JSON.stringify(s))}catch{}return}try{const s=Cs(),i=new Date().toISOString(),r=n.completed??zo;let o=n.dismissed??Lo;r&&(o=!1);const l=n.completedSteps??s?.completedSteps??ka,c=n.skippedSteps??s?.skippedSteps??wa,u={...s?.stepData??Na};if(n.stepData)for(const[m,h]of Object.entries(n.stepData))h!==void 0&&(u[m]={...u[m]??{},...h});const d={currentStep:e,updatedAt:i,completedSteps:l,skippedSteps:c,dismissed:o,completed:r,stepData:u};localStorage.setItem(Gi,JSON.stringify(d))}catch{}}}function dP(e){if(!(typeof window>"u"))try{const n=Cs(),s=new Date().toISOString();if(!n){const o={currentStep:e,updatedAt:s,completedSteps:ka,skippedSteps:[e],dismissed:Lo,completed:zo,stepData:Na};localStorage.setItem(Gi,JSON.stringify(o));return}const i=n.skippedSteps.includes(e)?n.skippedSteps:[...n.skippedSteps,e],r={...n,skippedSteps:i,completedSteps:n.completedSteps.filter(o=>o!==e),updatedAt:s};localStorage.setItem(Gi,JSON.stringify(r))}catch{}}function Rh(){if(!(typeof window>"u"))try{const e=Cs(),n=new Date().toISOString(),s=e?{...e,completedAt:n,completed:!0,dismissed:!1,updatedAt:n}:{currentStep:"complete",updatedAt:n,completedAt:n,completedSteps:ka,skippedSteps:wa,dismissed:!1,completed:!0,stepData:Na};localStorage.setItem(Gi,JSON.stringify(s))}catch{}}function Sa(){const e=Cs();return e?e.completed===!0?!0:typeof e.completedAt=="string"&&e.completedAt.length>0:!1}function uP(){if(!(typeof window>"u"))try{const e=Cs(),n=new Date().toISOString(),s=e?{...e,updatedAt:n,postOnboardingDismissedAt:n}:{currentStep:"complete",updatedAt:n,completedSteps:ka,skippedSteps:wa,dismissed:!1,completed:!1,stepData:Na,postOnboardingDismissedAt:n};localStorage.setItem(Gi,JSON.stringify(s))}catch{}}function yg(){const e=Cs();return e?typeof e.postOnboardingDismissedAt=="string"&&e.postOnboardingDismissedAt.length>0:!1}function mP(){const e=Cs();return!e||Sa()?!1:e.currentStep!=="complete"}function hP(){const e=Cs();if(!e||Sa()||e.currentStep==="complete")return null;const n=e.currentStep,s=lP[n]??gP(e.currentStep);return{currentStep:e.currentStep,label:s,completedSteps:e.completedSteps}}function pP(){const e=Cs();return e?e.skippedSteps:wa}function fP(e){const n=Cs();return!n||!n.stepData?null:n.stepData[e]??null}function gP(e){return e.replace(/[-_]/g," ").replace(/\b\w/g,n=>n.toUpperCase())}const jg="fusion_onboarding_events",Th="fusion_onboarding_session_id",bP=200,xP=50;function Ts(e,n={}){if(!(typeof window>"u"))try{const s=yP(),i=wP(n.step),r={type:e,timestamp:new Date().toISOString(),...i?{step:i}:{},metadata:n,sessionId:vP()},o=kP([...s,r]);jP(o)}catch{}}function vP(){if(typeof window>"u")return"server-session";try{const e=sessionStorage.getItem(Th);if(e)return e;const n=Ph();return sessionStorage.setItem(Th,n),n}catch{return Ph()}}function Ph(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`onboarding-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function yP(){try{const e=localStorage.getItem(jg);if(!e)return[];const n=JSON.parse(e);return Array.isArray(n)?n.filter(NP):[]}catch{return[]}}function jP(e){try{localStorage.setItem(jg,JSON.stringify(e))}catch{}}function kP(e){const n=[...e];for(;n.length>bP;)n.splice(0,xP);return n}function wP(e){if(e==="ai-setup"||e==="github"||e==="first-task"||e==="complete")return e}function NP(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 SP=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}))??[]}),CP={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"}}},kg={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:"..."}},EP={pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."},Ih={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"};function Zc(e){if(Ih[e])return Ih[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 gc=["anthropic","openai","google","gemini","ollama"],MP=["anthropic","claude-cli","openai-codex","gemini","minimax","kimi","zai"],_P={anthropic:"anthropic","claude-cli":"claude-cli","openai-codex":"openai-codex",google:"gemini",gemini:"gemini",minimax:"minimax",kimi:"kimi",moonshot:"kimi","kimi-coding":"kimi",zai:"zai"},AP={gemini:["google","gemini"],kimi:["kimi","moonshot","kimi-coding"]};function ed(e){return _P[e]??e}function $h(e){const n=ed(e),s=MP.indexOf(n);return s===-1?Number.POSITIVE_INFINITY:s}function Dh(e,n){if(e.authenticated!==n.authenticated)return e.authenticated?-1:1;const s=$h(e.id),i=$h(n.id);if(s!==i)return s-i;const r=ed(e.id),o=ed(n.id);if(r!==o)return r.localeCompare(o);const l=AP[r];if(l){const u=l.indexOf(e.id),d=l.indexOf(n.id);if(u!==d)return(u===-1?Number.POSITIVE_INFINITY:u)-(d===-1?Number.POSITIVE_INFINITY:d)}const c=e.name.localeCompare(n.name);return c!==0?c:e.id.localeCompare(n.id)}function RP(e,n){const s=n.trim();if(!s)return"API key is required";const i=kg[e]??EP;return i.pattern.test(s)?null:`${Zc(e)} keys should follow this format: ${i.hint} (e.g. ${i.example})`}const wg={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"},TP={description:"AI provider — connect to start using AI models",apiKeyInfo:wg};function td(e){return CP[e]??TP}function PP(e){return td(e.id).apiKeyInfo??wg}function ti({summary:e,children:n,className:s=""}){const[i,r]=a.useState(!1);return t.jsxs("div",{className:`onboarding-disclosure ${s}`,children:[t.jsxs("button",{className:"onboarding-disclosure-trigger",onClick:()=>r(!i),"aria-expanded":i,type:"button",children:[t.jsx(jn,{size:14,className:"onboarding-disclosure-chevron","aria-hidden":"true"}),t.jsx("span",{children:e})]}),i&&t.jsx("div",{className:"onboarding-disclosure-content",children:n})]})}function IP({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 i=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:i}),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 $P({provider:e,apiKeyInfo:n,inputValue:s,isSaving:i,error:r,success:o,isConnected:l,onInputChange:c,onSave:u,onClear:d}){const m=`onboarding-apikey-input-${e.id}`,h=i||!s.trim(),f=kg[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:()=>d(e.id),disabled:i,children:i?"Removing…":"Remove Key"}),t.jsx(ti,{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:m,className:"onboarding-apikey-field-label",children:n.fieldLabel}),t.jsxs("div",{className:"onboarding-apikey-input-row",children:[t.jsx("input",{id:m,type:"password",className:p,placeholder:n.inputPlaceholder??"Enter API key",value:s,onChange:b=>c(e.id,b.target.value),onKeyDown:b=>{b.key==="Enter"&&u(e.id,s)},"data-testid":m}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>u(e.id,s),disabled:h,"data-testid":`onboarding-apikey-save-${e.id}`,children:i?"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(ti,{summary:"Advanced setup details",children:g})]})}const DP=150;function LP({onComplete:e,addToast:n,projectId:s,onOpenSetupWizard:i,onOpenNewTask:r,onOpenGitHubImport:o,firstCreatedTask:l,onViewTask:c}){const u=Cs(),d=u?.currentStep,m=d==="complete"?"ai-setup":ji.includes(d)?d:"ai-setup",h=u?.completedSteps??[],f=u?.skippedSteps??pP(),[p,g]=a.useState(!0),[b,v]=a.useState(m),[x,y]=a.useState(h),[j,N]=a.useState(f),[C,w]=a.useState(!1),[_,S]=a.useState(""),[z,M]=a.useState(!1),[T,U]=a.useState(null),[V,L]=a.useState(null),[R,F]=a.useState([]),[W,G]=a.useState(void 0),[te,E]=a.useState(!0),[$,P]=a.useState(null),[k,O]=a.useState({}),[ne,we]=a.useState([]),[ie,ce]=a.useState(""),[ke,D]=a.useState(!1),[se,Z]=a.useState({}),[ge,ue]=a.useState({}),[me,ae]=a.useState({}),[be,Ae]=a.useState([]),[Fe,at]=a.useState(!1),[et,Ye]=a.useState(!1),[rt,Oe]=a.useState(),We=a.useRef({}),oe=a.useRef(null),xe=a.useRef(null),ee=a.useRef(null),[Re,Ue]=a.useState({}),[pe,Me]=a.useState(()=>Cs()?.stepData?.github?.skipped===!0),ze=a.useRef(0),tt=a.useRef(l),ye=a.useRef(!1),de=u?.currentStep,Ie=!!u&&u.currentStep!=="complete";oi(xe,p,"fusion:model-onboarding-modal-size"),a.useEffect(()=>{const K=oe.current;K&&(K.scrollTop=0)},[b]);const[fe,_e]=a.useState(()=>Cs()?.stepData?.["ai-setup"]?.skippedProviders??{}),Ge=[{key:"ai-setup",label:"AI Setup"},{key:"github",label:"GitHub"},{key:"project-setup",label:"Project"},{key:"first-task",label:"First Task"}],Pe=Ge.findIndex(K=>K.key===b),ft=b==="complete"?Ge.length:Pe;a.useEffect(()=>{b!=="complete"&&fo(b,{completedSteps:x,skippedSteps:j})},[b,x,j]),a.useEffect(()=>{ye.current||(ye.current=!0,Ts("onboarding:wizard-opened",{source:Ie?"resume":"initial",resumedFromStep:de}))},[Ie,de]),a.useEffect(()=>{const K=tt.current!=null,Le=l!=null;!K&&Le&&w(!0),Le||w(!1),tt.current=l},[l]);const Y=a.useRef(m);a.useEffect(()=>{if(Y.current==="ai-setup"&&b!=="ai-setup"&&!R.some(Le=>Le.id!=="github"&&Le.authenticated)){const Le={};for(const st of R)st.id!=="github"&&!st.authenticated&&!fe[st.id]&&(Le[st.id]=!0);if(Object.keys(Le).length>0){const st={...fe,...Le};_e(st),fo(b,{stepData:{"ai-setup":{skippedProviders:st}}})}}Y.current=b},[b,R,fe]);const le=a.useCallback(async()=>{try{const{providers:K,ghCli:Le}=await jr();F(K),G(Le),O(st=>{const ot={};for(const[Nt,Mt]of Object.entries(st)){const Ft=K.find(Qn=>Qn.id===Nt);Ft&&!Ft.authenticated&&(ot[Nt]=Mt)}return Object.keys(ot).length===Object.keys(st).length?st:ot}),_e(st=>{const ot={...st};for(const Nt of K)Nt.authenticated&&ot[Nt.id]&&delete ot[Nt.id];return Object.keys(ot).length===Object.keys(st).length?st:ot})}catch{}},[]),ve=a.useCallback(async()=>{try{const K=await yy();Ae((K.providers??[]).map(SP))}catch{}},[]),nt=a.useCallback(async K=>{Ye(!0),Oe(void 0);try{await ky(K),await ve(),await hs().then(Le=>we(Le.models??[])),at(!1)}catch(Le){Oe(je(Le)||"Failed to create custom provider")}finally{Ye(!1)}},[ve]),Q=a.useRef(!1);a.useEffect(()=>{b==="ai-setup"&&ve(),Q.current&&le(),Q.current=b!=="ai-setup"},[b,le,ve]);const Je=R.find(K=>K.id==="github"),ut=!!Je,ht=Je?.authenticated??!1,Et=W?.authenticated??!1,yt=ht||Et,bt=!ht&&Et,vt=a.useCallback(K=>{if(K.authenticated)return"connected";const Le=Re?.[K.id];return Le==="timeout"||Le==="failed"?"retry":fe[K.id]?"skipped":"not-connected"},[Re,fe]);function qt({status:K}){const Le={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:st,className:ot}=Le[K];return t.jsx("span",{"data-testid":"provider-status-badge",className:ot,"data-status":K,children:st})}const Tt=a.useCallback(()=>{if(yt)return"connected";const K=Re.github;return K==="pending"?"pending":K==="failed"||K==="timeout"?"failed":pe?"skipped":"not-connected"},[yt,Re,pe]);function At({status:K}){const Le={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:st,className:ot}=Le[K];return t.jsx("span",{"data-testid":"github-status-badge",className:ot,"data-status":K,children:st})}const Lt=a.useCallback(async()=>{try{const K=await hs();we(K.models)}catch{}},[]),Vt=a.useCallback(async()=>{try{const K=await Ji();if(K.defaultProvider&&K.defaultModelId){const Le=`${K.defaultProvider}/${K.defaultModelId}`;ce(Le)}}catch{}},[]);a.useEffect(()=>{Promise.all([le(),Lt(),Vt()]).finally(()=>E(!1))},[le,Lt,Vt]),a.useEffect(()=>{const K=fP("ai-setup");if(K?.loginOutcomes){const Le=K.loginOutcomes,st={};for(const[ot,Nt]of Object.entries(Le))Nt!=="pending"&&(st[ot]=Nt);Object.keys(st).length>0&&Ue(st)}},[]);const Kt=a.useCallback((K,Le)=>{fo(b,{completedSteps:x,stepData:{"ai-setup":{loginOutcomes:{[K]:Le}}}})},[b,x]);a.useEffect(()=>{const K=Object.entries(Re).filter(([Le,st])=>st!=="pending");for(const[Le,st]of K)Kt(Le,st)},[Re,Kt]),a.useEffect(()=>()=>{ee.current&&clearInterval(ee.current),Object.values(We.current).forEach(clearTimeout),We.current={}},[]);const Ot=a.useCallback(K=>{Me(K),fo(b,{completedSteps:x,stepData:{github:{skipped:K}}})},[b,x]),Wt=a.useCallback(K=>K==="complete"?-1:ji.indexOf(K),[]),_t=a.useCallback(()=>{y(Le=>[...new Set([...Le,b])]),N(Le=>Le.filter(st=>st!==b)),Ts("onboarding:step-completed",{step:b}),b==="github"&&!ht&&Ot(!1);const K=Wt(b);K>=0&&K<ji.length-1&&v(ji[K+1])},[b,ht,Ot,Wt]),St=a.useCallback(()=>{N(Le=>[...new Set([...Le,b])]),dP(b),Ts("onboarding:step-skipped",{step:b}),b==="github"&&!ht&&Ot(!0);const K=Wt(b);K>=0&&K<ji.length-1&&v(ji[K+1])},[b,ht,Ot,Wt]),Yt=a.useCallback(()=>{const K=b;y(st=>st.filter(ot=>ot!==K)),N(st=>st.filter(ot=>ot!==K)),K==="github"&&!ht&&Ot(!1);const Le=Wt(b);Le>0&&v(ji[Le-1])},[b,ht,Ot,Wt]),Xt=a.useCallback(()=>{St()},[St]),Qt=a.useCallback(async K=>{Ue(Le=>{const st=Le[K];if(st&&st!=="pending"){const{[K]:ot,...Nt}=Le;return Nt}return Le}),O(Le=>{if(!(K in Le))return Le;const st={...Le};return delete st[K],st}),Ue(Le=>({...Le,[K]:"pending"})),P(K),ze.current=0;try{const{url:Le,instructions:st}=await wy(K);st?.trim()&&O(ot=>({...ot,[K]:st})),window.open(ii(Le),"_blank"),ee.current=setInterval(async()=>{if(ze.current++,ze.current>=DP){ee.current&&(clearInterval(ee.current),ee.current=null),P(null),Ue(ot=>({...ot,[K]:"timeout"})),O(ot=>{if(!(K in ot))return ot;const Nt={...ot};return delete Nt[K],Nt}),n("Login timed out. Please try again.","warning");return}try{const{providers:ot,ghCli:Nt}=await jr();F(ot),G(Nt),ot.find(Ft=>Ft.id===K)?.authenticated&&(ee.current&&(clearInterval(ee.current),ee.current=null),P(null),Ue(Ft=>({...Ft,[K]:"success"})),O(Ft=>{if(!(K in Ft))return Ft;const Qn={...Ft};return delete Qn[K],Qn}),K==="github"&&Ot(!1),n("Login successful","success"))}catch{}},2e3)}catch(Le){Le instanceof Error&&Le.message.includes("already in progress")||Le&&typeof Le=="object"&&"status"in Le&&Le.status===409?(n("Login already in progress. Please wait or cancel the current attempt.","warning"),Ue(ot=>({...ot,[K]:"failed"}))):(n(Le instanceof Error?Le.message:"Login failed","error"),Ue(ot=>({...ot,[K]:"failed"}))),P(null),O(ot=>{if(!(K in ot))return ot;const Nt={...ot};return delete Nt[K],Nt})}},[n,Ot]),B=a.useCallback(K=>{ee.current&&(clearInterval(ee.current),ee.current=null),P(null),ze.current=0,Ue(Le=>({...Le,[K]:"cancelled"})),O(Le=>{if(!(K in Le))return Le;const st={...Le};return delete st[K],st})},[]),he=a.useCallback((K,Le)=>{Z(ot=>({...ot,[K]:Le}));const st=We.current[K];st&&(clearTimeout(st),delete We.current[K]),ue(ot=>{if(!ot[K])return ot;const Nt={...ot};return delete Nt[K],Nt}),ae(ot=>{if(!ot[K])return ot;const Nt={...ot};return delete Nt[K],Nt})},[]),De=a.useCallback(()=>{const K=oe.current;if(!K)return;const Le=typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;try{if(typeof K.scrollTo=="function"){K.scrollTo({top:0,behavior:Le?"auto":"smooth"});return}}catch{}K.scrollTop=0},[]),A=a.useCallback(async(K,Le)=>{const st=(Le??se[K]??"").trim(),ot=RP(K,st);if(ot){ue(Mt=>({...Mt,[K]:ot}));return}const Nt=We.current[K];Nt&&(clearTimeout(Nt),delete We.current[K]),P(K),ue(Mt=>{const Ft={...Mt};return delete Ft[K],Ft}),ae(Mt=>{if(!Mt[K])return Mt;const Ft={...Mt};return delete Ft[K],Ft});try{await Sy(K,st),await le(),De(),Z(Mt=>{const Ft={...Mt};return delete Ft[K],Ft}),ue(Mt=>{if(!Mt[K])return Mt;const Ft={...Mt};return delete Ft[K],Ft}),ae(Mt=>({...Mt,[K]:"✓ Key saved"})),We.current[K]=setTimeout(()=>{ae(Mt=>{if(!Mt[K])return Mt;const Ft={...Mt};return delete Ft[K],Ft}),delete We.current[K]},3e3),n("API key saved","success")}catch(Mt){const Ft=Mt instanceof TypeError&&Mt.message.includes("Failed to fetch")?"Could not reach the server. Check your connection and try again.":Mt instanceof Error?Mt.message:"Failed to save API key";ue(Qn=>({...Qn,[K]:Ft})),ae(Qn=>{if(!Qn[K])return Qn;const Ds={...Qn};return delete Ds[K],Ds}),n(Ft,"error")}finally{P(null)}},[se,n,le,De]),X=a.useCallback(async K=>{P(K);try{await Cy(K),await le(),n("API key removed","success")}catch(Le){n(Le instanceof Error?Le.message:"Failed to clear API key","error")}finally{P(null)}},[n,le]),$e=a.useCallback(async K=>{P(K);try{await Ny(K),await le(),n("Logged out","success")}catch(Le){n(Le instanceof Error?Le.message:"Logout failed","error")}finally{P(null)}},[n,le]),dt=a.useCallback(K=>{ce(K)},[]),jt=a.useCallback(async()=>{try{const K={modelOnboardingComplete:!0};if(ie){const Le=ie.indexOf("/"),st=Le!==-1?ie.slice(0,Le):void 0,ot=Le!==-1?ie.slice(Le+1):ie,Nt=ne.find(Mt=>Mt.id===ot);Nt?(K.defaultProvider=Nt.provider,K.defaultModelId=Nt.id):st&&ot&&(K.defaultProvider=st,K.defaultModelId=ot)}await fn(K),Rh()}catch{}},[ie,ne,fn,Rh]),zt=a.useCallback(async()=>{const K=[...new Set([...x,"first-task"])];D(!0);try{await jt(),Ts("onboarding:completed",{completedSteps:K,skippedSteps:j}),y(K),N(Le=>Le.filter(st=>st!=="first-task")),v("complete")}finally{D(!1)}},[jt,x,j]),Rt=a.useCallback(async()=>{if(!s)return;const K=_.trim();if(!K){U("Please enter a task description.");return}U(null),M(!0);let Le=!1;try{const st=await pp({description:K,source:{sourceType:"dashboard_ui"}},s);L(st),w(!0),Ts("onboarding:first-task-created",{taskId:st?.id}),n("Task created","success"),Le=!0}catch(st){const ot=st instanceof Error?st.message:"Something went wrong creating your task. Please try again.";U(ot),n(ot,"error")}finally{M(!1)}Le&&jt()},[s,_,n,jt]),un=a.useCallback(async()=>{D(!0);try{await jt()}finally{D(!1)}Ts("onboarding:open-new-task",{}),r?.()},[jt,r]),In=a.useCallback(async()=>{if(yt){D(!0);try{await jt()}finally{D(!1)}g(!1),e(),Ts("onboarding:open-github-import",{}),o?.()}},[jt,yt,e,o]),gn=a.useCallback(async()=>{Ts("onboarding:dismissed",{currentStep:b,completedSteps:x,skippedSteps:j}),D(!0);try{await fn({modelOnboardingComplete:!0})}catch{}g(!1),e()},[b,x,j,e]),Bt=a.useCallback(()=>{Ts("onboarding:finished",{}),g(!1),e()},[e]),Mn=a.useCallback(()=>{const K=l??V;K&&(jt(),c?.(K),e())},[l,V,jt,c,e]),Ne=a.useCallback(()=>{jt(),e()},[jt,e]);if(!p)return null;const it=Tt(),xn=R.filter(K=>K.id!=="github"),wn=[...xn].sort(Dh),Ce=wn.some(K=>!K.type||K.type==="oauth"),Ke=wn.some(K=>K.type==="api_key"),mt=xn.filter(K=>K.authenticated),It=mt.length>0,$t=!!s,mn=b==="github"&&!It,On=(()=>{if(!ie)return"";const K=ie.indexOf("/"),Le=K===-1?void 0:ie.slice(0,K),st=K===-1?ie:ie.slice(K+1),ot=ne.find(Nt=>Nt.id===st&&(!Le||Nt.provider===Le));return ot?.name?ot.name:Le?`${Zc(Le)} ${st}`:ie})(),nn=[];if($t?nn.push({label:"Project",status:"connected",detail:"Project selected — task creation and imports are available"}):nn.push({label:"Project",status:"missing",detail:"Register a project to enable task creation and imports"}),It){const K=Zc(mt[0]?.id??"");nn.push({label:"AI Provider",status:"connected",detail:`${K} connected — AI agents can work on tasks`})}else xn.length>0&&xn.some(K=>fe[K.id])?nn.push({label:"AI Provider",status:"skipped",detail:"AI agents won't be available until you connect a provider"}):nn.push({label:"AI Provider",status:"missing",detail:"Connect a provider in Settings → AI Setup"});yt?nn.push({label:"GitHub",status:"connected",detail:bt?"Connected via GitHub CLI — imports and PR tracking are available":"Issues and PRs can be imported"}):!ut||pe?nn.push({label:"GitHub",status:"skipped",detail:"You can connect anytime from Settings"}):nn.push({label:"GitHub",status:"missing",detail:"Connect to import issues as tasks"}),On&&nn.push({label:"Default Model",status:"connected",detail:On});const Nn=l??V,_n=Nn?.description?.split(`
|
|
656
|
-
`)[0]?.trim()||Nn?.title||"",ls=new Set(gc),Sn=wn.filter(K=>ls.has(K.id)).sort((K,Le)=>{const st=gc.indexOf(K.id),ot=gc.indexOf(Le.id);return st!==ot?st-ot:Dh(K,Le)}),Hn=wn.filter(K=>K.authenticated&&!ls.has(K.id)),rn=wn.filter(K=>!K.authenticated&&!ls.has(K.id)),wt=K=>{if(K.id==="claude-cli"&&K.type==="cli")return t.jsx(tP,{authenticated:K.authenticated,onToggled:()=>{le()}},K.id);if(K.type==="api_key"){const Le=td(K.id),st=PP(K);return t.jsxs("div",{"data-testid":`onboarding-provider-card-${K.id}`,className:`onboarding-provider-card${K.authenticated?" onboarding-provider-card--connected":""}`,children:[t.jsx("div",{className:"onboarding-provider-card__icon","data-testid":`onboarding-provider-icon-${K.id}`,"aria-hidden":"true",children:t.jsx(Dn,{provider:K.id,size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsxs("strong",{className:"onboarding-provider-card__name",children:[t.jsx(rp,{size:14,className:"onboarding-provider-key-icon"}),K.name]}),t.jsx("span",{className:"onboarding-provider-card__description",children:Le.description}),t.jsx(qt,{status:vt(K)}),K.authenticated&&K.keyHint&&t.jsxs("span",{className:"auth-key-hint",children:["Key: ",K.keyHint]})]}),t.jsx("div",{className:"onboarding-provider-card__actions onboarding-provider-card__actions--api-key",children:t.jsx($P,{provider:K,apiKeyInfo:st,inputValue:se[K.id]??"",isSaving:$===K.id,error:ge[K.id],success:me[K.id],isConnected:K.authenticated,onInputChange:he,onSave:A,onClear:X})})]},K.id)}return t.jsxs("div",{"data-testid":`onboarding-provider-card-${K.id}`,className:`onboarding-provider-card${K.authenticated?" onboarding-provider-card--connected":""}`,children:[t.jsx("div",{className:"onboarding-provider-card__icon","data-testid":`onboarding-provider-icon-${K.id}`,"aria-hidden":"true",children:t.jsx(Dn,{provider:K.id,size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:K.name}),t.jsx("span",{className:"onboarding-provider-card__description",children:td(K.id).description}),t.jsx(qt,{status:vt(K)})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:$===K.id?t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",disabled:!0,children:K.authenticated?"Logging out…":"Waiting for login…"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>B(K.id),children:"Cancel"})]}):K.authenticated?t.jsx("button",{className:"btn btn-sm",onClick:()=>$e(K.id),children:"Logout"}):t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>Qt(K.id),children:"Login"})}),$===K.id&&k[K.id]&&t.jsx(fc,{instructions:k[K.id],"data-testid":`onboarding-login-instructions-${K.id}`}),Re[K.id]==="timeout"&&$!==K.id&&t.jsx("p",{className:"onboarding-helper-text onboarding-inline-feedback",children:"Login timed out. Please try again."}),Re[K.id]==="failed"&&$!==K.id&&t.jsx("p",{className:"field-error onboarding-inline-feedback",children:"Login failed. Please try again."})]},K.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:xe,children:[t.jsxs("div",{className:"model-onboarding-header",children:[t.jsxs("h2",{id:"onboarding-title",className:"model-onboarding-title",children:[b==="ai-setup"&&t.jsxs(t.Fragment,{children:[t.jsx(Kn,{size:24})," Set Up AI ",t.jsx("span",{className:"onboarding-optional-badge",children:"Optional"})]}),b==="github"&&t.jsxs(t.Fragment,{children:[t.jsx(ws,{size:24})," Connect GitHub ",t.jsx("span",{className:"onboarding-optional-badge",children:"Optional"})]}),b==="project-setup"&&t.jsxs(t.Fragment,{children:[t.jsx(Bd,{size:24})," Set Up Your Project"]}),b==="first-task"&&t.jsxs(t.Fragment,{children:[t.jsx(Bd,{size:24})," Create Your First Task"]}),b==="complete"&&t.jsxs(t.Fragment,{children:[t.jsx(kn,{size:24})," All Set!"]})]}),b!=="complete"&&t.jsx("button",{className:"modal-close",onClick:gn,"aria-label":"Skip onboarding",title:"Skip for now",children:t.jsx(Jt,{size:20})})]}),t.jsx("div",{className:"model-onboarding-steps",children:Ge.map((K,Le)=>{const st=ft>Le,ot=x.includes(K.key)&&st,Nt=j.includes(K.key)&&!x.includes(K.key)&&st,Mt=ot||Nt;return t.jsxs("div",{className:"onboarding-step-wrapper",children:[Le>0&&t.jsx("div",{className:`model-onboarding-step-connector ${Le<=ft?"done":""}`}),Mt?t.jsxs("button",{className:`model-onboarding-step-indicator ${b===K.key?"active":""} ${ot?"done":""} ${Nt?"skipped":""}`,onClick:()=>v(K.key),"aria-label":`Go back to ${K.label}`,title:`Review ${K.label}`,children:[t.jsx("span",{className:"step-number",children:ot?t.jsx(kn,{size:14}):Nt?t.jsx("span",{className:"onboarding-step-skip-mark",children:"–"}):Le+1}),t.jsx("span",{className:"step-label",children:K.label})]}):t.jsxs("div",{className:`model-onboarding-step-indicator ${b===K.key?"active":""} ${ot?"done":""} ${Nt?"skipped":""}`,children:[t.jsx("span",{className:"step-number",children:ot?t.jsx(kn,{size:14}):Nt?t.jsx("span",{className:"onboarding-step-skip-mark",children:"–"}):Le+1}),t.jsx("span",{className:"step-label",children:K.label})]})]},K.key)})}),t.jsxs("div",{className:"model-onboarding-content",ref:oe,children:[b==="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."}),!te&&R.length>0&&(()=>{const K=R.filter(Mt=>Mt.id!=="github"&&Mt.authenticated).length,Le=R.filter(Mt=>Mt.id!=="github").length,st=Object.keys(fe).filter(Mt=>!R.find(Ft=>Ft.id===Mt)?.authenticated).length;if(Le===0)return null;let ot="onboarding-provider-summary",Nt="";return K>0?(ot+=" onboarding-provider-summary--connected",Nt=`✓ ${K} of ${Le} provider${Le!==1?"s":""} connected`):st>0?(ot+=" onboarding-provider-summary--skipped",Nt=`${st} provider${st!==1?"s":""} skipped`):(ot+=" onboarding-provider-summary--none",Nt="No providers connected yet"),t.jsx("div",{className:ot,"data-testid":"provider-summary",children:Nt})})(),t.jsx(ti,{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."})}),R.length>0&&!R.some(K=>K.authenticated)&&t.jsx("p",{className:"onboarding-helper-text",children:"Skip this step if you'd like — you can always add providers later from Settings."}),te?t.jsxs("div",{className:"model-onboarding-loading",children:[t.jsx(lt,{size:24,className:"animate-spin"}),t.jsx("span",{children:"Loading providers…"})]}):R.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.jsxs("section",{className:"onboarding-provider-section","data-testid":"onboarding-quick-start-providers",children:[t.jsx("h3",{className:"onboarding-section-title",children:"Quick start providers"}),Sn.length>0?t.jsx("div",{className:"model-onboarding-providers",children:Sn.map(K=>wt(K))}):t.jsx("p",{className:"onboarding-helper-text",children:"No quick-start providers are available in this environment."})]}),Hn.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:Hn.map(K=>wt(K))})]}),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(ti,{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(Jn,{models:ne,value:ie,onChange:dt,placeholder:"Select a default model…",label:"Default model"})}),ie&&t.jsx("div",{className:"onboarding-model-preview",children:t.jsxs("small",{className:"settings-muted",children:["Selected:"," ",ne.find(K=>K.id===ie)?.name??ie]})})]}),t.jsx(ti,{summary:"Advanced provider settings",className:"onboarding-provider-advanced",children:t.jsxs("div",{"data-testid":"onboarding-advanced-provider-settings",children:[rn.length>0?t.jsx("div",{className:"model-onboarding-providers",children:rn.map(K=>wt(K))}):t.jsx("p",{className:"onboarding-helper-text",children:"All currently available providers are already shown above."}),be.length>0?t.jsx("div",{className:"onboarding-custom-provider-list",children:be.map(K=>t.jsxs("div",{className:"onboarding-custom-provider-item",children:[t.jsx(Dn,{provider:K.id,size:"sm"}),t.jsx("span",{children:K.name||K.id})]},K.id))}):null,Fe?t.jsx(rP,{onSave:nt,onCancel:()=>{at(!1),Oe(void 0)},saving:et,error:rt}):t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>at(!0),children:"Add custom provider"})]})}),Ce&&t.jsx(ti,{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."})}),Ke&&t.jsx(ti,{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."})})]})]}),b==="github"&&t.jsxs("div",{className:"model-onboarding-github",children:[yt?t.jsx("p",{className:"model-onboarding-description",children:bt?"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."}),!yt&&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"})]})}),mn&&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(ti,{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."})}),ut?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(ws,{size:16,className:"onboarding-provider-title-icon"}),"GitHub"]}),t.jsx("span",{"data-testid":"onboarding-auth-status-github",children:t.jsx(At,{status:it})})]}),ht&&($==="github"?t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Logging out…"}):t.jsx("button",{className:"btn btn-sm",onClick:()=>$e("github"),children:"Disconnect"}))]}),(it==="not-connected"||it==="pending")&&t.jsxs("div",{className:"onboarding-github-connect-cta","data-testid":"onboarding-github-connect-cta",children:[$==="github"?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:()=>B("github"),children:"Cancel"})]}):t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>Qt("github"),children:[t.jsx(ws,{size:16}),"Connect"]}),$==="github"&&k.github&&t.jsx(fc,{instructions:k.github,"data-testid":"onboarding-login-instructions-github"})]}),it==="connected"&&t.jsx("div",{className:"onboarding-github-feedback onboarding-github-feedback--success",children:bt?"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."}),it==="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:()=>Qt("github"),children:"Retry"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:Xt,children:"Skip for now"})]})]}),it==="pending"&&t.jsx("div",{className:"onboarding-github-feedback onboarding-github-feedback--info",children:"Waiting for GitHub authorization…"}),it==="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:()=>Qt("github"),children:"Connect anyway"})})]}),it==="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(Dn,{provider:"github",size:"lg"})}),bt?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:()=>v("project-setup"),children:bt?"Continue with gh CLI auth →":"Continue without GitHub →"}),bt&&($==="github"?t.jsxs("button",{className:"btn btn-sm",disabled:!0,children:[t.jsx(lt,{size:14,className:"onboarding-spinner"}),"Waiting for OAuth login…"]}):t.jsxs("button",{className:"btn btn-sm",onClick:()=>Qt("github"),children:[t.jsx(Dn,{provider:"github",size:"sm"}),"Connect OAuth (optional)"]}))]}),bt&&$==="github"&&k.github&&t.jsx(fc,{instructions:k.github,"data-testid":"onboarding-login-instructions-github"})]})]}),b==="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."}),$t?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:i,"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(ti,{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."})})]}),b==="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."}),C&&Nn?t.jsxs("div",{className:"onboarding-task-created",children:[t.jsx(kn,{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:Nn.id}),_n&&t.jsx("p",{className:"onboarding-task-created__description",children:_n}),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:Mn,children:"View Task"}),t.jsx("button",{type:"button",className:"btn",onClick:Ne,children:"Go to Dashboard"})]})]}):t.jsxs(t.Fragment,{children:[$t?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:_,onChange:K=>{S(K.target.value),U(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:Rt,disabled:z,"data-testid":"onboarding-first-task-submit",children:z?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Creating task…"})]}):"Create First Task"})})]}),T&&t.jsxs("div",{className:"onboarding-task-error",role:"alert","data-testid":"onboarding-task-error",children:[t.jsx("p",{className:"field-error",children:T}),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:i,"data-testid":"onboarding-open-setup-wizard",children:"Set Up Project"})]}),t.jsx(IP,{items:nn}),$t&&t.jsxs(t.Fragment,{children:[t.jsx(ti,{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:un,disabled:ke,children:[t.jsx("div",{className:"cta-icon",children:t.jsx(cn,{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${yt?"":" onboarding-cta-card--disabled"}`,"data-testid":"cta-github-import",onClick:In,disabled:ke||!yt,children:[t.jsx("div",{className:"cta-icon",children:t.jsx(ws,{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"}),!yt&&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."]})]})]})]}),b==="complete"&&t.jsxs("div",{className:"model-onboarding-complete",children:[t.jsx(kn,{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:[b==="ai-setup"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:gn,disabled:ke,children:"Skip for now"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:St,children:"Skip setup →"}),t.jsx("button",{className:"btn btn-primary",onClick:_t,children:"Next →"})]}),b==="github"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Yt,children:"← Back"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:St,children:"Skip GitHub →"}),t.jsx("button",{className:"btn btn-primary",onClick:_t,children:"Next →"})]}),b==="project-setup"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Yt,children:"← Back"}),t.jsx("button",{className:"btn btn-primary",onClick:_t,disabled:!$t,children:"Next →"})]}),b==="first-task"&&!C&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Yt,children:"← Back"}),t.jsx("button",{className:"btn btn-primary",onClick:zt,disabled:ke,children:ke?t.jsxs(t.Fragment,{children:[t.jsx(lt,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Saving…"})]}):"Finish Setup"})]}),b==="complete"&&t.jsxs("button",{className:"btn btn-primary",onClick:Bt,children:[t.jsx(kn,{size:16}),t.jsx("span",{children:"Get Started"})]})]})]})})}function Ng({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 zP=a.lazy(()=>pn(()=>import("./SetupWizardModal-CKsJduYM.js"),__vite__mapDeps([6,1,7,8,9,0,2,10])).then(e=>({default:e.SetupWizardModal}))),FP=a.lazy(()=>pn(()=>import("./SettingsModal-Bgjg_4CD.js"),__vite__mapDeps([11,1,12,13,14,15,0,2,16])).then(e=>({default:e.SettingsModal})));function OP(){(typeof window<"u"&&window.requestIdleCallback||(n=>globalThis.setTimeout(n,200)))(()=>{pn(()=>import("./SettingsModal-Bgjg_4CD.js"),__vite__mapDeps([11,1,12,13,14,15,0,2,16]))},{timeout:1500})}function UP({projectId:e,tasks:n,projects:s,currentProject:i,addToast:r,toasts:o,removeToast:l,modalManager:c,projectActions:u,taskHandlers:d,taskOperations:m,deepLink:h,settings:f,onSettingsClose:p,onReopenOnboarding:g}){const[b,v]=a.useState(null),x=c.detailTask?(()=>{const _=n.find(S=>S.id===c.detailTask?.id);return _?"prompt"in c.detailTask?{...c.detailTask,..._,prompt:c.detailTask.prompt,log:c.detailTask.log}:_:c.detailTask})():null,y=p??c.closeSettings,j=a.useCallback(()=>{c.openNewTask()},[c]),N=a.useCallback(()=>{c.openGitHubImport()},[c]),C=a.useCallback(_=>{v(null),c.closeModelOnboarding(),c.openDetailTask(_)},[c]),w=a.useCallback(async _=>{const S=await d.handleModalCreate(_);return c.modelOnboardingOpen&&v(S),S},[d.handleModalCreate,c.modelOnboardingOpen]);return a.useEffect(()=>{!c.modelOnboardingOpen&&b&&v(null)},[c.modelOnboardingOpen,b]),a.useEffect(()=>{OP()},[]),t.jsxs(t.Fragment,{children:[x&&t.jsx(Ii,{children:t.jsx(PA,{task:x,projectId:e,tasks:n,onClose:h.handleDetailClose,onOpenDetail:c.openDetailTask,onMoveTask:m.moveTask,onDeleteTask:m.deleteTask,onMergeTask:m.mergeTask,onRetryTask:m.retryTask,onResetTask:m.resetTask,onDuplicateTask:m.duplicateTask,onTaskUpdated:c.updateDetailTask,addToast:r,prAuthAvailable:f.prAuthAvailable,initialTab:c.detailTaskInitialTab})}),c.settingsOpen&&t.jsx(Ii,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(FP,{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($A,{isOpen:c.githubImportOpen,onClose:c.closeGitHubImport,onImport:d.handleGitHubImport,tasks:n,projectId:e}),t.jsx(Ii,{children:t.jsx(FA,{isOpen:c.isPlanningOpen,onClose:c.closePlanning,onTaskCreated:d.handlePlanningTaskCreated,onTasksCreated:d.handlePlanningTasksCreated,tasks:n,initialPlan:c.planningInitialPlan??void 0,projectId:e,resumeSessionId:c.planningResumeSessionId})}),t.jsx(Ii,{children:t.jsx(JA,{isOpen:c.isSubtaskOpen,onClose:c.closeSubtask,initialDescription:c.subtaskInitialDescription??"",onTasksCreated:d.handleSubtaskTasksCreated,projectId:e,resumeSessionId:c.subtaskResumeSessionId})}),t.jsx(bR,{isOpen:c.terminalOpen,onClose:c.closeTerminal,initialCommand:c.terminalInitialCommand,projectId:e}),t.jsx(vR,{isOpen:c.scriptsOpen,onClose:c.closeScripts,addToast:r,onRunScript:c.runScript,projectId:e}),c.filesOpen&&t.jsx(UR,{initialWorkspace:c.fileBrowserWorkspace,isOpen:!0,onClose:c.closeFiles,onWorkspaceChange:c.setFileWorkspace,projectId:e}),t.jsx(YR,{isOpen:c.usageOpen,onClose:c.closeUsage,projectId:e,anchorRect:c.usageAnchorRect}),t.jsx(ST,{isOpen:c.systemStatsOpen,onClose:c.closeSystemStats,projectId:e}),c.schedulesOpen&&t.jsx(gT,{onClose:c.closeSchedules,addToast:r,projectId:e}),t.jsx(Ii,{children:t.jsx(yT,{isOpen:c.newTaskModalOpen,onClose:c.closeNewTask,tasks:n,onCreateTask:w,addToast:r,projectId:e,onPlanningMode:c.openPlanningWithInitialPlan,onSubtaskBreakdown:c.openSubtaskBreakdown})}),t.jsx(AT,{isOpen:c.activityLogOpen,onClose:c.closeActivityLog,tasks:n,projectId:e,projects:s,currentProject:i,onOpenTaskDetail:_=>{const S=n.find(z=>z.id===_);S&&c.openDetailTask(S)}}),t.jsx(Ii,{children:t.jsx(TT,{isOpen:c.gitManagerOpen,onClose:c.closeGitManager,tasks:n,addToast:r,projectId:e})}),t.jsx(Ii,{children:t.jsx(qT,{isOpen:c.workflowStepsOpen,onClose:c.closeWorkflowSteps,addToast:r,projectId:e})}),t.jsx(eP,{isOpen:c.agentsOpen,onClose:c.closeAgents,addToast:r,projectId:e}),c.setupWizardOpen&&t.jsx(a.Suspense,{fallback:null,children:t.jsx(zP,{onProjectRegistered:u.handleSetupComplete,onClose:c.closeSetupWizard})}),c.modelOnboardingOpen&&t.jsx(LP,{onComplete:u.handleModelOnboardingComplete,addToast:r,projectId:e??"",onOpenSetupWizard:u.handleAddProject,onOpenNewTask:j,onOpenGitHubImport:N,firstCreatedTask:b,onViewTask:C}),t.jsx(Ng,{toasts:o,onRemove:l})]})}function BP({errorMessage:e,isRetrying:n,onRetry:s}){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.jsx("button",{type:"button",className:"btn btn-primary",onClick:s,disabled:n,children:n?"Retrying…":"Retry Connection"})]})}const nd=[{id:"projects",label:"Loading projects"},{id:"project",label:"Selecting project"},{id:"tasks",label:"Fetching tasks"}];function HP(e,n){if(n==="ready")return"done";const s=nd.findIndex(r=>r.id===n),i=nd.findIndex(r=>r.id===e);return i<s?"done":i===s?"active":"pending"}function qP({stage:e}){const[n]=a.useState(()=>wv());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:nd.map(s=>{const i=HP(s.id,e);return t.jsxs("li",{className:`dashboard-loader__step dashboard-loader__step--${i}`,"data-testid":`dashboard-loader-step-${s.id}`,children:[t.jsx("span",{className:"dashboard-loader__step-icon","aria-hidden":"true",children:i==="done"?"✓":i==="active"?t.jsx(lt,{className:"dashboard-loader__spinner animate-spin",size:14}):"•"}),t.jsx("span",{className:"dashboard-loader__step-label",children:s.label})]},s.id)})})]})})}const VP=5e3;function WP(e,n,s){return e||n&&s===0?"idle":n&&s>0?"paused":s>0?"running":"idle"}function KP(e,n,s){let i=0,r=0,o=0,l=0,c=0;for(const u of e){switch(u.column){case"in-progress":i++,_o(u,n,s)&&o++;break;case"todo":l++;break;case"in-review":c++;break}u.blockedBy&&u.blockedBy.length>0&&r++}return{runningTaskCount:i,blockedTaskCount:r,stuckTaskCount:o,queuedTaskCount:l,inReviewCount:c}}function GP(e,n,s,i){const[r,o]=a.useState({globalPause:!1,enginePaused:!1,maxConcurrent:2}),[l,c]=a.useState(!0),[u,d]=a.useState(null),m=a.useRef(null),h=a.useRef(null),f=a.useCallback(async()=>{h.current&&h.current.abort(),h.current=new AbortController;try{c(!0),d(null);const v=await rk(n);o(v)}catch(v){if(v instanceof Error&&v.name==="AbortError")return;d(v instanceof Error?v.message:"Failed to fetch executor stats")}finally{c(!1)}},[n]);a.useEffect(()=>(f(),()=>{h.current&&h.current.abort()}),[f]),a.useEffect(()=>(m.current&&clearInterval(m.current),m.current=setInterval(()=>{f()},VP),()=>{m.current&&(clearInterval(m.current),m.current=null)}),[f]);const p=KP(e,s,i),g=WP(r.globalPause,r.enginePaused,p.runningTaskCount);return{stats:{...p,executorState:g,maxConcurrent:r.maxConcurrent,lastActivityAt:r.lastActivityAt},loading:l,error:u,refresh:f}}const JP={planning:si,subtask:Hi,mission_interview:vs,milestone_interview:vs,slice_interview:vs},YP={planning:"Planning",subtask:"Subtask Breakdown",mission_interview:"Mission Interview",milestone_interview:"Milestone Interview",slice_interview:"Slice Interview"};function QP({sessions:e,generating:n,needsInput:s,onOpenSession:i,onDismissSession:r}){const{confirm:o}=Ws(),[l,c]=a.useState(!1),[u,d]=a.useState(new Set),m=a.useRef(null),h=a.useRef(new Map),f=a.useRef(null),{activeTabMap:p}=Ta(),g=a.useMemo(()=>Yi(),[]);if(a.useEffect(()=>{if(!l)return;const x=y=>{m.current&&!m.current.contains(y.target)&&c(!1)};return document.addEventListener("mousedown",x),()=>document.removeEventListener("mousedown",x)},[l]),a.useEffect(()=>{const x=new Set,y=new Map;for(const j of e){const N=p.get(j.id),C=[j.status,j.updatedAt,N?.tabId??j.lockedByTab??"",N?.stale?"stale":"fresh"].join("|"),w=h.current.get(j.id);w&&w!==C&&x.add(j.id),y.set(j.id,C)}if(h.current=y,x.size!==0)return d(x),f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{d(new Set),f.current=null},500),()=>{f.current&&(clearTimeout(f.current),f.current=null)}},[p,e]),e.length===0)return null;const b=e.length,v=s>0;return t.jsxs("div",{ref:m,className:"background-tasks-indicator",children:[t.jsxs("button",{className:`background-tasks-indicator__pill${v?" background-tasks-indicator__pill--attention":""}`,onClick:()=>c(x=>!x),title:`${b} background AI task${b!==1?"s":""}${s>0?` (${s} need${s!==1?"":"s"} input)`:""}`,children:[n>0&&t.jsx(lt,{size:12,style:{animation:"spin 1s linear infinite"}}),s>0&&n===0&&t.jsx(wc,{size:12}),t.jsxs("span",{children:["AI ",b]})]}),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(x=>{const y=JP[x.type],j=x.status==="generating",N=x.status==="awaiting_input",C=x.status==="error",w=p.get(x.id),_=w?.tabId??x.lockedByTab??null,S=!!(_&&_!==g&&!w?.stale),z=u.has(x.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()=>{S&&!await o({title:"Open Active Session",message:"This session is active in another tab. Open anyway?"})||(i(x),c(!1))},children:[C?t.jsx(ms,{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:x.title}),t.jsxs("div",{className:"background-tasks-indicator__session-meta",children:[C?"Failed":YP[x.type],j&&" — generating...",N&&!S&&" — needs input",N&&S&&" — active in another tab"]})]}),j&&t.jsx(lt,{size:14,className:"background-tasks-indicator__session-icon",style:{animation:"spin 1s linear infinite",color:"var(--color-success)"}}),N&&!S&&t.jsx(wc,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--triage)"}}),N&&S&&t.jsx(qo,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--text-muted)"}}),t.jsx("button",{className:"background-tasks-indicator__item-dismiss",onClick:M=>{M.stopPropagation(),r(x.id)},title:"Dismiss",children:t.jsx(Jt,{size:12})})]},x.id)})})]})]})}function XP(e){if(!e)return"no activity";const n=Date.now(),s=new Date(e).getTime(),i=n-s,r=Math.floor(i/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 ZP(e){switch(e){case"running":return{label:"Running",color:"var(--color-success)",icon:En};case"paused":return{label:"Paused",color:"var(--triage)",icon:Hs};case"idle":default:return{label:"Idle",color:"var(--text-muted)",icon:Kn}}}function eI({tasks:e,projectId:n,taskStuckTimeoutMs:s,backgroundSessions:i,backgroundGenerating:r,backgroundNeedsInput:o,onOpenBackgroundSession:l,onDismissBackgroundSession:c,lastFetchTimeMs:u,currentProjectPath:d,onOpenProjectDirectory:m}){const{stats:h,loading:f,error:p}=GP(e,n,s,u),[g,b]=a.useState(!1),v=a.useMemo(()=>ZP(h.executorState),[h.executorState]),x=a.useMemo(()=>XP(h.lastActivityAt),[h.lastActivityAt]),y=v.icon;return p?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(od,{size:14}),p]})}):f&&h.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 ${h.executorState==="running"?"executor-status-bar--running":""}`,role:"status","aria-label":"Executor status",children:[i&&i.length>0&&l&&c&&t.jsxs(t.Fragment,{children:[t.jsx(QP,{sessions:i,generating:r??0,needsInput:o??0,onOpenSession:l,onDismissSession:c}),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:h.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 ${h.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:h.runningTaskCount}),t.jsx("span",{className:"executor-status-bar__separator","aria-hidden":"true",children:"/"}),t.jsx("span",{className:"executor-status-bar__max",children:h.maxConcurrent})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),h.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:h.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 ${h.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 ${h.blockedTaskCount>0?"executor-status-bar__count--warning":""}`,children:h.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:h.inReviewCount})]}),d&&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${g?" executor-status-bar__folder-toggle--active":""}`,onClick:()=>b(j=>!j),"aria-label":g?"Hide project directory":"Show project directory","aria-expanded":g,"data-testid":"executor-project-path-toggle",title:g?"Hide project directory":"Show project directory",children:t.jsx(Gn,{size:12,"aria-hidden":"true"})}),g&&t.jsx("button",{className:"executor-status-bar__project-path",onClick:m,title:d,"data-testid":"executor-project-path-link",children:d})]})]}),t.jsx("div",{className:"executor-status-bar__spacer"}),t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--time",children:[t.jsx(Ci,{size:12,className:"executor-status-bar__icon","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__time",children:x})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx(y,{size:12,style:{color:v.color},"aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__state",style:{color:v.color},children:v.label})]})]})}const tI={planning:si,subtask:Hi,mission_interview:vs,milestone_interview:vs,slice_interview:vs},nI={planning:"Planning",subtask:"Subtask Breakdown",mission_interview:"Mission Interview",milestone_interview:"Milestone Interview",slice_interview:"Slice Interview"},Li=new Set;function sI({sessions:e,onResumeSession:n,onDismissSession:s,onDismissAll:i}){const[r,o]=a.useState(0),l=()=>o(g=>g+1);a.useEffect(()=>{if(Li.size===0)return;const g=new Map(e.map(v=>[v.id,v]));let b=!1;for(const v of Li){const x=g.get(v);x&&x.status!=="awaiting_input"&&x.status!=="error"&&(Li.delete(v),b=!0)}b&&l()},[e]);const c=a.useMemo(()=>e.filter(g=>(g.status==="awaiting_input"||g.status==="error")&&!Li.has(g.id)),[e,r]);if(c.length===0)return null;const u=c.filter(g=>g.status==="awaiting_input").length,d=c.filter(g=>g.status==="error").length;let m="";u>0&&d>0?m=`${u} AI session${u===1?"":"s"} need${u===1?"s":""} your input, ${d} failed`:u>0?m=`${u} AI session${u===1?"":"s"} need${u===1?"s":""} your input`:d>0&&(m=`${d} AI session${d===1?"":"s"} failed`);const h=g=>{Li.add(g),l()},f=g=>{Li.delete(g.id),l(),n(g)},p=()=>{for(const g of c)Li.add(g.id);l(),i()};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(ms,{size:16,"aria-hidden":"true"}),t.jsx("span",{children:m})]}),t.jsxs("button",{className:"session-notification-banner__dismiss-all",onClick:p,children:[t.jsx(Jt,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:"Dismiss all"})]})]}),t.jsx("div",{className:"session-notification-banner__list",children:c.map(g=>{const b=tI[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(ms,{size:16,className:"session-notification-banner__type-icon session-notification-banner__type-icon--error","aria-hidden":"true"}):t.jsx(b,{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":nI[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:()=>{h(g.id),s(g.id)},"aria-label":`Dismiss ${g.title}`,children:t.jsx(Jt,{size:14,"aria-hidden":"true"})})]})]},g.id)})})]})}function iI({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:"npm i -g @runfusion/fusion"})," to update. "," ",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(Jt,{size:16,"aria-hidden":"true"})})]})}function aI({onResume:e}){const n=hP();if(!n)return null;const s=n.completedSteps.length,i=ji.length,r=s>0?`${s} of ${i} 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(as,{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:()=>{Ts("onboarding:resumed",{source:"resume-card",resumedFromStep:n.currentStep}),e()},children:[t.jsx(En,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:"Continue onboarding"})]})})]})}function rI({onOpenSettings:e,onOpenModelOnboarding:n}){const s=Sa(),i=yg(),[r,o]=a.useState(!0),[l,c]=a.useState(!1),[u,d]=a.useState(!1),[m,h]=a.useState({needsAiProvider:!1,needsDefaultModel:!1,needsGitHub:!1});a.useEffect(()=>{if(!s||i){o(!1);return}let x=!1;return(async()=>{try{o(!0),c(!1);const[j,N]=await Promise.all([jr(),Ji()]);if(x)return;const C=j.providers??[],w=C.find(T=>T.id==="github"),S=!C.some(T=>T.id!=="github"&&T.authenticated),z=!N.defaultProvider&&!N.defaultModelId,M=w?!w.authenticated:!1;h({needsAiProvider:S,needsDefaultModel:z,needsGitHub:M})}catch{x||c(!0)}finally{x||o(!1)}})(),()=>{x=!0}},[s,i]);const f=a.useCallback(()=>{uP(),d(!0)},[]),p=a.useCallback(()=>{n()},[n]),g=a.useCallback(()=>{e("global-models")},[e]),b=a.useCallback(()=>{e("authentication")},[e]),v=a.useMemo(()=>{const x=[];return m.needsAiProvider&&x.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:Kn}),m.needsDefaultModel&&x.push({id:"default-model",title:"Select Default Model",description:"Choose a default AI model for task execution",actionLabel:"Choose Model",onAction:g,icon:rp}),m.needsGitHub&&x.push({id:"github",title:"Connect GitHub",description:"Connect GitHub to import issues and track pull requests",actionLabel:"Connect GitHub",onAction:b,icon:ws}),x},[m.needsAiProvider,m.needsDefaultModel,m.needsGitHub,b,g,p]);return!s||i||u||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(si,{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(x=>{const y=x.icon;return t.jsxs("li",{className:"post-onboarding-recommendations__item",children:[t.jsxs("span",{className:"post-onboarding-recommendations__item-icon","aria-hidden":"true",children:[t.jsx(ms,{size:14,"aria-hidden":!0}),t.jsx(y,{size:14,"aria-hidden":!0})]}),t.jsxs("span",{className:"post-onboarding-recommendations__item-text",children:[t.jsx("strong",{children:x.title}),t.jsx("span",{children:x.description})]}),t.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:x.onAction,children:x.actionLabel})]},x.id)})})]})]}),t.jsx("button",{type:"button",className:"post-onboarding-recommendations__dismiss",onClick:f,"aria-label":"Dismiss recommendations",children:t.jsx(Jt,{size:16,"aria-hidden":!0})})]})}function oI({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 bc(e){return e>99?"99+":String(e)}function lI({view:e,onChangeView:n,footerVisible:s,modalOpen:i=!1,keyboardOpen:r=!1,onOpenSettings:o,onOpenActivityLog:l,onOpenSystemStats:c,onOpenMailbox:u,mailboxUnreadCount:d=0,onOpenGitManager:m,onOpenWorkflowSteps:h,onOpenSchedules:f,onOpenScripts:p,onToggleTerminal:g,onOpenFiles:b,onOpenGitHubImport:v,onOpenPlanning:x,onResumePlanning:y,activePlanningSessionCount:j=0,onOpenUsage:N,onRunScript:C,projectId:w,onViewAllProjects:_,showSkillsTab:S,experimentalFeatures:z}){const M=Aa(),[T,U]=a.useState(!1),[V,L]=a.useState(!1),[R,F]=a.useState({}),[W,G]=a.useState(!1),te=a.useMemo(()=>Object.entries(R).sort(([D],[se])=>D.localeCompare(se)),[R]);a.useEffect(()=>{if(!V)return;let D=!1;return G(!0),kr(w).then(se=>{D||F(se)}).catch(()=>{D||F({})}).finally(()=>{D||G(!1)}),()=>{D=!0}},[V,w]);const E=a.useCallback(()=>U(!1),[]),$=a.useCallback(D=>{E(),D?.()},[E]);if(a.useEffect(()=>{if(!T)return;const D=se=>{se.key==="Escape"&&U(!1)};return document.addEventListener("keydown",D),()=>document.removeEventListener("keydown",D)},[T]),M!=="mobile"||i||r)return null;const P=j>0&&y?y:x,k=!!z?.roadmap,O=!!S,ne=!!z?.todoView,we=k&&(!O||e==="roadmaps"),ie=O&&(!k||e!=="roadmaps"),ce=O&&!ie,ke=e==="documents"||e==="research"||e==="insights"||e==="memory"||e==="devserver"||e==="dev-server"||e==="todos"&&ne||e==="roadmaps"&&!we||e==="skills"&&!ie;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(qi,{}),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(Cn,{}),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(vs,{}),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.jsx(Ni,{}),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.jsx(fa,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Mailbox"}),d>0&&t.jsx("span",{className:"mobile-nav-tab-badge",children:bc(d)})]}),ie&&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(Kn,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Skills"})]}),we&&t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="roadmaps"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-roadmaps",role:"tab","aria-selected":e==="roadmaps",onClick:()=>n("roadmaps"),children:[t.jsx(Mc,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Roadmaps"})]}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${ke?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-more",role:"tab","aria-selected":!1,onClick:()=>U(D=>!D),children:[t.jsx(Nc,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"More"})]})]}),T&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"mobile-more-sheet-backdrop",onClick:E}),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"}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-mailbox",onClick:()=>$(u),children:[t.jsx(fa,{}),t.jsx("span",{children:"Mailbox"}),d>0&&t.jsx("span",{className:"mobile-more-item-badge mobile-more-item-badge--unread",children:bc(d)})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-activity",onClick:()=>$(l),children:[t.jsx(Is,{}),t.jsx("span",{children:"Activity Log"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-system-stats",onClick:()=>$(c),children:[t.jsx(br,{}),t.jsx("span",{children:"System Stats"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-git",onClick:()=>$(m),children:[t.jsx(Vs,{}),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:()=>$(g),children:[t.jsx(mi,{}),t.jsx("span",{children:"Terminal"})]}),t.jsx("button",{type:"button",className:"mobile-more-split-toggle","data-testid":"mobile-more-terminal-split-toggle",onClick:()=>L(D=>!D),"aria-expanded":V,"aria-haspopup":"menu","aria-label":"Show scripts",children:t.jsx(jn,{size:14,className:`mobile-more-chevron${V?" mobile-more-chevron--open":""}`})})]}),V&&t.jsx("div",{className:"mobile-more-submenu",role:"menu","aria-label":"Scripts submenu",children:W?t.jsxs("div",{className:"mobile-more-submenu-loading","data-testid":"mobile-more-scripts-loading",children:[t.jsx(lt,{size:14,className:"animate-spin"}),t.jsx("span",{children:"Loading scripts…"})]}):te.length>0?t.jsxs(t.Fragment,{children:[te.map(([D,se])=>t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem","data-testid":`mobile-more-script-item-${D}`,onClick:()=>{C&&C(D,se),E(),L(!1)},children:[t.jsx(En,{size:14}),t.jsx("span",{children:D})]},D)),p&&t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem mobile-more-subitem--manage","data-testid":"mobile-more-scripts-manage",onClick:()=>{E(),L(!1),p()},children:[t.jsx(Bs,{size:14}),t.jsx("span",{children:"Manage Scripts…"})]})]}):p&&t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem","data-testid":"mobile-more-scripts-manage",onClick:()=>{E(),L(!1),p()},children:[t.jsx(Bs,{size:14}),t.jsx("span",{children:"No scripts — add one…"})]})}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-files",onClick:()=>$(b),children:[t.jsx(Gn,{}),t.jsx("span",{children:"Files"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-planning",onClick:()=>$(P),children:[t.jsx(si,{}),t.jsx("span",{children:"Planning"}),j>0&&t.jsx("span",{className:"mobile-more-item-badge",children:bc(j)})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-workflow",onClick:()=>$(h),children:[t.jsx(Ac,{}),t.jsx("span",{children:"Workflow Steps"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-schedules",onClick:()=>$(f),children:[t.jsx(Ci,{}),t.jsx("span",{children:"Automation"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-github",onClick:()=>$(v),children:[t.jsx(oI,{}),t.jsx("span",{children:"Import from GitHub"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-usage",onClick:()=>$(N),children:[t.jsx(Is,{}),t.jsx("span",{children:"Usage"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-projects",onClick:()=>$(_),children:[t.jsx(ap,{}),t.jsx("span",{children:"Projects"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-documents",onClick:()=>$(()=>n("documents")),children:[t.jsx(Bi,{}),t.jsx("span",{children:"Documents"})]}),ce&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-skills",onClick:()=>$(()=>n("skills")),children:[t.jsx(Kn,{}),t.jsx("span",{children:"Skills"})]}),k&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-roadmaps",onClick:()=>$(()=>n("roadmaps")),children:[t.jsx(Mc,{}),t.jsx("span",{children:"Roadmaps"})]}),z?.researchView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-research",onClick:()=>$(()=>n("research")),children:[t.jsx(wi,{}),t.jsx("span",{children:"Research"})]}),z?.insights&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-insights",onClick:()=>$(()=>n("insights")),children:[t.jsx(as,{}),t.jsx("span",{children:"Insights"})]}),z?.memoryView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-memory",onClick:()=>$(()=>n("memory")),children:[t.jsx(ko,{}),t.jsx("span",{children:"Memory"})]}),z?.devServerView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-dev-server",onClick:()=>{$(()=>n("dev-server"))},children:[t.jsx(br,{size:14}),t.jsx("span",{children:"Dev Server"})]}),ne&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-todos",onClick:()=>$(()=>n("todos")),children:[t.jsx(dp,{size:14}),t.jsx("span",{children:"Todos"})]}),t.jsx("div",{className:"mobile-more-separator"}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-settings",onClick:()=>$(o),children:[t.jsx(ur,{}),t.jsx("span",{children:"Settings"})]})]})]})]})}function cI({agents:e,filter:n,highlightedIndex:s,visible:i,onSelect:r,position:o="below"}){const l=a.useMemo(()=>{const c=n.trim().toLowerCase();return c?e.filter(u=>u.name.toLowerCase().includes(c)):e},[e,n]);return i?t.jsx("div",{className:`agent-mention-popup agent-mention-popup--${o}`,"data-testid":"agent-mention-popup",role:"listbox","aria-label":"Agent mention suggestions",children:l.length===0?t.jsx("div",{className:"agent-mention-empty",children:"No agents found"}):l.map((c,u)=>t.jsxs("button",{type:"button",className:`agent-mention-item${u===s?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${c.id}`,onMouseDown:d=>d.preventDefault(),onClick:()=>r(c),role:"option","aria-selected":u===s,children:[t.jsx(Cn,{size:14,"aria-hidden":"true"}),t.jsx("span",{className:"agent-mention-name",children:c.name}),t.jsx("span",{className:"agent-mention-role",children:c.role})]},c.id))}):null}const Fd="__fn_agent__";function Sg(e,n){const s=typeof e=="string"?e.trim():"",i=typeof n=="string"?n.trim():"";return!s||!i?{}:{modelProvider:s,modelId:i}}function Lh(e,n,s){const i=typeof e=="string"?e.trim():"",r=Sg(n,s),o=i||(r.modelProvider&&r.modelId?Fd:"");return o?{agentId:o,...r}:null}function xc(e,n,s){const i=Sg(n,s),r=i.modelProvider??"",o=i.modelId??"";return`${e}::${r}/${o}`}function dI(e){const n=e?.toolCalls;if(!Array.isArray(n))return;const s=n.map(i=>{if(!i||typeof i!="object")return null;const r=i,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(i=>i!==null);return s.length>0?s:void 0}function zh(e){return{id:e.id,sessionId:e.sessionId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput,toolCalls:dI(e.metadata),createdAt:e.createdAt}}function uI(e,n){const[s,i]=a.useState(null),[r,o]=a.useState(!1),[l,c]=a.useState([]),[u,d]=a.useState(!1),[m,h]=a.useState(!1),[f,p]=a.useState(""),[g,b]=a.useState(""),[v,x]=a.useState([]),[y,j]=a.useState(""),N=a.useRef(null),C=a.useRef(!1),w=a.useRef(null),_=a.useRef(""),S=a.useRef(null),z=a.useRef(""),M=a.useRef(null);a.useEffect(()=>{_.current=y},[y]);const T=a.useCallback(async $=>{const P={agentId:$.agentId};return $.modelProvider&&$.modelId&&(P.modelProvider=$.modelProvider,P.modelId=$.modelId),(await yw(P,e)).session},[e]),U=a.useCallback(async($,P,k)=>{const O=Lh($,P,k);if(!O)return;const ne=xc(O.agentId,O.modelProvider,O.modelId);o(!0);try{const{session:we}=await vw({agentId:O.agentId,modelProvider:O.modelProvider,modelId:O.modelId},e);if(we)i(we),z.current=ne;else{const ie=await T(O);i(ie),z.current=ne}}catch(we){console.error("[useQuickChat] Failed to initialize session:",we),n?.("Failed to initialize chat","error")}finally{o(!1)}},[e,n,T]),V=a.useCallback(async()=>{if(s){d(!0);try{const $=await hu(s.id,{limit:50},e);c($.messages.map(zh))}catch($){console.error("[useQuickChat] Failed to load messages:",$)}finally{d(!1)}}},[s,e]);a.useEffect(()=>{s?V():c([])},[s,V]);const L=a.useCallback(async()=>{if(s){d(!0);try{const $=await hu(s.id,{limit:50},e);c($.messages.map(zh))}catch($){console.error("[useQuickChat] Failed to reload messages:",$)}finally{d(!1)}}},[s,e]),R=a.useCallback(async($,P,k)=>{const O=Lh($,P,k);if(!O)return;const ne=xc(O.agentId,O.modelProvider,O.modelId);M.current=O;const we=ne===z.current&&s;if(we||(N.current&&(N.current.close(),N.current=null),p(""),b(""),x([]),h(!1)),we){await L();return}i(null),c([]),z.current=ne,await U(O.agentId,O.modelProvider,O.modelId)},[U,L,s]),F=a.useCallback(async($,P)=>{await R(Fd,$,P)},[R]),W=a.useCallback(async()=>{const $=M.current;if(!$)return;const P=xc($.agentId,$.modelProvider,$.modelId);N.current&&(N.current.close(),N.current=null),p(""),b(""),x([]),h(!1),c([]),i(null),o(!0);try{const k=await T($);i(k),z.current=P}catch(k){console.error("[useQuickChat] Failed to start a fresh session:",k),n?.("Failed to start a new chat","error")}finally{o(!1)}},[n,T]),G=a.useCallback(()=>{s&&(C.current=!0,w.current?.(),w.current=null,N.current?.close(),N.current=null,jw(s.id,e).catch(()=>{}),h(!1),p(""),b(""),x([]))},[s,e]),te=a.useCallback(()=>{_.current="",j("")},[]),E=a.useCallback(($,P)=>{if(!s||!$.trim()&&(!P||P.length===0))return Promise.resolve();if(m)return P&&P.length>0?Promise.reject(new Error("Cannot send attachments while a response is streaming")):(_.current=$,j($),Promise.resolve());const k=new Promise((O,ne)=>{S.current={resolve:O,reject:ne},C.current=!1,N.current&&(N.current.close(),N.current=null);const ie={id:`temp-${Date.now()}`,sessionId:s.id,role:"user",content:$,createdAt:new Date().toISOString()};c(be=>[...be,ie]),p(""),b(""),x([]),h(!0);let ce="",ke="",D=[],se=null,Z=null;const ge=()=>{se=null,p(ce)},ue=()=>{Z=null,b(ke)},me=()=>{se!==null&&(cancelAnimationFrame(se),se=null),Z!==null&&(cancelAnimationFrame(Z),Z=null)};w.current=me;const ae={onThinking:be=>{ke+=be,Z===null&&(Z=requestAnimationFrame(ue))},onText:be=>{ce+=be,se===null&&(se=requestAnimationFrame(ge))},onToolStart:be=>{D=[...D,{toolName:be.toolName,args:be.args,isError:!1,status:"running"}],x(D)},onToolEnd:be=>{const Ae=[...D];for(let Fe=Ae.length-1;Fe>=0;Fe--){const at=Ae[Fe];if(at?.toolName===be.toolName&&at.status==="running"){Ae[Fe]={...at,status:"completed",isError:be.isError,result:be.result},D=Ae,x(Ae);return}}D=[...Ae,{toolName:be.toolName,isError:be.isError,result:be.result,status:"completed"}],x(D)},onDone:be=>{me();const Ae={id:be.messageId||`msg-${Date.now()}`,sessionId:s.id,role:"assistant",content:ce,thinkingOutput:ke||void 0,toolCalls:D.length>0?D:void 0,createdAt:new Date().toISOString()};c(at=>[...at,Ae]),p(""),b(""),x([]),h(!1),N.current=null,S.current?.resolve(),S.current=null;const Fe=_.current.trim();Fe&&(_.current="",j(""),E(Fe))},onError:be=>{if(me(),p(""),b(""),x([]),h(!1),N.current=null,console.error("[useQuickChat] Stream error:",be),n?.("Failed to get response","error"),S.current?.reject(new Error(typeof be=="string"?be:"Failed to get response")),S.current=null,!C.current){const Ae=_.current.trim();Ae&&(_.current="",j(""),E(Ae))}L()}};N.current=kw(s.id,$,ae,P,e)});return k.catch(()=>{}),k},[s,m,e,n,L]);return a.useEffect(()=>()=>{N.current&&(N.current.close(),N.current=null)},[]),a.useMemo(()=>({activeSession:s,sessionsLoading:r,messages:l,messagesLoading:u,isStreaming:m,streamingText:f,streamingThinking:g,streamingToolCalls:v,pendingMessage:y,sendMessage:E,stopStreaming:G,clearPendingMessage:te,switchSession:R,startModelChat:F,startFreshSession:W,loadMessages:V,reloadMessages:L}),[s,r,l,u,m,f,g,v,y,E,G,te,R,F,W,V,L])}function mI(e,n){const[s,i]=a.useState([]),[r,o]=a.useState(null),[l,c]=a.useState(!1),u=a.useCallback(async f=>{c(!0);try{const p=n?.filterState,g=p&&p!=="all"?{state:p}:void 0,b=n?.showSystemAgents??!1,v=await _a({...g,...f,includeEphemeral:f?.includeEphemeral??b},e),x=Array.from(new Map(v.map(y=>[y.id,y])).values());i(x)}catch(p){console.error("Failed to load agents:",p)}finally{c(!1)}},[e,n?.filterState,n?.showSystemAgents]),d=a.useCallback(async()=>{try{const f=await ek(e);o(f)}catch(f){console.error("Failed to load agent stats:",f)}},[e]);a.useEffect(()=>{u(),d()},[u,d]),a.useEffect(()=>{const f=e?`?projectId=${encodeURIComponent(e)}`:"",p=()=>{u(),d()};return Ks(`/api/events${f}`,{events:{"agent:created":p,"agent:updated":p,"agent:deleted":p,"agent:stateChanged":p}})},[e,u,d]);const m=n?.showSystemAgents??!1,h=s.filter(f=>f.state!=="active"&&f.state!=="running"?!1:m||!Hw(f));return{agents:s,activeAgents:h,stats:r,isLoading:l,loadAgents:u,loadStats:d}}function hI({visible:e,position:n,files:s,selectedIndex:i,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 u=Mw(l.path),d=l.name;return t.jsxs("li",{className:`file-mention-popup-item${c===i?" file-mention-popup-item--selected":""}`,onClick:()=>r(l),onMouseEnter:()=>{},role:"option","aria-selected":c===i,"data-testid":`file-mention-item-${c}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(sp,{size:14})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsx("span",{className:"file-mention-popup-item-name",children:d}),u&&t.jsx("span",{className:"file-mention-popup-item-path",children:u})]})]},l.path)})})]}):null}const pI=200;function fI(e={}){const{projectId:n,workspace:s="project"}=e,[i,r]=a.useState(!1),[o,l]=a.useState(""),[c,u]=a.useState(-1),[d,m]=a.useState([]),[h,f]=a.useState(!1),[p,g]=a.useState(0),b=a.useRef(null),v=a.useRef(null);a.useEffect(()=>()=>{b.current&&clearTimeout(b.current),v.current?.abort()},[]);const x=a.useCallback((w,_)=>{if(_<0||_>w.length){r(!1);return}const S=z=>/[a-zA-Z0-9/_.-]/.test(z);for(let z=_-1;z>=0;z--){if(w[z]==="#")if(z===0){const M=w.slice(z+1,_);u(z),l(M),g(0),r(!0);return}else{const M=w[z-1];if(/[\s,.;:!?'"()[\]{}]/.test(M)){const T=w.slice(z+1,_);u(z),l(T),g(0),r(!0);return}r(!1);return}if(!S(w[z])){r(!1);return}}r(!1)},[]),y=a.useCallback(()=>{r(!1),l(""),u(-1),m([]),g(0),f(!1)},[]),j=a.useCallback(async w=>{if(!w.trim()){m([]),f(!1);return}v.current?.abort(),v.current=new AbortController;try{f(!0);const _=await oj(w,s,n);m(_.files),g(0)}catch(_){_.name!=="AbortError"&&m([])}finally{f(!1)}},[s,n]);a.useEffect(()=>{if(i)return b.current&&clearTimeout(b.current),b.current=setTimeout(()=>{j(o)},pI),()=>{b.current&&clearTimeout(b.current)}},[o,i,j]);const N=a.useCallback((w,_)=>{if(!i||c<0)return _;const S=_.slice(0,c),z=_.slice(c+1),M=z.match(/[\s]|$/),T=M?M.index:z.length,U=z.slice(T);return`${S}#${w.path}${U}`},[i,c]),C=a.useCallback((w,_)=>{if(!i||d.length===0)return!1;switch(w.key){case"ArrowDown":return w.preventDefault(),g(S=>Math.min(S+1,d.length-1)),!0;case"ArrowUp":return w.preventDefault(),g(S=>Math.max(S-1,0)),!0;case"Enter":case"Tab":return d[p]?(w.preventDefault(),!0):!1;case"Escape":return w.preventDefault(),y(),!0;default:return!1}},[i,d,p,y]);return{mentionActive:i,files:d,loading:h,mentionQuery:o,selectedIndex:p,setSelectedIndex:g,detectMention:x,selectFile:N,dismissMention:y,handleKeyDown:C}}const gI=30,bI=16,xI=16;function vI(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}let vo=null;function Cg(){return vo===null&&(vo=window.visualViewport?.height??window.innerHeight),vo}function yI(e){const n=Cg();e>n&&(vo=e)}function jI(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 kI(){if(typeof window>"u"||!window.visualViewport)return{overlap:0,open:!1,vvHeight:null,vvOffsetTop:0};const e=window.visualViewport,n=jI(document.activeElement),s=e.offsetTop;n||yI(e.height);const i=Math.max(0,window.innerHeight-e.offsetTop-e.height);if(i>0)return{overlap:i,open:!0,vvHeight:e.height,vvOffsetTop:s};const r=Cg(),o=Math.max(0,r-e.offsetTop-e.height);if(o>=gI)return{overlap:o,open:!0,vvHeight:e.height,vvOffsetTop:s};if(o>=bI&&n)return{overlap:o,open:!0,vvHeight:e.height,vvOffsetTop:s};const l=Math.max(0,r-e.height);return n&&l>=xI?{overlap:0,open:!0,vvHeight:e.height,vvOffsetTop:s}:{overlap:0,open:!1,vvHeight:null,vvOffsetTop:0}}function Eg({enabled:e=!0}={}){const[n,s]=a.useState(0),[i,r]=a.useState(null),[o,l]=a.useState(0),[c,u]=a.useState(!1);return a.useEffect(()=>{if(!e||!vI()){s(0),r(null),l(0),u(!1);return}const d=window.visualViewport;if(!d){s(0),r(null),l(0),u(!1);return}const m=()=>{const h=kI();s(h.overlap),r(h.vvHeight),l(h.vvOffsetTop),u(h.open)};return m(),d.addEventListener("resize",m),d.addEventListener("scroll",m),document.addEventListener("focusin",m),document.addEventListener("focusout",m),()=>{d.removeEventListener("resize",m),d.removeEventListener("scroll",m),document.removeEventListener("focusin",m),document.removeEventListener("focusout",m),s(0),r(null),l(0),u(!1)}},[e]),{keyboardOverlap:n,viewportHeight:i,viewportOffsetTop:o,keyboardOpen:c}}function wI(e){return`${e.name?.trim()||e.id} (${e.role})`}function NI(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 SI(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 yo(e,n){return e.length<=n?e:`${e.slice(0,n)}…`}function CI(e){if(!e)return null;const n=Object.entries(e);return n.length===0?null:n.map(([s,i])=>{const r=typeof i=="string"?i:(()=>{try{return JSON.stringify(i)}catch{return String(i)}})();return`${s}=${yo(r,50)}`}).join(", ")}function EI(e){if(e===void 0)return null;if(typeof e=="string")return yo(e,200);try{return yo(JSON.stringify(e),200)}catch{return yo(String(e),200)}}function Mg(e,n=!1){if(!e||e.length===0)return null;const s=(f,p)=>{const g=f.status==="running",b=f.status==="completed"&&f.isError,v=CI(f.args),x=EI(f.result),y=g?v:x?`result: ${x}`:v?`args: ${v}`:null,j=n?null:y,N=g?"running":b?"error":"completed";return t.jsxs("details",{className:`chat-tool-call${g?" chat-tool-call--running":""}${b?" 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}),j&&t.jsx("span",{className:"chat-tool-call-preview",title:j,children:j}),t.jsx("span",{className:"chat-tool-call-status-text",children:N})]}),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})]}),x&&t.jsxs("div",{className:`chat-tool-call-row${b?" 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:x})]})]})]},`${f.toolName}-${p}`)},i=`chat-tool-calls${n?" chat-tool-calls--compact":""}`;if(e.length===1)return t.jsxs("div",{className:i,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(qd,{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))),u=c.slice(0,5),d=Math.max(0,c.length-u.length),m=d>0?`${u.join(", ")}, +${d} more`:u.join(", "),h=l?`(${r} running)`:o>0?`(${o} ${o===1?"error":"errors"})`:null;return t.jsx("div",{className:i,"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(qd,{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:m,children:m}),h&&t.jsx("span",{className:"chat-tool-calls-group-status",children:h})]}),e.map((f,p)=>s(f,p))]})})}const _g={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 MI(e,n){const s=e.slice(0,n),i=/(^|[\s])@([\w-]*)$/.exec(s);if(!i)return null;const r=i[2]??"",o=s.length-r.length-1;return{filter:r,start:o,end:n}}const go={width:320,height:400},_I=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"]),AI=[".png",".jpg",".jpeg",".gif",".webp",".txt",".json",".yaml",".yml",".log",".csv",".xml",".md"];function RI(e){return e.type.startsWith("image/")}function TI(e){if(_I.has(e.type))return!0;const n=e.name.toLowerCase();return AI.some(s=>n.endsWith(s))}const la={width:280,height:260},ki=768,ca=8;function PI(e,n){const s=a.useCallback(()=>{if(typeof window>"u")return 0;const b=getComputedStyle(document.documentElement).getPropertyValue("--executor-footer-height").trim();return b&&parseFloat(b)||0},[]),i=a.useCallback(()=>typeof window<"u"&&window.innerWidth<=768?{x:4,y:4+s()}:{x:24,y:24+s()},[s]),[r,o]=a.useState(()=>{if(typeof window>"u")return i();const b=`fusion-quick-chat-position-${e||"default"}`;try{const v=localStorage.getItem(b);if(v){const x=JSON.parse(v);if(typeof x.x=="number"&&typeof x.y=="number"&&!isNaN(x.x)&&!isNaN(x.y))return x}}catch{}return i()}),[l,c]=a.useState(!1),u=a.useRef(null),d=n??a.useRef(!1),m=a.useCallback(b=>{if(typeof window>"u")return b;const v=48,x=window.innerWidth<=768?4:8,y=window.innerWidth<=768?44:0,j=window.innerWidth>768?s():0,N=window.innerWidth-v-x,C=window.innerHeight-v-x-y-j;return{x:Math.max(x,Math.min(N,b.x)),y:Math.max(x,Math.min(C,b.y))}},[s]),h=a.useCallback(b=>{if(typeof window>"u")return;const v=`fusion-quick-chat-position-${e||"default"}`;try{localStorage.setItem(v,JSON.stringify(b))}catch{}},[e]),f=a.useCallback(b=>{if(b.button!==0&&b.pointerType==="mouse")return;const x=b.target.closest(".quick-chat-fab");x&&(b.preventDefault(),typeof x.setPointerCapture=="function"&&x.setPointerCapture(b.pointerId),u.current={x:r.x,y:r.y,pointerX:b.clientX,pointerY:b.clientY},d.current=!1,c(!0),document.body.style.userSelect="none")},[r]),p=a.useCallback(b=>{if(!u.current||!l)return;const v=b.clientX-u.current.pointerX,x=b.clientY-u.current.pointerY;if((Math.abs(v)>=5||Math.abs(x)>=5)&&(d.current=!0),d.current){const y=u.current.x-v,j=u.current.y-x,N=m({x:y,y:j});o(N)}},[l,m]),g=a.useCallback(b=>{if(!u.current)return;const v=b.target.closest(".quick-chat-fab");if(v&&typeof v.releasePointerCapture=="function"&&v.releasePointerCapture(b.pointerId),c(!1),document.body.style.userSelect="",!d.current){u.current=null;return}h(r),u.current=null,d.current=!1},[r,h]);return{position:r,isDragging:l,handlePointerDown:f,handlePointerMove:p,handlePointerUp:g}}function II(e,n,s){const i=`fusion:quick-chat-size-${e||"default"}`,r=a.useCallback(()=>typeof window<"u"&&window.innerWidth>ki,[]),o=a.useCallback((f,p,g)=>{if(typeof window>"u")return f;const b=Math.max(la.width,window.innerWidth-p-ca),v=Math.max(la.height,window.innerHeight-g-ca);return{width:Math.max(la.width,Math.min(b,f.width)),height:Math.max(la.height,Math.min(v,f.height))}},[]),l=a.useCallback(()=>{if(typeof window>"u"||window.innerWidth<=ki)return go;try{const f=localStorage.getItem(i);if(!f)return go;const p=JSON.parse(f);return typeof p.width!="number"||typeof p.height!="number"?go:{width:p.width,height:p.height}}catch{return go}},[i]),[c,u]=a.useState(l),[d,m]=a.useState({right:0,bottom:0});a.useEffect(()=>{if(!r())return;const f={right:n+d.right,bottom:s+d.bottom};u(p=>o(p,f.right,f.bottom))},[o,r,n,s,d]),a.useEffect(()=>{if(r())try{localStorage.setItem(i,JSON.stringify(c))}catch{}},[r,c,i]);const h=a.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 b={pointerX:f.clientX,pointerY:f.clientY,width:c.width,height:c.height,anchorRight:d.right,anchorBottom:d.bottom};document.body.style.userSelect="none";const v=y=>{const j=y.clientX-b.pointerX,N=y.clientY-b.pointerY;let C=b.width,w=b.height,_=b.anchorRight,S=b.anchorBottom;if(p.includes("w")&&(C=b.width-j),p.includes("e")){const L=j;C=b.width+L,_=b.anchorRight-L}if(p.includes("n")&&(w=b.height-N),p.includes("s")){const L=N;w=b.height+L,S=b.anchorBottom-L}const z=n+_,M=s+S,T=o({width:C,height:w},z,M),U=Math.max(ca-n,Math.min(window.innerWidth-n-la.width-ca,_)),V=Math.max(ca-s,Math.min(window.innerHeight-s-la.height-ca,S));u(T),m({right:U,bottom:V})},x=y=>{typeof g.releasePointerCapture=="function"&&g.releasePointerCapture(y.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",x);try{localStorage.setItem(i,JSON.stringify({width:c.width,height:c.height}))}catch{}};document.addEventListener("pointermove",v),document.addEventListener("pointerup",x)},[d.bottom,d.right,o,s,n,r,c.height,c.width,i]);return{panelSize:c,anchorOffset:d,handleResizeStart:h}}const $I=a.memo(function({message:n,forcePlain:s,mentionAgentsByName:i,onToggleRender:r}){const o=n.role==="user",l=a.useMemo(()=>{if(!o)return null;const u=n.content,d=/@([\w-]+)/g,m=[];let h=0,f=d.exec(u);for(;f;){const[p,g=""]=f,b=f.index;b>h&&m.push(u.slice(h,b));const v=g.replace(/_/g," ").toLowerCase(),x=i.get(v);x?m.push(t.jsxs("span",{className:"chat-mention-chip",children:["@",x.name.replace(/\s+/g,"_")]},`${x.id}-${b}`)):m.push(p),h=b+p.length,f=d.exec(u)}return h<u.length&&m.push(u.slice(h)),m.length===0?u:m},[o,n.content,i]),c=a.useMemo(()=>o?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(ai,{remarkPlugins:[ri],components:_g,children:n.content})}),[o,s,n.content]);return t.jsxs("div",{className:`quick-chat-panel-message ${o?"quick-chat-panel-message--sent":"quick-chat-panel-message--received"}`,"data-testid":`quick-chat-message-${n.id}`,children:[o?t.jsx("p",{children:l}):t.jsxs(t.Fragment,{children:[c,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:()=>r(n.id),children:s?t.jsx(ad,{size:14}):t.jsx(Ea,{size:14})})]}),Mg(n.toolCalls,!0)]})});function DI({projectId:e,addToast:n,showFAB:s=!0,open:i,onOpenChange:r,favoriteProviders:o=[],favoriteModels:l=[],onToggleFavorite:c,onToggleModelFavorite:u}){const{agents:d}=mI(e),[m,h]=a.useState(!1),f=i!==void 0,p=f?i:m,g=f?Ce=>{r?.(typeof Ce=="function"?Ce(p):Ce)}:h;Eg({enabled:p});const b=Aa(),[v,x]=a.useState("agent"),[y,j]=a.useState(""),[N,C]=a.useState([]),[w,_]=a.useState(!1),[S,z]=a.useState(""),[M,T]=a.useState(""),[U,V]=a.useState(""),[L,R]=a.useState(""),[F,W]=a.useState(!1),[G,te]=a.useState(0),[E,$]=a.useState(-1),[P,k]=a.useState(()=>new Set),[O,ne]=a.useState([]),[we,ie]=a.useState(!1),[,ce]=a.useState(!1),[ke,D]=a.useState({top:0,left:0}),se=fI({projectId:e}),Z=a.useCallback(Ce=>{if(!Ce||!se.mentionActive)return;const Ke=Ce.getBoundingClientRect();D({top:Ke.top-260,left:Ke.left+8})},[se.mentionActive]),ge=a.useRef(!1),ue=a.useRef(!1),me=a.useRef(""),ae=a.useRef(0),be=a.useRef(null),Ae=a.useRef(0),{position:Fe,isDragging:at,handlePointerDown:et,handlePointerMove:Ye,handlePointerUp:rt}=PI(e,ge),Oe=Fe.y+60,{panelSize:We,anchorOffset:oe,handleResizeStart:xe}=II(e,Fe.x,Oe),ee=typeof window<"u"&&window.innerWidth>ki,{activeSession:Re,messages:Ue,isStreaming:pe,streamingText:Me,streamingThinking:ze,streamingToolCalls:tt,sessionsLoading:ye,messagesLoading:de,sendMessage:Ie,stopStreaming:fe,pendingMessage:_e,clearPendingMessage:Ge,switchSession:Pe,startModelChat:ft,startFreshSession:Y}=uI(e,n),le=a.useRef(null),ve=a.useRef(null),nt=a.useRef(null),Q=a.useRef(null),Je=a.useRef(null),ut=a.useRef([]),ht=a.useRef(!1),Et=a.useRef(null),yt=a.useRef(!1);a.useEffect(()=>{if(!p||typeof window>"u"||typeof document>"u"||window.innerWidth>ki)return;const Ce=window.scrollY,Ke=document.documentElement,mt=document.body,It={htmlOverflow:Ke.style.overflow,bodyOverflow:mt.style.overflow};return window.scrollTo(0,0),Ke.style.overflow="hidden",mt.style.overflow="hidden",()=>{Ke.style.overflow=It.htmlOverflow,mt.style.overflow=It.bodyOverflow,window.scrollTo(0,Ce)}},[p]),a.useLayoutEffect(()=>{if(!p||typeof window>"u"||!window.visualViewport)return;const Ce=le.current;if(!Ce)return;const Ke=window.visualViewport,mt=()=>{yt.current||(Ce.style.setProperty("--vv-height",`${Ke.height}px`),Ce.style.setProperty("--vv-offset-top",`${Ke.offsetTop||0}px`))};return mt(),Ke.addEventListener("resize",mt),Ke.addEventListener("scroll",mt),()=>{Ke.removeEventListener("resize",mt),Ke.removeEventListener("scroll",mt)}},[p]);const bt=S||M,vt=a.useMemo(()=>NI(bt),[bt]),qt=a.useMemo(()=>N.find(Ce=>`${Ce.provider}/${Ce.id}`===bt)??null,[N,bt]),Tt=a.useMemo(()=>SI(qt,vt),[qt,vt]),At=a.useMemo(()=>v==="model"?vt?`${Fd}::${vt.modelProvider}/${vt.modelId}`:"":y?`${y}::`:"",[v,vt,y]),Lt=v==="agent"?!!y:!!vt,Vt=!Lt||!Re;a.useEffect(()=>{if(d.length===0){j(""),x("model");return}d.some(Ke=>Ke.id===y)||j(d[0]?.id??"")},[d,y]),a.useEffect(()=>{!p||ue.current||(ue.current=!0,_(!0),hs().then(Ce=>{const Ke=Ce.models??[];if(C(Ke),S||Ke.length===0)return;const mt=Ce.defaultProvider,It=Ce.defaultModelId;if(mt&&It){const mn=`${mt}/${It}`;if(Ke.some(nn=>`${nn.provider}/${nn.id}`===mn)){T(mn),z(mn),x("model");return}}T("");const $t=Ke[0];$t&&z(`${$t.provider}/${$t.id}`)}).catch(Ce=>{console.error("[QuickChatFAB] Failed to load models:",Ce),C([]),T("")}).finally(()=>{_(!1)}))},[p,d.length,S]),a.useEffect(()=>{if(!p){me.current="";return}if(!At){me.current="";return}const Ce=At===me.current&&!Re&&!ye;if(!(At===me.current&&!Ce)){if(me.current=At,v==="model"&&vt){ft(vt.modelProvider,vt.modelId);return}v==="agent"&&y&&Pe(y)}},[p,v,vt,y,At,Re,ye,ft,Pe]),a.useEffect(()=>{p||(W(!1),R(""),$(-1),ut.current.forEach(Ce=>{Ce.previewUrl&&URL.revokeObjectURL(Ce.previewUrl)}),ne([]))},[p]),a.useEffect(()=>{ut.current=O},[O]),a.useEffect(()=>{if(!p){ht.current=!1;return}typeof window>"u"||(ht.current=window.innerWidth<=ki)},[p]),a.useEffect(()=>{if(!p||Vt||!ht.current)return;const Ce=Q.current;if(!Ce)return;const Ke=document.activeElement,mt=Ke?le.current?.contains(Ke):!1,It=Ke===document.body,$t=Ke===Et.current;if(!mt&&!It&&!$t){ht.current=!1;return}if($t){Ce.focus({preventScroll:!0}),ht.current=!1;return}const mn=requestAnimationFrame(()=>{Ce.focus(),ht.current=!1});return()=>cancelAnimationFrame(mn)},[p,Vt]),a.useEffect(()=>()=>{ut.current.forEach(Ce=>{Ce.previewUrl&&URL.revokeObjectURL(Ce.previewUrl)})},[]);const Kt=a.useCallback(Ce=>{j(Ce)},[]),Ot=a.useCallback(Ce=>{z(Ce)},[]),Wt=a.useCallback(()=>{!Lt||ye||Y()},[Lt,ye,Y]),_t=a.useMemo(()=>d.find(Ce=>Ce.id===y)??null,[d,y]),St=a.useMemo(()=>{const Ce=L.trim().toLowerCase();return Ce?d.filter(Ke=>Ke.name.toLowerCase().includes(Ce)):d},[d,L]),Yt=a.useMemo(()=>{const Ce=new Map;for(const Ke of d)Ce.set(Ke.name.toLowerCase(),Ke);return Ce},[d]);a.useEffect(()=>{te(0)},[L,F]),a.useEffect(()=>()=>{be.current!==null&&(window.clearTimeout(be.current),be.current=null)},[]),a.useEffect(()=>{if(!p)return;const Ce=mt=>{const It=mt.target;le.current?.contains(It)||ve.current?.contains(It)||It.closest(".model-combobox-dropdown--portal")||g(!1)},Ke=mt=>{mt.key==="Escape"&&g(!1)};return document.addEventListener("mousedown",Ce),document.addEventListener("keydown",Ke),()=>{document.removeEventListener("mousedown",Ce),document.removeEventListener("keydown",Ke)}},[p,g]),a.useEffect(()=>{if(!p)return;const Ce=nt.current;Ce&&(Ce.scrollTop=Ce.scrollHeight)},[Ue,Me,ze,p]);const Xt=a.useMemo(()=>v==="agent"?_t?`Message ${_t.name||_t.id}`:"Select an agent to start chatting":Tt?`Message ${Tt}`:"Select a model to start chatting",[v,_t,Tt]),Qt=_e.length>50?`${_e.slice(0,50)}…`:_e,B=a.useCallback(Ce=>{if(!Ce||Ce.length===0)return;const Ke=[];for(let mt=0;mt<Ce.length;mt+=1){const It=Ce[mt];TI(It)&&Ke.push({file:It,previewUrl:RI(It)?URL.createObjectURL(It):""})}Ke.length>0&&ne(mt=>[...mt,...Ke])},[]),he=a.useCallback(Ce=>{ne(Ke=>{const mt=Ke[Ce];return mt?.previewUrl&&URL.revokeObjectURL(mt.previewUrl),Ke.filter((It,$t)=>$t!==Ce)})},[]),De=a.useCallback(Ce=>{B(Ce.clipboardData?.files)},[B]),A=a.useCallback(async()=>{const Ce=U.trim(),Ke=ut.current;if(!(!Ce&&Ke.length===0)&&!Vt){V(""),W(!1),R(""),$(-1);try{await Ie(Ce,Ke.map(mt=>mt.file)),Ke.forEach(mt=>{mt.previewUrl&&URL.revokeObjectURL(mt.previewUrl)}),ne(mt=>mt.filter(It=>!Ke.includes(It)))}catch{}}},[Ie,Vt,U]),X=a.useCallback(Ce=>{Ce.preventDefault(),Ae.current+=1,ie(!0)},[]),$e=a.useCallback(Ce=>{Ce.preventDefault(),Ce.dataTransfer.dropEffect="copy",ie(!0)},[]),dt=a.useCallback(Ce=>{Ce.preventDefault(),Ae.current=Math.max(0,Ae.current-1),Ae.current===0&&ie(!1)},[]),jt=a.useCallback(Ce=>{Ce.preventDefault(),Ae.current=0,ie(!1),B(Ce.dataTransfer?.files)},[B]),zt=a.useCallback((Ce,Ke)=>{const mt=MI(Ce,Ke);if(mt){W(!0),R(mt.filter),$(mt.start);return}W(!1),R(""),$(-1)},[]),Rt=a.useCallback(Ce=>{const Ke=Q.current;if(!Ke||E<0)return;const mt=Ke.selectionStart??ae.current,It=Ke.selectionEnd??mt,$t=Math.max(mt,It),mn=Math.min(E,$t),nn=`${`@${Ce.name.replace(/\s+/g,"_")}`} `,Nn=U.slice(0,mn)+nn+U.slice($t),_n=mn+nn.length;V(Nn),W(!1),R(""),te(0),$(-1),window.requestAnimationFrame(()=>{Q.current&&(Q.current.focus(),Q.current.setSelectionRange(_n,_n))})},[E,U]),un=a.useCallback(Ce=>{const Ke=Ce.target.value,mt=Ce.target.selectionStart??Ke.length;ae.current=mt,V(Ke),zt(Ke,mt),se.detectMention(Ke,mt),ce(se.mentionActive),se.mentionActive&&Z(Ce.target)},[zt,se,Z]),In=a.useCallback(()=>{typeof window<"u"&&window.innerWidth<=ki&&le.current&&(yt.current=!0,le.current.style.removeProperty("--vv-height"),le.current.style.removeProperty("--vv-offset-top"),window.setTimeout(()=>{yt.current=!1},450)),be.current!==null&&window.clearTimeout(be.current),be.current=window.setTimeout(()=>{W(!1),R(""),$(-1),ce(!1),se.dismissMention(),be.current=null},120)},[se]),gn=a.useCallback(()=>{yt.current=!1,be.current!==null&&(window.clearTimeout(be.current),be.current=null)},[]),Bt=a.useCallback(Ce=>{const Ke=Ce.currentTarget,mt=Ke.selectionStart??Ke.value.length;ae.current=mt,zt(Ke.value,mt),se.detectMention(Ke.value,mt),ce(se.mentionActive),se.mentionActive&&Z(Ke)},[zt,se,Z]),Mn=a.useCallback(Ce=>{Ce.key!=="Escape"&&Bt(Ce)},[Bt]),Ne=a.useCallback(Ce=>{k(Ke=>{const mt=new Set(Ke);return mt.has(Ce)?mt.delete(Ce):mt.add(Ce),mt})},[]),it=a.useCallback((Ce,Ke=!1)=>Ke?t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--plain",children:Ce}):t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--markdown",children:t.jsx(ai,{remarkPlugins:[ri],components:_g,children:Ce})}),[]),xn=a.useCallback(Ce=>{if(ae.current=Ce.currentTarget.selectionStart??ae.current,se.mentionActive&&se.files.length>0){if(se.handleKeyDown(Ce,U),Ce.key==="Enter"||Ce.key==="Tab"){const Ke=se.files[se.selectedIndex];if(Ke){const mt=se.selectFile(Ke,U);V(mt),se.dismissMention(),ce(!1)}}return}if(F&&Ce.key==="ArrowDown"){Ce.preventDefault(),St.length>0&&te(Ke=>(Ke+1)%St.length);return}if(F&&Ce.key==="ArrowUp"){Ce.preventDefault(),St.length>0&&te(Ke=>Ke===0?St.length-1:Ke-1);return}if(F&&Ce.key==="Enter"){Ce.preventDefault();const Ke=St[G]??St[0];Ke&&Rt(Ke);return}if(F&&Ce.key==="Escape"){Ce.preventDefault(),Ce.stopPropagation(),W(!1),R(""),$(-1);return}Ce.key!=="Enter"||Ce.shiftKey||(Ce.preventDefault(),A())},[F,St,G,Rt,A,se,U]),wn=a.useCallback(()=>{if(ge.current){ge.current=!1;return}if(p){g(!1);return}typeof window<"u"&&window.innerWidth<=ki&&Et.current?.focus({preventScroll:!0}),g(!0)},[p,g]);return t.jsxs(t.Fragment,{children:[t.jsx("input",{ref:Et,type:"text",className:"quick-chat-stealth-input","aria-hidden":"true",tabIndex:-1}),s&&t.jsx("button",{ref:ve,type:"button",className:"quick-chat-fab","aria-label":"Open quick chat","data-testid":"quick-chat-fab","data-dragging":at?"true":"false",style:{right:Fe.x,bottom:Fe.y},onPointerDown:et,onPointerMove:Ye,onPointerUp:rt,onClick:wn,children:t.jsx(Ni,{size:24})}),p&&t.jsxs("div",{className:"quick-chat-panel",ref:le,"data-testid":"quick-chat-panel",style:{...ee?{right:Fe.x+oe.right,bottom:Oe+oe.bottom,width:We.width,height:We.height}:{}},children:[ee&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"n","data-testid":"quick-chat-resize-n",onPointerDown:xe,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:xe,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:xe,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:xe,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:xe,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:xe,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:xe,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:xe,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"}),v==="model"&&Tt&&(()=>{const Ce=qt?.provider??vt?.modelProvider??"";return b==="mobile"&&Tt.length>12&&Ce?t.jsx("span",{className:"quick-chat-model-tag quick-chat-model-tag--icon","data-testid":"quick-chat-model-tag",title:Tt,"aria-label":Tt,children:t.jsx(Dn,{provider:Ce,size:"sm"})}):t.jsx("span",{className:"quick-chat-model-tag","data-testid":"quick-chat-model-tag",title:Tt,children:Tt})})()]}),t.jsxs("div",{className:"quick-chat-panel-header-actions",children:[d.length>0&&t.jsxs("div",{className:"quick-chat-header-mode-toggle","data-testid":"quick-chat-mode-toggle",children:[t.jsx("button",{type:"button",className:`quick-chat-mode-btn${v==="agent"?" quick-chat-mode-btn--active":""}`,"data-testid":"quick-chat-mode-agent",onClick:()=>{x("agent"),z("")},"aria-label":"Switch to agent mode",title:"Agent mode",children:"Agent"}),t.jsx("button",{type:"button",className:`quick-chat-mode-btn${v==="model"?" quick-chat-mode-btn--active":""}`,"data-testid":"quick-chat-mode-model",onClick:()=>{x("model"),j("")},"aria-label":"Switch to model mode",title:"Model mode",children:"Model"})]}),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:Wt,disabled:!Lt||ye,children:t.jsx(cn,{size:16})}),t.jsx("button",{type:"button",className:"btn-icon","aria-label":"Close quick chat","data-testid":"quick-chat-close",onClick:()=>g(!1),children:t.jsx(Jt,{size:16})})]})]}),v==="agent"&&d.length>0&&t.jsxs("div",{className:"quick-chat-panel-agent-select",children:[t.jsx("label",{htmlFor:"quick-chat-agent-select",className:"visually-hidden",children:"Select agent"}),t.jsx("select",{id:"quick-chat-agent-select",value:y,onChange:Ce=>Kt(Ce.target.value),"data-testid":"quick-chat-agent-select",children:d.map(Ce=>t.jsx("option",{value:Ce.id,children:wI(Ce)},Ce.id))})]}),v==="model"&&t.jsxs("div",{className:"quick-chat-panel-agent-select","data-testid":"quick-chat-model-select",children:[t.jsx("label",{htmlFor:"quick-chat-model-override",className:"visually-hidden",children:"Select model override"}),t.jsx(Jn,{id:"quick-chat-model-override",models:N,value:S,onChange:Ot,label:"Select model override",placeholder:w?"Loading models…":"Select a model",disabled:w||N.length===0,favoriteProviders:o,favoriteModels:l,onToggleFavorite:c,onToggleModelFavorite:u})]}),t.jsx("div",{className:"quick-chat-panel-messages",ref:nt,"data-testid":"quick-chat-messages",children:ye||de?t.jsx("div",{className:"quick-chat-panel-empty",children:"Loading conversation…"}):Ue.length===0&&!Me&&!ze&&!pe?t.jsx("div",{className:"quick-chat-panel-empty",children:"No messages yet. Start the conversation!"}):t.jsxs(t.Fragment,{children:[Ue.map(Ce=>t.jsx($I,{message:Ce,forcePlain:Ce.role!=="user"&&P.has(Ce.id),mentionAgentsByName:Yt,onToggleRender:Ne},Ce.id)),pe&&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:[Me?t.jsxs(t.Fragment,{children:[t.jsx("div",{"data-testid":"quick-chat-streaming-text",children:it(Me,P.has("__streaming__"))}),t.jsx("button",{type:"button",className:`quick-chat-message-render-toggle${P.has("__streaming__")?" quick-chat-message-render-toggle--plain":""}`,"data-testid":"quick-chat-message-render-toggle","aria-label":P.has("__streaming__")?"Show rendered markdown":"Show plain text",onClick:()=>Ne("__streaming__"),children:P.has("__streaming__")?t.jsx(ad,{size:14}):t.jsx(Ea,{size:14})})]}):t.jsx("p",{className:"quick-chat-panel-waiting","data-testid":"quick-chat-waiting",children:"Thinking…"}),Mg(tt,!0),ze&&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:ze})]})]})]})}),O.length>0&&t.jsx("div",{className:"quick-chat-attachment-previews","data-testid":"quick-chat-attachment-previews",children:O.map((Ce,Ke)=>t.jsxs("div",{className:"quick-chat-attachment-preview","data-testid":`quick-chat-attachment-preview-${Ke}`,children:[Ce.previewUrl?t.jsx("img",{src:Ce.previewUrl,alt:Ce.file.name}):t.jsx("span",{className:"quick-chat-attachment-preview-name",children:Ce.file.name}),t.jsx("button",{type:"button",className:"quick-chat-attachment-remove","data-testid":`quick-chat-attachment-remove-${Ke}`,"aria-label":`Remove ${Ce.file.name}`,onClick:()=>he(Ke),children:"×"})]},`${Ce.file.name}-${Ke}`))}),t.jsx("div",{className:"quick-chat-panel-input",children:t.jsxs("div",{className:`quick-chat-input-wrapper${we?" quick-chat-input-wrapper--dragover":""}`,onDragEnter:X,onDragOver:$e,onDragLeave:dt,onDrop:jt,children:[t.jsx("input",{ref:Je,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:Ce=>{B(Ce.target.files),Ce.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:()=>Je.current?.click(),children:t.jsx(op,{size:16})}),t.jsx("input",{ref:Q,type:"text",value:U,onChange:un,onKeyDown:xn,onKeyUp:Mn,onClick:Bt,onBlur:In,onFocus:gn,onPaste:De,onTouchStart:Ce=>{typeof window>"u"||window.innerWidth>ki||document.activeElement!==Ce.currentTarget&&(Ce.preventDefault(),Ce.currentTarget.focus({preventScroll:!0}))},placeholder:Xt,disabled:Vt,"data-testid":"quick-chat-input"}),pe?t.jsx("button",{type:"button",className:"chat-input-stop quick-chat-send-btn",onClick:fe,"aria-label":"Stop generation","data-testid":"quick-chat-stop",children:t.jsx(ks,{size:14})}):t.jsx("button",{type:"button",className:"quick-chat-send-btn",onClick:()=>{A()},disabled:Vt||U.trim().length===0&&O.length===0,"data-testid":"quick-chat-send",children:t.jsx(zi,{size:16})})]}),t.jsx(cI,{agents:d,filter:L,highlightedIndex:G,visible:F,onSelect:Rt,position:"above"}),t.jsx(hI,{visible:se.mentionActive&&!F,position:ke,files:se.files,selectedIndex:se.selectedIndex,onSelect:Ce=>{const Ke=se.selectFile(Ce,U);V(Ke),se.dismissMention(),ce(!1),Q.current?.focus()},loading:se.loading}),_e&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:`Queued: ${Qt}`}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:Ge,children:"×"})]})]})})]})]})}function sr(e){if(!e)return 0;const n=Date.parse(e);return Number.isFinite(n)?n:0}function Fh(e){return e.status==="generating"||e.status==="awaiting_input"}function ir(e){return e==="complete"||e==="error"}function LI(e){const[n,s]=a.useState([]),i=a.useRef(new Map),r=a.useRef(new Map),{sessions:o,broadcastUpdate:l,broadcastCompleted:c,requestSync:u}=Ta(),d=a.useCallback(()=>{dd(e).then(p=>{const g=p.filter(v=>{const x=sr(v.updatedAt),y=r.current.get(v.id);return y===void 0?!0:x<=y?!1:(r.current.delete(v.id),!0)}),b=new Map;for(const v of g)b.set(v.id,sr(v.updatedAt));i.current=b,s(g)}).catch(p=>{console.warn("[useBackgroundSessions] Failed to fetch AI sessions:",p)})},[e]);a.useEffect(()=>{u(),d()},[d,u]),a.useEffect(()=>{s(p=>{if(o.size===0)return p;let g=!1;const b=new Map(p.map(v=>[v.id,v]));for(const v of o.values()){if(e&&v.projectId&&v.projectId!==e)continue;const x=v.lastEventTimestamp,y=i.current.get(v.sessionId)??0;if(x<y)continue;const j=r.current.get(v.sessionId);if(j!==void 0&&x<=j)continue;if(j!==void 0&&x>j&&!ir(v.status)&&r.current.delete(v.sessionId),ir(v.status)){b.delete(v.sessionId)&&(g=!0),i.current.set(v.sessionId,x);continue}const N=b.get(v.sessionId),C=v.type??N?.type,w=v.title??N?.title;if(!N&&(!C||!w))continue;const _={id:v.sessionId,type:C??"planning",status:v.status,title:w??"AI Session",projectId:v.projectId??N?.projectId??e??null,lockedByTab:v.owningTabId??N?.lockedByTab??null,updatedAt:v.updatedAt??N?.updatedAt??new Date(x).toISOString()},S=b.get(v.sessionId);(!S||S.status!==_.status||S.title!==_.title||S.type!==_.type||S.projectId!==_.projectId||S.lockedByTab!==_.lockedByTab||S.updatedAt!==_.updatedAt)&&(b.set(v.sessionId,_),i.current.set(v.sessionId,x),g=!0)}return g?[...b.values()].sort((v,x)=>sr(x.updatedAt)-sr(v.updatedAt)):p})},[e,o]),a.useEffect(()=>{const p=e?`?projectId=${encodeURIComponent(e)}`:"",g=v=>{try{const x=JSON.parse(v.data),y=sr(x.updatedAt)||Date.now();s(j=>{const N=i.current.get(x.id)??0;if(y<N)return j;const C=r.current.get(x.id);if(C!==void 0&&y<=C)return j;if(C!==void 0&&y>C&&!ir(x.status)&&r.current.delete(x.id),i.current.set(x.id,y),ir(x.status))return j.filter(_=>_.id!==x.id);const w=j.findIndex(_=>_.id===x.id);if(w>=0){const _=[...j];return _[w]=x,_}return Fh(x)?[x,...j]:j}),l({sessionId:x.id,status:x.status,needsInput:x.status==="awaiting_input",type:x.type,title:x.title,projectId:x.projectId,owningTabId:x.lockedByTab,updatedAt:x.updatedAt,timestamp:y}),ir(x.status)&&c({sessionId:x.id,status:x.status,timestamp:y})}catch{}},b=v=>{try{const x=JSON.parse(v.data),y=Date.now();r.current.set(x,y),i.current.set(x,Math.max(i.current.get(x)??0,y)),c({sessionId:x,status:"complete",timestamp:y}),s(j=>j.filter(N=>N.id!==x))}catch{}};return Ks(`/api/events${p}`,{events:{"ai_session:updated":g,"ai_session:deleted":b},onReconnect:()=>{d()}})},[c,l,e,d]);const m=a.useCallback(async p=>{const b=n.find(j=>j.id===p)?.type,v=Yi();let x=!1;if(b==="planning")try{await xp(p,e,v)}catch(j){x=!0,j instanceof Error&&j.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of planning session ${p} despite lock by another tab`)}else if(b==="subtask")try{await jp(p,e,v)}catch(j){x=!0,j instanceof Error&&j.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of subtask session ${p} despite lock by another tab`)}else if(b==="mission_interview")try{await Cp(p,e,v)}catch(j){x=!0,j instanceof Error&&j.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of mission interview session ${p} despite lock by another tab`)}x&&console.warn(`[useBackgroundSessions] Cancellation failed for session ${p}, attempting delete anyway`);const y=Date.now();r.current.set(p,y),i.current.set(p,Math.max(i.current.get(p)??0,y)),c({sessionId:p,status:"complete",timestamp:y});try{await Ep(p)}catch{}s(j=>j.filter(N=>N.id!==p))},[c,e,n]),h=a.useMemo(()=>n.filter(p=>Fh(p)),[n]),f=a.useMemo(()=>h.filter(p=>p.type==="planning"),[h]);return{sessions:h,generating:h.filter(p=>p.status==="generating").length,needsInput:h.filter(p=>p.status==="awaiting_input").length,planningSessions:f,dismissSession:m,refresh:d}}function Wn(e){return{...e,dependencies:Array.isArray(e.dependencies)?e.dependencies:[],steps:Array.isArray(e.steps)?e.steps:[],log:Array.isArray(e.log)?e.log:[]}}function Oh(e,n){return!e&&!n?0:e?n?e.localeCompare(n):1:-1}function zI(e,n){return{...n,columnMovedAt:e.columnMovedAt??n.columnMovedAt,executionStartedAt:e.executionStartedAt??n.executionStartedAt,executionCompletedAt:e.executionCompletedAt??n.executionCompletedAt,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 vc(e,n){if(Oh(n.updatedAt,e.updatedAt)<0)return e;if(e.column===n.column)return zI(e,n);const i=Oh(e.columnMovedAt,n.columnMovedAt);return e.columnMovedAt&&!n.columnMovedAt?{...n,column:e.column,columnMovedAt:e.columnMovedAt}:i>0?{...n,column:e.column,columnMovedAt:e.columnMovedAt}:n}function FI(e){const n=e?.projectId,s=e?.searchQuery,i=e?.sseEnabled??!0,[r,o]=a.useState([]),[l,c]=a.useState(!1),u=a.useRef(l);u.current=l;const d=a.useRef(r),m=a.useRef(0),h=a.useRef(0),f=a.useRef(s),p=a.useRef(null),g=a.useRef(void 0),b=a.useRef(0),v=a.useRef(n);d.current=r,f.current=s,v.current!==n&&(v.current=n,b.current++);const x=1e3,y=a.useCallback(async G=>{const te=++m.current,E=n,$=G?.searchQueryOverride??f.current,P=G?.includeArchivedOverride??u.current;try{const k=await Vv(void 0,void 0,E,$,P);if(m.current!==te||n!==E)return;o(k.map(Wn)),g.current=Date.now()}catch{if(m.current!==te||n!==E)return;if(G?.clearOnError){o([]);return}o(k=>k)}},[n]);p.current=y;const j=a.useCallback(async()=>{u.current||(c(!0),u.current=!0,await p.current({includeArchivedOverride:!0}))},[]),N=a.useRef(s);a.useEffect(()=>{if(s===void 0&&N.current===void 0)return;N.current=s;const G=setTimeout(()=>{y({searchQueryOverride:s})},300);return()=>clearTimeout(G)},[s]),a.useEffect(()=>{y({clearOnError:!0});const G=()=>{if(document.visibilityState!=="visible")return;const te=Date.now();te-h.current<x||(h.current=te,y())};return document.addEventListener("visibilitychange",G),()=>{document.removeEventListener("visibilitychange",G)}},[y]),a.useEffect(()=>{if(i===!1)return;const G=b.current,te=n?`?projectId=${encodeURIComponent(n)}`:"",E=()=>b.current!==G;let $=!0;const P=ce=>{if(E())return;const ke=Wn(JSON.parse(ce.data));if(f.current){p.current({searchQueryOverride:f.current});return}o(D=>{const se=D.findIndex(me=>me.id===ke.id);if(se===-1)return[...D,ke];const Z=D[se],ge=vc(Z,ke);if(ge===Z)return D;const ue=[...D];return ue[se]=ge,ue}),g.current=Date.now()},k=ce=>{if(E())return;if(f.current){p.current({searchQueryOverride:f.current});return}const{task:ke,to:D}=JSON.parse(ce.data),se=Wn(ke);o(Z=>Z.map(ge=>ge.id===se.id?{...se,column:D}:ge)),g.current=Date.now()},O=ce=>{if(E())return;if(f.current){p.current({searchQueryOverride:f.current});return}const ke=Wn(JSON.parse(ce.data));o(D=>D.map(se=>se.id!==ke.id?se:vc(se,ke))),g.current=Date.now()},ne=ce=>{if(E())return;if(f.current){p.current({searchQueryOverride:f.current});return}const ke=Wn(JSON.parse(ce.data));o(D=>D.filter(se=>se.id!==ke.id))},we=ce=>{if(E())return;if(f.current){p.current({searchQueryOverride:f.current});return}const{task:ke}=JSON.parse(ce.data),D=Wn(ke);o(se=>se.map(Z=>Z.id===D.id?{...D,column:"done"}:Z))},ie=Ks(`/api/events${te}`,{events:{"task:created":P,"task:moved":k,"task:updated":O,"task:deleted":ne,"task:merged":we},onReconnect:()=>{$&&(E()||p.current())}});return()=>{$=!1,ie()}},[n,i]);const C=a.useCallback(async G=>{const te=Wn(await pp(G,n));return o(E=>E.some($=>$.id===te.id)?E:[...E,te]),te},[n]),w=a.useCallback(async(G,te)=>Wn(await Kv(G,te,n)),[n]),_=a.useCallback(async G=>Wn(await fp(G,n)),[n]),S=a.useCallback(async G=>Wn(await Gv(G,n)),[n]),z=a.useCallback(async G=>Jv(G,n),[n]),M=a.useCallback(async G=>Wn(await Yv(G,n)),[n]),T=a.useCallback(async G=>Wn(await Qv(G,n)),[n]),U=a.useCallback(async G=>{const te=Wn(await Xv(G,n));return o(E=>E.some($=>$.id===te.id)?E:[...E,te]),te},[n]),V=a.useCallback(async(G,te)=>{const E=d.current.find(P=>P.id===G),$=E?{...E,...te,updatedAt:new Date().toISOString()}:void 0;$&&o(P=>P.map(k=>k.id===G?$:k));try{const P=Wn(await ni(G,te,n));return o(k=>k.map(O=>O.id===G?P:O)),P}catch(P){throw E&&o(k=>k.map(O=>O.id===G?E:O)),P}},[n]),L=a.useCallback(async G=>{const te=Wn(await ey(G,n));return o(E=>E.map($=>$.id===G?te:$)),te},[n]),R=a.useCallback(async G=>{const te=Wn(await ty(G,n));return o(E=>E.map($=>$.id===G?te:$)),te},[n]),F=a.useCallback(async()=>{const te=(await ny(n)).map(Wn);return o(E=>E.map($=>te.find(k=>k.id===$.id)||$)),te},[n]),W=a.useCallback(G=>{if(G.length===0)return;if(f.current){p.current({searchQueryOverride:f.current});return}const te=G.map(Wn);o(E=>{let $=E;for(const P of te){const k=$.findIndex(we=>we.id===P.id);if(k===-1){$===E&&($=[...E]),$.push(P);continue}const O=$[k],ne=vc(O,P);ne!==O&&($===E&&($=[...E]),$[k]=ne)}return $}),g.current=Date.now()},[]);return{tasks:r,createTask:C,moveTask:w,pauseTask:_,deleteTask:S,mergeTask:z,retryTask:M,resetTask:T,duplicateTask:U,updateTask:V,archiveTask:L,unarchiveTask:R,archiveAllDone:F,loadArchivedTasks:j,includeArchived:l,ingestCreatedTasks:W,lastFetchTimeMs:g.current}}const OI=5e3,UI=1e3;function BI(){const[e,n]=a.useState([]),[s,i]=a.useState(!0),[r,o]=a.useState(null),l=a.useRef(null),c=a.useRef(0),u=a.useCallback(async()=>{try{o(null);const f=await lu();n(f)}catch(f){o(f instanceof Error?f.message:"Failed to fetch projects")}},[]);a.useEffect(()=>{let f=!1;async function p(){i(!0);const b=performance.now();try{const v=await lu(),y=`initial fetchProjectsAcrossNodes took ${Math.round(performance.now()-b)}ms (${v.length} projects)`;console.log(`[useProjects] ${y}`),mr("[useProjects]",y),f||(n(v),o(null))}catch(v){const y=`initial fetch failed after ${Math.round(performance.now()-b)}ms: ${v instanceof Error?v.message:String(v)}`;console.warn(`[useProjects] ${y}`),mr("[useProjects]",y),f||o(v instanceof Error?v.message:"Failed to fetch projects")}finally{f||i(!1)}}p();const g=()=>{if(document.visibilityState!=="visible")return;const b=Date.now();b-c.current<UI||(c.current=b,u())};return document.addEventListener("visibilitychange",g),()=>{f=!0,document.removeEventListener("visibilitychange",g)}},[u]),a.useEffect(()=>{if(!s)return l.current=setInterval(()=>{u()},OI),()=>{l.current&&(clearInterval(l.current),l.current=null)}},[s,u]);const d=a.useCallback(async f=>{const p=await ak(f);return n(g=>[...g,p]),p},[]),m=a.useCallback(async(f,p)=>{const g=await uk(f,p);return n(b=>b.map(v=>v.id===f?g:v)),g},[]),h=a.useCallback(async f=>{await wp(f),n(p=>p.filter(g=>g.id!==f))},[]);return{projects:e,loading:s,error:r,refresh:u,register:d,update:m,unregister:h}}const HI="kb-dashboard-current-project";function qI(e){return e??"local"}function VI(e,n={}){const{nodeId:s=null}=n,[i,r]=a.useState(null),[o,l]=a.useState(!0),c=a.useRef(!1),u=a.useRef(!1),d=a.useRef(null),m=qI(s);a.useEffect(()=>{let p=!1;async function g(){try{const b=await Ji();if(p)return;d.current=b.dashboardCurrentProjectIdByNode??{};const v=d.current[m];if(v){const x=e.find(y=>y.id===v);x&&(r(x),c.current=!0)}if(!v)try{const x=localStorage.getItem(HI);if(x){const y=JSON.parse(x);y?.id&&e.some(N=>N.id===y.id)&&(r(y),c.current=!0,d.current={...d.current,[m]:y.id},await fn({dashboardCurrentProjectIdByNode:d.current}).catch(()=>{}))}}catch{}}catch{}finally{p||l(!1)}}return g(),()=>{p=!0}},[m,e]),a.useEffect(()=>{if(!o){if(i){if(!e.some(b=>b.id===i.id)&&e.length>0){const b=e.find(v=>v.status==="active");r(b||e[0]||null);return}const g={...d.current,[m]:i.id};d.current=g,fn({dashboardCurrentProjectIdByNode:g}).catch(()=>{})}else if(e.length>0&&!u.current){const p=e.find(g=>g.status==="active");p&&r(p)}}},[i,e,o,m]);const h=a.useCallback(p=>{if(u.current=!1,r(p),p){const g={...d.current,[m]:p.id};d.current=g,fn({dashboardCurrentProjectIdByNode:g}).catch(()=>{})}},[m]),f=a.useCallback(()=>{u.current=!0,r(null);const p={...d.current};delete p[m],d.current=p,fn({dashboardCurrentProjectIdByNode:p}).catch(()=>{})},[m]);return{currentProject:i,setCurrentProject:h,clearCurrentProject:f,loading:o}}const Ag=a.createContext(null);function WI({children:e}){const[n,s]=a.useState([]),i=a.useRef(0),r=a.useRef(new Map),o=a.useCallback(c=>{const u=r.current.get(c);u!==void 0&&(clearTimeout(u),r.current.delete(c)),s(d=>d.filter(m=>m.id!==c))},[]),l=a.useCallback((c,u="info")=>{const d=i.current++;s(h=>[...h,{id:d,message:c,type:u}]);const m=setTimeout(()=>o(d),4e3);r.current.set(d,m)},[o]);return a.useEffect(()=>()=>{r.current.forEach(c=>clearTimeout(c)),r.current.clear()},[]),jo.createElement(Ag.Provider,{value:{toasts:n,addToast:l,removeToast:o}},e)}function KI(){const e=a.useContext(Ag);if(!e)throw new Error("useToast must be used within ToastProvider");return e}const Rg="kb-dashboard-theme-mode",Tg="kb-dashboard-color-theme",Pg="kb-dashboard-font-scale-pct",sd=100,GI=85,JI=125,Ig=[...Uw],id="theme-data",yc="theme-data.css";function YI(){const e=document.baseURI||(typeof document.location<"u"?document.location.href:"");return e?e.endsWith("/")?e.slice(0,-1)+`/${yc}`:e.replace(/\/[^/]+$/,`/${yc}`):`/${yc}`}const xs=typeof window<"u",QI=xs?a.useLayoutEffect:a.useEffect;function $g(e){return e==="dark"||e==="light"||e==="system"}function Uh(){if(!xs)return"dark";try{const e=localStorage.getItem(Rg);if($g(e))return e}catch{}return"dark"}function Bh(){if(!xs)return"default";try{const e=localStorage.getItem(Tg);if(e&&Ig.includes(e))return e}catch{}return"default"}function Hh(e){if(xs)try{localStorage.setItem(Rg,e)}catch{}}function qh(e){if(xs)try{localStorage.setItem(Tg,e)}catch{}}function Cr(e){return typeof e!="number"||!Number.isFinite(e)?sd:Math.min(JI,Math.max(GI,Math.round(e)))}function Vh(){if(!xs)return sd;try{const e=Number(localStorage.getItem(Pg));return Cr(e)}catch{return sd}}function Wh(e){if(xs)try{localStorage.setItem(Pg,String(Cr(e)))}catch{}}function XI(e,n){return e==="system"?n?"dark":"light":e}function ZI(e,n,s,i){if(!xs)return;const r=XI(e,i);document.documentElement.setAttribute("data-theme",r),document.documentElement.setAttribute("data-color-theme",n),document.documentElement.style.fontSize=`${Cr(s)}%`}function Kh(){if(!xs)return;const e=YI(),n=document.getElementById(id);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=id,document.head.appendChild(s)}function Gh(){if(!xs)return;const e=document.getElementById(id);e&&e.remove()}function e4(){const[e,n]=a.useState(()=>Uh()),[s,i]=a.useState(()=>Bh()),[r,o]=a.useState(()=>Vh()),[l,c]=a.useState(!0),[u,d]=a.useState(()=>xs?window.matchMedia("(prefers-color-scheme: dark)").matches:!0),m=a.useRef(e),h=a.useRef(s),f=a.useRef(r),p=a.useRef(!1),g=a.useRef(!1),b=a.useRef(!1);a.useEffect(()=>{m.current=e},[e]),a.useEffect(()=>{h.current=s},[s]),a.useEffect(()=>{f.current=r},[r]),a.useEffect(()=>{if(!xs||!l)return;let j=!1;return Ji().then(N=>{if(!j&&($g(N.themeMode)&&!p.current&&(m.current!==N.themeMode&&(m.current=N.themeMode,n(N.themeMode)),Uh()!==N.themeMode&&Hh(N.themeMode)),N.colorTheme&&Ig.includes(N.colorTheme)&&!g.current&&(h.current!==N.colorTheme&&(h.current=N.colorTheme,i(N.colorTheme)),Bh()!==N.colorTheme&&qh(N.colorTheme)),!b.current)){const C=Cr(N.dashboardFontScalePct);f.current!==C&&(f.current=C,o(C)),Vh()!==C&&Wh(C)}}).catch(N=>{console.warn("[useTheme] Failed to hydrate theme from global settings",N)}).finally(()=>{j||c(!1)}),()=>{j=!0}},[l]),a.useEffect(()=>{if(!xs)return;const j=window.matchMedia("(prefers-color-scheme: dark)"),N=C=>{d(C.matches)};return j.addEventListener("change",N),()=>j.removeEventListener("change",N)},[]),QI(()=>{ZI(e,s,r,u)},[e,s,r,u]),a.useEffect(()=>{!xs||l||(s!=="default"?Kh():Gh())},[s,l]);const v=a.useCallback(j=>{p.current=!0,m.current=j,n(j),Hh(j),fn({themeMode:j}).catch(N=>{console.warn("[useTheme] Failed to persist themeMode to global settings",N)})},[]),x=a.useCallback(j=>{g.current=!0,h.current=j,i(j),qh(j),j!=="default"?Kh():Gh(),fn({colorTheme:j}).catch(N=>{console.warn("[useTheme] Failed to persist colorTheme to global settings",N)})},[]),y=a.useCallback(j=>{const N=Cr(j);b.current=!0,f.current=N,o(N),Wh(N),fn({dashboardFontScalePct:N}).catch(C=>{console.warn("[useTheme] Failed to persist dashboardFontScalePct to global settings",C)})},[]);return{themeMode:e,colorTheme:s,dashboardFontScalePct:r,setThemeMode:v,setColorTheme:x,setDashboardFontScalePct:y,isSystemDark:u}}function t4(e){const{planningSessions:n}=e,[s,i]=a.useState(!1),[r,o]=a.useState(!1),[l,c]=a.useState(null),[u,d]=a.useState(void 0),[m,h]=a.useState(!1),[f,p]=a.useState(null),[g,b]=a.useState(void 0),[v,x]=a.useState(null),[y,j]=a.useState("definition"),[N,C]=a.useState(!1),[w,_]=a.useState(void 0),[S,z]=a.useState(!1),[M,T]=a.useState(!1),[U,V]=a.useState(!1),[L,R]=a.useState(null),[F,W]=a.useState(!1),[G,te]=a.useState(!1),[E,$]=a.useState(void 0),[P,k]=a.useState(!1),[O,ne]=a.useState("project"),[we,ie]=a.useState(!1),[ce,ke]=a.useState(!1),[D,se]=a.useState(!1),[Z,ge]=a.useState(!1),[ue,me]=a.useState(!1),[ae,be]=a.useState(!1),[Ae,Fe]=a.useState(!1),at=!!(v||N||s||r||m||G||P||we||ce||D||ue||Z||U||F||S||M||ae||Ae),et=a.useCallback(()=>i(!0),[]),Ye=a.useCallback(()=>i(!1),[]),rt=a.useCallback(()=>o(!0),[]),Oe=a.useCallback(B=>{c(B),o(!0)},[]),We=a.useCallback(()=>{const B=n[0];B&&(d(B.id),o(!0))},[n]),oe=a.useCallback(B=>{d(B),o(!0)},[]),xe=a.useCallback(()=>{o(!1),c(null),d(void 0)},[]),ee=a.useCallback(B=>{p(B),h(!0)},[]),Re=a.useCallback(B=>{b(B),h(!0)},[]),Ue=a.useCallback(()=>{h(!1),p(null),b(void 0)},[]),pe=a.useCallback((B,he="definition")=>{x(B),j(he)},[]),Me=a.useCallback(B=>{x(B),j("changes")},[]),ze=a.useCallback(B=>{x(he=>he&&{...he,...B})},[]),tt=a.useCallback(()=>{x(null)},[]),ye=a.useCallback(B=>{_(B),C(!0)},[]),de=a.useCallback(()=>{C(!1),_(void 0)},[]),Ie=a.useCallback(()=>z(!0),[]),fe=a.useCallback(()=>z(!1),[]),_e=a.useCallback(()=>T(!0),[]),Ge=a.useCallback(()=>T(!1),[]),Pe=a.useCallback(B=>{R(B??null),V(!0)},[]),ft=a.useCallback(()=>{V(!1),R(null)},[]),Y=a.useCallback(()=>W(!0),[]),le=a.useCallback(()=>W(!1),[]),ve=a.useCallback(()=>{te(B=>!B)},[]),nt=a.useCallback(()=>{te(!1),$(void 0)},[]),Q=a.useCallback(()=>k(!0),[]),Je=a.useCallback(()=>k(!1),[]),ut=a.useCallback(B=>{ne(B)},[]),ht=a.useCallback(()=>ie(!0),[]),Et=a.useCallback(()=>ie(!1),[]),yt=a.useCallback(()=>ke(!0),[]),bt=a.useCallback(()=>ke(!1),[]),vt=a.useCallback(()=>se(!0),[]),qt=a.useCallback(()=>se(!1),[]),Tt=a.useCallback(()=>ge(!0),[]),At=a.useCallback(()=>ge(!1),[]),Lt=a.useCallback(()=>me(!0),[]),Vt=a.useCallback(()=>me(!1),[]),Kt=a.useCallback(async(B,he)=>{me(!1),$(he),te(!0)},[]),Ot=a.useCallback(()=>be(!0),[]),Wt=a.useCallback(()=>be(!1),[]),_t=a.useCallback(()=>Fe(!0),[]),St=a.useCallback(()=>Fe(!1),[]),Yt=a.useCallback((B,he)=>{he(`Created ${B.id} from planning mode`,"success"),o(!1),c(null)},[]),Xt=a.useCallback((B,he)=>{const De=B.map(A=>A.id).join(", ");he(`Created ${De} from planning mode`,"success"),o(!1),c(null)},[]),Qt=a.useCallback((B,he)=>{const De=B.map(A=>A.id).join(", ");he(`Created ${De} from subtask breakdown`,"success"),h(!1),p(null)},[]);return{newTaskModalOpen:s,isPlanningOpen:r,planningInitialPlan:l,planningResumeSessionId:u,isSubtaskOpen:m,subtaskInitialDescription:f,subtaskResumeSessionId:g,detailTask:v,detailTaskInitialTab:y,settingsOpen:N,settingsInitialSection:w,schedulesOpen:S,githubImportOpen:M,usageOpen:U,usageAnchorRect:L,systemStatsOpen:F,terminalOpen:G,terminalInitialCommand:E,filesOpen:P,fileBrowserWorkspace:O,activityLogOpen:we,gitManagerOpen:ce,workflowStepsOpen:D,agentsOpen:Z,scriptsOpen:ue,setupWizardOpen:ae,modelOnboardingOpen:Ae,anyModalOpen:at,openNewTask:et,closeNewTask:Ye,openPlanning:rt,openPlanningWithInitialPlan:Oe,resumePlanning:We,openPlanningWithSession:oe,closePlanning:xe,openSubtaskBreakdown:ee,openSubtaskWithSession:Re,closeSubtask:Ue,openDetailTask:pe,openDetailWithChangesTab:Me,updateDetailTask:ze,closeDetailTask:tt,openSettings:ye,closeSettings:de,openSchedules:Ie,closeSchedules:fe,openGitHubImport:_e,closeGitHubImport:Ge,openUsage:Pe,closeUsage:ft,openSystemStats:Y,closeSystemStats:le,toggleTerminal:ve,closeTerminal:nt,openFiles:Q,closeFiles:Je,setFileWorkspace:ut,openActivityLog:ht,closeActivityLog:Et,openGitManager:yt,closeGitManager:bt,openWorkflowSteps:vt,closeWorkflowSteps:qt,openAgents:Tt,closeAgents:At,openScripts:Lt,closeScripts:Vt,runScript:Kt,openSetupWizard:Ot,closeSetupWizard:Wt,openModelOnboarding:_t,closeModelOnboarding:St,onPlanningTaskCreated:Yt,onPlanningTasksCreated:Xt,onSubtaskTasksCreated:Qt}}function n4(e){const[n,s]=a.useState(2),[i,r]=a.useState("."),[o,l]=a.useState(!0),[c,u]=a.useState(!1),[d,m]=a.useState(!1),[h,f]=a.useState(void 0),[p,g]=a.useState(!1),[b,v]=a.useState(!1),[x,y]=a.useState(!1),[j,N]=a.useState({}),[C,w]=a.useState(!1),[_,S]=a.useState(!1),[z,M]=a.useState(!1),[T,U]=a.useState(!1),[V,L]=a.useState(!1),R=a.useCallback(async()=>{const[E,$]=await Promise.allSettled([ay(e),Ko(e)]);if(E.status==="fulfilled"&&(s(E.value.maxConcurrent),r(E.value.rootDir)),$.status==="fulfilled"){const P=$.value;l(!!P.autoMerge),u(!!P.globalPause),m(!!P.enginePaused),v(!!P.prAuthAvailable),f(P.taskStuckTimeoutMs),g(P.showQuickChatFAB===!0),N(P.experimentalFeatures??{});const k=P.experimentalFeatures??{};w(k.insights===!0),S(k.roadmap===!0),M(k.memoryView===!0),U(k.devServerView===!0||k.devServer===!0),L(k.todoView===!0)}y(!0)},[e]);a.useEffect(()=>{y(!1),N({}),w(!1),S(!1),M(!1),U(!1),L(!1),R()},[R]);const F=a.useCallback(async()=>{const E=!o;l(E);try{await Kr({autoMerge:E},e)}catch{l(!E)}},[o,e]),W=a.useCallback(async()=>{const E=!c;u(E);try{await Kr({globalPause:E,globalPauseReason:E?"manual":void 0},e)}catch{u(!E)}},[c,e]),G=a.useCallback(async()=>{const E=!d;m(E);try{await Kr({enginePaused:E},e)}catch{m(!E)}},[d,e]),te=a.useCallback(async()=>{const E=!p;g(E);try{await Kr({showQuickChatFAB:E},e)}catch{g(!E)}},[p,e]);return{maxConcurrent:n,rootDir:i,autoMerge:o,globalPaused:c,enginePaused:d,taskStuckTimeoutMs:h,showQuickChatFAB:p,prAuthAvailable:b,settingsLoaded:x,experimentalFeatures:j,insightsEnabled:C,roadmapEnabled:_,memoryEnabled:z,devServerEnabled:T,todosEnabled:V,toggleAutoMerge:F,toggleGlobalPause:W,toggleEnginePause:G,toggleShowQuickChatFAB:te,refresh:R}}function s4(e){const{projectId:n,projects:s,projectsLoading:i,currentProject:r,setCurrentProject:o,addToast:l,openTaskDetail:c,closeTaskDetail:u}=e,d=a.useRef(!1),m=a.useRef(null);return a.useEffect(()=>{const f=new URLSearchParams(window.location.search),p=f.get("project"),g=f.get("task");if(!g||i)return;if(p){const v=s.find(x=>x.id===p);if(!v){l(`Project '${p}' not found`,"error");return}r?.id!==v.id&&o(v)}if(d.current)return;d.current=!0,vr(g,p??n).then(v=>{c(v),m.current=g}).catch(()=>{l(`Task ${g} not found`,"error")})},[n,s,i,r,o,l,c]),{handleDetailClose:a.useCallback(()=>{if(m.current){const f=new URLSearchParams(window.location.search);f.delete("task");const p=f.toString();window.history.replaceState(null,"",p?`${window.location.pathname}?${p}`:window.location.pathname),m.current=null}u()},[u])}}function i4(){const[e,n]=a.useState([]),[s,i]=a.useState([]),[r,o]=a.useState([]),l=a.useRef(s),c=a.useRef(r);a.useEffect(()=>{hs().then(m=>{n(m.models),l.current=m.favoriteProviders,c.current=m.favoriteModels,i(m.favoriteProviders),o(m.favoriteModels)}).catch(()=>{})},[]),a.useEffect(()=>{l.current=s},[s]),a.useEffect(()=>{c.current=r},[r]);const u=a.useCallback(async m=>{const h=l.current,p=h.includes(m)?h.filter(g=>g!==m):[m,...h];l.current=p,i(()=>p);try{await fn({favoriteProviders:p,favoriteModels:c.current})}catch(g){throw l.current=h,i(()=>h),g}},[]),d=a.useCallback(async m=>{const h=c.current,p=h.includes(m)?h.filter(g=>g!==m):[m,...h];c.current=p,o(()=>p);try{await fn({favoriteProviders:l.current,favoriteModels:p})}catch(g){throw c.current=h,o(()=>h),g}},[]);return{availableModels:e,favoriteProviders:s,favoriteModels:r,toggleFavoriteProvider:u,toggleFavoriteModel:d}}function a4({projectId:e,setupWizardOpen:n,openModelOnboarding:s,openSettings:i}){const r=a.useRef(!1),o=a.useRef(n);o.current=n,a.useEffect(()=>{if(n||!e||r.current)return;r.current=!0;let l=!1,c=!1;jr().then(({providers:u})=>{const d=u.some(h=>h.authenticated);if(u.length>0&&!d||u.length>0&&d)return Ji().then(h=>{const f=!!(h.defaultProvider&&h.defaultModelId);(h.modelOnboardingComplete===!1||h.modelOnboardingComplete===void 0)&&(!d||!f)&&!Sa()?l=!0:!d&&!Sa()&&(c=!0)})}).then(()=>{if(o.current){r.current=!1;return}l?(Ts("onboarding:auto-triggered",{trigger:"first-run"}),s()):c&&(Ts("onboarding:auto-triggered",{trigger:"missing-provider"}),i("authentication"))}).catch(()=>{})},[e,n,s,i])}const Jh="kb-update-banner-dismissed";function r4(){const[e,n]=a.useState(!0),[s,i]=a.useState(!1),[r,o]=a.useState(null),[l,c]=a.useState(null),[u,d]=a.useState(!1);a.useEffect(()=>{const h=sessionStorage.getItem(Jh)==="true";d(h);let f=!1;return ry().then(p=>{f||p.disabled||(i(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 m=a.useCallback(()=>{d(!0),sessionStorage.setItem(Jh,"true")},[]);return{updateAvailable:s,latestVersion:r,currentVersion:l,loading:e,dismissed:u,dismiss:m}}const o4=["board","list","agents","missions","chat","documents","research","roadmaps","skills","mailbox","insights","memory","devserver","dev-server","todos"];function Yh(e){return e!==null&&o4.includes(e)}function l4(e){return e==="devserver"?"dev-server":e}function c4(e){const{projectsLoading:n,projectsError:s,currentProjectLoading:i,currentProject:r,projectsLength:o,setupWizardOpen:l,openSetupWizard:c,themeMode:u,setThemeMode:d}=e,[m,h]=a.useState(()=>{if(typeof window<"u"){const x=window.localStorage.getItem("kb-dashboard-view-mode");if(x==="overview"||x==="project")return x}return"overview"}),[f,p]=a.useState(()=>{const x=Yn("kb-dashboard-task-view");return Yh(x)?x:"board"}),g=a.useRef(!1);a.useEffect(()=>{window.localStorage.setItem("kb-dashboard-view-mode",m)},[m]),a.useEffect(()=>{const x=Yn("kb-dashboard-task-view",r?.id);if(Yh(x)){const y=!g.current&&x==="devserver";p(y?"devserver":l4(x))}else p("board");r?.id&&(g.current=!0)},[r?.id]),a.useEffect(()=>{bs("kb-dashboard-task-view",f,r?.id)},[r?.id,f]),a.useEffect(()=>{n||i||r&&m==="overview"&&h("project")},[n,i,r,m]),a.useEffect(()=>{if(n||i||l||s||o>0||r)return;const x=window.setTimeout(()=>{c()},500);return()=>window.clearTimeout(x)},[n,s,o,i,r,l,c]);const b=a.useCallback(x=>{p(x)},[]),v=a.useCallback(()=>{const x=["dark","light","system"],y=x.indexOf(u),j=x[(y+1)%x.length];d(j)},[u,d]);return{viewMode:m,setViewMode:h,taskView:f,setTaskView:p,handleChangeTaskView:b,handleToggleTheme:v}}function d4(e){const{setCurrentProject:n,clearCurrentProject:s,setViewMode:i,currentProject:r,refreshProjects:o,toggleFavoriteProvider:l,toggleFavoriteModel:c,addToast:u,openSettings:d,openSetupWizard:m,closeSetupWizard:h,closeModelOnboarding:f}=e,p=a.useCallback(S=>{n(S),i("project")},[n,i]),g=a.useCallback(()=>{s(),i("overview")},[s,i]),b=a.useCallback(()=>{d()},[d]),v=a.useCallback(()=>{m()},[m]),x=a.useCallback(S=>{h(),n(S),i("project"),u(`Project ${S.name} registered successfully`,"success"),o()},[h,n,i,u,o]),y=a.useCallback(()=>{f()},[f]),j=a.useCallback(async S=>{try{await ck(S.id),u(`Project ${S.name} paused`,"success"),await o()}catch{u(`Failed to pause project ${S.name}`,"error")}},[u,o]),N=a.useCallback(async S=>{try{await dk(S.id),u(`Project ${S.name} resumed`,"success"),await o()}catch{u(`Failed to resume project ${S.name}`,"error")}},[u,o]),C=a.useCallback(async S=>{try{await wp(S.id),u(`Project ${S.name} removed`,"success"),r?.id===S.id&&(s(),i("overview")),await o()}catch{u(`Failed to remove project ${S.name}`,"error")}},[r,s,i,u,o]),w=a.useCallback(async S=>{try{await l(S)}catch{u("Failed to update favorites","error")}},[l,u]),_=a.useCallback(async S=>{try{await c(S)}catch{u("Failed to update model favorites","error")}},[c,u]);return{handleSelectProject:p,handleViewAllProjects:g,handleOpenSettings:b,handleAddProject:v,handleSetupComplete:x,handleModelOnboardingComplete:y,handlePauseProject:j,handleResumeProject:N,handleRemoveProject:C,handleToggleFavorite:w,handleToggleModelFavorite:_}}function u4(e){const{createTask:n,ingestCreatedTasks:s,onPlanningTaskCreated:i,onPlanningTasksCreated:r,onSubtaskTasksCreated:o,addToast:l}=e,c=a.useCallback(async p=>n({...p,column:"triage",source:{sourceType:"dashboard_ui"}}),[n]),u=a.useCallback(async p=>await n({...p,column:"triage",source:{sourceType:"dashboard_ui"}}),[n]),d=a.useCallback(p=>{s([p]),i(p,l)},[l,s,i]),m=a.useCallback(p=>{s(p),r(p,l)},[l,s,r]),h=a.useCallback(p=>{s(p),o(p,l)},[l,s,o]),f=a.useCallback(p=>{l(`Imported ${p.id} from GitHub`,"success")},[l]);return{handleBoardQuickCreate:c,handleModalCreate:u,handlePlanningTaskCreated:d,handlePlanningTasksCreated:m,handleSubtaskTasksCreated:h,handleGitHubImport:f}}async function m4(e){return Jo("/health",{nodeId:e})}async function h4(e){return Jo("/projects",{nodeId:e})}async function p4(e,n,s){const i=new URLSearchParams({projectId:n});return s&&s.trim()&&i.set("q",s.trim()),Jo(`/tasks?${i.toString()}`,{nodeId:e})}async function f4(e,n){return Jo(`/project-health?projectId=${encodeURIComponent(n)}`,{nodeId:e})}async function UL(e){return I(`/nodes/${encodeURIComponent(e)}/settings/push`,{method:"POST",body:JSON.stringify({})})}async function BL(e){return I(`/nodes/${encodeURIComponent(e)}/settings/pull`,{method:"POST",body:JSON.stringify({conflictResolution:"last-write-wins"})})}async function HL(e){return I(`/nodes/${encodeURIComponent(e)}/settings/sync-status`)}async function qL(e){return I(`/nodes/${encodeURIComponent(e)}/auth/sync`,{method:"POST",body:JSON.stringify({})})}function g4(e,n){const{projectId:s,searchQuery:i}=n??{},[r,o]=a.useState([]),[l,c]=a.useState([]),[u,d]=a.useState(null),[m,h]=a.useState(!1),[f,p]=a.useState(null),g=a.useRef(null),b=a.useCallback(async()=>{if(!e){o([]),c([]),d(null),h(!1),p(null);return}g.current?.abort();const x=new AbortController;g.current=x,h(!0),p(null);try{const y=[m4(e),h4(e)];s&&(y.push(p4(e,s,i)),y.push(f4(e,s)));const j=await Promise.allSettled(y);if(x.signal.aborted)return;const N=j[0],C=j[1];if(N.status==="rejected"){p(`Failed to fetch node health: ${N.reason}`),h(!1);return}if(d(N.value),C.status==="rejected"){p(`Failed to fetch projects: ${C.reason}`),h(!1);return}if(o(C.value),s&&j[2]){const w=j[2];if(w.status==="rejected"){p(`Failed to fetch tasks: ${w.reason}`),h(!1);return}w.status==="fulfilled"&&c(w.value)}h(!1)}catch(y){x.signal.aborted||(p(y instanceof Error?y.message:"Unknown error"),h(!1))}},[e,s,i]);a.useEffect(()=>(b(),()=>{g.current?.abort()}),[b]);const v=a.useCallback(()=>{b()},[b]);return{projects:r,tasks:l,health:u,loading:m,error:f,refresh:v}}function b4(e){const[n,s]=a.useState(!1),[i,r]=a.useState(null);return a.useEffect(()=>{if(!e){s(!1),r(null);return}const o=`/api/proxy/${encodeURIComponent(e)}/events`;return Ks(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:i}}const x4="fusion-dashboard-current-node",Dg=a.createContext(null);function v4({children:e}){const[n,s]=a.useState(null),[i,r]=a.useState(!0),o=a.useRef(!1),l=a.useRef(void 0);a.useEffect(()=>{let m=!1;async function h(){try{const f=await Ji();if(m)return;l.current=f.dashboardCurrentNodeId;const p=f.dashboardCurrentNodeId;if(p&&(o.current=!0),!p)try{const g=localStorage.getItem(x4);if(g){const b=JSON.parse(g);b?.id&&b?.type==="remote"&&(l.current=b.id,await fn({dashboardCurrentNodeId:b.id}).catch(()=>{}))}}catch{}}catch{}finally{m||r(!1)}}return h(),()=>{m=!0}},[]),a.useEffect(()=>{if(!i)if(n&&n.type==="remote"&&n.id){const m=n.id;l.current!==m&&(l.current=m,fn({dashboardCurrentNodeId:m}).catch(()=>{}))}else n===null&&l.current!==void 0&&(l.current=void 0,fn({dashboardCurrentNodeId:void 0}).catch(()=>{}))},[n,i]);const c=a.useCallback(m=>{s(m)},[]),u=a.useCallback(()=>{s(null),l.current=void 0,fn({dashboardCurrentNodeId:void 0}).catch(()=>{})},[]),d={currentNode:n,currentNodeId:n?.id??null,isRemote:n!==null&&n.type==="remote",setCurrentNode:c,clearCurrentNode:u};return t.jsx(Dg.Provider,{value:d,children:e})}function y4(){const e=a.useContext(Dg);if(e===null)throw new Error("useNodeContext must be used within a NodeProvider");return e}function j4({open:e}){const[n,s]=a.useState(""),i=a.useRef(null);a.useEffect(()=>{e&&i.current?.focus()},[e]);const r=a.useCallback(()=>{const l=n.trim();l&&(Iv(l),window.location.reload())},[n]),o=a.useCallback(()=>{$v(),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:i,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 k4=200,w4=a.lazy(()=>pn(()=>import("./AgentsView-DlA0yHBg.js").then(e=>e.A),__vite__mapDeps([17,1,18,8,19])).then(e=>({default:e.AgentsView}))),N4=a.lazy(()=>pn(()=>import("./DocumentsView-DVw_wT6V.js"),__vite__mapDeps([20,1,0,2,21])).then(e=>({default:e.DocumentsView}))),S4=a.lazy(()=>pn(()=>import("./InsightsView-G3MZhwSx.js"),__vite__mapDeps([22,1,14,0,2,23])).then(e=>({default:e.InsightsView}))),C4=a.lazy(()=>pn(()=>import("./ResearchView-BvlLYC_1.js"),__vite__mapDeps([24,1,0,2,25])).then(e=>({default:e.ResearchView}))),E4=a.lazy(()=>pn(()=>import("./NodesView-dwVhD4V2.js"),__vite__mapDeps([26,1,18,0,2,27])).then(e=>({default:e.NodesView}))),M4=a.lazy(()=>pn(()=>import("./ChatView-DK5CmiAk.js"),__vite__mapDeps([28,1,0,2])).then(e=>({default:e.ChatView}))),_4=a.lazy(()=>pn(()=>import("./RoadmapsView-DdYXssP2.js"),__vite__mapDeps([29,1,0,2,30])).then(e=>({default:e.RoadmapsView}))),A4=a.lazy(()=>pn(()=>import("./SkillsView-C4Tz7CxC.js"),__vite__mapDeps([31,1,0,2,32])).then(e=>({default:e.SkillsView}))),R4=a.lazy(()=>pn(()=>import("./MemoryView-Bl9gx2Dw.js"),__vite__mapDeps([33,1,12,13,0,2,34])).then(e=>({default:e.MemoryView}))),T4=a.lazy(()=>pn(()=>import("./DevServerView-BVixhlF0.js"),__vite__mapDeps([35,1,0,2,36])).then(e=>({default:e.DevServerView}))),P4=a.lazy(()=>pn(()=>import("./TodoView-ByXJ90yL.js"),__vite__mapDeps([37,1,38,0,2,39])).then(e=>({default:e.TodoView})));function I4(){(typeof window<"u"&&window.requestIdleCallback||(n=>setTimeout(n,200)))(()=>{pn(()=>import("./AgentsView-DlA0yHBg.js").then(n=>n.A),__vite__mapDeps([17,1,18,8,19])),pn(()=>import("./DocumentsView-DVw_wT6V.js"),__vite__mapDeps([20,1,0,2,21])),pn(()=>import("./InsightsView-G3MZhwSx.js"),__vite__mapDeps([22,1,14,0,2,23])),pn(()=>import("./ResearchView-BvlLYC_1.js"),__vite__mapDeps([24,1,0,2,25])),pn(()=>import("./NodesView-dwVhD4V2.js"),__vite__mapDeps([26,1,18,0,2,27])),pn(()=>import("./ChatView-DK5CmiAk.js"),__vite__mapDeps([28,1,0,2])),pn(()=>import("./RoadmapsView-DdYXssP2.js"),__vite__mapDeps([29,1,0,2,30])),pn(()=>import("./SkillsView-C4Tz7CxC.js"),__vite__mapDeps([31,1,0,2,32])),pn(()=>import("./MemoryView-Bl9gx2Dw.js"),__vite__mapDeps([33,1,12,13,0,2,34])),pn(()=>import("./DevServerView-BVixhlF0.js"),__vite__mapDeps([35,1,0,2,36])),pn(()=>import("./TodoView-ByXJ90yL.js"),__vite__mapDeps([37,1,38,0,2,39]))})}const jc="kb-setup-warning-dismissed";function $4(){const{toasts:e,addToast:n,removeToast:s}=KI(),i=typeof window<"u"&&!!window.electronAPI;a.useEffect(()=>{I4()},[]);const{projects:r,loading:o,error:l,refresh:c}=BI(),{nodes:u}=Xo(),{currentNode:d,currentNodeId:m,isRemote:h,setCurrentNode:f,clearCurrentNode:p}=y4(),{currentProject:g,setCurrentProject:b,clearCurrentProject:v,loading:x}=VI(r,{nodeId:m}),{hasAiProvider:y,hasGithub:j,loading:N,hasWarnings:C}=xg(g?.id),{updateAvailable:w,latestVersion:_,currentVersion:S,dismissed:z,dismiss:M}=r4();a.useEffect(()=>{if(m&&!d&&u.length>0){const Xe=u.find(Dt=>Dt.id===m);if(Xe){f(Xe);return}}m&&u.length>0&&(u.some(Dt=>Dt.id===m)||p())},[m,d,u,f,p]);const[T,U]=a.useState(""),V=g4(m,{projectId:g?.id,searchQuery:T||void 0});b4(m);const L=h&&V.projects.length>0?V.projects:r,{themeMode:R,colorTheme:F,dashboardFontScalePct:W,setThemeMode:G,setColorTheme:te,setDashboardFontScalePct:E}=e4(),{sessions:$,generating:P,needsInput:k,planningSessions:O,dismissSession:ne}=LI(g?.id),we=$.filter(Xe=>Xe.status==="awaiting_input"||Xe.status==="error"),ie=t4({projectId:g?.id,planningSessions:O}),{viewMode:ce,setViewMode:ke,taskView:D,handleChangeTaskView:se}=c4({projectsLoading:o,projectsError:l,currentProjectLoading:x,currentProject:g,projectsLength:r.length,setupWizardOpen:ie.setupWizardOpen,openSetupWizard:ie.openSetupWizard,themeMode:R,setThemeMode:G}),Z=a.useCallback(Xe=>{Xe==="missions"&&(ht(void 0),yt(void 0),vt(void 0)),se(Xe)},[se]),ge=D==="board"||D==="list",{tasks:ue,createTask:me,moveTask:ae,pauseTask:be,deleteTask:Ae,mergeTask:Fe,retryTask:at,resetTask:et,updateTask:Ye,duplicateTask:rt,archiveTask:Oe,unarchiveTask:We,archiveAllDone:oe,loadArchivedTasks:xe,ingestCreatedTasks:ee,lastFetchTimeMs:Re}=FI({...g?{projectId:g.id}:{},searchQuery:T||void 0,sseEnabled:ge}),[Ue,pe]=a.useState(!1),[Me,ze]=a.useState(0),tt=a.useRef(performance.now()),ye=a.useRef(!1),de=a.useRef(!1),Ie=a.useMemo(()=>o?"projects":x?"project":"tasks",[o,x]);a.useEffect(()=>{if(!o&&!ye.current){ye.current=!0;const Xe=`projects loaded at ${Math.round(performance.now()-tt.current)}ms from mount`;console.log(`[App] ${Xe}`),mr("[App]",Xe)}if(!x&&!de.current){de.current=!0;const Xe=`current-project resolved at ${Math.round(performance.now()-tt.current)}ms from mount`;console.log(`[App] ${Xe}`),mr("[App]",Xe)}},[o,x]),a.useEffect(()=>{if(Ue||o||x)return;const Xe=performance.now(),Dt=window.setTimeout(()=>{const hn=`dashboard ready at ${Math.round(performance.now()-tt.current)}ms from mount (settle delay=${Math.round(performance.now()-Xe)}ms)`;console.log(`[App] ${hn}`),mr("[App]",hn),pe(!0)},k4);return()=>{window.clearTimeout(Dt)}},[Ue,o,x]);const _e=Aa()==="mobile",{keyboardOpen:Ge}=Eg({enabled:_e}),Pe=_e&&Ge,[ft,Y]=a.useState(0),le=a.useCallback(()=>{Mp(g?.id).then(Xe=>{Y(Xe.unreadCount)}).catch(Xe=>{console.warn("[App] Failed to fetch mailbox unread count:",Xe)})},[g?.id]);a.useEffect(()=>{le();const Xe=new URLSearchParams;g?.id&&Xe.set("projectId",g.id);const Dt=Xe.size>0?`?${Xe.toString()}`:"";return Ks(`/api/events${Dt}`,{events:{"message:sent":le,"message:received":le,"message:read":le,"message:deleted":le}})},[g?.id,le]);const[ve,nt]=a.useState(!1),[Q,Je]=a.useState(!1),[ut,ht]=a.useState(void 0),[Et,yt]=a.useState(void 0),[bt,vt]=a.useState(void 0),[qt,Tt]=a.useState(!1),[At,Lt]=a.useState(!1),[Vt,Kt]=a.useState(()=>Yn(jc,g?.id)==="true");a.useEffect(()=>{Kt(Yn(jc,g?.id)==="true")},[g?.id]),a.useEffect(()=>{const Xe=()=>{Lt(!0)};return window.addEventListener(Pc,Xe),()=>{window.removeEventListener(Pc,Xe)}},[]);const Ot=a.useCallback(()=>{bs(jc,"true",g?.id),Kt(!0)},[g?.id]),{maxConcurrent:Wt,autoMerge:_t,globalPaused:St,enginePaused:Yt,taskStuckTimeoutMs:Xt,showQuickChatFAB:Qt,prAuthAvailable:B,settingsLoaded:he,experimentalFeatures:De,insightsEnabled:A,roadmapEnabled:X,memoryEnabled:$e,devServerEnabled:dt,todosEnabled:jt,toggleAutoMerge:zt,toggleGlobalPause:Rt,toggleEnginePause:un,refresh:In}=n4(g?.id),gn=De.skillsView===!0,Bt=De.nodesView===!0,Mn=De.researchView===!0,Ne=De.agentOnboarding===!0,it=!0;a.useEffect(()=>{he&&(D==="skills"&&!gn&&se("board"),D==="insights"&&!A&&se("board"),D==="roadmaps"&&!X&&se("board"),D==="memory"&&!$e&&se("board"),(D==="devserver"||D==="dev-server")&&!dt&&se("board"),D==="todos"&&!jt&&se("board"),D==="research"&&!Mn&&se("board"))},[D,he,gn,A,X,se,it,$e,dt,jt,Mn]),a.useEffect(()=>{ve&&!Bt&&nt(!1)},[ve,Bt]);const{availableModels:xn,favoriteProviders:wn,favoriteModels:Ce,toggleFavoriteProvider:Ke,toggleFavoriteModel:mt}=i4();a4({projectId:g?.id,setupWizardOpen:ie.setupWizardOpen,openModelOnboarding:ie.openModelOnboarding,openSettings:ie.openSettings});const{handleSelectProject:It,handleViewAllProjects:$t,handleOpenSettings:mn,handleAddProject:On,handleSetupComplete:nn,handleModelOnboardingComplete:Nn,handlePauseProject:_n,handleResumeProject:ls,handleRemoveProject:Sn,handleToggleFavorite:Hn,handleToggleModelFavorite:rn}=d4({setCurrentProject:b,clearCurrentProject:v,setViewMode:ke,currentProject:g,refreshProjects:c,toggleFavoriteProvider:Ke,toggleFavoriteModel:mt,addToast:n,openSettings:ie.openSettings,openSetupWizard:ie.openSetupWizard,closeSetupWizard:ie.closeSetupWizard,closeModelOnboarding:ie.closeModelOnboarding}),{handleDetailClose:wt}=s4({projectId:g?.id,projects:r,projectsLoading:o,currentProject:g,setCurrentProject:b,addToast:n,openTaskDetail:ie.openDetailTask,closeTaskDetail:ie.closeDetailTask}),{handleBoardQuickCreate:K,handleModalCreate:Le,handlePlanningTaskCreated:st,handlePlanningTasksCreated:ot,handleSubtaskTasksCreated:Nt,handleGitHubImport:Mt}=u4({createTask:me,ingestCreatedTasks:ee,onPlanningTaskCreated:ie.onPlanningTaskCreated,onPlanningTasksCreated:ie.onPlanningTasksCreated,onSubtaskTasksCreated:ie.onSubtaskTasksCreated,addToast:n}),Ft=a.useCallback((Xe,Dt)=>{if(Dt==="changes"){ie.openDetailWithChangesTab(Xe);return}ie.openDetailTask(Xe,Dt)},[ie]),Qn=a.useCallback(async Xe=>{try{const Dt=await vr(Xe,g?.id);ie.openDetailTask(Dt,"logs")}catch(Dt){n(`Failed to open task logs: ${Dt.message}`,"error")}},[ie,g?.id,n]),Ds=a.useCallback(()=>{Bt&&nt(Xe=>!Xe)},[Bt]),ci=a.useCallback(()=>{ie.setFileWorkspace("project"),ie.openFiles()},[ie]),Es=a.useCallback(async()=>{Je(!0);try{await c()}finally{Je(!1)}},[c]),Gs=a.useCallback(Xe=>{yt(Xe),ht(void 0),se("missions")},[se]),re=a.useCallback(Xe=>{Xe.type==="planning"?ie.openPlanningWithSession(Xe.id):Xe.type==="subtask"?ie.openSubtaskWithSession(Xe.id):Xe.type==="mission_interview"?(yt(void 0),ht(Xe.id),vt(void 0),se("missions")):(Xe.type==="milestone_interview"||Xe.type==="slice_interview")&&(ht(void 0),yt(void 0),vt(Xe.id),se("missions"))},[se,ie]),Ee=a.useCallback(()=>{},[]),Qe=a.useCallback(()=>{},[]),gt=!o&&!x&&r.length===0&&!g&&!!l,xt=()=>gt?t.jsx(BP,{errorMessage:l??"Failed to fetch projects",isRetrying:Q,onRetry:Es}):ve?t.jsx("div",{className:"nodes-management-overlay",children:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(E4,{addToast:n,onClose:()=>nt(!1)})})})}):ce==="overview"?t.jsx(ss,{children:t.jsx(x1,{projects:r,loading:o,onSelectProject:It,onAddProject:On,onPauseProject:_n,onResumeProject:ls,onRemoveProject:Sn,nodes:u})}):D==="skills"?!he||!gn?null:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(A4,{addToast:n,projectId:g?.id,onClose:()=>se("board")})})}):D==="chat"?t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(M4,{addToast:n,projectId:g?.id})})}):D==="mailbox"?t.jsx(ss,{children:t.jsx(d0,{projectId:g?.id,addToast:n,onUnreadCountChange:Y})}):D==="roadmaps"?!he||!X?null:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(_4,{addToast:n,projectId:g?.id})})}):D==="missions"?t.jsx(ss,{children:t.jsx(r0,{isInline:!0,isOpen:!0,onClose:()=>{yt(void 0),ht(void 0),vt(void 0),se("board")},addToast:n,projectId:g?.id,onSelectTask:Xe=>{const Dt=ue.find(hn=>hn.id===Xe);Dt&&ie.openDetailTask(Dt)},availableTasks:ue.map(Xe=>({id:Xe.id,title:Xe.title})),resumeSessionId:ut,targetMissionId:Et,milestoneSliceResumeSessionId:bt,onMilestoneSliceResumeFetchError:()=>vt(void 0)})}):D==="agents"&&it?t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(w4,{addToast:n,projectId:g?.id,onOpenTaskLogs:Qn,agentOnboardingEnabled:Ne})})}):D==="documents"?t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(N4,{projectId:g?.id,addToast:n,onOpenDetail:ie.openDetailTask})})}):D==="insights"?!he||!A?null:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(S4,{projectId:g?.id,addToast:n,onClose:()=>se("board")})})}):D==="research"?!he||!Mn?null:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(C4,{projectId:g?.id,addToast:n,onOpenSettings:Xe=>ie.openSettings(Xe),readinessVersion:Me})})}):D==="memory"?!he||!$e?null:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(R4,{addToast:n,projectId:g?.id})})}):D==="todos"?!he||!jt?null:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(P4,{addToast:n,projectId:g?.id})})}):D==="devserver"||D==="dev-server"?!he||!dt?null:t.jsx(ss,{children:t.jsx(a.Suspense,{fallback:null,children:t.jsx(T4,{addToast:n,projectId:g?.id})})}):D==="board"?t.jsx(ss,{children:t.jsx(i1,{tasks:h&&V.tasks.length>0?V.tasks:ue,projectId:g?.id,maxConcurrent:Wt,onMoveTask:ae,onPauseTask:be,onOpenDetail:ie.openDetailTask,addToast:n,onQuickCreate:K,onNewTask:ie.openNewTask,onPlanningMode:ie.openPlanningWithInitialPlan,onSubtaskBreakdown:ie.openSubtaskBreakdown,autoMerge:_t,onToggleAutoMerge:zt,globalPaused:St,onUpdateTask:Ye,onRetryTask:at,onArchiveTask:Oe,onUnarchiveTask:We,onDeleteTask:Ae,onArchiveAllDone:oe,onLoadArchivedTasks:xe,searchQuery:T,availableModels:xn,onOpenDetailWithTab:Ft,favoriteProviders:wn,favoriteModels:Ce,onToggleFavorite:Hn,onToggleModelFavorite:rn,taskStuckTimeoutMs:Xt,onOpenMission:Gs,lastFetchTimeMs:Re})}):t.jsx(ss,{children:t.jsx(l1,{tasks:h&&V.tasks.length>0?V.tasks:ue,projectId:g?.id,onMoveTask:ae,onRetryTask:at,onOpenDetail:ie.openDetailTask,addToast:n,globalPaused:St,onNewTask:ie.openNewTask,onQuickCreate:K,onPlanningMode:ie.openPlanningWithInitialPlan,onSubtaskBreakdown:ie.openSubtaskBreakdown,availableModels:xn,favoriteProviders:wn,favoriteModels:Ce,onToggleFavorite:Hn,onToggleModelFavorite:rn,taskStuckTimeoutMs:Xt,searchQuery:T,lastFetchTimeMs:Re})});if(!Ue)return t.jsxs(t.Fragment,{children:[t.jsx(qP,{stage:Ie}),t.jsx(Ng,{toasts:e,onRemove:s})]});const sn=!ie.modelOnboardingOpen&&mP(),dn=!ie.modelOnboardingOpen&&!sn&&Sa()&&!yg();return t.jsxs(t.Fragment,{children:[t.jsx(Tw,{isElectron:i,onOpenSettings:mn,onOpenGitHubImport:ie.openGitHubImport,onOpenPlanning:ie.openPlanning,onResumePlanning:ie.resumePlanning,activePlanningSessionCount:O.length,onOpenUsage:ie.openUsage,onOpenActivityLog:ie.openActivityLog,onOpenSystemStats:ie.openSystemStats,onOpenMailbox:()=>Z("mailbox"),mailboxUnreadCount:ft,onOpenSchedules:ie.openSchedules,onOpenGitManager:ie.openGitManager,onOpenNodes:Ds,showNodesButton:Bt,onOpenWorkflowSteps:ie.openWorkflowSteps,onOpenScripts:ie.openScripts,onRunScript:ie.runScript,onToggleTerminal:ie.toggleTerminal,onOpenFiles:ie.openFiles,filesOpen:ie.filesOpen,globalPaused:St,enginePaused:Yt,onToggleGlobalPause:Rt,onToggleEnginePause:un,view:D,onChangeView:ce==="project"&&g?Z:void 0,showSkillsTab:gn,showAgentsTab:it,searchQuery:T,onSearchChange:U,projects:L,currentProject:g,onSelectProject:It,onViewAllProjects:$t,projectId:g?.id,mobileNavEnabled:_e,availableNodes:u,currentNode:d,onSelectNode:Xe=>{Xe===null?p():f(Xe)},isRemote:h,experimentalFeatures:{insights:A,roadmap:X,memoryView:$e,devServer:dt,devServerView:dt,todoView:jt,researchView:Mn}}),ce==="project"&&g&&!ve&&D!=="missions"&&!ie.isPlanningOpen&&t.jsx(sI,{sessions:we,onResumeSession:re,onDismissSession:Ee,onDismissAll:Qe}),ce==="project"&&g&&sn&&t.jsx(aI,{onResume:ie.openModelOnboarding}),ce==="project"&&g&&dn&&t.jsx(rI,{onOpenModelOnboarding:ie.openModelOnboarding,onOpenSettings:Xe=>ie.openSettings(Xe)}),ce==="project"&&g&&w&&_&&S&&!z&&t.jsx(iI,{latestVersion:_,currentVersion:S,onDismiss:M}),ce==="project"&&g&&!N&&C&&!Vt&&t.jsx(vg,{hasAiProvider:y,hasGithub:j,onDismiss:Ot}),t.jsx("div",{className:`project-content${ce==="project"&&g?" project-content--with-footer":""}${_e&&!Pe?" project-content--with-mobile-nav":""}`,children:xt()}),ce==="project"&&g&&!ve&&t.jsx(eI,{tasks:h&&V.tasks.length>0?V.tasks:ue,projectId:g.id,taskStuckTimeoutMs:Xt,backgroundSessions:$,backgroundGenerating:P,backgroundNeedsInput:k,onOpenBackgroundSession:re,onDismissBackgroundSession:ne,lastFetchTimeMs:Re,currentProjectPath:g.path,onOpenProjectDirectory:ci}),t.jsx(lI,{view:D,onChangeView:ce==="project"&&g?Z:()=>{},footerVisible:ce==="project"&&!!g,modalOpen:ie.anyModalOpen,keyboardOpen:Pe,onOpenSettings:mn,onOpenActivityLog:ie.openActivityLog,onOpenSystemStats:ie.openSystemStats,onOpenMailbox:()=>Z("mailbox"),mailboxUnreadCount:ft,onOpenGitManager:ie.openGitManager,onOpenWorkflowSteps:ie.openWorkflowSteps,onOpenSchedules:ie.openSchedules,onOpenScripts:ie.openScripts,onToggleTerminal:ie.toggleTerminal,onOpenFiles:ie.openFiles,onOpenGitHubImport:ie.openGitHubImport,onOpenPlanning:ie.openPlanning,onResumePlanning:ie.resumePlanning,activePlanningSessionCount:O.length,onOpenUsage:()=>ie.openUsage(null),onViewAllProjects:$t,onRunScript:ie.runScript,projectId:g?.id,showSkillsTab:gn,experimentalFeatures:{insights:A,roadmap:X,memoryView:$e,devServer:dt,devServerView:dt,todoView:jt,researchView:Mn}}),ce==="project"&&g&&D!=="chat"&&D!=="mailbox"&&D!=="insights"&&D!=="devserver"&&D!=="dev-server"&&t.jsx(DI,{projectId:g.id,addToast:n,showFAB:Qt,open:qt,onOpenChange:Tt,favoriteProviders:wn,favoriteModels:Ce,onToggleFavorite:Hn,onToggleModelFavorite:rn}),t.jsx(UP,{projectId:g?.id,tasks:ue,projects:r,currentProject:g,addToast:n,toasts:e,removeToast:s,modalManager:ie,projectActions:{handleAddProject:On,handleSetupComplete:nn,handleModelOnboardingComplete:Nn},taskHandlers:{handleModalCreate:Le,handlePlanningTaskCreated:st,handlePlanningTasksCreated:ot,handleSubtaskTasksCreated:Nt,handleGitHubImport:Mt},taskOperations:{moveTask:ae,deleteTask:Ae,mergeTask:Fe,retryTask:at,resetTask:et,duplicateTask:rt},deepLink:{handleDetailClose:wt},settings:{prAuthAvailable:B,themeMode:R,colorTheme:F,dashboardFontScalePct:W,setThemeMode:G,setColorTheme:te,setDashboardFontScalePct:E},onSettingsClose:()=>{ie.closeSettings(),ze(Xe=>Xe+1),In()},onReopenOnboarding:()=>{ie.closeSettings(),ie.openModelOnboarding()}}),t.jsx(j4,{open:At})]})}function D4(){return t.jsx(WI,{children:t.jsx(v4,{children:t.jsx(Ww,{children:t.jsx($4,{})})})})}Bv();Ev();Lg.createRoot(document.getElementById("root")).render(t.jsx(a.StrictMode,{children:t.jsx(Mv,{children:t.jsx(D4,{})})}));"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").then(e=>{console.log("SW registered:",e.scope)}).catch(e=>{console.log("SW registration failed:",e)});export{en as $,Is as A,Cn as B,kn as C,Ko as D,Kr as E,Bi as F,Bo as G,je as H,Hw as I,uD as J,Ec as K,lt as L,Vs as M,cn as N,wo as O,Dn as P,OL as Q,$n as R,wi as S,od as T,jn as U,pc as V,En as W,Jt as X,Hs as Y,Kn as Z,ln as _,bs as a,cI as a$,ZT as a0,Qj as a1,WT as a2,KT as a3,Xj as a4,lD as a5,Zj as a6,pn as a7,j$ as a8,k$ as a9,EL as aA,jr as aB,HL as aC,UL as aD,BL as aE,qL as aF,xr as aG,sv as aH,ur as aI,Eb as aJ,ds as aK,cp as aL,Xo as aM,BI as aN,xL as aO,hu as aP,wr as aQ,yw as aR,vL as aS,yL as aT,jw as aU,kw as aV,fI as aW,Aa as aX,Eg as aY,Oo as aZ,op as a_,aj as aa,ad as ab,Ea as ac,Ca as ad,ai as ae,ri as af,pi as ag,jL as ah,NL as ai,wL as aj,kL as ak,SL as al,as as am,ms as an,pv as ao,si as ap,Tb as aq,Fo as ar,Ci as as,CL as at,ML as au,PL as av,TL as aw,RL as ax,AL as ay,_L as az,bD as b,br as b$,hI as b0,ks as b1,zi as b2,Ni as b3,sp as b4,qd as b5,SD as b6,ED as b7,CD as b8,MD as b9,a$ as bA,r$ as bB,o$ as bC,i$ as bD,s$ as bE,X4 as bF,c$ as bG,IR as bH,q$ as bI,H$ as bJ,Y$ as bK,B$ as bL,V$ as bM,W$ as bN,K$ as bO,G$ as bP,Mj as bQ,J$ as bR,cd as bS,Sj as bT,Cj as bU,Ej as bV,Nj as bW,U$ as bX,Rr as bY,Vo as bZ,tv as b_,_D as ba,AD as bb,RD as bc,TD as bd,PD as be,ID as bf,$D as bg,DD as bh,LD as bi,zD as bj,OD as bk,UD as bl,FD as bm,Bn as bn,rd as bo,Ui as bp,gL as bq,fL as br,bL as bs,t$ as bt,e$ as bu,Z4 as bv,n$ as bw,u$ as bx,m$ as by,l$ as bz,Be as c,Yo as c$,Gx as c0,HD as c1,qD as c2,VD as c3,WD as c4,KD as c5,GD as c6,JD as c7,BD as c8,pp as c9,F4 as cA,O4 as cB,xD as cC,U4 as cD,H4 as cE,Q4 as cF,Y4 as cG,Ty as cH,wy as cI,ii as cJ,Ny as cK,Sy as cL,Cy as cM,g$ as cN,vD as cO,yD as cP,jD as cQ,Mi as cR,$L as cS,DL as cT,ND as cU,q4 as cV,wc as cW,Gn as cX,TR as cY,tP as cZ,fc as c_,ga as ca,ak as cb,Iv as cc,$v as cd,dL as ce,N$ as cf,w$ as cg,uL as ch,S$ as ci,P$ as cj,A$ as ck,C$ as cl,R$ as cm,E$ as cn,T$ as co,M$ as cp,_$ as cq,Xg as cr,yy as cs,I$ as ct,jy as cu,$$ as cv,oi as cw,yR as cx,h$ as cy,wD as cz,fD as d,W4 as d0,B4 as d1,K4 as d2,V4 as d3,G4 as d4,J4 as d5,Vi as d6,Fw as d7,Qo as d8,LL as d9,cD as dA,_r as dB,F_ as dC,eD as dD,Z$ as dE,rj as dF,tD as dG,iD as dH,iL as dI,X$ as dJ,aL as dK,Wx as dL,_c as dM,mL as dN,lL as dO,oL as dP,cL as dQ,rL as dR,kD as dS,IL as dT,b$ as dU,p$ as dV,f$ as dW,v$ as dX,y$ as dY,x$ as dZ,nh as da,zL as db,FL as dc,d$ as dd,YD as de,XD as df,tL as dg,ZD as dh,QD as di,eL as dj,nL as dk,kp as dl,Jd as dm,lx as dn,sL as dp,dD as dq,aD as dr,oD as ds,rD as dt,hD as du,mD as dv,np as dw,sD as dx,nD as dy,VT as dz,gD as e,vr as f,Yn as g,pL as h,hs as i,_a as j,hL as k,Jn as l,Yj as m,Q$ as n,$s as o,F$ as p,z$ as q,GT as r,Ks as s,O$ as t,fn as u,D$ as v,L$ as w,pD as x,mI as y,Ws as z};
|