@runfusion/fusion 0.28.1 → 0.30.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.
Files changed (88) hide show
  1. package/dist/bin.js +13194 -3642
  2. package/dist/client/assets/AgentDetailView-CY-O6VkV.css +1 -0
  3. package/dist/client/assets/AgentDetailView-Cu4TgvBn.js +18 -0
  4. package/dist/client/assets/AgentPermissionPolicyEditor-Ceg2Dszn.js +6 -0
  5. package/dist/client/assets/AgentPermissionPolicyEditor-CthjqUL_.css +1 -0
  6. package/dist/client/assets/AgentsView-BI_CESkd.css +1 -0
  7. package/dist/client/assets/AgentsView-CIH4Acck.js +34 -0
  8. package/dist/client/assets/ChatView-DqJoFquZ.js +1 -0
  9. package/dist/client/assets/DevServerView-Bd8JZ-3C.js +1 -0
  10. package/dist/client/assets/{DirectoryPicker-BfShQutV.js → DirectoryPicker-BOGqZNiq.js} +1 -1
  11. package/dist/client/assets/DocumentsView-B-ELcw4o.js +1 -0
  12. package/dist/client/assets/EvalsView-Ccl9QBYN.js +1 -0
  13. package/dist/client/assets/{ExperimentalAgentOnboardingModal-CtR7eRBv.js → ExperimentalAgentOnboardingModal-BM7EnSvJ.js} +1 -1
  14. package/dist/client/assets/ExperimentalAgentOnboardingModal-BNpveCEk.css +1 -0
  15. package/dist/client/assets/{InsightsView-BGbXkJpz.js → InsightsView-DLF49bzu.js} +3 -3
  16. package/dist/client/assets/{MemoryView-CRbaCcG_.js → MemoryView-CE1D9euM.js} +2 -2
  17. package/dist/client/assets/{NodesView-Hjxwv7rE.js → NodesView-Zxusnhxu.js} +2 -2
  18. package/dist/client/assets/{PiExtensionsManager-ckNj1Wvv.js → PiExtensionsManager-BlMmxtLZ.js} +2 -2
  19. package/dist/client/assets/PluginManager-BJQXdUmV.css +1 -0
  20. package/dist/client/assets/PluginManager-D4eZ0zA4.js +1 -0
  21. package/dist/client/assets/ReliabilityView-KmH60I_5.js +1 -0
  22. package/dist/client/assets/ReliabilityView-rxA_HgEG.css +1 -0
  23. package/dist/client/assets/ResearchView-C14Zh7c9.js +1 -0
  24. package/dist/client/assets/ResearchView-DTh8FLUm.css +1 -0
  25. package/dist/client/assets/SettingsModal-BAx4gt2A.css +1 -0
  26. package/dist/client/assets/{SettingsModal-Bqfq-gnu.js → SettingsModal-DRnZ6eBW.js} +1 -1
  27. package/dist/client/assets/SettingsModal-c1QwWno0.js +31 -0
  28. package/dist/client/assets/SettingsModal-sp7SNwS9.css +1 -0
  29. package/dist/client/assets/SetupWizardModal-BmmRM3g-.js +1 -0
  30. package/dist/client/assets/SkillsView-CUbSBeZ2.css +1 -0
  31. package/dist/client/assets/SkillsView-DWVtT2-8.js +1 -0
  32. package/dist/client/assets/StashRecoveryView-CKkaWzzc.js +1 -0
  33. package/dist/client/assets/{TodoView-CDtkPdrq.js → TodoView-hbD0NOCY.js} +2 -2
  34. package/dist/client/assets/dashboard-view-VNPB3ca0.js +21 -0
  35. package/dist/client/assets/{folder-open-D8Qfxakh.js → folder-open-BTN2_Wuv.js} +1 -1
  36. package/dist/client/assets/index-CZFBq256.css +1 -0
  37. package/dist/client/assets/index-DzSLVOnp.js +695 -0
  38. package/dist/client/assets/{upload-BHiYszS2.js → upload-euJEs_N2.js} +1 -1
  39. package/dist/client/assets/{users-Ch_Fnf5M.js → users-B7miEHCZ.js} +1 -1
  40. package/dist/client/assets/vendor-codemirror-jBKmHyH0.js +27 -0
  41. package/dist/client/index.html +3 -2
  42. package/dist/client/version.json +1 -1
  43. package/dist/droid-cli/package.json +1 -1
  44. package/dist/extension.js +9987 -1944
  45. package/dist/pi-claude-cli/package.json +1 -1
  46. package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
  47. package/dist/plugins/fusion-plugin-cli-printing-press/src/__tests__/registration.test.ts +20 -3
  48. package/dist/plugins/fusion-plugin-cli-printing-press/src/__tests__/workflow-integration.test.ts +103 -8
  49. package/dist/plugins/fusion-plugin-cli-printing-press/src/__tests__/workflow-steps-verdict-contract.test.ts +42 -0
  50. package/dist/plugins/fusion-plugin-cli-printing-press/src/index.ts +4 -0
  51. package/dist/plugins/fusion-plugin-cli-printing-press/src/workflow-steps.ts +14 -0
  52. package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
  53. package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
  54. package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
  55. package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
  56. package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
  57. package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
  58. package/dist/plugins/fusion-plugin-reports/package.json +1 -1
  59. package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
  60. package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
  61. package/package.json +1 -1
  62. package/skill/fusion/SKILL.md +2 -2
  63. package/skill/fusion/references/extension-tools.md +28 -5
  64. package/skill/fusion/references/fusion-capabilities.md +7 -5
  65. package/dist/client/assets/AgentDetailView-DG01uRND.js +0 -18
  66. package/dist/client/assets/AgentDetailView-DSpIqBOs.css +0 -1
  67. package/dist/client/assets/AgentsView-B3ADnF0D.css +0 -1
  68. package/dist/client/assets/AgentsView-B6IKroR1.js +0 -34
  69. package/dist/client/assets/ChatView-DKstOyUm.js +0 -1
  70. package/dist/client/assets/DevServerView-DQQcGd2N.js +0 -1
  71. package/dist/client/assets/DocumentsView-C4Ky-ZkQ.js +0 -1
  72. package/dist/client/assets/EvalsView-B-z_KLLW.js +0 -1
  73. package/dist/client/assets/ExperimentalAgentOnboardingModal-B-APN_lM.css +0 -1
  74. package/dist/client/assets/PluginManager-C4UoLv4U.css +0 -1
  75. package/dist/client/assets/PluginManager-CpY9rYNq.js +0 -1
  76. package/dist/client/assets/ResearchView-BMxwiVk9.js +0 -1
  77. package/dist/client/assets/ResearchView-C7uXon3o.css +0 -1
  78. package/dist/client/assets/SettingsModal-3Jxv4PMI.js +0 -31
  79. package/dist/client/assets/SettingsModal-Ci0_sqbU.css +0 -1
  80. package/dist/client/assets/SettingsModal-DWKgRxBA.css +0 -1
  81. package/dist/client/assets/SetupWizardModal-SVUr5Mpm.js +0 -1
  82. package/dist/client/assets/SkillsView-COs7muvr.js +0 -1
  83. package/dist/client/assets/SkillsView-Cytf009Z.css +0 -1
  84. package/dist/client/assets/StashRecoveryView-BhB_6Fvq.js +0 -1
  85. package/dist/client/assets/dashboard-view-Czurx3BJ.js +0 -21
  86. package/dist/client/assets/index-CD0_dkME.css +0 -1
  87. package/dist/client/assets/index-u6AOHWO5.js +0 -692
  88. package/dist/client/assets/star-BkCn1oUu.js +0 -6
@@ -0,0 +1,695 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AgentDetailView-Cu4TgvBn.js","assets/vendor-react-K0fH_qHe.js","assets/AgentPermissionPolicyEditor-Ceg2Dszn.js","assets/AgentPermissionPolicyEditor-CthjqUL_.css","assets/ExperimentalAgentOnboardingModal-BM7EnSvJ.js","assets/ExperimentalAgentOnboardingModal-BNpveCEk.css","assets/vendor-xterm-DzcZoU0P.js","assets/vendor-xterm-LZoznX6r.css","assets/vendor-codemirror-jBKmHyH0.js","assets/AgentDetailView-CY-O6VkV.css","assets/addon-fit-C7jRorKK.js","assets/addon-web-links-CkJwd4cQ.js","assets/addon-webgl-BjvOw43o.js","assets/TodoView-hbD0NOCY.js","assets/TodoView-Cx9cVhq7.css","assets/SetupWizardModal-BmmRM3g-.js","assets/DirectoryPicker-BOGqZNiq.js","assets/folder-open-BTN2_Wuv.js","assets/DirectoryPicker-DzKVmxOf.css","assets/projectDetection-G3XuxD2X.js","assets/SetupWizardModal-CGYGKurR.css","assets/SettingsModal-c1QwWno0.js","assets/SettingsModal-DRnZ6eBW.js","assets/SettingsModal-sp7SNwS9.css","assets/users-B7miEHCZ.js","assets/SettingsModal-BAx4gt2A.css","assets/dashboard-view-VNPB3ca0.js","assets/createLucideIcon-BazL2hk5.js","assets/dashboard-view-DqWnXEbq.css","assets/dashboard-view-BWGH_fAq.js","assets/dashboard-view-DdGlfuu-.css","assets/AgentsView-CIH4Acck.js","assets/upload-euJEs_N2.js","assets/AgentsView-BI_CESkd.css","assets/DocumentsView-B-ELcw4o.js","assets/DocumentsView-gv4zG3aT.css","assets/InsightsView-DLF49bzu.js","assets/InsightsView-B0J4mhzV.css","assets/ResearchView-C14Zh7c9.js","assets/ResearchView-DTh8FLUm.css","assets/EvalsView-Ccl9QBYN.js","assets/EvalsView-CUNJ1TLc.css","assets/NodesView-Zxusnhxu.js","assets/NodesView-DT4pXowv.css","assets/ChatView-DqJoFquZ.js","assets/ChatView-DwJAd5G1.css","assets/SkillsView-DWVtT2-8.js","assets/SkillsView-CUbSBeZ2.css","assets/MemoryView-CE1D9euM.js","assets/MemoryView-zaXewZzi.css","assets/ReliabilityView-KmH60I_5.js","assets/ReliabilityView-rxA_HgEG.css","assets/DevServerView-Bd8JZ-3C.js","assets/DevServerView-DlZpuAnj.css","assets/StashRecoveryView-CKkaWzzc.js","assets/StashRecoveryView-B_8WIQEo.css"])))=>i.map(i=>d[i]);
2
+ import{r as i,j as t,R as wa,a as Ba,g as jb,c as aw}from"./vendor-react-K0fH_qHe.js";import"./vendor-xterm-DzcZoU0P.js";import{j as Qm,c as rw,a as ow,m as lw,C as io,E as ao,b as Xm,l as cw,o as dw,s as uw,d as mw}from"./vendor-codemirror-jBKmHyH0.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))a(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&a(l)}).observe(document,{childList:!0,subtree:!0});function s(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(r){if(r.ep)return;r.ep=!0;const o=s(r);fetch(r.href,o)}})();/**
3
+ * @license lucide-react v1.7.0 - ISC
4
+ *
5
+ * This source code is licensed under the ISC license.
6
+ * See the LICENSE file in the root directory of this source tree.
7
+ */const Nb=(...e)=>e.filter((n,s,a)=>!!n&&n.trim()!==""&&a.indexOf(n)===s).join(" ").trim();/**
8
+ * @license lucide-react v1.7.0 - ISC
9
+ *
10
+ * This source code is licensed under the ISC license.
11
+ * See the LICENSE file in the root directory of this source tree.
12
+ */const hw=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 pw=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(n,s,a)=>a?a.toUpperCase():s.toLowerCase());/**
18
+ * @license lucide-react v1.7.0 - ISC
19
+ *
20
+ * This source code is licensed under the ISC license.
21
+ * See the LICENSE file in the root directory of this source tree.
22
+ */const Zm=e=>{const n=pw(e);return n.charAt(0).toUpperCase()+n.slice(1)};/**
23
+ * @license lucide-react v1.7.0 - ISC
24
+ *
25
+ * This source code is licensed under the ISC license.
26
+ * See the LICENSE file in the root directory of this source tree.
27
+ */var Yc={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/**
28
+ * @license lucide-react v1.7.0 - ISC
29
+ *
30
+ * This source code is licensed under the ISC license.
31
+ * See the LICENSE file in the root directory of this source tree.
32
+ */const fw=e=>{for(const n in e)if(n.startsWith("aria-")||n==="role"||n==="title")return!0;return!1},gw=i.createContext({}),bw=()=>i.useContext(gw),xw=i.forwardRef(({color:e,size:n,strokeWidth:s,absoluteStrokeWidth:a,className:r="",children:o,iconNode:l,...c},d)=>{const{size:u=24,strokeWidth:h=2,absoluteStrokeWidth:m=!1,color:f="currentColor",className:p=""}=bw()??{},g=a??m?Number(s??h)*24/Number(n??u):s??h;return i.createElement("svg",{ref:d,...Yc,width:n??u??Yc.width,height:n??u??Yc.height,stroke:e??f,strokeWidth:g,className:Nb("lucide",p,r),...!o&&!fw(c)&&{"aria-hidden":"true"},...c},[...l.map(([w,v])=>i.createElement(w,v)),...Array.isArray(o)?o:[o]])});/**
33
+ * @license lucide-react v1.7.0 - ISC
34
+ *
35
+ * This source code is licensed under the ISC license.
36
+ * See the LICENSE file in the root directory of this source tree.
37
+ */const rt=(e,n)=>{const s=i.forwardRef(({className:a,...r},o)=>i.createElement(xw,{ref:o,iconNode:n,className:Nb(`lucide-${hw(Zm(e))}`,`lucide-${e}`,a),...r}));return s.displayName=Zm(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 vw=[["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"}]],Bs=rt("activity",vw);/**
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 yw=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h2",key:"tvwodi"}],["path",{d:"M20 8v11a2 2 0 0 1-2 2h-2",key:"1gkqxj"}],["path",{d:"m9 15 3-3 3 3",key:"1pd0qc"}],["path",{d:"M12 12v9",key:"192myk"}]],ww=rt("archive-restore",yw);/**
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 kw=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]],Wr=rt("archive",kw);/**
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 jw=[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]],Yo=rt("arrow-down",jw);/**
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 Nw=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],er=rt("arrow-left",Nw);/**
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 Sw=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]],Qo=rt("arrow-right",Sw);/**
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 Cw=[["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"}]],Sb=rt("arrow-up-down",Cw);/**
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 Ew=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],Ha=rt("arrow-up",Ew);/**
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 _w=[["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"}]],Mw=rt("book-open",_w);/**
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 Aw=[["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"}]],Qn=rt("bot",Aw);/**
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 Rw=[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]],hu=rt("box",Rw);/**
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 Iw=[["path",{d:"M12 18V5",key:"adv99a"}],["path",{d:"M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4",key:"1e3is1"}],["path",{d:"M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5",key:"1gqd8o"}],["path",{d:"M17.997 5.125a4 4 0 0 1 2.526 5.77",key:"iwvgf7"}],["path",{d:"M18 18a4 4 0 0 0 2-7.464",key:"efp6ie"}],["path",{d:"M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517",key:"1gq6am"}],["path",{d:"M6 18a4 4 0 0 1-2-7.464",key:"k1g0md"}],["path",{d:"M6.003 5.125a4 4 0 0 0-2.526 5.77",key:"q97ue3"}]],Uo=rt("brain",Iw);/**
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 Tw=[["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"}]],Cb=rt("calendar",Tw);/**
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 Pw=[["path",{d:"M18 6 7 17l-5-5",key:"116fxf"}],["path",{d:"m22 10-7.5 7.5L13 16",key:"ke71qq"}]],eh=rt("check-check",Pw);/**
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 $w=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],bs=rt("check",$w);/**
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 Dw=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Cn=rt("chevron-down",Dw);/**
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 Lw=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],wc=rt("chevron-left",Lw);/**
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 Ow=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Vn=rt("chevron-right",Ow);/**
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 Fw=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],hi=rt("chevron-up",Fw);/**
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 zw=[["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"}]],Us=rt("circle-alert",zw);/**
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 Bw=[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],Xn=rt("circle-check-big",Bw);/**
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 Uw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]],kc=rt("circle-dot",Uw);/**
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 Hw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]],pu=rt("circle-question-mark",Hw);/**
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 qw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",key:"1ssd4o"}]],Vw=rt("circle-stop",qw);/**
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 Ww=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],Xo=rt("circle-x",Ww);/**
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 Gw=[["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"}]],Kw=rt("clipboard-list",Gw);/**
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 Jw=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]],sa=rt("clock",Jw);/**
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 Yw=[["path",{d:"m16 18 6-6-6-6",key:"eg8j8"}],["path",{d:"m8 6-6 6 6 6",key:"ppft3o"}]],Eb=rt("code",Yw);/**
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 Qw=[["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"}]],th=rt("columns-3",Qw);/**
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 Xw=[["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"}]],ka=rt("copy",Xw);/**
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 Zw=[["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"}]],_b=rt("cpu",Zw);/**
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 ek=[["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"}]],tk=rt("download",ek);/**
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 nk=[["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"}]],sk=rt("ellipsis-vertical",nk);/**
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 ik=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],fu=rt("ellipsis",ik);/**
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 ak=[["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"}]],Mb=rt("external-link",ak);/**
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 rk=[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],Zu=rt("eye-off",rk);/**
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 ok=[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Gr=rt("eye",ok);/**
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 lk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]],Ni=rt("file-code",lk);/**
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 ck=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 17h6",key:"r8uit2"}]],gu=rt("file-diff",ck);/**
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 dk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M9 15h6",key:"cctwl0"}]],uk=rt("file-minus",dk);/**
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 mk=[["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"}]],Ab=rt("file-pen",mk);/**
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 hk=[["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"}]],pk=rt("file-plus",hk);/**
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 fk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3",key:"mhlwft"}]],gk=rt("file-question-mark",fk);/**
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 bk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"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"}]],ja=rt("file-text",bk);/**
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 xk=[["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"}]],vk=rt("file-type",xk);/**
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 yk=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}]],Rb=rt("file",yk);/**
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 wk=[["path",{d:"M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528",key:"1jaruq"}]],kk=rt("flag",wk);/**
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 jk=[["path",{d:"M18 19a5 5 0 0 1-5-5v8",key:"sz5oeg"}],["path",{d:"M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5",key:"1w6njk"}],["circle",{cx:"13",cy:"12",r:"2",key:"1j92g6"}],["circle",{cx:"20",cy:"19",r:"2",key:"1obnsp"}]],bu=rt("folder-git-2",jk);/**
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 Nk=[["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"}]],nh=rt("folder-root",Nk);/**
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 Sk=[["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"}]],ks=rt("folder",Sk);/**
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 Ck=[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]],Zl=rt("funnel",Ck);/**
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 Ek=[["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"}]],Ps=rt("git-branch",Ek);/**
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 _k=[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]],Ir=rt("git-commit-horizontal",_k);/**
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 Mk=[["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"}]],Ib=rt("git-merge",Mk);/**
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 Ak=[["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"}]],Xs=rt("git-pull-request",Ak);/**
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 Rk=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],jc=rt("globe",Rk);/**
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 Ik=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]],Nc=rt("grid-3x3",Ik);/**
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 Tk=[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]],Sc=rt("grip-vertical",Tk);/**
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 Pk=[["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"}]],$k=rt("hard-drive",Pk);/**
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 Dk=[["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"}]],Lk=rt("heart",Dk);/**
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 Ok=[["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"}]],qa=rt("history",Ok);/**
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 Fk=[["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"}]],ba=rt("inbox",Fk);/**
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 zk=[["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"}]],Tb=rt("key",zk);/**
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 Bk=[["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"}]],Uk=rt("keyboard",Bk);/**
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 Hk=[["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"}]],Va=rt("layers",Hk);/**
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 qk=[["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"}]],Na=rt("layout-grid",qk);/**
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 Vk=[["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"}]],Bi=rt("lightbulb",Vk);/**
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 Wk=[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]],Tr=rt("link",Wk);/**
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 Gk=[["path",{d:"M13 5h8",key:"a7qcls"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}]],Kk=rt("list-checks",Gk);/**
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 Jk=[["path",{d:"M11 5h10",key:"1cz7ny"}],["path",{d:"M11 12h10",key:"1438ji"}],["path",{d:"M11 19h10",key:"11t30w"}],["path",{d:"M4 4h1v5",key:"10yrso"}],["path",{d:"M4 9h2",key:"r1h2o0"}],["path",{d:"M6.5 20H3.4c0-1 2.6-1.925 2.6-3.5a1.5 1.5 0 0 0-2.6-1.02",key:"xtkcd5"}]],Yk=rt("list-ordered",Jk);/**
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 Qk=[["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"}]],Xk=rt("list-plus",Qk);/**
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 Zk=[["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 19h8",key:"c3s6r1"}],["path",{d:"M3 10a2 2 0 0 0 2 2h3",key:"1npucw"}],["path",{d:"M3 5v12a2 2 0 0 0 2 2h3",key:"x1gjn2"}]],Cc=rt("list-tree",Zk);/**
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 ej=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],xu=rt("list",ej);/**
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 tj=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],_t=rt("loader-circle",tj);/**
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 nj=[["rect",{width:"18",height:"11",x:"3",y:"11",rx:"2",ry:"2",key:"1w4ew1"}],["path",{d:"M7 11V7a5 5 0 0 1 10 0v4",key:"fwvmzm"}]],Ec=rt("lock",nj);/**
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 sj=[["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"}]],Wa=rt("mail",sj);/**
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 ij=[["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"}]],aj=rt("map",ij);/**
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 rj=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]],_c=rt("maximize-2",rj);/**
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 oj=[["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"}]],lj=rt("message-square-plus",oj);/**
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 cj=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],ta=rt("message-square",cj);/**
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 dj=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],Zo=rt("minimize-2",dj);/**
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 uj=[["path",{d:"M5 12h14",key:"1ays0h"}]],mj=rt("minus",uj);/**
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 hj=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],Pr=rt("monitor",hj);/**
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 pj=[["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"}]],fj=rt("move",pj);/**
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 gj=[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]],bj=rt("network",gj);/**
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 xj=[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["polyline",{points:"3.29 7 12 12 20.71 7",key:"ousv84"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]],vu=rt("package",xj);/**
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 vj=[["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"}]],Pb=rt("paperclip",vj);/**
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 yj=[["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"}]],ui=rt("pause",yj);/**
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 wj=[["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"}]],Fs=rt("pencil",wj);/**
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 kj=[["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"}]],is=rt("play",kj);/**
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 jj=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],Bn=rt("plus",jj);/**
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 Nj=[["path",{d:"M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z",key:"w46dr5"}]],Sj=rt("puzzle",Nj);/**
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 Cj=[["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"}]],$b=rt("radio",Cj);/**
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 Ej=[["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"}]],us=rt("refresh-cw",Ej);/**
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 _j=[["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"}]],sh=rt("rocket",_j);/**
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 Mj=[["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"}]],Aj=rt("rotate-ccw",Mj);/**
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 Rj=[["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"}]],ih=rt("rotate-cw",Rj);/**
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 Ij=[["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"}]],Db=rt("save",Ij);/**
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 Tj=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],Fi=rt("search",Tj);/**
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 Pj=[["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"}]],Ua=rt("send",Pj);/**
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 $j=[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]],Ho=rt("server",$j);/**
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 Dj=[["path",{d:"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915",key:"1i5ecw"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Do=rt("settings",Dj);/**
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 Lj=[["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"}]],Oj=rt("shield-alert",Lj);/**
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 Fj=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],zj=rt("shield",Fj);/**
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 Bj=[["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"}]],Uj=rt("skull",Bj);/**
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 Hj=[["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"}]],cs=rt("sparkles",Hj);/**
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 qj=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],em=rt("square-check-big",qj);/**
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 Vj=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],Oi=rt("square",Vj);/**
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 Wj=[["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"}]],Ss=rt("target",Wj);/**
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 Gj=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],na=rt("terminal",Gj);/**
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 Kj=[["path",{d:"m16 16-3 3 3 3",key:"117b85"}],["path",{d:"M3 12h14.5a1 1 0 0 1 0 7H13",key:"18xa6z"}],["path",{d:"M3 19h6",key:"1ygdsz"}],["path",{d:"M3 5h18",key:"1u36vt"}]],tm=rt("text-wrap",Kj);/**
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 Jj=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],zn=rt("trash-2",Jj);/**
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 Yj=[["path",{d:"M16 7h6v6",key:"box55l"}],["path",{d:"m22 7-8.5 8.5-5-5L2 17",key:"1t1m79"}]],Qj=rt("trending-up",Yj);/**
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 Xj=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Kr=rt("triangle-alert",Xj);/**
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 Zj=[["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"}]],ah=rt("unlink",Zj);/**
613
+ * @license lucide-react v1.7.0 - ISC
614
+ *
615
+ * This source code is licensed under the ISC license.
616
+ * See the LICENSE file in the root directory of this source tree.
617
+ */const eN=[["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"}]],La=rt("user",eN);/**
618
+ * @license lucide-react v1.7.0 - ISC
619
+ *
620
+ * This source code is licensed under the ISC license.
621
+ * See the LICENSE file in the root directory of this source tree.
622
+ */const tN=[["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"}]],Lb=rt("webhook",tN);/**
623
+ * @license lucide-react v1.7.0 - ISC
624
+ *
625
+ * This source code is licensed under the ISC license.
626
+ * See the LICENSE file in the root directory of this source tree.
627
+ */const nN=[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]],ec=rt("workflow",nN);/**
628
+ * @license lucide-react v1.7.0 - ISC
629
+ *
630
+ * This source code is licensed under the ISC license.
631
+ * See the LICENSE file in the root directory of this source tree.
632
+ */const sN=[["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"}]],rh=rt("wrench",sN);/**
633
+ * @license lucide-react v1.7.0 - ISC
634
+ *
635
+ * This source code is licensed under the ISC license.
636
+ * See the LICENSE file in the root directory of this source tree.
637
+ */const iN=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],kn=rt("x",iN);/**
638
+ * @license lucide-react v1.7.0 - ISC
639
+ *
640
+ * This source code is licensed under the ISC license.
641
+ * See the LICENSE file in the root directory of this source tree.
642
+ */const aN=[["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"}]],rs=rt("zap",aN),yu="fusion:version-reload",wu="fusion:version-update";let nm=!0;function Qc(e){nm=e}function rN(){try{if(sessionStorage.getItem(wu))return sessionStorage.removeItem(wu),!0}catch{}return!1}function sm(e){if(sessionStorage.getItem(yu)){console.warn("[versionCheck] reload already attempted, suppressing",e);return}if(sessionStorage.setItem(yu,"1"),!nm){console.info("[versionCheck] auto-reload disabled by setting, skipping reload:",e);return}console.info("[versionCheck] reloading:",e),window.location.reload()}function oN(e){const n=e instanceof Error?e.message:typeof e=="string"?e:"";return/Failed to fetch dynamically imported module|error loading dynamically imported module|Importing a module script failed|is not a valid JavaScript MIME type|ChunkLoadError|Unable to preload (?:CSS|module) for/i.test(n)}function lN(e){return oN(e)?(sm(`chunk load error: ${e?.message??e}`),!0):!1}async function cN(){try{const e=await fetch("/version.json",{cache:"no-store",headers:{Accept:"application/json"}});if(!e.ok||!(e.headers.get("content-type")??"").includes("application/json"))return null;const s=await e.json();return typeof s.version=="string"?s.version:null}catch{return null}}async function dN(){try{const e=new AbortController,n=setTimeout(()=>e.abort(),3e3),s=await fetch("/api/settings",{headers:{Accept:"application/json"},signal:e.signal});clearTimeout(n),s.ok&&(await s.json()).autoReloadOnVersionChange===!1&&(nm=!1)}catch{}}const uN=6e4;let oh=0,Xc=!1;async function Zc(){if(!(Xc||document.visibilityState!=="visible")&&!(Date.now()-oh<uN)){oh=Date.now(),Xc=!0;try{const e=await cN();if(e&&e!=="5528113eb-ad94e747"){try{sessionStorage.setItem(wu,"1")}catch{}sm(`build version changed: 5528113eb-ad94e747 -> ${e}`)}}finally{Xc=!1}}}function mN(){dN(),window.setTimeout(()=>sessionStorage.removeItem(yu),5e3),document.addEventListener("visibilitychange",()=>{Zc()}),window.addEventListener("focus",()=>{Zc()}),window.setTimeout(()=>void Zc(),2e3)}class el extends i.Component{constructor(n){super(n),this.state={hasError:!1,error:null}}static getDerivedStateFromError(n){return{hasError:!0,error:n}}componentDidCatch(n,s){console.error("[ErrorBoundary]",n,s),!lN(n)&&this.props.onError?.(n,s)}resetErrorBoundary=()=>{this.setState({hasError:!1,error:null})};render(){if(!this.state.hasError)return this.props.children;if(this.props.fallback)return this.props.fallback;const n=this.props.level??"page",a=n==="modal"?"This section encountered an error":"Something went wrong";return t.jsxs("div",{className:`error-boundary error-boundary--${n}`,children:[t.jsx("div",{className:"error-boundary__icon",children:t.jsx(Kr,{size:40})}),t.jsx("div",{className:"error-boundary__title",children:a}),this.state.error&&t.jsx("pre",{className:"error-boundary__message",children:this.state.error.message}),t.jsxs("div",{className:"error-boundary__actions",children:[t.jsx("button",{className:"btn btn-primary",onClick:this.resetErrorBoundary,children:"Retry"}),t.jsx("button",{className:"btn",onClick:()=>window.location.reload(),children:"Reload page"})]})]})}}function js({children:e,onError:n}){return t.jsx(el,{level:"page",onError:n,children:e})}function Oa({children:e,onError:n}){return t.jsx(el,{level:"modal",onError:n,children:e})}function hN({children:e,onError:n}){return t.jsx(el,{level:"root",onError:n,children:e})}const pN="modulepreload",fN=function(e){return"/"+e},lh={},Rn=function(n,s,a){let r=Promise.resolve();if(s&&s.length>0){let l=function(u){return Promise.all(u.map(h=>Promise.resolve(h).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const c=document.querySelector("meta[property=csp-nonce]"),d=c?.nonce||c?.getAttribute("nonce");r=l(s.map(u=>{if(u=fN(u),u in lh)return;lh[u]=!0;const h=u.endsWith(".css"),m=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${m}`))return;const f=document.createElement("link");if(f.rel=h?"stylesheet":pN,h||(f.as="script"),f.crossOrigin="",f.href=u,d&&f.setAttribute("nonce",d),document.head.appendChild(f),h)return new Promise((p,g)=>{f.addEventListener("load",p),f.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${u}`)))})}))}function o(l){const c=new Event("vite:preloadError",{cancelable:!0});if(c.payload=l,window.dispatchEvent(c),!c.defaultPrevented)throw l}return r.then(l=>{for(const c of l||[])c.status==="rejected"&&o(c.reason);return n().catch(o)})},gN=20;function bN(e){const n=e.todoCount>e.threshold&&e.idleNonEphemeralAgentCount===0;return{atRisk:n,todoCount:e.todoCount,inProgressCount:e.inProgressCount,inReviewCount:e.inReviewCount,idleNonEphemeralAgentCount:e.idleNonEphemeralAgentCount,threshold:e.threshold,reason:n?"todo-exceeds-threshold-and-no-idle-agents":"ok"}}const xN={themeMode:"dark",colorTheme:"default",dashboardFontScalePct:100,defaultProvider:void 0,defaultModelId:void 0,fallbackProvider:void 0,fallbackModelId:void 0,defaultThinkingLevel:void 0,ntfyEnabled:!1,ntfyTopic:void 0,ntfyBaseUrl:void 0,ntfyAccessToken:void 0,ntfyEvents:["in-review","merged","failed","awaiting-approval","awaiting-user-review","planning-awaiting-input","message:agent-to-user","message:agent-to-agent","message:room","gridlock","fallback-used","memory-dreams-processed","token-budget"],ntfyDashboardHost:void 0,taskTokenBudget:void 0,failureNotificationDelayMs:3e4,failureNotificationMode:"sticky-only",webhookEnabled:!1,webhookUrl:void 0,webhookFormat:"generic",webhookEvents:[],notificationProviders:[],customProviders:[],defaultProjectId:void 0,setupComplete:void 0,favoriteProviders:void 0,favoriteModels:void 0,openrouterModelSync:!0,opencodeGoModelSync:!0,updateCheckEnabled:!0,fnBinaryCheckEnabled:!0,updateCheckFrequency:"daily",autoReloadOnVersionChange:!0,showGitHubStarButton:!0,githubTrackingDefaultRepo:void 0,modelOnboardingComplete:void 0,useClaudeCli:void 0,useDroidCli:void 0,useLlamaCpp:void 0,executionGlobalProvider:void 0,executionGlobalModelId:void 0,planningGlobalProvider:void 0,planningGlobalModelId:void 0,validatorGlobalProvider:void 0,validatorGlobalModelId:void 0,titleSummarizerGlobalProvider:void 0,titleSummarizerGlobalModelId:void 0,daemonToken:void 0,daemonPort:4040,daemonHost:"127.0.0.1",settingsSyncEnabled:!1,settingsSyncAuth:!1,settingsSyncInterval:9e5,settingsSyncConflictResolution:"last-write-wins",dashboardCurrentNodeId:void 0,dashboardCurrentProjectIdByNode:void 0,vitestAutoKillEnabled:!0,vitestKillThresholdPct:90,persistAgentToolOutput:!0,persistAgentThinkingLogPermanent:!1,persistAgentThinkingLogEphemeral:!1,persistAgentThinkingLog:!1,agentMemoryInclusionMode:"full",researchGlobalDefaults:{searchProvider:void 0,synthesisProvider:void 0,synthesisModelId:void 0,enabledSources:{webSearch:!0,pageFetch:!0,github:!1,localDocs:!0,llmSynthesis:!0},maxSourcesPerRun:20,defaultExportFormat:"markdown"},researchGlobalEnabled:!0,researchGlobalMaxConcurrentRuns:3,researchGlobalDefaultTimeout:3e5,researchGlobalMaxSourcesPerRun:20,researchGlobalMaxSynthesisRounds:2,researchGlobalWebSearchProvider:"builtin",researchGlobalSearxngUrl:void 0,researchGlobalBraveApiKey:void 0,researchGlobalGoogleSearchApiKey:void 0,researchGlobalGoogleSearchCx:void 0,researchGlobalTavilyApiKey:void 0,researchGlobalGitHubEnabled:!1,researchGlobalLocalDocsEnabled:!0,researchGlobalMaxSearchResults:10,researchGlobalFetchTimeoutMs:3e4,researchGlobalUserAgent:"FusionResearchBot/1.0",remoteAccess:{activeProvider:null,providers:{tailscale:{enabled:!1,hostname:"",targetPort:0,acceptRoutes:!1},cloudflare:{enabled:!1,quickTunnel:!0,tunnelName:"",tunnelToken:null,ingressUrl:""}},tokenStrategy:{persistent:{enabled:!0,token:null},shortLived:{enabled:!1,ttlMs:9e5,maxTtlMs:864e5}},lifecycle:{rememberLastRunning:!1,wasRunningOnShutdown:!1,lastRunningProvider:null}},experimentalFeatures:{}},vN={globalPause:!1,globalPauseReason:void 0,enginePaused:!1,maxConcurrent:2,maxTriageConcurrent:2,globalMaxConcurrent:4,maxWorktrees:4,pollIntervalMs:15e3,heartbeatMultiplier:1,autoClaimCandidatesInPrompt:5,heartbeatScopeDiscipline:"strict",heartbeatPromptTemplate:"default",groupOverlappingFiles:!0,overlapIgnorePaths:[],autoMerge:!0,mergeStrategy:"direct",directMergeCommitStrategy:"auto",requirePrApproval:!1,pushAfterMerge:!1,pushRemote:"origin",unavailableNodePolicy:"block",defaultNodeId:void 0,worktreeInitCommand:void 0,testCommand:void 0,buildCommand:void 0,recycleWorktrees:!1,executorAllowSiblingBranchRename:!1,worktreeNaming:"random",taskPrefix:"FN",includeTaskIdInCommit:!0,commitAuthorEnabled:!0,commitAuthorName:"Fusion",commitAuthorEmail:"noreply@runfusion.ai",planningProvider:void 0,planningModelId:void 0,planningFallbackProvider:void 0,planningFallbackModelId:void 0,defaultProviderOverride:void 0,defaultModelIdOverride:void 0,executionProvider:void 0,executionModelId:void 0,validatorProvider:void 0,validatorModelId:void 0,validatorFallbackProvider:void 0,validatorFallbackModelId:void 0,modelPresets:[],autoSelectModelPreset:!1,completionDocumentationMode:"off",defaultPresetBySize:{},autoResolveConflicts:!0,smartConflictResolution:!0,mergerAutostashMaxAgeHours:24,worktreeRebaseBeforeMerge:!0,worktreeRebaseRemote:"",worktreeRebaseLocalBase:!0,mergeConflictStrategy:"smart-prefer-main",mergeDiffVolumeMinLines:void 0,mergeDiffVolumeThreshold:void 0,mergeDiffVolumeAllowlist:void 0,mergeStrategyOverlapBehavior:"flip-to-prefer-branch",postMergeAuditMode:"warn",mergeAuditAutoRecovery:"ai-assisted",autoRecovery:{mode:"deterministic-only",maxRetries:3},workflowStepTimeoutMs:36e4,workflowStepScopeEnforcement:"block",planOnlyScopeLeakEnforcement:"warn",workflowRevisionForkOnScopeMismatch:!0,strictScopeEnforcement:!1,buildRetryCount:0,verificationFixRetries:3,buildTimeoutMs:3e5,requirePlanApproval:!1,ephemeralAgentsEnabled:!0,agentProvisioning:{},defaultAgentPermissionPolicy:void 0,specStalenessEnabled:!1,specStalenessMaxAgeMs:360*60*1e3,taskStuckTimeoutMs:6e5,stalePausedReviewThresholdMs:1440*6e4,capacityRiskBannerEnabled:!1,capacityRiskTodoThreshold:20,staleHighFanoutBlockerAgeThresholdMs:7200*1e3,staleInProgressWarningMs:240*6e4,staleInProgressCriticalMs:1440*6e4,staleInReviewWarningMs:1440*6e4,staleInReviewCriticalMs:4320*6e4,aiSessionTtlMs:10080*60*1e3,aiSessionCleanupIntervalMs:3600*1e3,autoUnpauseEnabled:!0,autoUnpauseBaseDelayMs:3e5,autoUnpauseMaxDelayMs:36e5,maxStuckKills:6,maxBranchConflictRecoveries:5,maxReviewerContextRetries:2,maxReviewerFallbackRetries:2,maxTotalRetriesBeforeFail:25,preserveProgressOnStuckRequeue:!0,maxPostReviewFixes:1,maxSpawnedAgentsPerParent:5,maxSpawnedAgentsGlobal:20,maintenanceIntervalMs:3e5,autoArchiveDoneTasksEnabled:!0,autoArchiveDoneAfterMs:2880*60*1e3,archiveAgentLogMode:"compact",autoUpdatePrStatus:!1,githubCommentOnDone:!1,githubCommentTemplate:void 0,githubTrackingEnabledByDefault:!1,githubTrackingDefaultRepo:void 0,githubAuthMode:"gh-cli",githubAuthToken:void 0,autoBackupEnabled:!1,autoBackupSchedule:"0 2 * * *",autoBackupRetention:7,autoBackupDir:".fusion/backups",memoryBackupEnabled:!1,memoryBackupSchedule:"0 3 * * *",memoryBackupRetention:14,memoryBackupDir:".fusion/backups/memory",memoryBackupScope:"all",autoSummarizeTitles:!1,useAiMergeCommitSummary:!0,titleSummarizerProvider:void 0,titleSummarizerModelId:void 0,titleSummarizerFallbackProvider:void 0,titleSummarizerFallbackModelId:void 0,scripts:void 0,setupScript:void 0,insightExtractionEnabled:!1,insightExtractionSchedule:"0 2 * * *",insightExtractionMinIntervalMs:864e5,taskEvaluationEnabled:!1,taskEvaluationSchedule:"0 5 * * *",taskEvaluationProvider:void 0,taskEvaluationModelId:void 0,taskEvaluationFollowUpPolicy:"off",taskEvaluationRetention:void 0,memoryEnabled:!0,memoryBackendType:"qmd",memoryAutoSummarizeEnabled:!1,memoryAutoSummarizeThresholdChars:5e4,memoryAutoSummarizeSchedule:"0 3 * * *",memoryDreamsEnabled:!1,memoryDreamsSchedule:"0 4 * * *",tokenCap:void 0,taskTokenBudget:void 0,runStepsInNewSessions:!1,maxParallelSteps:2,missionStaleThresholdMs:6e5,missionMaxTaskRetries:3,missionHealthCheckIntervalMs:3e5,agentPrompts:void 0,promptOverrides:void 0,reflectionEnabled:!1,reflectionIntervalMs:36e5,reflectionAfterTask:!0,reviewHandoffPolicy:"disabled",showQuickChatFAB:!1,chatRoomRecentVerbatimMessages:12,chatRoomCompactionFetchLimit:80,chatRoomSummaryMaxChars:1500,researchSettings:{enabled:!0,searchProvider:void 0,synthesisProvider:void 0,synthesisModelId:void 0,enabledSources:{webSearch:!0,pageFetch:!0,github:!1,localDocs:!0,llmSynthesis:!0},limits:{maxConcurrentRuns:3,maxSourcesPerRun:20,maxDurationMs:3e5,requestTimeoutMs:3e4}},evalSettings:{enabled:!1,intervalMs:864e5,evaluatorProvider:void 0,evaluatorModelId:void 0,followUpPolicy:"suggest-only",retentionDays:30},researchEnabled:!0,researchMaxConcurrentRuns:3,researchDefaultTimeout:3e5,researchMaxSourcesPerRun:20,researchMaxSynthesisRounds:2},yN=Object.freeze(Object.keys(xN)),wN=Object.freeze(Object.keys(vN));function D3(e){return yN.includes(e)}function L3(e){return wN.includes(e)}function O3(e,n){const s=n.ephemeral?e?.persistAgentThinkingLogEphemeral:e?.persistAgentThinkingLogPermanent;return typeof s=="boolean"?s:typeof e?.persistAgentThinkingLog=="boolean"?e.persistAgentThinkingLog:!1}function Me(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function kN(e){return!!(e?.provider&&e?.modelId)}function Sa(...e){for(const n of e)if(kN(n))return{provider:n.provider,modelId:n.modelId};return{}}function Mc(e){return Sa({provider:e?.defaultProviderOverride,modelId:e?.defaultModelIdOverride},{provider:e?.defaultProvider,modelId:e?.defaultModelId})}function jN(e){return Sa({provider:e?.executionProvider,modelId:e?.executionModelId},{provider:e?.executionGlobalProvider,modelId:e?.executionGlobalModelId},Mc(e))}function NN(e){return Sa({provider:e?.planningProvider,modelId:e?.planningModelId},{provider:e?.planningGlobalProvider,modelId:e?.planningGlobalModelId},Mc(e))}function SN(e){return Sa({provider:e?.validatorProvider,modelId:e?.validatorModelId},{provider:e?.validatorGlobalProvider,modelId:e?.validatorGlobalModelId},Mc(e))}function F3(e){return Sa({provider:e?.titleSummarizerProvider,modelId:e?.titleSummarizerModelId},{provider:e?.titleSummarizerGlobalProvider,modelId:e?.titleSummarizerGlobalModelId},{provider:e?.planningProvider,modelId:e?.planningModelId},Mc(e))}function Ob(e,n){return Sa({provider:e.modelProvider,modelId:e.modelId},jN(n))}function Fb(e,n){return Sa({provider:e.validatorModelProvider,modelId:e.validatorModelId},SN(n))}function zb(e,n){return Sa({provider:e.planningModelProvider,modelId:e.planningModelId},NN(n))}const z3=["off","minimal","low","medium","high"],xa=["triage","todo","in-progress","in-review","done","archived"],tc="triage";function im(e){return typeof e=="string"&&xa.includes(e)}function Bb(e,n=tc){return im(e)?e:n}const Ca=["low","normal","high","urgent"],Rs="normal",am=5,Ub=7200*1e3,CN=["default","ocean","forest","sunset","zen","berry","high-contrast","industrial","monochrome","slate","ash","graphite","silver","solarized","factory","ayu","one-dark","nord","dracula","gruvbox","tokyo-night","catppuccin-mocha","github-dark","everforest","rose-pine","kanagawa","night-owl","palenight","monokai-pro","slime","brutalist","neon-city","parchment","terminal","glass","horizon","vitesse","outrun","snazzy","porple","espresso","mars","poimandres","ember","rust","copper","foundry","carbon","sandstone","lagoon","frost","lavender","neon-bloom","sepia"],Ac=/^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/,ds={triage:"Planning",todo:"Todo","in-progress":"In Progress","in-review":"In Review",done:"Done",archived:"Archived"},EN={triage:"Raw ideas — AI will plan these",todo:"Specified and ready to start","in-progress":"AI is working on this in a worktree","in-review":"Complete — ready to merge",done:"Merged and closed",archived:"Completed and archived"},ku={triage:["todo"],todo:["in-progress","triage"],"in-progress":["in-review","todo","triage","done"],"in-review":["done","in-progress","todo","triage"],done:["todo","triage","archived"],archived:["done"]};function _N(e){const n=e.metadata??{};return!!(n.agentKind==="task-worker"||n.taskWorker===!0||n.managedBy==="task-executor"||n.type==="spawned"||n.internal===!0||e.role==="executor"&&typeof e.name=="string"&&e.name.startsWith("executor-")&&e.reportsTo==null||e.role==="executor"&&e.name==="verification-agent"&&e.reportsTo==null)}const B3=["git_write","file_write_delete","command_execution","network_api","task_agent_mutation"],rm="fn.authToken",ch="token",MN="fn_token";let Er,dh=!1,nc=!1;const ju="fn:auth-token-recovery-required";function AN(){try{const e=window.localStorage.getItem(rm);return e&&e.length>0?e:void 0}catch{return}}function Hb(e){try{window.localStorage.setItem(rm,e)}catch{}}function RN(){if(!(dh||typeof window>"u")){dh=!0;try{const e=new URL(window.location.href),n=e.searchParams.get(ch);if(!n)return;Hb(n),e.searchParams.delete(ch);const s=e.pathname+(e.search?e.search:"")+e.hash;return window.history.replaceState(window.history.state,"",s),n}catch{return}}}function $r(){if(Er!==void 0)return Er;const e=RN();if(e)return Er=e,e;const n=AN();if(n)return Er=n,n}function IN(e){Er=e,nc=!1,Hb(e)}function TN(){Er=void 0,nc=!1;try{window.localStorage.removeItem(rm)}catch{}}function uh(e){return e==="ws:"?"http:":e==="wss:"?"https:":e}function PN(e){return e==="http:"||e==="https:"||e==="ws:"||e==="wss:"}function $N(e){if(typeof window>"u")return!1;const n=new URL(window.location.origin);if(!PN(e.protocol))return!1;const s=e.hostname===n.hostname,a=e.port===n.port,r=uh(e.protocol)===uh(n.protocol);return s&&a&&r}function DN(e){if(!(typeof window>"u"))try{const n=new URL(e,window.location.origin),s=e.startsWith("/");return{parsed:n,preserveRelativePath:s}}catch{return}}function Ci(e){const n=$r();if(!n||typeof window>"u")return e;const s=DN(e);return!s||!$N(s.parsed)?e:(s.parsed.searchParams.set(MN,n),s.preserveRelativePath?`${s.parsed.pathname}${s.parsed.search}${s.parsed.hash}`:s.parsed.toString())}function Ei(e){const n=$r();if(!n)return e;const s=new Headers(e??{});return s.has("Authorization")||s.set("Authorization",`Bearer ${n}`),s}function LN(e){if(!e||typeof e!="object")return!1;const n=e;return n.error==="Unauthorized"&&n.message==="Valid bearer token required"}function ON(){typeof window>"u"||nc||(nc=!0,window.dispatchEvent(new CustomEvent(ju)))}async function FN(e){if(e.status===401)try{const n=e.clone();if(!(n.headers.get("content-type")??"").toLowerCase().includes("application/json"))return;const a=await n.json();LN(a)&&ON()}catch{}}function zN(){if(typeof window>"u"||window.__fnAuthFetchInstalled)return;window.__fnAuthFetchInstalled=!0,$r();const e=window.fetch.bind(window);window.fetch=function(s,a){const r=$r(),o=typeof s=="string"?s:s instanceof URL?s.toString():s.url;if(!(()=>{try{const d=new URL(o,window.location.origin);return d.origin!==window.location.origin?!1:d.pathname.startsWith("/api/")||d.pathname==="/api"}catch{return o.startsWith("/api/")||o==="/api"}})())return e(s,a);const c=new Headers(a?.headers??(s instanceof Request?s.headers:void 0));return r&&!c.has("Authorization")&&c.set("Authorization",`Bearer ${r}`),e(s,{...a,headers:c}).then(d=>(FN(d),d))}}class sc extends Error{status;details;constructor(n,s,a){super(n),this.name="ApiRequestError",this.status=s,this.details=a}}function BN(e){const n=e.trim();return n.startsWith("<!DOCTYPE")||n.startsWith("<html")||n.startsWith("<HTML")}function Es(e){return`/api${e}`}async function I(e,n={}){const s=Es(e),a=$r(),r=(()=>{if(a){const f=new Headers(n.headers??{});return f.has("Content-Type")||f.set("Content-Type","application/json"),Ei(f)}if(!n.headers)return{"Content-Type":"application/json"};const m=new Headers(n.headers);return m.has("Content-Type")||m.set("Content-Type","application/json"),Object.fromEntries(m.entries())})(),o=await fetch(s,{...n,headers:r});if(o.status===204){if(!o.ok)throw new Error(`Request failed for ${s}: ${o.status} ${o.statusText}`);return}const l=o.headers.get("content-type")??"",c=await o.text(),d=l.includes("application/json");if(l.includes("text/html")||BN(c))throw new Error(`API returned HTML instead of JSON for ${s}. The endpoint may not be properly configured. (${o.status} ${o.statusText})`);if(!d){const m=c.length>160?`${c.slice(0,160)}...`:c;throw new Error(`API returned ${l||"an unknown content type"} instead of JSON for ${s}. (${o.status} ${o.statusText})${m?` Response: ${m}`:""}`)}let h;try{h=c?JSON.parse(c):null}catch{throw new Error(`API returned invalid JSON for ${s}. (${o.status} ${o.statusText})`)}if(!o.ok){const m=h;throw new sc(m?.error||`Request failed for ${s}: ${o.status} ${o.statusText}`,o.status,m?.details)}return h}function UN(){return I("/health")}function HN(){return I("/health/refresh",{method:"POST"})}function U3(){return I("/updates/check")}function qN(e,n,s,a,r){const o=new URLSearchParams;e!==void 0&&o.set("limit",String(e)),n!==void 0&&o.set("offset",String(n)),s&&o.set("projectId",s),a&&o.set("q",a),r&&o.set("includeArchived","1");const l=o.size>0?`?${o.toString()}`:"";return I(`/tasks${l}`)}async function Ga(e,n){const a=Es(V(`/tasks/${e}`,n));for(let r=1;r<=2;r++){const o=await fetch(a,{headers:Ei({"Content-Type":"application/json"})}),l=await o.json();if(o.ok)return l;if(r===2)throw new Error(l.error||"Request failed")}throw new Error("Request failed")}function qb(e,n,s){const{title:a,description:r,column:o,dependencies:l,breakIntoSubtasks:c,enabledWorkflowSteps:d,assignedAgentId:u,modelPresetId:h,modelProvider:m,modelId:f,validatorModelProvider:p,validatorModelId:g,planningModelProvider:w,planningModelId:v,thinkingLevel:b,summarize:y,reviewLevel:N,executionMode:S,priority:C,source:x,nodeId:k,branch:R,baseBranch:z,githubTracking:_}=e;return il(V("/tasks",n),{method:"POST",nodeId:s?.transportNodeId,localNodeId:s?.localNodeId,body:JSON.stringify({title:a,description:r,column:o,dependencies:l,breakIntoSubtasks:c,enabledWorkflowSteps:d,assignedAgentId:u,modelPresetId:h,modelProvider:m,modelId:f,validatorModelProvider:p,validatorModelId:g,planningModelProvider:w,planningModelId:v,thinkingLevel:b,summarize:y,reviewLevel:N,executionMode:S,priority:C,source:x,nodeId:k,branch:R,baseBranch:z,githubTracking:_})})}function Ts(e,n,s){return I(V(`/tasks/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}function VN(e,n,s,a,r,o,l,c,d){return I(V("/tasks/batch-update-models",d),{method:"POST",body:JSON.stringify({taskIds:e,modelProvider:n,modelId:s,validatorModelProvider:a,validatorModelId:r,planningModelProvider:o,planningModelId:l,nodeId:c})})}function WN(e,n,s,a){return I(V(`/tasks/${e}/move`,s),{method:"POST",body:JSON.stringify({column:n,...typeof a=="object"&&a?.preserveProgress?{preserveProgress:!0}:{}})})}function GN(e,n,s){const a=new URLSearchParams;s?.removeDependencyReferences&&a.set("removeDependencyReferences","true"),s?.githubIssueAction&&a.set("githubIssueAction",s.githubIssueAction);const r=a.size>0?`?${a.toString()}`:"";return I(V(`/tasks/${e}${r}`,n),{method:"DELETE"})}function KN(e,n){return I(V(`/tasks/${e}/merge`,n),{method:"POST"})}function JN(e,n){return I(V(`/tasks/${e}/retry`,n),{method:"POST"})}function YN(e,n){return I(V(`/tasks/${e}/reset`,n),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({confirm:!0})})}function QN(e,n){return I(V(`/tasks/${e}/duplicate`,n),{method:"POST"})}function Vb(e,n){return I(V(`/tasks/${e}/pause`,n),{method:"POST"})}function Wb(e,n){return I(V(`/tasks/${e}/unpause`,n),{method:"POST"})}function XN(e,n){return I(V(`/tasks/${e}/archive`,n),{method:"POST"})}function ZN(e,n){return I(V(`/tasks/${e}/unarchive`,n),{method:"POST"})}function eS(e){return I(V("/tasks/archive-all-done",e),{method:"POST"}).then(n=>n.archived)}function tS(e,n){return I(V(`/tasks/${e}/approve-plan`,n),{method:"POST"})}function nS(e,n){return I(V(`/tasks/${e}/reject-plan`,n),{method:"POST"})}function sS(e){return I(V("/config",e))}function Rc(e){return I(V("/settings",e))}function pl(e,n){return I(V("/settings",n),{method:"PUT",body:JSON.stringify(e)})}function iS(e){return I(V("/update-check",e))}function H3(e){return I(V("/remote/settings",e))}function q3(e,n){return I(V("/remote/settings",n),{method:"PUT",body:JSON.stringify(e)})}function V3(e){return I(V("/remote/status",e))}function W3(e){return I(V("/remote/install-cloudflared",e),{method:"POST"})}function G3(e){return I(V("/remote/tunnel/start",e),{method:"POST"})}function K3(e){return I(V("/remote/tunnel/stop",e),{method:"POST"})}function J3(e){return I(V("/remote/tunnel/kill-external",e),{method:"POST"})}function Y3(e){return I(V("/remote/token/persistent/regenerate",e),{method:"POST"})}function Q3(e,n){return I(V("/remote/token/short-lived/generate",n),{method:"POST",body:JSON.stringify({ttlMs:e})})}function Gb(e,n,s){const a=new URLSearchParams;e&&a.set("format",e),a.set("tokenType",n),n==="short-lived"&&typeof s=="number"&&Number.isFinite(s)&&a.set("ttlMs",String(s));const r=a.toString();return r?`?${r}`:""}function X3(e={}){const{projectId:n,tokenType:s="persistent",ttlMs:a}=e,r=Gb(null,s,a);return I(V(`/remote/url${r}`,n))}function Z3(e="text",n={}){const{projectId:s,tokenType:a="persistent",ttlMs:r}=n,o=Gb(e,a,r);return I(V(`/remote/qr${o}`,s))}function e5(e){return I(V("/memory",e))}function t5(e,n){return I(V("/memory",n),{method:"PUT",body:JSON.stringify({content:e})})}function n5(e){return I(V("/memory/files",e))}function s5(e,n){const s=`path=${encodeURIComponent(e)}`;return I(V(`/memory/file?${s}`,n))}function i5(e,n,s){return I(V("/memory/file",s),{method:"PUT",body:JSON.stringify({path:e,content:n})})}function a5(e,n){let s,a=n;if(n!==void 0)s=e;else if(typeof e=="string"&&e.trim().length>0){const r=e.trim();r.includes("/")||r.endsWith(".md")||r.startsWith(".")?s=r:a=r}return I(V("/memory/compact",a),{method:"POST",body:JSON.stringify(s?{path:s}:{})})}function r5(e){return I(V("/memory/dream",e),{method:"POST"})}function o5(e){return I(V("/memory/insights",e))}function l5(e,n){return I(V("/memory/insights",n),{method:"PUT",body:JSON.stringify({content:e})})}function c5(e){return I(V("/memory/extract",e),{method:"POST"})}function d5(e){return I(V("/memory/audit",e))}function u5(e){return I(V("/memory/stats",e))}function m5(e){return I(V("/memory/backend",e))}function h5(e){return I(V("/memory/install-qmd",e),{method:"POST"})}function p5(e,n){return I(V("/memory/test",n),{method:"POST",body:JSON.stringify({query:e})})}function ia(){return I("/settings/global")}function Kn(e){return I("/settings/global",{method:"PUT",body:JSON.stringify(e)})}function f5(e){return I(V("/settings/scopes",e))}function g5(e){return I(V("/settings/pi-extensions",e))}function b5(e,n){return I(V("/settings/pi-extensions",n),{method:"PUT",body:JSON.stringify({disabledIds:e})})}function x5(e,n,s){return I(V("/settings/test-notification",s),{method:"POST",body:JSON.stringify({providerId:e,...n??{}})})}function v5(){return I("/pi-settings")}async function y5(e){return I("/pi-settings",{method:"PUT",body:JSON.stringify(e)})}async function w5(e){return I("/pi-settings/packages",{method:"POST",body:JSON.stringify({source:e})})}async function k5(e){return I(V("/pi-settings/reinstall-fusion",e),{method:"POST"})}async function Ic(e,n,s){const a=new FormData;a.append("file",n);const r=await fetch(Es(V(`/tasks/${e}/attachments`,s)),{method:"POST",headers:Ei(),body:a}),o=await r.json();if(!r.ok)throw new Error(o.error||"Upload failed");return o}async function aS(e,n,s){return I(V(`/tasks/${e}/attachments/${n}`,s),{method:"DELETE"})}async function mh(e,n,s){const a=new URLSearchParams;s?.limit!==void 0&&a.set("limit",String(s.limit)),s?.offset!==void 0&&a.set("offset",String(s.offset));const r=a.toString()?`?${a.toString()}`:"",o=V(`/tasks/${e}/logs${r}`,n),l=await fetch(Es(o),{headers:Ei()});if(!l.ok){const h=await l.json().catch(()=>({error:"Failed to fetch agent logs"}));throw new Error(h.error||`HTTP ${l.status}`)}const c=await l.json(),d=l.headers.has("X-Total-Count")?parseInt(l.headers.get("X-Total-Count"),10):c.length,u=l.headers.has("X-Has-More")?l.headers.get("X-Has-More")==="true":!1;return{entries:c,total:d,hasMore:u}}function rS(e,n,s,a){return I(V(`/tasks/${e}/comments/${n}`,a),{method:"PATCH",body:JSON.stringify({text:s})})}function oS(e,n,s){return I(V(`/tasks/${e}/comments/${n}`,s),{method:"DELETE"})}function lS(e,n){return I(V(`/tasks/${e}/documents`,n))}function cS(e,n,s){return I(V(`/tasks/${e}/documents/${n}/revisions`,s))}async function j5(e,n){const s=new URLSearchParams;e?.q&&s.set("q",e.q),e?.limit!==void 0&&s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset));const a=s.toString(),r=`/documents${a?`?${a}`:""}`;return I(V(r,n))}function N5(e,n){const s=new URLSearchParams;n?.showHidden&&s.set("showHidden","1");const a=s.toString(),r=`/files/markdown-list${a?`?${a}`:""}`;return I(V(r,e))}function hh(e,n,s,a,r){return I(V(`/tasks/${e}/documents/${n}`,r),{method:"PUT",body:JSON.stringify({content:s,author:a?.author,metadata:a?.metadata})})}function dS(e,n,s){return I(V(`/tasks/${e}/documents/${n}`,s),{method:"DELETE"})}function uS(e,n,s){return I(V(`/tasks/${e}/steer`,s),{method:"POST",body:JSON.stringify({text:n})})}function mS(e,n,s){return I(V(`/tasks/${e}/spec/revise`,s),{method:"POST",body:JSON.stringify({feedback:n})})}function hS(e,n){return I(V(`/tasks/${e}/spec/rebuild`,n),{method:"POST"})}function pS(e,n,s){return I(V(`/tasks/${e}/refine`,s),{method:"POST",body:JSON.stringify({feedback:n})})}function Hs(){return I("/models")}function fS(){return I("/usage")}function gS(){return I("/providers/claude-cli/status")}function bS(){return I("/system/fn-binary/status")}function xS(){return I("/system/fn-binary/install",{method:"POST"})}function vS(){return I("/providers/droid-cli/status")}function yS(){return I("/providers/cursor-cli/status")}function wS(){return I("/providers/llama-cpp/status")}async function S5(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return I(`/providers/hermes/status${n}`)}async function C5(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return(await I(`/providers/hermes/profiles${n}`)).profiles??[]}async function E5(e){const n=e?.binaryPath?`?binaryPath=${encodeURIComponent(e.binaryPath)}`:"";return I(`/providers/openclaw/status${n}`)}async function _5(e){const n=new URLSearchParams({apiUrl:e.apiUrl});return e.apiKey&&n.set("apiKey",e.apiKey),I(`/providers/paperclip/status?${n.toString()}`)}async function M5(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 A5(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 R5(e){return I("/providers/paperclip/cli-mint-key",{method:"POST",body:JSON.stringify(e)})}async function I5(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 T5(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 P5(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 $5(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 kS(e){return I("/auth/claude-cli",{method:"POST",body:JSON.stringify({enabled:e})})}function jS(e){return I("/auth/droid-cli",{method:"POST",body:JSON.stringify({enabled:e})})}function NS(e){return I("/auth/cursor-cli",{method:"POST",body:JSON.stringify({enabled:e})})}function SS(e){return I("/auth/llama-cpp",{method:"POST",body:JSON.stringify({enabled:e})})}async function CS(){const n=(await I("/custom-providers")).map(s=>({id:s.id,name:s.name,baseUrl:s.baseUrl,api:s.apiType==="anthropic-compatible"?"anthropic-messages":s.apiType==="google-generative-ai"?"google-generative-ai":"openai-completions",apiKey:s.apiKey,models:(s.models??[]).map(a=>({id:a.id,name:a.name}))}));return Object.assign(n,{providers:n})}function ES(e){return I("/custom-providers",{method:"POST",body:JSON.stringify(e)})}function D5(e,n){const s=n,a={...typeof s.name=="string"?{name:s.name}:{},...typeof s.baseUrl=="string"?{baseUrl:s.baseUrl}:{},...typeof s.apiKey=="string"?{apiKey:s.apiKey}:{},...Array.isArray(s.models)?{models:s.models.map(r=>({id:r.id,name:r.name??r.id}))}:{},...s.api?{apiType:s.api==="anthropic-messages"?"anthropic-compatible":"openai-compatible"}:{},..."apiType"in n?{apiType:n.apiType}:{}};return I(`/custom-providers/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(a)})}function L5(e){return I(`/custom-providers/${encodeURIComponent(e)}`,{method:"DELETE"})}function _S(e){const n=e.api==="anthropic-messages"?"anthropic-compatible":e.api==="google-generative-ai"?"google-generative-ai":"openai-compatible";return ES({name:e.name?.trim()||e.id,apiType:n,baseUrl:e.baseUrl,apiKey:e.apiKey,models:e.models?.map(s=>({id:s.id,name:s.name??s.id}))})}async function MS(e){return I("/custom-providers/probe-models",{method:"POST",body:JSON.stringify({baseUrl:e.baseUrl,apiKey:e.apiKey,apiType:e.apiType})})}function qo(){return I("/auth/status")}function AS(e){return I("/auth/login",{method:"POST",body:JSON.stringify({provider:e,origin:window.location.origin})})}function RS(e,n){return I("/auth/manual-code",{method:"POST",body:JSON.stringify({provider:e,code:n})})}function IS(e){return I("/auth/logout",{method:"POST",body:JSON.stringify({provider:e})})}function TS(e){return I("/auth/cancel",{method:"POST",body:JSON.stringify({provider:e})})}function PS(e,n){return I("/auth/api-key",{method:"POST",body:JSON.stringify({provider:e,apiKey:n})})}function $S(e){return I("/auth/api-key",{method:"DELETE",body:JSON.stringify({provider:e})})}function DS(e,n,s,a){return I("/github/issues/fetch",{method:"POST",body:JSON.stringify({owner:e,repo:n,limit:s,labels:a})})}function LS(e,n,s,a){return I(V("/github/issues/import",a),{method:"POST",body:JSON.stringify({owner:e,repo:n,issueNumber:s})})}function OS(e,n,s){return I("/github/pulls/fetch",{method:"POST",body:JSON.stringify({owner:e,repo:n,limit:s})})}function FS(e,n,s,a){return I(V("/github/pulls/import",a),{method:"POST",body:JSON.stringify({owner:e,repo:n,prNumber:s})})}function zS(e){return I(V("/git/remotes",e))}function BS(e){return I(V("/git/remotes/detailed",e))}function US(e,n,s){return I(V("/git/remotes",s),{method:"POST",body:JSON.stringify({name:e,url:n})})}function HS(e,n){return I(V(`/git/remotes/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function qS(e,n,s){return I(V(`/git/remotes/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify({newName:n})})}function VS(e,n,s){return I(V(`/git/remotes/${encodeURIComponent(e)}/url`,s),{method:"PUT",body:JSON.stringify({url:n})})}function WS(e,n,s){return I(V(`/tasks/${e}/pr/create`,s),{method:"POST",body:JSON.stringify(n)})}function GS(e,n){return I(V(`/tasks/${e}/pr/refresh`,n),{method:"POST"})}function fl(e,n,s,a){return I(V("/terminal/sessions",a),{method:"POST",body:JSON.stringify({cwd:e,cols:n,rows:s})})}function ph(e,n){return I(V(`/terminal/sessions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function KS(e){return I(V("/terminal/sessions",e))}function ki(e){return I(V("/git/status",e))}function JS(e,n){const s=e?`?limit=${e}`:"";return I(V(`/git/commits${s}`,n))}function ic(e,n){return I(V(`/git/commits/${e}/diff`,n))}function YS(e){return I(V("/git/commits/ahead",e))}function QS(e,n,s,a){const r=new URLSearchParams;r.set("limit",String(s));const o=r.size>0?`?${r.toString()}`:"";return I(V(`/git/remotes/${encodeURIComponent(e)}/commits${o}`,a))}function ro(e){return I(V("/git/branches",e))}function XS(e,n,s){const a=`?limit=${n}`;return I(V(`/git/branches/${encodeURIComponent(e)}/commits${a}`,s))}function ZS(e){return I(V("/git/worktrees",e))}function e0(e,n,s){return I(V("/git/branches",s),{method:"POST",body:JSON.stringify({name:e,base:n})})}function t0(e,n){return I(V(`/git/branches/${encodeURIComponent(e)}/checkout`,n),{method:"POST"})}function fh(e,n,s){const a=n?"?force=true":"";return I(V(`/git/branches/${encodeURIComponent(e)}${a}`,s),{method:"DELETE"})}function n0(e,n){return I(V("/git/fetch",n),{method:"POST",body:JSON.stringify({remote:e})})}function s0(e,n){const s=typeof e=="string"?void 0:e;return I(V("/git/pull",typeof e=="string"?e:n),{method:"POST",body:JSON.stringify({rebase:s?.rebase??!1})})}function i0(e){return I(V("/git/push",e),{method:"POST"})}function gl(e){return I(V("/git/stashes",e))}function a0(e,n){return I(V("/git/stashes",n),{method:"POST",body:JSON.stringify({message:e})})}function r0(e,n,s){return I(V(`/git/stashes/${e}/apply`,s),{method:"POST",body:JSON.stringify({drop:n})})}function o0(e,n){return I(V(`/git/stashes/${e}`,n),{method:"DELETE"})}function l0(e,n){return I(V(`/git/stashes/${e}/diff`,n))}function c0(e,n,s){const a=new URLSearchParams;return a.set("path",e),a.set("staged",String(n)),I(V(`/git/diff/file?${a.toString()}`,s))}function gr(e){return I(V("/git/changes",e))}function gh(e,n){return I(V("/git/stage",n),{method:"POST",body:JSON.stringify({files:e})})}function d0(e,n){return I(V("/git/unstage",n),{method:"POST",body:JSON.stringify({files:e})})}function bh(e,n){return I(V("/git/commit",n),{method:"POST",body:JSON.stringify({message:e})})}function u0(e,n){return I(V("/git/discard",n),{method:"POST",body:JSON.stringify({files:e})})}function m0(e){return I(V("/workspaces",e))}function h0(e,n,s){const a=new URLSearchParams({workspace:e});return n&&a.set("path",n),s&&a.set("projectId",s),I(`/files?${a.toString()}`)}function p0(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),I(`/files/${encodeURIComponent(n)}?${a.toString()}`)}function f0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}?${r.toString()}`,{method:"POST",body:JSON.stringify({content:s})})}function g0(e,n,s){const a=new URLSearchParams({q:e});return n&&a.set("workspace",n),s&&a.set("projectId",s),I(`/files/search?${a.toString()}`)}function b0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}/copy?${r.toString()}`,{method:"POST",body:JSON.stringify({destination:s})})}function x0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}/move?${r.toString()}`,{method:"POST",body:JSON.stringify({destination:s})})}function v0(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),I(`/files/${encodeURIComponent(n)}/delete?${a.toString()}`,{method:"POST"})}function y0(e,n,s,a){const r=new URLSearchParams({workspace:e});return a&&r.set("projectId",a),I(`/files/${encodeURIComponent(n)}/rename?${r.toString()}`,{method:"POST",body:JSON.stringify({newName:s})})}function Kb(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),`/api/files/${encodeURIComponent(n)}/download?${a.toString()}`}function w0(e,n,s){const a=new URLSearchParams({workspace:e});return s&&a.set("projectId",s),`/api/files/${encodeURIComponent(n)}/download-zip?${a.toString()}`}function k0(e,n,s){return I(V("/planning/create-draft",n),{method:"POST",body:JSON.stringify({initialPlan:e,planningModelProvider:s?.planningModelProvider,planningModelId:s?.planningModelId})})}function j0(e,n,s,a,r){return I(V("/planning/start-streaming",n),{method:"POST",body:JSON.stringify({initialPlan:e,planningModelProvider:s?.planningModelProvider,planningModelId:s?.planningModelId,planningDepth:a?.planningDepth,customQuestionCount:a?.customQuestionCount,...r?{existingSessionId:r}:{}})})}function xh(e,n,s,a){return I(V("/planning/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function N0(e,n,s){return I(V(`/planning/${encodeURIComponent(e)}/back`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function S0(e,n,s){return I(V(`/planning/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function C0(e,n,s){return I(V(`/planning/${encodeURIComponent(e)}/stop`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function Jb(e,n,s){return I(V("/planning/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}function O5(e,n,s,a){return I(V("/agents/onboarding/start-streaming",s),{method:"POST",body:JSON.stringify({intent:e,context:n,mode:n.mode,existingAgentConfig:n.existingAgentConfig,planningModelProvider:a?.planningModelProvider,planningModelId:a?.planningModelId})})}function F5(e,n,s){return I(V("/agents/onboarding/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n})})}function z5(e,n){return I(V("/agents/onboarding/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e})})}function E0(e,n,s){return I(V("/planning/create-task",s),{method:"POST",body:JSON.stringify(n?{sessionId:e,summary:n}:{sessionId:e})})}function _0(e,n,s){return I(V("/planning/start-breakdown",s),{method:"POST",body:JSON.stringify(n?{sessionId:e,summary:n}:{sessionId:e})})}function M0(e,n,s){return I(V("/planning/create-tasks",s),{method:"POST",body:JSON.stringify({planningSessionId:e,subtasks:n})})}const Nu=new Set;if(typeof window<"u"){const e=()=>{for(const n of Array.from(Nu))try{n.close()}catch{}};window.addEventListener("pagehide",e),window.addEventListener("beforeunload",e)}function A0(e,n){if(n===null||n<=0)return e;const s=e.includes("?")?"&":"?";return`${e}${s}lastEventId=${encodeURIComponent(String(n))}`}function Jr(e,n,s={}){const a=s.maxReconnectAttempts??10;let r=null,o=!1,l=0,c=null,d=null,u=!1;const h=p=>{const g=p.lastEventId;if(!g)return!0;const w=Number.parseInt(g,10);return Number.isFinite(w)?d!==null&&w<=d?!1:(d=w,!0):!0},m=()=>{if(o)return;const p=A0(e,d),g=new EventSource(Ci(p));r=g,g.onopen=()=>{l=0,u=!1,s.onConnectionStateChange?.("connected"),n.onOpen?.()},g.onmessage=w=>{const v=w;h(v)&&n.onMessage?.(v)};for(const[w,v]of Object.entries(n.events??{}))g.addEventListener(w,b=>{const y=b;h(y)&&v(y)});g.onerror=()=>{if(o||r!==g)return;if(g.readyState===EventSource.CONNECTING){u||(u=!0,s.onConnectionStateChange?.("reconnecting"));return}if(g.close(),l>=a){s.onFatalError?.("Connection lost");return}u=!0,s.onConnectionStateChange?.("reconnecting"),l+=1;const v=Math.min(1e3*2**(l-1),3e4);c=setTimeout(()=>{c=null,m()},v)}};m();const f={close:()=>{o=!0,c&&(clearTimeout(c),c=null),r?.close(),Nu.delete(f)},isConnected:()=>!o&&r?.readyState===EventSource.OPEN};return Nu.add(f),f}function vh(e){const n=typeof e.source=="string"&&e.source.trim().length>0?e.source.trim():"root",s=n==="root"?".":n,a=e.name,r=typeof e.packagePath=="string"&&e.packagePath.trim().length>0?e.packagePath.trim():s,o=typeof e.confidence=="number"?e.confidence:1,l=n==="root"?"root":n,c=typeof e.packageName=="string"&&e.packageName.trim().length>0?e.packageName.trim():"project";return{name:e.name,command:e.command,scriptName:a,packagePath:r,confidence:o,cwd:s,source:n,workspaceName:typeof e.packageName=="string"?e.packageName:void 0,label:`${c} · ${a} (${l})`}}function Dr(e){const n=e.status,s=n==="starting"||n==="running"||n==="failed"||n==="stopped"?n:"stopped",a=typeof e.previewUrl=="string"?e.previewUrl:e.detectedUrl,r=typeof e.manualPreviewUrl=="string"?e.manualPreviewUrl:e.manualUrl;return{id:typeof e.id=="string"?e.id:"",name:typeof e.name=="string"&&e.name.length>0?e.name:"default",status:s,command:typeof e.command=="string"?e.command:"",scriptName:typeof e.scriptId=="string"?e.scriptId:"",cwd:typeof e.cwd=="string"?e.cwd:"",pid:e.pid,startedAt:e.startedAt,previewUrl:a,detectedUrl:typeof e.detectedUrl=="string"?e.detectedUrl:a,detectedPort:e.detectedPort,manualPreviewUrl:r,manualUrl:typeof e.manualUrl=="string"?e.manualUrl:r,logs:Array.isArray(e.logHistory)?e.logHistory:[],exitCode:e.exitCode}}function R0(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 I0(e){const s=(Array.isArray(e.lines)?e.lines:[]).map((a,r)=>R0(a,r+1));return{lines:s,totalLines:typeof e.totalLines=="number"&&Number.isFinite(e.totalLines)?e.totalLines:s.length}}function T0(e,n){const s=typeof n.maxLines=="number"&&Number.isFinite(n.maxLines)?Math.max(1,Math.floor(n.maxLines)):100,a=typeof n.offset=="number"&&Number.isFinite(n.offset)?Math.max(0,Math.floor(n.offset)):0,r=typeof n.lastEventId=="number"&&Number.isFinite(n.lastEventId)?Math.max(0,Math.floor(n.lastEventId)):null,o=e.length,l=e.map((u,h)=>({id:h+1,text:u,stream:"stdout",timestamp:""}));if(r!==null)return{lines:l.filter(u=>u.id>r).slice(0,s),totalLines:o};const c=Math.max(o-a,0),d=Math.max(c-s,0);return{lines:l.slice(d,c),totalLines:o}}function yh(e){return Array.isArray(e)?e.map(vh):(e.candidates??[]).map(vh)}async function P0(e){try{const n=await I(V("/dev-server/candidates",e));return yh(n)}catch(n){if(n instanceof Error&&/\/dev-server\/candidates/.test(n.message)){const s=await I(V("/dev-server/detect",e));return yh(s)}throw n}}function om(e){return I(V("/dev-server/status",e)).then(Dr)}async function B5(e={},n){const s=new URLSearchParams;typeof e.maxLines=="number"&&Number.isFinite(e.maxLines)&&s.set("maxLines",String(Math.max(1,Math.floor(e.maxLines)))),typeof e.offset=="number"&&Number.isFinite(e.offset)&&s.set("offset",String(Math.max(0,Math.floor(e.offset)))),typeof e.lastEventId=="number"&&Number.isFinite(e.lastEventId)&&s.set("lastEventId",String(Math.max(0,Math.floor(e.lastEventId))));const a=s.size>0?`?${s.toString()}`:"";try{const r=await I(V(`/dev-server/logs/history${a}`,n));return I0(r)}catch(r){if(r instanceof Error&&/\/dev-server\/logs\/history/.test(r.message)){const o=await om(n);return T0(o.logs,e)}throw r}}function $0(e,n){const s=e.cwd??e.packagePath??".",a=e.scriptName;return I(V("/dev-server/start",n),{method:"POST",body:JSON.stringify({command:e.command,scriptName:a,scriptId:a,cwd:s,packagePath:e.packagePath})}).then(Dr)}function D0(e){return I(V("/dev-server/stop",e),{method:"POST"}).then(Dr)}function L0(e){return I(V("/dev-server/restart",e),{method:"POST"}).then(Dr)}async function O0(e,n){const s=typeof e=="string"?{url:e}:e;try{const a=await I(V("/dev-server/preview-url",n),{method:"POST",body:JSON.stringify(s)});return Dr(a)}catch(a){if(a instanceof Error&&/\/dev-server\/preview-url/.test(a.message)){const r=await I(V("/dev-server/preview-url",n),{method:"PUT",body:JSON.stringify(s)});return Dr(r)}throw a}}function U5(e){return Es(V("/dev-server/logs/stream",e))}async function H5(e){try{return(await I(V("/devserver",e))).sessions??[]}catch{try{const n=await om(e);return[{config:{id:n.id??"default",name:n.name??"Dev Server",command:n.command??"",cwd:n.cwd??"."},status:n.status,runtime:n.pid?{pid:n.pid,startedAt:n.startedAt??new Date().toISOString(),exitCode:n.exitCode??void 0,previewUrl:n.previewUrl}:void 0,previewUrl:n.previewUrl??n.detectedUrl??void 0,logHistory:(n.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}]}catch{return[]}}}async function q5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}`,n))}catch{try{const s=await om(n);return!e||e==="default"||e===s.id?{config:{id:s.id??"default",name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}:null}catch{return null}}}async function V5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}/start`,n),{method:"POST"})}catch{const s=await $0({command:""},n);return{config:{id:s.id??e,name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}}}async function W5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}/stop`,n),{method:"POST"})}catch{const s=await D0(n);return{config:{id:s.id??e,name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}}}async function G5(e,n){try{return await I(V(`/devserver/${encodeURIComponent(e)}/restart`,n),{method:"POST"})}catch{const s=await L0(n);return{config:{id:s.id??e,name:s.name??"Dev Server",command:s.command??"",cwd:s.cwd??"."},status:s.status,runtime:s.pid?{pid:s.pid,startedAt:s.startedAt??new Date().toISOString(),exitCode:s.exitCode??void 0,previewUrl:s.previewUrl}:void 0,previewUrl:s.previewUrl??s.detectedUrl??void 0,logHistory:(s.logs??[]).map(a=>({timestamp:new Date().toISOString(),stream:a.startsWith("[stderr]")?"stderr":"stdout",text:a.replace(/^\[stderr\]\s*/,"")}))}}}async function K5(e,n,s){try{const a=await I(V(`/devserver/${encodeURIComponent(e)}/preview`,s),{method:"POST",body:JSON.stringify({url:n})});return{url:a.url??null,source:a.source??null}}catch{const a=await O0({url:n},s);return{url:a.previewUrl??a.manualUrl??null,source:"manual"}}}async function J5(e){try{return(await I(V("/devserver/detect",e))).candidates??[]}catch{try{return(await P0(e)).map(s=>({name:s.name,command:s.command,cwd:s.cwd,scriptName:s.scriptName,packagePath:s.packagePath}))}catch{return[]}}}function Y5(e,n){return Es(V(`/devserver/${encodeURIComponent(e)}/logs/stream`,n))}function tl(e,n,s=25e3){const a=setInterval(()=>{TC(e,n).catch(()=>{})},s);return{stop:()=>{clearInterval(a)}}}function F0(e,n){return Es(V(`/planning/${encodeURIComponent(e)}/stream`,n))}function z0(e,n){return Es(V(`/agents/onboarding/${encodeURIComponent(e)}/stream`,n))}function Q5(e,n,s,a){const r=z0(e,n),o=Jr(r,{events:{thinking:l=>{try{s.onThinking?.(JSON.parse(l.data))}catch{s.onThinking?.(l.data)}},question:l=>{try{s.onQuestion?.(JSON.parse(l.data))}catch{}},summary:l=>{try{s.onSummary?.(JSON.parse(l.data))}catch{}},error:l=>{try{const c=JSON.parse(l.data);s.onError?.(c.message||c)}catch{s.onError?.(l.data||"Stream error")}},complete:()=>{s.onComplete?.()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:l=>s.onError?.(l)});return{close:o.close,isConnected:o.isConnected}}function B0(e,n,s,a){const r=F0(e,n);let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[planning] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[planning] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function nl(e,n){const s=new URLSearchParams;n?.scope&&s.set("scope",n.scope),n?.projectId&&s.set("projectId",n.projectId);const a=s.toString();return a?`${e}?${a}`:e}function U0(e){return I(nl("/routines",e))}function H0(e,n){return I(nl("/routines",n),{method:"POST",body:JSON.stringify(e)})}function wh(e,n,s){return I(nl(`/routines/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}async function q0(e,n){await I(nl(`/routines/${e}`,n),{method:"DELETE"})}function V0(e,n){return I(nl(`/routines/${e}/trigger`,n),{method:"POST"})}function kh(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 W0(e){const n=V("/activity",e);return I(n,{method:"DELETE"})}function sl(e){return I(V("/workflow-steps",e))}function jh(e,n){return I(V("/workflow-steps",n),{method:"POST",body:JSON.stringify(e)})}function G0(e,n,s){return I(V(`/workflow-steps/${e}`,s),{method:"PATCH",body:JSON.stringify(n)})}function K0(e,n){return I(V(`/workflow-steps/${e}`,n),{method:"DELETE"})}function Nh(e,n){return I(V(`/workflow-steps/${e}/refine`,n),{method:"POST"})}function J0(e,n){return I(V(`/tasks/${encodeURIComponent(e)}/workflow-results`,n))}function Y0(){return I("/workflow-step-templates")}function Q0(){return I("/plugin-workflow-step-templates")}function X0(e,n){return I(V(`/workflow-step-templates/${encodeURIComponent(e)}/create`,n),{method:"POST"})}function Vo(e){return I(V("/scripts",e))}function Z0(e,n,s){return I(V("/scripts",s),{method:"POST",body:JSON.stringify({name:e,command:n})})}function e1(e,n){return I(V(`/scripts/${encodeURIComponent(e)}`,n),{method:"DELETE"})}async function Yb(e,n,s){return(await I(V("/ai/refine-text",s),{method:"POST",body:JSON.stringify({text:e,type:n})})).refined}const bl={RATE_LIMIT:"Too many refinement requests. Please wait an hour.",INVALID_TYPE:"Invalid refinement option selected.",NETWORK:"Failed to refine text. Please try again."};function Qb(e){if(!(e instanceof Error))return bl.NETWORK;const n=e.message.toLowerCase();return n.includes("rate limit")||n.includes("429")?bl.RATE_LIMIT:n.includes("invalid")&&n.includes("type")?bl.INVALID_TYPE:n.startsWith("text must")||n.includes("text is required")||n.includes("type is required")?e.message:bl.NETWORK}function t1(e,n){return I(V("/subtasks/start-streaming",n),{method:"POST",body:JSON.stringify({description:e})})}function n1(e,n,s){return I(V(`/subtasks/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function s1(e,n){return Es(V(`/subtasks/${encodeURIComponent(e)}/stream`,n))}function i1(e,n,s,a){let r=null,o=null;const l=()=>{r?.stop(),r=null},c=Jr(s1(e,n),{onOpen:()=>{l(),r=tl(e,n)},events:{thinking:d=>{try{s.onThinking?.(JSON.parse(d.data))}catch{s.onThinking?.(d.data)}},subtasks:d=>{try{s.onSubtasks?.(JSON.parse(d.data))}catch(u){console.error("[subtasks] Failed to parse subtasks event:",u)}},error:d=>{try{const u=JSON.parse(d.data),h=typeof u=="string"&&u.length>0?u:null;s.onError?.(h||"Stream error")}catch{s.onError?.("Stream error")}o?.close()},complete:()=>{s.onComplete?.(),o?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:d=>{l(),s.onError?.(d)}});return o={close:()=>{l(),c.close()},isConnected:c.isConnected},o}function a1(e,n,s,a,r){return I(V("/subtasks/create-tasks",a),{method:"POST",body:JSON.stringify({sessionId:e,parentTaskId:s,...r?.branch!==void 0?{branch:r.branch}:{},...r?.baseBranch!==void 0?{baseBranch:r.baseBranch}:{},...r?.branchSelection?{branchSelection:r.branchSelection}:{},...r?.branchAssignment?{branchAssignment:r.branchAssignment}:{},subtasks:n.map(o=>({tempId:o.id,title:o.title,description:o.description,size:o.suggestedSize,dependsOn:o.dependsOn}))})})}function Xb(e,n,s){return I(V("/subtasks/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}function V(e,n){if(!n)return e;const s=e.includes("?")?"&":"?";return`${e}${s}projectId=${encodeURIComponent(n)}`}function r1(e,n,s){if(!n||n===s)return e;const a="/api",r=e.startsWith(a)?e.slice(a.length):e;return`/proxy/${encodeURIComponent(n)}${r}`}function il(e,n){const{nodeId:s,localNodeId:a,...r}=n??{},o=r1(e,s,a);return I(o,r)}function Yr(e,n){const s=new URLSearchParams;e?.state&&s.set("state",e.state),e?.role&&s.set("role",e.role),e?.includeEphemeral===!0&&s.set("includeEphemeral","true"),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/agents${a}`)}function Su(e,n){return I(V(`/agents/${encodeURIComponent(e)}`,n))}function o1(e,n){return I(V("/agents",n),{method:"POST",body:JSON.stringify(e)})}function l1(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}async function X5(e,n,s){const a=new FormData;a.append("file",n);const r=await fetch(Es(V(`/agents/${encodeURIComponent(e)}/avatar`,s)),{method:"POST",headers:Ei(),body:a}),o=await r.json();if(!r.ok)throw new Error(o.error||"Avatar upload failed");return o}function Z5(e,n){return I(V(`/agents/${encodeURIComponent(e)}/avatar`,n),{method:"DELETE"})}function e8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/upgrade-heartbeat-procedure`,n),{method:"POST"})}function t8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/instructions`,s),{method:"PATCH",body:JSON.stringify(n)})}function n8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/soul`,s),{method:"PATCH",body:JSON.stringify({soul:n})})}function s8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/memory`,s),{method:"PATCH",body:JSON.stringify({memory:n})})}function i8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/memory/files`,n))}function a8(e,n,s){const a=`path=${encodeURIComponent(n)}`;return I(V(`/agents/${encodeURIComponent(e)}/memory/file?${a}`,s))}function r8(e,n,s,a){return I(V(`/agents/${encodeURIComponent(e)}/memory/file`,a),{method:"PUT",body:JSON.stringify({path:n,content:s})})}function c1(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/state`,s),{method:"POST",body:JSON.stringify({state:n})})}function d1(e,n){return I(V(`/agents/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function o8(e,n,s){const a=new URLSearchParams;n!==void 0&&a.set("limit",String(n)),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/runs${r}`)}function l8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/runs/${encodeURIComponent(n)}`,s))}function c8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/runs/${encodeURIComponent(n)}/logs`,s))}function d8(e,n,s){const a=new URLSearchParams;a.set("limit",String(n)),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/prompt-sizes${r}`)}function u8(e,n,s){const a=s?.source??"manual",r=s?.triggerDetail??"Agent activated via dashboard";return I(V(`/agents/${encodeURIComponent(e)}/runs`,n),{method:"POST",body:JSON.stringify({source:a,triggerDetail:r})})}function m8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/runs/stop`,n),{method:"POST"})}function u1(e){return I(V("/agents/stats",e))}function h8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/chain-of-command`,n))}function p8(e,n){const s=new URLSearchParams;e&&s.set("projectId",e),n?.includeEphemeral&&s.set("includeEphemeral","true");const a=s.toString();return I(`/agents/org-tree${a?`?${a}`:""}`)}function f8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/children`,n)).catch(s=>{if(s.message.includes("not found"))return[];throw s})}function Sh(e,n,s){return I(V(`/tasks/${encodeURIComponent(e)}/assign`,s),{method:"PATCH",body:JSON.stringify({agentId:n})})}function Zb(e){return{reviewState:{source:e.mode,summary:e.summary??void 0,items:e.items.map(n=>({id:n.itemId,body:n.body,author:{login:n.author},createdAt:n.createdAt??new Date(0).toISOString(),updatedAt:n.updatedAt??void 0,path:n.filePath,threadId:n.threadId,htmlUrl:n.url,state:n.reviewState??void 0,isResolved:n.isResolved})),addressing:[],lastRefreshedAt:e.fetchedAt??void 0,refreshStatus:"ready",refreshSource:"initial-load"},automationStatus:null}}async function m1(e,n){const s=await I(V(`/tasks/${encodeURIComponent(e)}/review`,n));return Zb(s)}async function h1(e,n){const s=await I(V(`/tasks/${encodeURIComponent(e)}/review/refresh`,n),{method:"POST"});return Zb(s)}function p1(e,n,s){return I(V(`/tasks/${encodeURIComponent(e)}/review/address`,s),{method:"POST",body:JSON.stringify({selectedItems:n,tab:"review"})})}function g8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/tasks`,n))}function b8(){return I("/agents/companies")}function x8(e,n){return I(V("/agents/generate/start",n),{method:"POST",body:JSON.stringify({role:e})})}function v8(e,n){return I(V("/agents/generate/spec",n),{method:"POST",body:JSON.stringify({sessionId:e})})}function y8(e,n){return I(V(`/agents/generate/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function w8(e){return I(V("/backups",e))}function k8(e){return I(V("/backups",e),{method:"POST"})}function j8(e,n){const s=V("/settings/export",n),a=`${s}${s.includes("?")?"&":"?"}scope=${encodeURIComponent(e)}`;return I(a)}function N8(e,n,s){return I(V("/settings/import",s),{method:"POST",body:JSON.stringify({data:e,scope:n?.scope??"both",merge:n?.merge??!0})})}function f1(e){return Array.isArray(e.nodeMappings)||Array.isArray(e.projectNodeMappings)||Array.isArray(e.pathMappings)}function Ch(){return I("/projects/across-nodes")}function ac(){return I("/nodes")}function S8(){return I("/docker/nodes")}function C8(e){return I(`/docker/nodes/${encodeURIComponent(e)}/container-status`)}function E8(e,n){const s=new URLSearchParams;typeof n?.tail=="number"&&s.set("tail",String(n.tail));const a=s.size>0?`?${s.toString()}`:"";return I(`/docker/nodes/${encodeURIComponent(e)}/logs${a}`)}function _8(e){return I("/docker-nodes",{method:"POST",body:JSON.stringify(e)})}function g1(e){return I("/nodes",{method:"POST",body:JSON.stringify(e)})}function b1(e){return I("/nodes/discover-projects",{method:"POST",body:JSON.stringify(e)})}function x1(e,n){return I(`/nodes/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})}function v1(e){return I(`/nodes/${encodeURIComponent(e)}/docker-config`)}function y1(e,n){return I(`/nodes/${encodeURIComponent(e)}/docker-config`,{method:"PATCH",body:JSON.stringify(n)})}function w1(e){return I(`/nodes/${encodeURIComponent(e)}/docker-config/diff`)}function Eh(e){return I(`/nodes/${encodeURIComponent(e)}`,{method:"DELETE"})}async function k1(e){const n=await I(`/nodes/${encodeURIComponent(e)}/health-check`,{method:"POST"});return{nodeId:n.nodeId??e,status:n.status,responseTimeMs:n.responseTimeMs,error:n.error,checkedAt:n.checkedAt??new Date().toISOString()}}async function M8(){return I("/mesh/state")}function A8(e,n,s,a){const r=s&&s!==a?s:void 0,o=new URLSearchParams;e&&o.set("path",e),n&&o.set("showHidden","true"),r&&o.set("nodeId",r);const l=$r();l&&o.set("fn_token",l);const c=o.toString(),d=`/browse-directory${c?`?${c}`:""}`;return I(d)}function j1(e){return I("/projects",{method:"POST",body:JSON.stringify(e)})}function ex(e){return I(`/projects/${encodeURIComponent(e)}`,{method:"DELETE"})}function N1(e,n,s){return I(`/projects/${encodeURIComponent(e)}/path-mappings/${encodeURIComponent(n)}`,{method:"PUT",body:JSON.stringify({path:s})})}function _h(e){return I(`/projects/${encodeURIComponent(e)}/health`)}function S1(e){return I(V("/executor/stats",e))}function C1(e){return I(V("/system-stats",e))}function E1(e){return I(V("/kill-vitest",e),{method:"POST"})}function Mh(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 _1(e){return I(`/projects/${encodeURIComponent(e)}/pause`,{method:"POST"})}function M1(e){return I(`/projects/${encodeURIComponent(e)}/resume`,{method:"POST"})}function R8(){return I("/global-concurrency")}function I8(e){return I("/global-concurrency",{method:"PUT",body:JSON.stringify(e)})}function A1(e,n){return I(`/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify(n)})}function tx(e,n,s){const a=new URLSearchParams;n&&a.set("worktree",n),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/tasks/${encodeURIComponent(e)}/diff${r}`)}function R1(e,n){return I(V(`/tasks/${encodeURIComponent(e)}/commit-associations`,n))}function I1(e){return I(V("/missions",e))}function T1(e,n){return I(V("/missions",n),{method:"POST",body:JSON.stringify(e)})}function nx(e,n){return I(V(`/missions/${encodeURIComponent(e)}`,n))}function P1(e,n,s){return I(V(`/missions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function $1(e,n){return I(V(`/missions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function D1(e,n,s){const a=new URLSearchParams;a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset));const r=a.size>0?`?${a.toString()}`:"";return I(V(`/missions/${encodeURIComponent(e)}/events${r}`,s))}function L1(e){return I(V("/missions/health",e))}function O1(e,n,s){return I(V(`/missions/${encodeURIComponent(e)}/milestones`,s),{method:"POST",body:JSON.stringify(n)})}function F1(e,n,s){return I(V(`/missions/milestones/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function z1(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function B1(e,n,s){return I(V(`/missions/milestones/${encodeURIComponent(e)}/slices`,s),{method:"POST",body:JSON.stringify(n)})}function U1(e,n,s){return I(V(`/missions/slices/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function H1(e,n){return I(V(`/missions/slices/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function q1(e,n){return I(V(`/missions/slices/${encodeURIComponent(e)}/activate`,n),{method:"POST"})}function V1(e,n,s){return I(V(`/missions/slices/${encodeURIComponent(e)}/features`,s),{method:"POST",body:JSON.stringify(n)})}function W1(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function G1(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function K1(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}/link-task`,s),{method:"POST",body:JSON.stringify({taskId:n})})}function J1(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}/unlink-task`,n),{method:"POST"})}function Y1(e,n,s,a,r){return I(V(`/missions/features/${encodeURIComponent(e)}/triage`,a),{method:"POST",body:JSON.stringify({taskTitle:n,taskDescription:s,...r})})}function Q1(e,n,s){return I(V(`/missions/slices/${encodeURIComponent(e)}/triage-all`,n),{method:"POST",body:JSON.stringify({})})}function ed(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}/assertions`,n))}function X1(e,n,s){return I(V(`/missions/milestones/${encodeURIComponent(e)}/assertions`,s),{method:"POST",body:JSON.stringify(n)})}function Z1(e,n,s){return I(V(`/missions/assertions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function eC(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}/assertions/${encodeURIComponent(n)}/link`,s),{method:"POST"})}function tC(e,n,s){return I(V(`/missions/features/${encodeURIComponent(e)}/assertions/${encodeURIComponent(n)}/unlink`,s),{method:"POST"})}function nC(e,n){return I(V(`/missions/assertions/${encodeURIComponent(e)}/features`,n))}function td(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}/validation`,n))}function Ah(e,n){return I(V(`/missions/milestones/${encodeURIComponent(e)}/validation-telemetry`,n))}function sC(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}/validate`,n),{method:"POST"})}function Rh(e,n){return I(V(`/missions/features/${encodeURIComponent(e)}/validation-loop`,n))}function iC(e,n,s){const a=new URLSearchParams;a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset));const r=a.size>0?`?${a.toString()}`:"";return I(V(`/missions/features/${encodeURIComponent(e)}/validation-runs${r}`,s)).then(o=>o.runs)}function aC(e,n){return I(V(`/missions/validation-runs/${encodeURIComponent(e)}`,n))}function rC(e,n){return I(V(`/missions/${encodeURIComponent(e)}/resume`,n),{method:"POST"})}function oC(e,n){return I(V(`/missions/${encodeURIComponent(e)}/stop`,n),{method:"POST"})}function lC(e,n){return I(V(`/missions/${encodeURIComponent(e)}/start`,n),{method:"POST"})}function cC(e,n,s){return I(V(`/missions/${encodeURIComponent(e)}/autopilot`,s),{method:"PATCH",body:JSON.stringify(n)})}function dC(e,n,s){return I(V("/missions/interview/start",n),{method:"POST",body:JSON.stringify({missionTitle:e,modelProvider:s?.modelProvider,modelId:s?.modelId})})}function uC(e,n,s,a){return I(V("/missions/interview/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function mC(e,n,s){return I(V(`/missions/interview/${encodeURIComponent(e)}/retry`,n),{method:"POST",...s?{body:JSON.stringify({tabId:s})}:{}})}function sx(e,n,s){return I(V("/missions/interview/cancel",n),{method:"POST",body:JSON.stringify({sessionId:e,tabId:s})})}async function hC(e){const n=e?`?${new URLSearchParams({projectId:e}).toString()}`:"";return(await I(`/missions/interview/drafts${n}`)).drafts??[]}function pC(e,n,s){return I(V(`/missions/interview/drafts/${encodeURIComponent(e)}/discard`,n),{method:"POST",body:JSON.stringify({tabId:s})})}function fC(e,n,s,a){return I(V("/missions/interview/create-mission",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function gC(e,n,s,a){const r=Es(V(`/missions/interview/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[mission-interview] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[mission-interview] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function al(e,n,s){return V(`/missions/milestones/${encodeURIComponent(e)}/interview${n}`,s)}function rl(e,n,s){return V(`/missions/slices/${encodeURIComponent(e)}/interview${n}`,s)}function bC(e,n){return I(al(e,"/start",n),{method:"POST"})}function xC(e,n,s,a){return I(al(e,"/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function vC(e,n,s,a){const r=Es(al(e,`/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[milestone-interview] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[milestone-interview] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function yC(e,n,s){return I(al(e,"/apply",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function wC(e,n){return I(al(e,"/skip",n),{method:"POST"})}function kC(e,n){return I(rl(e,"/start",n),{method:"POST"})}function jC(e,n,s,a){return I(rl(e,"/respond",s),{method:"POST",body:JSON.stringify({sessionId:e,responses:n,tabId:a})})}function NC(e,n,s,a){const r=Es(rl(e,`/${encodeURIComponent(e)}/stream`,n));let o=null,l=null;const c=()=>{o?.stop(),o=null},d=Jr(r,{onOpen:()=>{c(),o=tl(e,n)},onMessage:u=>{u.data.startsWith(":")},events:{thinking:u=>{try{s.onThinking?.(JSON.parse(u.data))}catch{s.onThinking?.(u.data)}},question:u=>{try{s.onQuestion?.(JSON.parse(u.data))}catch(h){console.error("[slice-interview] Failed to parse question event:",h)}},summary:u=>{try{s.onSummary?.(JSON.parse(u.data))}catch(h){console.error("[slice-interview] Failed to parse summary event:",h)}},error:u=>{try{const h=JSON.parse(u.data);s.onError?.(h.message||h)}catch{s.onError?.(u.data||"Stream error")}l?.close()},complete:()=>{s.onComplete?.(),l?.close()}}},{maxReconnectAttempts:a?.maxReconnectAttempts,onConnectionStateChange:s.onConnectionStateChange,onFatalError:u=>{c(),s.onError?.(u)}});return l={close:()=>{c(),d.close()},isConnected:d.isConnected},l}function SC(e,n,s){return I(rl(e,"/apply",s),{method:"POST",body:JSON.stringify({sessionId:e,summary:n})})}function CC(e,n){return I(rl(e,"/skip",n),{method:"POST"})}async function EC(e,n){try{return await I(V(`/missions/features/${encodeURIComponent(e)}/preview-description`,n),{method:"POST"})}catch{throw new Error("Preview endpoint not available")}}function T8(e){return I(V("/todos",e))}function P8(e,n){const s={title:e};return I(V("/todos",n),{method:"POST",body:JSON.stringify(s)})}function $8(e,n,s){const a={title:n};return I(V(`/todos/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(a)})}function D8(e,n){return I(V(`/todos/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function L8(e,n,s){const a={text:n};return I(V(`/todos/${encodeURIComponent(e)}/items`,s),{method:"POST",body:JSON.stringify(a)})}function O8(e,n,s){const a=n;return I(V(`/todos/items/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(a)})}function F8(e,n){return I(V(`/todos/items/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function z8(e,n,s){return I(V(`/todos/${encodeURIComponent(e)}/items/reorder`,s),{method:"POST",body:JSON.stringify({itemIds:n})})}function Lr(e){if(!e)return[];try{const n=JSON.parse(e);return Array.isArray(n)?n:[]}catch{return[]}}async function lm(e,n){const s=new URLSearchParams;e&&s.set("projectId",e),n?.includeCompleted&&s.set("includeCompleted","1"),n?.includeArchived&&s.set("includeArchived","1");const a=s.toString(),r=await fetch(Es(`/ai-sessions${a?`?${a}`:""}`),{headers:Ei()});return r.ok?(await r.json()).sessions??[]:[]}async function _C(e){return I(`/ai-sessions/${encodeURIComponent(e)}/archive`,{method:"POST"})}async function MC(e){return I(`/ai-sessions/${encodeURIComponent(e)}/unarchive`,{method:"POST"})}async function zi(e){const n=await fetch(Es(`/ai-sessions/${encodeURIComponent(e)}`),{headers:Ei()});return n.ok?n.json():null}async function AC(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 RC(e,n){return I(`/ai-sessions/${encodeURIComponent(e)}/lock`,{method:"DELETE",body:JSON.stringify({tabId:n})})}function IC(e,n){return I(`/ai-sessions/${encodeURIComponent(e)}/lock/force`,{method:"POST",body:JSON.stringify({tabId:n})})}async function ix(e){await fetch(Es(`/ai-sessions/${encodeURIComponent(e)}`),{method:"DELETE",headers:Ei()})}function TC(e,n){return I(V(`/ai-sessions/${encodeURIComponent(e)}/ping`,n),{method:"POST"})}function PC(e,n,s){return I(V(`/ai-sessions/${encodeURIComponent(e)}/draft`,s),{method:"PATCH",body:JSON.stringify(n)})}function $C(e,n){return I(V(`/planning/${encodeURIComponent(e)}/summarize-draft-title`,n),{method:"POST"})}function DC(e,n){const s=new URLSearchParams;s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset)),e?.unreadOnly&&s.set("unreadOnly","true"),e?.type&&s.set("type",e.type),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/messages/inbox${a}`)}function LC(e,n){const s=new URLSearchParams;s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset)),e?.type&&s.set("type",e.type),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/messages/outbox${a}`)}function ax(e){return I(V("/messages/unread-count",e))}function OC(e,n){return I(V("/messages",n),{method:"POST",body:JSON.stringify(e)})}function FC(e,n){return I(V(`/messages/${encodeURIComponent(e)}/read`,n),{method:"POST"})}function zC(e){return I(V("/messages/read-all",e),{method:"POST"})}function BC(e,n){return I(V(`/messages/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function UC(e,n,s){const a=`/messages/conversation/${encodeURIComponent(n)}/${encodeURIComponent(e)}`;return I(V(a,s))}function HC(e,n){return I(V(`/agents/${encodeURIComponent(e)}/mailbox`,n))}function qC(e){return I(V("/agents/mailbox/all",e))}function xl(e,n){const s=new URLSearchParams;e?.status&&s.set("status",e.status),e?.limit!==void 0&&s.set("limit",String(e.limit)),e?.offset!==void 0&&s.set("offset",String(e.offset)),n&&s.set("projectId",n);const a=s.size>0?`?${s.toString()}`:"";return I(`/approvals${a}`)}function Ih(e,n){return I(V(`/approvals/${encodeURIComponent(e)}`,n))}function VC(e,n,s){return I(V(`/approvals/${encodeURIComponent(e)}/decision`,s),{method:"POST",body:JSON.stringify(n)})}function B8(e,n,s){const a=new URLSearchParams;a.set("limit",String(n)),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/reflections${r}`)}function U8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/reflections`,n),{method:"POST"})}function H8(e,n,s){const a=new URLSearchParams;s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/performance${r}`)}function q8(e,n,s){const a=new URLSearchParams;a.set("limit",String(n.limit)),n?.category&&a.set("category",n.category),s&&a.set("projectId",s);const r=a.size>0?`?${a.toString()}`:"";return I(`/agents/${encodeURIComponent(e)}/ratings${r}`)}function V8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/ratings`,s),{method:"POST",body:JSON.stringify(n)})}function W8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/ratings/summary`,n))}function G8(e,n,s){return I(V(`/agents/${encodeURIComponent(e)}/ratings/${encodeURIComponent(n)}`,s),{method:"DELETE"})}function K8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/budget`,n))}function J8(e,n){return I(V(`/agents/${encodeURIComponent(e)}/budget/reset`,n),{method:"POST"})}async function Y8(e){return I(V("/plugins",e))}async function Q8(e,n){return I(V("/plugins",n),{method:"POST",body:JSON.stringify({mode:"install",...e})})}async function X8(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/enable`,n),{method:"POST"})}async function Z8(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/disable`,n),{method:"POST"})}async function eB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}`,n),{method:"DELETE"})}async function tB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/settings`,n))}async function nB(e,n,s){return I(V(`/plugins/${encodeURIComponent(e)}/settings`,s),{method:"PUT",body:JSON.stringify({settings:n})})}async function sB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/setup-status`,n))}async function iB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/setup/install`,n),{method:"POST"})}async function aB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/reload`,n),{method:"POST"})}async function rB(e,n,s){return I(V(`/plugins/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}async function oB(e,n){return I(V(`/plugins/${encodeURIComponent(e)}/rescan`,n),{method:"POST"})}async function WC(e){return I(V("/plugins/ui-slots",e))}async function GC(e){return I(V("/plugins/dashboard-views",e))}async function lB(e){return I(V("/plugins/runtimes",e))}async function KC(e){return(await I(V("/skills/discovered",e))).skills}async function cB(e,n,s){return I(V("/skills/execution",s),{method:"PATCH",body:JSON.stringify({skillId:e,enabled:n})})}async function dB(e,n,s){const a=new URLSearchParams;e&&a.set("q",e),a.set("limit",String(n));const r=a.size>0?`?${a.toString()}`:"";return I(V(`/skills/catalog${r}`,s))}async function uB(e,n){return(await I(V(`/skills/${encodeURIComponent(e)}/content`,n))).content}function Th(e,n){const s=new URLSearchParams;e&&s.set("projectId",e);const a=s.toString();return I(`/chat/sessions${a?`?${a}`:""}`)}async function JC(e,n){const s=e.agentId.trim();if(!s)throw new Error("agentId is required");const a=e.modelProvider?.trim(),r=e.modelId?.trim();if(a&&!r||!a&&r)throw new Error("Both modelProvider and modelId must be provided together, or neither should be provided");const o=new URLSearchParams;return o.set("lookup","resume"),o.set("agentId",s),n&&o.set("projectId",n),a&&r&&(o.set("modelProvider",a),o.set("modelId",r)),{session:(await I(`/chat/sessions?${o.toString()}`)).sessions[0]??null}}function YC(e,n){return I(V("/chat/sessions",n),{method:"POST",body:JSON.stringify(e)})}function nd(e,n){return I(V(`/chat/sessions/${encodeURIComponent(e)}`,n))}function mB(e,n,s){return I(V(`/chat/sessions/${encodeURIComponent(e)}`,s),{method:"PATCH",body:JSON.stringify(n)})}function hB(e,n){return I(V(`/chat/sessions/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function oo(e,n,s){const a=new URLSearchParams;n?.limit!==void 0&&a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset)),n?.before&&a.set("before",n.before);const r=a.toString();return I(V(`/chat/sessions/${encodeURIComponent(e)}/messages${r?`?${r}`:""}`,s))}function pB(e={},n){const s=new URLSearchParams;n&&s.set("projectId",n),e.status&&s.set("status",e.status),e.agentId&&s.set("agentId",e.agentId);const a=s.toString();return I(`/chat/rooms${a?`?${a}`:""}`)}function fB(e,n){const s={...e,...n?{projectId:n}:{}};return I(V("/chat/rooms",n),{method:"POST",body:JSON.stringify(s)})}function gB(e,n){return I(V(`/chat/rooms/${encodeURIComponent(e)}`,n),{method:"DELETE"})}function bB(e,n){return I(V(`/chat/rooms/${encodeURIComponent(e)}/members`,n))}function xB(e,n,s){const a=new URLSearchParams;n?.limit!==void 0&&a.set("limit",String(n.limit)),n?.offset!==void 0&&a.set("offset",String(n.offset)),n?.before&&a.set("before",n.before);const r=a.toString();return I(V(`/chat/rooms/${encodeURIComponent(e)}/messages${r?`?${r}`:""}`,s))}function vB(e,n,s){return I(V(`/chat/rooms/${encodeURIComponent(e)}/messages`,s),{method:"POST",body:JSON.stringify(n)})}function QC(e,n){return I(V(`/chat/sessions/${encodeURIComponent(e)}/cancel`,n),{method:"POST"})}function XC(e){if(!e||typeof e!="object")return null;const n=e,s=typeof n.summary=="string"?n.summary.trim():"";if(!s)return null;const a=(()=>{const r=n.reference;if(!r||typeof r!="object")return;const o=r,l=typeof o.kind=="string"?o.kind.trim():"",c=typeof o.id=="string"?o.id.trim():"";if(!(!l||!c))return{kind:l,id:c,...typeof o.label=="string"&&o.label.trim()?{label:o.label.trim()}:{}}})();return{summary:s,...typeof n.errorClass=="string"&&n.errorClass.trim()?{errorClass:n.errorClass.trim()}:{},...typeof n.code=="string"&&n.code.trim()?{code:n.code.trim()}:{},...typeof n.detail=="string"&&n.detail.trim()?{detail:n.detail.trim()}:{},...a?{reference:a}:{}}}function rx(e){try{const n=JSON.parse(e),s=XC(n);return s||(n&&typeof n=="object"&&typeof n.message=="string"?n.message:typeof n=="string"?n:e||"Stream error")}catch{return e||"Stream error"}}function ZC(e,n,s,a,r,o){const l=Es(V(`/chat/sessions/${encodeURIComponent(e)}/messages`,r)),c=new AbortController;let d=!1,u=!1,h=!1;const m=Math.max(1e3,6e4);let f=null;const p=()=>{f&&(clearTimeout(f),f=null)},g=()=>{h||(h=!0,p())},w=(v,b)=>{if(v)switch(g(),v){case"thinking":try{s.onThinking?.(JSON.parse(b))}catch{s.onThinking?.(b)}break;case"text":try{s.onText?.(JSON.parse(b))}catch{s.onText?.(b)}break;case"tool_start":try{s.onToolStart?.(JSON.parse(b))}catch{}break;case"tool_end":try{s.onToolEnd?.(JSON.parse(b))}catch{}break;case"fallback":try{s.onFallback?.(JSON.parse(b))}catch{}break;case"done":u=!0;try{const y=JSON.parse(b);s.onDone?.({messageId:typeof y.messageId=="string"?y.messageId:"",...y.message&&typeof y.message=="object"?{message:y.message}:{}})}catch{s.onDone?.({messageId:""})}break;case"error":u=!0,s.onError?.(rx(b));break}};return(async()=>{try{const v=Array.isArray(a)&&a.length>0,b=v?(()=>{const _=new FormData;return _.append("content",n),a.forEach(A=>_.append("attachments",A)),_})():JSON.stringify({content:n}),y=await fetch(l,{method:"POST",headers:v?Ei():Ei({"Content-Type":"application/json"}),body:b,signal:c.signal});if(!y.ok){const _=await y.text();let A=`Request failed: ${y.status}`;try{A=JSON.parse(_).error||A}catch{}s.onError?.(A);return}if(!y.body){s.onError?.("No response body");return}s.onConnectionStateChange?.("connected"),f=setTimeout(()=>{u||d||h||(u=!0,s.onError?.("Timed out waiting for first response event"),c.abort())},m);const N=y.body.getReader(),S=new TextDecoder;let C="",x="",k=[];const R=(_,A=!1)=>{C+=_;const Q=C.split(`
643
+ `);C=Q.pop()||"",A&&C.length>0&&(Q.push(C),C="");for(const H of Q){const M=H.endsWith("\r")?H.slice(0,-1):H;if(M.startsWith("event:"))x=M.slice(6).trim();else if(M.startsWith("data:")){const T=M.slice(5);k.push(T.startsWith(" ")?T.slice(1):T)}else if(M===""){const T=k.join(`
644
+ `);w(x,T),x="",k=[]}}if(A&&x&&k.length>0){const H=k.join(`
645
+ `);w(x,H),x="",k=[]}};for(;;){const{done:_,value:A}=await N.read();if(_){R(S.decode(),!0);break}R(S.decode(A,{stream:!0}))}const z=C.length>0||x.length>0||k.length>0;!u&&!d&&!z&&s.onError?.("Connection closed unexpectedly"),p()}catch(v){if(v instanceof DOMException&&v.name==="AbortError"){!d&&!u&&s.onError?.("Connection aborted"),p();return}if(d){p();return}p(),s.onError?.(v instanceof Error?v.message:"Connection error")}})(),{close:()=>{d=!0,p(),c.abort()},isConnected:()=>!d}}function eE(e,n,s,a){const r=Es(V(`/chat/sessions/${encodeURIComponent(e)}/stream`,s)),o=new AbortController;let l=!1,c=!1;const d=(u,h)=>{if(u)switch(u){case"thinking":try{n.onThinking?.(JSON.parse(h))}catch{n.onThinking?.(h)}break;case"text":try{n.onText?.(JSON.parse(h))}catch{n.onText?.(h)}break;case"tool_start":try{n.onToolStart?.(JSON.parse(h))}catch{}break;case"tool_end":try{n.onToolEnd?.(JSON.parse(h))}catch{}break;case"fallback":try{n.onFallback?.(JSON.parse(h))}catch{}break;case"done":c=!0;try{const m=JSON.parse(h);n.onDone?.({messageId:typeof m.messageId=="string"?m.messageId:"",...m.message&&typeof m.message=="object"?{message:m.message}:{}})}catch{n.onDone?.({messageId:""})}break;case"error":c=!0,n.onError?.(rx(h));break}};return(async()=>{try{const u=new Headers(Ei());typeof a?.lastEventId=="number"&&u.set("Last-Event-ID",String(a.lastEventId));const h=await fetch(r,{method:"GET",headers:u,signal:o.signal});if(!h.ok){const y=await h.text();let N=`Request failed: ${h.status}`;try{N=JSON.parse(y).error||N}catch{}n.onError?.(N);return}if(!h.body){n.onError?.("No response body");return}n.onConnectionStateChange?.("connected");const m=h.body.getReader(),f=new TextDecoder;let p="",g="",w=[];const v=(y,N=!1)=>{p+=y;const S=p.split(`
646
+ `);p=S.pop()||"",N&&p.length>0&&(S.push(p),p="");for(const C of S){const x=C.endsWith("\r")?C.slice(0,-1):C;if(x.startsWith("event:"))g=x.slice(6).trim();else if(x.startsWith("data:")){const k=x.slice(5);w.push(k.startsWith(" ")?k.slice(1):k)}else if(x===""){const k=w.join(`
647
+ `);d(g,k),g="",w=[]}}if(N&&g&&w.length>0){const C=w.join(`
648
+ `);d(g,C),g="",w=[]}};for(;;){const{done:y,value:N}=await m.read();if(y){v(f.decode(),!0);break}v(f.decode(N,{stream:!0}))}const b=p.length>0||g.length>0||w.length>0;if(!c&&!l&&!b)return}catch(u){if(u instanceof DOMException&&u.name==="AbortError"){!l&&!c&&n.onError?.("Connection aborted");return}if(l)return;n.onError?.(u instanceof Error?u.message:"Connection error")}})(),{close:()=>{l=!0,o.abort()},isConnected:()=>!l}}function yB(e={},n){const s=new URLSearchParams;e.category&&s.set("category",e.category),e.status&&s.set("status",e.status),e.runId&&s.set("runId",e.runId),e.limit!==void 0&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset));const a=s.size>0?`?${s.toString()}`:"";return I(V(`/insights${a}`,n))}function wB(e,n){return I(V(`/insights/${encodeURIComponent(e)}/dismiss`,n),{method:"POST"})}function kB(e,n){return I(V(`/insights/${encodeURIComponent(e)}/archive`,n),{method:"POST"})}function jB(e,n){return I(V(`/insights/${encodeURIComponent(e)}/unarchive`,n),{method:"POST"})}function NB(e="manual",n,s,a,r){const o={trigger:e,inputMetadata:n};return a&&(o.modelProvider=a),r&&(o.modelId=r),I(V("/insights/run",s),{method:"POST",body:JSON.stringify(o)})}function SB(e){return I(V("/insights/runs",e))}function CB(e,n){return I(V(`/insights/runs/${encodeURIComponent(e)}`,n))}function EB(e,n){return I(V(`/insights/${encodeURIComponent(e)}/create-task`,n),{method:"POST"})}function _B(e={},n){const s=new URLSearchParams;e.q&&s.set("q",e.q),e.runId&&s.set("runId",e.runId),e.scoreMin!==void 0&&s.set("scoreMin",String(e.scoreMin)),e.scoreMax!==void 0&&s.set("scoreMax",String(e.scoreMax)),e.limit!==void 0&&s.set("limit",String(e.limit)),e.offset!==void 0&&s.set("offset",String(e.offset));const a=s.size>0?`?${s.toString()}`:"";return I(V(`/evals${a}`,n))}function MB(e,n){return I(V(`/evals/${encodeURIComponent(e)}`,n))}function AB(e){return I(V("/evals/runs",e))}function RB(e={},n){const s=new URLSearchParams;e.q&&s.set("q",e.q),e.status&&s.set("status",e.status),e.limit!==void 0&&s.set("limit",String(e.limit));const a=s.size>0?`?${s.toString()}`:"";return I(V(`/research/runs${a}`,n))}function IB(e,n){return I(V("/research/runs",n),{method:"POST",body:JSON.stringify(e)})}function TB(e,n){return I(V(`/research/runs/${encodeURIComponent(e)}`,n))}function ox(e){if(e instanceof sc){const n=e.details?.code,s=typeof n=="string"?n:"INTERNAL_ERROR",a=typeof e.details?.setupHint=="string"?e.details.setupHint:void 0,r=typeof e.details?.retryable=="boolean"?e.details.retryable:void 0,o=e;throw o.researchCode=s,o.setupHint=a,o.retryable=r,o}throw e}async function PB(e,n){try{return await I(V(`/research/runs/${encodeURIComponent(e)}/cancel`,n),{method:"POST"})}catch(s){ox(s)}}async function $B(e,n){try{return await I(V(`/research/runs/${encodeURIComponent(e)}/retry`,n),{method:"POST"})}catch(s){ox(s)}}function DB(e,n,s){return I(V(`/research/runs/${encodeURIComponent(e)}/export?format=${encodeURIComponent(n)}`,s))}function LB(e,n,s){const a=n.findingId??"finding-1";return I(V(`/research/runs/${encodeURIComponent(e)}/findings/${encodeURIComponent(a)}/task`,s),{method:"POST",body:JSON.stringify({title:n.title,description:n.description,priority:n.priority,attachExport:n.attachExport})})}function OB(e,n,s){const a=n.findingId??"finding-1";return I(V(`/research/runs/${encodeURIComponent(e)}/findings/${encodeURIComponent(a)}/tasks/${encodeURIComponent(n.taskId)}/enrich`,s),{method:"POST",body:JSON.stringify({attachExport:n.attachExport})})}async function tE(e){return il("/health",{nodeId:e})}async function nE(e){return il("/projects",{nodeId:e})}async function sE(e,n,s){const a=new URLSearchParams({projectId:n});return s&&s.trim()&&a.set("q",s.trim()),il(`/tasks?${a.toString()}`,{nodeId:e})}async function iE(e,n){return il(`/project-health?projectId=${encodeURIComponent(n)}`,{nodeId:e})}async function FB(e){return I(`/nodes/${encodeURIComponent(e)}/settings/push`,{method:"POST",body:JSON.stringify({})})}async function zB(e){return I(`/nodes/${encodeURIComponent(e)}/settings/pull`,{method:"POST",body:JSON.stringify({conflictResolution:"last-write-wins"})})}async function BB(e){return I(`/nodes/${encodeURIComponent(e)}/settings/sync-status`)}async function UB(e){return I(`/nodes/${encodeURIComponent(e)}/auth/sync`,{method:"POST",body:JSON.stringify({})})}async function aE(e,n){return Promise.all(n.map(({projectId:s,path:a})=>N1(s,e,a)))}function rE(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 oE({node:e,showDetails:n=!1}){if(!e||e.type==="local")return t.jsx("div",{className:"node-status-indicator node-status-indicator--local",children:t.jsx("span",{className:"node-status-indicator__label",children:"Local"})});const{label:s,dotClass:a}=rE(e.status),r=e.status==="connecting";return t.jsxs("div",{className:"node-status-indicator node-status-indicator--remote",children:[t.jsx("span",{className:`node-status-indicator__dot ${a}`,children:r&&t.jsx("span",{className:"node-status-indicator__spinner"})}),t.jsx("span",{className:"node-status-indicator__name",children:e.name}),n&&t.jsxs("span",{className:"node-status-indicator__details",children:[e.type," · ",s]})]})}function lE(e){return e.charAt(0).toUpperCase()+e.slice(1)}function Ka({status:e,showLabel:n=!1,className:s,compact:a=!1}){const r=lE(e);return t.jsxs("span",{className:`node-health-dot${a?" node-health-dot--compact":""}${s?` ${s}`:""}`,title:r,"aria-label":`Node status: ${r}`,children:[t.jsx("span",{className:`status-dot status-dot--${e}`}),n?t.jsx("span",{className:"node-health-dot__label",children:r}):null]})}const Ph=new Map,cE=6e4;function lx(e){const[n,s]=i.useState([]),[a,r]=i.useState(!0),[o,l]=i.useState(null),c=i.useRef(!1),d=i.useRef(!1),u=i.useCallback(h=>n.filter(m=>m.slot.slotId===h),[n]);return i.useEffect(()=>{const h=e??"default";let m=!1;async function f(){const p=Ph.get(h);if(p&&Date.now()<p.expiresAt){if(m||d.current)return;s(p.slots),r(!1);return}!c.current&&r(!0),l(null);try{const w=await WC(e);if(m||d.current)return;Ph.set(h,{slots:w,expiresAt:Date.now()+cE}),s(w),c.current=!0}catch(w){if(m||d.current)return;l(w instanceof Error?w.message:"Failed to fetch UI slots"),c.current=!0}finally{!m&&!d.current&&r(!1)}}return f(),()=>{m=!0}},[e]),i.useEffect(()=>{c.current=!1,d.current=!1},[e]),i.useEffect(()=>()=>{d.current=!0},[]),i.useMemo(()=>({slots:n,getSlotsForId:u,loading:a,error:o}),[n,u,a,o])}function $h({size:e,color:n,label:s="llama.cpp"}){return t.jsx(_b,{size:e,color:n,"aria-label":s,"data-testid":"llama-cpp-icon"})}const dE={sm:16,md:20,lg:24};function uE({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 Dh({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 Pi({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 mE({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 Lh({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 hE({size:e,color:n,label:s="Z.ai"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"zai-icon","aria-label":s,children:t.jsx("path",{d:"M3 5H21V8.5L7 17.5H21V21H3V17.5L17 8.5H3Z",fill:n})})}function sd({size:e,color:n,label:s="Kimi"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"kimi-icon","aria-label":s,children:t.jsx("path",{d:"M12 3a9 9 0 1 0 9 9c0-.46-.04-.92-.1-1.36a5.39 5.39 0 0 1-4.4 2.26 5.4 5.4 0 0 1-3.14-9.8c.2-.07.4-.1.64-.1z",fill:n})})}function Oh({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 Fh({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 zh({size:e,color:n,label:s="Opencode"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"opencode-icon","aria-label":s,children:t.jsx("path",{d:"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6z",fill:n})})}function id({size:e,color:n,label:s="DeepSeek"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"deepseek-icon","aria-label":s,children:t.jsx("path",{d:"M4 12a8 8 0 1 1 12.7 6.4L12 16h4a4 4 0 1 0-1.6 3.2L12 22l7-1-1.2-3.6A10 10 0 1 0 2 12z",fill:n})})}function Bh({size:e,color:n,label:s="Cloudflare"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"cloudflare-icon","aria-label":s,children:t.jsx("path",{d:"M7 16.5h10.8a2.9 2.9 0 0 0 .3-5.8 4.9 4.9 0 0 0-9.3-1.6A3.6 3.6 0 0 0 7 16.5m-1.9 0h3.2a2.5 2.5 0 0 0 .2-5 3.4 3.4 0 0 0-3.4 3.4c0 .6 0 1 .2 1.6",fill:n})})}function lo({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 Uh({size:e,color:n,label:s="LM Studio"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"lmstudio-icon","aria-label":s,children:[t.jsx("rect",{x:"2",y:"2",width:"20",height:"20",rx:"4.5",fill:n}),t.jsx("text",{x:"12",y:"16",textAnchor:"middle",fontFamily:"-apple-system, system-ui, sans-serif",fontSize:"9.5",fontWeight:"700",fill:"var(--provider-icon-contrast)",letterSpacing:"-0.4",children:"LM"})]})}function ad({size:e,color:n,label:s="Hugging Face"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"huggingface-icon","aria-label":s,children:[t.jsx("circle",{cx:"12",cy:"12",r:"9",fill:n}),t.jsx("circle",{cx:"8.5",cy:"10.5",r:"1.4",fill:"var(--provider-icon-contrast)"}),t.jsx("circle",{cx:"15.5",cy:"10.5",r:"1.4",fill:"var(--provider-icon-contrast)"}),t.jsx("path",{d:"M7.5 14.5 Q12 18.5 16.5 14.5",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.6",strokeLinecap:"round",fill:"none"}),t.jsx("path",{d:"M3.5 16 Q5 13.5 7 14.5 M20.5 16 Q19 13.5 17 14.5",stroke:n,strokeWidth:"1.8",strokeLinecap:"round",fill:"none"})]})}function Hh({size:e,color:n,label:s="Mistral AI"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"mistral-icon","aria-label":s,children:t.jsx("path",{d:"M2 4h3v16H2zM7 4h3v12H7zM12 4h3v16h-3zM17 4h3v8h-3zM7 16h3v4H7zM17 8h3v12h-3z",fill:n})})}function rd({size:e,color:n,label:s="Azure"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"azure-icon","aria-label":s,children:t.jsx("path",{d:"M10.4 3.2 4.5 16.6l3.5.5L13 6 9.6 19.5h9.9zM3 19.5l4.6.6 8.6-1.7-7-1.6z",fill:n})})}function pE({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 fE({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 qh({size:e,color:n,label:s="Vercel"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"vercel-icon","aria-label":s,children:t.jsx("path",{d:"M12 2 22 21H2z",fill:n})})}function od({size:e,color:n,label:s="Fireworks AI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"fireworks-icon","aria-label":s,children:[t.jsx("circle",{cx:"12",cy:"12",r:"2.4",fill:n}),t.jsx("circle",{cx:"12",cy:"3.5",r:"1.4",fill:n}),t.jsx("circle",{cx:"12",cy:"20.5",r:"1.4",fill:n}),t.jsx("circle",{cx:"3.5",cy:"12",r:"1.4",fill:n}),t.jsx("circle",{cx:"20.5",cy:"12",r:"1.4",fill:n}),t.jsx("circle",{cx:"6",cy:"6",r:"1.2",fill:n}),t.jsx("circle",{cx:"18",cy:"6",r:"1.2",fill:n}),t.jsx("circle",{cx:"6",cy:"18",r:"1.2",fill:n}),t.jsx("circle",{cx:"18",cy:"18",r:"1.2",fill:n}),t.jsx("path",{d:"M12 5.5v3M12 15.5v3M5.5 12h3M15.5 12h3",stroke:n,strokeWidth:"1.4",strokeLinecap:"round"})]})}function gE({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 Vh({size:e,color:n,label:s="GitHub"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"github-icon","aria-label":s,children:t.jsx("path",{d:"M12 0a12 12 0 0 0-3.79 23.39c.6.11.82-.26.82-.58v-2.23c-3.34.73-4.04-1.41-4.04-1.41-.55-1.39-1.34-1.76-1.34-1.76-1.09-.75.08-.74.08-.74 1.2.08 1.84 1.24 1.84 1.24 1.08 1.84 2.82 1.31 3.5 1 .1-.78.42-1.31.77-1.62-2.67-.3-5.47-1.34-5.47-5.95 0-1.31.47-2.38 1.24-3.22-.12-.31-.54-1.56.12-3.24 0 0 1.01-.32 3.3 1.23a11.3 11.3 0 0 1 6 0c2.29-1.55 3.3-1.23 3.3-1.23.66 1.68.24 2.93.12 3.24.77.84 1.24 1.91 1.24 3.22 0 4.62-2.8 5.64-5.48 5.94.43.37.82 1.1.82 2.22v3.29c0 .32.22.69.83.58A12 12 0 0 0 12 0",fill:n})})}function ld({size:e,color:n,label:s="Hermes"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 64 64",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":s,children:[t.jsx("rect",{x:"30",y:"10",width:"4",height:"46",rx:"2",fill:n}),t.jsx("path",{d:"M30 18 C24 14, 14 14, 10 18 C14 16, 22 16, 28 20",fill:n,opacity:"0.9"}),t.jsx("path",{d:"M30 22 C26 19, 18 19, 14 22 C18 20, 24 20, 28 24",fill:n,opacity:"0.7"}),t.jsx("path",{d:"M34 18 C40 14, 50 14, 54 18 C50 16, 42 16, 36 20",fill:n,opacity:"0.9"}),t.jsx("path",{d:"M34 22 C38 19, 46 19, 50 22 C46 20, 40 20, 36 24",fill:n,opacity:"0.7"}),t.jsx("path",{d:"M32 48 C22 44, 20 38, 26 34 C20 36, 18 42, 24 46 C18 40, 22 30, 30 28 C24 32, 22 38, 28 42",fill:"none",stroke:n,strokeWidth:"2.5",strokeLinecap:"round"}),t.jsx("path",{d:"M32 48 C42 44, 44 38, 38 34 C44 36, 46 42, 40 46 C46 40, 42 30, 34 28 C40 32, 42 38, 36 42",fill:"none",stroke:n,strokeWidth:"2.5",strokeLinecap:"round",opacity:"0.8"}),t.jsx("circle",{cx:"32",cy:"10",r:"4",fill:n})]})}function Wh({size:e,label:n="OpenClaw"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":n,children:[t.jsx("rect",{width:"16",height:"16",fill:"none"}),t.jsxs("g",{fill:"#3a0a0d",children:[t.jsx("rect",{x:"1",y:"5",width:"1",height:"3"}),t.jsx("rect",{x:"2",y:"4",width:"1",height:"1"}),t.jsx("rect",{x:"2",y:"8",width:"1",height:"1"}),t.jsx("rect",{x:"3",y:"3",width:"1",height:"1"}),t.jsx("rect",{x:"3",y:"9",width:"1",height:"1"}),t.jsx("rect",{x:"4",y:"2",width:"1",height:"1"}),t.jsx("rect",{x:"4",y:"10",width:"1",height:"1"}),t.jsx("rect",{x:"5",y:"2",width:"6",height:"1"}),t.jsx("rect",{x:"11",y:"2",width:"1",height:"1"}),t.jsx("rect",{x:"12",y:"3",width:"1",height:"1"}),t.jsx("rect",{x:"12",y:"9",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"4",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"8",width:"1",height:"1"}),t.jsx("rect",{x:"14",y:"5",width:"1",height:"3"}),t.jsx("rect",{x:"5",y:"11",width:"6",height:"1"}),t.jsx("rect",{x:"4",y:"12",width:"1",height:"1"}),t.jsx("rect",{x:"11",y:"12",width:"1",height:"1"}),t.jsx("rect",{x:"3",y:"13",width:"1",height:"1"}),t.jsx("rect",{x:"12",y:"13",width:"1",height:"1"}),t.jsx("rect",{x:"5",y:"14",width:"6",height:"1"})]}),t.jsxs("g",{fill:"#ff4f40",children:[t.jsx("rect",{x:"5",y:"3",width:"6",height:"1"}),t.jsx("rect",{x:"4",y:"4",width:"8",height:"1"}),t.jsx("rect",{x:"3",y:"5",width:"10",height:"1"}),t.jsx("rect",{x:"3",y:"6",width:"10",height:"1"}),t.jsx("rect",{x:"3",y:"7",width:"10",height:"1"}),t.jsx("rect",{x:"4",y:"8",width:"8",height:"1"}),t.jsx("rect",{x:"5",y:"9",width:"6",height:"1"}),t.jsx("rect",{x:"5",y:"12",width:"6",height:"1"}),t.jsx("rect",{x:"6",y:"13",width:"4",height:"1"})]}),t.jsxs("g",{fill:"#ff775f",children:[t.jsx("rect",{x:"1",y:"6",width:"2",height:"1"}),t.jsx("rect",{x:"2",y:"5",width:"1",height:"1"}),t.jsx("rect",{x:"2",y:"7",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"6",width:"2",height:"1"}),t.jsx("rect",{x:"13",y:"5",width:"1",height:"1"}),t.jsx("rect",{x:"13",y:"7",width:"1",height:"1"})]}),t.jsxs("g",{fill:"#081016",children:[t.jsx("rect",{x:"6",y:"5",width:"1",height:"1"}),t.jsx("rect",{x:"9",y:"5",width:"1",height:"1"})]}),t.jsxs("g",{fill:"#f5fbff",children:[t.jsx("rect",{x:"6",y:"4",width:"1",height:"1"}),t.jsx("rect",{x:"9",y:"4",width:"1",height:"1"})]})]})}function cd({size:e,color:n,label:s="Paperclip"}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-label":s,children:t.jsx("path",{d:"m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551",stroke:n,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})})}function Gh({size:e,color:n,label:s="Anthropic — via Claude CLI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"claude-cli-icon","aria-label":s,children:[t.jsx("g",{transform:"translate(-1 -1.5) scale(0.82)",children:t.jsx("path",{d:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z",fill:n})}),t.jsx("rect",{x:"13",y:"13",width:"10",height:"9",rx:"1.5",fill:n}),t.jsx("path",{d:"M15.2 16.2l1.6 1.4-1.6 1.4M18.6 19.6h2.4",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}function bE({size:e,color:n,label:s="Factory AI — via Droid CLI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"droid-cli-icon","aria-label":s,children:[t.jsx("rect",{x:"2",y:"3",width:"14",height:"14",rx:"3",fill:n}),t.jsx("path",{d:"M6.5 7.5h2.6a2.9 2.9 0 1 1 0 5.8H6.5zM9 7.5v5.8",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"}),t.jsx("rect",{x:"13",y:"13",width:"10",height:"9",rx:"1.5",fill:n}),t.jsx("path",{d:"M15.2 16.2l1.6 1.4-1.6 1.4M18.6 19.6h2.4",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}function xE({size:e,color:n,label:s="Cursor — via Cursor CLI"}){return t.jsxs("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","data-testid":"cursor-cli-icon","aria-label":s,children:[t.jsx("rect",{x:"2",y:"3",width:"14",height:"14",rx:"3",fill:n}),t.jsx("path",{d:"M10.8 7.2a3.6 3.6 0 1 0 0 5.6",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.4",strokeLinecap:"round",strokeLinejoin:"round"}),t.jsx("rect",{x:"13",y:"13",width:"10",height:"9",rx:"1.5",fill:n}),t.jsx("path",{d:"M15.2 16.2l1.6 1.4-1.6 1.4M18.6 19.6h2.4",stroke:"var(--provider-icon-contrast)",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none"})]})}const vE={anthropic:{component:uE,color:"var(--provider-anthropic)"},"claude-cli":{component:Gh,color:"var(--provider-anthropic)",label:"Anthropic — via Claude CLI"},"pi-claude-cli":{component:Gh,color:"var(--provider-anthropic)",label:"Anthropic — via Claude CLI"},"droid-cli":{component:bE,color:"var(--provider-openai)",label:"Factory AI — via Droid CLI"},"cursor-cli":{component:xE,color:"var(--provider-cursor-cli)",label:"Cursor — via Cursor CLI"},"llama-cpp":{component:$h,color:"var(--provider-ollama)",label:"llama.cpp"},"llama-server":{component:$h,color:"var(--provider-ollama)",label:"llama.cpp"},openai:{component:Dh,color:"var(--provider-openai)"},"openai-codex":{component:Dh,color:"var(--provider-openai)",label:"OpenAI Codex"},google:{component:Pi,color:"var(--provider-gemini)"},gemini:{component:Pi,color:"var(--provider-gemini)"},"google-antigravity":{component:Pi,color:"var(--provider-gemini)",label:"Google Gemini"},antigravity:{component:Pi,color:"var(--provider-gemini)",label:"Google Gemini"},"google-vertex":{component:Pi,color:"var(--provider-gemini)",label:"Google Vertex AI"},vertex:{component:Pi,color:"var(--provider-gemini)",label:"Google Vertex AI"},"google-cloud-code":{component:Pi,color:"var(--provider-gemini)",label:"Google Cloud Code"},"cloud-code":{component:Pi,color:"var(--provider-gemini)",label:"Google Cloud Code"},"google-gemini-cli":{component:Pi,color:"var(--provider-gemini)",label:"Google Gemini CLI"},"google-generative-ai":{component:Pi,color:"var(--provider-gemini)",label:"Google Generative AI"},ollama:{component:mE,color:"var(--text)"},github:{component:Vh,color:"var(--text)"},"github-copilot":{component:Vh,color:"var(--text)",label:"GitHub Copilot"},openrouter:{component:gE,color:"var(--provider-openrouter)"},minimax:{component:Lh,color:"var(--provider-minimax)"},"minimax-cn":{component:Lh,color:"var(--provider-minimax)",label:"MiniMax (CN)"},zai:{component:hE,color:"var(--provider-zai)"},kimi:{component:sd,color:"var(--provider-kimi)"},moonshot:{component:sd,color:"var(--provider-kimi)"},"kimi-coding":{component:sd,color:"var(--provider-kimi)",label:"Kimi"},bedrock:{component:Oh,color:"var(--provider-bedrock)"},"amazon-bedrock":{component:Oh,color:"var(--provider-bedrock)",label:"Amazon Bedrock"},xai:{component:Fh,color:"var(--text)"},grok:{component:Fh,color:"var(--text)",label:"xAI"},opencode:{component:zh,color:"var(--provider-opencode)"},"opencode-go":{component:zh,color:"var(--provider-opencode)",label:"Opencode (Go)"},deepseek:{component:id,color:"var(--provider-deepseek)",label:"DeepSeek"},"deepseek-ai":{component:id,color:"var(--provider-deepseek)",label:"DeepSeek"},"deep-seek":{component:id,color:"var(--provider-deepseek)",label:"DeepSeek"},cloudflare:{component:Bh,color:"var(--provider-cloudflare)",label:"Cloudflare"},cloudflared:{component:Bh,color:"var(--provider-cloudflare)",label:"Cloudflare"},qwen:{component:lo,color:"var(--provider-qwen)"},"qwen-ai":{component:lo,color:"var(--provider-qwen)",label:"Qwen"},"qwen-coder":{component:lo,color:"var(--provider-qwen)",label:"Qwen Coder"},alibaba:{component:lo,color:"var(--provider-qwen)",label:"Qwen"},tongyi:{component:lo,color:"var(--provider-qwen)",label:"Qwen"},lmstudio:{component:Uh,color:"var(--provider-lmstudio)",label:"LM Studio"},"lm-studio":{component:Uh,color:"var(--provider-lmstudio)",label:"LM Studio"},huggingface:{component:ad,color:"var(--provider-huggingface)",label:"Hugging Face"},"hugging-face":{component:ad,color:"var(--provider-huggingface)",label:"Hugging Face"},hf:{component:ad,color:"var(--provider-huggingface)",label:"Hugging Face"},mistral:{component:Hh,color:"var(--provider-mistral)",label:"Mistral AI"},"mistral-ai":{component:Hh,color:"var(--provider-mistral)",label:"Mistral AI"},azure:{component:rd,color:"var(--provider-azure)"},"azure-openai":{component:rd,color:"var(--provider-azure)",label:"Azure OpenAI"},"azure-openai-responses":{component:rd,color:"var(--provider-azure)",label:"Azure OpenAI"},fireworks:{component:od,color:"var(--provider-fireworks)",label:"Fireworks AI"},"fireworks-ai":{component:od,color:"var(--provider-fireworks)",label:"Fireworks AI"},fireworksai:{component:od,color:"var(--provider-fireworks)",label:"Fireworks AI"},cerebras:{component:pE,color:"var(--provider-cerebras)"},groq:{component:fE,color:"var(--provider-groq)"},vercel:{component:qh,color:"var(--provider-vercel)"},"vercel-ai-gateway":{component:qh,color:"var(--provider-vercel)",label:"Vercel AI Gateway"},hermes:{component:ld,color:"var(--provider-hermes)",label:"Hermes"},"hermes-agent":{component:ld,color:"var(--provider-hermes)",label:"Hermes"},hermesagent:{component:ld,color:"var(--provider-hermes)",label:"Hermes"},openclaw:{component:Wh,color:"var(--provider-openclaw)",label:"OpenClaw"},"open-claw":{component:Wh,color:"var(--provider-openclaw)",label:"OpenClaw"},paperclip:{component:cd,color:"var(--provider-paperclip)",label:"Paperclip"},paperclipai:{component:cd,color:"var(--provider-paperclip)",label:"Paperclip"},"paperclip-ai":{component:cd,color:"var(--provider-paperclip)",label:"Paperclip"}};function Gn({provider:e,size:n="sm"}){const s=e.toLowerCase(),a=vE[s],r=a?.component,o=a?.color??"var(--text-muted)",l=a?.label,c=dE[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(_b,{size:c})})}function cx({authenticated:e,onToggled:n,compact:s=!1}){const[a,r]=i.useState(null),[o,l]=i.useState(null),[c,d]=i.useState(null),u=i.useRef(!0);i.useEffect(()=>(u.current=!0,()=>{u.current=!1}),[]);const h=i.useCallback(async()=>{try{const b=await vS();return u.current&&r(b),b}catch(b){return u.current&&d({kind:"error",message:b instanceof Error?b.message:String(b)}),null}},[]);i.useEffect(()=>{h()},[h]);const m=i.useCallback(async()=>{l("testing"),d(null),await h(),u.current&&l(null)},[h]),f=i.useCallback(async b=>{l(b?"enabling":"disabling"),d(null);try{const y=await jS(b);u.current&&d({kind:y.enabled?"enabled":"disabled",restartRequired:y.restartRequired}),n?.(y.enabled),await h()}catch(y){u.current&&d({kind:"error",message:y instanceof Error?y.message:String(y)})}finally{u.current&&l(null)}},[n,h]),p=a?.binary.available??!1,g=a?.enabled??e,w=t.jsxs("span",{className:"onboarding-provider-card__description",children:["Route AI calls through your locally-installed ",t.jsx("code",{children:"droid"})," CLI. Uses your existing Factory AI subscription / quota instead of an API key."]}),v=t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:12,className:"animate-spin"}),"Testing…"]}):"Test"}),g?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void f(!1),disabled:o!==null,children:o==="disabling"?"Disabling…":"Disable"}):t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void f(!0),disabled:o!==null||!p,title:p?void 0:"`droid` binary not detected on PATH — install Droid CLI first.",children:o==="enabling"?"Enabling…":"Enable"})]});return s?t.jsxs("div",{className:`auth-provider-card auth-provider-card--cli${e?" auth-provider-card--authenticated":""}`,"data-testid":"droid-cli-provider-card",children:[t.jsxs("div",{className:"auth-provider-header",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Gn,{provider:"droid-cli",size:"sm"}),t.jsx("strong",{children:"Factory AI — via Droid CLI"}),t.jsx(yE,{status:a,authenticated:e})]}),t.jsx("div",{className:"auth-provider-cli-actions",children:v})]}),t.jsxs("details",{className:"auth-provider-cli-details",children:[t.jsx("summary",{children:"Details"}),t.jsxs("div",{className:"auth-provider-cli-details-body",children:[w,t.jsx(Kh,{status:a,authenticated:e}),c&&t.jsx(Jh,{action:c})]})]})]}):t.jsxs("div",{className:`onboarding-provider-card${e?" onboarding-provider-card--connected":""}`,"data-testid":"droid-cli-provider-card",children:[t.jsx("div",{className:"onboarding-provider-card__icon",children:t.jsx(Gn,{provider:"droid-cli",size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:"Factory AI — via Droid CLI"}),w,t.jsx(Kh,{status:a,authenticated:e})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:v}),c&&t.jsx(Jh,{action:c})]})}function yE({status:e,authenticated:n}){const s=e?.enabled??n,a=e?.binary.available??!1;return s?t.jsx("span",{className:"auth-status-badge authenticated",children:"✓ Active"}):!a&&e?t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not installed"}):t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not connected"})}function Kh({status:e,authenticated:n}){if(!e)return t.jsxs("small",{className:"settings-muted",children:[t.jsx(_t,{size:10,className:"animate-spin"})," Probing local CLI…"]});const{binary:s,enabled:a,extension:r,ready:o}=e;return s.available?a?r&&r.status!=="ok"?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--warning",children:["⚠ Extension load failed: ",r.reason??r.status]}):o||n?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--connected",children:["✓ Connected",s.version?` — ${s.version}`:""]}):t.jsx("small",{className:"settings-muted",children:"Enabled. Validating…"}):t.jsxs("small",{className:"settings-muted",children:[t.jsx("code",{children:"droid"})," ",s.version?`(${s.version})`:""," detected",s.binaryPath?` at ${s.binaryPath}`:"",". Click Enable to route AI calls through it."]}):t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--error",children:["✗ ",s.reason??"`droid` not found on PATH"]})}function Jh({action:e}){if(e.kind==="error")return t.jsx("p",{className:"onboarding-helper-text onboarding-helper-text--error",children:e.message});const n=e.kind==="enabled"?"Enabled":"Disabled";return t.jsxs("p",{className:"onboarding-helper-text",children:[n,"."," ",e.kind==="enabled"?"Factory AI (via Droid CLI) models are now visible in the model picker.":"Factory AI (via Droid CLI) models are hidden from the model picker.",e.restartRequired?" Restart required: restart your active CLI/chat session for routing changes to take effect.":""]})}function Yh({actions:e}){return t.jsx(cx,{compact:!0,authenticated:!1,onToggled:()=>{e?.refreshAuthProviders?.()}})}function wE({actions:e}){return t.jsx(cx,{authenticated:!1,onToggled:()=>{e?.refreshAuthProviders?.()}})}function kE(){return t.jsx("p",{className:"onboarding-helper-text","data-testid":"droid-onboarding-setup-help",children:"Tip: Enable Droid CLI to reuse your Factory AI subscription without adding an API key."})}function jE({actions:e}){return t.jsxs("div",{className:"post-onboarding-recommendations__item","data-testid":"droid-post-onboarding-recommendation",children:[t.jsxs("span",{className:"post-onboarding-recommendations__item-text",children:[t.jsx("strong",{children:"Enable Droid CLI"}),t.jsx("span",{children:"Use your local Droid CLI session as an AI provider in Fusion."})]}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>e?.openSettingsSection?.("authentication"),children:"Open Authentication"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>e?.openModelOnboarding?.(),children:"Open Onboarding"})]})}const NE=[{pluginId:"fusion-plugin-droid-runtime",slotId:"settings-provider-card",componentPath:"./components/settings-provider-card.js",component:Yh},{pluginId:"fusion-plugin-droid-runtime",slotId:"settings-integration-card",componentPath:"./components/settings-integration-card.js",component:Yh},{pluginId:"fusion-plugin-droid-runtime",slotId:"onboarding-provider-card",componentPath:"./components/onboarding-provider-card.js",component:wE},{pluginId:"fusion-plugin-droid-runtime",slotId:"onboarding-setup-help",componentPath:"./components/onboarding-setup-help.js",component:kE},{pluginId:"fusion-plugin-droid-runtime",slotId:"post-onboarding-recommendation",componentPath:"./components/post-onboarding-recommendation.js",component:jE}];function SE(e){return NE.find(s=>s.pluginId===e.pluginId&&s.slotId===e.slot.slotId&&s.componentPath===e.slot.componentPath)?.component??null}function CE({slotId:e,pluginId:n}){return t.jsxs("section",{className:"plugin-slot-shell","data-plugin-slot":!0,"data-slot-id":e,"data-plugin-id":n,"data-plugin-slot-state":"missing-component",role:"status","aria-live":"polite",children:[t.jsx("p",{className:"plugin-slot-shell__title",children:"Plugin component unavailable"}),t.jsx("p",{className:"plugin-slot-shell__message",children:"The dashboard could not resolve this plugin surface from the static host registry."})]})}function va({slotId:e,projectId:n,pluginIds:s,renderPlaceholder:a=!0,actions:r}){const{getSlotsForId:o,loading:l,error:c}=lx(n);if(l||c||!e)return null;const d=o(e).filter(u=>s&&s.length>0?s.includes(u.pluginId):!0);return d.length===0?null:t.jsx(el,{level:"page",children:t.jsx(t.Fragment,{children:d.map((u,h)=>{const m=`${u.pluginId}-${u.slot.slotId}-${h}`,f=SE(u);return f?t.jsx(f,{entry:u,actions:r},m):a?t.jsx(CE,{slotId:u.slot.slotId,pluginId:u.pluginId},m):null})})})}function EE(){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 si(){const[e,n]=i.useState(EE);return i.useEffect(()=>{if(typeof window>"u")return;const s=window.matchMedia("(max-width: 768px)"),a=window.matchMedia("(min-width: 769px) and (max-width: 1024px)"),r=()=>{s.matches?n("mobile"):a.matches?n("tablet"):n("desktop")};return s.addEventListener("change",r),a.addEventListener("change",r),()=>{s.removeEventListener("change",r),a.removeEventListener("change",r)}},[]),e}function Qr(e){return e.replace(/\\/g,"/")}function cm(e){return e.replace(/[\\/]+$/g,"")}function dm(e){const n=Qr(cm(e));return n?n.split("/").filter(Boolean):[]}function um(e){const n=Qr(cm(e));if(!n)return e;const s=n.split("/").filter(Boolean);return s[s.length-1]||n}function dx(e,n){const s=dm(e);return s.length===0?Qr(e):s.slice(-2).join("/")}function _E(e){const n=Qr(cm(e)),s=n.lastIndexOf("/");return s<0?"":n.slice(0,s+1)}function ME(e,n){return!e||e==="."?n:[...dm(e),n].join("/")}function AE(e){const n=dm(e);return n.length===0?".":(n.pop(),n.length===0?".":n.join("/"))}function HB(e){const n=Qr(e),s=n.match(/^([A-Za-z]:)(?:\/(.*))?$/);if(s){const r=`${s[1]}/`,o=(s[2]??"").split("/").filter(Boolean),l=[{label:s[1],path:r}];for(let c=0;c<o.length;c+=1)l.push({label:o[c],path:`${r}${o.slice(0,c+1).join("/")}`});return l}if(n.startsWith("/")){const r=n.split("/").filter(Boolean),o=[{label:"/",path:"/"}];for(let l=0;l<r.length;l+=1)o.push({label:r[l],path:`/${r.slice(0,l+1).join("/")}`});return o}const a=n.split("/").filter(Boolean);return a.map((r,o)=>({label:r,path:a.slice(0,o+1).join("/")}))}const mm=new Map;function ol(e,n){return`plugin:${e}:${n}`}function ux(e){const n=/^plugin:([^:]+):(.+)$/u.exec(e);return n?{pluginId:n[1],viewId:n[2]}:null}function Mr(e){return ux(e)!==null}function vl(e,n,s){mm.set(ol(e,n),s)}function RE(e,n){return mm.get(ol(e,n))??null}function mx(e,n){return mm.has(ol(e,n))}function dd({viewId:e}){return t.jsxs("section",{className:"card plugin-dashboard-view-missing","data-testid":"plugin-view-unavailable",children:[t.jsxs("h2",{className:"plugin-dashboard-view-missing-title",children:[t.jsx(Kr,{}),"Plugin view unavailable"]}),t.jsxs("p",{className:"plugin-dashboard-view-missing-description",children:["No host registration found for ",t.jsx("code",{children:e}),"."]})]})}function IE({viewId:e,context:n}){const s=ux(e);if(!s)return t.jsx(dd,{viewId:e});const a=RE(s.pluginId,s.viewId);return a?t.jsx(el,{fallback:t.jsx(dd,{viewId:e}),children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(a,{context:n})})}):t.jsx(dd,{viewId:e})}const Lo=ol,TE={activity:Bs,bot:Qn,brain:Uo,checksquare:em,clock:sa,filetext:ja,folder:ks,gitbranch:Ps,grid3x3:Nc,layoutgrid:Na,mail:Wa,map:aj,messagesquare:ta,monitor:Pr,search:Fi,sparkles:cs,target:Ss,workflow:ec,zap:rs};function PE(e){return(e??"").trim().toLowerCase().replace(/[-_\s]/g,"")}function rc(e){return TE[PE(e)]??Nc}const yl="__fusion:no-branch__",hx={active:{color:"var(--success)"},paused:{color:"var(--warning)"},errored:{color:"var(--color-error)"},initializing:{color:"var(--info)"}};function $E({projects:e,currentProject:n,onViewAll:s,onSelectProject:a}){const[r,o]=i.useState(!1),l=i.useRef(null);i.useEffect(()=>{if(!r)return;const d=u=>{l.current&&!l.current.contains(u.target)&&o(!1)};return document.addEventListener("mousedown",d),()=>document.removeEventListener("mousedown",d)},[r]),i.useEffect(()=>{if(!r)return;const d=u=>{u.key==="Escape"&&o(!1)};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[r]);const c=i.useCallback(d=>{a?.(d),o(!1)},[a]);return t.jsx("div",{className:"project-selector",ref:l,children:e.length>0&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:`project-selector-trigger${r?" project-selector-trigger--open":""}`,onClick:()=>o(d=>!d),title:n?.name?`Switch project (current: ${n.name})`:"Switch project","aria-label":"Switch project","aria-expanded":r,"aria-haspopup":"listbox","data-testid":"project-selector-trigger",children:[t.jsx("span",{className:"project-selector-trigger-label",children:n?.name??"Projects"}),t.jsx(Cn,{size:12,className:`project-selector-chevron${r?" project-selector-chevron--open":""}`})]}),r&&t.jsxs("div",{className:"project-selector-dropdown",role:"listbox","aria-label":"Select project","data-testid":"project-selector-dropdown",children:[e.map(d=>{const u=n?.id===d.id,h=hx[d.status]?.color;return t.jsxs("button",{className:`project-selector-item${u?" project-selector-item--current":""}`,onClick:()=>c(d),role:"option","aria-selected":u,children:[t.jsx("span",{className:"project-selector-dot",style:{backgroundColor:h||"var(--text-muted)"}}),t.jsxs("div",{className:"project-selector-info",children:[t.jsx("span",{className:"project-selector-name",children:d.name}),t.jsx("span",{className:"project-selector-path",children:dx(d.path)})]}),u&&t.jsx(bs,{size:14,className:"project-selector-check"})]},d.id)}),t.jsx("div",{className:"project-selector-divider",role:"presentation"}),t.jsx("button",{className:"project-selector-manage",onClick:()=>{s(),o(!1)},"data-testid":"manage-projects-action",children:"Manage Projects"})]})]})})}function Qh({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 DE({onOpenSettings:e,onOpenGitHubImport:n,onOpenPlanning:s,onResumePlanning:a,activePlanningSessionCount:r=0,onOpenUsage:o,onOpenActivityLog:l,onOpenSystemStats:c,onOpenMailbox:d,mailboxUnreadCount:u=0,mailboxPendingApprovalCount:h=0,chatHasUnreadResponse:m=!1,stashOrphanCount:f=0,onOpenSchedules:p,onOpenGitManager:g,onOpenNodes:w,showNodesButton:v,onOpenWorkflowSteps:b,onOpenScripts:y,onRunScript:N,onToggleTerminal:S,onOpenFiles:C,filesOpen:x,onOpenTodos:k,todosOpen:R,todosEnabled:z,globalPaused:_,enginePaused:A,onToggleGlobalPause:Q,onToggleEnginePause:H,view:M="board",onChangeView:T,showSkillsTab:F,showAgentsTab:W,searchQuery:oe="",onSearchChange:D,branchFilter:E="",baseBranchFilter:P="",branchOptions:$=[],baseBranchOptions:j=[],onBranchFilterChange:q,onBaseBranchFilterChange:de,projects:be=[],currentProject:Ce,onSelectProject:Ae,onViewAllProjects:ae,projectId:X,shellHost:pe={kind:"browser"},mobileNavEnabled:ie,availableNodes:ye=[],currentNode:ee,onSelectNode:L,isRemote:Y=!1,experimentalFeatures:me,pluginDashboardViews:B=[],shellConnectionControl:xe}){const Ne=si(),te=Ne==="mobile",$e=te||Ne==="tablet",ct=te&&ie,[De,le]=i.useState(!1),[_e,Le]=i.useState(!1),[mt,Ve]=i.useState(!1),[ge,he]=i.useState(!1),[Pe,dt]=i.useState(!1),[jt,nt]=i.useState(!1),[xt,Ie]=i.useState(!1),[Qe,ot]=i.useState(!1),[Tt,Mt]=i.useState(!1),[We,J]=i.useState(!1),[ke,lt]=i.useState(!1),[ve,st]=i.useState({}),[Ue,fe]=i.useState(!1),[Xe,vt]=i.useState(-1),[St,Et]=i.useState(null),[Pt,Jt]=i.useState({}),[dn,Vt]=i.useState(!1),ln=i.useRef(null),fn=i.useRef(null),_n=i.useRef(null),an=i.useRef(null),Dn=i.useRef(null),vn=i.useRef(null),Ut=i.useRef(!1),rn=i.useRef(null),bn=i.useRef(null),en=i.useRef(null),Yt=i.useRef(null),tn=i.useRef(null),Qt=i.useRef(null),Kt=i.useRef(null),xn=i.useRef(null),un=i.useRef(!1),pn=i.useMemo(()=>ye.filter(G=>G.type==="remote"),[ye]),$t=pn.length>0,ue=i.useMemo(()=>Object.entries(ve).sort(([G],[ze])=>G.localeCompare(ze)),[ve]),Re=ue.length>0,et=ue.length+(Re?1:0),at=i.useMemo(()=>Object.entries(Pt).sort(([G],[ze])=>G.localeCompare(ze)),[Pt]),Je=i.useMemo(()=>!!(T||me?.researchView||z||me?.insights||F||me?.memoryView||me?.devServerView||!ct||B.some(G=>G.view.placement!=="primary")),[T,me,z,F,ct,B]),Nt=i.useCallback(()=>{const G=window.visualViewport;return G&&G.width>0&&G.height>0?{width:G.width,height:G.height,offsetTop:G.offsetTop,offsetLeft:G.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),bt=i.useCallback(()=>{const G=Kt.current;if(!G)return;const ze=G.getBoundingClientRect(),Ht=xn.current,{width:gn,height:Mn,offsetTop:je,offsetLeft:pt}=Nt(),Dt=16,Zt=16,Nn=6,Xt=Ht?.offsetWidth||Math.max(ze.width,260),qt=Math.min(Xt,Math.max(gn-Dt*2,160)),Ot=Ht?.offsetHeight||280,qn=Math.min(Ot,Math.max(Mn-Zt*2,160)),On=ze.top-je,os=ze.bottom-je,xs=ze.right-pt,ms=Mn-os,vs=On,as=ms<qn&&vs>ms,Tn=Math.min(Math.max(xs-qt,Dt),gn-Dt-qt)+pt,ys=as?Math.max(Zt+je,On-qn-Nn+je):Math.min(os+Nn+je,Mn+je-Zt-qn);Et({top:ys,left:Tn,width:qt})},[Nt]),At=i.useCallback((G,ze)=>{N?.(G,ze),lt(!1),vt(-1)},[N]),se=i.useCallback(()=>{y?.(),lt(!1),vt(-1)},[y]),re=i.useCallback(G=>{switch(G.key){case"ArrowDown":G.preventDefault(),et>0&&vt(ze=>ze<et-1?ze+1:0);break;case"ArrowUp":G.preventDefault(),et>0&&vt(ze=>ze>0?ze-1:et-1);break;case"Enter":if(G.preventDefault(),Xe>=0)if(Xe<ue.length){const[ze,Ht]=ue[Xe];At(ze,Ht)}else Re&&Xe===ue.length&&se();break;case"Home":G.preventDefault(),et>0&&vt(0);break;case"End":G.preventDefault(),et>0&&vt(et-1);break}},[se,At,Xe,ue,Re,et]);i.useEffect(()=>{Ut.current=Pe},[Pe]),i.useEffect(()=>{un.current=ke},[ke]),i.useEffect(()=>{if(!Pe||!$e)return;let G=!1;return Vt(!0),Vo(X).then(ze=>{G||Jt(ze)}).catch(()=>{G||Jt({})}).finally(()=>{G||Vt(!1)}),()=>{G=!0}},[Pe,$e,X]),i.useEffect(()=>{if(!ke||$e)return;let G=!1;return fe(!0),Vo(X).then(ze=>{G||st(ze)}).catch(()=>{G||st({})}).finally(()=>{G||fe(!1)}),()=>{G=!0}},[ke,$e,X]),i.useEffect(()=>{if(!ke)return;const G=ze=>{Qt.current&&!Qt.current.contains(ze.target)&&lt(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[ke]),i.useEffect(()=>{if(!ke)return;const G=ze=>{ze.key==="Escape"&&(lt(!1),Kt.current?.focus())};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[ke]),i.useEffect(()=>{if(ke){vt(-1);const G=window.setTimeout(()=>xn.current?.focus(),0);return()=>window.clearTimeout(G)}Et(null)},[ke]),i.useEffect(()=>{if(!ke)return;const G=requestAnimationFrame(()=>{bt()});return()=>cancelAnimationFrame(G)},[ke,Ue,ue.length,Re,bt]),i.useEffect(()=>{if(!ke)return;const G=()=>bt();window.addEventListener("resize",G),window.addEventListener("scroll",G,!0);const ze=window.visualViewport;return ze&&(ze.addEventListener("resize",G),ze.addEventListener("scroll",G)),()=>{window.removeEventListener("resize",G),window.removeEventListener("scroll",G,!0),ze&&(ze.removeEventListener("resize",G),ze.removeEventListener("scroll",G))}},[ke,bt]),i.useEffect(()=>{$e&&(lt(!1),vt(-1))},[$e]);const Ge=De||oe.length>0,Ct=(_e||oe.length>0)&&!mt,Gt=(M==="board"||M==="list")&&!te&&D&&!mt&&oe.length===0,cn=(M==="board"||M==="list")&&!te&&D,jn=M==="board";i.useEffect(()=>{oe===""&&Ve(!1)},[oe]),i.useEffect(()=>{if(!ge)return;const G=ze=>{fn.current&&!fn.current.contains(ze.target)&&ln.current&&!ln.current.contains(ze.target)&&he(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[ge]),i.useEffect(()=>{if(!Tt)return;const G=ze=>{an.current&&!an.current.contains(ze.target)&&_n.current&&!_n.current.contains(ze.target)&&Mt(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[Tt]),i.useEffect(()=>{if(!jt)return;const G=ze=>{rn.current&&!rn.current.contains(ze.target)&&nt(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[jt]),i.useEffect(()=>{const G=ze=>{if(ze.key==="Escape"){if(ot(!1),Mt(!1),Ut.current){dt(!1);return}if(un.current){lt(!1),Kt.current?.focus();return}he(!1),le(!1),nt(!1),Ie(!1)}};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[]),i.useEffect(()=>{if(!xt)return;const G=ze=>{bn.current&&!bn.current.contains(ze.target)&&Ie(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[xt]),i.useEffect(()=>{if(!We)return;const G=ze=>{tn.current&&!tn.current.contains(ze.target)&&J(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[We]),i.useEffect(()=>{if(!We)return;const G=ze=>{ze.key==="Escape"&&J(!1)};return document.addEventListener("keydown",G),()=>document.removeEventListener("keydown",G)},[We]),i.useEffect(()=>{if(!Qe)return;const G=ze=>{en.current&&!en.current.contains(ze.target)&&Yt.current&&!Yt.current.contains(ze.target)&&ot(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[Qe]);const Ln=i.useCallback(()=>{le(G=>!G)},[]),mn=i.useCallback(()=>{Le(!0),Ve(!1)},[]),Un=i.useCallback(()=>{Le(!1),Ve(!0),D&&D("")},[D]),ce=i.useCallback(()=>{he(G=>!G)},[]),it=i.useCallback(G=>{G&&G(),he(!1),dt(!1)},[]),ut=i.useCallback(()=>{le(!1),D&&D("")},[D]),wt=pe.kind==="desktop-shell";return t.jsxs("div",{className:"header-wrapper",children:[t.jsxs("header",{className:"header","data-shell-kind":pe.kind,children:[t.jsxs("div",{className:"header-left",children:[t.jsxs("div",{className:"header-brand",children:[t.jsxs("svg",{className:"header-logo",width:24,height:24,viewBox:"0 0 128 128",fill:"none","aria-label":"Fusion logo",role:"img",children:[t.jsx("circle",{cx:"64",cy:"64",r:"52",stroke:"currentColor",strokeWidth:"8"}),t.jsx("path",{d:"M26 101C44 82 62 64 82 45C90 37 98 30 104 24C96 35 89 47 81 60C70 79 57 95 43 108C38 112 32 108 26 101Z",fill:"currentColor"})]}),t.jsx("h1",{className:"logo",children:"Fusion"})]}),te&&be.length>=1&&Ae&&t.jsxs("div",{className:"mobile-project-switch",ref:bn,children:[t.jsx("button",{className:`mobile-project-switch-trigger${xt?" mobile-project-switch-trigger--open":""}`,onClick:()=>Ie(G=>!G),title:"Switch project","aria-label":"Switch project","aria-expanded":xt,"aria-haspopup":"listbox","data-testid":"mobile-project-switch-trigger",children:t.jsx(Cn,{size:14,className:`mobile-project-switch-chevron${xt?" mobile-project-switch-chevron--open":""}`})}),xt&&t.jsx("div",{className:"mobile-project-switch-dropdown",role:"listbox","aria-label":"Select project","data-testid":"mobile-project-switch-dropdown",children:be.map(G=>{const ze=Ce?.id===G.id,Ht=hx[G.status]?.color;return t.jsxs("button",{className:`mobile-project-switch-item${ze?" mobile-project-switch-item--current":""}`,onClick:()=>{Ae(G),Ie(!1)},role:"option","aria-selected":ze,"data-testid":`mobile-project-switch-item-${G.id}`,children:[t.jsx("span",{className:"mobile-project-switch-dot",style:{backgroundColor:Ht||"var(--text-muted)"}}),t.jsxs("div",{className:"mobile-project-switch-info",children:[t.jsx("span",{className:"mobile-project-switch-name",children:G.name}),t.jsx("span",{className:"mobile-project-switch-path",children:dx(G.path)})]}),ze&&t.jsx(bs,{size:14,className:"mobile-project-switch-check"})]},G.id)})})]}),!$e&&be.length>=1&&ae&&t.jsx($E,{projects:be,currentProject:Ce??null,onViewAll:ae,onSelectProject:Ae}),$t&&t.jsxs("div",{className:`header-node-selector${te?" header-node-selector--mobile":""}`,ref:te?void 0:rn,children:[t.jsx(oE,{node:ee??null,showDetails:!te}),!te&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:`btn-icon node-selector-trigger${jt?" node-selector-trigger--open":""}`,onClick:()=>nt(G=>!G),title:"Switch node","aria-label":"Switch node","aria-expanded":jt,"aria-haspopup":"listbox","data-testid":"node-selector-trigger",children:t.jsx(Vn,{size:12,className:`node-selector-chevron${jt?" node-selector-chevron--open":""}`})}),jt&&t.jsxs("div",{className:"node-selector-dropdown",role:"listbox","aria-label":"Select node",children:[t.jsxs("button",{className:`node-selector-option${Y?"":" node-selector-option--active"}`,onClick:()=>{L?.(null),nt(!1)},role:"option","aria-selected":!Y,"data-testid":"node-option-local",children:[t.jsx(Ka,{status:"online",compact:!0}),t.jsx("span",{className:"node-selector-option-label",children:"Local"})]}),pn.map(G=>t.jsxs("button",{className:`node-selector-option${ee?.id===G.id?" node-selector-option--active":""}`,onClick:()=>{L?.(G),nt(!1)},role:"option","aria-selected":ee?.id===G.id,"data-testid":`node-option-${G.id}`,children:[t.jsx(Ka,{status:G.status,compact:!0}),t.jsx("span",{className:"node-selector-option-label",children:G.name}),t.jsx("span",{className:"node-selector-option-status",children:G.status})]},G.id))]})]})]})]}),t.jsxs("div",{className:"header-actions",children:[xe,ct&&T&&(M==="board"||M==="list")&&t.jsxs("div",{className:"view-toggle","data-testid":"mobile-view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${M==="board"?" active":""}`,onClick:()=>T("board"),title:"Board view","aria-label":"Board view","aria-pressed":M==="board","data-testid":"mobile-view-toggle-board",children:t.jsx(Na,{size:16})}),t.jsx("button",{className:`view-toggle-btn${M==="list"?" active":""}`,onClick:()=>T("list"),title:"List view","aria-label":"List view","aria-pressed":M==="list","data-testid":"mobile-view-toggle-list",children:t.jsx(xu,{size:16})})]}),D&&te&&(ct||M==="board"||M==="list")&&!Ge&&t.jsx("button",{className:"btn-icon mobile-search-trigger",onClick:Ln,title:"Open search","aria-label":"Open search","aria-expanded":!1,"data-testid":"mobile-header-search-btn",children:t.jsx(Fi,{size:16})}),Gt&&t.jsx("button",{className:"btn-icon",onClick:mn,title:"Open search","aria-label":"Open search","data-testid":"desktop-header-search-btn",children:t.jsx(Fi,{size:16})}),te&&ct&&o&&t.jsx("button",{className:"btn-icon",onClick:G=>o(G.currentTarget.getBoundingClientRect()),title:"View usage","data-testid":"mobile-header-usage-btn",children:t.jsx(Bs,{size:16})}),!ct&&T&&t.jsxs("div",{className:"view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${M==="board"?" active":""}`,onClick:()=>T("board"),title:"Board view","aria-label":"Board view","aria-pressed":M==="board",children:t.jsx(Na,{size:16})}),t.jsx("button",{className:`view-toggle-btn${M==="list"?" active":""}`,onClick:()=>T("list"),title:"List view","aria-label":"List view","aria-pressed":M==="list",children:t.jsx(xu,{size:16})}),W&&t.jsx("button",{className:`view-toggle-btn${M==="agents"?" active":""}`,onClick:()=>T("agents"),title:"Agents view","aria-label":"Agents view","aria-pressed":M==="agents",children:t.jsx(Qn,{size:16})}),t.jsx("button",{className:`view-toggle-btn${M==="missions"?" active":""}`,onClick:()=>T("missions"),title:"Missions view","aria-label":"Missions view","aria-pressed":M==="missions",children:t.jsx(Ss,{size:16})}),t.jsxs("button",{className:`view-toggle-btn${M==="chat"?" active":""}`,onClick:()=>T("chat"),title:"Chat view","aria-label":"Chat view","aria-pressed":M==="chat","data-testid":"header-chat-view-btn",children:[t.jsx(ta,{size:16}),m&&M!=="chat"&&t.jsx("span",{className:"status-dot status-dot--pending header-chat-unread-dot","aria-label":"Unread chat response"})]}),t.jsx("button",{className:`view-toggle-btn${M==="documents"?" active":""}`,onClick:()=>T("documents"),title:"Documents view","aria-label":"Documents view","aria-pressed":M==="documents",children:t.jsx(ja,{size:16})}),t.jsxs("button",{className:`view-toggle-btn${M==="mailbox"?" active":""}`,onClick:()=>T("mailbox"),title:"Mailbox view","aria-label":"Mailbox view","aria-pressed":M==="mailbox",children:[t.jsx(Wa,{size:16}),h>0&&M!=="mailbox"&&t.jsx("span",{className:"status-dot status-dot--pending header-chat-unread-dot","aria-label":"Pending approvals"})]}),B.filter(G=>G.view.placement==="primary").sort((G,ze)=>(G.view.order??Number.MAX_SAFE_INTEGER)-(ze.view.order??Number.MAX_SAFE_INTEGER)).map(G=>{const ze=Lo(G.pluginId,G.view.viewId),Ht=rc(G.view.icon);return t.jsx("button",{className:`view-toggle-btn${M===ze||M==="graph"&&G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?" active":""}`,onClick:()=>T(G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?"graph":ze),title:`${G.view.label} view`,"aria-label":`${G.view.label} view`,"aria-pressed":M===ze,"data-testid":`view-toggle-plugin-${G.pluginId}-${G.view.viewId}`,children:t.jsx(Ht,{size:16})},`${G.pluginId}:${G.view.viewId}`)}),Je&&t.jsxs(t.Fragment,{children:[t.jsx("button",{ref:Yt,className:`view-toggle-btn${["research","skills","insights","memory","reliability","dev-server","devserver","graph","stash-recovery"].includes(M)||me?.evalsView&&M==="evals"||z&&R||Mr(M)?" active":""}`,onClick:()=>ot(G=>!G),title:"More views","aria-label":"More views","aria-haspopup":"menu","aria-expanded":Qe,"data-testid":"view-toggle-overflow-trigger",children:t.jsx(Cn,{size:12})}),Qe&&t.jsxs("div",{ref:en,className:"view-toggle-overflow-menu",role:"menu","aria-label":"More views",children:[me?.evalsView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="evals"?" active":""}`,onClick:()=>{T("evals"),ot(!1)},role:"menuitem","data-testid":"view-overflow-evals",children:[t.jsx(Ss,{size:14}),t.jsx("span",{children:"Evals"})]}),t.jsxs("button",{className:`view-toggle-overflow-item${M==="stash-recovery"?" active":""}`,onClick:()=>{T("stash-recovery"),ot(!1)},role:"menuitem","data-testid":"view-overflow-stash-recovery",children:[t.jsx(qa,{size:14}),t.jsx("span",{children:"Stash Recovery"}),f>0?t.jsx("span",{className:"btn-badge",children:f}):null]}),me?.researchView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="research"?" active":""}`,onClick:()=>{T("research"),ot(!1)},role:"menuitem","data-testid":"view-overflow-research",children:[t.jsx(Fi,{size:14}),t.jsx("span",{children:"Research"})]}),me?.insights&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="insights"?" active":""}`,onClick:()=>{T("insights"),ot(!1)},role:"menuitem","data-testid":"view-overflow-insights",children:[t.jsx(cs,{size:14}),t.jsx("span",{children:"Insights"})]}),F&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="skills"?" active":""}`,onClick:()=>{T("skills"),ot(!1)},role:"menuitem","data-testid":"view-overflow-skills",children:[t.jsx(rs,{size:14}),t.jsx("span",{children:"Skills"})]}),me?.memoryView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="memory"?" active":""}`,onClick:()=>{T("memory"),ot(!1)},role:"menuitem","data-testid":"view-toggle-memory",children:[t.jsx(Uo,{size:14}),t.jsx("span",{children:"Memory"})]}),t.jsxs("button",{className:`view-toggle-overflow-item${M==="reliability"?" active":""}`,onClick:()=>{T("reliability"),ot(!1)},role:"menuitem","data-testid":"view-overflow-reliability",children:[t.jsx(Bs,{size:14}),t.jsx("span",{children:"Reliability"})]}),me?.devServerView&&t.jsxs("button",{className:`view-toggle-overflow-item${M==="dev-server"||M==="devserver"?" active":""}`,onClick:()=>{T("devserver"),ot(!1)},role:"menuitem","data-testid":"view-toggle-devserver",children:[t.jsx(Pr,{size:14}),t.jsx("span",{children:"Dev Server"}),t.jsx("span",{className:"visually-hidden","data-testid":"view-toggle-dev-server"})]}),z&&k&&t.jsxs("button",{className:`view-toggle-overflow-item${R?" active":""}`,onClick:()=>{k(),ot(!1)},role:"menuitem","data-testid":"view-overflow-todos",children:[t.jsx(em,{size:14}),t.jsx("span",{children:"Todos"})]}),B.filter(G=>G.view.placement!=="primary").sort((G,ze)=>(G.view.order??Number.MAX_SAFE_INTEGER)-(ze.view.order??Number.MAX_SAFE_INTEGER)).map(G=>{const ze=Lo(G.pluginId,G.view.viewId),Ht=rc(G.view.icon);return t.jsxs("button",{className:`view-toggle-overflow-item${M===ze||M==="graph"&&G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?" active":""}`,onClick:()=>{T(G.pluginId==="fusion-plugin-dependency-graph"&&G.view.viewId==="graph"?"graph":ze),ot(!1)},role:"menuitem","data-testid":`view-overflow-plugin-${G.pluginId}-${G.view.viewId}`,children:[t.jsx(Ht,{size:14}),t.jsx("span",{children:G.view.label})]},`${G.pluginId}:${G.view.viewId}`)})]})]})]}),!$e&&o&&t.jsx("button",{className:"btn-icon",onClick:G=>o(G.currentTarget.getBoundingClientRect()),title:"View usage","data-testid":"desktop-header-usage-btn",children:t.jsx(Bs,{size:16})}),!$e&&c&&t.jsx("button",{className:"btn-icon",onClick:c,title:"System Stats","data-testid":"desktop-header-system-stats-btn",children:t.jsx(Pr,{size:16})}),!$e&&l&&t.jsx("button",{className:"btn-icon",onClick:l,title:"View Activity Log",children:t.jsx(qa,{size:16})}),!$e&&!wt&&t.jsx("button",{className:"btn-icon",onClick:n,title:"Import from GitHub",children:t.jsx(Qh,{size:16})}),!$e&&t.jsxs("button",{className:`btn-icon${r>0?" btn-icon--has-indicator":""}`,onClick:r>0&&a?a:s,title:r>0?"Resume planning session":"Create a task with AI planning","data-testid":"planning-btn",style:{position:"relative"},children:[t.jsx(Bi,{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})]}),!$e&&t.jsxs("div",{className:"terminal-split-btn",ref:Qt,children:[t.jsx("button",{className:"btn-icon btn-icon--terminal terminal-split-btn__main",onClick:S,title:"Open Terminal","data-testid":"terminal-toggle-btn",children:t.jsx(na,{size:16})}),y&&N&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"terminal-split-btn__divider"}),t.jsx("button",{ref:Kt,className:`btn-icon terminal-split-btn__chevron${ke?" btn-icon--active":""}`,onClick:()=>lt(G=>!G),title:"Scripts","aria-haspopup":"listbox","aria-expanded":ke,"aria-label":"Quick scripts","data-testid":"scripts-btn",children:t.jsx(Cn,{size:12,className:`quick-scripts-dropdown__trigger-chevron${ke?" rotate":""}`})}),ke&&t.jsx("div",{ref:xn,tabIndex:-1,className:"quick-scripts-dropdown__menu",role:"listbox","aria-label":"Scripts",onKeyDown:re,"data-testid":"quick-scripts-dropdown",style:St?{position:"fixed",top:`${St.top}px`,left:`${St.left}px`,width:`${St.width}px`,right:"auto"}:void 0,children:Ue?t.jsxs("div",{className:"quick-scripts-dropdown__loading","data-testid":"quick-scripts-loading",children:[t.jsx(_t,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Loading scripts..."})]}):ue.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(na,{size:16})}),t.jsx("p",{children:"No scripts configured"}),t.jsx("button",{className:"quick-scripts-dropdown__empty-action btn",onClick:se,children:"Add your first script"})]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"quick-scripts-dropdown__list",children:ue.map(([G,ze],Ht)=>t.jsxs("button",{className:`quick-scripts-dropdown__item ${Xe===Ht?"highlighted":""}`,onClick:()=>At(G,ze),role:"option","aria-selected":Xe===Ht,"data-testid":`quick-script-item-${G}`,children:[t.jsx(is,{size:14,className:"quick-scripts-dropdown__item-icon"}),t.jsxs("div",{className:"quick-scripts-dropdown__item-info",children:[t.jsx("span",{className:"quick-scripts-dropdown__item-name",children:G}),t.jsx("span",{className:"quick-scripts-dropdown__item-command",title:ze,children:ze.length>50?`${ze.slice(0,50)}...`:ze})]})]},G))}),t.jsx("div",{className:"quick-scripts-dropdown__footer",children:t.jsxs("button",{className:`quick-scripts-dropdown__manage ${Re&&Xe===ue.length?"highlighted":""}`,onClick:se,"data-testid":"quick-scripts-manage",children:[t.jsx(Do,{size:14}),t.jsx("span",{children:"Manage Scripts..."})]})})]})})]})]}),!$e&&C&&t.jsx("button",{className:`btn-icon${x?" btn-icon--active":""}`,onClick:()=>C(),title:"Browse files","data-testid":"files-toggle-btn",children:t.jsx(ks,{size:16})}),!$e&&g&&t.jsx("button",{className:"btn-icon",onClick:g,title:"Git Manager","data-testid":"git-manager-btn",children:t.jsx(Ps,{size:16})}),!$e&&b&&t.jsx("button",{className:"btn-icon",onClick:b,title:"Workflow Steps","data-testid":"workflow-steps-btn",children:t.jsx(ec,{size:16})}),!$e&&t.jsxs("div",{style:{position:"relative"},children:[t.jsx("button",{ref:_n,className:"btn-icon",onClick:()=>Mt(G=>!G),title:"More actions","aria-label":"More actions","aria-expanded":Tt,"aria-haspopup":"menu","data-testid":"desktop-overflow-trigger",children:t.jsx(fu,{size:16})}),Tt&&t.jsxs("div",{ref:an,className:"desktop-overflow-menu",role:"menu","aria-label":"More actions",children:[w&&v!==!1&&t.jsxs("button",{className:"view-toggle-overflow-item",onClick:()=>{w(),Mt(!1)},role:"menuitem","data-testid":"desktop-overflow-nodes-btn",children:[t.jsx(Ho,{size:14}),t.jsx("span",{children:"Nodes"})]}),t.jsxs("button",{className:"view-toggle-overflow-item",onClick:()=>{it(p),Mt(!1)},role:"menuitem","data-testid":"desktop-overflow-schedules-btn",children:[t.jsx(sa,{size:14}),t.jsx("span",{children:"Automation"})]})]})]}),t.jsxs("div",{className:"engine-control-split-btn",ref:tn,children:[t.jsx("button",{className:`btn-icon engine-control-split-btn__main${_?" btn-icon--stopped":""}`,onClick:Q,title:_?"Start AI engine":"Stop AI engine","data-testid":"engine-control-main-btn",children:_?t.jsx(is,{size:16}):t.jsx(Oi,{size:16})}),t.jsx("span",{className:"engine-control-split-btn__divider"}),t.jsx("button",{className:`btn-icon engine-control-split-btn__chevron${We?" btn-icon--active":""}`,onClick:()=>J(G=>!G),title:"Engine options","aria-haspopup":"menu","aria-expanded":We,"data-testid":"engine-control-chevron-btn",children:t.jsx(Cn,{size:12})}),We&&t.jsx("div",{className:"engine-control-split-btn__menu",role:"menu",children:t.jsxs("button",{className:`engine-control-split-btn__menu-item${A?" engine-control-split-btn__menu-item--active":""}`,onClick:()=>{H?.(),J(!1)},role:"menuitem",title:A?"Resume scheduling":"Pause triage",disabled:!!_,"data-testid":"engine-control-pause-triage-btn",children:[A?t.jsx(is,{size:14}):t.jsx(ui,{size:14}),t.jsx("span",{children:A?"Resume scheduling":"Pause triage"})]})})]}),!$e&&t.jsx("button",{className:"btn-icon",onClick:e,title:"Settings",children:t.jsx(Do,{size:16})}),t.jsx(va,{slotId:"header-action",projectId:X}),$e&&!ct&&t.jsx("button",{ref:ln,className:"btn-icon compact-overflow-trigger",onClick:ce,title:"More header actions","aria-label":"More header actions","aria-expanded":ge,"aria-haspopup":"menu",children:t.jsx(fu,{size:16})}),$e&&!ct&&ge&&t.jsxs("div",{ref:fn,className:"mobile-overflow-menu",role:"menu","aria-label":"Additional header actions",children:[be.length>=1&&ae&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(ae),role:"menuitem","data-testid":"overflow-project-selector-btn",children:[t.jsx(Nc,{size:16}),t.jsx("span",{children:"Projects"})]}),C&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(C),role:"menuitem","data-testid":"overflow-files-btn",children:[t.jsx(ks,{size:16}),t.jsx("span",{children:"Browse Files"})]}),t.jsxs("button",{className:`mobile-overflow-item${r>0?" mobile-overflow-item--has-indicator":""}`,onClick:()=>it(r>0&&a?a:s),role:"menuitem","data-testid":"overflow-planning-btn",children:[t.jsxs("span",{className:"mobile-overflow-icon-wrapper",children:[t.jsx(Bi,{size:16}),r>0&&t.jsx("span",{className:"header-badge header-badge--pulse","data-testid":"overflow-planning-badge",children:r})]}),t.jsx("span",{children:r>0?`Resume planning session (${r})`:"Create a task with AI planning"})]}),g&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(g),role:"menuitem","data-testid":"overflow-git-btn",children:[t.jsx(Ps,{size:16}),t.jsx("span",{children:"Git Manager"})]}),w&&v!==!1&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(w),role:"menuitem","data-testid":"overflow-nodes-btn",children:[t.jsx(Ho,{size:16}),t.jsx("span",{children:"Nodes"})]}),!wt&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(n),role:"menuitem",children:[t.jsx(Qh,{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:()=>it(S),role:"menuitem","data-testid":"overflow-terminal-primary-btn",children:[t.jsx(na,{size:16}),t.jsx("span",{children:"Terminal"})]}),t.jsx("button",{className:"mobile-overflow-split-toggle",onClick:()=>dt(G=>!G),role:"menuitem","aria-expanded":Pe,"aria-haspopup":"menu","aria-label":"Show scripts","data-testid":"overflow-terminal-submenu-toggle",children:t.jsx(Vn,{size:14,className:`mobile-overflow-chevron${Pe?" mobile-overflow-chevron--open":""}`})})]}),Pe&&t.jsx("div",{className:"mobile-overflow-submenu",role:"menu","aria-label":"Scripts submenu",children:dn?t.jsxs("div",{className:"mobile-overflow-submenu-loading","data-testid":"overflow-scripts-loading",children:[t.jsx(_t,{size:14,className:"animate-spin"}),t.jsx("span",{children:"Loading scripts…"})]}):at.length>0?t.jsxs(t.Fragment,{children:[at.map(([G,ze])=>t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem",onClick:()=>{N&&N(G,ze),he(!1),dt(!1)},role:"menuitem","data-testid":`overflow-script-item-${G}`,children:[t.jsx(is,{size:14}),t.jsx("span",{children:G})]},G)),y&&t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem mobile-overflow-subitem--manage",onClick:()=>it(y),role:"menuitem","data-testid":"overflow-scripts-manage",children:[t.jsx(Ni,{size:14}),t.jsx("span",{children:"Manage Scripts…"})]})]}):y&&t.jsxs("button",{className:"mobile-overflow-item mobile-overflow-subitem",onClick:()=>it(y),role:"menuitem","data-testid":"overflow-scripts-manage",children:[t.jsx(Ni,{size:14}),t.jsx("span",{children:"No scripts — add one…"})]})})]}),t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(p),role:"menuitem","data-testid":"overflow-schedules-btn",children:[t.jsx(sa,{size:16}),t.jsx("span",{children:"Automation"})]}),l&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(l),role:"menuitem","data-testid":"overflow-activity-log-btn",children:[t.jsx(qa,{size:16}),t.jsx("span",{children:"View Activity Log"})]}),d&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(d),role:"menuitem","data-testid":"overflow-mailbox-btn",children:[t.jsx(Wa,{size:16}),t.jsxs("span",{children:["Mailbox",u>0?` (${u})`:""]}),h>0&&t.jsx("span",{className:"header-badge","data-testid":"overflow-mailbox-approval-badge",children:h})]}),o&&t.jsxs("button",{className:"mobile-overflow-item",onClick:G=>it(()=>o(G.currentTarget.getBoundingClientRect())),role:"menuitem","data-testid":"overflow-usage-btn",children:[t.jsx(Bs,{size:16}),t.jsx("span",{children:"View Usage"})]}),b&&t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(b),role:"menuitem","data-testid":"overflow-workflow-steps-btn",children:[t.jsx(ec,{size:16}),t.jsx("span",{children:"Workflow Steps"})]}),t.jsxs("button",{className:"mobile-overflow-item",onClick:()=>it(e),role:"menuitem",children:[t.jsx(Do,{size:16}),t.jsx("span",{children:"Settings"})]})]})]})]}),cn&&Ct&&t.jsxs("div",{className:"header-floating-search",children:[t.jsxs("div",{className:"header-search",children:[t.jsx(Fi,{size:14,className:"header-search-icon"}),t.jsx("input",{autoFocus:!0,type:"text",placeholder:"Search tasks...",value:oe,onChange:G=>D(G.target.value),className:"header-search-input"}),t.jsx("button",{className:"header-search-clear",onClick:Un,"aria-label":"Close search",children:t.jsx(kn,{size:14})})]}),jn&&t.jsxs("div",{className:"header-branch-filters","data-testid":"header-branch-filters-desktop",children:[t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Working branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:E,onChange:G=>q?.(G.target.value),"data-testid":"working-branch-filter",children:[t.jsx("option",{value:"",children:"All working branches"}),t.jsx("option",{value:yl,children:"No working branch"}),$.map(G=>t.jsx("option",{value:G,children:G},G))]})]}),t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Base branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:P,onChange:G=>de?.(G.target.value),"data-testid":"target-branch-filter",children:[t.jsx("option",{value:"",children:"All base branches"}),t.jsx("option",{value:yl,children:"No base branch"}),j.map(G=>t.jsx("option",{value:G,children:G},G))]})]})]})]}),D&&te&&Ge&&t.jsxs("div",{className:"header-floating-search",children:[t.jsxs("div",{ref:Dn,className:"header-search mobile-search-expanded",children:[t.jsx(Fi,{size:14,className:"header-search-icon"}),t.jsx("input",{ref:vn,autoFocus:!0,type:"text",placeholder:"Search tasks...",value:oe,onChange:G=>D(G.target.value),className:"header-search-input"}),t.jsx("button",{className:"header-search-clear",onClick:ut,"aria-label":"Close search",children:t.jsx(kn,{size:14})})]}),jn&&t.jsxs("div",{className:"header-branch-filters","data-testid":"header-branch-filters-mobile",children:[t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Working branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:E,onChange:G=>q?.(G.target.value),"data-testid":"working-branch-filter-mobile",children:[t.jsx("option",{value:"",children:"All working branches"}),t.jsx("option",{value:yl,children:"No working branch"}),$.map(G=>t.jsx("option",{value:G,children:G},G))]})]}),t.jsxs("label",{className:"header-branch-filter-label",children:[t.jsx("span",{children:"Base branch"}),t.jsxs("select",{className:"header-branch-filter-select",value:P,onChange:G=>de?.(G.target.value),"data-testid":"target-branch-filter-mobile",children:[t.jsx("option",{value:"",children:"All base branches"}),t.jsx("option",{value:yl,children:"No base branch"}),j.map(G=>t.jsx("option",{value:G,children:G},G))]})]})]})]})]})}function Xh(e){return e==="urgent"?3:e==="high"?2:e==="low"?0:1}function Zh(e,n){return Xh(n)-Xh(e)}function ud(e,n){const s=Number.parseInt(e.slice(e.lastIndexOf("-")+1),10),a=Number.parseInt(n.slice(n.lastIndexOf("-")+1),10);return Number.isFinite(s)&&Number.isFinite(a)&&s!==a?s-a:e.localeCompare(n)}function ep(e){const n=e.columnMovedAt??e.updatedAt??e.createdAt,s=Date.parse(n);return Number.isFinite(s)?s:0}function tp(e){return e==="merging"||e==="merging-pr"||e==="merging-fix"}function px(e,n){return n==="todo"?[...e].sort((s,a)=>{const r=Zh(s.priority,a.priority);return r!==0?r:s.createdAt!==a.createdAt?s.createdAt.localeCompare(a.createdAt):ud(s.id,a.id)}):[...e].sort((s,a)=>{if(n==="done"){const o=ep(a)-ep(s);return o!==0?o:ud(s.id,a.id)}if(n==="in-review"){const o=tp(s.status),l=tp(a.status);if(o!==l)return o?-1:1}const r=Zh(s.priority,a.priority);return r!==0?r:ud(s.id,a.id)})}function LE(e,n=1400){const s=i.useRef(null),[a,r]=i.useState(!1),o=i.useRef(null);return i.useEffect(()=>(s.current!==null&&e>s.current&&(r(!0),o.current=setTimeout(()=>r(!1),n)),s.current=e,()=>{o.current!==null&&clearTimeout(o.current)}),[e,n]),a}function OE({isOpen:e,options:n,onConfirm:s,onCancel:a}){const r=i.useRef(null);return i.useEffect(()=>{if(!e)return;r.current?.focus();const o=l=>{l.key==="Escape"&&(l.preventDefault(),a())};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[e,a]),!e||!n?null:t.jsx("div",{className:"modal-overlay open confirm-dialog-overlay",onClick:a,children:t.jsxs("div",{className:"modal confirm-dialog",onClick:o=>o.stopPropagation(),role:"dialog","aria-modal":"true","aria-label":n.title,children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:n.title}),t.jsx("button",{className:"modal-close",onClick:a,"aria-label":"Close confirmation dialog",children:"×"})]}),t.jsx("div",{className:"confirm-dialog__body",children:n.message}),t.jsxs("div",{className:"modal-actions confirm-dialog__actions",children:[t.jsx("button",{ref:r,className:"btn",onClick:a,children:n.cancelLabel??"Cancel"}),t.jsx("button",{className:`btn ${n.danger?"btn-danger":"btn-primary"}`,onClick:s,children:n.confirmLabel??"Confirm"})]})]})})}const fx=i.createContext(null);function FE({children:e}){const[n,s]=i.useState([]),a=i.useRef([]),r=i.useCallback(u=>{s(h=>{const m=u(h);return a.current=m,m})},[]),o=i.useCallback(u=>new Promise(h=>{r(m=>[...m,{options:u,resolve:h}])}),[r]),l=i.useCallback(u=>{const h=a.current[0];h&&(h.resolve(u),r(m=>m.slice(1)))},[r]),c=n[0]??null,d=i.useMemo(()=>({confirm:o}),[o]);return wa.createElement(fx.Provider,{value:d},e,wa.createElement(OE,{isOpen:c!==null,options:c?.options??null,onConfirm:()=>l(!0),onCancel:()=>l(!1)}))}function ii(){const e=i.useContext(fx);return e||{confirm:async n=>!1}}function zE(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 BE({prInfo:e,issueInfo:n,onIssueRefresh:s}){return t.jsxs(t.Fragment,{children:[e&&t.jsxs("a",{className:`card-github-badge card-github-badge--${e.status}`,title:`PR #${e.number}: ${e.title}`,href:e.url,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(Xs,{size:10}),t.jsxs("span",{children:["#",e.number]})]}),n&&t.jsxs("a",{className:`card-github-badge ${zE(n.state,n.stateReason)}`,title:`Issue #${n.number}: ${n.title}`,href:n.url,target:"_blank",rel:"noopener noreferrer",children:[t.jsx(kc,{size:10}),t.jsxs("span",{children:["#",n.number]})]})]})}function wl(e,n){return`${e??"default"}:${n}`}class hm{ws=null;listeners=new Set;badgeUpdates=new Map;retainedBadgeUpdates=new Map;subscriptionsByTask=new Map;reconnectTimeout=null;reconnectDelayMs=1e3;shouldReconnect=!1;isConnected=!1;projectId=null;snapshot={badgeUpdates:new Map,isConnected:!1};previousProjectIdRef=null;projectContextVersionRef=0;contextVersionAtStart=0;static RETAINED_BADGE_CAP=200;subscribe(n){return this.listeners.add(n),()=>{this.listeners.delete(n)}}getSnapshot(){return this.snapshot}setProjectId(n){if(this.projectId===n)return;this.previousProjectIdRef=this.projectId,this.projectContextVersionRef++,this.contextVersionAtStart=this.projectContextVersionRef;const s=this.subscriptionsByTask.size>0,a=[];for(const[r,o]of this.subscriptionsByTask){const l=r.split(":").slice(1).join(":");for(const c of o)a.push({hookId:c,taskId:l})}if(this.projectId=n,this.reset(),s){for(const{hookId:r,taskId:o}of a){const l=wl(this.projectId,o);this.subscriptionsByTask.set(l,new Set([r]))}this.shouldReconnect=this.subscriptionsByTask.size>0,this.connect()}}subscribeTask(n,s){const a=wl(this.projectId,s),r=this.retainedBadgeUpdates.get(a);r&&!this.badgeUpdates.has(a)&&(this.badgeUpdates.set(a,r),this.retainedBadgeUpdates.delete(a),this.emit());const o=this.subscriptionsByTask.get(a)??new Set,l=!o.has(n);o.add(n),this.subscriptionsByTask.set(a,o),this.shouldReconnect=this.subscriptionsByTask.size>0,this.connect(),l&&this.send({type:"subscribe",taskId:s,projectId:this.projectId})}unsubscribeTask(n,s){const a=wl(this.projectId,s),r=this.subscriptionsByTask.get(a);if(r){if(r.delete(n),r.size===0){this.subscriptionsByTask.delete(a);const o=this.badgeUpdates.get(a);if(o)for(this.retainedBadgeUpdates.delete(a),this.retainedBadgeUpdates.set(a,o);this.retainedBadgeUpdates.size>hm.RETAINED_BADGE_CAP;){const l=this.retainedBadgeUpdates.keys().next().value;if(!l)break;this.retainedBadgeUpdates.delete(l)}this.badgeUpdates.delete(a),this.send({type:"unsubscribe",taskId:s,projectId:this.projectId}),this.emit()}this.shouldReconnect=this.subscriptionsByTask.size>0,this.shouldReconnect||this.disconnect()}}cleanupHook(n){for(const s of[...this.subscriptionsByTask.keys()]){const a=s.split(":").slice(1).join(":");this.unsubscribeTask(n,a)}}reset(){this.disconnect(),this.badgeUpdates.clear(),this.retainedBadgeUpdates.clear(),this.subscriptionsByTask.clear(),this.shouldReconnect=!1,this.emit()}connect(){if(!this.shouldReconnect||typeof window>"u"||this.ws&&(this.ws.readyState===WebSocket.OPEN||this.ws.readyState===WebSocket.CONNECTING))return;const n=this.projectContextVersionRef;let a=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/ws`;this.projectId&&(a+=`?projectId=${encodeURIComponent(this.projectId)}`);const r=new WebSocket(Ci(a));this.ws=r,r.onopen=()=>{if(this.projectContextVersionRef!==n){r.close();return}this.isConnected=!0,this.reconnectDelayMs=1e3,this.emit();const o=new Set;for(const l of this.subscriptionsByTask.keys()){const c=l.split(":").slice(1).join(":");o.add(c)}for(const l of o)this.send({type:"subscribe",taskId:l,projectId:this.projectId})},r.onmessage=o=>{if(this.projectContextVersionRef===n)try{const l=JSON.parse(o.data);if(l.type!=="badge:updated"||l.projectId!==void 0&&l.projectId!==this.projectId)return;const c=wl(this.projectId,l.taskId),d=this.badgeUpdates.get(c);this.badgeUpdates.set(c,{prInfo:np(l,"prInfo")?l.prInfo??null:d?.prInfo,issueInfo:np(l,"issueInfo")?l.issueInfo??null:d?.issueInfo,timestamp:l.timestamp}),this.emit()}catch{}},r.onclose=()=>{this.projectContextVersionRef===n&&(this.ws=null,this.isConnected&&(this.isConnected=!1,this.emit()),this.shouldReconnect&&this.scheduleReconnect(n))},r.onerror=()=>{}}disconnect(){if(this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=null),this.ws){const n=this.ws;this.ws=null,n.close()}this.isConnected&&(this.isConnected=!1,this.emit())}scheduleReconnect(n){if(this.reconnectTimeout)return;const s=n??this.projectContextVersionRef,a=Math.min(this.reconnectDelayMs,5e3);this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,this.projectContextVersionRef===s&&this.shouldReconnect&&this.connect()},a),this.reconnectDelayMs=Math.min(this.reconnectDelayMs*2,5e3)}send(n){!this.ws||this.ws.readyState!==WebSocket.OPEN||this.ws.send(JSON.stringify(n))}emit(){this.snapshot={badgeUpdates:new Map(this.badgeUpdates),isConnected:this.isConnected};for(const n of this.listeners)n()}}const Fa=new hm;let UE=0;function np(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function HE(e){const n=i.useRef(null);n.current===null&&(n.current=`badge-hook-${UE++}`);const s=i.useSyncExternalStore(o=>Fa.subscribe(o),()=>Fa.getSnapshot(),()=>Fa.getSnapshot()),a=i.useCallback(o=>{Fa.subscribeTask(n.current,o)},[]),r=i.useCallback(o=>{Fa.unsubscribeTask(n.current,o)},[]);return i.useEffect(()=>{Fa.setProjectId(e??null)},[e]),i.useEffect(()=>()=>{Fa.cleanupHook(n.current)},[]),{badgeUpdates:s.badgeUpdates,isConnected:s.isConnected,subscribeToBadge:a,unsubscribeFromBadge:r}}const qE={data:new Map},VE=5e3;function WE(e,n){return n?`${n}::${e}`:e}function GE(e,n){const s=qE.data.get(WE(e,n));if(!(!s||Date.now()-s.timestamp>VE))return s}const Cu=new Map,KE=3e4;function gx(e,n,s,a,r){return`${e}:${n??""}:${s??""}:${a??""}:${r??""}`}function JE(e,n,s,a,r){const o=gx(e,n,s,a,r),l=Cu.get(o);return l?Date.now()>l.expiresAt?(Cu.delete(o),null):l.stats:null}function YE(e,n,s,a,r,o){const l=gx(e,n,s,a,r);Cu.set(l,{stats:o,expiresAt:Date.now()+KE})}function QE(e,n,s,a,r={}){const o=r.enabled??!0,l=r.worktree,c=r.stepVersion,d=r.pollIntervalMs,[u,h]=i.useState(null),[m,f]=i.useState(!1);return i.useEffect(()=>{if(!o){h(null),f(!1);return}const p=n==="done",g=n==="in-progress"||n==="in-review";if(!e||!p&&!g){h(null),f(!1);return}const w=g?l:void 0,v=c!==void 0?String(c):void 0,b=p?"done":"active";let y=!1;async function N(C=!1){if(!C){const x=JE(e,a,w,v,b);if(x){y||(h(x),f(!1));return}}f(!0);try{const x=await tx(e,w,a);y||(h(x.stats),YE(e,a,w,v,b,x.stats))}catch{y||h(null)}finally{y||f(!1)}}N();let S;return d&&g&&(S=setInterval(()=>{N(!0)},d)),()=>{y=!0,S&&clearInterval(S)}},[e,n,s,a,o,l,c,d]),{stats:u,loading:m}}const XE=new Set(["failed","stuck-killed"]);function oc(e,n,s){if(e.column!=="in-progress"||e.status&&XE.has(e.status)||!n||n<=0)return!1;const a=new Date(e.updatedAt).getTime();return(s??Date.now())-a>n}function ZE(e){return e.stalledReview}const e_=new Set(["in-progress","in-review"]),t_=new Set(["triage","todo","in-progress","in-review"]);function n_(e,n){return!e||e.column==="done"||e.column==="archived"||e.column==="in-review"&&e.paused===!0||e.column==="in-review"&&e.status==="failed"&&(e.mergeRetries??0)>=n}function s_(e,n){const s=Date.parse(e.columnMovedAt??e.updatedAt);return Number.isFinite(s)?Math.max(0,n-s):0}function i_(e,n,s={}){const a=s.nowMs??Date.now(),r=s.highFanoutTodoThreshold??am,o=s.staleHighFanoutAgeThresholdMs??Ub,l=new Map(e.map(h=>[h.id,h])),c=new Map,d=h=>{let m=c.get(h);return m||(m={dependentIds:[],dependencyDependentIds:[],blockedByDependentIds:[],activeCount:0,activeTodoCount:0,overlapBlockedActiveCount:0,overlapBlockedTodoCount:0},c.set(h,m)),m};for(const h of e){const m=t_.has(h.column),f=h.column==="todo";for(const p of h.dependencies??[]){if(!p)continue;const g=d(p);g.dependentIds.push(h.id),g.dependencyDependentIds.push(h.id),m&&(g.activeCount+=1),f&&(g.activeTodoCount+=1)}if(h.blockedBy){const p=d(h.blockedBy);p.dependentIds.push(h.id),p.blockedByDependentIds.push(h.id),m&&(p.activeCount+=1,p.overlapBlockedActiveCount+=1),f&&(p.activeTodoCount+=1,p.overlapBlockedTodoCount+=1)}}const u=new Map;for(const[h,m]of c){const f=l.get(h),p=n_(f,n)?[...m.blockedByDependentIds]:[],g=m.overlapBlockedTodoCount>=r,w=f?s_(f,a):0,v=f?.column,b=v!==void 0&&g&&e_.has(v)&&w>=o;u.set(h,{totalCount:m.activeCount,activeTodoCount:m.activeTodoCount,dependentIds:m.dependentIds,dependencyDependentIds:m.dependencyDependentIds,overlapBlockedDependentIds:m.blockedByDependentIds,overlapBlockedActiveCount:m.overlapBlockedActiveCount,overlapBlockedTodoCount:m.overlapBlockedTodoCount,staleBlockedByDependentIds:p,isHighFanout:g,escalation:b?{blockerId:h,activeTodoCount:m.overlapBlockedTodoCount,totalActiveCount:m.overlapBlockedActiveCount,blockingAgeMs:w}:void 0})}return u}const Tc=3;function pm(e,n={}){return i_(e,Tc,{staleHighFanoutAgeThresholdMs:n.staleHighFanoutAgeThresholdMs})}function a_(e,n={}){return i.useMemo(()=>pm(e,n),[e,n.staleHighFanoutAgeThresholdMs])}const r_={"merge-blocker":"Merge blocked","transient-merge-status-no-owner":"Merge stalled","merge-retries-exhausted":"Retries exhausted","no-worktree-no-merge-confirmed":"No worktree"},o_={"merge-blocker":{headline:"Merge blocked by a pre-merge check",description:"A workflow step or merge precondition is reporting a blocker. The task is waiting for that check to pass before it can finalize.",suggestedAction:"Open the Review tab to see which step is blocking, then fix the failure or override the step."},"transient-merge-status-no-owner":{headline:"Stuck in a transient merge state with no active merger",description:"The task is parked in a merging/merging-pr/merging-fix status but no merger process owns it. Self-healing will retry, but if this repeats the merge worker may need attention.",suggestedAction:"Wait one self-healing cycle; if it persists, inspect engine logs for crashed merger runs."},"merge-retries-exhausted":{headline:"Auto-merge retries exhausted",description:"The merger hit its retry ceiling without confirming a merge. The task will not be re-enqueued automatically.",suggestedAction:"Resolve the underlying merge problem manually and re-run the merge from the Review tab, or move the task back to in-progress."},"no-worktree-no-merge-confirmed":{headline:"No worktree on disk and merge not confirmed",description:"The task's working tree is gone but the merge was never confirmed. Either the worktree was removed prematurely or the merge metadata is incomplete.",suggestedAction:"Check the Changes tab and Git history; if the work landed, mark the merge confirmed, otherwise re-create the worktree."}};function l_(e){return{badgeLabel:"In-review stall",code:e.code,headline:"In-review stall surfaced",description:e.reason,suggestedAction:"Open the activity log for details."}}function bx(e,n){const s=o_[e.code];if(!s)return l_(e);const a=n?.maxAutoMergeRetries??Tc,r=n?.mergeRetries,o=e.code==="merge-retries-exhausted"&&Number.isFinite(r)&&r!=null&&r>=0?`${Math.max(r,a)}/${a}`:void 0;return{badgeLabel:r_[e.code],code:e.code,counter:o,...s}}const c_=new Set(["merging","merging-pr","merging-fix"]);function xx(e){return e.column!=="in-review"||e.paused===!0||e.inReviewStall==null?!1:!(e.inReviewStall.code==="merge-blocker"&&e.status!=null&&c_.has(e.status))}const d_="Paused stall";function vx(e){return{badgeLabel:d_,code:e.code,headline:"Paused in review beyond threshold",description:"This task has remained paused in in-review beyond the configured stale paused review threshold.",suggestedAction:"Disposition options: unpause, retry, archive, or create follow-up task."}}function yx(e){return e.column==="in-review"&&e.paused===!0&&e.stalePausedReview!=null}function md(e){const n=Math.max(1,Math.floor(e/6e4)),s=Math.floor(n/1440),a=Math.floor(n%1440/60),r=n%60,o=[];return s>0&&o.push(`${s}d`),a>0&&o.push(`${a}h`),r>0&&s===0&&o.push(`${r}m`),o.join(" ")}function wx(e){if(!e)return null;const n=md(e.ageMs),s=e.paused?" while paused":"",a=e.level==="critical"?"critical":"warning";return{badgeLabel:a==="critical"?"Stale (critical)":"Stale",badgeTone:a,headline:`${e.column} task stale for ${n}`,description:`Task has been stale for ${n}${s}. Thresholds: warning ${md(e.warningThresholdMs)}, critical ${md(e.criticalThresholdMs)}.`}}function u_(e){return e.ageStaleness!=null}function m_(e){switch(e){case"passed":return"done";case"failed":case"advisory_failure":return"failed";case"skipped":return"skipped";case"pending":default:return"pending"}}function h_(e){return e==="done"||e==="skipped"}function p_(e,n,s){const a=s?.get(e)?.trim();if(a)return a;const r=n?.workflowStepName?.trim();return r||e}function kx(e,n){const s=(e.steps??[]).map((d,u)=>({id:`step-${u}`,name:d.name,status:d.status,source:"step",phase:"pre-merge"})),a=new Map((e.workflowStepResults??[]).map(d=>[d.workflowStepId,d])),r=(e.enabledWorkflowSteps??[]).map(d=>{const u=a.get(d);return{id:`workflow-${d}`,name:p_(d,u,n),status:u?m_(u.status):"pending",source:"workflow",phase:u?.phase??"pre-merge"}}),o=[...s,...r],l=o.length,c=o.filter(d=>h_(d.status)).length;return{total:l,completed:c,items:o}}function f_(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 jx(e){return e.filter(n=>{const s=typeof n.action=="string"?n.action:"",a=typeof n.outcome=="string"?n.outcome:"";return s.includes("[timing]")||a.includes("[timing]")}).map(n=>{const a=`${n.action??""}
649
+ ${n.outcome??""}`.match(/(\d+(?:\.\d+)?)ms\b/i),r=a?Number(a[1]):void 0;return{timestamp:n.timestamp,durationMs:Number.isFinite(r)?r:void 0,summary:f_(n)}})}function Nx(e){if(!e||e.length===0)return null;let n=0,s=0;for(const a of jx(e))typeof a.durationMs=="number"&&(n+=a.durationMs,s+=1);return s>0?n:null}function Ja(e){if(!e)return null;const n=Date.parse(e);return Number.isFinite(n)?n:null}function Sx(e,n){if(!e||e.length===0)return null;let s=0,a=0;for(const r of e){if(!r.startedAt)continue;const o=Ja(r.startedAt);if(o==null)continue;let l;if(r.completedAt){const c=Ja(r.completedAt);if(c==null||c<o)continue;l=c}else l=Math.max(o,n);s+=l-o,a+=1}return a>0?s:null}function Cx(e,n,s){const a=Ja(e);if(a==null)return null;const r=Ja(n),o=r!=null&&r>=a?r:s;return Math.max(0,o-a)}function fm(e){if(!(e instanceof Error))return null;const n=e.details;if(n?.code==="TASK_HAS_DEPENDENTS"&&Array.isArray(n.dependentIds))return{dependentIds:n.dependentIds.filter(a=>typeof a=="string")};const s=e.message.match(/[A-Z]+-\d+/g)??[];return s.length>1?{dependentIds:[...new Set(s.slice(1))]}:null}const Ex=i.createContext(void 0);function g_({value:e,children:n}){return t.jsx(Ex.Provider,{value:e,children:n})}function b_(){return i.useContext(Ex)}const Eu=new Map;async function x_(e,n){const s=Eu.get(e);if(s)return s;try{const a=await nx(e,n);return Eu.set(e,a.title),a.title}catch{return e}}const sp=12;function v_(e){return e.length<=sp?e:e.slice(0,sp-3)+"..."}const _u=new Map;async function y_(e,n){const s=_u.get(e);if(s)return s;try{const a=await Su(e,n);return _u.set(e,a.name),a.name}catch{return e}}function w_(e){return typeof e=="string"&&Ca.includes(e)?e:Rs}function k_(e,n){return e.length<=n?e:e.slice(0,n-3)+"..."}function _x(e){const n=e.sourceMetadata?.agentName;if(typeof n=="string"&&n.trim().length>0)return n.trim();if(typeof e.sourceAgentId=="string"&&e.sourceAgentId.trim().length>0)return e.sourceAgentId.trim()}function j_(e){return e.sourceType==="agent_heartbeat"||e.sourceType==="automation"||!!_x(e)}const N_=new Set(["triage","todo"]),ip=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]),ap=new Set(["merging","merging-pr","merging-fix"]),S_={triage:"var(--triage)",todo:"var(--todo)","in-progress":"var(--in-progress)","in-review":"var(--in-review)",done:"var(--done)",archived:"var(--text-muted)"},C_=new Set(["in-progress","in-review","done"]),E_=3e4;function __(e){return e==="merging-fix"?"Merging fixes…":e}function M_(e){const n=Ja(e.columnMovedAt??e.updatedAt);if(n==null)return null;const s=Date.now();return n>s?null:n}function rp(e,n){const s=Ja(e.columnMovedAt??e.updatedAt);return s==null?null:Math.max(0,n-s)}function Mo(e,n){return Cx(e.executionStartedAt,e.executionCompletedAt,n)}function A_(e){return e.column==="done"?M_(e):null}function Mx(e,n){const s=Ja(e.updatedAt);return s==null?null:Math.max(0,n-s)}function R_(e,n){const s=Mo(e,n);if(s!=null)return s;const a=Mx(e,n),r=Ao(e,n);return r!=null?r+(a??0):a}function Ao(e,n){if(typeof e.timedExecutionMs=="number")return e.timedExecutionMs;const s=Nx(e.log),a=Sx(e.workflowStepResults,n);return s==null&&a==null?null:(s??0)+(a??0)}function op(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 lp(e){if(!e)return null;const n=e.trim();return n.length>0?n:null}function I_(e){const n=lp(e.branch),s=lp(e.baseBranch),a=`fusion/${e.id.toLowerCase()}`,r=n&&(n===a||n.startsWith(`${a}-`))?null:n,o=s?.toLowerCase()==="main"?null:s;return{branch:r,baseBranch:o??null}}function cp(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 dp(e,n){if(!e&&!n)return!0;if(!e||!n)return!1;const s=Object.keys(e),a=Object.keys(n);return s.length!==a.length?!1:s.every(r=>e[r]===n[r])}function T_(e,n){return e.length!==n.length?!1:e.every((s,a)=>s.name===n[a]?.name&&s.status===n[a]?.status)}function hd(e,n){return e.length!==n.length?!1:e.every((s,a)=>s===n[a])}function P_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>s===n[a])}function $_(e){const n=e?.issueUrl;return typeof n=="string"&&n.length>0?n:void 0}function up(e){if(!e)return null;const n=e.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)(?:$|[/?#])/i);if(!n)return null;const s=Number(n[3]);return!Number.isInteger(s)||s<=0?null:{owner:n[1],repo:n[2],number:s}}function D_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>{const r=n[a];return r?s.workflowStepId===r.workflowStepId&&s.workflowStepName===r.workflowStepName&&s.phase===r.phase&&s.status===r.status&&s.output===r.output&&s.startedAt===r.startedAt&&s.completedAt===r.completedAt:!1})}function L_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>{const r=n[a];return r?s.filename===r.filename&&s.mimeType===r.mimeType&&s.size===r.size:!1})}function O_(e,n){return!e&&!n?!0:!e||!n||e.length!==n.length?!1:e.every((s,a)=>{const r=n[a];return r?s.author===r.author&&s.text===r.text&&s.createdAt===r.createdAt:!1})}function F_(e,n){const s=e.task,a=n.task;return e.queued===n.queued&&e.projectId===n.projectId&&e.globalPaused===n.globalPaused&&e.taskStuckTimeoutMs===n.taskStuckTimeoutMs&&e.onOpenDetail===n.onOpenDetail&&e.addToast===n.addToast&&e.onUpdateTask===n.onUpdateTask&&e.onArchiveTask===n.onArchiveTask&&e.onUnarchiveTask===n.onUnarchiveTask&&e.onDeleteTask===n.onDeleteTask&&e.onRetryTask===n.onRetryTask&&e.onOpenDetailWithTab===n.onOpenDetailWithTab&&e.onOpenMission===n.onOpenMission&&e.onMoveTask===n.onMoveTask&&e.workflowStepNameLookup===n.workflowStepNameLookup&&e.disableDrag===n.disableDrag&&e.fanout?.totalCount===n.fanout?.totalCount&&e.fanout?.activeTodoCount===n.fanout?.activeTodoCount&&e.fanout?.isHighFanout===n.fanout?.isHighFanout&&e.fanout?.overlapBlockedTodoCount===n.fanout?.overlapBlockedTodoCount&&e.fanout?.escalation?.blockingAgeMs===n.fanout?.escalation?.blockingAgeMs&&hd(e.fanout?.dependentIds??[],n.fanout?.dependentIds??[])&&hd(e.fanout?.staleBlockedByDependentIds??[],n.fanout?.staleBlockedByDependentIds??[])&&s.id===a.id&&s.title===a.title&&s.description===a.description&&s.column===a.column&&s.columnMovedAt===a.columnMovedAt&&s.timedExecutionMs===a.timedExecutionMs&&s.updatedAt===a.updatedAt&&s.createdAt===a.createdAt&&s.status===a.status&&s.priority===a.priority&&s.executionMode===a.executionMode&&s.paused===a.paused&&s.error===a.error&&s.size===a.size&&s.blockedBy===a.blockedBy&&s.overlapBlockedBy===a.overlapBlockedBy&&s.worktree===a.worktree&&s.branch===a.branch&&s.baseBranch===a.baseBranch&&s.breakIntoSubtasks===a.breakIntoSubtasks&&s.currentStep===a.currentStep&&s.modelProvider===a.modelProvider&&s.modelId===a.modelId&&s.validatorModelProvider===a.validatorModelProvider&&s.validatorModelId===a.validatorModelId&&s.planningModelProvider===a.planningModelProvider&&s.planningModelId===a.planningModelId&&s.reviewLevel===a.reviewLevel&&s.missionId===a.missionId&&s.assignedAgentId===a.assignedAgentId&&s.mergeRetries===a.mergeRetries&&s.retrySummary?.total===a.retrySummary?.total&&s.sourceType===a.sourceType&&s.sourceAgentId===a.sourceAgentId&&s.sourceMetadata?.issueUrl===a.sourceMetadata?.issueUrl&&s.sourceMetadata?.agentName===a.sourceMetadata?.agentName&&s.stalledReview?.reason===a.stalledReview?.reason&&s.stalledReview?.heuristic===a.stalledReview?.heuristic&&s.stalledReview?.matchCount===a.stalledReview?.matchCount&&s.stalledReview?.firstMatchAt===a.stalledReview?.firstMatchAt&&s.stalledReview?.lastMatchAt===a.stalledReview?.lastMatchAt&&s.ageStaleness?.level===a.ageStaleness?.level&&s.ageStaleness?.reason===a.ageStaleness?.reason&&s.ageStaleness?.observedAt===a.ageStaleness?.observedAt&&s.ageStaleness?.ageMs===a.ageStaleness?.ageMs&&s.ageStaleness?.warningThresholdMs===a.ageStaleness?.warningThresholdMs&&s.ageStaleness?.criticalThresholdMs===a.ageStaleness?.criticalThresholdMs&&s.ageStaleness?.column===a.ageStaleness?.column&&s.ageStaleness?.paused===a.ageStaleness?.paused&&L_(s.attachments,a.attachments)&&O_(s.comments,a.comments)&&hd(s.dependencies,a.dependencies)&&T_(s.steps,a.steps)&&P_(s.enabledWorkflowSteps,a.enabledWorkflowSteps)&&D_(s.workflowStepResults,a.workflowStepResults)&&dp(s.prInfo,a.prInfo)&&dp(s.issueInfo,a.issueInfo)}function z_({task:e,projectId:n,queued:s,onOpenDetail:a,addToast:r,globalPaused:o,onUpdateTask:l,onArchiveTask:c,onUnarchiveTask:d,onDeleteTask:u,onRetryTask:h,onOpenDetailWithTab:m,taskStuckTimeoutMs:f,onOpenMission:p,onMoveTask:g,lastFetchTimeMs:w,workflowStepNameLookup:v,disableDrag:b,fanout:y}){const[N,S]=i.useState(!1),[C,x]=i.useState(!1),[k,R]=i.useState(!1),[z,_]=i.useState(e.description||""),[A,Q]=i.useState(!1),[H,M]=i.useState(e.column==="in-progress"||e.column==="triage"&&e.steps.some(je=>je.status==="done"||je.status==="skipped")),[T,F]=i.useState(null),[W,oe]=i.useState(null),[D,E]=i.useState(!1),[P,$]=i.useState(!1),[j,q]=i.useState(()=>Date.now()),de=i.useRef(null),be=i.useRef(!1),Ce=i.useRef(null),Ae=i.useRef(null),[ae,X]=i.useState(!1),{badgeUpdates:pe,subscribeToBadge:ie,unsubscribeFromBadge:ye}=HE(n),{confirm:ee}=ii(),L=b_(),Y=i.useRef(null),me=i.useRef(!1),B=i.useCallback(je=>je instanceof Element?!!je.closest("button, a, input, textarea, select, label, [role='button']"):!1,[]);i.useEffect(()=>{_(e.description||"")},[e.id,e.description]),i.useEffect(()=>{if(!D)return;const je=pt=>{Ae.current&&!Ae.current.contains(pt.target)&&E(!1)};return document.addEventListener("click",je),()=>document.removeEventListener("click",je)},[D]),i.useEffect(()=>{if(!e.missionId){F(null);return}const je=Eu.get(e.missionId);if(je){F(je);return}let pt=!1;return x_(e.missionId,n).then(Dt=>{pt||F(Dt)}),()=>{pt=!0}},[e.missionId,n]),i.useEffect(()=>{if(!e.assignedAgentId){oe(null);return}const je=_u.get(e.assignedAgentId);if(je){oe(je);return}oe(null);let pt=!1;return y_(e.assignedAgentId,n).then(Dt=>{pt||oe(Dt)}),()=>{pt=!0}},[e.assignedAgentId,n]),i.useEffect(()=>{if(k&&de.current){const je=de.current;je.focus(),je.style.height="auto",je.style.height=je.scrollHeight+"px"}},[k]),i.useEffect(()=>{if(typeof IntersectionObserver>"u"){X(!0);return}const je=Ce.current;if(!je)return;const pt=new IntersectionObserver(([Dt])=>{X(Dt?.isIntersecting??!0)},{rootMargin:"200px"});return pt.observe(je),()=>pt.disconnect()},[k,e.id]);const xe=i.useCallback(je=>{je.dataTransfer.setData("text/plain",e.id),je.dataTransfer.effectAllowed="move",S(!0)},[e.id]),Ne=i.useCallback(()=>{S(!1)},[]),te=i.useCallback(je=>je.dataTransfer.types.includes("Files"),[]),Be=i.useCallback(je=>{te(je)&&(je.preventDefault(),je.stopPropagation(),je.dataTransfer.dropEffect="copy",x(!0))},[te]),$e=i.useCallback(je=>{te(je)&&(je.preventDefault(),je.stopPropagation(),x(!1))},[te]),ct=i.useCallback(async je=>{if(!te(je))return;je.preventDefault(),je.stopPropagation(),x(!1);const pt=Array.from(je.dataTransfer.files);for(const Dt of pt)try{await Ic(e.id,Dt,n),r(`Attached ${Dt.name} to ${e.id}`,"success")}catch(Zt){r(`Failed to attach ${Dt.name}: ${Me(Zt)}`,"error")}},[e.id,te,r]),De=i.useCallback(()=>{k||a(e)},[e,a,k]),le=i.useCallback(je=>{if(be.current){be.current=!1;return}B(je.target)||De()},[De,B]),_e=i.useCallback(je=>{const pt=je.touches[0];pt&&(Y.current={x:pt.clientX,y:pt.clientY,time:Date.now()},me.current=!1)},[]),Le=i.useCallback(je=>{if(!Y.current)return;const pt=je.touches[0];if(!pt)return;const Dt=Math.abs(pt.clientX-Y.current.x),Zt=Math.abs(pt.clientY-Y.current.y);(Dt>mp||Zt>mp)&&(me.current=!0)},[]),mt=i.useCallback(je=>{if(B(je.target)||!Y.current)return;const Dt=Date.now()-Y.current.time<B_,Zt=!me.current;Dt&&Zt&&(be.current=!0,De()),Y.current=null,me.current=!1},[De,B]),Ve=i.useCallback(async(je,pt)=>{je.stopPropagation();try{const Dt=await Ga(pt,n);a(Dt)}catch{r(`Failed to load dependency ${pt}`,"error")}},[a,r]),ge=e.status==="failed",he=e.paused===!0,Pe=!!(e.paused&&e.pausedByAgentId),dt=w_(e.priority),jt=dt!==Rs,nt=oc(e,f,w),xt=ZE(e),Ie=!!(xt&&e.column==="in-review"&&!he),Qe=xx(e),ot=e.inReviewStall?bx(e.inReviewStall,{mergeRetries:e.mergeRetries,maxAutoMergeRetries:Tc}):void 0,Tt=yx(e),Mt=e.stalePausedReview?vx(e.stalePausedReview):void 0,We=u_(e),J=wx(e.ageStaleness),ke=e.column==="triage"&&e.status==="awaiting-approval",lt=e.column==="archived",ve=!o&&!s&&!ge&&!he&&!nt&&!ke&&(e.column==="in-progress"||ip.has(e.status)),st=!b&&!s&&!he&&!k&&!lt,Ue=N_.has(e.column)&&!ve&&!he&&!s&&l,fe=e.githubTracking?.issue,Xe=!!fe,vt=e.sourceType==="github_import",St=$_(e.sourceMetadata),Et=i.useMemo(()=>up(St),[St]),Pt=i.useMemo(()=>up(e.issueInfo?.url),[e.issueInfo?.url]),Jt=Pt?.owner,dn=Pt?.repo,Vt=!!(e.issueInfo&&fe&&e.issueInfo.number===fe.number&&Jt===fe.owner&&dn===fe.repo),ln=!!(Et&&fe&&Et.number===fe.number&&Et.owner===fe.owner&&Et.repo===fe.repo),fn=Xe&&!Vt&&!ln,_n=e.column==="in-review"&&!!g,an=i.useMemo(()=>I_(e),[e.id,e.branch,e.baseBranch]),Dn=!!(an.branch||an.baseBranch),vn=j_(e),Ut=_x(e),rn=Ut?`Created by agent: ${Ut}`:"Created by agent",bn=!!(e.assignedAgentId&&W===null),en=i.useMemo(()=>{const je=[];return e.modelProvider&&je.push(e.modelProvider),e.validatorModelProvider&&!je.includes(e.validatorModelProvider)&&je.push(e.validatorModelProvider),e.planningModelProvider&&!je.includes(e.planningModelProvider)&&je.push(e.planningModelProvider),je},[e.modelProvider,e.validatorModelProvider,e.planningModelProvider]),Yt=i.useMemo(()=>kx(e,v),[e.steps,e.enabledWorkflowSteps,e.workflowStepResults,v]),tn=Yt.total>0&&(e.status==="executing"||e.column==="in-progress");i.useEffect(()=>{if(e.column!=="in-progress"&&e.column!=="in-review")return;const je=e.status!=null&&ap.has(e.status);if(e.column==="in-progress"){const Dt=Mo(e,Date.now()),Zt=rp(e,Date.now()),Nn=Ao(e,Date.now());if(Dt==null&&Zt==null&&Nn==null)return}if(!je&&e.column==="in-review"){const Dt=Mo(e,Date.now()),Zt=Ao(e,Date.now());if(Dt==null&&Zt==null)return}q(Date.now());const pt=window.setInterval(()=>{q(Date.now())},E_);return()=>window.clearInterval(pt)},[e.column,e.status,e.columnMovedAt,e.updatedAt,e.workflowStepResults,e.timedExecutionMs,e.executionStartedAt,e.executionCompletedAt]);const Qt=i.useMemo(()=>{if(!C_.has(e.column))return null;if(e.status!=null&&ap.has(e.status)){const Xt=R_(e,j);if(Xt!=null){const qt=cp(Xt);if(qt){const Ot=Mx(e,j),qn=Ot==null?null:op(Ot),On=qn?`Execution time ${qt}. Merge phase ${qn}`:`Execution time ${qt}. Merging`;return{label:qt,title:On,ariaLabel:On}}}}if(e.column==="in-progress"){const Xt=Mo(e,j)??rp(e,j)??Ao(e,j);if(Xt==null)return null;const qt=op(Xt);return qt?{label:qt,title:`In progress ${qt}`,ariaLabel:`In progress ${qt}`}:null}const pt=Mo(e,j)??Ao(e,j);if(pt==null)return null;const Dt=cp(pt);if(!Dt)return null;const Zt=A_(e);if(Zt==null)return{label:Dt,title:`Execution time ${Dt}`,ariaLabel:`Execution time ${Dt}`};const Nn=new Date(Zt).toLocaleString();return{label:Dt,title:`Execution time ${Dt}. Completed ${Nn}`,ariaLabel:`Execution time ${Dt}. Completed ${Nn}`}},[e.column,e.status,e.columnMovedAt,e.timedExecutionMs,e.updatedAt,e.workflowStepResults,e.log,e.executionStartedAt,e.executionCompletedAt,j]),Kt=pe.get(`${n??"default"}:${e.id}`),xn=i.useMemo(()=>GE(e.id,n),[e.id,n]),un=i.useRef(!1),pn=!!(e.prInfo||e.issueInfo||Kt?.prInfo||Kt?.issueInfo||xn?.result?.prInfo||xn?.result?.issueInfo);pn&&(un.current=!0);const $t=pn||un.current;i.useEffect(()=>{if(!$t||!ae){ye(e.id);return}return ie(e.id),()=>{ye(e.id)}},[$t,ae,ie,e.id,ye]);const ue=e.column==="in-progress"||e.column==="in-review",Re=i.useMemo(()=>e.steps.map(je=>`${je.name}:${je.status}`).join("|"),[e.steps]),{stats:et,loading:at}=QE(e.id,e.column,e.mergeDetails?.commitSha,n,{enabled:ae,worktree:e.worktree,stepVersion:ue?Re:void 0,pollIntervalMs:ue?3e4:void 0}),Je=i.useMemo(()=>{const je=Kt?.prInfo,pt=Kt?.timestamp,Dt=xn?.result?.prInfo,Zt=xn?.timestamp?new Date(xn.timestamp).toISOString():void 0,Nn=e.prInfo,Xt=e.prInfo?.lastCheckedAt??e.updatedAt;let qt=Nn,Ot=Xt;return je&&(!Ot||pt!=null&&pt>=Ot)&&(qt=je,Ot=pt??Ot),Dt&&(!Ot||Zt!=null&&Zt>=Ot)&&(qt=Dt),qt},[Kt,xn,e.prInfo,e.updatedAt]),Nt=i.useMemo(()=>{const je=Kt?.issueInfo,pt=Kt?.timestamp,Dt=xn?.result?.issueInfo,Zt=xn?.timestamp?new Date(xn.timestamp).toISOString():void 0,Nn=e.issueInfo,Xt=e.issueInfo?.lastCheckedAt??e.updatedAt;let qt=Nn,Ot=Xt;return je&&(!Ot||pt!=null&&pt>=Ot)&&(qt=je,Ot=pt??Ot),Dt&&(!Ot||Zt!=null&&Zt>=Ot)&&(qt=Dt),qt},[Kt,xn,e.issueInfo,e.updatedAt]),bt=i.useCallback(je=>{je?.stopPropagation(),!(!Ue||A)&&(R(!0),_(e.description||""))},[Ue,A,e.description]),At=i.useCallback(()=>{R(!1),_(e.description||"")},[e.description]),se=i.useCallback(()=>z!==(e.description||""),[z,e.description]),re=i.useCallback(async()=>{if(!(!l||A)){if(!se()){At();return}Q(!0);try{await l(e.id,{description:z.trim()||void 0}),r(`Updated ${e.id}`,"success"),R(!1)}catch(je){r(`Failed to update ${e.id}: ${Me(je)}`,"error")}finally{Q(!1)}}},[l,e.id,z,A,se,At,r]),Ge=i.useCallback(je=>{je.key==="Enter"&&!je.shiftKey?(je.preventDefault(),re()):je.key==="Escape"&&(je.preventDefault(),At())},[re,At]),Ct=i.useCallback(()=>{setTimeout(()=>{const je=document.activeElement;je===de.current||je?.closest(".card-editing-content")||(se()?re():At())},0)},[se,re,At]),Gt=i.useCallback(je=>{Ue&&(je.stopPropagation(),bt(je))},[Ue,bt]),cn=i.useCallback(je=>{je.stopPropagation(),bt(je)},[bt]),jn=i.useCallback(je=>{_(je.target.value);const pt=je.target;pt.style.height="auto",pt.style.height=pt.scrollHeight+"px"},[]),Ln=i.useCallback(je=>{je.stopPropagation(),c&&c(e.id).then(()=>{r(`Archived ${e.id}`,"success")}).catch(pt=>{r(`Failed to archive ${e.id}: ${Me(pt)}`,"error")})},[r,c,e.id]),mn=i.useCallback(je=>{je.stopPropagation(),d&&d(e.id).then(()=>{r(`Unarchived ${e.id}`,"success")}).catch(pt=>{r(`Failed to unarchive ${e.id}: ${Me(pt)}`,"error")})},[r,d,e.id]),Un=i.useCallback(async je=>{if(je.stopPropagation(),!u||!await ee({title:"Delete Task",message:`Delete ${e.id}?`,danger:!0}))return;const Dt=e.githubTracking?.enabled===!0?e.githubTracking.issue:void 0;let Zt;if(Dt?.owner&&Dt.repo&&Dt.number){const Nn=`${Dt.owner}/${Dt.repo}#${Dt.number}`;await ee({title:"Linked GitHub Issue",message:`Choose what to do with ${Nn} when deleting ${e.id}.
650
+
651
+ Close the issue?`,confirmLabel:"Close Issue",cancelLabel:"More Options"})?Zt="close":Zt=await ee({title:"Delete Linked GitHub Issue",message:`Delete ${Nn} on GitHub, or leave it unchanged?`,confirmLabel:"Delete Issue",cancelLabel:"Leave Unchanged",danger:!0})?"delete":"leave"}try{Zt?await u(e.id,{githubIssueAction:Zt}):await u(e.id);const Nn=Dt?.owner&&Dt.repo&&Dt.number&&Zt?` and ${Zt==="close"?"closed":Zt==="delete"?"deleted":"left"} issue ${Dt.owner}/${Dt.repo}#${Dt.number}`:"";r(`Deleted ${e.id}${Nn}`,"success")}catch(Nn){const Xt=fm(Nn);if(!Xt||Xt.dependentIds.length===0){r(`Failed to delete ${e.id}: ${Me(Nn)}`,"error");return}const qt=Xt.dependentIds.join(", ");if(!await ee({title:"Force Delete Task",message:`${e.id} is a dependency of ${qt}.
652
+
653
+ Delete anyway by removing these dependency references first?`,danger:!0}))return;try{await u(e.id,{removeDependencyReferences:!0,githubIssueAction:Zt}),r(`Deleted ${e.id} after removing dependency references`,"success")}catch(qn){r(`Failed to delete ${e.id}: ${Me(qn)}`,"error")}}},[r,ee,u,e.githubTracking?.enabled,e.githubTracking?.issue,e.id]),ce=i.useCallback(je=>{je.stopPropagation(),m?.(e,"changes")},[e,m]),it=i.useCallback(je=>{je.stopPropagation(),m?.(e,"retries")},[e,m]),ut=i.useCallback(je=>{je.stopPropagation(),M(pt=>!pt)},[]),wt=i.useCallback(je=>{je.stopPropagation(),e.missionId&&p&&p(e.missionId)},[e.missionId,p]),G=i.useCallback(je=>{je.stopPropagation(),E(pt=>!pt)},[]),ze=i.useCallback(async(je,pt)=>{if(je.stopPropagation(),E(!1),!!g)try{const Dt=e.steps.some(Xt=>Xt.status!=="pending"),Zt=(pt==="todo"||pt==="triage")&&Dt;let Nn;if(Zt){if(await ee({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))Nn={preserveProgress:!0};else if(!await ee({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await g(e.id,pt,Nn),r(`Moved ${e.id} to ${ds[pt]}`,"success")}catch(Dt){r(`Failed to move ${e.id}: ${Me(Dt)}`,"error")}},[r,ee,g,e.id,e.steps]),Ht=i.useCallback(async je=>{if(je.stopPropagation(),!(!h||P)){$(!0);try{await h(e.id)}catch(pt){r(`Failed to retry ${e.id}: ${Me(pt)}`,"error")}finally{$(!1)}}},[r,P,h,e.id]),gn=`card${N?" dragging":""}${s?" queued":""}${ve?" agent-active":""}${ge?" failed":""}${he?" paused":""}${nt?" stuck":""}${ke?" awaiting-approval":""}${C?" file-drop-target":""}${k?" card-editing":""}${A?" card-saving":""}`,Mn=(()=>{if(e.column==="in-progress"){const je=et?.filesChanged,pt=je==null?e.modifiedFiles?.length:void 0,Dt=je??pt;return Dt==null||Dt===0?null:t.jsxs("button",{type:"button",className:"card-session-files",onClick:ce,disabled:!m,children:[t.jsx(ks,{size:12}),t.jsxs("span",{children:[Dt," ",Dt===1?"file":"files"," changed"]})]})}if(e.column==="in-review"){const je=et?.filesChanged,pt=je==null?e.modifiedFiles?.length:void 0,Dt=je??pt;return Dt==null||Dt===0?null:t.jsxs("button",{type:"button",className:"card-session-files",onClick:ce,disabled:!m,children:[t.jsx(ks,{size:12}),t.jsxs("span",{children:[Dt," ",Dt===1?"file":"files"," changed"]})]})}if(e.column==="done"){let je;if(et?je=et.filesChanged:at?je=e.mergeDetails?.filesChanged??void 0:je=void 0,je!=null&&je>0)return t.jsxs("button",{type:"button",className:"card-session-files",onClick:ce,disabled:!m,children:[t.jsx(ks,{size:12}),t.jsxs("span",{children:[je," ",je===1?"file":"files"," changed"]})]});const pt=e.modifiedFiles?.length;if(pt!=null&&pt>0)return t.jsxs("button",{type:"button",className:"card-session-files",onClick:ce,disabled:!m,children:[t.jsx(ks,{size:12}),t.jsxs("span",{children:[pt," ",pt===1?"file":"files"," changed"]})]})}return null})();return k?t.jsx("div",{ref:Ce,className:gn,"data-id":e.id,"data-column":e.column,onDoubleClick:Gt,children:t.jsxs("div",{className:"card-editing-content",children:[t.jsx("textarea",{ref:de,className:"card-edit-desc-textarea",placeholder:"Task description",value:z,onChange:jn,onKeyDown:Ge,onBlur:Ct,disabled:A,rows:4}),A&&t.jsxs("div",{className:"card-edit-loading",children:[t.jsx("span",{className:"card-edit-loading-spinner"}),t.jsx("span",{className:"card-edit-loading-text",children:"Saving..."})]})]})}):t.jsxs("div",{ref:Ce,className:gn,"data-id":e.id,"data-column":e.column,draggable:st,onDragStart:st?xe:void 0,onDragEnd:st?Ne:void 0,onDragOver:Be,onDragLeave:$e,onDrop:ct,onClick:le,onTouchStart:_e,onTouchMove:Le,onTouchEnd:mt,onDoubleClick:Gt,children:[t.jsxs("div",{className:"card-header",children:[t.jsx("span",{className:"card-id",children:e.id}),he&&t.jsx("span",{className:"card-status-badge paused",children:Pe?"paused by agent":"paused"}),!he&&e.status&&e.status!=="queued"&&t.jsx("span",{className:`card-status-badge card-status-badge--${e.column}${ke?" awaiting-approval":""}${ip.has(e.status)?" pulsing":""}${ge?" failed":""}${nt?" stuck":""}`,children:nt?"Stuck":ke?"Awaiting Approval":__(e.status)}),Qe&&ot&&t.jsxs("span",{className:`card-status-badge card-status-badge--in-review in-review-stall in-review-stall--${ot.code}`,title:`${ot.headline} — ${ot.description}`,"data-stall-code":ot.code,children:[ot.badgeLabel,ot.counter?` ${ot.counter}`:""]}),Tt&&Mt&&t.jsx("span",{className:`card-status-badge card-status-badge--in-review stale-paused-review stale-paused-review--${Mt.code}`,title:`${Mt.headline} — ${Mt.description}`,"data-stale-paused-review-code":Mt.code,children:Mt.badgeLabel}),We&&J&&t.jsx("span",{className:`card-status-badge card-task-age-staleness-badge card-task-age-staleness-badge--${J.badgeTone}`,title:`${J.headline} — ${J.description}`,children:J.badgeLabel}),nt&&(he||!e.status||e.status==="queued")&&t.jsx("span",{className:"card-status-badge stuck",children:"Stuck"}),Ie&&xt&&t.jsx("span",{className:"card-status-badge card-status-badge--in-review stalled-review",title:xt.reason,children:"Stalled"}),(Je||Nt)&&t.jsx(BE,{prInfo:Je,issueInfo:Nt}),vn&&t.jsxs("span",{className:"card-agent-created-badge",title:rn,"aria-label":rn,children:[t.jsx(Qn,{size:11,"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:rn}),t.jsx("span",{"aria-hidden":"true",children:"Agent"})]}),jt&&t.jsx("span",{className:`card-priority-badge card-priority-badge--${dt}`,children:dt}),e.executionMode==="fast"&&t.jsxs("span",{className:"card-execution-mode-badge card-execution-mode-badge--fast",title:"Fast mode","aria-label":"Fast mode",children:[t.jsx(rs,{"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:"Fast mode"})]}),e.noCommitsExpected===!0&&t.jsx("span",{className:"card-no-commits-expected-badge",title:"Decision-only task",children:"decision-only"}),e.missionId&&t.jsxs("span",{className:"card-mission-badge",onClick:wt,title:`Mission: ${T??e.missionId}`,role:p?"button":void 0,tabIndex:p?0:void 0,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[t.jsx(Ss,{size:11}),v_(T??e.missionId)]}),t.jsxs("div",{className:"card-header-actions",children:[Ue&&t.jsx("button",{className:"card-edit-btn",onClick:cn,title:"Edit task","aria-label":"Edit task",children:t.jsx(Fs,{size:12})}),e.column==="triage"&&u&&t.jsx("button",{className:"card-delete-btn",onClick:Un,title:"Delete task","aria-label":"Delete task",children:t.jsx(zn,{size:12})}),e.column==="done"&&c&&t.jsx("button",{className:"card-archive-btn",onClick:Ln,title:"Archive task","aria-label":"Archive task",children:"Archive"}),e.column==="archived"&&d&&t.jsx("button",{className:"card-unarchive-btn",onClick:mn,title:"Unarchive task","aria-label":"Unarchive task",children:"Unarchive"}),e.column==="in-progress"&&g&&t.jsxs("div",{className:"card-send-back",ref:Ae,children:[t.jsxs("button",{className:"card-send-back-btn",onClick:G,title:"Send back","aria-label":"Send back","aria-haspopup":"menu","aria-expanded":D,children:["Send back",t.jsx(Cn,{size:10})]}),D&&t.jsx("div",{className:"card-send-back-menu",role:"menu",children:ku["in-progress"].filter(je=>je!=="in-review").map(je=>t.jsx("button",{className:"card-send-back-menu-item",role:"menuitem",onClick:pt=>ze(pt,je),children:ds[je]},je))})]}),e.size&&t.jsx("span",{className:`card-size-badge size-${e.size.toLowerCase()}`,children:e.size})]})]}),Ie&&xt&&t.jsx("div",{className:"card-stalled-review-reason",title:xt.reason,children:xt.reason}),ge&&e.error&&t.jsxs("div",{className:"card-error",title:e.error,children:[t.jsx("span",{className:"card-error-icon",children:"⚠"}),t.jsx("span",{className:"card-error-text",children:e.error.length>60?e.error.slice(0,60)+"…":e.error}),h&&t.jsxs("button",{type:"button",className:"btn btn-sm card-error-retry-btn",onClick:Ht,disabled:P,children:[t.jsx(ih,{size:12}),P?"Retrying…":"Retry"]})]}),t.jsx("div",{className:"card-title",title:e.title||e.description||void 0,children:pp(e.title,hp)||pp(e.description,hp)||e.id}),Dn&&t.jsxs("div",{className:"card-branch-row","aria-label":"Branch metadata",children:[an.branch&&t.jsxs("span",{className:"card-branch-chip",title:an.branch,children:[t.jsx("span",{className:"card-branch-label",children:"Branch"}),t.jsx("span",{className:"card-branch-value",children:an.branch})]}),an.baseBranch&&t.jsxs("span",{className:"card-branch-chip",title:an.baseBranch,children:[t.jsx("span",{className:"card-branch-label",children:"Base"}),t.jsx("span",{className:"card-branch-value",children:an.baseBranch})]})]}),tn&&(()=>{const je=Yt.completed/Yt.total*100;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"card-progress",children:[t.jsx("div",{className:"card-progress-bar",children:t.jsx("div",{className:"card-progress-fill",style:{width:`${je}%`,backgroundColor:S_[e.column]}})}),t.jsxs("span",{className:"card-progress-label",children:[Yt.completed,"/",Yt.total]})]}),t.jsxs("button",{type:"button",className:"card-steps-toggle",onClick:ut,"aria-expanded":H,"aria-label":H?"Hide steps":"Show steps",children:[t.jsxs("span",{children:[Yt.total," step",Yt.total===1?"":"s"]}),t.jsx(Cn,{size:14,className:`card-steps-toggle-icon${H?" expanded":""}`})]}),H&&t.jsx("div",{className:"card-steps-list",children:Yt.items.map(pt=>{const Dt=pt.source==="workflow"&&pt.status==="failed";return t.jsxs("div",{className:"card-step-item",children:[t.jsx("span",{className:`card-step-dot card-step-dot--${pt.status}${Dt?" card-step-dot--workflow-failed":""}`,"aria-hidden":"true"}),t.jsx("span",{className:`card-step-name${pt.status==="done"?" completed":""}`,children:pt.name}),pt.source==="workflow"&&t.jsx("span",{className:`card-step-workflow-badge card-step-workflow-badge--${pt.phase}`,title:"Workflow check",children:"workflow"})]},pt.id)})})]})})(),(Mn||vt||fn&&fe||(e.retrySummary?.total??0)>0||Qt)&&t.jsxs("div",{className:"card-footer-row",children:[Mn,vt&&t.jsx("span",{className:"card-source-provenance",title:St?`Imported from GitHub: ${St}`:"Imported from GitHub","aria-label":"Imported from GitHub",children:t.jsx(Gn,{provider:"github",size:"sm"})}),fn&&fe&&t.jsxs("a",{className:"card-github-tracking-chip card-github-tracking-link",href:fe.url,target:"_blank",rel:"noopener noreferrer",title:`Linked GitHub issue: ${fe.owner}/${fe.repo}#${fe.number}`,"aria-label":`Linked GitHub issue #${fe.number}`,onClick:je=>je.stopPropagation(),children:[t.jsx(Gn,{provider:"github",size:"sm"}),t.jsx("span",{children:`#${fe.number}`})]}),(e.retrySummary?.total??0)>0&&t.jsxs("span",{className:`card-retry-badge${L!=null&&(e.retrySummary?.total??0)>=L?" card-retry-badge--error":" card-retry-badge--warning"}`,onClick:it,role:"button",tabIndex:0,onKeyDown:je=>{(je.key==="Enter"||je.key===" ")&&(je.preventDefault(),je.stopPropagation(),m?.(e,"retries"))},"aria-label":`${e.retrySummary?.total??0} retries`,title:"Open retry breakdown",children:[t.jsx(ih,{size:11}),t.jsx("span",{children:e.retrySummary?.total??0})]}),Qt&&t.jsxs("span",{className:"card-time-indicator",title:Qt.title,"aria-label":Qt.ariaLabel,children:[t.jsx(sa,{size:12}),t.jsx("span",{children:Qt.label})]})]}),(e.dependencies&&e.dependencies.length>0||s||e.status==="queued"||e.blockedBy||e.overlapBlockedBy||y&&y.totalCount>0)&&t.jsxs("div",{className:"card-meta",children:[e.dependencies&&e.dependencies.length>0&&t.jsx("div",{className:"card-dep-list",children:e.dependencies.map(je=>t.jsxs("span",{className:"card-dep-badge clickable",onClick:pt=>void Ve(pt,je),title:`Click to view ${je}`,children:[t.jsx(Tr,{size:12,style:{verticalAlign:"middle"}})," ",je]},je))}),(e.overlapBlockedBy||e.blockedBy)&&t.jsxs("span",{className:"card-scope-badge","data-tooltip":`Blocked by ${e.overlapBlockedBy||e.blockedBy} (file overlap)`,children:[t.jsx(Va,{size:12,style:{verticalAlign:"middle"}})," ",e.overlapBlockedBy||e.blockedBy]}),y&&y.totalCount>0&&t.jsxs("span",{className:`card-fanout-badge${y.staleBlockedByDependentIds.length>0?" card-fanout-badge--stale":""}`,"data-tooltip":`Blocking ${y.totalCount} active task(s); overlap blockedBy queue: ${y.overlapBlockedTodoCount} todo${y.isHighFanout?` (overlap bottleneck threshold: ${am})`:""}${y.escalation?` · escalated after ${Math.floor(y.escalation.blockingAgeMs/6e4)}m in blocking column`:""}`,children:[t.jsx(Ps,{size:12,style:{verticalAlign:"middle"}}),t.jsxs("span",{children:[y.escalation?"Escalated overlap":y.isHighFanout?"Overlap bottleneck":"Blocks"," ",t.jsx("span",{className:"card-fanout-count",children:y.totalCount}),y.staleBlockedByDependentIds.length>0?` (${y.staleBlockedByDependentIds.length} stale)`:""]})]}),(s||e.status==="queued")&&e.column!=="in-progress"&&t.jsxs("span",{className:"queued-badge",children:[t.jsx(sa,{size:12,style:{verticalAlign:"middle"}})," Queued"]})]}),(e.assignedAgentId||en.length>0)&&t.jsxs("div",{className:"card-agent-row",children:[en.length>0&&t.jsx("span",{className:"card-provider-icons","data-testid":"card-provider-icons",children:en.map(je=>t.jsx(Gn,{provider:je,size:"sm"},je))}),e.assignedAgentId&&t.jsxs("span",{className:`card-agent-badge${bn?" card-agent-badge--loading":""}`,title:`Assigned to ${W??e.assignedAgentId}`,children:[t.jsx(Qn,{size:11}),t.jsx("span",{className:"card-agent-badge-text","aria-hidden":"true",children:k_(W??e.assignedAgentId,15)}),t.jsxs("span",{className:"visually-hidden",children:["Assigned to ",W??e.assignedAgentId]})]})]}),_n&&t.jsx("div",{className:"card-bottom-row",children:t.jsx("div",{className:"card-bottom-right-row",children:t.jsxs("div",{className:"card-send-back",ref:Ae,children:[t.jsxs("button",{className:"card-send-back-btn",onClick:G,title:"Move task","aria-label":"Move task","aria-haspopup":"menu","aria-expanded":D,children:["Move",t.jsx(Cn,{size:10})]}),D&&t.jsx("div",{className:"card-send-back-menu",role:"menu",children:ku["in-review"].map(je=>t.jsx("button",{className:"card-send-back-menu-item",role:"menuitem",onClick:pt=>ze(pt,je),children:je==="done"?"Done (no merge)":ds[je]},je))})]})})}),t.jsx(va,{slotId:"task-card-badge",projectId:n})]})}const mp=10,B_=300,hp=140;function pp(e,n){return e?e.length>n?e.slice(0,n)+"…":e:""}const Wo=i.memo(z_,F_);Wo.displayName="TaskCard";function U_({label:e,activeTasks:n,queuedTasks:s,projectId:a,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:d,onOpenDetailWithTab:u,taskStuckTimeoutMs:h,onOpenMission:m,lastFetchTimeMs:f,workflowStepNameLookup:p,blockerFanoutMap:g}){return t.jsxs("div",{className:"worktree-group",children:[t.jsxs("div",{className:"worktree-group-header",children:[t.jsx("span",{className:"worktree-icon",children:e==="Up Next"||e==="Unassigned"?t.jsx(Kw,{size:14}):t.jsx(Ps,{size:14})}),t.jsx("span",{className:"worktree-label",children:e})]}),n.map(w=>t.jsx(Wo,{task:w,projectId:a,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:d,onOpenDetailWithTab:u,taskStuckTimeoutMs:h,onOpenMission:m,lastFetchTimeMs:f,workflowStepNameLookup:p,fanout:g?.get(w.id)},w.id)),s.map(w=>t.jsx(Wo,{task:w,projectId:a,queued:!0,onOpenDetail:r,addToast:o,globalPaused:l,onUpdateTask:c,onRetryTask:d,onOpenDetailWithTab:u,taskStuckTimeoutMs:h,onOpenMission:m,lastFetchTimeMs:f,workflowStepNameLookup:p,fanout:g?.get(w.id)},w.id))]})}const Ax=i.memo(U_);Ax.displayName="WorktreeGroup";function fp(e){return e.toLowerCase().replace(/[-_./]/g,"")}function H_(e,n){let s=0;for(let a=0;a<n.length&&s<e.length;a++)e[s]===n[a]&&s++;return s===e.length}function q_(e,n,s){const a=e.length,r=n.length;if(a===0)return!0;if(r===0)return!1;let o=new Array(r+1).fill(0),l=new Array(r+1).fill(0);for(let c=1;c<=a;c++){const d=new Array(r+1);d[0]=c;for(let u=1;u<=r;u++){const h=e[c-1]===n[u-1]?0:1;d[u]=Math.min(l[u]+1,d[u-1]+1,l[u-1]+h),c>=2&&u>=2&&e[c-1]===n[u-2]&&e[c-2]===n[u-1]&&(d[u]=Math.min(d[u],o[u-2]+1))}o=l,l=d}for(let c=0;c<=r;c++)if(l[c]<=s)return!0;return!1}function V_(e,n){const s=fp(e),a=fp(n);if(s.length===0||a.includes(s))return!0;const r=a.split(/\s+/).filter(Boolean);for(const o of r)if(s.length>=3&&H_(s,o)||s.length>=4&&q_(s,o,1))return!0;return!1}function W_(e,n){const s=n.toLowerCase().trim().split(/\s+/).filter(Boolean);return s.length===0?e:e.filter(a=>{const r=`${a.provider} ${a.id} ${a.name}`;return s.every(o=>V_(o,r))})}function Cs({models:e,value:n,onChange:s,placeholder:a="Select a model…",disabled:r=!1,id:o,label:l,favoriteProviders:c=[],onToggleFavorite:d,favoriteModels:u=[],onToggleModelFavorite:h,noChangeValue:m,noChangeLabel:f="No change"}){const[p,g]=i.useState(!1),[w,v]=i.useState(""),[b,y]=i.useState(0),[N,S]=i.useState(null),[C,x]=i.useState(null),k=i.useRef(null),R=i.useRef(null),z=i.useRef(null),_=i.useRef(null),A=i.useRef(null),Q=i.useMemo(()=>W_(e,w),[e,w]),H=i.useMemo(()=>Q.reduce((ie,ye)=>((ie[ye.provider]??=[]).push(ye),ie),{}),[Q]),M=i.useMemo(()=>{const ie=[];for(const ye of u){const ee=ye.indexOf("/");if(ee===-1)continue;const L=ye.slice(0,ee),Y=ye.slice(ee+1),me=Q.find(B=>B.provider===L&&B.id===Y);me&&ie.push({model:me,fullId:ye})}return ie},[u,Q]),T=i.useMemo(()=>{const ie=Object.entries(H),ye=new Set(c);return ie.sort(([ee],[L])=>{const Y=ye.has(ee),me=ye.has(L);if(Y&&!me)return-1;if(!Y&&me)return 1;if(Y&&me){const B=c.indexOf(ee),xe=c.indexOf(L);if(B!==xe)return B-xe}return ee.localeCompare(L)})},[H,c]),F=typeof m=="string"&&m.length>0,W=i.useMemo(()=>{if(!n||F&&n===m)return null;const ie=n.indexOf("/");return ie===-1?null:n.slice(0,ie)},[F,m,n]),oe=i.useMemo(()=>{const ie=[];return F&&ie.push({type:"no-change",value:m,label:f}),ie.push({type:"default",value:"",label:"Use default"}),ie},[F,f,m]),D=i.useMemo(()=>{const ie=[...oe];for(const{model:ye,fullId:ee}of M)ie.push({type:"favorite",value:ee,label:ye.name,provider:ye.provider});return T.forEach(([ye,ee])=>{ie.push({type:"provider",value:`__group_${ye}`,label:ye,provider:ye}),ee.forEach(L=>{ie.push({type:"model",value:`${L.provider}/${L.id}`,label:L.name,provider:L.provider})})}),ie},[M,T,oe]),E=i.useMemo(()=>{if(F&&n===m)return f;if(!n)return"Use default";const ie=n.indexOf("/");if(ie===-1)return n;const ye=n.slice(0,ie),ee=n.slice(ie+1);return e.find(Y=>Y.provider===ye&&Y.id===ee)?.name||n},[F,f,m,n,e]),P=i.useMemo(()=>D.findIndex(ie=>ie.value===n),[D,n]),$=i.useCallback(()=>{const ie=window.visualViewport;return ie&&ie.height>0&&ie.width>0?{width:ie.width,height:ie.height,offsetTop:ie.offsetTop,offsetLeft:ie.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),j=i.useCallback(()=>{const{height:ie}=$(),ye=typeof window.matchMedia=="function",ee=ye?window.matchMedia("(max-width: 640px)").matches:!1,L=ye?window.matchMedia("(max-width: 768px)").matches:!1;return ie<=0?320:ee?Math.min(ie*.6,360):L?Math.min(ie*.7,420):320},[$]),q=i.useCallback(()=>{const ie=R.current;if(!ie)return;const ye=ie.getBoundingClientRect(),{width:ee,height:L,offsetTop:Y,offsetLeft:me}=$(),B=16,xe=16,Ne=4,te=j(),Be=ye.bottom-Y,$e=ye.top-Y,ct=ye.left-me,De=L-Be,le=$e,_e=Math.max(De-xe-Ne,160),Le=Math.max(le-xe-Ne,160),mt=De<te&&le>De,Ve=Math.max(Math.min(mt?Le:_e,te),160),ge=Math.min(ye.width,ee-B*2),he=Math.min(Math.max(ct,B),ee-B-ge)+me,Pe=mt?Math.max(xe+Y,$e-Ve-Ne+Y):Math.min(Be+Ne+Y,L+Y-xe-Ve);S({top:Pe,left:he,width:ge,maxHeight:Ve})},[$,j]);i.useEffect(()=>{x(document.body)},[]);const de=i.useRef(!1);i.useEffect(()=>{if(!p){de.current=!1;return}if(de.current||D.length===0)return;const ie=D.findIndex((ye,ee)=>ee>=(P>=0?P:0)&&ye.type!=="provider");y(ie>=0?ie:0),de.current=!0},[p,D,P]),i.useEffect(()=>{p&&de.current&&(y(0),A.current&&(A.current.scrollTop=0))},[w,p]),i.useEffect(()=>{if(!p)return;q();const ie=requestAnimationFrame(()=>_.current?.focus());return()=>cancelAnimationFrame(ie)},[p,q]),i.useEffect(()=>{if(!p)return;const ie=()=>q();window.addEventListener("resize",ie),window.addEventListener("scroll",ie,!0);const ye=window.visualViewport;return ye&&(ye.addEventListener("resize",ie),ye.addEventListener("scroll",ie)),()=>{window.removeEventListener("resize",ie),window.removeEventListener("scroll",ie,!0),ye&&(ye.removeEventListener("resize",ie),ye.removeEventListener("scroll",ie))}},[p,q]),i.useEffect(()=>{if(!p)return;const ie=ye=>{const ee=ye.target,L=k.current?.contains(ee),Y=z.current?.contains(ee);!L&&!Y&&(g(!1),v(""))};return document.addEventListener("mousedown",ie),()=>document.removeEventListener("mousedown",ie)},[p]);const be=i.useCallback(ie=>{switch(ie.key){case"ArrowDown":if(ie.preventDefault(),!p)g(!0);else{let ye=b;for(let ee=1;ee<=D.length;ee++){const L=(b+ee)%D.length;if(D[L]?.type!=="provider"){ye=L;break}}y(ye)}break;case"ArrowUp":if(ie.preventDefault(),p){let ye=b;for(let ee=1;ee<=D.length;ee++){const L=(b-ee+D.length)%D.length;if(D[L]?.type!=="provider"){ye=L;break}}y(ye)}break;case"Enter":if(ie.preventDefault(),p){const ye=D[b];ye&&ye.type!=="provider"&&ye.type!=="favorite"&&(s(ye.value),g(!1),v(""))}else g(!0);break;case"Escape":ie.preventDefault(),g(!1),v("");break;case"Tab":p&&(g(!1),v(""));break}},[p,b,D,s]),Ce=i.useCallback(ie=>{s(ie),g(!1),v("")},[s]),Ae=i.useCallback(()=>{v(""),_.current?.focus()},[]),ae=i.useCallback(()=>{r||g(ie=>!ie)},[r]);i.useEffect(()=>{if(p&&A.current){const ie=A.current.querySelector(`[data-index="${b}"]`);ie&&typeof ie.scrollIntoView=="function"&&ie.scrollIntoView({block:"nearest"})}},[b,p]);const X=w.length>0,pe=p&&N?t.jsxs("div",{ref:z,className:"model-combobox-dropdown model-combobox-dropdown--portal",role:"listbox","data-testid":"model-combobox-portal",onKeyDown:be,style:{top:`${N.top}px`,left:`${N.left}px`,width:`${N.width}px`,maxHeight:`${N.maxHeight}px`},children:[t.jsxs("div",{className:"model-combobox-search-wrapper",children:[t.jsx("input",{ref:_,type:"text",className:"model-combobox-search",placeholder:"Filter models…",value:w,onChange:ie=>v(ie.target.value),onClick:ie=>ie.stopPropagation()}),X&&t.jsx("button",{type:"button",className:"model-combobox-clear",onClick:Ae,"aria-label":"Clear filter",children:"×"})]}),t.jsxs("div",{className:"model-combobox-results-count",children:[Q.length," model",Q.length!==1?"s":""]}),t.jsxs("div",{ref:A,className:"model-combobox-list",children:[oe.map((ie,ye)=>t.jsx("div",{"data-index":ye,className:`model-combobox-option ${b===ye?"model-combobox-option--highlighted":""} ${n===ie.value?"model-combobox-option--selected":""}`,onClick:()=>Ce(ie.value),onMouseEnter:()=>y(ye),role:"option","aria-selected":n===ie.value,children:t.jsx("span",{className:"model-combobox-option-text model-combobox-option-text--default",children:ie.label})},`${ie.type}-${ie.value}`)),M.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"model-combobox-divider"}),M.map(({model:ie,fullId:ye},ee)=>{const L=ee+oe.length,Y=b===L,me=n===ye;return t.jsxs("div",{"data-index":L,className:`model-combobox-option model-combobox-option--favorite ${Y?"model-combobox-option--highlighted":""} ${me?"model-combobox-option--selected":""}`,onClick:()=>Ce(ye),onMouseEnter:()=>y(L),role:"option","aria-selected":me,children:[t.jsxs("span",{className:"model-combobox-option-main",children:[t.jsx("span",{className:"model-combobox-option-icon",children:t.jsx(Gn,{provider:ie.provider,size:"sm"})}),t.jsx("span",{className:"model-combobox-option-text",children:ie.name})]}),t.jsx("span",{className:"model-combobox-option-id",children:ie.id}),h&&t.jsx("button",{type:"button",className:"model-combobox-option-favorite model-combobox-option-favorite--active",onClick:B=>{B.stopPropagation(),h(ye)},title:"Remove from favorites","aria-label":`Remove ${ie.name} from favorites`,children:"★"})]},ye)}),t.jsx("div",{className:"model-combobox-divider"})]}),T.map(([ie,ye])=>{const ee=D.findIndex(me=>me.value===`__group_${ie}`),L=c.includes(ie),Y=ye.filter(me=>{const B=`${me.provider}/${me.id}`;return!u.includes(B)});return Y.length===0?null:t.jsxs("div",{className:"model-combobox-group",children:[t.jsxs("div",{className:"model-combobox-optgroup","data-index":ee,children:[t.jsx(Gn,{provider:ie,size:"sm"}),t.jsx("span",{className:"model-combobox-optgroup-text",children:ie}),d&&t.jsx("button",{type:"button",className:`model-combobox-optgroup-favorite ${L?"model-combobox-optgroup-favorite--active":""}`,onClick:me=>{me.stopPropagation(),d(ie)},title:L?"Remove from favorites":"Add to favorites","aria-label":L?`Remove ${ie} from favorites`:`Add ${ie} to favorites`,children:"★"})]}),Y.map(me=>{const B=`${me.provider}/${me.id}`,xe=D.findIndex($e=>$e.value===B),Ne=b===xe,te=n===B,Be=u.includes(B);return t.jsxs("div",{"data-index":xe,className:`model-combobox-option ${Ne?"model-combobox-option--highlighted":""} ${te?"model-combobox-option--selected":""}`,onClick:()=>Ce(B),onMouseEnter:()=>y(xe),role:"option","aria-selected":te,children:[t.jsx("span",{className:"model-combobox-option-text",children:me.name}),t.jsx("span",{className:"model-combobox-option-id",children:me.id}),h&&t.jsx("button",{type:"button",className:`model-combobox-option-favorite ${Be?"model-combobox-option-favorite--active":""}`,onClick:$e=>{$e.stopPropagation(),h(B)},title:Be?"Remove from favorites":"Add to favorites","aria-label":Be?`Remove ${me.name} from favorites`:`Add ${me.name} to favorites`,children:Be?"★":"☆"})]},B)})]},ie)}),Q.length===0&&X&&t.jsxs("div",{className:"model-combobox-no-results",children:["No models match '",w,"'"]})]})]}):null;return t.jsxs(t.Fragment,{children:[t.jsx("div",{ref:k,className:"model-combobox",onKeyDown:be,children:t.jsxs("button",{ref:R,type:"button",id:o,className:"model-combobox-trigger",onClick:ae,disabled:r,"aria-haspopup":"listbox","aria-expanded":p,"aria-label":l,children:[W&&t.jsx("span",{className:"model-combobox-trigger-icon",children:t.jsx(Gn,{provider:W,size:"sm"})}),t.jsx("span",{className:"model-combobox-trigger-text",children:E||a}),t.jsx("span",{className:"model-combobox-trigger-arrow",children:"▼"})]})}),C&&pe?Ba.createPortal(pe,C):null]})}function gm(e,n){return typeof n!="string"||n.length===0?e:`kb:${n}:${e}`}function Wn(e,n){if(typeof window>"u")return null;const s=window.localStorage?.getItem;return typeof s!="function"?null:s.call(window.localStorage,gm(e,n))}function ss(e,n,s){if(typeof window>"u")return;const a=window.localStorage?.setItem;typeof a=="function"&&a.call(window.localStorage,gm(e,s),n)}function Ya(e,n){if(typeof window>"u")return;const s=window.localStorage?.removeItem;typeof s=="function"&&s.call(window.localStorage,gm(e,n))}const G_=1e4,K_=1e3;function Pc(){const[e,n]=i.useState([]),[s,a]=i.useState(!0),[r,o]=i.useState(null),l=i.useRef(null),c=i.useRef(0),d=i.useCallback(async()=>{try{o(null);const b=await ac();n(b)}catch(b){o(b instanceof Error?b.message:"Failed to fetch nodes")}},[]);i.useEffect(()=>{let b=!1;async function y(){a(!0);try{const S=await ac();b||(n(S),o(null))}catch(S){b||o(S instanceof Error?S.message:"Failed to fetch nodes")}finally{b||a(!1)}}y();const N=()=>{if(document.visibilityState!=="visible")return;const S=Date.now();S-c.current<K_||(c.current=S,d())};return document.addEventListener("visibilitychange",N),()=>{b=!0,document.removeEventListener("visibilitychange",N)}},[d]),i.useEffect(()=>{if(!s)return l.current=setInterval(()=>{d()},G_),()=>{l.current&&(clearInterval(l.current),l.current=null)}},[s,d]);const u=i.useCallback(async b=>{const{projectMappings:y,...N}=b,S=await g1(N);if(y.length>0)try{await aE(S.id,y)}catch(C){const x=C instanceof Error?C.message:"Failed to persist project mappings";let k="";try{await Eh(S.id)}catch(R){k=R instanceof Error?R.message:"Failed to unregister node after mapping failure"}throw await d(),k?new Error(`${x}. Cleanup also failed: ${k}`):new Error(x)}return await d(),S},[d]),h=i.useCallback(async(b,y)=>{const N=await x1(b,y);return n(S=>S.map(C=>C.id===b?N:C)),N},[]),m=i.useCallback(async b=>{await Eh(b),n(y=>y.filter(N=>N.id!==b))},[]),f=i.useCallback(async b=>{const y=await k1(b);n(N=>N.map(S=>S.id===b?{...S,status:y.status,updatedAt:y.checkedAt}:S))},[]),p=i.useCallback(b=>v1(b),[]),g=i.useCallback(async(b,y)=>{const N=await y1(b,y);return n(S=>S.map(C=>C.id===b?{...C,dockerConfig:N}:C)),N},[]),w=i.useCallback(async b=>{const y=await w1(b);return"persistedVersion"in y?y:{persistedVersion:0,deployedVersion:null,needsRecreate:!1}},[]),v=i.useCallback(async b=>b1(b),[]);return{nodes:e,loading:s,error:r,refresh:d,register:u,update:h,unregister:m,healthCheck:f,fetchDockerConfig:p,patchDockerConfig:g,fetchDockerDiff:w,discoverRemoteProjects:v}}const co="kb-quick-entry-text",J_=["image/png","image/jpeg","image/gif","image/webp"];function Y_(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}function pd(e,n){return e&&n?`${e}/${n}`:""}function fd(e){if(!e)return{provider:void 0,modelId:void 0};const n=e.indexOf("/");return n===-1?{provider:void 0,modelId:void 0}:{provider:e.slice(0,n),modelId:e.slice(n+1)}}function Rx({onCreate:e,addToast:n,tasks:s=[],availableModels:a,onPlanningMode:r,onSubtaskBreakdown:o,projectId:l,autoExpand:c=!0,favoriteProviders:d,favoriteModels:u,onToggleFavorite:h,onToggleModelFavorite:m}){const[f,p]=i.useState(()=>typeof window<"u"&&Wn(co,l)||""),[g,w]=i.useState(!1),[v,b]=i.useState(!1),[y,N]=i.useState(!1),S=i.useRef(null),C=i.useRef(null),x=i.useRef(!1),k=i.useRef(l),[R,z]=i.useState([]),_=i.useRef([]),[A,Q]=i.useState([]),[H,M]=i.useState(!1),[T,F]=i.useState(""),[W,oe]=i.useState(null),[D,E]=i.useState([]),[P,$]=i.useState(void 0),[j,q]=i.useState(!1),[de,be]=i.useState(!1),[Ce,Ae]=i.useState(!1),[ae,X]=i.useState(!1),[pe,ie]=i.useState(!1),[ye,ee]=i.useState(null),[L,Y]=i.useState(void 0),[me,B]=i.useState(void 0),[xe,Ne]=i.useState(void 0),[te,Be]=i.useState(void 0),[$e,ct]=i.useState(void 0),[De,le]=i.useState(void 0),_e=i.useRef(null),Le=i.useRef(null),mt=i.useRef(null),Ve=i.useRef(null),ge=i.useRef(null),he=i.useRef(null),Pe=i.useRef(null),dt=i.useRef(null),[jt,nt]=i.useState(null),[xt,Ie]=i.useState(null),[Qe,ot]=i.useState(null),[Tt,Mt]=i.useState(null),We=i.useRef(null),J=i.useRef(null),[ke,lt]=i.useState(null),[ve]=i.useState(()=>typeof document<"u"?document.body:null),[st,Ue]=i.useState(!1),[fe,Xe]=i.useState(null),[vt,St]=i.useState(a??[]),[Et,Pt]=i.useState([]),[Jt,dn]=i.useState([]),[Vt,ln]=i.useState(null),[fn,_n]=i.useState(void 0),[an,Dn]=i.useState(!1),[vn,Ut]=i.useState(Rs),[rn,bn]=i.useState(void 0),{nodes:en}=Pc(),[Yt,tn]=i.useState(!1),[Qt,Kt]=i.useState(!1),xn=i.useRef(null),un=i.useRef(null),[pn,$t]=i.useState(null),ue=d??Et,Re=u??Jt,et=!e;i.useEffect(()=>{if(a)St(a),Ue(!1),Xe(null);else{let Z=!1;return Ue(!0),Xe(null),Hs().then(Ee=>{Z||(St(Ee.models),d||Pt(Ee.favoriteProviders),u||dn(Ee.favoriteModels))}).catch(Ee=>{Z||Xe(Me(Ee)||"Failed to load models")}).finally(()=>{Z||Ue(!1)}),Rc(l).then(Ee=>{Z||ln(Ee)}).catch(()=>{}),()=>{Z=!0}}},[a,d,u,l]);const at=pd(L,me),Je=pd(xe,te),Nt=pd($e,De),bt=!!(L&&me),At=!!(xe&&te),se=!!($e&&De),re=Number(bt)+Number(At)+Number(se),Ge=fn?Vt?.modelPresets?.find(Z=>Z.id===fn)?.name??"Models":re>0?`${re} model${re===1?"":"s"}`:"Models",Ct=i.useCallback((Z,Ee)=>{if(!Z||!Ee)return"Using default";const gt=vt.find(zt=>zt.provider===Z&&zt.id===Ee);return gt?`${gt.provider}/${gt.id}`:`${Z}/${Ee}`},[vt]);i.useEffect(()=>{p(Wn(co,l)||"")},[l]),i.useEffect(()=>{typeof window<"u"&&ss(co,f,l)},[f,l]),i.useEffect(()=>{k.current!==l&&(k.current=l,E([]),$(void 0),oe(null),q(!1),nt(null))},[l]),i.useEffect(()=>{typeof window<"u"&&localStorage.removeItem("kb-quick-entry-expanded")},[]),i.useEffect(()=>{_.current=R},[R]),i.useEffect(()=>()=>{_.current.forEach(Z=>URL.revokeObjectURL(Z.previewUrl))},[]);const Gt=i.useCallback(()=>{const Z=S.current;if(!Z)return;Z.style.height="auto";const Ee=Math.min(Z.scrollHeight,200);Z.style.height=`${Ee}px`},[]);i.useEffect(()=>{v&&Gt()},[f,v,Gt]),i.useEffect(()=>{if(!g&&f===""&&S.current){const Z=setTimeout(()=>{S.current?.focus()},0);return()=>clearTimeout(Z)}},[g,f]),i.useEffect(()=>{H||F("")},[H]),i.useEffect(()=>{if(!Yt)return;const Z=Ee=>{const gt=Ee.target,zt=xn.current?.contains(gt),O=un.current?.contains(gt);!zt&&!O&&tn(!1)};return document.addEventListener("mousedown",Z),()=>document.removeEventListener("mousedown",Z)},[Yt]),i.useEffect(()=>{if(!pe)return;const Z=Ee=>{const gt=Ee.target,zt=_e.current?.contains(gt),O=Le.current?.contains(gt),He=gt instanceof Element&&gt.closest?.(".model-combobox-dropdown--portal")!=null;!zt&&!O&&!He&&(ie(!1),ee(null))};return document.addEventListener("mousedown",Z),()=>document.removeEventListener("mousedown",Z)},[pe]),i.useEffect(()=>{if(!de)return;const Z=Ee=>{const gt=Ee.target;ge.current?.contains(gt)||he.current?.contains(gt)||(be(!1),Ie(null))};return document.addEventListener("mousedown",Z),()=>document.removeEventListener("mousedown",Z)},[de]),i.useEffect(()=>{if(!j)return;const Z=Ee=>{const gt=Ee.target;mt.current?.contains(gt)||Ve.current?.contains(gt)||(q(!1),nt(null))};return document.addEventListener("mousedown",Z),()=>document.removeEventListener("mousedown",Z)},[j]),i.useEffect(()=>{if(!Ce)return;const Z=Ee=>{const gt=Ee.target;Pe.current?.contains(gt)||dt.current?.contains(gt)||(Ae(!1),ot(null))};return document.addEventListener("mousedown",Z),()=>document.removeEventListener("mousedown",Z)},[Ce]);const cn=i.useCallback(()=>{R.forEach(Z=>URL.revokeObjectURL(Z.previewUrl)),z([]),C.current&&(C.current.value=""),p(""),Q([]),oe(null),q(!1),nt(null),be(!1),Ie(null),Ae(!1),ot(null),Y(void 0),B(void 0),Ne(void 0),Be(void 0),ct(void 0),le(void 0),_n(void 0),Dn(!1),Ut(Rs),bn(void 0),M(!1),ie(!1),Mt(null),ee(null),tn(!1),Kt(!1),b(!1),N(!1),x.current=!0,S.current&&(S.current.style.height="auto"),typeof window<"u"&&Ya(co,l)},[R,l]),jn=i.useCallback(Z=>{if(!Z||Z.length===0)return;const Ee=[];for(let gt=0;gt<Z.length;gt++){const zt=Z[gt];J_.includes(zt.type)&&Ee.push({file:zt,previewUrl:URL.createObjectURL(zt)})}Ee.length>0&&z(gt=>[...gt,...Ee])},[]),Ln=i.useCallback(Z=>{g||jn(Z.clipboardData?.files)},[jn,g]),mn=i.useCallback(Z=>{z(Ee=>{const gt=Ee[Z];return gt&&URL.revokeObjectURL(gt.previewUrl),Ee.filter((zt,O)=>O!==Z)})},[]),Un=i.useCallback(async()=>{const Z=f.trim();if(!Z||g||!e)return;const Ee=f;w(!0),p("");try{const gt=await e({description:Z,column:"triage",dependencies:A.length?A:void 0,...W?{assignedAgentId:W}:{},modelPresetId:fn,modelProvider:bt?L:void 0,modelId:bt?me:void 0,validatorModelProvider:At?xe:void 0,validatorModelId:At?te:void 0,planningModelProvider:se?$e:void 0,planningModelId:se?De:void 0,...an?{executionMode:"fast"}:{},priority:vn,nodeId:rn});if(gt&&R.length>0){const zt=[];for(const O of R)try{await Ic(gt.id,O.file,l)}catch{zt.push(O.file.name)}zt.length>0&&n(`Failed to upload: ${zt.join(", ")}`,"error")}cn()}catch(gt){p(Ee),n(Me(gt)||"Failed to create task","error")}finally{w(!1)}},[f,g,e,A,W,bt,L,me,At,xe,te,se,$e,De,R,l,n,cn,an,vn,rn]),ce=i.useCallback(Z=>{if(Z.key==="Enter"){if(Z.shiftKey&&v)return;Z.preventDefault(),Un()}else if(Z.key==="Escape"){if(Z.preventDefault(),ye){ee(null);return}if(pe){ie(!1),Mt(null);return}if(H){M(!1);return}if(Yt){tn(!1);return}if(de){be(!1),Ie(null);return}if(Ce){Ae(!1),ot(null);return}if(j){q(!1),nt(null);return}f.trim()&&(p(""),S.current&&(S.current.style.height="auto"),typeof window<"u"&&Ya(co,l)),b(!1),N(!1),S.current?.blur()}},[Un,f,v,H,j,de,pe,ye,Yt,Ce,l,N]),it=i.useCallback(()=>{x.current&&(x.current=!1)},[]),ut=i.useCallback(()=>{c&&b(!0)},[c]),wt=i.useCallback(Z=>{Q(Ee=>Ee.includes(Z)?Ee.filter(gt=>gt!==Z):[...Ee,Z])},[]),G=i.useCallback(()=>{const Z=window.visualViewport;return Z&&Z.width>0&&Z.height>0?{width:Z.width,height:Z.height,offsetTop:Z.offsetTop,offsetLeft:Z.offsetLeft}:{width:window.innerWidth,height:window.innerHeight,offsetTop:0,offsetLeft:0}},[]),ze=i.useCallback(()=>{const Z=_e.current;if(!Z)return;const Ee=Z.getBoundingClientRect(),{width:gt,height:zt,offsetTop:O,offsetLeft:He}=G(),Ze=16,Ye=16,ft=4,Rt=gt<=768,Ft=Math.min(Rt?zt*.6:zt*.5,360),on=Math.max(Ee.width*1.35,320),yn=Rt?Math.min(gt-Ze*2,360):on,ne=Math.min(yn,Math.max(gt-Ze*2,240)),Fe=Ee.top-O,qe=Ee.bottom-O,Bt=Ee.left-He,nn=zt-qe,An=Fe,es=Math.max(nn-Ye-ft,160),Hn=Math.max(An-Ye-ft,160),Zn=nn<Ft&&An>nn,ls=Math.max(Math.min(Zn?Hn:es,Ft),160),hs=Math.min(Math.max(Bt,Ze),gt-Ze-ne)+He,qi=Zn?Math.max(Ye+O,Fe-ls-ft+O):Math.min(qe+ft+O,zt+O-Ye-ls);Mt({top:qi,left:hs,width:ne,maxHeight:ls})},[G]),Ht=i.useCallback(()=>{const Z=xn.current?.querySelector(".refine-button");if(!Z)return;const Ee=Z.getBoundingClientRect(),{width:gt,height:zt,offsetTop:O,offsetLeft:He}=G(),Ze=8,Ye=12,ft=4,Rt=Math.min(200,Math.max(zt-Ye*2,160)),Ft=Math.min(200,gt-Ze*2),on=Ee.top-O,yn=Ee.bottom-O,ne=Ee.left-He,Fe=zt-yn,qe=on,Bt=Fe<Rt&&qe>Fe,nn=Math.min(Math.max(ne,Ze),gt-Ze-Ft)+He,An=Bt?Math.max(Ye+O,on-Rt-ft+O):Math.min(yn+ft+O,zt+O-Ye-Rt);$t({top:An,left:nn})},[G]),gn=i.useCallback(()=>{const Z=We.current;if(!Z)return;const Ee=Z.getBoundingClientRect(),{width:gt,height:zt,offsetTop:O,offsetLeft:He}=G(),Ze=16,Ye=16,ft=4,Rt=gt<=768,Ft=Math.min(Rt?zt*.6:zt*.5,320),on=Rt?Math.min(gt-Ze*2,360):Math.max(Ee.width,280),yn=Math.min(on,Math.max(gt-Ze*2,240)),ne=Ee.top-O,Fe=Ee.bottom-O,qe=Ee.left-He,Bt=zt-Fe,nn=ne,An=Math.max(Bt-Ye-ft,200),es=Math.max(nn-Ye-ft,200),Hn=Bt<Ft&&nn>Bt,Zn=Math.max(Math.min(Hn?es:An,Ft),200),ls=Math.min(Math.max(qe,Ze),gt-Ze-yn)+He,hs=Hn?Math.max(Ye+O,ne-Zn-ft+O):Math.min(Fe+ft+O,zt+O-Ye-Zn);lt({top:hs,left:ls,width:yn,maxHeight:Zn})},[G]),Mn=i.useCallback(()=>{const Z=mt.current?.querySelector("button");if(!Z)return;const Ee=Z.getBoundingClientRect(),{width:gt,height:zt,offsetTop:O,offsetLeft:He}=G(),Ze=16,Ye=16,ft=4,Rt=gt<=768,Ft=Math.min(Rt?zt*.6:zt*.5,320),on=Rt?Math.min(gt-Ze*2,280):Math.max(Ee.width,240),yn=Math.min(on,Math.max(gt-Ze*2,200)),ne=Ee.top-O,Fe=Ee.bottom-O,qe=Ee.left-He,Bt=zt-Fe,nn=ne,An=Math.max(Bt-Ye-ft,160),es=Math.max(nn-Ye-ft,160),Hn=Bt<Ft&&nn>Bt,Zn=Math.max(Math.min(Hn?es:An,Ft),160),ls=Math.min(Math.max(qe,Ze),gt-Ze-yn)+He,hs=Hn?Math.max(Ye+O,ne-Zn-ft+O):Math.min(Fe+ft+O,zt+O-Ye-Zn);nt({top:hs,left:ls,width:yn,maxHeight:Zn})},[G]),je=i.useCallback(()=>{const Z=ge.current?.querySelector("button");if(!Z)return;const Ee=Z.getBoundingClientRect(),{width:gt,height:zt,offsetTop:O,offsetLeft:He}=G(),Ze=16,Ye=16,ft=4,Rt=gt<=768,Ft=Math.min(Rt?zt*.6:zt*.5,320),on=Rt?Math.min(gt-Ze*2,280):Math.max(Ee.width,240),yn=Math.min(on,Math.max(gt-Ze*2,200)),ne=Ee.top-O,Fe=Ee.bottom-O,qe=Ee.left-He,Bt=zt-Fe,nn=ne,An=Math.max(Bt-Ye-ft,160),es=Math.max(nn-Ye-ft,160),Hn=Bt<Ft&&nn>Bt,Zn=Math.max(Math.min(Hn?es:An,Ft),160),ls=Math.min(Math.max(qe,Ze),gt-Ze-yn)+He,hs=Hn?Math.max(Ye+O,ne-Zn-ft+O):Math.min(Fe+ft+O,zt+O-Ye-Zn);Ie({top:hs,left:ls,width:yn,maxHeight:Zn})},[G]),pt=i.useCallback(()=>{const Z=Pe.current?.querySelector("button");if(!Z)return;const Ee=Z.getBoundingClientRect(),{width:gt,height:zt,offsetTop:O,offsetLeft:He}=G(),Ze=16,Ye=16,ft=4,Rt=220,Ft=Math.min(Math.max(Ee.width,200),Math.max(gt-Ze*2,200)),on=Ee.top-O,yn=Ee.bottom-O,ne=Ee.left-He,Fe=zt-yn,qe=on,Bt=Math.max(Fe-Ye-ft,160),nn=Math.max(qe-Ye-ft,160),An=Fe<Rt&&qe>Fe,es=Math.max(Math.min(An?nn:Bt,Rt),160),Hn=Math.min(Math.max(ne,Ze),gt-Ze-Ft)+He,Zn=An?Math.max(Ye+O,on-es-ft+O):Math.min(yn+ft+O,zt+O-Ye-es);ot({top:Zn,left:Hn,width:Ft,maxHeight:es})},[G]);i.useEffect(()=>{if(!pe)return;const Z=()=>ze();window.addEventListener("resize",Z),window.addEventListener("scroll",Z,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",Z),Ee.addEventListener("scroll",Z)),()=>{window.removeEventListener("resize",Z),window.removeEventListener("scroll",Z,!0),Ee&&(Ee.removeEventListener("resize",Z),Ee.removeEventListener("scroll",Z))}},[pe,ze]),i.useEffect(()=>{if(!Yt)return;const Z=()=>Ht();window.addEventListener("resize",Z),window.addEventListener("scroll",Z,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",Z),Ee.addEventListener("scroll",Z)),()=>{window.removeEventListener("resize",Z),window.removeEventListener("scroll",Z,!0),Ee&&(Ee.removeEventListener("resize",Z),Ee.removeEventListener("scroll",Z))}},[Yt,Ht]),i.useEffect(()=>{if(!H)return;const Z=()=>gn();window.addEventListener("resize",Z),window.addEventListener("scroll",Z,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",Z),Ee.addEventListener("scroll",Z)),()=>{window.removeEventListener("resize",Z),window.removeEventListener("scroll",Z,!0),Ee&&(Ee.removeEventListener("resize",Z),Ee.removeEventListener("scroll",Z))}},[H,gn]),i.useEffect(()=>{if(!j)return;const Z=()=>Mn();window.addEventListener("resize",Z),window.addEventListener("scroll",Z,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",Z),Ee.addEventListener("scroll",Z)),()=>{window.removeEventListener("resize",Z),window.removeEventListener("scroll",Z,!0),Ee&&(Ee.removeEventListener("resize",Z),Ee.removeEventListener("scroll",Z))}},[j,Mn]),i.useEffect(()=>{if(!de)return;const Z=()=>je();window.addEventListener("resize",Z),window.addEventListener("scroll",Z,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",Z),Ee.addEventListener("scroll",Z)),()=>{window.removeEventListener("resize",Z),window.removeEventListener("scroll",Z,!0),Ee&&(Ee.removeEventListener("resize",Z),Ee.removeEventListener("scroll",Z))}},[de,je]),i.useEffect(()=>{if(!Ce)return;const Z=()=>pt();window.addEventListener("resize",Z),window.addEventListener("scroll",Z,!0);const Ee=window.visualViewport;return Ee&&(Ee.addEventListener("resize",Z),Ee.addEventListener("scroll",Z)),()=>{window.removeEventListener("resize",Z),window.removeEventListener("scroll",Z,!0),Ee&&(Ee.removeEventListener("resize",Z),Ee.removeEventListener("scroll",Z))}},[Ce,pt]);const Dt=i.useCallback(Z=>{const Ee=fd(Z);ct(Ee.provider),le(Ee.modelId)},[]),Zt=i.useCallback(Z=>{const Ee=fd(Z);Y(Ee.provider),B(Ee.modelId)},[]),Nn=i.useCallback(Z=>{const Ee=fd(Z);Ne(Ee.provider),Be(Ee.modelId)},[]),Xt=i.useCallback(async Z=>{if(h){h(Z);return}const Ee=Et,zt=Ee.includes(Z)?Ee.filter(O=>O!==Z):[Z,...Ee];Pt(zt);try{await Kn({favoriteProviders:zt,favoriteModels:Jt})}catch{Pt(Ee)}},[Et,Jt,h]),qt=i.useCallback(async Z=>{if(m){m(Z);return}const Ee=Jt,zt=Ee.includes(Z)?Ee.filter(O=>O!==Z):[Z,...Ee];dn(zt);try{await Kn({favoriteProviders:Et,favoriteModels:zt})}catch{dn(Ee)}},[Jt,Et,m]),Ot=i.useCallback(()=>{const Z=f.trim();if(!Z){n("Enter a description first","error");return}r?.(Z),cn()},[f,r,n,cn]),qn=i.useCallback(()=>{const Z=f.trim();if(!Z){n("Enter a description first","error");return}o?.(Z),cn()},[f,o,n,cn]),On=i.useCallback(()=>{Un()},[Un]),os=i.useCallback(async Z=>{const Ee=f.trim();if(!(!Ee||Qt)){tn(!1),Kt(!0);try{const gt=await Yb(Ee,Z,l);p(gt),n("Description refined with AI","success"),S.current&&(S.current.style.height="auto",S.current.style.height=`${Math.min(S.current.scrollHeight,200)}px`)}catch(gt){const zt=Qb(gt);n(zt,"error")}finally{Kt(!1)}}},[f,Qt,n,l]),xs=(Z,Ee)=>Z.length>Ee?Z.slice(0,Ee)+"…":Z,ms=i.useCallback(async()=>{if(a){St(a),Xe(null),Ue(!1);return}Ue(!0),Xe(null);try{const Z=await Hs();St(Z.models),d||Pt(Z.favoriteProviders),u||dn(Z.favoriteModels)}catch(Z){Xe(Me(Z)||"Failed to load models")}finally{Ue(!1)}},[a,d,u]),vs=i.useCallback(async()=>{if(D.length>0&&P===l){q(!0),Mn();return}X(!0);try{const Z=await Yr(void 0,l);E(Z),$(l),q(!0),Mn()}catch(Z){const Ee=Me(Z);n(Ee?`Failed to load agents: ${Ee}`:"Failed to load agents","error"),q(!1)}finally{X(!1)}},[D.length,P,l,n,Mn]),Tn=(W?D.find(Z=>Z.id===W):void 0)?.name??W,ys=rn?en.find(Z=>Z.id===rn):void 0,Ls=y,_s=i.useCallback(()=>{N(Z=>{const Ee=!Z;return b(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:S,className:`quick-entry-input ${v?"quick-entry-input--expanded":""}`,placeholder:g?"Creating...":"Add a task...",value:f,onChange:Z=>p(Z.target.value),onKeyDown:ce,onPaste:Ln,onFocus:ut,onBlur:it,disabled:g||et,"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:_s,"aria-expanded":y,"aria-controls":"quick-entry-controls","data-testid":"quick-entry-toggle",title:y?"Collapse":"Expand",children:y?t.jsx(hi,{size:14}):t.jsx(Cn,{size:14})})]})}),t.jsxs("div",{id:"quick-entry-controls",className:"quick-entry-controls",hidden:!Ls,"aria-hidden":!Ls,children:[Ls&&!g&&t.jsxs("div",{className:"quick-entry-actions","data-testid":"quick-entry-actions",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:Ot,onMouseDown:Z=>Z.preventDefault(),disabled:!f.trim(),"data-testid":"plan-button",title:"Open planning mode with current description",children:[t.jsx(Bi,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Plan"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:qn,onMouseDown:Z=>Z.preventDefault(),disabled:!f.trim(),"data-testid":"subtask-button",title:"Break down into AI-generated subtasks",children:[t.jsx(Cc,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Subtask"]}),t.jsxs("div",{className:"refine-trigger-wrap",ref:xn,children:[t.jsxs("button",{type:"button",className:`btn btn-sm refine-button ${Qt?"refine-button--loading":""}`,onClick:()=>{tn(Z=>{const Ee=!Z;return Ee?Ht():$t(null),Ee})},disabled:!f.trim()||Qt,"data-testid":"refine-button",title:"Refine description with AI",children:[t.jsx(cs,{size:12,style:{verticalAlign:"middle"}}),Qt?"Refining...":"Refine"]}),Yt&&ve&&pn&&Ba.createPortal(t.jsxs("div",{ref:un,className:"refine-menu refine-menu--portal",onMouseDown:Z=>Z.preventDefault(),style:{position:"fixed",top:`${pn.top}px`,left:`${pn.left}px`},children:[t.jsxs("div",{className:"refine-menu-item",onClick:()=>os("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:()=>os("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:()=>os("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:()=>os("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"})]})]}),ve)]}),t.jsx("div",{className:"dep-trigger-wrap",children:t.jsxs("button",{ref:We,type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-deps",onClick:()=>{M(Z=>{const Ee=!Z;return Ee?(ie(!1),Mt(null),ee(null),q(!1),nt(null),be(!1),Ie(null),Ae(!1),ot(null),gn()):lt(null),Ee})},children:[t.jsx(Tr,{size:12,style:{verticalAlign:"middle"}}),A.length>0?`${A.length} deps`:"Deps"]})}),H&&ve&&ke&&(()=>{const Z=T.toLowerCase(),Ee=(Z?s.filter(gt=>gt.id.toLowerCase().includes(Z)||gt.title&&gt.title.toLowerCase().includes(Z)||gt.description&&gt.description.toLowerCase().includes(Z)):[...s]).sort((gt,zt)=>{const O=zt.createdAt.localeCompare(gt.createdAt);if(O!==0)return O;const He=parseInt(gt.id.slice(gt.id.lastIndexOf("-")+1),10)||0;return(parseInt(zt.id.slice(zt.id.lastIndexOf("-")+1),10)||0)-He});return Ba.createPortal(t.jsxs("div",{ref:J,className:"dep-dropdown dep-dropdown--portal",onMouseDown:gt=>gt.preventDefault(),style:{position:"fixed",top:`${ke.top}px`,left:`${ke.left}px`,width:`${ke.width}px`,maxHeight:ke.maxHeight?`${ke.maxHeight}px`:void 0,overflowY:ke.maxHeight?"auto":void 0},children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:T,onChange:gt=>F(gt.target.value),onClick:gt=>gt.stopPropagation()}),Ee.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No existing tasks"}):Ee.map(gt=>t.jsxs("div",{className:`dep-dropdown-item${A.includes(gt.id)?" selected":""}`,onMouseDown:zt=>zt.preventDefault(),onClick:()=>wt(gt.id),children:[t.jsx("span",{className:"dep-dropdown-id",children:gt.id}),t.jsx("span",{className:"dep-dropdown-title",children:xs(gt.title||gt.description||gt.id,60)})]},gt.id))]}),ve)})(),t.jsxs("button",{type:"button",className:"btn btn-sm","data-testid":"quick-entry-attach",onClick:()=>C.current?.click(),children:[t.jsx(Pb,{size:12,style:{verticalAlign:"middle"}}),R.length>0?`Attach (${R.length})`:"Attach"]}),t.jsxs("button",{ref:_e,type:"button",className:"btn btn-sm","data-testid":"quick-entry-models",onClick:()=>{M(!1),q(!1),nt(null),be(!1),Ie(null),Ae(!1),ot(null),ee(null),ie(!0),ze()},children:[t.jsx(Uo,{size:12,style:{verticalAlign:"middle"}}),Ge]}),t.jsx("div",{className:"node-trigger-wrap",ref:ge,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-node-button",onClick:()=>{M(!1),q(!1),nt(null),ie(!1),Mt(null),ee(null),Ae(!1),ot(null),be(Z=>{const Ee=!Z;return Ee?je():Ie(null),Ee})},children:[t.jsx(Ho,{size:12,style:{verticalAlign:"middle"}}),` ${ys?.name??"Node"}`,ys&&t.jsx("span",{className:"quick-entry-node-status",children:t.jsx(Ka,{status:ys.status,showLabel:!0})})]})}),de&&ve&&xt&&Ba.createPortal(t.jsxs("div",{ref:he,className:"dep-dropdown node-picker-dropdown node-picker-dropdown--portal",onMouseDown:Z=>Z.preventDefault(),style:{position:"fixed",top:`${xt.top}px`,left:`${xt.left}px`,width:`${xt.width}px`,maxHeight:xt.maxHeight?`${xt.maxHeight}px`:void 0,overflowY:xt.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${rn==null?" selected":""}`,onMouseDown:Z=>Z.preventDefault(),onClick:()=>{bn(void 0),be(!1),Ie(null)},children:t.jsx("span",{className:"node-picker-item-name",children:"Project default / local"})}),en.map(Z=>t.jsxs("div",{className:`dep-dropdown-item node-picker-item${rn===Z.id?" selected":""}`,onMouseDown:Ee=>Ee.preventDefault(),onClick:()=>{bn(Z.id),be(!1),Ie(null)},children:[t.jsx("span",{className:"quick-entry-node-status",children:t.jsx(Ka,{status:Z.status})}),t.jsx("span",{className:"node-picker-item-name",children:Z.name}),t.jsx("span",{className:"node-picker-item-status",children:Y_(Z.status)})]},Z.id))]}),ve),t.jsx("div",{className:"agent-trigger-wrap",ref:mt,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{j?(q(!1),nt(null)):(be(!1),Ie(null),Ae(!1),ot(null),vs())},"data-testid":"quick-entry-agent-button",children:[t.jsx(Qn,{size:12,style:{verticalAlign:"middle"}}),Tn?` ${Tn}`:" Agent"]})}),j&&ve&&jt&&Ba.createPortal(t.jsxs("div",{ref:Ve,className:"dep-dropdown agent-picker-dropdown agent-picker-dropdown--portal",onMouseDown:Z=>Z.preventDefault(),style:{position:"fixed",top:`${jt.top}px`,left:`${jt.left}px`,width:`${jt.width}px`,maxHeight:jt.maxHeight?`${jt.maxHeight}px`:void 0,overflowY:jt.maxHeight?"auto":void 0},children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select agent"}),ae&&t.jsx("div",{className:"dep-dropdown-empty",children:"Loading agents..."}),!ae&&D.map(Z=>t.jsxs("div",{className:`dep-dropdown-item${W===Z.id?" selected":""}`,onMouseDown:Ee=>Ee.preventDefault(),onClick:()=>{oe(Z.id===W?null:Z.id),q(!1),nt(null)},children:[t.jsx(Qn,{size:12,style:{marginRight:6}}),t.jsx("span",{className:"dep-dropdown-id",children:Z.role}),t.jsx("span",{className:"dep-dropdown-title",children:Z.name})]},Z.id)),!ae&&D.length===0&&t.jsx("div",{className:"dep-dropdown-empty",children:"No agents available"}),W&&t.jsx("div",{className:"dep-dropdown-item",onMouseDown:Z=>Z.preventDefault(),onClick:()=>{oe(null),q(!1),nt(null)},children:t.jsx("span",{className:"dep-dropdown-title",children:"Clear selection"})})]}),ve),t.jsx("div",{className:"priority-trigger-wrap",ref:Pe,children:t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger","data-testid":"quick-entry-priority-button",onClick:()=>{M(!1),q(!1),nt(null),be(!1),Ie(null),ie(!1),Mt(null),ee(null),Ae(Z=>{const Ee=!Z;return Ee?pt():ot(null),Ee})},children:[t.jsx(kk,{size:12,style:{verticalAlign:"middle"}}),` ${vn[0].toUpperCase()}${vn.slice(1)}`]})}),Ce&&ve&&Qe&&Ba.createPortal(t.jsxs("div",{ref:dt,className:"dep-dropdown priority-picker-dropdown priority-picker-dropdown--portal",onMouseDown:Z=>Z.preventDefault(),style:{position:"fixed",top:`${Qe.top}px`,left:`${Qe.left}px`,width:`${Qe.width}px`,maxHeight:Qe.maxHeight?`${Qe.maxHeight}px`:void 0,overflowY:Qe.maxHeight?"auto":void 0},children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select priority"}),Ca.map(Z=>{const Ee=`${Z[0].toUpperCase()}${Z.slice(1)}`;return t.jsx("div",{className:`dep-dropdown-item${vn===Z?" selected":""}`,"data-testid":`quick-entry-priority-option-${Z}`,onMouseDown:gt=>gt.preventDefault(),onClick:()=>{Ut(Z),Ae(!1),ot(null)},children:t.jsx("span",{className:"dep-dropdown-title",children:Ee})},Z)})]}),ve),t.jsx("button",{type:"button",className:`btn btn-sm ${an?"btn-primary":""}`,onClick:()=>Dn(Z=>!Z),onMouseDown:Z=>Z.preventDefault(),"aria-pressed":an,"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:On,onMouseDown:Z=>Z.preventDefault(),disabled:!f.trim()||g,"data-testid":"quick-entry-save",title:"Create task",children:[t.jsx(Db,{size:12,style:{verticalAlign:"middle",marginRight:4}}),"Save"]})]}),R.length>0&&t.jsx("div",{className:"inline-create-previews",children:R.map((Z,Ee)=>t.jsxs("div",{className:"inline-create-preview",children:[t.jsx("img",{src:Z.previewUrl,alt:Z.file.name}),t.jsx("button",{type:"button",className:"inline-create-preview-remove",onClick:()=>mn(Ee),disabled:g,title:"Remove image","data-testid":`quick-entry-preview-remove-${Ee}`,children:"×"})]},Z.previewUrl))}),pe&&ve&&Tt&&Ba.createPortal(t.jsx("div",{ref:Le,className:"model-nested-menu model-nested-menu--portal",onMouseDown:Z=>Z.preventDefault(),"data-testid":"model-nested-menu",style:{position:"fixed",top:`${Tt.top}px`,left:`${Tt.left}px`,width:`${Tt.width}px`,maxHeight:Tt.maxHeight?`${Tt.maxHeight}px`:void 0,overflowY:Tt.maxHeight?"auto":void 0},children:ye===null?t.jsxs("div",{className:"model-menu-items",children:[t.jsxs("button",{type:"button",className:`model-menu-item ${se?"model-menu-item--active":""}`,onClick:()=>ee("plan"),"data-testid":"model-menu-plan",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(Bi,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Plan"]}),t.jsx("span",{className:"model-menu-item-value",children:se?Ct($e,De):"Using default"}),t.jsx(Vn,{size:12,style:{marginLeft:"auto",color:"var(--text-dim)"}})]}),t.jsxs("button",{type:"button",className:`model-menu-item ${bt?"model-menu-item--active":""}`,onClick:()=>ee("executor"),"data-testid":"model-menu-executor",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(cs,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Executor"]}),t.jsx("span",{className:"model-menu-item-value",children:bt?Ct(L,me):"Using default"}),t.jsx(Vn,{size:12,style:{marginLeft:"auto",color:"var(--text-dim)"}})]}),t.jsxs("button",{type:"button",className:`model-menu-item ${At?"model-menu-item--active":""}`,onClick:()=>ee("validator"),"data-testid":"model-menu-validator",children:[t.jsxs("span",{className:"model-menu-item-label",children:[t.jsx(Uo,{size:12,style:{verticalAlign:"middle",marginRight:6}}),"Reviewer"]}),t.jsx("span",{className:"model-menu-item-value",children:At?Ct(xe,te):"Using default"}),t.jsx(Vn,{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:()=>ee(null),"data-testid":"model-submenu-back",children:[t.jsx(Cn,{size:12,style:{transform:"rotate(90deg)",marginRight:4}}),"Back"]}),t.jsxs("div",{className:"model-submenu-header",children:[ye==="plan"&&"Plan Model",ye==="executor"&&"Executor Model",ye==="validator"&&"Reviewer Model"]}),t.jsx(Cs,{models:vt,value:ye==="plan"?Nt:ye==="executor"?at:Je,onChange:ye==="plan"?Dt:ye==="executor"?Zt:Nn,placeholder:"Using default",disabled:st,id:`model-${ye}-select`,label:`${ye} model`,favoriteProviders:ue,onToggleFavorite:Xt,favoriteModels:Re,onToggleModelFavorite:qt}),fe&&t.jsxs("div",{className:"model-submenu-error",children:[t.jsx("span",{children:fe}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:ms,children:"Retry"})]})]})}),ve)]}),t.jsx("input",{ref:C,type:"file",accept:"image/*",multiple:!0,style:{display:"none"},onChange:Z=>{jn(Z.target.files),Z.currentTarget.value=""},"data-testid":"quick-entry-file-input"}),t.jsx("div",{className:"quick-entry-hint",children:"Enter to create · Esc to cancel"})]})}function Q_(e){return um(e)||e}function X_(e){const n=new Map(e.map(l=>[l.id,l])),s=[],a=new Set,r=new Set;function o(l){if(a.has(l)||r.has(l))return;r.add(l);const c=n.get(l);if(c)for(const d of c.dependencies||[])n.has(d)&&o(d);r.delete(l),a.add(l),s.push(l)}for(const l of e)o(l.id);return s}function Z_(e,n,s){const a=e.filter(g=>g.worktree),r=e.filter(g=>!g.worktree),o=new Map;for(const g of a){const w=g.worktree,v=o.get(w)||[];v.push(g),o.set(w,v)}const l=new Map(n.map(g=>[g.id,g])),d=n.filter(g=>g.column==="todo").filter(g=>!g.paused&&(g.dependencies||[]).every(w=>{const v=l.get(w);return v&&(v.column==="done"||v.column==="in-review"||v.column==="archived")})),h=X_(d).map(g=>l.get(g)).filter(g=>g!==void 0&&d.includes(g)),m=[],f=Array.from(o.keys());for(const g of f)m.push({label:Q_(g),activeTasks:o.get(g),queuedTasks:[]});r.length>0&&m.push({label:"Unassigned",activeTasks:r,queuedTasks:[]});const p=h.slice(0,s);return p.length>0&&m.push({label:"Up Next",activeTasks:[],queuedTasks:p}),m}const gp=100,gd=50,bp=25;function eM({column:e,tasks:n,projectId:s,maxConcurrent:a,onMoveTask:r,onPauseTask:o,onOpenDetail:l,addToast:c,onQuickCreate:d,onNewTask:u,autoMerge:h,onToggleAutoMerge:m,globalPaused:f,onUpdateTask:p,onRetryTask:g,onArchiveTask:w,onUnarchiveTask:v,onDeleteTask:b,onArchiveAllDone:y,collapsed:N,onToggleCollapse:S,allTasks:C,availableModels:x,onPlanningMode:k,onSubtaskBreakdown:R,onOpenDetailWithTab:z,favoriteProviders:_,favoriteModels:A,onToggleFavorite:Q,onToggleModelFavorite:H,isSearchActive:M,taskStuckTimeoutMs:T,onOpenMission:F,lastFetchTimeMs:W,workflowStepNameLookup:oe,blockerFanoutMap:D}){const[E,P]=i.useState(!1),[$,j]=i.useState(gd),[q,de]=i.useState(!1),[be,Ce]=i.useState(!1),[Ae,ae]=i.useState(!1),[X,pe]=i.useState(!1),ie=i.useRef(null),ye=LE(n.length),{confirm:ee}=ii();i.useEffect(()=>{if(!q)return;function Pe(jt){ie.current?.contains(jt.target)||de(!1)}function dt(jt){jt.key==="Escape"&&de(!1)}return document.addEventListener("mousedown",Pe),document.addEventListener("keydown",dt),()=>{document.removeEventListener("mousedown",Pe),document.removeEventListener("keydown",dt)}},[q]);const L=e==="archived",Y=L&&N,me=!L&&!M&&e!=="in-progress"&&n.length>gp;i.useEffect(()=>{j(Pe=>e==="in-progress"||L||n.length<=gp?gd:Math.min(Math.max(Pe,gd),n.length))},[e,L,n.length]);const B=i.useCallback(Pe=>{L||(Pe.preventDefault(),Pe.dataTransfer.dropEffect="move",P(!0))},[L]),xe=i.useCallback(Pe=>{Pe.currentTarget.contains(Pe.relatedTarget)||P(!1)},[]),Ne=i.useCallback(async Pe=>{Pe.preventDefault(),P(!1);const dt=Pe.dataTransfer.getData("text/plain");if(!dt)return;const jt=n.find(nt=>nt.id===dt);if(!(jt&&jt.column===e))try{const xt=(C?.find(ot=>ot.id===dt)??jt)?.steps.some(ot=>ot.status!=="pending")??!1,Ie=(e==="todo"||e==="triage")&&xt;let Qe;if(Ie){if(await ee({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))Qe={preserveProgress:!0};else if(!await ee({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await r(dt,e,Qe)}catch(nt){c(Me(nt),"error")}},[c,C,e,ee,r,n]),te=i.useMemo(()=>e!=="in-progress"?[]:Z_(n,n,a),[e,n,a]),Be=i.useMemo(()=>me?n.slice(0,$):n,[me,n,$]),$e=Math.max(0,n.length-Be.length),ct=i.useCallback(()=>{j(Pe=>Math.min(Pe+bp,n.length))},[n.length]),De=i.useCallback(async()=>{if(de(!1),!(n.length===0||!await ee({title:"Replan All Tasks",message:`Move all ${n.length} todo task${n.length===1?"":"s"} back to planning to be replanned?`}))){Ce(!0);try{const dt=await Promise.allSettled(n.map(xt=>r(xt.id,"triage"))),jt=dt.filter(xt=>xt.status==="rejected").length,nt=dt.length-jt;jt===0?c(`Moved ${nt} task${nt===1?"":"s"} to planning for replanning`,"success"):c(`Moved ${nt} of ${dt.length} tasks; ${jt} failed`,"error")}finally{Ce(!1)}}},[n,r,c,ee]),le=i.useMemo(()=>n.filter(Pe=>!Pe.paused&&!Pe.assignedAgentId),[n]),_e=le.length,Le=e==="todo"||e==="in-progress"||e==="in-review",mt=be||Ae||X,Ve=i.useCallback(async()=>{if(!(!o||(de(!1),_e===0)||!await ee({title:"Stop All Tasks",message:`Stop all ${_e} ${ds[e].toLowerCase()} task${_e===1?"":"s"}?`,danger:!0}))){ae(!0);try{const dt=await Promise.allSettled(le.map(xt=>o(xt.id))),jt=dt.filter(xt=>xt.status==="rejected").length,nt=dt.length-jt;jt===0?c(`Stopped ${nt} task${nt===1?"":"s"}`,"success"):c(`Stopped ${nt} of ${dt.length} tasks; ${jt} failed`,"error")}finally{ae(!1)}}},[o,_e,e,le,c,ee]),ge=i.useCallback(async()=>{if(de(!1),n.length===0||!await ee({title:"Move All to Todo",message:`Move all ${n.length} ${ds[e].toLowerCase()} task${n.length===1?"":"s"} to Todo?`}))return;const dt=n.some(nt=>nt.steps.some(xt=>xt.status!=="pending"));let jt=!1;if(dt){if(await ee({title:"Preserve Progress?",message:"Some tasks have completed steps. Keep progress before moving to Todo?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))jt=!0;else if(!await ee({title:"Reset Progress?",message:"Reset step progress for tasks before moving to Todo?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}pe(!0);try{const nt=await Promise.allSettled(n.map(Qe=>r(Qe.id,"todo",jt?{preserveProgress:!0}:void 0))),xt=nt.filter(Qe=>Qe.status==="rejected").length,Ie=nt.length-xt;xt===0?c(`Moved ${Ie} task${Ie===1?"":"s"} to Todo`,"success"):c(`Moved ${Ie} of ${nt.length} tasks to Todo; ${xt} failed`,"error")}finally{pe(!1)}},[n,e,r,c,ee]),he=i.useCallback(async()=>{if(!(!y||n.length===0||!await ee({title:"Archive All Done",message:`Archive all ${n.length} done tasks?`,danger:!0})))try{const dt=await y();c(`Archived ${dt.length} tasks`,"success")}catch(dt){c(Me(dt)||"Failed to archive tasks","error")}},[y,n.length,c,ee]);return t.jsxs("div",{className:`column${E?" drag-over":""}${L?" column-archived":""}${Y?" column-collapsed":""}`,"data-column":e,onDragOver:B,onDragLeave:xe,onDrop:Ne,children:[t.jsxs("div",{className:"column-header",children:[t.jsx("div",{className:`column-dot dot-${e}`}),t.jsx("h2",{children:ds[e]}),t.jsx("span",{className:`column-count${ye?" count-flash":""}`,children:n.length}),e==="in-review"&&m&&t.jsxs("label",{className:"auto-merge-toggle",title:h?"Auto-merge enabled":"Auto-merge disabled",children:[t.jsx("input",{type:"checkbox",checked:!!h,onChange:m}),t.jsx("span",{className:"toggle-slider"}),t.jsx("span",{className:"toggle-label",children:"Auto-merge"})]}),u&&t.jsx("button",{className:"btn btn-task-create btn-sm",onClick:u,children:"+ New Task"}),e==="done"&&y&&t.jsx("button",{className:"btn btn-icon btn-sm",onClick:he,disabled:n.length===0,title:"Archive all done tasks","aria-label":"Archive all done tasks",children:t.jsx(Wr,{})}),L&&S&&t.jsx("button",{className:"btn btn-icon btn-sm",onClick:S,title:N?"Expand archived tasks":"Collapse archived tasks","aria-label":N?"Expand archived tasks":"Collapse archived tasks",children:N?t.jsx(Cn,{size:16}):t.jsx(hi,{size:16})}),Le&&t.jsxs("div",{className:"column-menu",ref:ie,children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>de(Pe=>!Pe),"aria-haspopup":"menu","aria-expanded":q,"aria-label":`${ds[e]} column actions`,title:"Column actions",disabled:mt,children:t.jsx(sk,{})}),q&&t.jsxs("div",{className:"column-menu-popover",role:"menu",children:[e==="todo"&&t.jsxs("button",{type:"button",role:"menuitem",className:"column-menu-item",onClick:()=>void De(),disabled:n.length===0||be,children:["Replan All",t.jsxs("span",{className:"column-menu-item-hint",children:["Move ",n.length," task",n.length===1?"":"s"," to Planning"]})]}),(e==="in-progress"||e==="in-review")&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",role:"menuitem",className:"column-menu-item",onClick:()=>void Ve(),disabled:_e===0||Ae||!o,children:["Stop All",t.jsx("span",{className:"column-menu-item-hint",children:n.length===0?"No tasks in this column":_e===0?"No manually pausable tasks":`Pause ${_e} active unassigned task${_e===1?"":"s"}`})]}),t.jsxs("button",{type:"button",role:"menuitem",className:"column-menu-item",onClick:()=>void ge(),disabled:n.length===0||X,children:["Move All to Todo",t.jsxs("span",{className:"column-menu-item-hint",children:["Move ",n.length," task",n.length===1?"":"s"," to Todo"]})]})]})]})]})]}),!Y&&t.jsx("p",{className:"column-desc",children:EN[e]}),!Y&&t.jsxs("div",{className:"column-body",children:[e==="triage"&&d&&t.jsx(Rx,{onCreate:d,addToast:c,tasks:C??[],availableModels:x,onPlanningMode:k,onSubtaskBreakdown:R,projectId:s,autoExpand:!1,favoriteProviders:_,favoriteModels:A,onToggleFavorite:Q,onToggleModelFavorite:H}),e==="in-progress"?te.length===0?t.jsx("div",{className:"empty-column",children:"No tasks"}):te.map(Pe=>t.jsx(Ax,{label:Pe.label,activeTasks:Pe.activeTasks,queuedTasks:Pe.queuedTasks,projectId:s,onOpenDetail:l,addToast:c,globalPaused:f,onUpdateTask:p,onRetryTask:g,onOpenDetailWithTab:z,taskStuckTimeoutMs:T,onOpenMission:F,lastFetchTimeMs:W,workflowStepNameLookup:oe,blockerFanoutMap:D},Pe.label)):n.length===0?t.jsx("div",{className:"empty-column",children:"No tasks"}):t.jsxs(t.Fragment,{children:[Be.map(Pe=>t.jsx(Wo,{task:Pe,projectId:s,onOpenDetail:l,addToast:c,globalPaused:f,onUpdateTask:p,onRetryTask:g,onArchiveTask:w,onUnarchiveTask:v,onDeleteTask:b,onOpenDetailWithTab:z,taskStuckTimeoutMs:T,onOpenMission:F,onMoveTask:r,lastFetchTimeMs:W,workflowStepNameLookup:oe,fanout:D?.get(Pe.id)},Pe.id)),me&&$e>0&&t.jsxs("button",{type:"button",className:"btn btn-secondary btn-sm",onClick:ct,children:["Load ",Math.min(bp,$e)," more (",$e," remaining)"]})]}),t.jsx(va,{slotId:"board-column-footer",projectId:s})]})]})}const Ix=i.memo(eM);Ix.displayName="Column";function tM(e,n){return e.length!==n.length?!1:e.every((s,a)=>s===n[a])}const xp=new Map;function nM(e,n){if(e.size!==n.size)return!1;for(const[s,a]of e)if(n.get(s)!==a)return!1;return!0}function sM({tasks:e,projectId:n,maxConcurrent:s,onMoveTask:a,onPauseTask:r,onOpenDetail:o,addToast:l,onQuickCreate:c,onNewTask:d,autoMerge:u,onToggleAutoMerge:h,globalPaused:m,onUpdateTask:f,onRetryTask:p,onArchiveTask:g,onUnarchiveTask:w,onDeleteTask:v,onArchiveAllDone:b,onLoadArchivedTasks:y,searchQuery:N="",availableModels:S,onPlanningMode:C,onSubtaskBreakdown:x,onOpenDetailWithTab:k,favoriteProviders:R,favoriteModels:z,onToggleFavorite:_,onToggleModelFavorite:A,taskStuckTimeoutMs:Q,onOpenMission:H,staleHighFanoutBlockerAgeThresholdMs:M,lastFetchTimeMs:T}){const[F,W]=i.useState(!0),oe=i.useRef(!1),[D,E]=i.useState(xp),P=i.useRef(null),$=a_(e,{staleHighFanoutAgeThresholdMs:M}),j=N.trim()!=="",q=i.useRef({triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]}),de=i.useCallback(()=>{W(Ce=>{const Ae=!Ce;return!Ae&&!oe.current&&y&&(oe.current=!0,y()),Ae})},[y]),be=i.useMemo(()=>{const Ce={triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]};for(const X of e){const pe=im(X.column)?X.column:tc;(Ce[pe]??Ce[tc]).push(X)}const Ae=q.current,ae={};for(const X of xa){const pe=px(Ce[X],X);ae[X]=tM(Ae[X],pe)?Ae[X]:pe}return q.current=ae,ae},[e]);return i.useEffect(()=>{let Ce=!1;return sl(n).then(Ae=>{if(Ce)return;const ae=new Map(Ae.map(X=>[X.id,X.name]));E(X=>nM(X,ae)?X:ae)}).catch(()=>{Ce||E(Ae=>Ae.size===0?Ae:xp)}),()=>{Ce=!0}},[n]),i.useEffect(()=>{if(!window.matchMedia("(max-width: 768px)").matches)return;let Ce=null,Ae=null;const ae=()=>{const ee=P.current;ee&&(ee.offsetWidth,ee.scrollLeft=0)},X=()=>{if(typeof window.requestAnimationFrame=="function"){Ce!==null&&window.cancelAnimationFrame(Ce),Ce=window.requestAnimationFrame(()=>{Ce=null,ae()});return}Ae!==null&&clearTimeout(Ae),Ae=setTimeout(()=>{Ae=null,ae()},0)},pe=ee=>{const L=window.visualViewport?.scale??1;(ee.persisted||L>1.0001)&&X()};X(),window.addEventListener("pageshow",pe);const ie=window.visualViewport;let ye=null;return ie&&(ye=()=>{X(),ie.removeEventListener("resize",ye),ye=null},ie.addEventListener("resize",ye)),()=>{window.removeEventListener("pageshow",pe),ye&&ie?.removeEventListener("resize",ye),Ce!==null&&window.cancelAnimationFrame(Ce),Ae!==null&&clearTimeout(Ae)}},[]),t.jsx(t.Fragment,{children:t.jsx("main",{className:"board",id:"board",ref:P,children:xa.map(Ce=>t.jsx(Ix,{column:Ce,tasks:be[Ce],projectId:n,maxConcurrent:s,onMoveTask:a,onPauseTask:r,onOpenDetail:o,addToast:l,globalPaused:m,onUpdateTask:f,onRetryTask:p,onArchiveTask:g,onUnarchiveTask:w,onDeleteTask:v,allTasks:e,availableModels:S,onOpenDetailWithTab:k,favoriteProviders:R,favoriteModels:z,onToggleFavorite:_,onToggleModelFavorite:A,isSearchActive:j,taskStuckTimeoutMs:Q,onOpenMission:H,lastFetchTimeMs:T,workflowStepNameLookup:D,blockerFanoutMap:$,...Ce==="triage"?{onQuickCreate:c,onNewTask:d,onPlanningMode:C,onSubtaskBreakdown:x}:{},...Ce==="in-review"?{autoMerge:u,onToggleAutoMerge:h}:{},...Ce==="done"?{onArchiveAllDone:b}:{},...Ce==="archived"?{collapsed:F,onToggleCollapse:de}:{}},Ce))})})}function Ui(e,n,s){i.useEffect(()=>{if(!n)return;const a=e.current;if(!a)return;if(typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)&&window.innerWidth<=768){a.style.removeProperty("width"),a.style.removeProperty("height");return}try{const u=localStorage.getItem(s);if(u){const{width:h,height:m}=JSON.parse(u);typeof h=="number"&&h>0&&(a.style.width=`${h}px`),typeof m=="number"&&m>0&&(a.style.height=`${m}px`)}}catch{}if(typeof ResizeObserver>"u")return;let o=a.offsetWidth,l=a.offsetHeight,c=null;const d=new ResizeObserver(()=>{const u=a.offsetWidth,h=a.offsetHeight;u===o&&h===l||(o=u,l=h,c&&clearTimeout(c),c=setTimeout(()=>{try{localStorage.setItem(s,JSON.stringify({width:u,height:h}))}catch{}},200))});return d.observe(a),()=>{d.disconnect(),c&&clearTimeout(c)}},[e,n,s])}function iM(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}let Ar=0,Oo=null;function aM(){if(typeof window>"u")return;if(Ar>0){Ar+=1;return}const e=document.documentElement,n=document.body;Oo={htmlOverflow:e.style.overflow,bodyPosition:n.style.position,bodyTop:n.style.top,bodyLeft:n.style.left,bodyRight:n.style.right,bodyWidth:n.style.width,bodyOverflow:n.style.overflow,scrollY:window.scrollY},e.style.overflow="hidden",n.style.position="fixed",n.style.top=`-${Oo.scrollY}px`,n.style.left="0",n.style.right="0",n.style.width="100%",n.style.overflow="hidden",Ar=1}function rM(){if(typeof window>"u"||Ar===0||(Ar-=1,Ar>0||!Oo))return;const e=document.documentElement,n=document.body,{htmlOverflow:s,bodyPosition:a,bodyTop:r,bodyLeft:o,bodyRight:l,bodyWidth:c,bodyOverflow:d,scrollY:u}=Oo;e.style.overflow=s,n.style.position=a,n.style.top=r,n.style.left=o,n.style.right=l,n.style.width=c,n.style.overflow=d,Oo=null,window.scrollTo(0,0)}function _i(e){i.useEffect(()=>{if(!(!e||!iM()))return aM(),()=>{rM()}},[e])}function aa(e){const n=i.useRef(!1),s=i.useCallback(r=>{n.current=r.target===r.currentTarget},[]),a=i.useCallback(r=>{const o=n.current&&r.target===r.currentTarget;n.current=!1,o&&e()},[e]);return{onMouseDown:s,onMouseUp:a}}function oM(e,n){const s={};return(e[e.length-1]===""?[...e,""]:e).join((s.padRight?" ":"")+","+(s.padLeft===!1?"":" ")).trim()}const lM=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,cM=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,dM={};function vp(e,n){return(dM.jsx?cM:lM).test(e)}const uM=/[ \t\n\f\r]/g;function mM(e){return typeof e=="object"?e.type==="text"?yp(e.value):!1:yp(e)}function yp(e){return e.replace(uM,"")===""}class ll{constructor(n,s,a){this.normal=s,this.property=n,a&&(this.space=a)}}ll.prototype.normal={};ll.prototype.property={};ll.prototype.space=void 0;function Tx(e,n){const s={},a={};for(const r of e)Object.assign(s,r.property),Object.assign(a,r.normal);return new ll(s,a,n)}function Mu(e){return e.toLowerCase()}class Js{constructor(n,s){this.attribute=s,this.property=n}}Js.prototype.attribute="";Js.prototype.booleanish=!1;Js.prototype.boolean=!1;Js.prototype.commaOrSpaceSeparated=!1;Js.prototype.commaSeparated=!1;Js.prototype.defined=!1;Js.prototype.mustUseProperty=!1;Js.prototype.number=!1;Js.prototype.overloadedBoolean=!1;Js.prototype.property="";Js.prototype.spaceSeparated=!1;Js.prototype.space=void 0;let hM=0;const En=tr(),gs=tr(),Au=tr(),It=tr(),Yn=tr(),Rr=tr(),Qs=tr();function tr(){return 2**++hM}const Ru=Object.freeze(Object.defineProperty({__proto__:null,boolean:En,booleanish:gs,commaOrSpaceSeparated:Qs,commaSeparated:Rr,number:It,overloadedBoolean:Au,spaceSeparated:Yn},Symbol.toStringTag,{value:"Module"})),bd=Object.keys(Ru);class bm extends Js{constructor(n,s,a,r){let o=-1;if(super(n,s),wp(this,"space",r),typeof a=="number")for(;++o<bd.length;){const l=bd[o];wp(this,bd[o],(a&Ru[l])===Ru[l])}}}bm.prototype.defined=!0;function wp(e,n,s){s&&(e[n]=s)}function Xr(e){const n={},s={};for(const[a,r]of Object.entries(e.properties)){const o=new bm(a,e.transform(e.attributes||{},a),r,e.space);e.mustUseProperty&&e.mustUseProperty.includes(a)&&(o.mustUseProperty=!0),n[a]=o,s[Mu(a)]=a,s[Mu(o.attribute)]=a}return new ll(n,s,e.space)}const Px=Xr({properties:{ariaActiveDescendant:null,ariaAtomic:gs,ariaAutoComplete:null,ariaBusy:gs,ariaChecked:gs,ariaColCount:It,ariaColIndex:It,ariaColSpan:It,ariaControls:Yn,ariaCurrent:null,ariaDescribedBy:Yn,ariaDetails:null,ariaDisabled:gs,ariaDropEffect:Yn,ariaErrorMessage:null,ariaExpanded:gs,ariaFlowTo:Yn,ariaGrabbed:gs,ariaHasPopup:null,ariaHidden:gs,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Yn,ariaLevel:It,ariaLive:null,ariaModal:gs,ariaMultiLine:gs,ariaMultiSelectable:gs,ariaOrientation:null,ariaOwns:Yn,ariaPlaceholder:null,ariaPosInSet:It,ariaPressed:gs,ariaReadOnly:gs,ariaRelevant:null,ariaRequired:gs,ariaRoleDescription:Yn,ariaRowCount:It,ariaRowIndex:It,ariaRowSpan:It,ariaSelected:gs,ariaSetSize:It,ariaSort:null,ariaValueMax:It,ariaValueMin:It,ariaValueNow:It,ariaValueText:null,role:null},transform(e,n){return n==="role"?n:"aria-"+n.slice(4).toLowerCase()}});function $x(e,n){return n in e?e[n]:n}function Dx(e,n){return $x(e,n.toLowerCase())}const pM=Xr({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:Rr,acceptCharset:Yn,accessKey:Yn,action:null,allow:null,allowFullScreen:En,allowPaymentRequest:En,allowUserMedia:En,alt:null,as:null,async:En,autoCapitalize:null,autoComplete:Yn,autoFocus:En,autoPlay:En,blocking:Yn,capture:null,charSet:null,checked:En,cite:null,className:Yn,cols:It,colSpan:null,content:null,contentEditable:gs,controls:En,controlsList:Yn,coords:It|Rr,crossOrigin:null,data:null,dateTime:null,decoding:null,default:En,defer:En,dir:null,dirName:null,disabled:En,download:Au,draggable:gs,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:En,formTarget:null,headers:Yn,height:It,hidden:Au,high:It,href:null,hrefLang:null,htmlFor:Yn,httpEquiv:Yn,id:null,imageSizes:null,imageSrcSet:null,inert:En,inputMode:null,integrity:null,is:null,isMap:En,itemId:null,itemProp:Yn,itemRef:Yn,itemScope:En,itemType:Yn,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:En,low:It,manifest:null,max:null,maxLength:It,media:null,method:null,min:null,minLength:It,multiple:En,muted:En,name:null,nonce:null,noModule:En,noValidate:En,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:En,optimum:It,pattern:null,ping:Yn,placeholder:null,playsInline:En,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:En,referrerPolicy:null,rel:Yn,required:En,reversed:En,rows:It,rowSpan:It,sandbox:Yn,scope:null,scoped:En,seamless:En,selected:En,shadowRootClonable:En,shadowRootDelegatesFocus:En,shadowRootMode:null,shape:null,size:It,sizes:null,slot:null,span:It,spellCheck:gs,src:null,srcDoc:null,srcLang:null,srcSet:null,start:It,step:null,style:null,tabIndex:It,target:null,title:null,translate:null,type:null,typeMustMatch:En,useMap:null,value:gs,width:It,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Yn,axis:null,background:null,bgColor:null,border:It,borderColor:null,bottomMargin:It,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:En,declare:En,event:null,face:null,frame:null,frameBorder:null,hSpace:It,leftMargin:It,link:null,longDesc:null,lowSrc:null,marginHeight:It,marginWidth:It,noResize:En,noHref:En,noShade:En,noWrap:En,object:null,profile:null,prompt:null,rev:null,rightMargin:It,rules:null,scheme:null,scrolling:gs,standby:null,summary:null,text:null,topMargin:It,valueType:null,version:null,vAlign:null,vLink:null,vSpace:It,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:En,disableRemotePlayback:En,prefix:null,property:null,results:It,security:null,unselectable:null},space:"html",transform:Dx}),fM=Xr({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:Qs,accentHeight:It,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:It,amplitude:It,arabicForm:null,ascent:It,attributeName:null,attributeType:null,azimuth:It,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:It,by:null,calcMode:null,capHeight:It,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:It,diffuseConstant:It,direction:null,display:null,dur:null,divisor:It,dominantBaseline:null,download:En,dx:null,dy:null,edgeMode:null,editable:null,elevation:It,enableBackground:null,end:null,event:null,exponent:It,externalResourcesRequired:null,fill:null,fillOpacity:It,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:Rr,g2:Rr,glyphName:Rr,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:It,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:It,horizOriginX:It,horizOriginY:It,id:null,ideographic:It,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:It,k:It,k1:It,k2:It,k3:It,k4:It,kernelMatrix:Qs,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:It,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:It,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:It,overlineThickness:It,paintOrder:null,panose1:null,path:null,pathLength:It,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Yn,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:It,pointsAtY:It,pointsAtZ:It,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:Qs,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:Qs,rev:Qs,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:Qs,requiredFeatures:Qs,requiredFonts:Qs,requiredFormats:Qs,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:It,specularExponent:It,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:It,strikethroughThickness:It,string:null,stroke:null,strokeDashArray:Qs,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:It,strokeOpacity:It,strokeWidth:null,style:null,surfaceScale:It,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:Qs,tabIndex:It,tableValues:null,target:null,targetX:It,targetY:It,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:Qs,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:It,underlineThickness:It,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:It,values:null,vAlphabetic:It,vMathematical:It,vectorEffect:null,vHanging:It,vIdeographic:It,version:null,vertAdvY:It,vertOriginX:It,vertOriginY:It,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:It,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:$x}),Lx=Xr({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,n){return"xlink:"+n.slice(5).toLowerCase()}}),Ox=Xr({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:Dx}),Fx=Xr({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,n){return"xml:"+n.slice(3).toLowerCase()}}),gM={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"},bM=/[A-Z]/g,kp=/-[a-z]/g,xM=/^data[-\w.:]+$/i;function vM(e,n){const s=Mu(n);let a=n,r=Js;if(s in e.normal)return e.property[e.normal[s]];if(s.length>4&&s.slice(0,4)==="data"&&xM.test(n)){if(n.charAt(4)==="-"){const o=n.slice(5).replace(kp,wM);a="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=n.slice(4);if(!kp.test(o)){let l=o.replace(bM,yM);l.charAt(0)!=="-"&&(l="-"+l),n="data"+l}}r=bm}return new r(a,n)}function yM(e){return"-"+e.toLowerCase()}function wM(e){return e.charAt(1).toUpperCase()}const kM=Tx([Px,pM,Lx,Ox,Fx],"html"),xm=Tx([Px,fM,Lx,Ox,Fx],"svg");function jM(e){return e.join(" ").trim()}var br={},xd,jp;function NM(){if(jp)return xd;jp=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,s=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,r=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,l=/^[;\s]*/,c=/^\s+|\s+$/g,d=`
654
+ `,u="/",h="*",m="",f="comment",p="declaration";function g(v,b){if(typeof v!="string")throw new TypeError("First argument must be a string");if(!v)return[];b=b||{};var y=1,N=1;function S(M){var T=M.match(n);T&&(y+=T.length);var F=M.lastIndexOf(d);N=~F?M.length-F:N+M.length}function C(){var M={line:y,column:N};return function(T){return T.position=new x(M),z(),T}}function x(M){this.start=M,this.end={line:y,column:N},this.source=b.source}x.prototype.content=v;function k(M){var T=new Error(b.source+":"+y+":"+N+": "+M);if(T.reason=M,T.filename=b.source,T.line=y,T.column=N,T.source=v,!b.silent)throw T}function R(M){var T=M.exec(v);if(T){var F=T[0];return S(F),v=v.slice(F.length),T}}function z(){R(s)}function _(M){var T;for(M=M||[];T=A();)T!==!1&&M.push(T);return M}function A(){var M=C();if(!(u!=v.charAt(0)||h!=v.charAt(1))){for(var T=2;m!=v.charAt(T)&&(h!=v.charAt(T)||u!=v.charAt(T+1));)++T;if(T+=2,m===v.charAt(T-1))return k("End of comment missing");var F=v.slice(2,T-2);return N+=2,S(F),v=v.slice(T),N+=2,M({type:f,comment:F})}}function Q(){var M=C(),T=R(a);if(T){if(A(),!R(r))return k("property missing ':'");var F=R(o),W=M({type:p,property:w(T[0].replace(e,m)),value:F?w(F[0].replace(e,m)):m});return R(l),W}}function H(){var M=[];_(M);for(var T;T=Q();)T!==!1&&(M.push(T),_(M));return M}return z(),H()}function w(v){return v?v.replace(c,m):m}return xd=g,xd}var Np;function SM(){if(Np)return br;Np=1;var e=br&&br.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(br,"__esModule",{value:!0}),br.default=s;const n=e(NM());function s(a,r){let o=null;if(!a||typeof a!="string")return o;const l=(0,n.default)(a),c=typeof r=="function";return l.forEach(d=>{if(d.type!=="declaration")return;const{property:u,value:h}=d;c?r(u,h,d):h&&(o=o||{},o[u]=h)}),o}return br}var uo={},Sp;function CM(){if(Sp)return uo;Sp=1,Object.defineProperty(uo,"__esModule",{value:!0}),uo.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,n=/-([a-z])/g,s=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,r=/^-(ms)-/,o=function(u){return!u||s.test(u)||e.test(u)},l=function(u,h){return h.toUpperCase()},c=function(u,h){return"".concat(h,"-")},d=function(u,h){return h===void 0&&(h={}),o(u)?u:(u=u.toLowerCase(),h.reactCompat?u=u.replace(r,c):u=u.replace(a,c),u.replace(n,l))};return uo.camelCase=d,uo}var mo,Cp;function EM(){if(Cp)return mo;Cp=1;var e=mo&&mo.__importDefault||function(r){return r&&r.__esModule?r:{default:r}},n=e(SM()),s=CM();function a(r,o){var l={};return!r||typeof r!="string"||(0,n.default)(r,function(c,d){c&&d&&(l[(0,s.camelCase)(c,o)]=d)}),l}return a.default=a,mo=a,mo}var _M=EM();const MM=jb(_M),zx=Bx("end"),vm=Bx("start");function Bx(e){return n;function n(s){const a=s&&s.position&&s.position[e]||{};if(typeof a.line=="number"&&a.line>0&&typeof a.column=="number"&&a.column>0)return{line:a.line,column:a.column,offset:typeof a.offset=="number"&&a.offset>-1?a.offset:void 0}}}function AM(e){const n=vm(e),s=zx(e);if(n&&s)return{start:n,end:s}}function Fo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Ep(e.position):"start"in e||"end"in e?Ep(e):"line"in e||"column"in e?Iu(e):""}function Iu(e){return _p(e&&e.line)+":"+_p(e&&e.column)}function Ep(e){return Iu(e&&e.start)+"-"+Iu(e&&e.end)}function _p(e){return e&&typeof e=="number"?e:1}class Ds extends Error{constructor(n,s,a){super(),typeof s=="string"&&(a=s,s=void 0);let r="",o={},l=!1;if(s&&("line"in s&&"column"in s?o={place:s}:"start"in s&&"end"in s?o={place:s}:"type"in s?o={ancestors:[s],place:s.position}:o={...s}),typeof n=="string"?r=n:!o.cause&&n&&(l=!0,r=n.message,o.cause=n),!o.ruleId&&!o.source&&typeof a=="string"){const d=a.indexOf(":");d===-1?o.ruleId=a:(o.source=a.slice(0,d),o.ruleId=a.slice(d+1))}if(!o.place&&o.ancestors&&o.ancestors){const d=o.ancestors[o.ancestors.length-1];d&&(o.place=d.position)}const c=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=c?c.column:void 0,this.fatal=void 0,this.file="",this.message=r,this.line=c?c.line:void 0,this.name=Fo(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=l&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Ds.prototype.file="";Ds.prototype.name="";Ds.prototype.reason="";Ds.prototype.message="";Ds.prototype.stack="";Ds.prototype.column=void 0;Ds.prototype.line=void 0;Ds.prototype.ancestors=void 0;Ds.prototype.cause=void 0;Ds.prototype.fatal=void 0;Ds.prototype.place=void 0;Ds.prototype.ruleId=void 0;Ds.prototype.source=void 0;const ym={}.hasOwnProperty,RM=new Map,IM=/[A-Z]/g,TM=new Set(["table","tbody","thead","tfoot","tr"]),PM=new Set(["td","th"]),Ux="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function $M(e,n){if(!n||n.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const s=n.filePath||void 0;let a;if(n.development){if(typeof n.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=HM(s,n.jsxDEV)}else{if(typeof n.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof n.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=UM(s,n.jsx,n.jsxs)}const r={Fragment:n.Fragment,ancestors:[],components:n.components||{},create:a,elementAttributeNameCase:n.elementAttributeNameCase||"react",evaluater:n.createEvaluater?n.createEvaluater():void 0,filePath:s,ignoreInvalidStyle:n.ignoreInvalidStyle||!1,passKeys:n.passKeys!==!1,passNode:n.passNode||!1,schema:n.space==="svg"?xm:kM,stylePropertyNameCase:n.stylePropertyNameCase||"dom",tableCellAlignToStyle:n.tableCellAlignToStyle!==!1},o=Hx(r,e,void 0);return o&&typeof o!="string"?o:r.create(e,r.Fragment,{children:o||void 0},void 0)}function Hx(e,n,s){if(n.type==="element")return DM(e,n,s);if(n.type==="mdxFlowExpression"||n.type==="mdxTextExpression")return LM(e,n);if(n.type==="mdxJsxFlowElement"||n.type==="mdxJsxTextElement")return FM(e,n,s);if(n.type==="mdxjsEsm")return OM(e,n);if(n.type==="root")return zM(e,n,s);if(n.type==="text")return BM(e,n)}function DM(e,n,s){const a=e.schema;let r=a;n.tagName.toLowerCase()==="svg"&&a.space==="html"&&(r=xm,e.schema=r),e.ancestors.push(n);const o=Vx(e,n.tagName,!1),l=qM(e,n);let c=km(e,n);return TM.has(n.tagName)&&(c=c.filter(function(d){return typeof d=="string"?!mM(d):!0})),qx(e,l,o,n),wm(l,c),e.ancestors.pop(),e.schema=a,e.create(n,o,l,s)}function LM(e,n){if(n.data&&n.data.estree&&e.evaluater){const a=n.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}Go(e,n.position)}function OM(e,n){if(n.data&&n.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(n.data.estree);Go(e,n.position)}function FM(e,n,s){const a=e.schema;let r=a;n.name==="svg"&&a.space==="html"&&(r=xm,e.schema=r),e.ancestors.push(n);const o=n.name===null?e.Fragment:Vx(e,n.name,!0),l=VM(e,n),c=km(e,n);return qx(e,l,o,n),wm(l,c),e.ancestors.pop(),e.schema=a,e.create(n,o,l,s)}function zM(e,n,s){const a={};return wm(a,km(e,n)),e.create(n,e.Fragment,a,s)}function BM(e,n){return n.value}function qx(e,n,s,a){typeof s!="string"&&s!==e.Fragment&&e.passNode&&(n.node=a)}function wm(e,n){if(n.length>0){const s=n.length>1?n:n[0];s&&(e.children=s)}}function UM(e,n,s){return a;function a(r,o,l,c){const u=Array.isArray(l.children)?s:n;return c?u(o,l,c):u(o,l)}}function HM(e,n){return s;function s(a,r,o,l){const c=Array.isArray(o.children),d=vm(a);return n(r,o,l,c,{columnNumber:d?d.column-1:void 0,fileName:e,lineNumber:d?d.line:void 0},void 0)}}function qM(e,n){const s={};let a,r;for(r in n.properties)if(r!=="children"&&ym.call(n.properties,r)){const o=WM(e,r,n.properties[r]);if(o){const[l,c]=o;e.tableCellAlignToStyle&&l==="align"&&typeof c=="string"&&PM.has(n.tagName)?a=c:s[l]=c}}if(a){const o=s.style||(s.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return s}function VM(e,n){const s={};for(const a of n.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const o=a.data.estree.body[0];o.type;const l=o.expression;l.type;const c=l.properties[0];c.type,Object.assign(s,e.evaluater.evaluateExpression(c.argument))}else Go(e,n.position);else{const r=a.name;let o;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const c=a.value.data.estree.body[0];c.type,o=e.evaluater.evaluateExpression(c.expression)}else Go(e,n.position);else o=a.value===null?!0:a.value;s[r]=o}return s}function km(e,n){const s=[];let a=-1;const r=e.passKeys?new Map:RM;for(;++a<n.children.length;){const o=n.children[a];let l;if(e.passKeys){const d=o.type==="element"?o.tagName:o.type==="mdxJsxFlowElement"||o.type==="mdxJsxTextElement"?o.name:void 0;if(d){const u=r.get(d)||0;l=d+"-"+u,r.set(d,u+1)}}const c=Hx(e,o,l);c!==void 0&&s.push(c)}return s}function WM(e,n,s){const a=vM(e.schema,n);if(!(s==null||typeof s=="number"&&Number.isNaN(s))){if(Array.isArray(s)&&(s=a.commaSeparated?oM(s):jM(s)),a.property==="style"){let r=typeof s=="object"?s:GM(e,String(s));return e.stylePropertyNameCase==="css"&&(r=KM(r)),["style",r]}return[e.elementAttributeNameCase==="react"&&a.space?gM[a.property]||a.property:a.attribute,s]}}function GM(e,n){try{return MM(n,{reactCompat:!0})}catch(s){if(e.ignoreInvalidStyle)return{};const a=s,r=new Ds("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:a,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=Ux+"#cannot-parse-style-attribute",r}}function Vx(e,n,s){let a;if(!s)a={type:"Literal",value:n};else if(n.includes(".")){const r=n.split(".");let o=-1,l;for(;++o<r.length;){const c=vp(r[o])?{type:"Identifier",name:r[o]}:{type:"Literal",value:r[o]};l=l?{type:"MemberExpression",object:l,property:c,computed:!!(o&&c.type==="Literal"),optional:!1}:c}a=l}else a=vp(n)&&!/^[a-z]/.test(n)?{type:"Identifier",name:n}:{type:"Literal",value:n};if(a.type==="Literal"){const r=a.value;return ym.call(e.components,r)?e.components[r]:r}if(e.evaluater)return e.evaluater.evaluateExpression(a);Go(e)}function Go(e,n){const s=new Ds("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=Ux+"#cannot-handle-mdx-estrees-without-createevaluater",s}function KM(e){const n={};let s;for(s in e)ym.call(e,s)&&(n[JM(s)]=e[s]);return n}function JM(e){let n=e.replace(IM,YM);return n.slice(0,3)==="ms-"&&(n="-"+n),n}function YM(e){return"-"+e.toLowerCase()}const vd={action:["form"],cite:["blockquote","del","ins","q"],data:["object"],formAction:["button","input"],href:["a","area","base","link"],icon:["menuitem"],itemId:null,manifest:["html"],ping:["a","area"],poster:["video"],src:["audio","embed","iframe","img","input","script","source","track","video"]},QM={};function jm(e,n){const s=QM,a=typeof s.includeImageAlt=="boolean"?s.includeImageAlt:!0,r=typeof s.includeHtml=="boolean"?s.includeHtml:!0;return Wx(e,a,r)}function Wx(e,n,s){if(XM(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 Mp(e.children,n,s)}return Array.isArray(e)?Mp(e,n,s):""}function Mp(e,n,s){const a=[];let r=-1;for(;++r<e.length;)a[r]=Wx(e[r],n,s);return a.join("")}function XM(e){return!!(e&&typeof e=="object")}const Ap=document.createElement("i");function Nm(e){const n="&"+e+";";Ap.innerHTML=n;const s=Ap.textContent;return s.charCodeAt(s.length-1)===59&&e!=="semi"||s===n?!1:s}function Zs(e,n,s,a){const r=e.length;let o=0,l;if(n<0?n=-n>r?0:r+n:n=n>r?r:n,s=s>0?s:0,a.length<1e4)l=Array.from(a),l.unshift(n,s),e.splice(...l);else for(s&&e.splice(n,s);o<a.length;)l=a.slice(o,o+1e4),l.unshift(n,0),e.splice(...l),o+=1e4,n+=1e4}function di(e,n){return e.length>0?(Zs(e,e.length,0,n),e):n}const Rp={}.hasOwnProperty;function Gx(e){const n={};let s=-1;for(;++s<e.length;)ZM(n,e[s]);return n}function ZM(e,n){let s;for(s in n){const r=(Rp.call(e,s)?e[s]:void 0)||(e[s]={}),o=n[s];let l;if(o)for(l in o){Rp.call(r,l)||(r[l]=[]);const c=o[l];e2(r[l],Array.isArray(c)?c:c?[c]:[])}}}function e2(e,n){let s=-1;const a=[];for(;++s<n.length;)(n[s].add==="after"?e:a).push(n[s]);Zs(e,0,0,a)}function Kx(e,n){const s=Number.parseInt(e,n);return s<9||s===11||s>13&&s<32||s>126&&s<160||s>55295&&s<57344||s>64975&&s<65008||(s&65535)===65535||(s&65535)===65534||s>1114111?"�":String.fromCodePoint(s)}function Si(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const zs=Ea(/[A-Za-z]/),$s=Ea(/[\dA-Za-z]/),t2=Ea(/[#-'*+\--9=?A-Z^-~]/);function lc(e){return e!==null&&(e<32||e===127)}const Tu=Ea(/\d/),n2=Ea(/[\dA-Fa-f]/),s2=Ea(/[!-/:-@[-`{-~]/);function sn(e){return e!==null&&e<-2}function Jn(e){return e!==null&&(e<0||e===32)}function In(e){return e===-2||e===-1||e===32}const $c=Ea(/\p{P}|\p{S}/u),Qa=Ea(/\s/);function Ea(e){return n;function n(s){return s!==null&&s>-1&&e.test(String.fromCharCode(s))}}function Zr(e){const n=[];let s=-1,a=0,r=0;for(;++s<e.length;){const o=e.charCodeAt(s);let l="";if(o===37&&$s(e.charCodeAt(s+1))&&$s(e.charCodeAt(s+2)))r=2;else if(o<128)/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(o))||(l=String.fromCharCode(o));else if(o>55295&&o<57344){const c=e.charCodeAt(s+1);o<56320&&c>56319&&c<57344?(l=String.fromCharCode(o,c),r=1):l="�"}else l=String.fromCharCode(o);l&&(n.push(e.slice(a,s),encodeURIComponent(l)),a=s+r+1,l=""),r&&(s+=r,r=0)}return n.join("")+e.slice(a)}function $n(e,n,s,a){const r=a?a-1:Number.POSITIVE_INFINITY;let o=0;return l;function l(d){return In(d)?(e.enter(s),c(d)):n(d)}function c(d){return In(d)&&o++<r?(e.consume(d),c):(e.exit(s),n(d))}}const i2={tokenize:a2};function a2(e){const n=e.attempt(this.parser.constructs.contentInitial,a,r);let s;return n;function a(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),$n(e,n,"linePrefix")}function r(c){return e.enter("paragraph"),o(c)}function o(c){const d=e.enter("chunkText",{contentType:"text",previous:s});return s&&(s.next=d),s=d,l(c)}function l(c){if(c===null){e.exit("chunkText"),e.exit("paragraph"),e.consume(c);return}return sn(c)?(e.consume(c),e.exit("chunkText"),o):(e.consume(c),l)}}const r2={tokenize:o2},Ip={tokenize:l2};function o2(e){const n=this,s=[];let a=0,r,o,l;return c;function c(N){if(a<s.length){const S=s[a];return n.containerState=S[1],e.attempt(S[0].continuation,d,u)(N)}return u(N)}function d(N){if(a++,n.containerState._closeFlow){n.containerState._closeFlow=void 0,r&&y();const S=n.events.length;let C=S,x;for(;C--;)if(n.events[C][0]==="exit"&&n.events[C][1].type==="chunkFlow"){x=n.events[C][1].end;break}b(a);let k=S;for(;k<n.events.length;)n.events[k][1].end={...x},k++;return Zs(n.events,C+1,0,n.events.slice(S)),n.events.length=k,u(N)}return c(N)}function u(N){if(a===s.length){if(!r)return f(N);if(r.currentConstruct&&r.currentConstruct.concrete)return g(N);n.interrupt=!!(r.currentConstruct&&!r._gfmTableDynamicInterruptHack)}return n.containerState={},e.check(Ip,h,m)(N)}function h(N){return r&&y(),b(a),f(N)}function m(N){return n.parser.lazy[n.now().line]=a!==s.length,l=n.now().offset,g(N)}function f(N){return n.containerState={},e.attempt(Ip,p,g)(N)}function p(N){return a++,s.push([n.currentConstruct,n.containerState]),f(N)}function g(N){if(N===null){r&&y(),b(0),e.consume(N);return}return r=r||n.parser.flow(n.now()),e.enter("chunkFlow",{_tokenizer:r,contentType:"flow",previous:o}),w(N)}function w(N){if(N===null){v(e.exit("chunkFlow"),!0),b(0),e.consume(N);return}return sn(N)?(e.consume(N),v(e.exit("chunkFlow")),a=0,n.interrupt=void 0,c):(e.consume(N),w)}function v(N,S){const C=n.sliceStream(N);if(S&&C.push(null),N.previous=o,o&&(o.next=N),o=N,r.defineSkip(N.start),r.write(C),n.parser.lazy[N.start.line]){let x=r.events.length;for(;x--;)if(r.events[x][1].start.offset<l&&(!r.events[x][1].end||r.events[x][1].end.offset>l))return;const k=n.events.length;let R=k,z,_;for(;R--;)if(n.events[R][0]==="exit"&&n.events[R][1].type==="chunkFlow"){if(z){_=n.events[R][1].end;break}z=!0}for(b(a),x=k;x<n.events.length;)n.events[x][1].end={..._},x++;Zs(n.events,R+1,0,n.events.slice(k)),n.events.length=x}}function b(N){let S=s.length;for(;S-- >N;){const C=s[S];n.containerState=C[1],C[0].exit.call(n,e)}s.length=N}function y(){r.write([null]),o=void 0,r=void 0,n.containerState._closeFlow=void 0}}function l2(e,n,s){return $n(e,e.attempt(this.parser.constructs.document,n,s),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Or(e){if(e===null||Jn(e)||Qa(e))return 1;if($c(e))return 2}function Dc(e,n,s){const a=[];let r=-1;for(;++r<e.length;){const o=e[r].resolveAll;o&&!a.includes(o)&&(n=o(n,s),a.push(o))}return n}const Pu={name:"attention",resolveAll:c2,tokenize:d2};function c2(e,n){let s=-1,a,r,o,l,c,d,u,h;for(;++s<e.length;)if(e[s][0]==="enter"&&e[s][1].type==="attentionSequence"&&e[s][1]._close){for(a=s;a--;)if(e[a][0]==="exit"&&e[a][1].type==="attentionSequence"&&e[a][1]._open&&n.sliceSerialize(e[a][1]).charCodeAt(0)===n.sliceSerialize(e[s][1]).charCodeAt(0)){if((e[a][1]._close||e[s][1]._open)&&(e[s][1].end.offset-e[s][1].start.offset)%3&&!((e[a][1].end.offset-e[a][1].start.offset+e[s][1].end.offset-e[s][1].start.offset)%3))continue;d=e[a][1].end.offset-e[a][1].start.offset>1&&e[s][1].end.offset-e[s][1].start.offset>1?2:1;const m={...e[a][1].end},f={...e[s][1].start};Tp(m,-d),Tp(f,d),l={type:d>1?"strongSequence":"emphasisSequence",start:m,end:{...e[a][1].end}},c={type:d>1?"strongSequence":"emphasisSequence",start:{...e[s][1].start},end:f},o={type:d>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[s][1].start}},r={type:d>1?"strong":"emphasis",start:{...l.start},end:{...c.end}},e[a][1].end={...l.start},e[s][1].start={...c.end},u=[],e[a][1].end.offset-e[a][1].start.offset&&(u=di(u,[["enter",e[a][1],n],["exit",e[a][1],n]])),u=di(u,[["enter",r,n],["enter",l,n],["exit",l,n],["enter",o,n]]),u=di(u,Dc(n.parser.constructs.insideSpan.null,e.slice(a+1,s),n)),u=di(u,[["exit",o,n],["enter",c,n],["exit",c,n],["exit",r,n]]),e[s][1].end.offset-e[s][1].start.offset?(h=2,u=di(u,[["enter",e[s][1],n],["exit",e[s][1],n]])):h=0,Zs(e,a-1,s-a+3,u),s=a+u.length-h-2;break}}for(s=-1;++s<e.length;)e[s][1].type==="attentionSequence"&&(e[s][1].type="data");return e}function d2(e,n){const s=this.parser.constructs.attentionMarkers.null,a=this.previous,r=Or(a);let o;return l;function l(d){return o=d,e.enter("attentionSequence"),c(d)}function c(d){if(d===o)return e.consume(d),c;const u=e.exit("attentionSequence"),h=Or(d),m=!h||h===2&&r||s.includes(d),f=!r||r===2&&h||s.includes(a);return u._open=!!(o===42?m:m&&(r||!f)),u._close=!!(o===42?f:f&&(h||!m)),n(d)}}function Tp(e,n){e.column+=n,e.offset+=n,e._bufferIndex+=n}const u2={name:"autolink",tokenize:m2};function m2(e,n,s){let a=0;return r;function r(p){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),o}function o(p){return zs(p)?(e.consume(p),l):p===64?s(p):u(p)}function l(p){return p===43||p===45||p===46||$s(p)?(a=1,c(p)):u(p)}function c(p){return p===58?(e.consume(p),a=0,d):(p===43||p===45||p===46||$s(p))&&a++<32?(e.consume(p),c):(a=0,u(p))}function d(p){return p===62?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.exit("autolink"),n):p===null||p===32||p===60||lc(p)?s(p):(e.consume(p),d)}function u(p){return p===64?(e.consume(p),h):t2(p)?(e.consume(p),u):s(p)}function h(p){return $s(p)?m(p):s(p)}function m(p){return p===46?(e.consume(p),a=0,h):p===62?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(p),e.exit("autolinkMarker"),e.exit("autolink"),n):f(p)}function f(p){if((p===45||$s(p))&&a++<63){const g=p===45?f:m;return e.consume(p),g}return s(p)}}const cl={partial:!0,tokenize:h2};function h2(e,n,s){return a;function a(o){return In(o)?$n(e,r,"linePrefix")(o):r(o)}function r(o){return o===null||sn(o)?n(o):s(o)}}const Jx={continuation:{tokenize:f2},exit:g2,name:"blockQuote",tokenize:p2};function p2(e,n,s){const a=this;return r;function r(l){if(l===62){const c=a.containerState;return c.open||(e.enter("blockQuote",{_container:!0}),c.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(l),e.exit("blockQuoteMarker"),o}return s(l)}function o(l){return In(l)?(e.enter("blockQuotePrefixWhitespace"),e.consume(l),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),n):(e.exit("blockQuotePrefix"),n(l))}}function f2(e,n,s){const a=this;return r;function r(l){return In(l)?$n(e,o,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(l):o(l)}function o(l){return e.attempt(Jx,n,s)(l)}}function g2(e){e.exit("blockQuote")}const Yx={name:"characterEscape",tokenize:b2};function b2(e,n,s){return a;function a(o){return e.enter("characterEscape"),e.enter("escapeMarker"),e.consume(o),e.exit("escapeMarker"),r}function r(o){return s2(o)?(e.enter("characterEscapeValue"),e.consume(o),e.exit("characterEscapeValue"),e.exit("characterEscape"),n):s(o)}}const Qx={name:"characterReference",tokenize:x2};function x2(e,n,s){const a=this;let r=0,o,l;return c;function c(m){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(m),e.exit("characterReferenceMarker"),d}function d(m){return m===35?(e.enter("characterReferenceMarkerNumeric"),e.consume(m),e.exit("characterReferenceMarkerNumeric"),u):(e.enter("characterReferenceValue"),o=31,l=$s,h(m))}function u(m){return m===88||m===120?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(m),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,l=n2,h):(e.enter("characterReferenceValue"),o=7,l=Tu,h(m))}function h(m){if(m===59&&r){const f=e.exit("characterReferenceValue");return l===$s&&!Nm(a.sliceSerialize(f))?s(m):(e.enter("characterReferenceMarker"),e.consume(m),e.exit("characterReferenceMarker"),e.exit("characterReference"),n)}return l(m)&&r++<o?(e.consume(m),h):s(m)}}const Pp={partial:!0,tokenize:y2},$p={concrete:!0,name:"codeFenced",tokenize:v2};function v2(e,n,s){const a=this,r={partial:!0,tokenize:C};let o=0,l=0,c;return d;function d(x){return u(x)}function u(x){const k=a.events[a.events.length-1];return o=k&&k[1].type==="linePrefix"?k[2].sliceSerialize(k[1],!0).length:0,c=x,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),h(x)}function h(x){return x===c?(l++,e.consume(x),h):l<3?s(x):(e.exit("codeFencedFenceSequence"),In(x)?$n(e,m,"whitespace")(x):m(x))}function m(x){return x===null||sn(x)?(e.exit("codeFencedFence"),a.interrupt?n(x):e.check(Pp,w,S)(x)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),f(x))}function f(x){return x===null||sn(x)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),m(x)):In(x)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),$n(e,p,"whitespace")(x)):x===96&&x===c?s(x):(e.consume(x),f)}function p(x){return x===null||sn(x)?m(x):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),g(x))}function g(x){return x===null||sn(x)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),m(x)):x===96&&x===c?s(x):(e.consume(x),g)}function w(x){return e.attempt(r,S,v)(x)}function v(x){return e.enter("lineEnding"),e.consume(x),e.exit("lineEnding"),b}function b(x){return o>0&&In(x)?$n(e,y,"linePrefix",o+1)(x):y(x)}function y(x){return x===null||sn(x)?e.check(Pp,w,S)(x):(e.enter("codeFlowValue"),N(x))}function N(x){return x===null||sn(x)?(e.exit("codeFlowValue"),y(x)):(e.consume(x),N)}function S(x){return e.exit("codeFenced"),n(x)}function C(x,k,R){let z=0;return _;function _(T){return x.enter("lineEnding"),x.consume(T),x.exit("lineEnding"),A}function A(T){return x.enter("codeFencedFence"),In(T)?$n(x,Q,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(T):Q(T)}function Q(T){return T===c?(x.enter("codeFencedFenceSequence"),H(T)):R(T)}function H(T){return T===c?(z++,x.consume(T),H):z>=l?(x.exit("codeFencedFenceSequence"),In(T)?$n(x,M,"whitespace")(T):M(T)):R(T)}function M(T){return T===null||sn(T)?(x.exit("codeFencedFence"),k(T)):R(T)}}}function y2(e,n,s){const a=this;return r;function r(l){return l===null?s(l):(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),o)}function o(l){return a.parser.lazy[a.now().line]?s(l):n(l)}}const yd={name:"codeIndented",tokenize:k2},w2={partial:!0,tokenize:j2};function k2(e,n,s){const a=this;return r;function r(u){return e.enter("codeIndented"),$n(e,o,"linePrefix",5)(u)}function o(u){const h=a.events[a.events.length-1];return h&&h[1].type==="linePrefix"&&h[2].sliceSerialize(h[1],!0).length>=4?l(u):s(u)}function l(u){return u===null?d(u):sn(u)?e.attempt(w2,l,d)(u):(e.enter("codeFlowValue"),c(u))}function c(u){return u===null||sn(u)?(e.exit("codeFlowValue"),l(u)):(e.consume(u),c)}function d(u){return e.exit("codeIndented"),n(u)}}function j2(e,n,s){const a=this;return r;function r(l){return a.parser.lazy[a.now().line]?s(l):sn(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),r):$n(e,o,"linePrefix",5)(l)}function o(l){const c=a.events[a.events.length-1];return c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?n(l):sn(l)?r(l):s(l)}}const N2={name:"codeText",previous:C2,resolve:S2,tokenize:E2};function S2(e){let n=e.length-4,s=3,a,r;if((e[s][1].type==="lineEnding"||e[s][1].type==="space")&&(e[n][1].type==="lineEnding"||e[n][1].type==="space")){for(a=s;++a<n;)if(e[a][1].type==="codeTextData"){e[s][1].type="codeTextPadding",e[n][1].type="codeTextPadding",s+=2,n-=2;break}}for(a=s-1,n++;++a<=n;)r===void 0?a!==n&&e[a][1].type!=="lineEnding"&&(r=a):(a===n||e[a][1].type==="lineEnding")&&(e[r][1].type="codeTextData",a!==r+2&&(e[r][1].end=e[a-1][1].end,e.splice(r+2,a-r-2),n-=a-r-2,a=r+2),r=void 0);return e}function C2(e){return e!==96||this.events[this.events.length-1][1].type==="characterEscape"}function E2(e,n,s){let a=0,r,o;return l;function l(m){return e.enter("codeText"),e.enter("codeTextSequence"),c(m)}function c(m){return m===96?(e.consume(m),a++,c):(e.exit("codeTextSequence"),d(m))}function d(m){return m===null?s(m):m===32?(e.enter("space"),e.consume(m),e.exit("space"),d):m===96?(o=e.enter("codeTextSequence"),r=0,h(m)):sn(m)?(e.enter("lineEnding"),e.consume(m),e.exit("lineEnding"),d):(e.enter("codeTextData"),u(m))}function u(m){return m===null||m===32||m===96||sn(m)?(e.exit("codeTextData"),d(m)):(e.consume(m),u)}function h(m){return m===96?(e.consume(m),r++,h):r===a?(e.exit("codeTextSequence"),e.exit("codeText"),n(m)):(o.type="codeTextData",u(m))}}class _2{constructor(n){this.left=n?[...n]:[],this.right=[]}get(n){if(n<0||n>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+n+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return n<this.left.length?this.left[n]:this.right[this.right.length-n+this.left.length-1]}get length(){return this.left.length+this.right.length}shift(){return this.setCursor(0),this.right.pop()}slice(n,s){const a=s??Number.POSITIVE_INFINITY;return a<this.left.length?this.left.slice(n,a):n>this.left.length?this.right.slice(this.right.length-a+this.left.length,this.right.length-n+this.left.length).reverse():this.left.slice(n).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(n,s,a){const r=s||0;this.setCursor(Math.trunc(n));const o=this.right.splice(this.right.length-r,Number.POSITIVE_INFINITY);return a&&ho(this.left,a),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(n){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(n)}pushMany(n){this.setCursor(Number.POSITIVE_INFINITY),ho(this.left,n)}unshift(n){this.setCursor(0),this.right.push(n)}unshiftMany(n){this.setCursor(0),ho(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);ho(this.right,s.reverse())}else{const s=this.right.splice(this.left.length+this.right.length-n,Number.POSITIVE_INFINITY);ho(this.left,s.reverse())}}}function ho(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 Xx(e){const n={};let s=-1,a,r,o,l,c,d,u;const h=new _2(e);for(;++s<h.length;){for(;s in n;)s=n[s];if(a=h.get(s),s&&a[1].type==="chunkFlow"&&h.get(s-1)[1].type==="listItemPrefix"&&(d=a[1]._tokenizer.events,o=0,o<d.length&&d[o][1].type==="lineEndingBlank"&&(o+=2),o<d.length&&d[o][1].type==="content"))for(;++o<d.length&&d[o][1].type!=="content";)d[o][1].type==="chunkText"&&(d[o][1]._isInFirstContentOfListItem=!0,o++);if(a[0]==="enter")a[1].contentType&&(Object.assign(n,M2(h,s)),s=n[s],u=!0);else if(a[1]._container){for(o=s,r=void 0;o--;)if(l=h.get(o),l[1].type==="lineEnding"||l[1].type==="lineEndingBlank")l[0]==="enter"&&(r&&(h.get(r)[1].type="lineEndingBlank"),l[1].type="lineEnding",r=o);else if(!(l[1].type==="linePrefix"||l[1].type==="listItemIndent"))break;r&&(a[1].end={...h.get(r)[1].start},c=h.slice(r,s),c.unshift(a),h.splice(r,s-r+1,c))}}return Zs(e,0,Number.POSITIVE_INFINITY,h.slice(0)),!u}function M2(e,n){const s=e.get(n)[1],a=e.get(n)[2];let r=n-1;const o=[];let l=s._tokenizer;l||(l=a.parser[s.contentType](s.start),s._contentTypeTextTrailing&&(l._contentTypeTextTrailing=!0));const c=l.events,d=[],u={};let h,m,f=-1,p=s,g=0,w=0;const v=[w];for(;p;){for(;e.get(++r)[1]!==p;);o.push(r),p._tokenizer||(h=a.sliceStream(p),p.next||h.push(null),m&&l.defineSkip(p.start),p._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=!0),l.write(h),p._isInFirstContentOfListItem&&(l._gfmTasklistFirstContentOfListItem=void 0)),m=p,p=p.next}for(p=s;++f<c.length;)c[f][0]==="exit"&&c[f-1][0]==="enter"&&c[f][1].type===c[f-1][1].type&&c[f][1].start.line!==c[f][1].end.line&&(w=f+1,v.push(w),p._tokenizer=void 0,p.previous=void 0,p=p.next);for(l.events=[],p?(p._tokenizer=void 0,p.previous=void 0):v.pop(),f=v.length;f--;){const b=c.slice(v[f],v[f+1]),y=o.pop();d.push([y,y+b.length-1]),e.splice(y,2,b)}for(d.reverse(),f=-1;++f<d.length;)u[g+d[f][0]]=g+d[f][1],g+=d[f][1]-d[f][0]-1;return u}const A2={resolve:I2,tokenize:T2},R2={partial:!0,tokenize:P2};function I2(e){return Xx(e),e}function T2(e,n){let s;return a;function a(c){return e.enter("content"),s=e.enter("chunkContent",{contentType:"content"}),r(c)}function r(c){return c===null?o(c):sn(c)?e.check(R2,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 P2(e,n,s){const a=this;return r;function r(l){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),$n(e,o,"linePrefix")}function o(l){if(l===null||sn(l))return s(l);const c=a.events[a.events.length-1];return!a.parser.constructs.disable.null.includes("codeIndented")&&c&&c[1].type==="linePrefix"&&c[2].sliceSerialize(c[1],!0).length>=4?n(l):e.interrupt(a.parser.constructs.flow,s,n)(l)}}function Zx(e,n,s,a,r,o,l,c,d){const u=d||Number.POSITIVE_INFINITY;let h=0;return m;function m(b){return b===60?(e.enter(a),e.enter(r),e.enter(o),e.consume(b),e.exit(o),f):b===null||b===32||b===41||lc(b)?s(b):(e.enter(a),e.enter(l),e.enter(c),e.enter("chunkString",{contentType:"string"}),w(b))}function f(b){return b===62?(e.enter(o),e.consume(b),e.exit(o),e.exit(r),e.exit(a),n):(e.enter(c),e.enter("chunkString",{contentType:"string"}),p(b))}function p(b){return b===62?(e.exit("chunkString"),e.exit(c),f(b)):b===null||b===60||sn(b)?s(b):(e.consume(b),b===92?g:p)}function g(b){return b===60||b===62||b===92?(e.consume(b),p):p(b)}function w(b){return!h&&(b===null||b===41||Jn(b))?(e.exit("chunkString"),e.exit(c),e.exit(l),e.exit(a),n(b)):h<u&&b===40?(e.consume(b),h++,w):b===41?(e.consume(b),h--,w):b===null||b===32||b===40||lc(b)?s(b):(e.consume(b),b===92?v:w)}function v(b){return b===40||b===41||b===92?(e.consume(b),w):w(b)}}function ev(e,n,s,a,r,o){const l=this;let c=0,d;return u;function u(p){return e.enter(a),e.enter(r),e.consume(p),e.exit(r),e.enter(o),h}function h(p){return c>999||p===null||p===91||p===93&&!d||p===94&&!c&&"_hiddenFootnoteSupport"in l.parser.constructs?s(p):p===93?(e.exit(o),e.enter(r),e.consume(p),e.exit(r),e.exit(a),n):sn(p)?(e.enter("lineEnding"),e.consume(p),e.exit("lineEnding"),h):(e.enter("chunkString",{contentType:"string"}),m(p))}function m(p){return p===null||p===91||p===93||sn(p)||c++>999?(e.exit("chunkString"),h(p)):(e.consume(p),d||(d=!In(p)),p===92?f:m)}function f(p){return p===91||p===92||p===93?(e.consume(p),c++,m):m(p)}}function tv(e,n,s,a,r,o){let l;return c;function c(f){return f===34||f===39||f===40?(e.enter(a),e.enter(r),e.consume(f),e.exit(r),l=f===40?41:f,d):s(f)}function d(f){return f===l?(e.enter(r),e.consume(f),e.exit(r),e.exit(a),n):(e.enter(o),u(f))}function u(f){return f===l?(e.exit(o),d(l)):f===null?s(f):sn(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),$n(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),h(f))}function h(f){return f===l||f===null||sn(f)?(e.exit("chunkString"),u(f)):(e.consume(f),f===92?m:h)}function m(f){return f===l||f===92?(e.consume(f),h):h(f)}}function zo(e,n){let s;return a;function a(r){return sn(r)?(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),s=!0,a):In(r)?$n(e,a,s?"linePrefix":"lineSuffix")(r):n(r)}}const $2={name:"definition",tokenize:L2},D2={partial:!0,tokenize:O2};function L2(e,n,s){const a=this;let r;return o;function o(p){return e.enter("definition"),l(p)}function l(p){return ev.call(a,e,c,s,"definitionLabel","definitionLabelMarker","definitionLabelString")(p)}function c(p){return r=Si(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),p===58?(e.enter("definitionMarker"),e.consume(p),e.exit("definitionMarker"),d):s(p)}function d(p){return Jn(p)?zo(e,u)(p):u(p)}function u(p){return Zx(e,h,s,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(p)}function h(p){return e.attempt(D2,m,m)(p)}function m(p){return In(p)?$n(e,f,"whitespace")(p):f(p)}function f(p){return p===null||sn(p)?(e.exit("definition"),a.parser.defined.push(r),n(p)):s(p)}}function O2(e,n,s){return a;function a(c){return Jn(c)?zo(e,r)(c):s(c)}function r(c){return tv(e,o,s,"definitionTitle","definitionTitleMarker","definitionTitleString")(c)}function o(c){return In(c)?$n(e,l,"whitespace")(c):l(c)}function l(c){return c===null||sn(c)?n(c):s(c)}}const F2={name:"hardBreakEscape",tokenize:z2};function z2(e,n,s){return a;function a(o){return e.enter("hardBreakEscape"),e.consume(o),r}function r(o){return sn(o)?(e.exit("hardBreakEscape"),n(o)):s(o)}}const B2={name:"headingAtx",resolve:U2,tokenize:H2};function U2(e,n){let s=e.length-2,a=3,r,o;return e[a][1].type==="whitespace"&&(a+=2),s-2>a&&e[s][1].type==="whitespace"&&(s-=2),e[s][1].type==="atxHeadingSequence"&&(a===s-1||s-4>a&&e[s-2][1].type==="whitespace")&&(s-=a+1===s?2:4),s>a&&(r={type:"atxHeadingText",start:e[a][1].start,end:e[s][1].end},o={type:"chunkText",start:e[a][1].start,end:e[s][1].end,contentType:"text"},Zs(e,a,s-a+1,[["enter",r,n],["enter",o,n],["exit",o,n],["exit",r,n]])),e}function H2(e,n,s){let a=0;return r;function r(h){return e.enter("atxHeading"),o(h)}function o(h){return e.enter("atxHeadingSequence"),l(h)}function l(h){return h===35&&a++<6?(e.consume(h),l):h===null||Jn(h)?(e.exit("atxHeadingSequence"),c(h)):s(h)}function c(h){return h===35?(e.enter("atxHeadingSequence"),d(h)):h===null||sn(h)?(e.exit("atxHeading"),n(h)):In(h)?$n(e,c,"whitespace")(h):(e.enter("atxHeadingText"),u(h))}function d(h){return h===35?(e.consume(h),d):(e.exit("atxHeadingSequence"),c(h))}function u(h){return h===null||h===35||Jn(h)?(e.exit("atxHeadingText"),c(h)):(e.consume(h),u)}}const q2=["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"],Dp=["pre","script","style","textarea"],V2={concrete:!0,name:"htmlFlow",resolveTo:K2,tokenize:J2},W2={partial:!0,tokenize:Q2},G2={partial:!0,tokenize:Y2};function K2(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 J2(e,n,s){const a=this;let r,o,l,c,d;return u;function u(j){return h(j)}function h(j){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(j),m}function m(j){return j===33?(e.consume(j),f):j===47?(e.consume(j),o=!0,w):j===63?(e.consume(j),r=3,a.interrupt?n:E):zs(j)?(e.consume(j),l=String.fromCharCode(j),v):s(j)}function f(j){return j===45?(e.consume(j),r=2,p):j===91?(e.consume(j),r=5,c=0,g):zs(j)?(e.consume(j),r=4,a.interrupt?n:E):s(j)}function p(j){return j===45?(e.consume(j),a.interrupt?n:E):s(j)}function g(j){const q="CDATA[";return j===q.charCodeAt(c++)?(e.consume(j),c===q.length?a.interrupt?n:Q:g):s(j)}function w(j){return zs(j)?(e.consume(j),l=String.fromCharCode(j),v):s(j)}function v(j){if(j===null||j===47||j===62||Jn(j)){const q=j===47,de=l.toLowerCase();return!q&&!o&&Dp.includes(de)?(r=1,a.interrupt?n(j):Q(j)):q2.includes(l.toLowerCase())?(r=6,q?(e.consume(j),b):a.interrupt?n(j):Q(j)):(r=7,a.interrupt&&!a.parser.lazy[a.now().line]?s(j):o?y(j):N(j))}return j===45||$s(j)?(e.consume(j),l+=String.fromCharCode(j),v):s(j)}function b(j){return j===62?(e.consume(j),a.interrupt?n:Q):s(j)}function y(j){return In(j)?(e.consume(j),y):_(j)}function N(j){return j===47?(e.consume(j),_):j===58||j===95||zs(j)?(e.consume(j),S):In(j)?(e.consume(j),N):_(j)}function S(j){return j===45||j===46||j===58||j===95||$s(j)?(e.consume(j),S):C(j)}function C(j){return j===61?(e.consume(j),x):In(j)?(e.consume(j),C):N(j)}function x(j){return j===null||j===60||j===61||j===62||j===96?s(j):j===34||j===39?(e.consume(j),d=j,k):In(j)?(e.consume(j),x):R(j)}function k(j){return j===d?(e.consume(j),d=null,z):j===null||sn(j)?s(j):(e.consume(j),k)}function R(j){return j===null||j===34||j===39||j===47||j===60||j===61||j===62||j===96||Jn(j)?C(j):(e.consume(j),R)}function z(j){return j===47||j===62||In(j)?N(j):s(j)}function _(j){return j===62?(e.consume(j),A):s(j)}function A(j){return j===null||sn(j)?Q(j):In(j)?(e.consume(j),A):s(j)}function Q(j){return j===45&&r===2?(e.consume(j),F):j===60&&r===1?(e.consume(j),W):j===62&&r===4?(e.consume(j),P):j===63&&r===3?(e.consume(j),E):j===93&&r===5?(e.consume(j),D):sn(j)&&(r===6||r===7)?(e.exit("htmlFlowData"),e.check(W2,$,H)(j)):j===null||sn(j)?(e.exit("htmlFlowData"),H(j)):(e.consume(j),Q)}function H(j){return e.check(G2,M,$)(j)}function M(j){return e.enter("lineEnding"),e.consume(j),e.exit("lineEnding"),T}function T(j){return j===null||sn(j)?H(j):(e.enter("htmlFlowData"),Q(j))}function F(j){return j===45?(e.consume(j),E):Q(j)}function W(j){return j===47?(e.consume(j),l="",oe):Q(j)}function oe(j){if(j===62){const q=l.toLowerCase();return Dp.includes(q)?(e.consume(j),P):Q(j)}return zs(j)&&l.length<8?(e.consume(j),l+=String.fromCharCode(j),oe):Q(j)}function D(j){return j===93?(e.consume(j),E):Q(j)}function E(j){return j===62?(e.consume(j),P):j===45&&r===2?(e.consume(j),E):Q(j)}function P(j){return j===null||sn(j)?(e.exit("htmlFlowData"),$(j)):(e.consume(j),P)}function $(j){return e.exit("htmlFlow"),n(j)}}function Y2(e,n,s){const a=this;return r;function r(l){return sn(l)?(e.enter("lineEnding"),e.consume(l),e.exit("lineEnding"),o):s(l)}function o(l){return a.parser.lazy[a.now().line]?s(l):n(l)}}function Q2(e,n,s){return a;function a(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(cl,n,s)}}const X2={name:"htmlText",tokenize:Z2};function Z2(e,n,s){const a=this;let r,o,l;return c;function c(E){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(E),d}function d(E){return E===33?(e.consume(E),u):E===47?(e.consume(E),C):E===63?(e.consume(E),N):zs(E)?(e.consume(E),R):s(E)}function u(E){return E===45?(e.consume(E),h):E===91?(e.consume(E),o=0,g):zs(E)?(e.consume(E),y):s(E)}function h(E){return E===45?(e.consume(E),p):s(E)}function m(E){return E===null?s(E):E===45?(e.consume(E),f):sn(E)?(l=m,W(E)):(e.consume(E),m)}function f(E){return E===45?(e.consume(E),p):m(E)}function p(E){return E===62?F(E):E===45?f(E):m(E)}function g(E){const P="CDATA[";return E===P.charCodeAt(o++)?(e.consume(E),o===P.length?w:g):s(E)}function w(E){return E===null?s(E):E===93?(e.consume(E),v):sn(E)?(l=w,W(E)):(e.consume(E),w)}function v(E){return E===93?(e.consume(E),b):w(E)}function b(E){return E===62?F(E):E===93?(e.consume(E),b):w(E)}function y(E){return E===null||E===62?F(E):sn(E)?(l=y,W(E)):(e.consume(E),y)}function N(E){return E===null?s(E):E===63?(e.consume(E),S):sn(E)?(l=N,W(E)):(e.consume(E),N)}function S(E){return E===62?F(E):N(E)}function C(E){return zs(E)?(e.consume(E),x):s(E)}function x(E){return E===45||$s(E)?(e.consume(E),x):k(E)}function k(E){return sn(E)?(l=k,W(E)):In(E)?(e.consume(E),k):F(E)}function R(E){return E===45||$s(E)?(e.consume(E),R):E===47||E===62||Jn(E)?z(E):s(E)}function z(E){return E===47?(e.consume(E),F):E===58||E===95||zs(E)?(e.consume(E),_):sn(E)?(l=z,W(E)):In(E)?(e.consume(E),z):F(E)}function _(E){return E===45||E===46||E===58||E===95||$s(E)?(e.consume(E),_):A(E)}function A(E){return E===61?(e.consume(E),Q):sn(E)?(l=A,W(E)):In(E)?(e.consume(E),A):z(E)}function Q(E){return E===null||E===60||E===61||E===62||E===96?s(E):E===34||E===39?(e.consume(E),r=E,H):sn(E)?(l=Q,W(E)):In(E)?(e.consume(E),Q):(e.consume(E),M)}function H(E){return E===r?(e.consume(E),r=void 0,T):E===null?s(E):sn(E)?(l=H,W(E)):(e.consume(E),H)}function M(E){return E===null||E===34||E===39||E===60||E===61||E===96?s(E):E===47||E===62||Jn(E)?z(E):(e.consume(E),M)}function T(E){return E===47||E===62||Jn(E)?z(E):s(E)}function F(E){return E===62?(e.consume(E),e.exit("htmlTextData"),e.exit("htmlText"),n):s(E)}function W(E){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(E),e.exit("lineEnding"),oe}function oe(E){return In(E)?$n(e,D,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(E):D(E)}function D(E){return e.enter("htmlTextData"),l(E)}}const Sm={name:"labelEnd",resolveAll:sA,resolveTo:iA,tokenize:aA},eA={tokenize:rA},tA={tokenize:oA},nA={tokenize:lA};function sA(e){let n=-1;const s=[];for(;++n<e.length;){const a=e[n][1];if(s.push(e[n]),a.type==="labelImage"||a.type==="labelLink"||a.type==="labelEnd"){const r=a.type==="labelImage"?4:2;a.type="data",n+=r}}return e.length!==s.length&&Zs(e,0,e.length,s),e}function iA(e,n){let s=e.length,a=0,r,o,l,c;for(;s--;)if(r=e[s][1],o){if(r.type==="link"||r.type==="labelLink"&&r._inactive)break;e[s][0]==="enter"&&r.type==="labelLink"&&(r._inactive=!0)}else if(l){if(e[s][0]==="enter"&&(r.type==="labelImage"||r.type==="labelLink")&&!r._balanced&&(o=s,r.type!=="labelLink")){a=2;break}}else r.type==="labelEnd"&&(l=s);const d={type:e[o][1].type==="labelLink"?"link":"image",start:{...e[o][1].start},end:{...e[e.length-1][1].end}},u={type:"label",start:{...e[o][1].start},end:{...e[l][1].end}},h={type:"labelText",start:{...e[o+a+2][1].end},end:{...e[l-2][1].start}};return c=[["enter",d,n],["enter",u,n]],c=di(c,e.slice(o+1,o+a+3)),c=di(c,[["enter",h,n]]),c=di(c,Dc(n.parser.constructs.insideSpan.null,e.slice(o+a+4,l-3),n)),c=di(c,[["exit",h,n],e[l-2],e[l-1],["exit",u,n]]),c=di(c,e.slice(l+1)),c=di(c,[["exit",d,n]]),Zs(e,o,e.length,c),e}function aA(e,n,s){const a=this;let r=a.events.length,o,l;for(;r--;)if((a.events[r][1].type==="labelImage"||a.events[r][1].type==="labelLink")&&!a.events[r][1]._balanced){o=a.events[r][1];break}return c;function c(f){return o?o._inactive?m(f):(l=a.parser.defined.includes(Si(a.sliceSerialize({start:o.end,end:a.now()}))),e.enter("labelEnd"),e.enter("labelMarker"),e.consume(f),e.exit("labelMarker"),e.exit("labelEnd"),d):s(f)}function d(f){return f===40?e.attempt(eA,h,l?h:m)(f):f===91?e.attempt(tA,h,l?u:m)(f):l?h(f):m(f)}function u(f){return e.attempt(nA,h,m)(f)}function h(f){return n(f)}function m(f){return o._balanced=!0,s(f)}}function rA(e,n,s){return a;function a(m){return e.enter("resource"),e.enter("resourceMarker"),e.consume(m),e.exit("resourceMarker"),r}function r(m){return Jn(m)?zo(e,o)(m):o(m)}function o(m){return m===41?h(m):Zx(e,l,c,"resourceDestination","resourceDestinationLiteral","resourceDestinationLiteralMarker","resourceDestinationRaw","resourceDestinationString",32)(m)}function l(m){return Jn(m)?zo(e,d)(m):h(m)}function c(m){return s(m)}function d(m){return m===34||m===39||m===40?tv(e,u,s,"resourceTitle","resourceTitleMarker","resourceTitleString")(m):h(m)}function u(m){return Jn(m)?zo(e,h)(m):h(m)}function h(m){return m===41?(e.enter("resourceMarker"),e.consume(m),e.exit("resourceMarker"),e.exit("resource"),n):s(m)}}function oA(e,n,s){const a=this;return r;function r(c){return ev.call(a,e,o,l,"reference","referenceMarker","referenceString")(c)}function o(c){return a.parser.defined.includes(Si(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)))?n(c):s(c)}function l(c){return s(c)}}function lA(e,n,s){return a;function a(o){return e.enter("reference"),e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),r}function r(o){return o===93?(e.enter("referenceMarker"),e.consume(o),e.exit("referenceMarker"),e.exit("reference"),n):s(o)}}const cA={name:"labelStartImage",resolveAll:Sm.resolveAll,tokenize:dA};function dA(e,n,s){const a=this;return r;function r(c){return e.enter("labelImage"),e.enter("labelImageMarker"),e.consume(c),e.exit("labelImageMarker"),o}function o(c){return c===91?(e.enter("labelMarker"),e.consume(c),e.exit("labelMarker"),e.exit("labelImage"),l):s(c)}function l(c){return c===94&&"_hiddenFootnoteSupport"in a.parser.constructs?s(c):n(c)}}const uA={name:"labelStartLink",resolveAll:Sm.resolveAll,tokenize:mA};function mA(e,n,s){const a=this;return r;function r(l){return e.enter("labelLink"),e.enter("labelMarker"),e.consume(l),e.exit("labelMarker"),e.exit("labelLink"),o}function o(l){return l===94&&"_hiddenFootnoteSupport"in a.parser.constructs?s(l):n(l)}}const wd={name:"lineEnding",tokenize:hA};function hA(e,n){return s;function s(a){return e.enter("lineEnding"),e.consume(a),e.exit("lineEnding"),$n(e,n,"linePrefix")}}const Yl={name:"thematicBreak",tokenize:pA};function pA(e,n,s){let a=0,r;return o;function o(u){return e.enter("thematicBreak"),l(u)}function l(u){return r=u,c(u)}function c(u){return u===r?(e.enter("thematicBreakSequence"),d(u)):a>=3&&(u===null||sn(u))?(e.exit("thematicBreak"),n(u)):s(u)}function d(u){return u===r?(e.consume(u),a++,d):(e.exit("thematicBreakSequence"),In(u)?$n(e,c,"whitespace")(u):c(u))}}const Ws={continuation:{tokenize:xA},exit:yA,name:"list",tokenize:bA},fA={partial:!0,tokenize:wA},gA={partial:!0,tokenize:vA};function bA(e,n,s){const a=this,r=a.events[a.events.length-1];let o=r&&r[1].type==="linePrefix"?r[2].sliceSerialize(r[1],!0).length:0,l=0;return c;function c(p){const g=a.containerState.type||(p===42||p===43||p===45?"listUnordered":"listOrdered");if(g==="listUnordered"?!a.containerState.marker||p===a.containerState.marker:Tu(p)){if(a.containerState.type||(a.containerState.type=g,e.enter(g,{_container:!0})),g==="listUnordered")return e.enter("listItemPrefix"),p===42||p===45?e.check(Yl,s,u)(p):u(p);if(!a.interrupt||p===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),d(p)}return s(p)}function d(p){return Tu(p)&&++l<10?(e.consume(p),d):(!a.interrupt||l<2)&&(a.containerState.marker?p===a.containerState.marker:p===41||p===46)?(e.exit("listItemValue"),u(p)):s(p)}function u(p){return e.enter("listItemMarker"),e.consume(p),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||p,e.check(cl,a.interrupt?s:h,e.attempt(fA,f,m))}function h(p){return a.containerState.initialBlankLine=!0,o++,f(p)}function m(p){return In(p)?(e.enter("listItemPrefixWhitespace"),e.consume(p),e.exit("listItemPrefixWhitespace"),f):s(p)}function f(p){return a.containerState.size=o+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,n(p)}}function xA(e,n,s){const a=this;return a.containerState._closeFlow=void 0,e.check(cl,r,o);function r(c){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,$n(e,n,"listItemIndent",a.containerState.size+1)(c)}function o(c){return a.containerState.furtherBlankLines||!In(c)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,l(c)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(gA,n,l)(c))}function l(c){return a.containerState._closeFlow=!0,a.interrupt=void 0,$n(e,e.attempt(Ws,n,s),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(c)}}function vA(e,n,s){const a=this;return $n(e,r,"listItemIndent",a.containerState.size+1);function r(o){const l=a.events[a.events.length-1];return l&&l[1].type==="listItemIndent"&&l[2].sliceSerialize(l[1],!0).length===a.containerState.size?n(o):s(o)}}function yA(e){e.exit(this.containerState.type)}function wA(e,n,s){const a=this;return $n(e,r,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function r(o){const l=a.events[a.events.length-1];return!In(o)&&l&&l[1].type==="listItemPrefixWhitespace"?n(o):s(o)}}const Lp={name:"setextUnderline",resolveTo:kA,tokenize:jA};function kA(e,n){let s=e.length,a,r,o;for(;s--;)if(e[s][0]==="enter"){if(e[s][1].type==="content"){a=s;break}e[s][1].type==="paragraph"&&(r=s)}else e[s][1].type==="content"&&e.splice(s,1),!o&&e[s][1].type==="definition"&&(o=s);const l={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",o?(e.splice(r,0,["enter",l,n]),e.splice(o+1,0,["exit",e[a][1],n]),e[a][1].end={...e[o][1].end}):e[a][1]=l,e.push(["exit",l,n]),e}function jA(e,n,s){const a=this;let r;return o;function o(u){let h=a.events.length,m;for(;h--;)if(a.events[h][1].type!=="lineEnding"&&a.events[h][1].type!=="linePrefix"&&a.events[h][1].type!=="content"){m=a.events[h][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||m)?(e.enter("setextHeadingLine"),r=u,l(u)):s(u)}function l(u){return e.enter("setextHeadingLineSequence"),c(u)}function c(u){return u===r?(e.consume(u),c):(e.exit("setextHeadingLineSequence"),In(u)?$n(e,d,"lineSuffix")(u):d(u))}function d(u){return u===null||sn(u)?(e.exit("setextHeadingLine"),n(u)):s(u)}}const NA={tokenize:SA};function SA(e){const n=this,s=e.attempt(cl,a,e.attempt(this.parser.constructs.flowInitial,r,$n(e,e.attempt(this.parser.constructs.flow,r,e.attempt(A2,r)),"linePrefix")));return s;function a(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),n.currentConstruct=void 0,s}function r(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),n.currentConstruct=void 0,s}}const CA={resolveAll:sv()},EA=nv("string"),_A=nv("text");function nv(e){return{resolveAll:sv(e==="text"?MA:void 0),tokenize:n};function n(s){const a=this,r=this.parser.constructs[e],o=s.attempt(r,l,c);return l;function l(h){return u(h)?o(h):c(h)}function c(h){if(h===null){s.consume(h);return}return s.enter("data"),s.consume(h),d}function d(h){return u(h)?(s.exit("data"),o(h)):(s.consume(h),d)}function u(h){if(h===null)return!0;const m=r[h];let f=-1;if(m)for(;++f<m.length;){const p=m[f];if(!p.previous||p.previous.call(a,a.previous))return!0}return!1}}}function sv(e){return n;function n(s,a){let r=-1,o;for(;++r<=s.length;)o===void 0?s[r]&&s[r][1].type==="data"&&(o=r,r++):(!s[r]||s[r][1].type!=="data")&&(r!==o+2&&(s[o][1].end=s[r-1][1].end,s.splice(o+2,r-o-2),r=o+2),o=void 0);return e?e(s,a):s}}function MA(e,n){let s=0;for(;++s<=e.length;)if((s===e.length||e[s][1].type==="lineEnding")&&e[s-1][1].type==="data"){const a=e[s-1][1],r=n.sliceStream(a);let o=r.length,l=-1,c=0,d;for(;o--;){const u=r[o];if(typeof u=="string"){for(l=u.length;u.charCodeAt(l-1)===32;)c++,l--;if(l)break;l=-1}else if(u===-2)d=!0,c++;else if(u!==-1){o++;break}}if(n._contentTypeTextTrailing&&s===e.length&&(c=0),c){const u={type:s===e.length||d||c<2?"lineSuffix":"hardBreakTrailing",start:{_bufferIndex:o?l:a.start._bufferIndex+l,_index:a.start._index+o,line:a.end.line,column:a.end.column-c,offset:a.end.offset-c},end:{...a.end}};a.end={...u.start},a.start.offset===a.end.offset?Object.assign(a,u):(e.splice(s,0,["enter",u,n],["exit",u,n]),s+=2)}s++}return e}const AA={42:Ws,43:Ws,45:Ws,48:Ws,49:Ws,50:Ws,51:Ws,52:Ws,53:Ws,54:Ws,55:Ws,56:Ws,57:Ws,62:Jx},RA={91:$2},IA={[-2]:yd,[-1]:yd,32:yd},TA={35:B2,42:Yl,45:[Lp,Yl],60:V2,61:Lp,95:Yl,96:$p,126:$p},PA={38:Qx,92:Yx},$A={[-5]:wd,[-4]:wd,[-3]:wd,33:cA,38:Qx,42:Pu,60:[u2,X2],91:uA,92:[F2,Yx],93:Sm,95:Pu,96:N2},DA={null:[Pu,CA]},LA={null:[42,95]},OA={null:[]},FA=Object.freeze(Object.defineProperty({__proto__:null,attentionMarkers:LA,contentInitial:RA,disable:OA,document:AA,flow:TA,flowInitial:IA,insideSpan:DA,string:PA,text:$A},Symbol.toStringTag,{value:"Module"}));function zA(e,n,s){let a={_bufferIndex:-1,_index:0,line:s&&s.line||1,column:s&&s.column||1,offset:s&&s.offset||0};const r={},o=[];let l=[],c=[];const d={attempt:k(C),check:k(x),consume:y,enter:N,exit:S,interrupt:k(x,{interrupt:!0})},u={code:null,containerState:{},defineSkip:w,events:[],now:g,parser:e,previous:null,sliceSerialize:f,sliceStream:p,write:m};let h=n.tokenize.call(u,d);return n.resolveAll&&o.push(n),u;function m(A){return l=di(l,A),v(),l[l.length-1]!==null?[]:(R(n,0),u.events=Dc(o,u.events,u),u.events)}function f(A,Q){return UA(p(A),Q)}function p(A){return BA(l,A)}function g(){const{_bufferIndex:A,_index:Q,line:H,column:M,offset:T}=a;return{_bufferIndex:A,_index:Q,line:H,column:M,offset:T}}function w(A){r[A.line]=A.column,_()}function v(){let A;for(;a._index<l.length;){const Q=l[a._index];if(typeof Q=="string")for(A=a._index,a._bufferIndex<0&&(a._bufferIndex=0);a._index===A&&a._bufferIndex<Q.length;)b(Q.charCodeAt(a._bufferIndex));else b(Q)}}function b(A){h=h(A)}function y(A){sn(A)?(a.line++,a.column=1,a.offset+=A===-3?2:1,_()):A!==-1&&(a.column++,a.offset++),a._bufferIndex<0?a._index++:(a._bufferIndex++,a._bufferIndex===l[a._index].length&&(a._bufferIndex=-1,a._index++)),u.previous=A}function N(A,Q){const H=Q||{};return H.type=A,H.start=g(),u.events.push(["enter",H,u]),c.push(H),H}function S(A){const Q=c.pop();return Q.end=g(),u.events.push(["exit",Q,u]),Q}function C(A,Q){R(A,Q.from)}function x(A,Q){Q.restore()}function k(A,Q){return H;function H(M,T,F){let W,oe,D,E;return Array.isArray(M)?$(M):"tokenize"in M?$([M]):P(M);function P(be){return Ce;function Ce(Ae){const ae=Ae!==null&&be[Ae],X=Ae!==null&&be.null,pe=[...Array.isArray(ae)?ae:ae?[ae]:[],...Array.isArray(X)?X:X?[X]:[]];return $(pe)(Ae)}}function $(be){return W=be,oe=0,be.length===0?F:j(be[oe])}function j(be){return Ce;function Ce(Ae){return E=z(),D=be,be.partial||(u.currentConstruct=be),be.name&&u.parser.constructs.disable.null.includes(be.name)?de():be.tokenize.call(Q?Object.assign(Object.create(u),Q):u,d,q,de)(Ae)}}function q(be){return A(D,E),T}function de(be){return E.restore(),++oe<W.length?j(W[oe]):F}}}function R(A,Q){A.resolveAll&&!o.includes(A)&&o.push(A),A.resolve&&Zs(u.events,Q,u.events.length-Q,A.resolve(u.events.slice(Q),u)),A.resolveTo&&(u.events=A.resolveTo(u.events,u))}function z(){const A=g(),Q=u.previous,H=u.currentConstruct,M=u.events.length,T=Array.from(c);return{from:M,restore:F};function F(){a=A,u.previous=Q,u.currentConstruct=H,u.events.length=M,c=T,_()}}function _(){a.line in r&&a.column<2&&(a.column=r[a.line],a.offset+=r[a.line]-1)}}function BA(e,n){const s=n.start._index,a=n.start._bufferIndex,r=n.end._index,o=n.end._bufferIndex;let l;if(s===r)l=[e[s].slice(a,o)];else{if(l=e.slice(s,r),a>-1){const c=l[0];typeof c=="string"?l[0]=c.slice(a):l.shift()}o>0&&l.push(e[r].slice(0,o))}return l}function UA(e,n){let s=-1;const a=[];let r;for(;++s<e.length;){const o=e[s];let l;if(typeof o=="string")l=o;else switch(o){case-5:{l="\r";break}case-4:{l=`
655
+ `;break}case-3:{l=`\r
656
+ `;break}case-2:{l=n?" ":" ";break}case-1:{if(!n&&r)continue;l=" ";break}default:l=String.fromCharCode(o)}r=o===-2,a.push(l)}return a.join("")}function HA(e){const a={constructs:Gx([FA,...(e||{}).extensions||[]]),content:r(i2),defined:[],document:r(r2),flow:r(NA),lazy:{},string:r(EA),text:r(_A)};return a;function r(o){return l;function l(c){return zA(a,o,c)}}}function qA(e){for(;!Xx(e););return e}const Op=/[\0\t\n\r]/g;function VA(){let e=1,n="",s=!0,a;return r;function r(o,l,c){const d=[];let u,h,m,f,p;for(o=n+(typeof o=="string"?o.toString():new TextDecoder(l||void 0).decode(o)),m=0,n="",s&&(o.charCodeAt(0)===65279&&m++,s=void 0);m<o.length;){if(Op.lastIndex=m,u=Op.exec(o),f=u&&u.index!==void 0?u.index:o.length,p=o.charCodeAt(f),!u){n=o.slice(m);break}if(p===10&&m===f&&a)d.push(-3),a=void 0;else switch(a&&(d.push(-5),a=void 0),m<f&&(d.push(o.slice(m,f)),e+=f-m),p){case 0:{d.push(65533),e++;break}case 9:{for(h=Math.ceil(e/4)*4,d.push(-2);e++<h;)d.push(-1);break}case 10:{d.push(-4),e=1;break}default:a=!0,e=1}m=f+1}return c&&(a&&d.push(-5),n&&d.push(n),d.push(null)),d}}const WA=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function GA(e){return e.replace(WA,KA)}function KA(e,n,s){if(n)return n;if(s.charCodeAt(0)===35){const r=s.charCodeAt(1),o=r===120||r===88;return Kx(s.slice(o?2:1),o?16:10)}return Nm(s)||e}const iv={}.hasOwnProperty;function JA(e,n,s){return n&&typeof n=="object"&&(s=n,n=void 0),YA(s)(qA(HA(s).document().write(VA()(e,n,!0))))}function YA(e){const n={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(xe),autolinkProtocol:z,autolinkEmail:z,atxHeading:o(L),blockQuote:o(X),characterEscape:z,characterReference:z,codeFenced:o(pe),codeFencedFenceInfo:l,codeFencedFenceMeta:l,codeIndented:o(pe,l),codeText:o(ie,l),codeTextData:z,data:z,codeFlowValue:z,definition:o(ye),definitionDestinationString:l,definitionLabelString:l,definitionTitleString:l,emphasis:o(ee),hardBreakEscape:o(Y),hardBreakTrailing:o(Y),htmlFlow:o(me,l),htmlFlowData:z,htmlText:o(me,l),htmlTextData:z,image:o(B),label:l,link:o(xe),listItem:o(te),listItemValue:f,listOrdered:o(Ne,m),listUnordered:o(Ne),paragraph:o(Be),reference:j,referenceString:l,resourceDestinationString:l,resourceTitleString:l,setextHeading:o(L),strong:o($e),thematicBreak:o(De)},exit:{atxHeading:d(),atxHeadingSequence:C,autolink:d(),autolinkEmail:ae,autolinkProtocol:Ae,blockQuote:d(),characterEscapeValue:_,characterReferenceMarkerHexadecimal:de,characterReferenceMarkerNumeric:de,characterReferenceValue:be,characterReference:Ce,codeFenced:d(v),codeFencedFence:w,codeFencedFenceInfo:p,codeFencedFenceMeta:g,codeFlowValue:_,codeIndented:d(b),codeText:d(T),codeTextData:_,data:_,definition:d(),definitionDestinationString:S,definitionLabelString:y,definitionTitleString:N,emphasis:d(),hardBreakEscape:d(Q),hardBreakTrailing:d(Q),htmlFlow:d(H),htmlFlowData:_,htmlText:d(M),htmlTextData:_,image:d(W),label:D,labelText:oe,lineEnding:A,link:d(F),listItem:d(),listOrdered:d(),listUnordered:d(),paragraph:d(),referenceString:q,resourceDestinationString:E,resourceTitleString:P,resource:$,setextHeading:d(R),setextHeadingLineSequence:k,setextHeadingText:x,strong:d(),thematicBreak:d()}};av(n,(e||{}).mdastExtensions||[]);const s={};return a;function a(le){let _e={type:"root",children:[]};const Le={stack:[_e],tokenStack:[],config:n,enter:c,exit:u,buffer:l,resume:h,data:s},mt=[];let Ve=-1;for(;++Ve<le.length;)if(le[Ve][1].type==="listOrdered"||le[Ve][1].type==="listUnordered")if(le[Ve][0]==="enter")mt.push(Ve);else{const ge=mt.pop();Ve=r(le,ge,Ve)}for(Ve=-1;++Ve<le.length;){const ge=n[le[Ve][0]];iv.call(ge,le[Ve][1].type)&&ge[le[Ve][1].type].call(Object.assign({sliceSerialize:le[Ve][2].sliceSerialize},Le),le[Ve][1])}if(Le.tokenStack.length>0){const ge=Le.tokenStack[Le.tokenStack.length-1];(ge[1]||Fp).call(Le,void 0,ge[0])}for(_e.position={start:ha(le.length>0?le[0][1].start:{line:1,column:1,offset:0}),end:ha(le.length>0?le[le.length-2][1].end:{line:1,column:1,offset:0})},Ve=-1;++Ve<n.transforms.length;)_e=n.transforms[Ve](_e)||_e;return _e}function r(le,_e,Le){let mt=_e-1,Ve=-1,ge=!1,he,Pe,dt,jt;for(;++mt<=Le;){const nt=le[mt];switch(nt[1].type){case"listUnordered":case"listOrdered":case"blockQuote":{nt[0]==="enter"?Ve++:Ve--,jt=void 0;break}case"lineEndingBlank":{nt[0]==="enter"&&(he&&!jt&&!Ve&&!dt&&(dt=mt),jt=void 0);break}case"linePrefix":case"listItemValue":case"listItemMarker":case"listItemPrefix":case"listItemPrefixWhitespace":break;default:jt=void 0}if(!Ve&&nt[0]==="enter"&&nt[1].type==="listItemPrefix"||Ve===-1&&nt[0]==="exit"&&(nt[1].type==="listUnordered"||nt[1].type==="listOrdered")){if(he){let xt=mt;for(Pe=void 0;xt--;){const Ie=le[xt];if(Ie[1].type==="lineEnding"||Ie[1].type==="lineEndingBlank"){if(Ie[0]==="exit")continue;Pe&&(le[Pe][1].type="lineEndingBlank",ge=!0),Ie[1].type="lineEnding",Pe=xt}else if(!(Ie[1].type==="linePrefix"||Ie[1].type==="blockQuotePrefix"||Ie[1].type==="blockQuotePrefixWhitespace"||Ie[1].type==="blockQuoteMarker"||Ie[1].type==="listItemIndent"))break}dt&&(!Pe||dt<Pe)&&(he._spread=!0),he.end=Object.assign({},Pe?le[Pe][1].start:nt[1].end),le.splice(Pe||mt,0,["exit",he,nt[2]]),mt++,Le++}if(nt[1].type==="listItemPrefix"){const xt={type:"listItem",_spread:!1,start:Object.assign({},nt[1].start),end:void 0};he=xt,le.splice(mt,0,["enter",xt,nt[2]]),mt++,Le++,dt=void 0,jt=!0}}}return le[_e][1]._spread=ge,Le}function o(le,_e){return Le;function Le(mt){c.call(this,le(mt),mt),_e&&_e.call(this,mt)}}function l(){this.stack.push({type:"fragment",children:[]})}function c(le,_e,Le){this.stack[this.stack.length-1].children.push(le),this.stack.push(le),this.tokenStack.push([_e,Le||void 0]),le.position={start:ha(_e.start),end:void 0}}function d(le){return _e;function _e(Le){le&&le.call(this,Le),u.call(this,Le)}}function u(le,_e){const Le=this.stack.pop(),mt=this.tokenStack.pop();if(mt)mt[0].type!==le.type&&(_e?_e.call(this,le,mt[0]):(mt[1]||Fp).call(this,le,mt[0]));else throw new Error("Cannot close `"+le.type+"` ("+Fo({start:le.start,end:le.end})+"): it’s not open");Le.position.end=ha(le.end)}function h(){return jm(this.stack.pop())}function m(){this.data.expectingFirstListItemValue=!0}function f(le){if(this.data.expectingFirstListItemValue){const _e=this.stack[this.stack.length-2];_e.start=Number.parseInt(this.sliceSerialize(le),10),this.data.expectingFirstListItemValue=void 0}}function p(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.lang=le}function g(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.meta=le}function w(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)}function v(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.value=le.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}function b(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.value=le.replace(/(\r?\n|\r)$/g,"")}function y(le){const _e=this.resume(),Le=this.stack[this.stack.length-1];Le.label=_e,Le.identifier=Si(this.sliceSerialize(le)).toLowerCase()}function N(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.title=le}function S(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.url=le}function C(le){const _e=this.stack[this.stack.length-1];if(!_e.depth){const Le=this.sliceSerialize(le).length;_e.depth=Le}}function x(){this.data.setextHeadingSlurpLineEnding=!0}function k(le){const _e=this.stack[this.stack.length-1];_e.depth=this.sliceSerialize(le).codePointAt(0)===61?1:2}function R(){this.data.setextHeadingSlurpLineEnding=void 0}function z(le){const Le=this.stack[this.stack.length-1].children;let mt=Le[Le.length-1];(!mt||mt.type!=="text")&&(mt=ct(),mt.position={start:ha(le.start),end:void 0},Le.push(mt)),this.stack.push(mt)}function _(le){const _e=this.stack.pop();_e.value+=this.sliceSerialize(le),_e.position.end=ha(le.end)}function A(le){const _e=this.stack[this.stack.length-1];if(this.data.atHardBreak){const Le=_e.children[_e.children.length-1];Le.position.end=ha(le.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&n.canContainEols.includes(_e.type)&&(z.call(this,le),_.call(this,le))}function Q(){this.data.atHardBreak=!0}function H(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.value=le}function M(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.value=le}function T(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.value=le}function F(){const le=this.stack[this.stack.length-1];if(this.data.inReference){const _e=this.data.referenceType||"shortcut";le.type+="Reference",le.referenceType=_e,delete le.url,delete le.title}else delete le.identifier,delete le.label;this.data.referenceType=void 0}function W(){const le=this.stack[this.stack.length-1];if(this.data.inReference){const _e=this.data.referenceType||"shortcut";le.type+="Reference",le.referenceType=_e,delete le.url,delete le.title}else delete le.identifier,delete le.label;this.data.referenceType=void 0}function oe(le){const _e=this.sliceSerialize(le),Le=this.stack[this.stack.length-2];Le.label=GA(_e),Le.identifier=Si(_e).toLowerCase()}function D(){const le=this.stack[this.stack.length-1],_e=this.resume(),Le=this.stack[this.stack.length-1];if(this.data.inReference=!0,Le.type==="link"){const mt=le.children;Le.children=mt}else Le.alt=_e}function E(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.url=le}function P(){const le=this.resume(),_e=this.stack[this.stack.length-1];_e.title=le}function $(){this.data.inReference=void 0}function j(){this.data.referenceType="collapsed"}function q(le){const _e=this.resume(),Le=this.stack[this.stack.length-1];Le.label=_e,Le.identifier=Si(this.sliceSerialize(le)).toLowerCase(),this.data.referenceType="full"}function de(le){this.data.characterReferenceType=le.type}function be(le){const _e=this.sliceSerialize(le),Le=this.data.characterReferenceType;let mt;Le?(mt=Kx(_e,Le==="characterReferenceMarkerNumeric"?10:16),this.data.characterReferenceType=void 0):mt=Nm(_e);const Ve=this.stack[this.stack.length-1];Ve.value+=mt}function Ce(le){const _e=this.stack.pop();_e.position.end=ha(le.end)}function Ae(le){_.call(this,le);const _e=this.stack[this.stack.length-1];_e.url=this.sliceSerialize(le)}function ae(le){_.call(this,le);const _e=this.stack[this.stack.length-1];_e.url="mailto:"+this.sliceSerialize(le)}function X(){return{type:"blockquote",children:[]}}function pe(){return{type:"code",lang:null,meta:null,value:""}}function ie(){return{type:"inlineCode",value:""}}function ye(){return{type:"definition",identifier:"",label:null,title:null,url:""}}function ee(){return{type:"emphasis",children:[]}}function L(){return{type:"heading",depth:0,children:[]}}function Y(){return{type:"break"}}function me(){return{type:"html",value:""}}function B(){return{type:"image",title:null,url:"",alt:null}}function xe(){return{type:"link",title:null,url:"",children:[]}}function Ne(le){return{type:"list",ordered:le.type==="listOrdered",start:null,spread:le._spread,children:[]}}function te(le){return{type:"listItem",spread:le._spread,checked:null,children:[]}}function Be(){return{type:"paragraph",children:[]}}function $e(){return{type:"strong",children:[]}}function ct(){return{type:"text",value:""}}function De(){return{type:"thematicBreak"}}}function ha(e){return{line:e.line,column:e.column,offset:e.offset}}function av(e,n){let s=-1;for(;++s<n.length;){const a=n[s];Array.isArray(a)?av(e,a):QA(e,a)}}function QA(e,n){let s;for(s in n)if(iv.call(n,s))switch(s){case"canContainEols":{const a=n[s];a&&e[s].push(...a);break}case"transforms":{const a=n[s];a&&e[s].push(...a);break}case"enter":case"exit":{const a=n[s];a&&Object.assign(e[s],a);break}}}function Fp(e,n){throw e?new Error("Cannot close `"+e.type+"` ("+Fo({start:e.start,end:e.end})+"): a different token (`"+n.type+"`, "+Fo({start:n.start,end:n.end})+") is open"):new Error("Cannot close document, a token (`"+n.type+"`, "+Fo({start:n.start,end:n.end})+") is still open")}function XA(e){const n=this;n.parser=s;function s(a){return JA(a,{...n.data("settings"),...e,extensions:n.data("micromarkExtensions")||[],mdastExtensions:n.data("fromMarkdownExtensions")||[]})}}function ZA(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 eR(e,n){const s={type:"element",tagName:"br",properties:{},children:[]};return e.patch(n,s),[e.applyData(n,s),{type:"text",value:`
657
+ `}]}function tR(e,n){const s=n.value?n.value+`
658
+ `:"",a={},r=n.lang?n.lang.split(/\s+/):[];r.length>0&&(a.className=["language-"+r[0]]);let o={type:"element",tagName:"code",properties:a,children:[{type:"text",value:s}]};return n.meta&&(o.data={meta:n.meta}),e.patch(n,o),o=e.applyData(n,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(n,o),o}function nR(e,n){const s={type:"element",tagName:"del",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function sR(e,n){const s={type:"element",tagName:"em",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function iR(e,n){const s=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",a=String(n.identifier).toUpperCase(),r=Zr(a.toLowerCase()),o=e.footnoteOrder.indexOf(a);let l,c=e.footnoteCounts.get(a);c===void 0?(c=0,e.footnoteOrder.push(a),l=e.footnoteOrder.length):l=o+1,c+=1,e.footnoteCounts.set(a,c);const d={type:"element",tagName:"a",properties:{href:"#"+s+"fn-"+r,id:s+"fnref-"+r+(c>1?"-"+c:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(l)}]};e.patch(n,d);const u={type:"element",tagName:"sup",properties:{},children:[d]};return e.patch(n,u),e.applyData(n,u)}function aR(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 rR(e,n){if(e.options.allowDangerousHtml){const s={type:"raw",value:n.value};return e.patch(n,s),e.applyData(n,s)}}function rv(e,n){const s=n.referenceType;let a="]";if(s==="collapsed"?a+="[]":s==="full"&&(a+="["+(n.label||n.identifier)+"]"),n.type==="imageReference")return[{type:"text",value:"!["+n.alt+a}];const r=e.all(n),o=r[0];o&&o.type==="text"?o.value="["+o.value:r.unshift({type:"text",value:"["});const l=r[r.length-1];return l&&l.type==="text"?l.value+=a:r.push({type:"text",value:a}),r}function oR(e,n){const s=String(n.identifier).toUpperCase(),a=e.definitionById.get(s);if(!a)return rv(e,n);const r={src:Zr(a.url||""),alt:n.alt};a.title!==null&&a.title!==void 0&&(r.title=a.title);const o={type:"element",tagName:"img",properties:r,children:[]};return e.patch(n,o),e.applyData(n,o)}function lR(e,n){const s={src:Zr(n.url)};n.alt!==null&&n.alt!==void 0&&(s.alt=n.alt),n.title!==null&&n.title!==void 0&&(s.title=n.title);const a={type:"element",tagName:"img",properties:s,children:[]};return e.patch(n,a),e.applyData(n,a)}function cR(e,n){const s={type:"text",value:n.value.replace(/\r?\n|\r/g," ")};e.patch(n,s);const a={type:"element",tagName:"code",properties:{},children:[s]};return e.patch(n,a),e.applyData(n,a)}function dR(e,n){const s=String(n.identifier).toUpperCase(),a=e.definitionById.get(s);if(!a)return rv(e,n);const r={href:Zr(a.url||"")};a.title!==null&&a.title!==void 0&&(r.title=a.title);const o={type:"element",tagName:"a",properties:r,children:e.all(n)};return e.patch(n,o),e.applyData(n,o)}function uR(e,n){const s={href:Zr(n.url)};n.title!==null&&n.title!==void 0&&(s.title=n.title);const a={type:"element",tagName:"a",properties:s,children:e.all(n)};return e.patch(n,a),e.applyData(n,a)}function mR(e,n,s){const a=e.all(n),r=s?hR(s):ov(n),o={},l=[];if(typeof n.checked=="boolean"){const h=a[0];let m;h&&h.type==="element"&&h.tagName==="p"?m=h:(m={type:"element",tagName:"p",properties:{},children:[]},a.unshift(m)),m.children.length>0&&m.children.unshift({type:"text",value:" "}),m.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:n.checked,disabled:!0},children:[]}),o.className=["task-list-item"]}let c=-1;for(;++c<a.length;){const h=a[c];(r||c!==0||h.type!=="element"||h.tagName!=="p")&&l.push({type:"text",value:`
659
+ `}),h.type==="element"&&h.tagName==="p"&&!r?l.push(...h.children):l.push(h)}const d=a[a.length-1];d&&(r||d.type!=="element"||d.tagName!=="p")&&l.push({type:"text",value:`
660
+ `});const u={type:"element",tagName:"li",properties:o,children:l};return e.patch(n,u),e.applyData(n,u)}function hR(e){let n=!1;if(e.type==="list"){n=e.spread||!1;const s=e.children;let a=-1;for(;!n&&++a<s.length;)n=ov(s[a])}return n}function ov(e){const n=e.spread;return n??e.children.length>1}function pR(e,n){const s={},a=e.all(n);let r=-1;for(typeof n.start=="number"&&n.start!==1&&(s.start=n.start);++r<a.length;){const l=a[r];if(l.type==="element"&&l.tagName==="li"&&l.properties&&Array.isArray(l.properties.className)&&l.properties.className.includes("task-list-item")){s.className=["contains-task-list"];break}}const o={type:"element",tagName:n.ordered?"ol":"ul",properties:s,children:e.wrap(a,!0)};return e.patch(n,o),e.applyData(n,o)}function fR(e,n){const s={type:"element",tagName:"p",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function gR(e,n){const s={type:"root",children:e.wrap(e.all(n))};return e.patch(n,s),e.applyData(n,s)}function bR(e,n){const s={type:"element",tagName:"strong",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}function xR(e,n){const s=e.all(n),a=s.shift(),r=[];if(a){const l={type:"element",tagName:"thead",properties:{},children:e.wrap([a],!0)};e.patch(n.children[0],l),r.push(l)}if(s.length>0){const l={type:"element",tagName:"tbody",properties:{},children:e.wrap(s,!0)},c=vm(n.children[1]),d=zx(n.children[n.children.length-1]);c&&d&&(l.position={start:c,end:d}),r.push(l)}const o={type:"element",tagName:"table",properties:{},children:e.wrap(r,!0)};return e.patch(n,o),e.applyData(n,o)}function vR(e,n,s){const a=s?s.children:void 0,o=(a?a.indexOf(n):1)===0?"th":"td",l=s&&s.type==="table"?s.align:void 0,c=l?l.length:n.children.length;let d=-1;const u=[];for(;++d<c;){const m=n.children[d],f={},p=l?l[d]:void 0;p&&(f.align=p);let g={type:"element",tagName:o,properties:f,children:[]};m&&(g.children=e.all(m),e.patch(m,g),g=e.applyData(m,g)),u.push(g)}const h={type:"element",tagName:"tr",properties:{},children:e.wrap(u,!0)};return e.patch(n,h),e.applyData(n,h)}function yR(e,n){const s={type:"element",tagName:"td",properties:{},children:e.all(n)};return e.patch(n,s),e.applyData(n,s)}const zp=9,Bp=32;function wR(e){const n=String(e),s=/\r?\n|\r/g;let a=s.exec(n),r=0;const o=[];for(;a;)o.push(Up(n.slice(r,a.index),r>0,!0),a[0]),r=a.index+a[0].length,a=s.exec(n);return o.push(Up(n.slice(r),r>0,!1)),o.join("")}function Up(e,n,s){let a=0,r=e.length;if(n){let o=e.codePointAt(a);for(;o===zp||o===Bp;)a++,o=e.codePointAt(a)}if(s){let o=e.codePointAt(r-1);for(;o===zp||o===Bp;)r--,o=e.codePointAt(r-1)}return r>a?e.slice(a,r):""}function kR(e,n){const s={type:"text",value:wR(String(n.value))};return e.patch(n,s),e.applyData(n,s)}function jR(e,n){const s={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(n,s),e.applyData(n,s)}const NR={blockquote:ZA,break:eR,code:tR,delete:nR,emphasis:sR,footnoteReference:iR,heading:aR,html:rR,imageReference:oR,image:lR,inlineCode:cR,linkReference:dR,link:uR,listItem:mR,list:pR,paragraph:fR,root:gR,strong:bR,table:xR,tableCell:yR,tableRow:vR,text:kR,thematicBreak:jR,toml:kl,yaml:kl,definition:kl,footnoteDefinition:kl};function kl(){}const lv=-1,Lc=0,Bo=1,cc=2,Cm=3,Em=4,_m=5,Mm=6,cv=7,dv=8,Hp=typeof self=="object"?self:globalThis,SR=(e,n)=>{const s=(r,o)=>(e.set(o,r),r),a=r=>{if(e.has(r))return e.get(r);const[o,l]=n[r];switch(o){case Lc:case lv:return s(l,r);case Bo:{const c=s([],r);for(const d of l)c.push(a(d));return c}case cc:{const c=s({},r);for(const[d,u]of l)c[a(d)]=a(u);return c}case Cm:return s(new Date(l),r);case Em:{const{source:c,flags:d}=l;return s(new RegExp(c,d),r)}case _m:{const c=s(new Map,r);for(const[d,u]of l)c.set(a(d),a(u));return c}case Mm:{const c=s(new Set,r);for(const d of l)c.add(a(d));return c}case cv:{const{name:c,message:d}=l;return s(new Hp[c](d),r)}case dv: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 Hp[o](l),r)};return a},qp=e=>SR(new Map,e)(0),xr="",{toString:CR}={},{keys:ER}=Object,po=e=>{const n=typeof e;if(n!=="object"||!e)return[Lc,n];const s=CR.call(e).slice(8,-1);switch(s){case"Array":return[Bo,xr];case"Object":return[cc,xr];case"Date":return[Cm,xr];case"RegExp":return[Em,xr];case"Map":return[_m,xr];case"Set":return[Mm,xr];case"DataView":return[Bo,s]}return s.includes("Array")?[Bo,s]:s.includes("Error")?[cv,s]:[cc,s]},jl=([e,n])=>e===Lc&&(n==="function"||n==="symbol"),_R=(e,n,s,a)=>{const r=(l,c)=>{const d=a.push(l)-1;return s.set(c,d),d},o=l=>{if(s.has(l))return s.get(l);let[c,d]=po(l);switch(c){case Lc:{let h=l;switch(d){case"bigint":c=dv,h=l.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+d);h=null;break;case"undefined":return r([lv],l)}return r([c,h],l)}case Bo:{if(d){let f=l;return d==="DataView"?f=new Uint8Array(l.buffer):d==="ArrayBuffer"&&(f=new Uint8Array(l)),r([d,[...f]],l)}const h=[],m=r([c,h],l);for(const f of l)h.push(o(f));return m}case cc:{if(d)switch(d){case"BigInt":return r([d,l.toString()],l);case"Boolean":case"Number":case"String":return r([d,l.valueOf()],l)}if(n&&"toJSON"in l)return o(l.toJSON());const h=[],m=r([c,h],l);for(const f of ER(l))(e||!jl(po(l[f])))&&h.push([o(f),o(l[f])]);return m}case Cm:return r([c,l.toISOString()],l);case Em:{const{source:h,flags:m}=l;return r([c,{source:h,flags:m}],l)}case _m:{const h=[],m=r([c,h],l);for(const[f,p]of l)(e||!(jl(po(f))||jl(po(p))))&&h.push([o(f),o(p)]);return m}case Mm:{const h=[],m=r([c,h],l);for(const f of l)(e||!jl(po(f)))&&h.push(o(f));return m}}const{message:u}=l;return r([c,{name:d,message:u}],l)};return o},Vp=(e,{json:n,lossy:s}={})=>{const a=[];return _R(!(n||s),!!n,new Map,a)(e),a},dc=typeof structuredClone=="function"?(e,n)=>n&&("json"in n||"lossy"in n)?qp(Vp(e,n)):structuredClone(e):(e,n)=>qp(Vp(e,n));function MR(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 AR(e,n){return"Back to reference "+(e+1)+(n>1?"-"+n:"")}function RR(e){const n=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",s=e.options.footnoteBackContent||MR,a=e.options.footnoteBackLabel||AR,r=e.options.footnoteLabel||"Footnotes",o=e.options.footnoteLabelTagName||"h2",l=e.options.footnoteLabelProperties||{className:["sr-only"]},c=[];let d=-1;for(;++d<e.footnoteOrder.length;){const u=e.footnoteById.get(e.footnoteOrder[d]);if(!u)continue;const h=e.all(u),m=String(u.identifier).toUpperCase(),f=Zr(m.toLowerCase());let p=0;const g=[],w=e.footnoteCounts.get(m);for(;w!==void 0&&++p<=w;){g.length>0&&g.push({type:"text",value:" "});let y=typeof s=="string"?s:s(d,p);typeof y=="string"&&(y={type:"text",value:y}),g.push({type:"element",tagName:"a",properties:{href:"#"+n+"fnref-"+f+(p>1?"-"+p:""),dataFootnoteBackref:"",ariaLabel:typeof a=="string"?a:a(d,p),className:["data-footnote-backref"]},children:Array.isArray(y)?y:[y]})}const v=h[h.length-1];if(v&&v.type==="element"&&v.tagName==="p"){const y=v.children[v.children.length-1];y&&y.type==="text"?y.value+=" ":v.children.push({type:"text",value:" "}),v.children.push(...g)}else h.push(...g);const b={type:"element",tagName:"li",properties:{id:n+"fn-"+f},children:e.wrap(h,!0)};e.patch(u,b),c.push(b)}if(c.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:o,properties:{...dc(l),id:"footnote-label"},children:[{type:"text",value:r}]},{type:"text",value:`
661
+ `},{type:"element",tagName:"ol",properties:{},children:e.wrap(c,!0)},{type:"text",value:`
662
+ `}]}}const Oc=(function(e){if(e==null)return $R;if(typeof e=="function")return Fc(e);if(typeof e=="object")return Array.isArray(e)?IR(e):TR(e);if(typeof e=="string")return PR(e);throw new Error("Expected function, string, or object as test")});function IR(e){const n=[];let s=-1;for(;++s<e.length;)n[s]=Oc(e[s]);return Fc(a);function a(...r){let o=-1;for(;++o<n.length;)if(n[o].apply(this,r))return!0;return!1}}function TR(e){const n=e;return Fc(s);function s(a){const r=a;let o;for(o in e)if(r[o]!==n[o])return!1;return!0}}function PR(e){return Fc(n);function n(s){return s&&s.type===e}}function Fc(e){return n;function n(s,a,r){return!!(DR(s)&&e.call(this,s,typeof a=="number"?a:void 0,r||void 0))}}function $R(){return!0}function DR(e){return e!==null&&typeof e=="object"&&"type"in e}const uv=[],LR=!0,$u=!1,OR="skip";function mv(e,n,s,a){let r;typeof n=="function"&&typeof s!="function"?(a=s,s=n):r=n;const o=Oc(r),l=a?-1:1;c(e,void 0,[])();function c(d,u,h){const m=d&&typeof d=="object"?d:{};if(typeof m.type=="string"){const p=typeof m.tagName=="string"?m.tagName:typeof m.name=="string"?m.name:void 0;Object.defineProperty(f,"name",{value:"node ("+(d.type+(p?"<"+p+">":""))+")"})}return f;function f(){let p=uv,g,w,v;if((!n||o(d,u,h[h.length-1]||void 0))&&(p=FR(s(d,h)),p[0]===$u))return p;if("children"in d&&d.children){const b=d;if(b.children&&p[0]!==OR)for(w=(a?b.children.length:-1)+l,v=h.concat(b);w>-1&&w<b.children.length;){const y=b.children[w];if(g=c(y,w,v)(),g[0]===$u)return g;w=typeof g[1]=="number"?g[1]:w+l}}return p}}}function FR(e){return Array.isArray(e)?e:typeof e=="number"?[LR,e]:e==null?uv:[e]}function Am(e,n,s,a){let r,o,l;typeof n=="function"&&typeof s!="function"?(o=void 0,l=n,r=s):(o=n,l=s,r=a),mv(e,o,c,r);function c(d,u){const h=u[u.length-1],m=h?h.children.indexOf(d):void 0;return l(d,m,h)}}const Du={}.hasOwnProperty,zR={};function BR(e,n){const s=n||zR,a=new Map,r=new Map,o=new Map,l={...NR,...s.handlers},c={all:u,applyData:HR,definitionById:a,footnoteById:r,footnoteCounts:o,footnoteOrder:[],handlers:l,one:d,options:s,patch:UR,wrap:VR};return Am(e,function(h){if(h.type==="definition"||h.type==="footnoteDefinition"){const m=h.type==="definition"?a:r,f=String(h.identifier).toUpperCase();m.has(f)||m.set(f,h)}}),c;function d(h,m){const f=h.type,p=c.handlers[f];if(Du.call(c.handlers,f)&&p)return p(c,h,m);if(c.options.passThrough&&c.options.passThrough.includes(f)){if("children"in h){const{children:w,...v}=h,b=dc(v);return b.children=c.all(h),b}return dc(h)}return(c.options.unknownHandler||qR)(c,h,m)}function u(h){const m=[];if("children"in h){const f=h.children;let p=-1;for(;++p<f.length;){const g=c.one(f[p],h);if(g){if(p&&f[p-1].type==="break"&&(!Array.isArray(g)&&g.type==="text"&&(g.value=Wp(g.value)),!Array.isArray(g)&&g.type==="element")){const w=g.children[0];w&&w.type==="text"&&(w.value=Wp(w.value))}Array.isArray(g)?m.push(...g):m.push(g)}}}return m}}function UR(e,n){e.position&&(n.position=AM(e))}function HR(e,n){let s=n;if(e&&e.data){const a=e.data.hName,r=e.data.hChildren,o=e.data.hProperties;if(typeof a=="string")if(s.type==="element")s.tagName=a;else{const l="children"in s?s.children:[s];s={type:"element",tagName:a,properties:{},children:l}}s.type==="element"&&o&&Object.assign(s.properties,dc(o)),"children"in s&&s.children&&r!==null&&r!==void 0&&(s.children=r)}return s}function qR(e,n){const s=n.data||{},a="value"in n&&!(Du.call(s,"hProperties")||Du.call(s,"hChildren"))?{type:"text",value:n.value}:{type:"element",tagName:"div",properties:{},children:e.all(n)};return e.patch(n,a),e.applyData(n,a)}function VR(e,n){const s=[];let a=-1;for(n&&s.push({type:"text",value:`
663
+ `});++a<e.length;)a&&s.push({type:"text",value:`
664
+ `}),s.push(e[a]);return n&&e.length>0&&s.push({type:"text",value:`
665
+ `}),s}function Wp(e){let n=0,s=e.charCodeAt(n);for(;s===9||s===32;)n++,s=e.charCodeAt(n);return e.slice(n)}function Gp(e,n){const s=BR(e,n),a=s.one(e,void 0),r=RR(s),o=Array.isArray(a)?{type:"root",children:a}:a||{type:"root",children:[]};return r&&o.children.push({type:"text",value:`
666
+ `},r),o}function WR(e,n){return e&&"run"in e?async function(s,a){const r=Gp(s,{file:a,...n});await e.run(r,a)}:function(s,a){return Gp(s,{file:a,...e||n})}}function Kp(e){if(e)throw e}var kd,Jp;function GR(){if(Jp)return kd;Jp=1;var e=Object.prototype.hasOwnProperty,n=Object.prototype.toString,s=Object.defineProperty,a=Object.getOwnPropertyDescriptor,r=function(u){return typeof Array.isArray=="function"?Array.isArray(u):n.call(u)==="[object Array]"},o=function(u){if(!u||n.call(u)!=="[object Object]")return!1;var h=e.call(u,"constructor"),m=u.constructor&&u.constructor.prototype&&e.call(u.constructor.prototype,"isPrototypeOf");if(u.constructor&&!h&&!m)return!1;var f;for(f in u);return typeof f>"u"||e.call(u,f)},l=function(u,h){s&&h.name==="__proto__"?s(u,h.name,{enumerable:!0,configurable:!0,value:h.newValue,writable:!0}):u[h.name]=h.newValue},c=function(u,h){if(h==="__proto__")if(e.call(u,h)){if(a)return a(u,h).value}else return;return u[h]};return kd=function d(){var u,h,m,f,p,g,w=arguments[0],v=1,b=arguments.length,y=!1;for(typeof w=="boolean"&&(y=w,w=arguments[1]||{},v=2),(w==null||typeof w!="object"&&typeof w!="function")&&(w={});v<b;++v)if(u=arguments[v],u!=null)for(h in u)m=c(w,h),f=c(u,h),w!==f&&(y&&f&&(o(f)||(p=r(f)))?(p?(p=!1,g=m&&r(m)?m:[]):g=m&&o(m)?m:{},l(w,{name:h,newValue:d(y,g,f)})):typeof f<"u"&&l(w,{name:h,newValue:f}));return w},kd}var KR=GR();const jd=jb(KR);function Lu(e){if(typeof e!="object"||e===null)return!1;const n=Object.getPrototypeOf(e);return(n===null||n===Object.prototype||Object.getPrototypeOf(n)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}function JR(){const e=[],n={run:s,use:a};return n;function s(...r){let o=-1;const l=r.pop();if(typeof l!="function")throw new TypeError("Expected function as last argument, not "+l);c(null,...r);function c(d,...u){const h=e[++o];let m=-1;if(d){l(d);return}for(;++m<r.length;)(u[m]===null||u[m]===void 0)&&(u[m]=r[m]);r=u,h?YR(h,c)(...u):l(null,...u)}}function a(r){if(typeof r!="function")throw new TypeError("Expected `middelware` to be a function, not "+r);return e.push(r),n}}function YR(e,n){let s;return a;function a(...l){const c=e.length>l.length;let d;c&&l.push(r);try{d=e.apply(this,l)}catch(u){const h=u;if(c&&s)throw h;return r(h)}c||(d&&d.then&&typeof d.then=="function"?d.then(o,r):d instanceof Error?r(d):o(d))}function r(l,...c){s||(s=!0,n(l,...c))}function o(l){r(null,l)}}const Li={basename:QR,dirname:XR,extname:ZR,join:eI,sep:"/"};function QR(e,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');dl(e);let s=0,a=-1,r=e.length,o;if(n===void 0||n.length===0||n.length>e.length){for(;r--;)if(e.codePointAt(r)===47){if(o){s=r+1;break}}else a<0&&(o=!0,a=r+1);return a<0?"":e.slice(s,a)}if(n===e)return"";let l=-1,c=n.length-1;for(;r--;)if(e.codePointAt(r)===47){if(o){s=r+1;break}}else l<0&&(o=!0,l=r+1),c>-1&&(e.codePointAt(r)===n.codePointAt(c--)?c<0&&(a=r):(c=-1,a=l));return s===a?a=l:a<0&&(a=e.length),e.slice(s,a)}function XR(e){if(dl(e),e.length===0)return".";let n=-1,s=e.length,a;for(;--s;)if(e.codePointAt(s)===47){if(a){n=s;break}}else a||(a=!0);return n<0?e.codePointAt(0)===47?"/":".":n===1&&e.codePointAt(0)===47?"//":e.slice(0,n)}function ZR(e){dl(e);let n=e.length,s=-1,a=0,r=-1,o=0,l;for(;n--;){const c=e.codePointAt(n);if(c===47){if(l){a=n+1;break}continue}s<0&&(l=!0,s=n+1),c===46?r<0?r=n:o!==1&&(o=1):r>-1&&(o=-1)}return r<0||s<0||o===0||o===1&&r===s-1&&r===a+1?"":e.slice(r,s)}function eI(...e){let n=-1,s;for(;++n<e.length;)dl(e[n]),e[n]&&(s=s===void 0?e[n]:s+"/"+e[n]);return s===void 0?".":tI(s)}function tI(e){dl(e);const n=e.codePointAt(0)===47;let s=nI(e,!n);return s.length===0&&!n&&(s="."),s.length>0&&e.codePointAt(e.length-1)===47&&(s+="/"),n?"/"+s:s}function nI(e,n){let s="",a=0,r=-1,o=0,l=-1,c,d;for(;++l<=e.length;){if(l<e.length)c=e.codePointAt(l);else{if(c===47)break;c=47}if(c===47){if(!(r===l-1||o===1))if(r!==l-1&&o===2){if(s.length<2||a!==2||s.codePointAt(s.length-1)!==46||s.codePointAt(s.length-2)!==46){if(s.length>2){if(d=s.lastIndexOf("/"),d!==s.length-1){d<0?(s="",a=0):(s=s.slice(0,d),a=s.length-1-s.lastIndexOf("/")),r=l,o=0;continue}}else if(s.length>0){s="",a=0,r=l,o=0;continue}}n&&(s=s.length>0?s+"/..":"..",a=2)}else s.length>0?s+="/"+e.slice(r+1,l):s=e.slice(r+1,l),a=l-r-1;r=l,o=0}else c===46&&o>-1?o++:o=-1}return s}function dl(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const sI={cwd:iI};function iI(){return"/"}function Ou(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function aI(e){if(typeof e=="string")e=new URL(e);else if(!Ou(e)){const n=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw n.code="ERR_INVALID_ARG_TYPE",n}if(e.protocol!=="file:"){const n=new TypeError("The URL must be of scheme file");throw n.code="ERR_INVALID_URL_SCHEME",n}return rI(e)}function rI(e){if(e.hostname!==""){const a=new TypeError('File URL host must be "localhost" or empty on darwin');throw a.code="ERR_INVALID_FILE_URL_HOST",a}const n=e.pathname;let s=-1;for(;++s<n.length;)if(n.codePointAt(s)===37&&n.codePointAt(s+1)===50){const a=n.codePointAt(s+2);if(a===70||a===102){const r=new TypeError("File URL path must not include encoded / characters");throw r.code="ERR_INVALID_FILE_URL_PATH",r}}return decodeURIComponent(n)}const Nd=["history","path","basename","stem","extname","dirname"];class hv{constructor(n){let s;n?Ou(n)?s={path:n}:typeof n=="string"||oI(n)?s={value:n}:s=n:s={},this.cwd="cwd"in s?"":sI.cwd(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let a=-1;for(;++a<Nd.length;){const o=Nd[a];o in s&&s[o]!==void 0&&s[o]!==null&&(this[o]=o==="history"?[...s[o]]:s[o])}let r;for(r in s)Nd.includes(r)||(this[r]=s[r])}get basename(){return typeof this.path=="string"?Li.basename(this.path):void 0}set basename(n){Cd(n,"basename"),Sd(n,"basename"),this.path=Li.join(this.dirname||"",n)}get dirname(){return typeof this.path=="string"?Li.dirname(this.path):void 0}set dirname(n){Yp(this.basename,"dirname"),this.path=Li.join(n||"",this.basename)}get extname(){return typeof this.path=="string"?Li.extname(this.path):void 0}set extname(n){if(Sd(n,"extname"),Yp(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=Li.join(this.dirname,this.stem+(n||""))}get path(){return this.history[this.history.length-1]}set path(n){Ou(n)&&(n=aI(n)),Cd(n,"path"),this.path!==n&&this.history.push(n)}get stem(){return typeof this.path=="string"?Li.basename(this.path,this.extname):void 0}set stem(n){Cd(n,"stem"),Sd(n,"stem"),this.path=Li.join(this.dirname||"",n+(this.extname||""))}fail(n,s,a){const r=this.message(n,s,a);throw r.fatal=!0,r}info(n,s,a){const r=this.message(n,s,a);return r.fatal=void 0,r}message(n,s,a){const r=new Ds(n,s,a);return this.path&&(r.name=this.path+":"+r.name,r.file=this.path),r.fatal=!1,this.messages.push(r),r}toString(n){return this.value===void 0?"":typeof this.value=="string"?this.value:new TextDecoder(n||void 0).decode(this.value)}}function Sd(e,n){if(e&&e.includes(Li.sep))throw new Error("`"+n+"` cannot be a path: did not expect `"+Li.sep+"`")}function Cd(e,n){if(!e)throw new Error("`"+n+"` cannot be empty")}function Yp(e,n){if(!e)throw new Error("Setting `"+n+"` requires `path` to be set too")}function oI(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const lI=(function(e){const a=this.constructor.prototype,r=a[e],o=function(){return r.apply(o,arguments)};return Object.setPrototypeOf(o,a),o}),cI={}.hasOwnProperty;class Rm extends lI{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=JR()}copy(){const n=new Rm;let s=-1;for(;++s<this.attachers.length;){const a=this.attachers[s];n.use(...a)}return n.data(jd(!0,{},this.namespace)),n}data(n,s){return typeof n=="string"?arguments.length===2?(Md("data",this.frozen),this.namespace[n]=s,this):cI.call(this.namespace,n)&&this.namespace[n]||void 0:n?(Md("data",this.frozen),this.namespace=n,this):this.namespace}freeze(){if(this.frozen)return this;const n=this;for(;++this.freezeIndex<this.attachers.length;){const[s,...a]=this.attachers[this.freezeIndex];if(a[0]===!1)continue;a[0]===!0&&(a[0]=void 0);const r=s.call(n,...a);typeof r=="function"&&this.transformers.use(r)}return this.frozen=!0,this.freezeIndex=Number.POSITIVE_INFINITY,this}parse(n){this.freeze();const s=Nl(n),a=this.parser||this.Parser;return Ed("parse",a),a(String(s),s)}process(n,s){const a=this;return this.freeze(),Ed("process",this.parser||this.Parser),_d("process",this.compiler||this.Compiler),s?r(void 0,s):new Promise(r);function r(o,l){const c=Nl(n),d=a.parse(c);a.run(d,c,function(h,m,f){if(h||!m||!f)return u(h);const p=m,g=a.stringify(p,f);mI(g)?f.value=g:f.result=g,u(h,f)});function u(h,m){h||!m?l(h):o?o(m):s(void 0,m)}}}processSync(n){let s=!1,a;return this.freeze(),Ed("processSync",this.parser||this.Parser),_d("processSync",this.compiler||this.Compiler),this.process(n,r),Xp("processSync","process",s),a;function r(o,l){s=!0,Kp(o),a=l}}run(n,s,a){Qp(n),this.freeze();const r=this.transformers;return!a&&typeof s=="function"&&(a=s,s=void 0),a?o(void 0,a):new Promise(o);function o(l,c){const d=Nl(s);r.run(n,d,u);function u(h,m,f){const p=m||n;h?c(h):l?l(p):a(void 0,p,f)}}}runSync(n,s){let a=!1,r;return this.run(n,s,o),Xp("runSync","run",a),r;function o(l,c){Kp(l),r=c,a=!0}}stringify(n,s){this.freeze();const a=Nl(s),r=this.compiler||this.Compiler;return _d("stringify",r),Qp(n),r(n,a)}use(n,...s){const a=this.attachers,r=this.namespace;if(Md("use",this.frozen),n!=null)if(typeof n=="function")d(n,s);else if(typeof n=="object")Array.isArray(n)?c(n):l(n);else throw new TypeError("Expected usable value, not `"+n+"`");return this;function o(u){if(typeof u=="function")d(u,[]);else if(typeof u=="object")if(Array.isArray(u)){const[h,...m]=u;d(h,m)}else l(u);else throw new TypeError("Expected usable value, not `"+u+"`")}function l(u){if(!("plugins"in u)&&!("settings"in u))throw new Error("Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither");c(u.plugins),u.settings&&(r.settings=jd(!0,r.settings,u.settings))}function c(u){let h=-1;if(u!=null)if(Array.isArray(u))for(;++h<u.length;){const m=u[h];o(m)}else throw new TypeError("Expected a list of plugins, not `"+u+"`")}function d(u,h){let m=-1,f=-1;for(;++m<a.length;)if(a[m][0]===u){f=m;break}if(f===-1)a.push([u,...h]);else if(h.length>0){let[p,...g]=h;const w=a[f][1];Lu(w)&&Lu(p)&&(p=jd(!0,w,p)),a[f]=[u,p,...g]}}}}const dI=new Rm().freeze();function Ed(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function _d(e,n){if(typeof n!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function Md(e,n){if(n)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function Qp(e){if(!Lu(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function Xp(e,n,s){if(!s)throw new Error("`"+e+"` finished async. Use `"+n+"` instead")}function Nl(e){return uI(e)?e:new hv(e)}function uI(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function mI(e){return typeof e=="string"||hI(e)}function hI(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const pI="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",Zp=[],ef={allowDangerousHtml:!0},fI=/^(https?|ircs?|mailto|xmpp)$/i,gI=[{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 ei(e){const n=bI(e),s=xI(e);return vI(n.runSync(n.parse(s),s),e)}function bI(e){const n=e.rehypePlugins||Zp,s=e.remarkPlugins||Zp,a=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...ef}:ef;return dI().use(XA).use(s).use(WR,a).use(n)}function xI(e){const n=e.children||"",s=new hv;return typeof n=="string"&&(s.value=n),s}function vI(e,n){const s=n.allowedElements,a=n.allowElement,r=n.components,o=n.disallowedElements,l=n.skipHtml,c=n.unwrapDisallowed,d=n.urlTransform||yI;for(const h of gI)Object.hasOwn(n,h.from)&&(""+h.from+(h.to?"use `"+h.to+"` instead":"remove it")+pI+h.id,void 0);return Am(e,u),$M(e,{Fragment:t.Fragment,components:r,ignoreInvalidStyle:!0,jsx:t.jsx,jsxs:t.jsxs,passKeys:!0,passNode:!0});function u(h,m,f){if(h.type==="raw"&&f&&typeof m=="number")return l?f.children.splice(m,1):f.children[m]={type:"text",value:h.value},m;if(h.type==="element"){let p;for(p in vd)if(Object.hasOwn(vd,p)&&Object.hasOwn(h.properties,p)){const g=h.properties[p],w=vd[p];(w===null||w.includes(h.tagName))&&(h.properties[p]=d(String(g||""),p,h))}}if(h.type==="element"){let p=s?!s.includes(h.tagName):o?o.includes(h.tagName):!1;if(!p&&a&&typeof m=="number"&&(p=!a(h,m,f)),p&&f&&typeof m=="number")return c&&h.children?f.children.splice(m,1,...h.children):f.children.splice(m,1),m}}}function yI(e){const n=e.indexOf(":"),s=e.indexOf("?"),a=e.indexOf("#"),r=e.indexOf("/");return n===-1||r!==-1&&n>r||s!==-1&&n>s||a!==-1&&n>a||fI.test(e.slice(0,n))?e:""}function tf(e,n){const s=String(e);if(typeof n!="string")throw new TypeError("Expected character");let a=0,r=s.indexOf(n);for(;r!==-1;)a++,r=s.indexOf(n,r+n.length);return a}function wI(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function kI(e,n,s){const r=Oc((s||{}).ignore||[]),o=jI(n);let l=-1;for(;++l<o.length;)mv(e,"text",c);function c(u,h){let m=-1,f;for(;++m<h.length;){const p=h[m],g=f?f.children:void 0;if(r(p,g?g.indexOf(p):void 0,f))return;f=p}if(f)return d(u,h)}function d(u,h){const m=h[h.length-1],f=o[l][0],p=o[l][1];let g=0;const v=m.children.indexOf(u);let b=!1,y=[];f.lastIndex=0;let N=f.exec(u.value);for(;N;){const S=N.index,C={index:N.index,input:N.input,stack:[...h,u]};let x=p(...N,C);if(typeof x=="string"&&(x=x.length>0?{type:"text",value:x}:void 0),x===!1?f.lastIndex=S+1:(g!==S&&y.push({type:"text",value:u.value.slice(g,S)}),Array.isArray(x)?y.push(...x):x&&y.push(x),g=S+N[0].length,b=!0),!f.global)break;N=f.exec(u.value)}return b?(g<u.value.length&&y.push({type:"text",value:u.value.slice(g)}),m.children.splice(v,1,...y)):y=[u],v+y.length}}function jI(e){const n=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");const s=!e[0]||Array.isArray(e[0])?e:[e];let a=-1;for(;++a<s.length;){const r=s[a];n.push([NI(r[0]),SI(r[1])])}return n}function NI(e){return typeof e=="string"?new RegExp(wI(e),"g"):e}function SI(e){return typeof e=="function"?e:function(){return e}}const Ad="phrasing",Rd=["autolink","link","image","label"];function CI(){return{transforms:[TI],enter:{literalAutolink:_I,literalAutolinkEmail:Id,literalAutolinkHttp:Id,literalAutolinkWww:Id},exit:{literalAutolink:II,literalAutolinkEmail:RI,literalAutolinkHttp:MI,literalAutolinkWww:AI}}}function EI(){return{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Ad,notInConstruct:Rd},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Ad,notInConstruct:Rd},{character:":",before:"[ps]",after:"\\/",inConstruct:Ad,notInConstruct:Rd}]}}function _I(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function Id(e){this.config.enter.autolinkProtocol.call(this,e)}function MI(e){this.config.exit.autolinkProtocol.call(this,e)}function AI(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 RI(e){this.config.exit.autolinkEmail.call(this,e)}function II(e){this.exit(e)}function TI(e){kI(e,[[/(https?:\/\/|www(?=\.))([-.\w]+)([^ \t\r\n]*)/gi,PI],[/(?<=^|\s|\p{P}|\p{S})([-.\w+]+)@([-\w]+(?:\.[-\w]+)+)/gu,$I]],{ignore:["link","linkReference"]})}function PI(e,n,s,a,r){let o="";if(!pv(r)||(/^w/i.test(n)&&(s=n+s,n="",o="http://"),!DI(s)))return!1;const l=LI(s+a);if(!l[0])return!1;const c={type:"link",title:null,url:o+n+l[0],children:[{type:"text",value:n+l[0]}]};return l[1]?[c,{type:"text",value:l[1]}]:c}function $I(e,n,s,a){return!pv(a,!0)||/[-\d_]$/.test(s)?!1:{type:"link",title:null,url:"mailto:"+n+"@"+s,children:[{type:"text",value:n+"@"+s}]}}function DI(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 LI(e){const n=/[!"&'),.:;<>?\]}]+$/.exec(e);if(!n)return[e,void 0];e=e.slice(0,n.index);let s=n[0],a=s.indexOf(")");const r=tf(e,"(");let o=tf(e,")");for(;a!==-1&&r>o;)e+=s.slice(0,a+1),s=s.slice(a+1),a=s.indexOf(")"),o++;return[e,s]}function pv(e,n){const s=e.input.charCodeAt(e.index-1);return(e.index===0||Qa(s)||$c(s))&&(!n||s!==47)}fv.peek=WI;function OI(){this.buffer()}function FI(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function zI(){this.buffer()}function BI(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function UI(e){const n=this.resume(),s=this.stack[this.stack.length-1];s.type,s.identifier=Si(this.sliceSerialize(e)).toLowerCase(),s.label=n}function HI(e){this.exit(e)}function qI(e){const n=this.resume(),s=this.stack[this.stack.length-1];s.type,s.identifier=Si(this.sliceSerialize(e)).toLowerCase(),s.label=n}function VI(e){this.exit(e)}function WI(){return"["}function fv(e,n,s,a){const r=s.createTracker(a);let o=r.move("[^");const l=s.enter("footnoteReference"),c=s.enter("reference");return o+=r.move(s.safe(s.associationId(e),{after:"]",before:o})),c(),l(),o+=r.move("]"),o}function GI(){return{enter:{gfmFootnoteCallString:OI,gfmFootnoteCall:FI,gfmFootnoteDefinitionLabelString:zI,gfmFootnoteDefinition:BI},exit:{gfmFootnoteCallString:UI,gfmFootnoteCall:HI,gfmFootnoteDefinitionLabelString:qI,gfmFootnoteDefinition:VI}}}function KI(e){let n=!1;return e&&e.firstLineBlank&&(n=!0),{handlers:{footnoteDefinition:s,footnoteReference:fv},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function s(a,r,o,l){const c=o.createTracker(l);let d=c.move("[^");const u=o.enter("footnoteDefinition"),h=o.enter("label");return d+=c.move(o.safe(o.associationId(a),{before:d,after:"]"})),h(),d+=c.move("]:"),a.children&&a.children.length>0&&(c.shift(4),d+=c.move((n?`
667
+ `:" ")+o.indentLines(o.containerFlow(a,c.current()),n?gv:JI))),u(),d}}function JI(e,n,s){return n===0?e:gv(e,n,s)}function gv(e,n,s){return(s?"":" ")+e}const YI=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];bv.peek=tT;function QI(){return{canContainEols:["delete"],enter:{strikethrough:ZI},exit:{strikethrough:eT}}}function XI(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:YI}],handlers:{delete:bv}}}function ZI(e){this.enter({type:"delete",children:[]},e)}function eT(e){this.exit(e)}function bv(e,n,s,a){const r=s.createTracker(a),o=s.enter("strikethrough");let l=r.move("~~");return l+=s.containerPhrasing(e,{...r.current(),before:l,after:"~"}),l+=r.move("~~"),o(),l}function tT(){return"~"}function nT(e){return e.length}function sT(e,n){const s=n||{},a=(s.align||[]).concat(),r=s.stringLength||nT,o=[],l=[],c=[],d=[];let u=0,h=-1;for(;++h<e.length;){const w=[],v=[];let b=-1;for(e[h].length>u&&(u=e[h].length);++b<e[h].length;){const y=iT(e[h][b]);if(s.alignDelimiters!==!1){const N=r(y);v[b]=N,(d[b]===void 0||N>d[b])&&(d[b]=N)}w.push(y)}l[h]=w,c[h]=v}let m=-1;if(typeof a=="object"&&"length"in a)for(;++m<u;)o[m]=nf(a[m]);else{const w=nf(a);for(;++m<u;)o[m]=w}m=-1;const f=[],p=[];for(;++m<u;){const w=o[m];let v="",b="";w===99?(v=":",b=":"):w===108?v=":":w===114&&(b=":");let y=s.alignDelimiters===!1?1:Math.max(1,d[m]-v.length-b.length);const N=v+"-".repeat(y)+b;s.alignDelimiters!==!1&&(y=v.length+y+b.length,y>d[m]&&(d[m]=y),p[m]=y),f[m]=N}l.splice(1,0,f),c.splice(1,0,p),h=-1;const g=[];for(;++h<l.length;){const w=l[h],v=c[h];m=-1;const b=[];for(;++m<u;){const y=w[m]||"";let N="",S="";if(s.alignDelimiters!==!1){const C=d[m]-(v[m]||0),x=o[m];x===114?N=" ".repeat(C):x===99?C%2?(N=" ".repeat(C/2+.5),S=" ".repeat(C/2-.5)):(N=" ".repeat(C/2),S=N):S=" ".repeat(C)}s.delimiterStart!==!1&&!m&&b.push("|"),s.padding!==!1&&!(s.alignDelimiters===!1&&y==="")&&(s.delimiterStart!==!1||m)&&b.push(" "),s.alignDelimiters!==!1&&b.push(N),b.push(y),s.alignDelimiters!==!1&&b.push(S),s.padding!==!1&&b.push(" "),(s.delimiterEnd!==!1||m!==u-1)&&b.push("|")}g.push(s.delimiterEnd===!1?b.join("").replace(/ +$/,""):b.join(""))}return g.join(`
668
+ `)}function iT(e){return e==null?"":String(e)}function nf(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 aT(e,n,s,a){const r=s.enter("blockquote"),o=s.createTracker(a);o.move("> "),o.shift(2);const l=s.indentLines(s.containerFlow(e,o.current()),rT);return r(),l}function rT(e,n,s){return">"+(s?"":" ")+e}function oT(e,n){return sf(e,n.inConstruct,!0)&&!sf(e,n.notInConstruct,!1)}function sf(e,n,s){if(typeof n=="string"&&(n=[n]),!n||n.length===0)return s;let a=-1;for(;++a<n.length;)if(e.includes(n[a]))return!0;return!1}function af(e,n,s,a){let r=-1;for(;++r<s.unsafe.length;)if(s.unsafe[r].character===`
669
+ `&&oT(s.stack,s.unsafe[r]))return/[ \t]/.test(a.before)?"":" ";return`\\
670
+ `}function lT(e,n){const s=String(e);let a=s.indexOf(n),r=a,o=0,l=0;if(typeof n!="string")throw new TypeError("Expected substring");for(;a!==-1;)a===r?++o>l&&(l=o):o=1,r=a+n.length,a=s.indexOf(n,r);return l}function cT(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 dT(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 uT(e,n,s,a){const r=dT(s),o=e.value||"",l=r==="`"?"GraveAccent":"Tilde";if(cT(e,s)){const m=s.enter("codeIndented"),f=s.indentLines(o,mT);return m(),f}const c=s.createTracker(a),d=r.repeat(Math.max(lT(o,r)+1,3)),u=s.enter("codeFenced");let h=c.move(d);if(e.lang){const m=s.enter(`codeFencedLang${l}`);h+=c.move(s.safe(e.lang,{before:h,after:" ",encode:["`"],...c.current()})),m()}if(e.lang&&e.meta){const m=s.enter(`codeFencedMeta${l}`);h+=c.move(" "),h+=c.move(s.safe(e.meta,{before:h,after:`
671
+ `,encode:["`"],...c.current()})),m()}return h+=c.move(`
672
+ `),o&&(h+=c.move(o+`
673
+ `)),h+=c.move(d),u(),h}function mT(e,n,s){return(s?"":" ")+e}function Im(e){const n=e.options.quote||'"';if(n!=='"'&&n!=="'")throw new Error("Cannot serialize title with `"+n+"` for `options.quote`, expected `\"`, or `'`");return n}function hT(e,n,s,a){const r=Im(s),o=r==='"'?"Quote":"Apostrophe",l=s.enter("definition");let c=s.enter("label");const d=s.createTracker(a);let u=d.move("[");return u+=d.move(s.safe(s.associationId(e),{before:u,after:"]",...d.current()})),u+=d.move("]: "),c(),!e.url||/[\0- \u007F]/.test(e.url)?(c=s.enter("destinationLiteral"),u+=d.move("<"),u+=d.move(s.safe(e.url,{before:u,after:">",...d.current()})),u+=d.move(">")):(c=s.enter("destinationRaw"),u+=d.move(s.safe(e.url,{before:u,after:e.title?" ":`
674
+ `,...d.current()}))),c(),e.title&&(c=s.enter(`title${o}`),u+=d.move(" "+r),u+=d.move(s.safe(e.title,{before:u,after:r,...d.current()})),u+=d.move(r),c()),l(),u}function pT(e){const n=e.options.emphasis||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize emphasis with `"+n+"` for `options.emphasis`, expected `*`, or `_`");return n}function Ko(e){return"&#x"+e.toString(16).toUpperCase()+";"}function uc(e,n,s){const a=Or(e),r=Or(n);return a===void 0?r===void 0?s==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:a===1?r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:r===void 0?{inside:!1,outside:!1}:r===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}xv.peek=fT;function xv(e,n,s,a){const r=pT(s),o=s.enter("emphasis"),l=s.createTracker(a),c=l.move(r);let d=l.move(s.containerPhrasing(e,{after:r,before:c,...l.current()}));const u=d.charCodeAt(0),h=uc(a.before.charCodeAt(a.before.length-1),u,r);h.inside&&(d=Ko(u)+d.slice(1));const m=d.charCodeAt(d.length-1),f=uc(a.after.charCodeAt(0),m,r);f.inside&&(d=d.slice(0,-1)+Ko(m));const p=l.move(r);return o(),s.attentionEncodeSurroundingInfo={after:f.outside,before:h.outside},c+d+p}function fT(e,n,s){return s.options.emphasis||"*"}function gT(e,n){let s=!1;return Am(e,function(a){if("value"in a&&/\r?\n|\r/.test(a.value)||a.type==="break")return s=!0,$u}),!!((!e.depth||e.depth<3)&&jm(e)&&(n.options.setext||s))}function bT(e,n,s,a){const r=Math.max(Math.min(6,e.depth||1),1),o=s.createTracker(a);if(gT(e,s)){const h=s.enter("headingSetext"),m=s.enter("phrasing"),f=s.containerPhrasing(e,{...o.current(),before:`
675
+ `,after:`
676
+ `});return m(),h(),f+`
677
+ `+(r===1?"=":"-").repeat(f.length-(Math.max(f.lastIndexOf("\r"),f.lastIndexOf(`
678
+ `))+1))}const l="#".repeat(r),c=s.enter("headingAtx"),d=s.enter("phrasing");o.move(l+" ");let u=s.containerPhrasing(e,{before:"# ",after:`
679
+ `,...o.current()});return/^[\t ]/.test(u)&&(u=Ko(u.charCodeAt(0))+u.slice(1)),u=u?l+" "+u:l,s.options.closeAtx&&(u+=" "+l),d(),c(),u}vv.peek=xT;function vv(e){return e.value||""}function xT(){return"<"}yv.peek=vT;function yv(e,n,s,a){const r=Im(s),o=r==='"'?"Quote":"Apostrophe",l=s.enter("image");let c=s.enter("label");const d=s.createTracker(a);let u=d.move("![");return u+=d.move(s.safe(e.alt,{before:u,after:"]",...d.current()})),u+=d.move("]("),c(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(c=s.enter("destinationLiteral"),u+=d.move("<"),u+=d.move(s.safe(e.url,{before:u,after:">",...d.current()})),u+=d.move(">")):(c=s.enter("destinationRaw"),u+=d.move(s.safe(e.url,{before:u,after:e.title?" ":")",...d.current()}))),c(),e.title&&(c=s.enter(`title${o}`),u+=d.move(" "+r),u+=d.move(s.safe(e.title,{before:u,after:r,...d.current()})),u+=d.move(r),c()),u+=d.move(")"),l(),u}function vT(){return"!"}wv.peek=yT;function wv(e,n,s,a){const r=e.referenceType,o=s.enter("imageReference");let l=s.enter("label");const c=s.createTracker(a);let d=c.move("![");const u=s.safe(e.alt,{before:d,after:"]",...c.current()});d+=c.move(u+"]["),l();const h=s.stack;s.stack=[],l=s.enter("reference");const m=s.safe(s.associationId(e),{before:d,after:"]",...c.current()});return l(),s.stack=h,o(),r==="full"||!u||u!==m?d+=c.move(m+"]"):r==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function yT(){return"!"}kv.peek=wT;function kv(e,n,s){let a=e.value||"",r="`",o=-1;for(;new RegExp("(^|[^`])"+r+"([^`]|$)").test(a);)r+="`";for(/[^ \r\n]/.test(a)&&(/^[ \r\n]/.test(a)&&/[ \r\n]$/.test(a)||/^`|`$/.test(a))&&(a=" "+a+" ");++o<s.unsafe.length;){const l=s.unsafe[o],c=s.compilePattern(l);let d;if(l.atBreak)for(;d=c.exec(a);){let u=d.index;a.charCodeAt(u)===10&&a.charCodeAt(u-1)===13&&u--,a=a.slice(0,u)+" "+a.slice(d.index+1)}}return r+a+r}function wT(){return"`"}function jv(e,n){const s=jm(e);return!!(!n.options.resourceLink&&e.url&&!e.title&&e.children&&e.children.length===1&&e.children[0].type==="text"&&(s===e.url||"mailto:"+s===e.url)&&/^[a-z][a-z+.-]+:/i.test(e.url)&&!/[\0- <>\u007F]/.test(e.url))}Nv.peek=kT;function Nv(e,n,s,a){const r=Im(s),o=r==='"'?"Quote":"Apostrophe",l=s.createTracker(a);let c,d;if(jv(e,s)){const h=s.stack;s.stack=[],c=s.enter("autolink");let m=l.move("<");return m+=l.move(s.containerPhrasing(e,{before:m,after:">",...l.current()})),m+=l.move(">"),c(),s.stack=h,m}c=s.enter("link"),d=s.enter("label");let u=l.move("[");return u+=l.move(s.containerPhrasing(e,{before:u,after:"](",...l.current()})),u+=l.move("]("),d(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(d=s.enter("destinationLiteral"),u+=l.move("<"),u+=l.move(s.safe(e.url,{before:u,after:">",...l.current()})),u+=l.move(">")):(d=s.enter("destinationRaw"),u+=l.move(s.safe(e.url,{before:u,after:e.title?" ":")",...l.current()}))),d(),e.title&&(d=s.enter(`title${o}`),u+=l.move(" "+r),u+=l.move(s.safe(e.title,{before:u,after:r,...l.current()})),u+=l.move(r),d()),u+=l.move(")"),c(),u}function kT(e,n,s){return jv(e,s)?"<":"["}Sv.peek=jT;function Sv(e,n,s,a){const r=e.referenceType,o=s.enter("linkReference");let l=s.enter("label");const c=s.createTracker(a);let d=c.move("[");const u=s.containerPhrasing(e,{before:d,after:"]",...c.current()});d+=c.move(u+"]["),l();const h=s.stack;s.stack=[],l=s.enter("reference");const m=s.safe(s.associationId(e),{before:d,after:"]",...c.current()});return l(),s.stack=h,o(),r==="full"||!u||u!==m?d+=c.move(m+"]"):r==="shortcut"?d=d.slice(0,-1):d+=c.move("]"),d}function jT(){return"["}function Tm(e){const n=e.options.bullet||"*";if(n!=="*"&&n!=="+"&&n!=="-")throw new Error("Cannot serialize items with `"+n+"` for `options.bullet`, expected `*`, `+`, or `-`");return n}function NT(e){const n=Tm(e),s=e.options.bulletOther;if(!s)return n==="*"?"-":"*";if(s!=="*"&&s!=="+"&&s!=="-")throw new Error("Cannot serialize items with `"+s+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(s===n)throw new Error("Expected `bullet` (`"+n+"`) and `bulletOther` (`"+s+"`) to be different");return s}function ST(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 Cv(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 CT(e,n,s,a){const r=s.enter("list"),o=s.bulletCurrent;let l=e.ordered?ST(s):Tm(s);const c=e.ordered?l==="."?")":".":NT(s);let d=n&&s.bulletLastUsed?l===s.bulletLastUsed:!1;if(!e.ordered){const h=e.children?e.children[0]:void 0;if((l==="*"||l==="-")&&h&&(!h.children||!h.children[0])&&s.stack[s.stack.length-1]==="list"&&s.stack[s.stack.length-2]==="listItem"&&s.stack[s.stack.length-3]==="list"&&s.stack[s.stack.length-4]==="listItem"&&s.indexStack[s.indexStack.length-1]===0&&s.indexStack[s.indexStack.length-2]===0&&s.indexStack[s.indexStack.length-3]===0&&(d=!0),Cv(s)===l&&h){let m=-1;for(;++m<e.children.length;){const f=e.children[m];if(f&&f.type==="listItem"&&f.children&&f.children[0]&&f.children[0].type==="thematicBreak"){d=!0;break}}}}d&&(l=c),s.bulletCurrent=l;const u=s.containerFlow(e,a);return s.bulletLastUsed=l,s.bulletCurrent=o,r(),u}function ET(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 _T(e,n,s,a){const r=ET(s);let o=s.bulletCurrent||Tm(s);n&&n.type==="list"&&n.ordered&&(o=(typeof n.start=="number"&&n.start>-1?n.start:1)+(s.options.incrementListMarker===!1?0:n.children.indexOf(e))+o);let l=o.length+1;(r==="tab"||r==="mixed"&&(n&&n.type==="list"&&n.spread||e.spread))&&(l=Math.ceil(l/4)*4);const c=s.createTracker(a);c.move(o+" ".repeat(l-o.length)),c.shift(l);const d=s.enter("listItem"),u=s.indentLines(s.containerFlow(e,c.current()),h);return d(),u;function h(m,f,p){return f?(p?"":" ".repeat(l))+m:(p?o:o+" ".repeat(l-o.length))+m}}function MT(e,n,s,a){const r=s.enter("paragraph"),o=s.enter("phrasing"),l=s.containerPhrasing(e,a);return o(),r(),l}const AT=Oc(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function RT(e,n,s,a){return(e.children.some(function(l){return AT(l)})?s.containerPhrasing:s.containerFlow).call(s,e,a)}function IT(e){const n=e.options.strong||"*";if(n!=="*"&&n!=="_")throw new Error("Cannot serialize strong with `"+n+"` for `options.strong`, expected `*`, or `_`");return n}Ev.peek=TT;function Ev(e,n,s,a){const r=IT(s),o=s.enter("strong"),l=s.createTracker(a),c=l.move(r+r);let d=l.move(s.containerPhrasing(e,{after:r,before:c,...l.current()}));const u=d.charCodeAt(0),h=uc(a.before.charCodeAt(a.before.length-1),u,r);h.inside&&(d=Ko(u)+d.slice(1));const m=d.charCodeAt(d.length-1),f=uc(a.after.charCodeAt(0),m,r);f.inside&&(d=d.slice(0,-1)+Ko(m));const p=l.move(r+r);return o(),s.attentionEncodeSurroundingInfo={after:f.outside,before:h.outside},c+d+p}function TT(e,n,s){return s.options.strong||"*"}function PT(e,n,s,a){return s.safe(e.value,a)}function $T(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 DT(e,n,s){const a=(Cv(s)+(s.options.ruleSpaces?" ":"")).repeat($T(s));return s.options.ruleSpaces?a.slice(0,-1):a}const _v={blockquote:aT,break:af,code:uT,definition:hT,emphasis:xv,hardBreak:af,heading:bT,html:vv,image:yv,imageReference:wv,inlineCode:kv,link:Nv,linkReference:Sv,list:CT,listItem:_T,paragraph:MT,root:RT,strong:Ev,text:PT,thematicBreak:DT};function LT(){return{enter:{table:OT,tableData:rf,tableHeader:rf,tableRow:zT},exit:{codeText:BT,table:FT,tableData:Td,tableHeader:Td,tableRow:Td}}}function OT(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 FT(e){this.exit(e),this.data.inTable=void 0}function zT(e){this.enter({type:"tableRow",children:[]},e)}function Td(e){this.exit(e)}function rf(e){this.enter({type:"tableCell",children:[]},e)}function BT(e){let n=this.resume();this.data.inTable&&(n=n.replace(/\\([\\|])/g,UT));const s=this.stack[this.stack.length-1];s.type,s.value=n,this.exit(e)}function UT(e,n){return n==="|"?n:e}function HT(e){const n=e||{},s=n.tableCellPadding,a=n.tablePipeAlign,r=n.stringLength,o=s?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:`
680
+ `,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:f,table:l,tableCell:d,tableRow:c}};function l(p,g,w,v){return u(h(p,w,v),p.align)}function c(p,g,w,v){const b=m(p,w,v),y=u([b]);return y.slice(0,y.indexOf(`
681
+ `))}function d(p,g,w,v){const b=w.enter("tableCell"),y=w.enter("phrasing"),N=w.containerPhrasing(p,{...v,before:o,after:o});return y(),b(),N}function u(p,g){return sT(p,{align:g,alignDelimiters:a,padding:s,stringLength:r})}function h(p,g,w){const v=p.children;let b=-1;const y=[],N=g.enter("table");for(;++b<v.length;)y[b]=m(v[b],g,w);return N(),y}function m(p,g,w){const v=p.children;let b=-1;const y=[],N=g.enter("tableRow");for(;++b<v.length;)y[b]=d(v[b],p,g,w);return N(),y}function f(p,g,w){let v=_v.inlineCode(p,g,w);return w.stack.includes("tableCell")&&(v=v.replace(/\|/g,"\\$&")),v}}function qT(){return{exit:{taskListCheckValueChecked:of,taskListCheckValueUnchecked:of,paragraph:WT}}}function VT(){return{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:GT}}}function of(e){const n=this.stack[this.stack.length-2];n.type,n.checked=e.type==="taskListCheckValueChecked"}function WT(e){const n=this.stack[this.stack.length-2];if(n&&n.type==="listItem"&&typeof n.checked=="boolean"){const s=this.stack[this.stack.length-1];s.type;const a=s.children[0];if(a&&a.type==="text"){const r=n.children;let o=-1,l;for(;++o<r.length;){const c=r[o];if(c.type==="paragraph"){l=c;break}}l===s&&(a.value=a.value.slice(1),a.value.length===0?s.children.shift():s.position&&a.position&&typeof a.position.start.offset=="number"&&(a.position.start.column++,a.position.start.offset++,s.position.start=Object.assign({},a.position.start)))}}this.exit(e)}function GT(e,n,s,a){const r=e.children[0],o=typeof e.checked=="boolean"&&r&&r.type==="paragraph",l="["+(e.checked?"x":" ")+"] ",c=s.createTracker(a);o&&c.move(l);let d=_v.listItem(e,n,s,{...a,...c.current()});return o&&(d=d.replace(/^(?:[*+-]|\d+\.)([\r\n]| {1,3})/,u)),d;function u(h){return h+l}}function KT(){return[CI(),GI(),QI(),LT(),qT()]}function JT(e){return{extensions:[EI(),KI(e),XI(),HT(e),VT()]}}const YT={tokenize:nP,partial:!0},Mv={tokenize:sP,partial:!0},Av={tokenize:iP,partial:!0},Rv={tokenize:aP,partial:!0},QT={tokenize:rP,partial:!0},Iv={name:"wwwAutolink",tokenize:eP,previous:Pv},Tv={name:"protocolAutolink",tokenize:tP,previous:$v},ra={name:"emailAutolink",tokenize:ZT,previous:Dv},Hi={};function XT(){return{text:Hi}}let za=48;for(;za<123;)Hi[za]=ra,za++,za===58?za=65:za===91&&(za=97);Hi[43]=ra;Hi[45]=ra;Hi[46]=ra;Hi[95]=ra;Hi[72]=[ra,Tv];Hi[104]=[ra,Tv];Hi[87]=[ra,Iv];Hi[119]=[ra,Iv];function ZT(e,n,s){const a=this;let r,o;return l;function l(m){return!Fu(m)||!Dv.call(a,a.previous)||Pm(a.events)?s(m):(e.enter("literalAutolink"),e.enter("literalAutolinkEmail"),c(m))}function c(m){return Fu(m)?(e.consume(m),c):m===64?(e.consume(m),d):s(m)}function d(m){return m===46?e.check(QT,h,u)(m):m===45||m===95||$s(m)?(o=!0,e.consume(m),d):h(m)}function u(m){return e.consume(m),r=!0,d}function h(m){return o&&r&&zs(a.previous)?(e.exit("literalAutolinkEmail"),e.exit("literalAutolink"),n(m)):s(m)}}function eP(e,n,s){const a=this;return r;function r(l){return l!==87&&l!==119||!Pv.call(a,a.previous)||Pm(a.events)?s(l):(e.enter("literalAutolink"),e.enter("literalAutolinkWww"),e.check(YT,e.attempt(Mv,e.attempt(Av,o),s),s)(l))}function o(l){return e.exit("literalAutolinkWww"),e.exit("literalAutolink"),n(l)}}function tP(e,n,s){const a=this;let r="",o=!1;return l;function l(m){return(m===72||m===104)&&$v.call(a,a.previous)&&!Pm(a.events)?(e.enter("literalAutolink"),e.enter("literalAutolinkHttp"),r+=String.fromCodePoint(m),e.consume(m),c):s(m)}function c(m){if(zs(m)&&r.length<5)return r+=String.fromCodePoint(m),e.consume(m),c;if(m===58){const f=r.toLowerCase();if(f==="http"||f==="https")return e.consume(m),d}return s(m)}function d(m){return m===47?(e.consume(m),o?u:(o=!0,d)):s(m)}function u(m){return m===null||lc(m)||Jn(m)||Qa(m)||$c(m)?s(m):e.attempt(Mv,e.attempt(Av,h),s)(m)}function h(m){return e.exit("literalAutolinkHttp"),e.exit("literalAutolink"),n(m)}}function nP(e,n,s){let a=0;return r;function r(l){return(l===87||l===119)&&a<3?(a++,e.consume(l),r):l===46&&a===3?(e.consume(l),o):s(l)}function o(l){return l===null?s(l):n(l)}}function sP(e,n,s){let a,r,o;return l;function l(u){return u===46||u===95?e.check(Rv,d,c)(u):u===null||Jn(u)||Qa(u)||u!==45&&$c(u)?d(u):(o=!0,e.consume(u),l)}function c(u){return u===95?a=!0:(r=a,a=void 0),e.consume(u),l}function d(u){return r||a||!o?s(u):n(u)}}function iP(e,n){let s=0,a=0;return r;function r(l){return l===40?(s++,e.consume(l),r):l===41&&a<s?o(l):l===33||l===34||l===38||l===39||l===41||l===42||l===44||l===46||l===58||l===59||l===60||l===63||l===93||l===95||l===126?e.check(Rv,n,o)(l):l===null||Jn(l)||Qa(l)?n(l):(e.consume(l),r)}function o(l){return l===41&&a++,e.consume(l),r}}function aP(e,n,s){return a;function a(c){return c===33||c===34||c===39||c===41||c===42||c===44||c===46||c===58||c===59||c===63||c===95||c===126?(e.consume(c),a):c===38?(e.consume(c),o):c===93?(e.consume(c),r):c===60||c===null||Jn(c)||Qa(c)?n(c):s(c)}function r(c){return c===null||c===40||c===91||Jn(c)||Qa(c)?n(c):a(c)}function o(c){return zs(c)?l(c):s(c)}function l(c){return c===59?(e.consume(c),a):zs(c)?(e.consume(c),l):s(c)}}function rP(e,n,s){return a;function a(o){return e.consume(o),r}function r(o){return $s(o)?s(o):n(o)}}function Pv(e){return e===null||e===40||e===42||e===95||e===91||e===93||e===126||Jn(e)}function $v(e){return!zs(e)}function Dv(e){return!(e===47||Fu(e))}function Fu(e){return e===43||e===45||e===46||e===95||$s(e)}function Pm(e){let n=e.length,s=!1;for(;n--;){const a=e[n][1];if((a.type==="labelLink"||a.type==="labelImage")&&!a._balanced){s=!0;break}if(a._gfmAutolinkLiteralWalkedInto){s=!1;break}}return e.length>0&&!s&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),s}const oP={tokenize:fP,partial:!0};function lP(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:mP,continuation:{tokenize:hP},exit:pP}},text:{91:{name:"gfmFootnoteCall",tokenize:uP},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:cP,resolveTo:dP}}}}function cP(e,n,s){const a=this;let r=a.events.length;const o=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let l;for(;r--;){const d=a.events[r][1];if(d.type==="labelImage"){l=d;break}if(d.type==="gfmFootnoteCall"||d.type==="labelLink"||d.type==="label"||d.type==="image"||d.type==="link")break}return c;function c(d){if(!l||!l._balanced)return s(d);const u=Si(a.sliceSerialize({start:l.end,end:a.now()}));return u.codePointAt(0)!==94||!o.includes(u.slice(1))?s(d):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(d),e.exit("gfmFootnoteCallLabelMarker"),n(d))}}function dP(e,n){let s=e.length;for(;s--;)if(e[s][1].type==="labelImage"&&e[s][0]==="enter"){e[s][1];break}e[s+1][1].type="data",e[s+3][1].type="gfmFootnoteCallLabelMarker";const a={type:"gfmFootnoteCall",start:Object.assign({},e[s+3][1].start),end:Object.assign({},e[e.length-1][1].end)},r={type:"gfmFootnoteCallMarker",start:Object.assign({},e[s+3][1].end),end:Object.assign({},e[s+3][1].end)};r.end.column++,r.end.offset++,r.end._bufferIndex++;const o={type:"gfmFootnoteCallString",start:Object.assign({},r.end),end:Object.assign({},e[e.length-1][1].start)},l={type:"chunkString",contentType:"string",start:Object.assign({},o.start),end:Object.assign({},o.end)},c=[e[s+1],e[s+2],["enter",a,n],e[s+3],e[s+4],["enter",r,n],["exit",r,n],["enter",o,n],["enter",l,n],["exit",l,n],["exit",o,n],e[e.length-2],e[e.length-1],["exit",a,n]];return e.splice(s,e.length-s+1,...c),e}function uP(e,n,s){const a=this,r=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o=0,l;return c;function c(m){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),d}function d(m){return m!==94?s(m):(e.enter("gfmFootnoteCallMarker"),e.consume(m),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",u)}function u(m){if(o>999||m===93&&!l||m===null||m===91||Jn(m))return s(m);if(m===93){e.exit("chunkString");const f=e.exit("gfmFootnoteCallString");return r.includes(Si(a.sliceSerialize(f)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(m),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),n):s(m)}return Jn(m)||(l=!0),o++,e.consume(m),m===92?h:u}function h(m){return m===91||m===92||m===93?(e.consume(m),o++,u):u(m)}}function mP(e,n,s){const a=this,r=a.parser.gfmFootnotes||(a.parser.gfmFootnotes=[]);let o,l=0,c;return d;function d(g){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),u}function u(g){return g===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",h):s(g)}function h(g){if(l>999||g===93&&!c||g===null||g===91||Jn(g))return s(g);if(g===93){e.exit("chunkString");const w=e.exit("gfmFootnoteDefinitionLabelString");return o=Si(a.sliceSerialize(w)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(g),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return Jn(g)||(c=!0),l++,e.consume(g),g===92?m:h}function m(g){return g===91||g===92||g===93?(e.consume(g),l++,h):h(g)}function f(g){return g===58?(e.enter("definitionMarker"),e.consume(g),e.exit("definitionMarker"),r.includes(o)||r.push(o),$n(e,p,"gfmFootnoteDefinitionWhitespace")):s(g)}function p(g){return n(g)}}function hP(e,n,s){return e.check(cl,n,e.attempt(oP,n,s))}function pP(e){e.exit("gfmFootnoteDefinition")}function fP(e,n,s){const a=this;return $n(e,r,"gfmFootnoteDefinitionIndent",5);function r(o){const l=a.events[a.events.length-1];return l&&l[1].type==="gfmFootnoteDefinitionIndent"&&l[2].sliceSerialize(l[1],!0).length===4?n(o):s(o)}}function gP(e){let s=(e||{}).singleTilde;const a={name:"strikethrough",tokenize:o,resolveAll:r};return s==null&&(s=!0),{text:{126:a},insideSpan:{null:[a]},attentionMarkers:{null:[126]}};function r(l,c){let d=-1;for(;++d<l.length;)if(l[d][0]==="enter"&&l[d][1].type==="strikethroughSequenceTemporary"&&l[d][1]._close){let u=d;for(;u--;)if(l[u][0]==="exit"&&l[u][1].type==="strikethroughSequenceTemporary"&&l[u][1]._open&&l[d][1].end.offset-l[d][1].start.offset===l[u][1].end.offset-l[u][1].start.offset){l[d][1].type="strikethroughSequence",l[u][1].type="strikethroughSequence";const h={type:"strikethrough",start:Object.assign({},l[u][1].start),end:Object.assign({},l[d][1].end)},m={type:"strikethroughText",start:Object.assign({},l[u][1].end),end:Object.assign({},l[d][1].start)},f=[["enter",h,c],["enter",l[u][1],c],["exit",l[u][1],c],["enter",m,c]],p=c.parser.constructs.insideSpan.null;p&&Zs(f,f.length,0,Dc(p,l.slice(u+1,d),c)),Zs(f,f.length,0,[["exit",m,c],["enter",l[d][1],c],["exit",l[d][1],c],["exit",h,c]]),Zs(l,u-1,d-u+3,f),d=u+f.length-2;break}}for(d=-1;++d<l.length;)l[d][1].type==="strikethroughSequenceTemporary"&&(l[d][1].type="data");return l}function o(l,c,d){const u=this.previous,h=this.events;let m=0;return f;function f(g){return u===126&&h[h.length-1][1].type!=="characterEscape"?d(g):(l.enter("strikethroughSequenceTemporary"),p(g))}function p(g){const w=Or(u);if(g===126)return m>1?d(g):(l.consume(g),m++,p);if(m<2&&!s)return d(g);const v=l.exit("strikethroughSequenceTemporary"),b=Or(g);return v._open=!b||b===2&&!!w,v._close=!w||w===2&&!!b,c(g)}}}class bP{constructor(){this.map=[]}add(n,s,a){xP(this,n,s,a)}consume(n){if(this.map.sort(function(o,l){return o[0]-l[0]}),this.map.length===0)return;let s=this.map.length;const a=[];for(;s>0;)s-=1,a.push(n.slice(this.map[s][0]+this.map[s][1]),this.map[s][2]),n.length=this.map[s][0];a.push(n.slice()),n.length=0;let r=a.pop();for(;r;){for(const o of r)n.push(o);r=a.pop()}this.map.length=0}}function xP(e,n,s,a){let r=0;if(!(s===0&&a.length===0)){for(;r<e.map.length;){if(e.map[r][0]===n){e.map[r][1]+=s,e.map[r][2].push(...a);return}r+=1}e.map.push([n,s,a])}}function vP(e,n){let s=!1;const a=[];for(;n<e.length;){const r=e[n];if(s){if(r[0]==="enter")r[1].type==="tableContent"&&a.push(e[n+1][1].type==="tableDelimiterMarker"?"left":"none");else if(r[1].type==="tableContent"){if(e[n-1][1].type==="tableDelimiterMarker"){const o=a.length-1;a[o]=a[o]==="left"?"center":"right"}}else if(r[1].type==="tableDelimiterRow")break}else r[0]==="enter"&&r[1].type==="tableDelimiterRow"&&(s=!0);n+=1}return a}function yP(){return{flow:{null:{name:"table",tokenize:wP,resolveAll:kP}}}}function wP(e,n,s){const a=this;let r=0,o=0,l;return c;function c(_){let A=a.events.length-1;for(;A>-1;){const M=a.events[A][1].type;if(M==="lineEnding"||M==="linePrefix")A--;else break}const Q=A>-1?a.events[A][1].type:null,H=Q==="tableHead"||Q==="tableRow"?x:d;return H===x&&a.parser.lazy[a.now().line]?s(_):H(_)}function d(_){return e.enter("tableHead"),e.enter("tableRow"),u(_)}function u(_){return _===124||(l=!0,o+=1),h(_)}function h(_){return _===null?s(_):sn(_)?o>1?(o=0,a.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(_),e.exit("lineEnding"),p):s(_):In(_)?$n(e,h,"whitespace")(_):(o+=1,l&&(l=!1,r+=1),_===124?(e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),l=!0,h):(e.enter("data"),m(_)))}function m(_){return _===null||_===124||Jn(_)?(e.exit("data"),h(_)):(e.consume(_),_===92?f:m)}function f(_){return _===92||_===124?(e.consume(_),m):m(_)}function p(_){return a.interrupt=!1,a.parser.lazy[a.now().line]?s(_):(e.enter("tableDelimiterRow"),l=!1,In(_)?$n(e,g,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(_):g(_))}function g(_){return _===45||_===58?v(_):_===124?(l=!0,e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),w):C(_)}function w(_){return In(_)?$n(e,v,"whitespace")(_):v(_)}function v(_){return _===58?(o+=1,l=!0,e.enter("tableDelimiterMarker"),e.consume(_),e.exit("tableDelimiterMarker"),b):_===45?(o+=1,b(_)):_===null||sn(_)?S(_):C(_)}function b(_){return _===45?(e.enter("tableDelimiterFiller"),y(_)):C(_)}function y(_){return _===45?(e.consume(_),y):_===58?(l=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(_),e.exit("tableDelimiterMarker"),N):(e.exit("tableDelimiterFiller"),N(_))}function N(_){return In(_)?$n(e,S,"whitespace")(_):S(_)}function S(_){return _===124?g(_):_===null||sn(_)?!l||r!==o?C(_):(e.exit("tableDelimiterRow"),e.exit("tableHead"),n(_)):C(_)}function C(_){return s(_)}function x(_){return e.enter("tableRow"),k(_)}function k(_){return _===124?(e.enter("tableCellDivider"),e.consume(_),e.exit("tableCellDivider"),k):_===null||sn(_)?(e.exit("tableRow"),n(_)):In(_)?$n(e,k,"whitespace")(_):(e.enter("data"),R(_))}function R(_){return _===null||_===124||Jn(_)?(e.exit("data"),k(_)):(e.consume(_),_===92?z:R)}function z(_){return _===92||_===124?(e.consume(_),R):R(_)}}function kP(e,n){let s=-1,a=!0,r=0,o=[0,0,0,0],l=[0,0,0,0],c=!1,d=0,u,h,m;const f=new bP;for(;++s<e.length;){const p=e[s],g=p[1];p[0]==="enter"?g.type==="tableHead"?(c=!1,d!==0&&(lf(f,n,d,u,h),h=void 0,d=0),u={type:"table",start:Object.assign({},g.start),end:Object.assign({},g.end)},f.add(s,0,[["enter",u,n]])):g.type==="tableRow"||g.type==="tableDelimiterRow"?(a=!0,m=void 0,o=[0,0,0,0],l=[0,s+1,0,0],c&&(c=!1,h={type:"tableBody",start:Object.assign({},g.start),end:Object.assign({},g.end)},f.add(s,0,[["enter",h,n]])),r=g.type==="tableDelimiterRow"?2:h?3:1):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")?(a=!1,l[2]===0&&(o[1]!==0&&(l[0]=l[1],m=Sl(f,n,o,r,void 0,m),o=[0,0,0,0]),l[2]=s)):g.type==="tableCellDivider"&&(a?a=!1:(o[1]!==0&&(l[0]=l[1],m=Sl(f,n,o,r,void 0,m)),o=l,l=[o[1],s,0,0])):g.type==="tableHead"?(c=!0,d=s):g.type==="tableRow"||g.type==="tableDelimiterRow"?(d=s,o[1]!==0?(l[0]=l[1],m=Sl(f,n,o,r,s,m)):l[1]!==0&&(m=Sl(f,n,l,r,s,m)),r=0):r&&(g.type==="data"||g.type==="tableDelimiterMarker"||g.type==="tableDelimiterFiller")&&(l[3]=s)}for(d!==0&&lf(f,n,d,u,h),f.consume(n.events),s=-1;++s<n.events.length;){const p=n.events[s];p[0]==="enter"&&p[1].type==="table"&&(p[1]._align=vP(n.events,s))}return e}function Sl(e,n,s,a,r,o){const l=a===1?"tableHeader":a===2?"tableDelimiter":"tableData",c="tableContent";s[0]!==0&&(o.end=Object.assign({},Cr(n.events,s[0])),e.add(s[0],0,[["exit",o,n]]));const d=Cr(n.events,s[1]);if(o={type:l,start:Object.assign({},d),end:Object.assign({},d)},e.add(s[1],0,[["enter",o,n]]),s[2]!==0){const u=Cr(n.events,s[2]),h=Cr(n.events,s[3]),m={type:c,start:Object.assign({},u),end:Object.assign({},h)};if(e.add(s[2],0,[["enter",m,n]]),a!==2){const f=n.events[s[2]],p=n.events[s[3]];if(f[1].end=Object.assign({},p[1].end),f[1].type="chunkText",f[1].contentType="text",s[3]>s[2]+1){const g=s[2]+1,w=s[3]-s[2]-1;e.add(g,w,[])}}e.add(s[3]+1,0,[["exit",m,n]])}return r!==void 0&&(o.end=Object.assign({},Cr(n.events,r)),e.add(r,0,[["exit",o,n]]),o=void 0),o}function lf(e,n,s,a,r){const o=[],l=Cr(n.events,s);r&&(r.end=Object.assign({},l),o.push(["exit",r,n])),a.end=Object.assign({},l),o.push(["exit",a,n]),e.add(s+1,0,o)}function Cr(e,n){const s=e[n],a=s[0]==="enter"?"start":"end";return s[1][a]}const jP={name:"tasklistCheck",tokenize:SP};function NP(){return{text:{91:jP}}}function SP(e,n,s){const a=this;return r;function r(d){return a.previous!==null||!a._gfmTasklistFirstContentOfListItem?s(d):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),o)}function o(d){return Jn(d)?(e.enter("taskListCheckValueUnchecked"),e.consume(d),e.exit("taskListCheckValueUnchecked"),l):d===88||d===120?(e.enter("taskListCheckValueChecked"),e.consume(d),e.exit("taskListCheckValueChecked"),l):s(d)}function l(d){return d===93?(e.enter("taskListCheckMarker"),e.consume(d),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),c):s(d)}function c(d){return sn(d)?n(d):In(d)?e.check({tokenize:CP},n,s)(d):s(d)}}function CP(e,n,s){return $n(e,a,"whitespace");function a(r){return r===null?s(r):n(r)}}function EP(e){return Gx([XT(),lP(),gP(e),yP(),NP()])}const _P={};function ti(e){const n=this,s=e||_P,a=n.data(),r=a.micromarkExtensions||(a.micromarkExtensions=[]),o=a.fromMarkdownExtensions||(a.fromMarkdownExtensions=[]),l=a.toMarkdownExtensions||(a.toMarkdownExtensions=[]);r.push(EP(s)),o.push(KT()),l.push(JT(s))}const MP=45e3,AP=3e3,RP=2e3,IP=1500,cf="fusion:sse-client-id";let vr=null;const ya=new Map;function df(){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 Lv(){if(!(typeof window>"u")){if(vr)return vr;try{const e=window.sessionStorage.getItem(cf);if(e)return vr=e,e;const n=df();return window.sessionStorage.setItem(cf,n),vr=n,n}catch{return vr=df(),vr}}}function Ov(e){if(!(typeof window>"u"))try{return{parsed:new URL(e,window.location.origin),preserveRelativePath:e.startsWith("/")}}catch{return}}function Fv(e){return e.origin===window.location.origin&&e.pathname==="/api/events"}function TP(e){const n=Lv();if(!n)return e;const s=Ov(e);return!s||!Fv(s.parsed)?e:(s.parsed.searchParams.set("clientId",n),s.preserveRelativePath?`${s.parsed.pathname}${s.parsed.search}${s.parsed.hash}`:s.parsed.toString())}function $m(e,n){const s=Lv();if(!s)return;const a=Ov(e);if(!a||!Fv(a.parsed))return;const r=new URL(`/api/events/${n}`,window.location.origin);r.searchParams.set("clientId",s);const o=a.parsed.searchParams.get("projectId");return o&&r.searchParams.set("projectId",o),Ci(`${r.pathname}${r.search}${r.hash}`)}function PP(e){if(typeof window>"u")return;const n=$m(e.url,"disconnect");if(!n)return;const s=window.navigator?.sendBeacon?.bind(window.navigator);s&&s(n)||typeof window.fetch=="function"&&window.fetch(n,{method:"POST",keepalive:!0}).catch(()=>{})}function zc(e){e.keepaliveTimer&&(clearInterval(e.keepaliveTimer),e.keepaliveTimer=null)}function uf(e){if(typeof window>"u"||typeof window.fetch!="function")return;const n=$m(e.url,"keepalive");if(!n)return;const s=typeof AbortController<"u"?new AbortController:null,a=s?window.setTimeout(()=>s.abort(),IP):null;window.fetch(n,{method:"POST",cache:"no-store",signal:s?.signal}).catch(()=>{}).finally(()=>{a!==null&&window.clearTimeout(a)})}function $P(e){zc(e),$m(e.url,"keepalive")&&(uf(e),e.keepaliveTimer=window.setInterval(()=>{uf(e)},RP))}if(typeof window<"u"){const e=()=>{for(const s of Array.from(ya.values()))if(!s.closed){if(zc(s),PP(s),s.es){try{s.es.close()}catch{}s.es=null}s.closed=!0}},n=s=>{if(s.persisted)for(const a of Array.from(ya.values()))a.subscribers.size!==0&&(a.closed=!1,Dm(a))};window.addEventListener("pagehide",e),window.addEventListener("beforeunload",e),window.addEventListener("pageshow",n)}function Ro(e){e.heartbeatTimer&&clearTimeout(e.heartbeatTimer),e.heartbeatTimer=setTimeout(()=>{zv(e)},MP)}function zv(e){if(e.heartbeatTimer&&(clearTimeout(e.heartbeatTimer),e.heartbeatTimer=null),e.es&&(e.es.close(),e.es=null),zc(e),e.nativeListeners.clear(),e.closed||e.subscribers.size===0||e.reconnectTimer)return;const n=ya.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=ya.get(e.url);s&&s===e&&e.subscribers.size>0&&Dm(e)},AP)}}function Dm(e){if(e.es||e.closed)return;e.reconnectTimer&&(clearTimeout(e.reconnectTimer),e.reconnectTimer=null);const n=new EventSource(Ci(TP(e.url)));e.es=n,$P(e),n.addEventListener("open",()=>{Ro(e);const s=e.hasOpenedOnce;e.hasOpenedOnce=!0;for(const a of e.subscribers)a.onOpen?.(),s&&a.onReconnect?.()}),n.addEventListener("error",s=>{for(const a of e.subscribers)a.onError?.(s);zv(e)}),n.addEventListener("message",()=>Ro(e)),n.addEventListener("heartbeat",()=>Ro(e)),Bv(e),Ro(e)}function Bv(e){if(!e.es)return;const n=new Set;for(const s of e.subscribers)for(const a of s.events.keys())n.add(a);for(const s of n){if(e.nativeListeners.has(s))continue;const a=r=>{Ro(e);const o=r;for(const l of e.subscribers){const c=l.events.get(s);if(c)for(const d of c)d(o)}};e.nativeListeners.set(s,a),e.es.addEventListener(s,a)}}function DP(e){e.closed=!0,e.heartbeatTimer&&clearTimeout(e.heartbeatTimer),zc(e),e.reconnectTimer&&clearTimeout(e.reconnectTimer),e.es&&e.es.close(),e.es=null,e.nativeListeners.clear(),ya.delete(e.url)}function pi(e,n={}){let s=ya.get(e);s||(s={url:e,es:null,subscribers:new Set,nativeListeners:new Map,heartbeatTimer:null,keepaliveTimer:null,reconnectTimer:null,hasOpenedOnce:!1,closed:!1},ya.set(e,s));const a={events:new Map,onOpen:n.onOpen,onReconnect:n.onReconnect,onError:n.onError};if(n.events)for(const[l,c]of Object.entries(n.events)){let d=a.events.get(l);d||(d=new Set,a.events.set(l,d)),d.add(c)}s.subscribers.add(a);const r=!!s.es&&s.hasOpenedOnce;Dm(s),Bv(s),r&&queueMicrotask(()=>{s.subscribers.has(a)&&a.onOpen?.()});let o=!0;return()=>{if(!o)return;o=!1;const l=ya.get(e);l&&(l.subscribers.delete(a),l.subscribers.size===0&&DP(l))}}const mf=100;function Uv(e,n,s){const[a,r]=i.useState([]),[o,l]=i.useState(!1),[c,d]=i.useState(!1),[u,h]=i.useState(null),[m,f]=i.useState(!1),p=i.useRef(null),g=i.useRef(!1),w=i.useRef(0),v=i.useRef(e),b=i.useRef(s),y=i.useRef(n),N=i.useRef(0);(v.current!==e||b.current!==s||y.current!==n)&&(v.current=e,b.current=s,y.current=n,w.current++,g.current=!0,r([]),l(!1),d(!1),h(null),f(!1),p.current&&(p.current(),p.current=null)),i.useEffect(()=>{if(!e||!n){p.current&&(p.current(),p.current=null);return}const k=w.current,R=++N.current;g.current=!1;const z=e,_=s;async function A(){if(!z)return;l(!0),f(!1);try{const H=await mh(z,_,{limit:mf});if(g.current||w.current!==k||N.current!==R)return;r(H.entries),d(H.hasMore),h(H.total)}catch{if(g.current||w.current!==k||N.current!==R)return;r([]),d(!1),h(null)}finally{!g.current&&w.current===k&&N.current===R&&l(!1)}const Q=_?`?projectId=${encodeURIComponent(_)}`:"";p.current=pi(`/api/tasks/${z}/logs/stream${Q}`,{events:{"agent:log":H=>{if(!(g.current||w.current!==k))try{const M=JSON.parse(H.data);r(T=>[...T,M]),h(T=>T!==null?T+1:null)}catch{}}}})}return A(),()=>{g.current=!0,p.current&&(p.current(),p.current=null)}},[e,n,s]);const C=i.useCallback(async()=>{if(!e||m)return;const k=w.current,R=a.length,z=e;f(!0);try{const _=await mh(z,s,{limit:mf,offset:R});if(g.current||w.current!==k)return;r(A=>[..._.entries,...A]),d(_.hasMore),h(_.total)}catch{}finally{f(!1)}},[e,s,a.length,m]),x=i.useCallback(()=>r([]),[]);return{entries:a,loading:o,clear:x,loadMore:C,hasMore:c,total:u,loadingMore:m}}const Hv=i.createContext(null);function LP({openFile:e,children:n}){return t.jsx(Hv.Provider,{value:{openFile:e},children:n})}function OP(){return i.useContext(Hv)}const FP=/(?<![\w@-])((?:[A-Za-z0-9_./@-]+\/)+[A-Za-z0-9_./@-]+\.[A-Za-z0-9]{1,8}(?::\d+(?::\d+)?)?|(?:Dockerfile|Makefile|AGENTS\.md|README\.md|README)(?::\d+(?::\d+)?)?)(?![\w-])/g,zP=["http://","https://","mailto:","git@","ftp://"],BP=new Set(["Dockerfile","Makefile","AGENTS.md","README.md","README"]);function qv(e){const n=/^(.*?)(?::(\d+)(?::(\d+))?)?$/.exec(e);return n?{path:n[1]??e,line:n[2]?Number.parseInt(n[2],10):void 0,col:n[3]?Number.parseInt(n[3],10):void 0}:{path:e}}function UP(e){return/^v?\d+(?:\.\d+)+$/.test(e)}function HP(e){return e.includes("/")||BP.has(e)}function qP(e,n,s){const a=e.slice(Math.max(0,n-16),n).toLowerCase();if(s.startsWith("//")||zP.some(o=>a.endsWith(o)))return!0;const{path:r}=qv(s);return!!(UP(r)||!HP(r))}function VP({path:e,line:n,col:s,children:a}){const r=OP();return r?t.jsx("button",{type:"button",className:"file-path-link",onClick:()=>r.openFile(e,{line:n,col:s}),children:a??e}):t.jsx("span",{children:a??e})}function Ns(e,n){if(!e)return[e];const s=[];let a=0,r=0;for(const o of e.matchAll(FP)){const l=o[0],c=o.index??0,d=c+l.length;if(qP(e,c,l))continue;c>a&&s.push(e.slice(a,c));const{path:u,line:h,col:m}=qv(l);s.push(t.jsx(VP,{path:u,line:h,col:m,children:l},`file-path-${c}-${r}`)),a=d,r+=1}return a===0?[e]:(a<e.length&&s.push(e.slice(a)),s)}function Gs(e){if(typeof e=="string"){const n=Ns(e);return n.length===1?n[0]:t.jsx(t.Fragment,{children:n})}return Array.isArray(e)?wa.Children.map(e,n=>Gs(n)):!i.isValidElement(e)||typeof e.type=="string"&&["button","code","pre"].includes(e.type)||e.props.children===void 0?e:i.cloneElement(e,void 0,wa.Children.map(e.props.children,n=>Gs(n)))}const hf="fn-agent-log-markdown",pf="fn-agent-log-tool-output";function ff(e,n){if(typeof window>"u")return n;try{const s=window.localStorage.getItem(e);return s===null?n:s==="true"}catch{return n}}function gf(e,n){if(!(typeof window>"u"))try{window.localStorage.setItem(e,n?"true":"false")}catch{}}function WP(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(r/60),l=Math.floor(o/24);return r<1?"just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString()}const bf={p:({children:e,...n})=>t.jsx("p",{...n,children:Gs(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Gs(e)}),code:({children:e,...n})=>{const s=typeof e=="string"?e:wa.Children.toArray(e).join(""),a=Ns(s);return a.length===1&&typeof a[0]=="string"?t.jsx("code",{...n,children:e}):t.jsx("code",{...n,children:a})},pre:({children:e,...n})=>t.jsx("pre",{...n,style:{overflowX:"auto",maxWidth:"100%",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:e}),table:({children:e,...n})=>t.jsx("table",{...n,style:{display:"block",overflowX:"auto",maxWidth:"100%"},children:e})},Vv=50,GP={triage:"Plan"};function xf(e){return e.scrollHeight-(e.scrollTop+e.clientHeight)<=Vv}function zu(e){return[e.taskId,e.timestamp,e.agent??"",e.type,e.text,e.detail??""].join("|")}function KP(e){const n=new Map;return e.map(s=>{const a=zu(s),r=n.get(a)??0;return n.set(a,r+1),`${a}|${r}`})}function Wv(e){return e==="tool"||e==="tool_result"||e==="tool_error"}function Pd({detail:e}){const[n,s]=i.useState(!1),a=i.useId(),r=e.split(`
682
+ `).length,o=n?"Hide output":`Show output${r>1?` (${r} lines)`:""}`;return t.jsxs("div",{className:"agent-log-tool-detail-wrapper",children:[t.jsxs("button",{type:"button",className:"agent-log-tool-detail-toggle",onClick:()=>s(l=>!l),"aria-expanded":n,"aria-controls":a,"data-testid":"tool-detail-toggle",children:[n?t.jsx(Cn,{size:14}):t.jsx(Vn,{size:14}),t.jsx("span",{children:o})]}),t.jsx("div",{id:a,className:n?"agent-log-tool-detail-content":"agent-log-tool-detail-content agent-log-tool-detail-content--collapsed","data-testid":"tool-detail-content",children:t.jsx("pre",{className:"agent-log-tool-detail",children:Ns(e)})})]})}function JP(e,n){return e.agent?Wv(e.type)?!0:!n||n.agent!==e.agent||n.type!==e.type:!1}function YP(e,n){const s=[];for(let a=0;a<e.length;a+=1){const{entry:r,hiddenToolBoundaryId:o}=e[a],l=n[a]??`${zu(r)}|fallback`,c=a>0?e[a-1]:void 0,d=c?.entry,u=JP(r,d)||c!==void 0&&c.hiddenToolBoundaryId!==o;if(r.type==="text"||r.type==="thinking"){const h=[r];let m=a+1;for(;m<e.length;){const p=e[m],g=p.entry;if(g.type!==r.type||g.agent!==r.agent||p.hiddenToolBoundaryId!==o)break;h.push(g),m+=1}const f=n[m-1]??`${zu(e[m-1].entry)}|fallback`;s.push({kind:r.type,entries:h,key:`${l}->${f}`,showBadge:u}),a=m-1;continue}s.push({kind:"single",entry:r,key:l,showBadge:u})}return s}function QP({entries:e,loading:n,executorModel:s,validatorModel:a,planningModel:r,hasMore:o=!1,onLoadMore:l,loadingMore:c=!1,totalCount:d=null}){const u=i.useRef(null),h=i.useRef(0),m=i.useRef(0),f=i.useRef(null),p=i.useRef(null),[g,w]=i.useState(()=>ff(hf,!0)),[v,b]=i.useState(()=>ff(pf,!0)),[y,N]=i.useState(!1),[S,C]=i.useState(!1),[x,k]=i.useState(!0);i.useEffect(()=>{gf(hf,g)},[g]),i.useEffect(()=>{gf(pf,v)},[v]);const R=i.useMemo(()=>{if(v)return e.map(P=>({entry:P,hiddenToolBoundaryId:0}));const D=[];let E=0;for(const P of e){if(Wv(P.type)){E+=1;continue}D.push({entry:P,hiddenToolBoundaryId:E})}return D},[e,v]),z=i.useMemo(()=>R.map(D=>D.entry),[R]),_=i.useMemo(()=>KP(z),[z]),A=i.useMemo(()=>YP(R,_),[R,_]);i.useLayoutEffect(()=>{const D=u.current;if(!D)return;const E=e.length,P=h.current,$=m.current||D.scrollHeight,j=_[0]??null,q=_[_.length-1]??null,de=f.current!==j,be=p.current!==q;if(E>P)if(P===0)D.scrollTop=D.scrollHeight;else{const Ce=$-(D.scrollTop+D.clientHeight)<=Vv,Ae=be&&!de,ae=de&&!be;if(Ae&&Ce&&(D.scrollTop=D.scrollHeight),ae){const X=D.scrollHeight-$;X>0&&(D.scrollTop+=X)}}h.current=E,m.current=D.scrollHeight,f.current=j,p.current=q,k(xf(D))},[e,_]);const Q=i.useCallback(()=>{const D=u.current;D&&k(xf(D))},[]),H=i.useCallback(()=>{const D=u.current;D&&(D.scrollTop=D.scrollHeight,k(!0))},[]),M=i.useCallback(D=>{D.key==="Escape"&&y&&N(!1)},[y]);i.useEffect(()=>{if(y)return document.addEventListener("keydown",M),()=>{document.removeEventListener("keydown",M)}},[y,M]);const T=s?.provider&&s?.modelId,F=a?.provider&&a?.modelId,W=r?.provider&&r?.modelId,oe=i.useMemo(()=>{const D=[];return T&&D.push({role:"Executor",provider:s.provider,modelId:s.modelId}),F&&D.push({role:"Reviewer",provider:a.provider,modelId:a.modelId}),W&&D.push({role:"Planning",provider:r.provider,modelId:r.modelId}),D},[T,s,F,a,W,r]);return n&&e.length===0?t.jsx("div",{className:"agent-log-viewer","data-testid":"agent-log-viewer",children:t.jsx("div",{className:"agent-log-loading",children:"Loading agent logs…"})}):e.length===0?t.jsx("div",{className:"agent-log-viewer","data-testid":"agent-log-viewer",children:t.jsx("div",{className:"agent-log-empty",children:"No agent output yet."})}):t.jsxs("div",{className:`agent-log-viewer agent-log-viewer--streaming${y?" agent-log-viewer--fullscreen":""}`,"data-testid":"agent-log-viewer",children:[t.jsxs("div",{className:"agent-log-model-header","data-testid":"agent-log-model-header",children:[t.jsxs("div",{className:"agent-log-model-icons",children:[oe.map(D=>t.jsx(Gn,{provider:D.provider,size:"sm"},`${D.role}-${D.provider}-${D.modelId??"default"}`)),t.jsx("button",{className:"agent-log-model-expand-btn",onClick:()=>C(D=>!D),"aria-label":S?"Collapse model details":"Expand model details","aria-expanded":S,"aria-controls":"agent-log-model-details","data-testid":"agent-log-model-expand",children:S?t.jsx(Cn,{size:14}):t.jsx(Vn,{size:14})})]}),t.jsxs("div",{className:"agent-log-model-header-toggle",children:[t.jsx("button",{className:"agent-log-mode-toggle",onClick:()=>w(D=>!D),"aria-label":g?"Switch to plain text mode":"Switch to markdown mode","aria-pressed":g,"data-testid":"agent-log-mode-toggle",title:g?"Show raw text":"Show formatted markdown",children:g?"Markdown":"Plain"}),t.jsx("button",{className:"agent-log-mode-toggle",onClick:()=>b(D=>!D),"aria-label":v?"Hide tool output":"Show tool output","aria-pressed":v,"data-testid":"agent-log-tool-output-toggle",title:v?"Hide tool calls and results":"Show tool calls and results",children:v?"Tools: On":"Tools: Off"}),t.jsx("button",{className:"agent-log-mode-toggle",onClick:()=>N(D=>!D),"aria-label":y?"Exit full screen":"Expand agent log to full screen","data-testid":"agent-log-fullscreen-toggle",title:y?"Exit full screen":"Expand agent log to full screen",children:y?t.jsx(Zo,{size:14}):t.jsx(_c,{size:14})})]}),S&&t.jsxs("div",{id:"agent-log-model-details",className:"agent-log-model-details",children:[t.jsxs("div",{className:"agent-log-model-group",children:[t.jsx("span",{className:"agent-log-model-label",children:"Executor:"}),T?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Gn,{provider:s.provider,size:"sm"}),t.jsxs("span",{children:[s.provider,"/",s.modelId]})]}):t.jsx("span",{className:"model-badge-default",children:"Using default"})]}),t.jsxs("div",{className:"agent-log-model-group",children:[t.jsx("span",{className:"agent-log-model-label",children:"Reviewer:"}),F?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Gn,{provider:a.provider,size:"sm"}),t.jsxs("span",{children:[a.provider,"/",a.modelId]})]}):t.jsx("span",{className:"model-badge-default",children:"Using default"})]}),t.jsxs("div",{className:"agent-log-model-group",children:[t.jsx("span",{className:"agent-log-model-label",children:"Planning:"}),W?t.jsxs("span",{className:"agent-log-model-value",children:[t.jsx(Gn,{provider:r.provider,size:"sm"}),t.jsxs("span",{children:[r.provider,"/",r.modelId]})]}):t.jsx("span",{className:"model-badge-default",children:"Using default"})]})]})]}),t.jsxs("div",{ref:u,className:"agent-log-viewer-scroll",onScroll:Q,children:[d!==null&&t.jsxs("div",{className:"agent-log-summary","data-testid":"agent-log-summary",children:["Showing ",z.length," of ",d," entries",!v&&e.length!==z.length?` (${e.length-z.length} tool entries hidden)`:""]}),o&&l&&t.jsx("div",{className:"agent-log-load-more","data-testid":"agent-log-load-more",children:t.jsx("button",{className:"agent-log-mode-toggle",onClick:l,disabled:c,"data-testid":"agent-log-load-more-button",children:c?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:14,className:"animate-spin"}),"Loading…"]}):"Load More"})}),A.map(D=>{const E=D.kind==="single"?D.entry:D.entries[0],P=D.showBadge?t.jsx("span",{className:"agent-log-timestamp","data-testid":"agent-log-timestamp",children:WP(E.timestamp)}):null,$=D.showBadge?t.jsxs("span",{className:"agent-log-badge-row",children:[t.jsxs("span",{className:"agent-log-agent-badge",children:["[",GP[E.agent]??E.agent,"]"]}),P]}):null;if(D.kind==="single"){const{entry:q}=D;if(q.type==="tool")return t.jsxs("div",{className:"agent-log-tool",children:[$,t.jsxs("div",{className:"agent-log-tool-title",children:["⚡ ",q.text]}),q.detail?t.jsx(Pd,{detail:q.detail,type:"tool"}):null]},D.key);if(q.type==="tool_result")return t.jsxs("div",{className:"agent-log-tool-result",children:[$,t.jsxs("div",{className:"agent-log-tool-title",children:["✓ ",q.text]}),q.detail?t.jsx(Pd,{detail:q.detail,type:"tool_result"}):null]},D.key);if(q.type==="tool_error")return t.jsxs("div",{className:"agent-log-tool-error",children:[$,t.jsxs("div",{className:"agent-log-tool-title",children:["✗ ",q.text]}),q.detail?t.jsx(Pd,{detail:q.detail,type:"tool_error"}):null]},D.key)}const j=D.kind==="single"?E.text:D.entries.map(q=>q.text).join("");return D.kind==="thinking"?t.jsxs("div",{className:"agent-log-thinking",children:[$,g?t.jsx("div",{className:"markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],components:bf,children:j})}):t.jsx("pre",{className:"agent-log-plain-block",children:Ns(j)})]},D.key):t.jsxs("div",{className:"agent-log-text",children:[$,g?t.jsx("div",{className:"markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],components:bf,children:j})}):t.jsx("pre",{className:"agent-log-plain-block",children:Ns(j)})]},D.key)}),!x&&t.jsxs("button",{type:"button",className:"agent-log-return-to-live",onClick:H,"data-testid":"agent-log-return-to-live",children:[t.jsx(Cn,{size:12}),t.jsx("span",{children:"Live"})]})]})]})}function Fr(e){return e??void 0}function Cl(e){return{provider:Fr(e.modelProvider),modelId:Fr(e.modelId)}}function El(e){return{provider:Fr(e.validatorModelProvider),modelId:Fr(e.validatorModelId)}}function _l(e){return{provider:Fr(e.planningModelProvider),modelId:Fr(e.planningModelId)}}function XP(e,n){return Ob(e,n)}function ZP(e,n){return Fb(e,n)}function e$(e,n){return zb(e,n)}function $d(e){if(!e)return{provider:void 0,modelId:void 0};const n=e.indexOf("/");return{provider:e.slice(0,n),modelId:e.slice(n+1)}}function Dd(e){return e.provider&&e.modelId?`${e.provider}/${e.modelId}`:""}function Ld(e,n){return e.provider===n.provider&&e.modelId===n.modelId}function t$(e,n){const a={executor:"Executor",validator:"Reviewer",planning:"Planning"}[e]||e;return!n.provider||!n.modelId?`${a} model set to default`:`${a} model set to ${n.provider}/${n.modelId}`}function n$({task:e,addToast:n,onTaskUpdated:s,settings:a}){const[r,o]=i.useState([]),[l,c]=i.useState([]),[d,u]=i.useState([]),[h,m]=i.useState(!1),[f,p]=i.useState(null),[g,w]=i.useState(()=>Cl(e)),[v,b]=i.useState(()=>Cl(e)),[y,N]=i.useState(()=>El(e)),[S,C]=i.useState(()=>El(e)),[x,k]=i.useState(()=>_l(e)),[R,z]=i.useState(()=>_l(e)),[_,A]=i.useState(()=>e.thinkingLevel??null),[Q,H]=i.useState(()=>e.thinkingLevel??null),[M,T]=i.useState(null),F=i.useRef(e.id);i.useEffect(()=>{m(!0),p(null),Hs().then(ee=>{o(ee.models),c(ee.favoriteProviders),u(ee.favoriteModels)}).catch(ee=>{p(ee.message||"Failed to load models")}).finally(()=>{m(!1)})},[]);const W=i.useCallback(async ee=>{const L=l,me=L.includes(ee)?L.filter(B=>B!==ee):[ee,...L];c(me);try{await Kn({favoriteProviders:me,favoriteModels:d})}catch{c(L),n("Failed to update favorites","error")}},[l,d,n]),oe=i.useCallback(async ee=>{const L=d,me=L.includes(ee)?L.filter(B=>B!==ee):[ee,...L];u(me);try{await Kn({favoriteProviders:l,favoriteModels:me})}catch{u(L),n("Failed to update model favorites","error")}},[d,l,n]);i.useEffect(()=>{F.current=e.id;const ee=Cl(e),L=El(e),Y=_l(e);w(ee),b(ee),N(L),C(L),k(Y),z(Y);const me=e.thinkingLevel??null;A(me),H(me),T(null)},[e.id,e.modelProvider,e.modelId,e.validatorModelProvider,e.validatorModelId,e.planningModelProvider,e.planningModelId,e.thinkingLevel]);const D=i.useMemo(()=>Dd(g),[g]),E=i.useMemo(()=>Dd(y),[y]),P=i.useMemo(()=>Dd(x),[x]),$=i.useMemo(()=>XP(e,a),[e,a]),j=i.useMemo(()=>ZP(e,a),[e,a]),q=i.useMemo(()=>e$(e,a),[e,a]),de=M!==null,be=i.useCallback(async(ee,L)=>{const Y=e.id,me=v,B=S,xe=R;T(ee);try{const Ne=s?ee==="executor"?{modelProvider:L.provider??null,modelId:L.modelId??null}:ee==="validator"?{validatorModelProvider:L.provider??null,validatorModelId:L.modelId??null}:{planningModelProvider:L.provider??null,planningModelId:L.modelId??null}:{modelProvider:(ee==="executor"?L:v).provider??null,modelId:(ee==="executor"?L:v).modelId??null,validatorModelProvider:(ee==="validator"?L:S).provider??null,validatorModelId:(ee==="validator"?L:S).modelId??null,planningModelProvider:(ee==="planning"?L:R).provider??null,planningModelId:(ee==="planning"?L:R).modelId??null},te=await Ts(Y,Ne);if(F.current!==Y)return;const Be=Cl(te),$e=El(te),ct=_l(te);b(Be),w(Be),C($e),N($e),z(ct),k(ct),s?.(te),n(t$(ee,{executor:Be,validator:$e,planning:ct}[ee]),"success")}catch(Ne){if(F.current!==Y)return;ee==="executor"?w(me):ee==="validator"?N(B):k(xe),n(Me(Ne)||"Failed to save model settings","error")}finally{F.current===Y&&T(null)}},[e.id,v,S,R,n,s]),Ce=i.useCallback(ee=>{const L=$d(ee);w(L),!Ld(L,v)&&be("executor",L)},[v,be]),Ae=i.useCallback(ee=>{const L=$d(ee);N(L),!Ld(L,S)&&be("validator",L)},[S,be]),ae=i.useCallback(ee=>{const L=$d(ee);k(L),!Ld(L,R)&&be("planning",L)},[R,be]),X=i.useCallback(async ee=>{const L=e.id,Y=Q,me=ee===""?null:ee;A(me),T("thinking");try{const B=await Ts(L,{thinkingLevel:me});if(F.current!==L)return;const xe=B.thinkingLevel??null;H(xe),A(xe),s?.(B);const Ne=a?.defaultThinkingLevel??"off";n(xe===null?`Thinking level set to default (${Ne})`:`Thinking level set to ${xe}`,"success")}catch(B){if(F.current!==L)return;A(Y),n(Me(B)||"Failed to save thinking level","error")}finally{F.current===L&&T(null)}},[e.id,Q,a,n,s]),pe=!v.provider&&!v.modelId,ie=!S.provider&&!S.modelId,ye=!R.provider&&!R.modelId;return t.jsxs("div",{className:"model-selector-tab",children:[t.jsx("h4",{children:"Model Configuration"}),t.jsx("p",{className:"model-selector-intro",children:"Override the AI models used for this task. When not specified, project or global defaults are used."}),h?t.jsx("div",{className:"model-selector-loading",children:"Loading available models…"}):f?t.jsxs("div",{className:"model-selector-error",children:["Error loading models: ",f,t.jsx("button",{className:"btn btn-sm",onClick:()=>{m(!0),p(null),Hs().then(ee=>{o(ee.models),c(ee.favoriteProviders),u(ee.favoriteModels)}).catch(ee=>p(ee.message)).finally(()=>m(!1))},style:{marginLeft:"8px"},children:"Retry"})]}):r.length===0?t.jsx("div",{className:"model-selector-empty",children:"No models available. Configure authentication in Settings to enable model selection."}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"executorModel",children:"Executor Model"}),t.jsx("div",{className:"model-selector-current",children:pe?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",$.provider&&$.modelId?` (${$.provider}/${$.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[v.provider&&t.jsx(Gn,{provider:v.provider,size:"sm"}),v.provider,"/",v.modelId]})}),t.jsx(Cs,{id:"executorModel",label:"Executor Model",value:D,onChange:Ce,models:r,disabled:de,placeholder:"Select executor model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:d,onToggleModelFavorite:oe}),t.jsx("small",{children:"The AI model used to implement this task."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"validatorModel",children:"Reviewer Model"}),t.jsx("div",{className:"model-selector-current",children:ie?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",j.provider&&j.modelId?` (${j.provider}/${j.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[S.provider&&t.jsx(Gn,{provider:S.provider,size:"sm"}),S.provider,"/",S.modelId]})}),t.jsx(Cs,{id:"validatorModel",label:"Reviewer Model",value:E,onChange:Ae,models:r,disabled:de,placeholder:"Select reviewer model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:d,onToggleModelFavorite:oe}),t.jsx("small",{children:"The AI model used to review code and plans for this task."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"planningModel",children:"Planning Model"}),t.jsx("div",{className:"model-selector-current",children:ye?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default",q.provider&&q.modelId?` (${q.provider}/${q.modelId})`:""]}):t.jsxs("span",{className:"model-badge model-badge-custom",children:[R.provider&&t.jsx(Gn,{provider:R.provider,size:"sm"}),R.provider,"/",R.modelId]})}),t.jsx(Cs,{id:"planningModel",label:"Planning Model",value:P,onChange:ae,models:r,disabled:de,placeholder:"Select planning model…",favoriteProviders:l,onToggleFavorite:W,favoriteModels:d,onToggleModelFavorite:oe}),t.jsx("small",{children:"The AI model used for task specification (triage phase)."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"thinkingLevel",children:"Thinking Level"}),t.jsx("div",{className:"model-selector-current",children:Q===null?t.jsxs("span",{className:"model-badge model-badge-default",children:["Using default (",a?.defaultThinkingLevel??"off",")"]}):t.jsx("span",{className:"model-badge model-badge-custom",children:Q})}),t.jsxs("select",{id:"thinkingLevel",value:_??"",onChange:ee=>X(ee.target.value),disabled:de,className:"thinking-level-select",children:[t.jsxs("option",{value:"",children:["Default (",a?.defaultThinkingLevel??"off",")"]}),t.jsx("option",{value:"off",children:"Off"}),t.jsx("option",{value:"minimal",children:"Minimal"}),t.jsx("option",{value:"low",children:"Low"}),t.jsx("option",{value:"medium",children:"Medium"}),t.jsx("option",{value:"high",children:"High"})]}),t.jsx("small",{children:"Controls the reasoning effort for the AI agent. Higher levels use more tokens."})]}),t.jsx("div",{className:"model-selector-status",children:pe&&ie&&ye&&Q===null?"Using project or global default models.":"Model settings are up to date."})]})]})}const s$={open:t.jsx(kc,{size:16}),closed:t.jsx(Xo,{size:16}),merged:t.jsx(Ib,{size:16})};function i$({taskId:e,projectId:n,prInfo:s,automationStatus:a,autoMerge:r=!1,isManualPrFlow:o=!1,prAuthAvailable:l,onPrCreated:c,onPrUpdated:d,addToast:u}){const[h,m]=i.useState(!1),[f,p]=i.useState(""),[g,w]=i.useState(""),[v,b]=i.useState(!1),[y,N]=i.useState(!1),[S,C]=i.useState(null),x=i.useCallback(async()=>{if(f.trim()){b(!0);try{const _=await WS(e,{title:f.trim(),body:g.trim()||void 0},n);c(_),m(!1),p(""),w(""),u(`Created PR #${_.number}`,"success")}catch(_){u(Me(_)||"Failed to create PR","error")}finally{b(!1)}}},[e,f,g,n,c,u]),k=i.useCallback(async()=>{if(s){N(!0);try{const _=await GS(e,n);C(_),d(_.prInfo),u("PR status refreshed","success")}catch(_){u(Me(_)||"Failed to refresh PR","error")}finally{N(!1)}}},[e,s,n,d,u]);if(!s)return a==="creating-pr"?t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Xs,{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(Xs,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsx("div",{className:"pr-hint pr-hint--muted",children:"Auto-merge will handle this task automatically."})]}):h?t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Xs,{size:16,className:"pr-section-icon"}),"Create Pull Request"]}),t.jsxs("div",{className:"pr-form",children:[t.jsx("input",{type:"text",placeholder:"PR title",value:f,onChange:_=>p(_.target.value),disabled:v,className:"pr-input"}),t.jsx("textarea",{placeholder:"PR description (optional)",value:g,onChange:_=>w(_.target.value),disabled:v,className:"pr-textarea",rows:3}),t.jsxs("div",{className:"pr-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>m(!1),disabled:v,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:x,disabled:!f.trim()||v,children:v?"Creating…":"Create PR"})]})]})]}):t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Xs,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>m(!0),disabled:!l,title:l?"Create a PR for this task":"PR auth unavailable — run 'gh auth login'",children:[t.jsx(Bn,{size:14,className:"pr-section-icon--sm"}),"Create PR"]}),o&&t.jsx("div",{className:"pr-hint pr-hint--subtle",children:"Use the footer action to run PR-first completion for this task."}),!l&&t.jsxs("div",{className:"pr-hint pr-hint--subtle",children:["Run ",t.jsx("code",{children:"gh auth login"})," to enable PR creation."]})]});const R=s$[s.status]??t.jsx(kc,{size:16}),z=S?.blockingReasons??[];return t.jsxs("div",{className:"pr-section",children:[t.jsxs("h4",{children:[t.jsx(Xs,{size:16,className:"pr-section-icon"}),"Pull Request"]}),t.jsxs("div",{className:`pr-card pr-card--status-${s.status}`,children:[t.jsxs("div",{className:"pr-header",children:[t.jsx("span",{className:"pr-status-icon",children:R}),t.jsx("span",{className:`pr-status-badge pr-status-badge--${s.status}`,children:s.status}),t.jsxs("span",{className:"pr-number",children:["#",s.number]}),t.jsx("div",{className:"pr-spacer"}),t.jsx("button",{className:"btn btn-sm pr-refresh-btn",onClick:k,disabled:y,title:"Refresh PR status",children:t.jsx(us,{size:14,style:{verticalAlign:"middle",opacity:y?.5:1}})})]}),t.jsx("div",{className:"pr-title",children:s.title}),t.jsxs("div",{className:"pr-meta",children:[t.jsx("span",{children:s.headBranch}),t.jsx("span",{className:"pr-meta-arrow",children:"→"}),t.jsx("span",{children:s.baseBranch})]}),a==="merging-pr"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:"fn is merging this pull request automatically."}),a==="awaiting-pr-checks"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:z.length>0?`Waiting for: ${z.join("; ")}`:"Waiting for required checks or review feedback before auto-merge."}),s.status==="merged"&&t.jsx("div",{className:"pr-hint pr-hint--info",children:"This PR is merged. fn will finish local cleanup and move the task to Done."}),t.jsxs("div",{className:"pr-footer",children:[s.commentCount>0&&t.jsxs("span",{className:"pr-comments",children:[t.jsx(ta,{size:14}),s.commentCount]}),t.jsxs("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"pr-link",children:[t.jsx(Mb,{size:14}),"View on GitHub"]})]})]})]})}const vf=2e3;function a$(e){const n=e.updatedAt||e.createdAt,s=new Date(n).toLocaleString();return e.updatedAt?`${s} (edited)`:s}function r$(e){return e==="agent"||e==="system"}function o$({task:e,onTaskUpdated:n,addToast:s,currentAuthor:a="user",projectId:r}){const[o,l]=i.useState(""),[c,d]=i.useState(null),[u,h]=i.useState(""),[m,f]=i.useState(!1),[p,g]=i.useState(null),w=i.useMemo(()=>[...e.comments||[]].sort((k,R)=>new Date(R.createdAt).getTime()-new Date(k.createdAt).getTime()),[e.comments]),v=o.length>vf;async function b(){const k=o.trim();if(k){f(!0);try{const R=await uS(e.id,k,r);l(""),n?.(R),s("Comment added","success")}catch(R){s(Me(R)||"Failed to add comment","error")}finally{f(!1)}}}async function y(k){const R=u.trim();if(R){f(!0);try{const z=await rS(e.id,k,R,r);d(null),h(""),n?.(z),s("Comment updated","success")}catch(z){s(Me(z)||"Failed to update comment","error")}finally{f(!1)}}}async function N(k){g(k);try{const R=await oS(e.id,k,r);n?.(R),s("Comment deleted","success")}catch(R){s(Me(R)||"Failed to delete comment","error")}finally{g(null)}}function S(k){k.key==="Enter"&&(k.ctrlKey||k.metaKey)&&(k.preventDefault(),b())}return t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Comments"}),w.length===0?t.jsx("div",{className:"detail-log-empty",children:"No comments yet."}):t.jsx("div",{className:"detail-activity-list",children:w.map(k=>{const R=k.author===a,z=c===k.id,_=r$(k.author);return t.jsxs("div",{className:"detail-log-entry",children:[t.jsxs("div",{className:"detail-log-header comments-header-row",children:[t.jsxs("div",{className:"comments-author-row",children:[_?t.jsx("span",{className:"ai-guidance-badge","data-testid":"ai-guidance-badge",children:"AI Guidance"}):t.jsx("strong",{children:k.author}),t.jsx("span",{className:"detail-log-timestamp",children:a$(k)})]}),R&&!z?t.jsxs("div",{className:"comments-actions-row",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{d(k.id),h(k.text)},children:"Edit"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>void N(k.id),disabled:p===k.id,children:p===k.id?"Deleting…":"Delete"})]}):null]}),z?t.jsxs("div",{className:"comments-edit-form",children:[t.jsx("textarea",{value:u,onChange:A=>h(A.target.value),rows:3,className:"comments-textarea"}),t.jsxs("div",{className:"comments-edit-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{d(null),h("")},disabled:m,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void y(k.id),disabled:m||!u.trim(),children:"Save"})]})]}):t.jsx("div",{className:"detail-log-outcome comments-outcome-text",children:k.text})]},k.id)})}),t.jsxs("div",{className:"comments-compose-form",children:[t.jsx("textarea",{value:o,onChange:k=>l(k.target.value),onKeyDown:S,rows:3,placeholder:"Add a comment",className:"comments-textarea"}),t.jsxs("div",{className:"comments-footer-row",children:[t.jsxs("span",{className:`comments-char-count${v?" comments-char-count--over":""}`,children:[o.length," / ",vf]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void b(),disabled:m||!o.trim()||v,children:m?"Posting…":"Add Comment"})]})]})]})}const yf="Failed to load review data.",l$="No reviewer feedback yet — this task has not produced reviewer-agent feedback in direct mode.",wf="fn-task-review-markdown";function c$(e,n){if(typeof window>"u")return n;try{const s=window.localStorage.getItem(e);return s===null?n:s==="true"}catch{return n}}function d$(e,n){if(!(typeof window>"u"))try{window.localStorage.setItem(e,n?"true":"false")}catch{}}const u$={p:({children:e,...n})=>t.jsx("p",{...n,children:Gs(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Gs(e)}),code:({children:e,...n})=>t.jsx("code",{...n,children:Gs(e)}),pre:({children:e,...n})=>t.jsx("pre",{...n,style:{overflowX:"auto",maxWidth:"100%",whiteSpace:"pre-wrap",wordBreak:"break-word"},children:Gs(e)}),table:({children:e,...n})=>t.jsx("table",{...n,style:{display:"block",overflowX:"auto",maxWidth:"100%"},children:e})};function fo(e){return e?new Date(e).toLocaleString():"Never"}function m$(e){return e==="manual"?"Manual":e==="auto"?"Background":"Initial load"}function h$(e){const n=new Map(e.addressing.map(o=>[o.itemId,o])),s=e.items.map(o=>{const l=n.get(o.id);return{id:o.id,summary:o.summary??o.body.slice(0,120),body:o.body,path:o.path,createdAt:o.createdAt,status:l?.status??"queued",addressing:l,item:o}}),a=new Set(s.map(o=>o.id)),r=e.addressing.filter(o=>!a.has(o.itemId)&&o.snapshot).map(o=>({id:o.itemId,summary:o.snapshot?.summary??o.itemId,body:o.snapshot?.body??o.snapshot?.summary??o.itemId,path:o.snapshot?.filePath,createdAt:o.selectedAt,status:o.status,addressing:o}));return[...s,...r]}function p$({task:e,projectId:n,onTaskUpdated:s,addToast:a}){const[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState(!1),[h,m]=i.useState(!0),[f,p]=i.useState(null),[g,w]=i.useState(null),[v,b]=i.useState(e.reviewState??null),[y,N]=i.useState(()=>c$(wf,!0)),S=r.length>0&&!d,C=v?.source==="pull-request",x=i.useMemo(()=>v?h$(v):[],[v]);i.useEffect(()=>{d$(wf,y)},[y]),i.useEffect(()=>{let M=!1;return m(!0),p(null),m1(e.id,n).then(T=>{M||(b(T.reviewState),w(T.emptyMessage??null))}).catch(()=>{M||p(yf)}).finally(()=>{M||m(!1)}),()=>{M=!0}},[e.id,n]);const k=i.useMemo(()=>v?v.source==="pull-request"?`${v.summary?.reviewDecision??"REVIEW_REQUIRED"} · ${x.length} review item(s)`:`${v.summary?.summary??"reviewer-agent"} · ${x.length} review item(s)`:"No review feedback captured yet.",[v,x.length]),R=v?v.source==="pull-request"?v.summary?.reviewDecision:v.summary?.verdict:void 0,z=l?"refreshing":v?.refreshStatus??"ready",_=z==="error"?"status-dot status-dot--error":z==="refreshing"?"status-dot status-dot--pending":"status-dot status-dot--online",A=M=>o(T=>T.includes(M)?T.filter(F=>F!==M):[...T,M]),Q=async()=>{try{p(null),c(!0);const M=await h1(e.id,n);if(b(M.reviewState),s?.({...e,reviewState:M.reviewState,prInfo:M.prInfo??e.prInfo}),M.reviewState.refreshStatus==="error"){const T=M.reviewState.refreshError??"Failed to refresh review data.";p(T),a(T,"error");return}a("Review refreshed","success")}catch(M){const T=M instanceof Error?M.message:yf;p(T),a(T,"error")}finally{c(!1)}},H=async()=>{try{if(!v)return;p(null),u(!0);const M=x.filter(F=>r.includes(F.id)).map(F=>{if(!F.item)return{id:F.id,source:v.source==="pull-request"?"pr-review":"reviewer-agent",threadId:F.addressing?.snapshot?.threadId,filePath:F.addressing?.snapshot?.filePath,lineNumber:F.addressing?.snapshot?.lineNumber,author:F.addressing?.snapshot?.authorLogin,summary:F.summary,body:F.body,url:F.addressing?.snapshot?.url};const W=F.item;return{id:F.item.id,source:v.source==="pull-request"?"pr-review":"reviewer-agent",threadId:typeof W.threadId=="string"?W.threadId:void 0,filePath:F.item.path,lineNumber:typeof W.line=="number"?W.line:void 0,author:F.item.author?.login,summary:F.item.summary??F.item.body.slice(0,120),body:F.item.body,url:typeof W.url=="string"?W.url:void 0}}),T=await p1(e.id,M,n);b(T.reviewState),s?.({...T.task,reviewState:T.reviewState}),o([]),a("Same-task AI revision started from selected review feedback","success")}catch(M){const T=M instanceof Error?M.message:"Failed to queue revision";p(T),a(T,"error")}finally{u(!1)}};return t.jsxs("div",{className:"task-review-tab",children:[t.jsxs("div",{className:"task-review-tab__header",children:[t.jsxs("div",{className:"task-review-tab__summary-wrap",children:[t.jsx("p",{className:"task-review-tab__summary",children:k}),R?t.jsx("span",{className:`task-review-tab__decision task-review-tab__decision--${R}`,children:R}):null]}),t.jsxs("div",{className:"task-review-tab__actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>N(M=>!M),"aria-pressed":y,"data-testid":"task-review-markdown-toggle",title:y?"Show raw text":"Show formatted markdown",children:y?"Markdown":"Plain"}),t.jsx("button",{className:"btn btn-sm",onClick:Q,disabled:l||h,children:l?"Refreshing…":"Refresh"}),t.jsx("button",{className:"btn btn-primary btn-sm",disabled:!S,onClick:H,children:d?"Queueing…":"Request revision"})]})]}),t.jsxs("div",{className:"task-review-tab__meta task-review-tab__refresh-meta","aria-live":"polite",children:[t.jsx("span",{className:_,"aria-hidden":"true"}),t.jsxs("span",{children:[z==="error"?"Refresh failed":z==="refreshing"?"Refreshing":"Up to date"," · Last refreshed: ",fo(v?.lastRefreshedAt)," · ",m$(v?.refreshSource)]})]}),h?t.jsx("div",{className:"task-review-tab__meta",children:"Loading review data…"}):null,!h&&f?t.jsx("div",{className:"task-review-tab__error",children:f}):null,!h&&!f&&!C&&x.length===0?t.jsx("div",{className:"task-review-tab__empty",children:g??l$}):null,!h&&!f&&x.length>0?t.jsx("ul",{className:"task-review-tab__list",children:x.map(M=>{const T=`task-review-item-checkbox-${M.id}`;return t.jsx("li",{className:"task-review-tab__item card",children:t.jsxs("div",{className:"task-review-tab__item-inner",children:[t.jsx("label",{htmlFor:T,className:"task-review-tab__direct-item task-review-tab__direct-item--selectable",children:t.jsxs("div",{className:"task-review-tab__summary-wrap",children:[t.jsx("input",{id:T,type:"checkbox",checked:r.includes(M.id),onChange:()=>A(M.id)}),t.jsxs("span",{className:"task-review-tab__item-summary",children:[M.path?`${M.path}: `:"",M.summary]}),t.jsx("span",{className:`task-review-tab__status task-review-tab__status--${M.status}`,children:M.status})]})}),t.jsx("div",{className:"task-review-tab__meta",children:fo(M.createdAt)}),M.addressing?t.jsxs("div",{className:"task-review-tab__meta",children:["Selected: ",fo(M.addressing.selectedAt),M.addressing.startedAt?` · Started: ${fo(M.addressing.startedAt)}`:"",M.addressing.completedAt?` · Completed: ${fo(M.addressing.completedAt)}`:"",M.addressing.error?` · Error: ${M.addressing.error}`:""]}):null,y?t.jsx("div",{className:"task-review-tab__body markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],components:u$,children:M.body})}):t.jsx("pre",{className:"task-review-tab__body",children:Ns(M.body)})]})},M.id)})}):null,C&&!h&&!f&&x.length===0?t.jsx("div",{className:"task-review-tab__empty",children:"No review items yet."}):null]})}function f$(e){return e?e.slice(0,7):"Unknown"}function g$({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:f$(n.commitSha)})]})}),t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Files changed"}),t.jsx("span",{className:"detail-log-outcome",children:n.filesChanged??0})]})}),t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Insertions / Deletions"}),t.jsxs("span",{className:"detail-log-outcome",children:["+",n.insertions??0," / -",n.deletions??0]})]})}),n.mergedAt?t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"Merged at"}),t.jsx("span",{className:"detail-log-outcome",children:new Date(n.mergedAt).toLocaleString()})]})}):null,n.prNumber?t.jsx("div",{className:"detail-log-entry",children:t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-action",children:"PR"}),e.prInfo?.url?t.jsxs("a",{className:"detail-source-link detail-log-outcome",href:e.prInfo.url,target:"_blank",rel:"noopener noreferrer",children:["#",n.prNumber]}):t.jsxs("span",{className:"detail-log-outcome",children:["#",n.prNumber]})]})}):null,n.mergeCommitMessage?t.jsxs("div",{className:"detail-log-entry",children:[t.jsx("div",{className:"detail-log-header",children:t.jsx("span",{className:"detail-log-action",children:"Message"})}),t.jsx("div",{className:"detail-log-outcome",children:n.mergeCommitMessage})]}):null]})]})}function Gv(e){return e.split(`
683
+ `).map((s,a)=>{let r="";return s.startsWith("+")&&!s.startsWith("+++")?r="diff-add":s.startsWith("-")&&!s.startsWith("---")?r="diff-del":s.startsWith("@@")&&(r="diff-hunk"),r?t.jsx("span",{className:r,children:`${s}
684
+ `},a):t.jsx(wa.Fragment,{children:`${s}
685
+ `},a)})}function b$(e){switch(e){case"added":return"A";case"deleted":return"D";case"modified":return"M";default:return"?"}}function x$({isOpen:e,taskId:n,files:s,stats:a,mergeDetails:r,column:o,onClose:l,onRefresh:c}){const[d,u]=i.useState(null),[h,m]=i.useState(!0),f=i.useRef(null);Ui(f,e,"fusion:changes-diff-modal-size");const p=aa(l);i.useEffect(()=>{s.length>0&&d===null&&u(0)},[s,d]);const g=i.useCallback(()=>{u(y=>y!==null&&y>0?y-1:y)},[]),w=i.useCallback(()=>{u(y=>y!==null&&y<s.length-1?y+1:y)},[]);if(i.useEffect(()=>{if(!e)return;const y=N=>{if(N.key==="Escape"){l();return}N.key==="ArrowUp"&&(N.metaKey||N.ctrlKey)&&(N.preventDefault(),g()),N.key==="ArrowDown"&&(N.metaKey||N.ctrlKey)&&(N.preventDefault(),w())};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[e,l,g,w]),!e)return null;const v=d!==null?s[d]:null,b=o==="done";return t.jsx("div",{className:"modal-overlay open",...p,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal changes-diff-modal",ref:f,children:[t.jsxs("div",{className:"modal-header changes-diff-modal-header",children:[t.jsxs("div",{className:"changes-diff-header-title",children:[t.jsx(Ni,{size:18}),t.jsxs("span",{children:["Changes — ",n]}),t.jsxs("span",{className:"changes-stat-summary",children:[t.jsxs("span",{className:"diff-add",children:["+",a.additions]})," ",t.jsxs("span",{className:"diff-del",children:["-",a.deletions]})]})]}),t.jsxs("div",{className:"changes-diff-header-actions",children:[s.length>0&&t.jsxs("div",{className:"changes-nav",children:[t.jsx("button",{className:"btn btn-sm btn-icon",onClick:g,disabled:d===null||d<=0,title:"Previous file (Ctrl+↑)","aria-label":"Previous file",children:t.jsx(wc,{})}),t.jsx("span",{className:"changes-nav-indicator","aria-live":"polite",children:d!==null?`${d+1}/${s.length}`:`—/${s.length}`}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:w,disabled:d===null||d>=s.length-1,title:"Next file (Ctrl+↓)","aria-label":"Next file",children:t.jsx(Vn,{})})]}),t.jsx("button",{className:`btn btn-sm ${h?"btn-primary":""}`,onClick:()=>m(y=>!y),title:h?"Disable word wrap":"Enable word wrap","aria-label":"Toggle word wrap",children:t.jsx(tm,{size:14})}),c&&t.jsxs("button",{className:"btn btn-sm",onClick:c,children:[t.jsx(us,{size:14}),"Refresh"]}),t.jsx("button",{className:"modal-close",onClick:l,"aria-label":"Close",children:t.jsx(kn,{size:20})})]})]}),t.jsxs("div",{className:"changes-diff-body",children:[t.jsxs("div",{className:"changes-diff-sidebar",children:[b&&r&&t.jsxs("div",{className:"commit-diff-meta",children:[r.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ir,{size:14}),t.jsx("code",{children:r.commitSha.slice(0,7)})]}),r.mergeCommitMessage&&t.jsx("div",{className:"commit-diff-message",children:r.mergeCommitMessage}),r.mergedAt&&t.jsxs("div",{className:"commit-diff-timestamp",children:["Merged ",new Date(r.mergedAt).toLocaleString()]})]}),t.jsx("div",{className:"changes-diff-file-list",children:s.map((y,N)=>t.jsxs("button",{className:`changes-diff-file-item ${d===N?"selected":""}`,onClick:()=>u(N),title:y.path,children:[t.jsx("span",{className:`changes-file-status changes-file-status--${y.status}`,children:b$(y.status)}),t.jsx("span",{className:"changes-diff-file-path",title:y.path,children:t.jsx("bdo",{dir:"ltr",children:y.path})}),t.jsxs("span",{className:"changes-diff-file-stat",children:["+",y.additions," -",y.deletions]})]},y.path))})]}),t.jsx("div",{className:"changes-diff-content",children:v?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"changes-diff-file-header-bar",children:[t.jsx("span",{className:"changes-diff-file-header-name",children:v.path}),t.jsxs("span",{className:"changes-diff-file-header-stats",children:["+",v.additions," -",v.deletions]})]}),v.patch?t.jsx("div",{className:"changes-diff-viewer",children:t.jsx("pre",{className:`changes-diff-patch ${h?"changes-diff-patch--wrap":"changes-diff-patch--nowrap"}`,children:t.jsx("code",{children:Gv(v.patch)})})}):t.jsx("div",{className:"changes-diff-empty",children:"No diff available for this file."})]}):t.jsxs("div",{className:"changes-diff-empty",children:[t.jsx(Ni,{size:48,opacity:.3}),t.jsx("p",{children:"Select a file to view its diff"})]})})]})]})})}function Kv(e){switch(e){case"added":return"A";case"deleted":return"D";case"modified":return"M";default:return"?"}}function Od(e,n,s){return t.jsxs("div",{className:"detail-section task-changes-tab",children:[n&&s&&t.jsxs("div",{className:"commit-diff-meta",children:[s.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ir,{size:14}),t.jsx("code",{children:s.commitSha.slice(0,7)})]}),s.mergedAt&&t.jsxs("div",{className:"commit-diff-timestamp",children:["Merged ",new Date(s.mergedAt).toLocaleString()]})]}),t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsxs("p",{children:[e.length," file",e.length===1?"":"s"," modified during execution."]}),t.jsx("span",{className:"task-changes-state-hint",children:n?"The recorded merge commit has no diff (likely collapsed into a squash on main). Showing file paths only — patches unavailable.":"The live worktree diff is empty. Showing the last file paths captured during execution — patches unavailable."})]}),t.jsx("div",{className:"changes-file-list task-changes-file-list--compact",children:e.map(a=>t.jsx("div",{className:"changes-file-item",children:t.jsxs("div",{className:"changes-file-header changes-file-header--static",children:[t.jsx("span",{className:"changes-file-status changes-file-status--unknown",title:"status unknown",children:Kv("unknown")}),t.jsx("span",{className:"changes-file-path",title:a,children:t.jsx("bdo",{dir:"ltr",children:a})})]})},a))})]})}function v$({taskId:e,worktree:n,projectId:s,column:a,mergeDetails:r,modifiedFiles:o}){const[l,c]=i.useState([]),[d,u]=i.useState({filesChanged:0,additions:0,deletions:0}),[h,m]=i.useState(!0),[f,p]=i.useState(null),[g,w]=i.useState([]),[v,b]=i.useState(null),[y,N]=i.useState(new Set),[S,C]=i.useState(null),[x,k]=i.useState(!0),[R,z]=i.useState(!1),_=a==="done",A=_&&!!r?.commitSha,Q=a==="in-progress"||a==="in-review"||_,H=i.useCallback(async()=>{if(!Q&&!_){m(!1);return}try{m(!0),p(null);const D=await R1(e,s);if(b(D.lineageId),w(D.associations),!Q){c([]),u({filesChanged:0,additions:0,deletions:0});return}const E=await tx(e,void 0,s),P=E.files.map($=>({path:$.path,status:$.status,additions:$.additions,deletions:$.deletions,patch:$.patch}));c(P),u(E.stats),P.length>0&&(N(new Set([P[0].path])),C(0))}catch(D){_&&!r?.commitSha?(c([]),u({filesChanged:0,additions:0,deletions:0}),p(null)):p(Me(D)||"Failed to load task changes")}finally{m(!1)}},[e,s,Q,_,r?.commitSha]);i.useEffect(()=>{H()},[H]);const M=D=>{N(E=>{const P=new Set(E);if(P.has(D))P.delete(D);else{P.add(D);const $=l.findIndex(j=>j.path===D);$!==-1&&C($)}return P})},T=D=>{if(D<0||D>=l.length)return;const E=l[D].path;N(new Set([E])),C(D)},F=S!==null&&S>0,W=S!==null&&S<l.length-1;if(h)return t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--loading",children:[t.jsx("div",{className:"loading-spinner"}),t.jsx("span",{children:"Loading changes..."})]})});if(f)return t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--error",children:[t.jsx(Us,{size:16}),t.jsxs("span",{children:["Error loading changes: ",f]})]})});if(!_&&!n&&l.length===0)return o&&o.length>0?Od(o,!1):t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsx("p",{children:"No worktree available for this task."}),t.jsx("span",{className:"task-changes-state-hint",children:"Changes will be shown once the task is in progress."})]})});const oe=()=>t.jsxs("section",{className:"task-lineage-associations","aria-label":"Task commit associations",children:[t.jsxs("div",{className:"task-lineage-associations-header",children:[t.jsxs("h4",{children:[t.jsx(Ir,{size:16}),"Lineage commit associations"]}),v&&t.jsx("code",{className:"task-lineage-id",children:v})]}),g.length===0?t.jsx("p",{className:"task-lineage-associations-empty",children:"No associated commits recorded yet."}):t.jsx("div",{className:"task-lineage-associations-list",children:g.map(D=>{const E=D.matchedBy.replace(/-/g," ");return t.jsxs("article",{className:`task-lineage-association task-lineage-association--${D.confidence}`,children:[t.jsxs("div",{className:"task-lineage-association-main",children:[t.jsx("code",{className:"task-lineage-sha",children:D.commitSha.slice(0,7)}),t.jsx("span",{className:"task-lineage-subject",children:D.commitSubject})]}),t.jsxs("div",{className:"task-lineage-association-meta",children:[t.jsx("span",{children:new Date(D.authoredAt).toLocaleString()}),t.jsxs("span",{children:["Confidence: ",D.confidence]}),t.jsxs("span",{children:["Match: ",E]}),t.jsxs("span",{children:["Task snapshot: ",D.taskIdSnapshot]})]}),D.note&&t.jsx("p",{className:"task-lineage-note",children:D.note})]},`${D.commitSha}-${D.matchedBy}`)})})]});if(l.length===0){if(_&&!A){if(o&&o.length>0)return Od(o,!0,r);const D=r?.filesChanged,E=r?.insertions,P=r?.deletions,$=D!=null||E!=null||P!=null;return t.jsx("div",{className:"detail-section",children:t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsx("p",{children:"Detailed file changes unavailable."}),t.jsx("span",{className:"task-changes-state-hint",children:$?`Merge summary: ${D??0} file${(D??0)===1?"":"s"} changed, +${E??0} additions, -${P??0} deletions.`:"No merge commit was recorded for this task."})]})})}return o&&o.length>0?Od(o,_,r):t.jsxs("div",{className:"detail-section task-changes-tab",children:[oe(),t.jsxs("div",{className:"task-changes-state task-changes-state--empty",children:[t.jsx(Ni,{size:24}),t.jsx("p",{children:"No files modified."}),t.jsx("span",{className:"task-changes-state-hint",children:_?"No file changes were recorded in the merge commit.":"The agent did not modify any files during execution."})]})]})}return t.jsxs("div",{className:"detail-section task-changes-tab",children:[oe(),_&&r&&t.jsxs("div",{className:"commit-diff-meta",children:[r.commitSha&&t.jsxs("div",{className:"commit-diff-sha",children:[t.jsx(Ir,{size:14}),t.jsx("code",{children:r.commitSha.slice(0,7)})]}),r.mergeCommitMessage&&t.jsx("div",{className:"commit-diff-message",children:r.mergeCommitMessage}),r.mergedAt&&t.jsxs("div",{className:"commit-diff-timestamp",children:["Merged ",new Date(r.mergedAt).toLocaleString()]})]}),t.jsxs("div",{className:"changes-header",children:[t.jsxs("div",{className:"task-changes-header-title",children:[t.jsxs("h4",{children:[t.jsx(Ni,{size:16}),"Files Changed (",d.filesChanged,")"]}),t.jsxs("span",{className:"task-changes-stats changes-stat-summary",children:[t.jsxs("span",{className:"diff-add",children:["+",d.additions]})," ",t.jsxs("span",{className:"diff-del",children:["-",d.deletions]})]})]}),t.jsxs("div",{className:"changes-header-actions-wrapper",children:[t.jsxs("div",{className:"changes-header-actions",children:[l.length>0&&t.jsxs("div",{className:"changes-nav",children:[t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>F&&T(S-1),disabled:!F,title:"Previous file","aria-label":"Previous file",children:t.jsx(wc,{})}),t.jsx("span",{className:"changes-nav-indicator","aria-live":"polite",children:S!==null?`${S+1}/${l.length}`:`—/${l.length}`}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>W&&T(S+1),disabled:!W,title:"Next file","aria-label":"Next file",children:t.jsx(Vn,{})})]}),t.jsx("button",{className:`btn btn-sm ${x?"btn-primary":""}`,onClick:()=>k(D=>!D),title:x?"Disable word wrap":"Enable word wrap","aria-label":"Toggle word wrap",children:t.jsx(tm,{size:14})})]}),t.jsxs("div",{className:"changes-header-actions-secondary",children:[t.jsx("button",{className:"btn btn-sm",onClick:H,disabled:h,children:"Refresh"}),t.jsx("button",{className:"btn btn-sm btn-icon",onClick:()=>z(!0),title:"Expand to full-screen diff view","aria-label":"Expand diff view",children:t.jsx(_c,{})})]})]})]}),t.jsx("div",{className:"changes-file-list task-changes-file-list--compact",children:l.map(D=>{const E=y.has(D.path);return t.jsxs("div",{className:`changes-file-item ${E?"expanded":""}`,children:[t.jsxs("button",{className:"changes-file-header",onClick:()=>M(D.path),children:[t.jsx("span",{className:"changes-file-toggle",children:E?t.jsx(Cn,{size:14}):t.jsx(Vn,{size:14})}),t.jsx("span",{className:`changes-file-status changes-file-status--${D.status}`,title:D.status,children:Kv(D.status)}),t.jsx("span",{className:"changes-file-path",title:D.path,children:t.jsx("bdo",{dir:"ltr",children:D.path})}),t.jsxs("span",{className:"changes-file-stat",title:`+${D.additions} -${D.deletions}`,children:["+",D.additions," -",D.deletions]})]}),E&&D.patch&&t.jsx("div",{className:"changes-file-content",children:t.jsx("pre",{className:`changes-diff-patch ${x?"changes-diff-patch--wrap":"changes-diff-patch--nowrap"}`,children:t.jsx("code",{children:Gv(D.patch)})})})]},D.path)})}),t.jsx(x$,{isOpen:R,taskId:e,files:l,stats:d,mergeDetails:r,column:a,onClose:()=>z(!1),onRefresh:H})]})}function kf(e){return{executorValue:e?.executorProvider&&e?.executorModelId?`${e.executorProvider}/${e.executorModelId}`:"",validatorValue:e?.validatorProvider&&e?.validatorModelId?`${e.validatorProvider}/${e.validatorModelId}`:""}}function y$(e){return e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,"-").replace(/-+/g,"-").replace(/^[-_]+|[-_]+$/g,"").slice(0,32)||"preset"}function qB(e,n){const s=y$(e),a=new Set(n.map(c=>c.id));if(!a.has(s))return s;const r=30;let o=s,l=1;for(;a.has(o)&&l<100;){const c=`-${l}`;o=`${s.slice(0,r-c.length)}${c}`,l++}return o}function jf(e){const n=e?.trim()??"";return Ac.test(n)?n:""}function Jv(e,n){const s=jf(e?.githubTrackingDefaultRepo);return s||jf(n?.githubTrackingDefaultRepo)}function w$(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}const Nf=["image/png","image/jpeg","image/gif","image/webp"];function k$(e,n,s){const a=e==="post-merge"?"phase-badge--post-merge":"phase-badge--pre-merge";return t.jsx("span",{className:`phase-badge ${a}`,"data-testid":`${s}-${n}`,children:e==="post-merge"?"Post-merge":"Pre-merge"})}function Yv({mode:e,description:n,onDescriptionChange:s,title:a,onTitleChange:r,dependencies:o,onDependenciesChange:l,branch:c,onBranchChange:d,baseBranch:u,onBaseBranchChange:h,nodeId:m,onNodeIdChange:f,nodeOptions:p,nodeOverrideDisabled:g=!1,nodeOverrideDisabledReason:w,priority:v,onPriorityChange:b,executorModel:y,onExecutorModelChange:N,validatorModel:S,onValidatorModelChange:C,planningModel:x,onPlanningModelChange:k,thinkingLevel:R,onThinkingLevelChange:z,presetMode:_,onPresetModeChange:A,selectedPresetId:Q,onSelectedPresetIdChange:H,selectedWorkflowSteps:M,onWorkflowStepsChange:T,onDefaultOnApplied:F,pendingImages:W,onImagesChange:oe,tasks:D,projectId:E,disabled:P=!1,addToast:$,isActive:j=!0,onAutoSaveDescription:q,onPlanningMode:de,onSubtaskBreakdown:be,onClose:Ce,renderBelowPrimary:Ae,renderBelowModelConfiguration:ae,hideDependencies:X,autoExpandMoreOptionsOnSelection:pe=!0,reviewLevel:ie,onReviewLevelChange:ye,executionMode:ee,onExecutionModeChange:L,githubTrackingEnabled:Y,onGithubTrackingEnabledChange:me,githubRepoOverride:B,onGithubRepoOverrideChange:xe}){const Ne=(X?!1:o.length>0)||W.length>0||M.length>0||_!=="default"||(v??Rs)!==Rs||y!==""||S!==""||(x||"")!==""||(R||"")!==""||ie!==void 0||ee==="fast"||(c||"")!==""||(u||"")!==""||(m||"")!==""||Y===!0||(B||"")!=="",[te,Be]=i.useState(!1),[$e,ct]=i.useState(pe?Ne:!1),[De,le]=i.useState(""),[_e,Le]=i.useState([]),[mt,Ve]=i.useState([]),[ge,he]=i.useState([]),[Pe,dt]=i.useState(!1),[jt,nt]=i.useState(null),[xt,Ie]=i.useState(null),[Qe,ot]=i.useState([]),[Tt,Mt]=i.useState("idle"),[We,J]=i.useState(!1),[ke,lt]=i.useState(!1),[ve,st]=i.useState(!1),Ue=i.useRef(null),fe=i.useRef(null),Xe=i.useRef(null),vt=i.useRef(null),St=i.useRef(null),Et=i.useRef(null),Pt=i.useRef(null),Jt=i.useRef(!1),dn=i.useRef(Ne),Vt=i.useRef(n.trim()),ln=i.useRef(n.trim());i.useEffect(()=>{j&&(dt(!0),Hs().then(se=>{Le(se.models),Ve(se.favoriteProviders),he(se.favoriteModels)}).catch(()=>{}).finally(()=>dt(!1)),Rc(E).then(se=>nt(se)).catch(()=>nt(null)),sl(E).then(se=>ot(se.filter(re=>re.enabled))).catch(()=>ot([])),ia().then(se=>Ie(se)).catch(()=>Ie(null)))},[j,E]);const fn=jt?.modelPresets||[],_n=fn.find(se=>se.id===Q),an=Jv(jt,xt),Dn=(B||"").trim(),vn=Dn.length>0&&!Ac.test(Dn),Ut=(X?!1:o.length>0)||W.length>0||M.length>0||_!=="default"||(v??Rs)!==Rs||y!==""||S!==""||(x||"")!==""||(R||"")!==""||ie!==void 0||ee==="fast"||(c||"")!==""||(u||"")!==""||(m||"")!==""||Y===!0||(B||"")!=="";i.useEffect(()=>{if(e!=="create"||!j||!jt?.autoSelectModelPreset)return;const se=(jt.defaultPresetBySize,void 0);if(se){const re=kf(se);H(se.id),A("preset"),N(re.executorValue),C(re.validatorValue)}},[j,jt,fn,e]);const rn=i.useRef(!1),bn=i.useRef(!1);i.useEffect(()=>{if(e!=="create"||!j||rn.current||Qe.length===0)return;const se=Qe.filter(Ge=>Ge.defaultOn);if(se.length===0)return;rn.current=!0;const re=se.map(Ge=>Ge.id);T(re),F?.(re)},[e,j,Qe]),i.useEffect(()=>{j||(rn.current=!1)},[j]),i.useEffect(()=>{e!=="create"||!j||me&&(bn.current||jt&&(me(jt.githubTrackingEnabledByDefault??!1),bn.current=!0))},[e,j,jt,me]),i.useEffect(()=>{j||(bn.current=!1)},[j]),i.useEffect(()=>{if(!pe){dn.current=Ut;return}Ut&&!dn.current&&ct(!0),dn.current=Ut},[Ut,pe]),i.useEffect(()=>{$e||(Be(!1),le(""))},[$e]),i.useEffect(()=>{e!=="edit"||!j||vt.current&&(vt.current.focus(),vt.current.select())},[e,j]),i.useEffect(()=>{if(!te)return;const se=re=>{fe.current&&!fe.current.contains(re.target)&&Be(!1)};return document.addEventListener("mousedown",se),()=>document.removeEventListener("mousedown",se)},[te]),i.useEffect(()=>{(e!=="edit"||P)&&st(!1)},[e,P]),i.useEffect(()=>{if(e!=="edit"){Mt("idle");return}const se=n.trim();Vt.current=se,ln.current=se,Mt("idle")},[e]),i.useEffect(()=>{if(e!=="edit"||!q||!j)return;const se=n.trim(),re=Vt.current;if(se===re||se===ln.current){Et.current&&(clearTimeout(Et.current),Et.current=null),Jt.current||Mt("idle");return}return Et.current&&clearTimeout(Et.current),Et.current=setTimeout(async()=>{if(!Jt.current){Jt.current=!0,Mt("saving");try{await q(se),ln.current=se,Mt("saved"),Pt.current&&clearTimeout(Pt.current),Pt.current=setTimeout(()=>{Mt("idle"),Pt.current=null},2e3)}catch{Mt("idle")}finally{Jt.current=!1,Et.current=null}}},1500),()=>{Et.current&&(clearTimeout(Et.current),Et.current=null)}},[e,n,q,j]),i.useEffect(()=>()=>{Et.current&&clearTimeout(Et.current),Pt.current&&clearTimeout(Pt.current)},[]),i.useEffect(()=>{if(!We)return;const se=re=>{Ue.current&&!Ue.current.contains(re.target)&&J(!1)};return document.addEventListener("mousedown",se),()=>document.removeEventListener("mousedown",se)},[We]);const en=i.useCallback(se=>{const re=se.clipboardData?.items;if(re)for(let Ge=0;Ge<re.length;Ge++){const Ct=re[Ge];if(Ct.type.startsWith("image/")){const Gt=Ct.getAsFile();if(Gt&&Nf.includes(Gt.type)){se.preventDefault(),oe([...W,{file:Gt,previewUrl:URL.createObjectURL(Gt)}]);return}}}},[W,oe]),Yt=i.useCallback(se=>{se.preventDefault();const re=se.dataTransfer.files;for(let Ge=0;Ge<re.length;Ge++){const Ct=re[Ge];if(Nf.includes(Ct.type)){oe([...W,{file:Ct,previewUrl:URL.createObjectURL(Ct)}]);return}}},[W,oe]),tn=i.useCallback(se=>{const re=W[se];re&&URL.revokeObjectURL(re.previewUrl),oe(W.filter((Ge,Ct)=>Ct!==se))},[W,oe]),Qt=i.useCallback(se=>{l(o.includes(se)?o.filter(re=>re!==se):[...o,se])},[o,l]),Kt=(se,re)=>se.length>re?se.slice(0,re)+"…":se,xn=i.useCallback(se=>{s(se.target.value);const re=se.target;re.style.height="auto",re.style.height=re.scrollHeight+"px"},[s]),un=i.useCallback(()=>{st(se=>!se)},[]),pn=i.useCallback(se=>{!ve||se.key!=="Escape"||(se.preventDefault(),se.stopPropagation(),st(!1))},[ve]),$t=i.useCallback(async se=>{const re=n.trim();if(!(!re||ke)){lt(!0);try{const Ge=await Yb(re,se,E);s(Ge),J(!1),$("Description refined with AI","success"),Xe.current&&(Xe.current.style.height="auto",Xe.current.style.height=Xe.current.scrollHeight+"px")}catch(Ge){const Ct=Qb(Ge);$(Ct,"error")}finally{lt(!1)}}},[n,ke,$,s,E]),ue=i.useCallback(async se=>{const re=mt,Ct=re.includes(se)?re.filter(Gt=>Gt!==se):[se,...re];Ve(Ct);try{await Kn({favoriteProviders:Ct,favoriteModels:ge})}catch{Ve(re)}},[mt,ge]),Re=i.useCallback(async se=>{const re=ge,Ct=re.includes(se)?re.filter(Gt=>Gt!==se):[se,...re];he(Ct);try{await Kn({favoriteProviders:mt,favoriteModels:Ct})}catch{he(re)}},[ge,mt]),et=i.useCallback(se=>{if(se<=0)return;const re=[...M];[re[se-1],re[se]]=[re[se],re[se-1]],T(re)},[M,T]),at=i.useCallback(se=>{if(se>=M.length-1)return;const re=[...M];[re[se],re[se+1]]=[re[se+1],re[se]],T(re)},[M,T]),Je=i.useCallback(se=>{T(M.filter(re=>re!==se))},[M,T]),Nt=new Map;for(const se of Qe)Nt.set(se.id,{name:se.name,description:se.description});const bt=D.filter(se=>!o.includes(se.id)).sort((se,re)=>{const Ge=re.createdAt.localeCompare(se.createdAt);if(Ge!==0)return Ge;const Ct=parseInt(se.id.slice(se.id.lastIndexOf("-")+1),10)||0;return(parseInt(re.id.slice(re.id.lastIndexOf("-")+1),10)||0)-Ct}),At=De?bt.filter(se=>se.id.toLowerCase().includes(De.toLowerCase())||se.title&&se.title.toLowerCase().includes(De.toLowerCase())||se.description&&se.description.toLowerCase().includes(De.toLowerCase())):bt;return t.jsxs("div",{className:"task-form",onDrop:Yt,onDragOver:se=>se.preventDefault(),onPaste:en,children:[t.jsxs("div",{className:"task-form-primary-section",children:[e==="edit"&&r&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"task-form-title",children:"Title"}),t.jsx("input",{ref:vt,autoFocus:!0,id:"task-form-title",type:"text",className:"modal-edit-input",placeholder:"Task title",value:a||"",onChange:se=>r(se.target.value),disabled:P})]}),t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{htmlFor:"task-form-description",className:"description-label-row",children:[t.jsx("span",{children:"Description"}),t.jsx("span",{className:`description-auto-save-status${Tt==="idle"?"":" is-visible"}`,"aria-live":"polite",children:Tt==="saving"?"Saving...":Tt==="saved"?"Saved":""})]}),t.jsxs("div",{className:`description-with-refine${ve?" description--fullscreen":""}`,ref:Ue,onKeyDown:pn,children:[ve&&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:un,"aria-label":"Collapse description",title:"Collapse description",children:t.jsx(Zo,{size:14})})]}),t.jsx("textarea",{ref:Xe,autoFocus:e==="create",id:"task-form-description",value:n,onChange:xn,placeholder:"What needs to be done?",rows:e==="edit"?8:5,disabled:P||ke}),(()=>{const se=!!n.trim()&&!P;return t.jsxs(t.Fragment,{children:[!ve&&t.jsx("button",{type:"button",className:`btn btn-sm description-expand-btn${se?" description-expand-btn--offset":" description-expand-btn--flush"}`,onClick:un,"aria-label":"Expand description",title:"Expand description",children:t.jsx(_c,{size:14})}),se&&t.jsxs("button",{type:"button",className:`btn btn-sm refine-button ${ke?"refine-button--loading":""}`,onClick:()=>J(re=>!re),disabled:ke,"data-testid":"refine-button",title:"Refine description with AI",children:[t.jsx(cs,{size:12,style:{verticalAlign:"middle"}}),ke?"Refining...":"Refine"]})]})})(),We&&t.jsxs("div",{className:"refine-menu refine-menu--modal",onMouseDown:se=>se.preventDefault(),children:[t.jsxs("div",{className:"refine-menu-item",onClick:()=>$t("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:()=>$t("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:()=>$t("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:()=>$t("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"&&(de||be)&&t.jsxs("div",{className:"task-form-description-actions","data-testid":"task-form-description-actions",children:[de&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{const se=n.trim();if(!se){$("Enter a description first","error");return}Ce?.(),de(se)},disabled:P||!n.trim(),"data-testid":"task-form-plan-button",children:"Plan"}),be&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{const se=n.trim();if(!se){$("Enter a description first","error");return}Ce?.(),be(se)},disabled:P||!n.trim(),"data-testid":"task-form-subtask-button",children:"Subtask"})]})]}),Ae,t.jsxs("button",{type:"button",className:"task-form-more-options-toggle",onClick:()=>ct(se=>!se),"aria-expanded":$e,"aria-controls":"task-form-more-options",disabled:P,"data-testid":"task-form-more-options-toggle",children:[t.jsx("span",{children:"More options"}),$e?t.jsx(hi,{size:14}):t.jsx(Cn,{size:14})]}),t.jsxs("div",{id:"task-form-more-options",className:`task-form-more-options${$e?"":" collapsed"}`,"aria-hidden":!$e,hidden:!$e,"data-testid":"task-form-more-options",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Attachments"}),W.length>0&&t.jsx("div",{className:"inline-create-previews",children:W.map((se,re)=>t.jsxs("div",{className:"inline-create-preview",children:[t.jsx("img",{src:se.previewUrl,alt:se.file.name}),t.jsx("button",{type:"button",className:"inline-create-preview-remove",onClick:()=>tn(re),disabled:P,title:"Remove image",children:"×"})]},se.previewUrl))}),t.jsx("input",{ref:St,type:"file",accept:"image/*",onChange:se=>{const re=se.target.files?.[0];re&&(oe([...W,{file:re,previewUrl:URL.createObjectURL(re)}]),se.target.value="")},style:{display:"none"}}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>St.current?.click(),disabled:P,children:"Attach Screenshot"}),t.jsx("small",{children:"You can also paste images or drag & drop"})]}),f&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"task-node-select",children:"Execution Node Override"}),t.jsxs("select",{id:"task-node-select",className:"select",value:m??"",onChange:se=>f(se.target.value||void 0),disabled:P||g,children:[t.jsx("option",{value:"",children:"Use project default / local"}),(p??[]).map(se=>t.jsxs("option",{value:se.id,children:[se.name," (",w$(se.status),")"]},se.id))]}),(()=>{const se=(p??[]).find(re=>re.id===m);return se?t.jsx("div",{className:"task-form-node-status",children:t.jsx(Ka,{status:se.status,showLabel:!0})}):null})(),t.jsx("small",{children:w??"Task override takes priority over project default node routing."})]}),!X&&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:fe,children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>Be(se=>!se),disabled:P,children:o.length>0?`${o.length} selected`:"Add dependencies"}),te&&t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:De,onChange:se=>le(se.target.value),onClick:se=>se.stopPropagation()}),At.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):At.map(se=>t.jsxs("div",{className:`dep-dropdown-item${o.includes(se.id)?" selected":""}`,onClick:()=>Qt(se.id),onMouseDown:re=>re.preventDefault(),children:[t.jsx("span",{className:"dep-dropdown-id",children:se.id}),t.jsx("span",{className:"dep-dropdown-title",children:Kt(se.title||se.description||se.id,30)})]},se.id))]})]}),o.length>0&&t.jsx("div",{className:"selected-deps",children:o.map(se=>t.jsxs("span",{className:"dep-chip",children:[se,t.jsx("button",{type:"button",className:"dep-chip-remove",onClick:()=>Qt(se),disabled:P,children:"×"})]},se))})]})}),(d||h)&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Branch Settings"}),d&&t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"task-working-branch",className:"model-select-label",children:"Working branch"}),t.jsx("input",{id:"task-working-branch",className:"input",value:c||"",onChange:se=>d(se.target.value),placeholder:"e.g. feature/my-task",disabled:P})]}),h&&t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"task-base-branch",className:"model-select-label",children:"Merge target / base branch"}),t.jsx("input",{id:"task-base-branch",className:"input",value:u||"",onChange:se=>h(se.target.value),placeholder:"e.g. main",disabled:P})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Model Configuration"}),b&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"task-priority",className:"model-select-label",children:"Priority"}),t.jsx("select",{id:"task-priority","data-testid":"task-priority-select",value:v??Rs,onChange:se=>b(se.target.value),disabled:P,children:Ca.map(se=>t.jsx("option",{value:se,children:se[0].toUpperCase()+se.slice(1)},se))})]}),L&&ee!==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:ee,onChange:se=>L(se.target.value),disabled:P,children:[t.jsx("option",{value:"standard",children:"Standard"}),t.jsx("option",{value:"fast",children:"Fast"})]})]}),Pe?t.jsx("div",{className:"model-selector-loading",children:"Loading models…"}):_e.length===0?t.jsx("small",{children:"No models available. Configure authentication in Settings."}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"model-preset",className:"model-select-label",children:"Preset"}),t.jsxs("select",{id:"model-preset",value:_==="preset"?Q:_,onChange:se=>{const re=se.target.value;if(re==="default"){A("default"),H(""),N(""),C("");return}if(re==="custom"){A("custom"),H("");return}const Ge=fn.find(Gt=>Gt.id===re),Ct=kf(Ge);A("preset"),H(re),N(Ct.executorValue),C(Ct.validatorValue)},disabled:P,children:[t.jsx("option",{value:"default",children:"Use default"}),fn.length>0?t.jsx("option",{disabled:!0,children:"──────────"}):null,fn.map(se=>t.jsx("option",{value:se.id,children:se.name},se.id)),t.jsx("option",{value:"custom",children:"Custom"})]})]}),_==="preset"&&_n?t.jsxs("small",{children:["Using preset: ",_n.name]}):null,_==="preset"?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>A("custom"),disabled:P,children:"Override"}):null,t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"executor-model",className:"model-select-label",children:"Executor"}),t.jsx(Cs,{id:"executor-model",label:"Executor Model",value:y,onChange:se=>{A("custom"),H(""),N(se)},models:_e,disabled:P||_==="preset",favoriteProviders:mt,onToggleFavorite:ue,favoriteModels:ge,onToggleModelFavorite:Re})]}),t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"validator-model",className:"model-select-label",children:"Reviewer"}),t.jsx(Cs,{id:"validator-model",label:"Reviewer Model",value:S,onChange:se=>{A("custom"),H(""),C(se)},models:_e,disabled:P||_==="preset",favoriteProviders:mt,onToggleFavorite:ue,favoriteModels:ge,onToggleModelFavorite:Re})]}),k&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"planning-model",className:"model-select-label",children:"Planning"}),t.jsx(Cs,{id:"planning-model",label:"Planning Model",value:x||"",onChange:se=>{A("custom"),H(""),k(se)},models:_e,disabled:P||_==="preset",favoriteProviders:mt,onToggleFavorite:ue,favoriteModels:ge,onToggleModelFavorite:Re})]}),z&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"thinking-level",className:"model-select-label",children:"Thinking"}),t.jsxs("select",{id:"thinking-level",value:R||"",onChange:se=>z(se.target.value),disabled:P||_==="preset",children:[t.jsxs("option",{value:"",children:["Default (",jt?.defaultThinkingLevel??"off",")"]}),t.jsx("option",{value:"off",children:"Off"}),t.jsx("option",{value:"minimal",children:"Minimal"}),t.jsx("option",{value:"low",children:"Low"}),t.jsx("option",{value:"medium",children:"Medium"}),t.jsx("option",{value:"high",children:"High"})]})]}),ye&&t.jsxs("div",{className:"model-select-row",children:[t.jsx("label",{htmlFor:"review-level",className:"model-select-label",children:"Review"}),t.jsxs("select",{id:"review-level",value:ie??"",onChange:se=>ye(se.target.value===""?void 0:parseInt(se.target.value,10)),disabled:P,children:[t.jsx("option",{value:"",children:"Default (Auto — triage decides)"}),t.jsx("option",{value:"0",children:"0 — None"}),t.jsx("option",{value:"1",children:"1 — Plan Only"}),t.jsx("option",{value:"2",children:"2 — Plan and Code"}),t.jsx("option",{value:"3",children:"3 — Full"})]})]})]})]}),ae,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:Qe.length>0&&Qe.map(se=>t.jsxs("label",{className:"checkbox-label workflow-step-item","data-testid":`workflow-step-checkbox-${se.id}`,children:[t.jsx("input",{type:"checkbox",checked:M.includes(se.id),onChange:re=>{T(re.target.checked?[...M,se.id]:M.filter(Ge=>Ge!==se.id))},disabled:P}),t.jsxs("div",{children:[t.jsxs("span",{className:"workflow-step-name",children:[se.name,k$(se.phase||"pre-merge",se.id,"workflow-step-phase")]}),t.jsx("div",{className:"workflow-step-description",children:se.description})]})]},se.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((se,re)=>{const Ge=Nt.get(se);return t.jsxs("div",{className:"workflow-step-order-item","data-testid":`workflow-step-order-item-${se}`,children:[t.jsx("span",{className:"workflow-step-order-number",children:re+1}),t.jsx("span",{className:"workflow-step-order-name",children:Ge?.name||se}),t.jsxs("div",{className:"workflow-step-order-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>et(re),disabled:P||re===0,"data-testid":`workflow-step-move-up-${se}`,title:"Move up",children:t.jsx(hi,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>at(re),disabled:P||re===M.length-1,"data-testid":`workflow-step-move-down-${se}`,title:"Move down",children:t.jsx(Cn,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Je(se),disabled:P,"data-testid":`workflow-step-remove-${se}`,title:"Remove",children:t.jsx(kn,{})})]})]},se)})]})]}),(me||xe)&&t.jsxs("div",{className:"form-group","data-testid":"task-form-github-tracking",children:[t.jsx("label",{children:"GitHub Tracking"}),me&&t.jsxs("label",{className:"checkbox-label",htmlFor:"task-github-tracking-enabled",children:[t.jsx("input",{id:"task-github-tracking-enabled",type:"checkbox",checked:Y===!0,onChange:se=>{bn.current=!0,me(se.target.checked)},disabled:P}),"Enable GitHub issue tracking for this task"]}),xe&&t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"task-github-repo-override",className:"model-select-label",children:"Repository (owner/repo)"}),t.jsx("input",{id:"task-github-repo-override",className:"input",value:B||"",onChange:se=>xe(se.target.value),placeholder:an||"owner/repo",disabled:P}),vn?t.jsx("div",{className:"form-error",children:"Repository must be in owner/repo format."}):null]})]})]})]})}const Fd={p:({children:e,...n})=>t.jsx("p",{...n,children:Gs(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Gs(e)}),code:({children:e,...n})=>t.jsx("code",{...n,children:Gs(e)}),pre:({children:e,className:n,...s})=>t.jsx("pre",{...s,className:["workflow-markdown-pre",n].filter(Boolean).join(" "),children:Gs(e)}),table:({children:e,className:n,...s})=>t.jsx("table",{...s,className:["workflow-markdown-table",n].filter(Boolean).join(" "),children:e})};function j$(e){switch(e){case"passed":return"Passed";case"failed":return"Failed";case"advisory_failure":return"Advisory failure";case"skipped":return"Skipped";case"pending":return"Running…";default:return e}}function N$(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 S$(e){return e?new Date(e).toLocaleString():null}function C$(e){const n=e.split(`
686
+ `);return n.length<=1?e:`${n.length} lines`}function Ml(e,n,s){const a=e==="post-merge"?"phase-badge--post-merge":"phase-badge--pre-merge";return t.jsx("span",{className:`phase-badge ${a}`,"data-testid":`${s}-${n}`,children:e==="post-merge"?"Post-merge":"Pre-merge"})}function E$({entries:e,startedAt:n,stepId:s}){const a=i.useRef(null),r=new Date(n).getTime(),o=e.filter(l=>new Date(l.timestamp).getTime()>=r);return i.useEffect(()=>{const l=a.current;l&&(l.scrollTop=l.scrollHeight)},[o.length]),o.length===0?t.jsx("div",{className:"workflow-live-log","data-testid":`workflow-live-log-${s}`,children:t.jsx("div",{className:"workflow-live-log-empty",children:"Waiting for agent output…"})}):t.jsx("div",{ref:a,className:"workflow-live-log","data-testid":`workflow-live-log-${s}`,children:o.map((l,c)=>l.type==="tool"?t.jsxs("div",{className:"workflow-live-log-tool",children:["⚡ ",Ns(l.text),l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",Ns(l.detail)]})]},c):l.type==="tool_result"?t.jsxs("div",{className:"workflow-live-log-tool-result",children:["✓ ",Ns(l.text),l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",Ns(l.detail)]})]},c):l.type==="tool_error"?t.jsxs("div",{className:"workflow-live-log-tool-error",children:["✗ ",Ns(l.text),l.detail&&t.jsxs("span",{className:"workflow-live-log-detail",children:[" — ",Ns(l.detail)]})]},c):l.type==="thinking"?t.jsx("div",{className:"workflow-live-log-thinking",children:Ns(l.text)},c):t.jsx("span",{className:"workflow-live-log-text",children:Ns(l.text)},c))})}function _$({taskId:e,results:n,loading:s,enabledWorkflowSteps:a,canEdit:r,projectId:o,isTaskInProgress:l,onWorkflowStepsChange:c}){const[d,u]=i.useState({}),[h,m]=i.useState({}),[f,p]=i.useState(null),[g,w]=i.useState([]),[v,b]=i.useState(!1),y=n.some(j=>j.status==="pending"),{entries:N}=Uv(e,!!l&&y,o);i.useEffect(()=>{let j=!1;return sl(o).then(q=>{j||w(q.filter(de=>de.enabled))}).catch(()=>{j||w([])}),()=>{j=!0}},[o]);const S=a??[],C=i.useMemo(()=>g.map(j=>({id:j.id,name:j.name,description:j.description,phase:j.phase||"pre-merge"})),[g]),x=i.useMemo(()=>new Map(C.map(j=>[j.id,j])),[C]),k=j=>{u(q=>({...q,[j]:!q[j]}))},R=j=>{m(q=>{const de=q[j]??"markdown";return{...q,[j]:de==="markdown"?"plain":"markdown"}})},z=j=>{p(j)},_=()=>{p(null)};i.useEffect(()=>{if(!f)return;const j=q=>{q.key==="Escape"&&_()};return document.addEventListener("keydown",j),()=>{document.removeEventListener("keydown",j)}},[f]);const A=i.useCallback((j,q)=>{if(c){if(q){if(S.includes(j)){c(S);return}c([...S,j]);return}c(S.filter(de=>de!==j))}},[c,S]),Q=i.useCallback(j=>{if(!c||j<=0)return;const q=[...S];[q[j-1],q[j]]=[q[j],q[j-1]],c(q)},[c,S]),H=i.useCallback(j=>{if(!c||j>=S.length-1)return;const q=[...S];[q[j],q[j+1]]=[q[j+1],q[j]],c(q)},[c,S]),M=i.useCallback(j=>{c&&c(S.filter(q=>q!==j))},[c,S]),T=n.length>0,F=S.length>0;i.useEffect(()=>{r||b(!1)},[r]);const W=i.useMemo(()=>S.map(j=>{const q=x.get(j);return{id:j,name:q?.name||j,description:q?.description||"Step definition not found.",phase:q?.phase||"pre-merge"}}),[S,x]),oe=()=>!r||!v||s?null:t.jsxs("div",{className:"workflow-results-editor","data-testid":"workflow-steps-editor",children:[t.jsxs("div",{className:"workflow-steps-section",children:[t.jsx("small",{className:"workflow-steps-description",children:"Select steps to run after task implementation completes"}),t.jsx("div",{className:"workflow-steps-list",children:C.map(j=>t.jsxs("label",{className:"checkbox-label workflow-step-item","data-testid":`workflow-step-checkbox-${j.id}`,children:[t.jsx("input",{type:"checkbox",checked:S.includes(j.id),onChange:q=>A(j.id,q.target.checked)}),t.jsxs("div",{children:[t.jsxs("span",{className:"workflow-step-name",children:[j.name,Ml(j.phase,j.id,"workflow-step-phase")]}),t.jsx("div",{className:"workflow-step-description",children:j.description})]})]},j.id))})]}),S.length>1&&t.jsxs("div",{className:"workflow-step-order","data-testid":"workflow-step-order",children:[t.jsx("small",{className:"workflow-step-order-label",children:"Execution order:"}),S.map((j,q)=>{const de=x.get(j);return t.jsxs("div",{className:"workflow-step-order-item","data-testid":`workflow-step-order-item-${j}`,children:[t.jsx("span",{className:"workflow-step-order-number",children:q+1}),t.jsx("span",{className:"workflow-step-order-name",children:de?.name||j}),t.jsxs("div",{className:"workflow-step-order-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>Q(q),disabled:q===0,"data-testid":`workflow-step-move-up-${j}`,title:"Move up",children:t.jsx(hi,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>H(q),disabled:q===S.length-1,"data-testid":`workflow-step-move-down-${j}`,title:"Move down",children:t.jsx(Cn,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>M(j),"data-testid":`workflow-step-remove-${j}`,title:"Remove",children:t.jsx(kn,{})})]})]},j)})]})]}),D=()=>{if(s)return t.jsxs("div",{className:"workflow-results-loading","data-testid":"workflow-results-loading",children:[t.jsx("div",{className:"workflow-results-spinner"}),t.jsx("span",{children:"Loading workflow results…"})]});if(!T)return t.jsxs("div",{className:"workflow-results-empty","data-testid":"workflow-results-empty",children:[t.jsx("p",{children:"No workflow steps configured for this task."}),t.jsx("p",{className:"workflow-results-empty-hint",children:"Pre-merge steps run after implementation, before merge. Post-merge steps run after merge succeeds."})]});const j=n.filter(ae=>ae.status==="passed").length,q=n.filter(ae=>ae.status==="failed").length,de=n.filter(ae=>ae.status==="advisory_failure"),be=n.filter(ae=>ae.status==="skipped").length,Ce=n.filter(ae=>ae.status==="pending").length,Ae=[`${n.length} step${n.length!==1?"s":""}`];return j>0&&Ae.push(`${j} passed`),q>0&&Ae.push(`${q} failed`),de.length>0&&Ae.push(`${de.length} advisory`),be>0&&Ae.push(`${be} skipped`),Ce>0&&Ae.push(`${Ce} running`),t.jsxs("div",{className:"workflow-results-list","data-testid":"workflow-results-list",children:[t.jsx("div",{className:"workflow-results-summary-bar","data-testid":"workflow-results-summary",children:Ae.join(" · ")}),de.length>0&&t.jsxs("div",{className:"workflow-polish-notes","data-testid":"workflow-polish-notes",children:[t.jsx("h4",{children:"Polish notes"}),t.jsx("p",{children:"Advisory workflow steps flagged non-blocking improvements:"}),t.jsx("ul",{children:de.map((ae,X)=>t.jsxs("li",{children:[t.jsxs("strong",{children:[ae.workflowStepName,":"]})," ",ae.output||"Needs follow-up review."]},`advisory-${ae.workflowStepId}-${X}`))})]}),n.map((ae,X)=>{const pe=ae.phase||"pre-merge",ie=d[ae.workflowStepId]??!1;return t.jsxs("div",{className:`workflow-result-item workflow-result-item--${ae.status}`,"data-testid":`workflow-result-item-${ae.workflowStepId}`,children:[t.jsxs("div",{className:"workflow-result-header",children:[t.jsxs("div",{className:"workflow-result-name",children:[ae.workflowStepName,Ml(pe,ae.workflowStepId,"workflow-result-phase")]}),t.jsxs("div",{className:"workflow-result-badges",children:[ae.verdict&&t.jsx("span",{className:`workflow-verdict-badge workflow-verdict-badge--${ae.verdict}`,"data-testid":`workflow-verdict-badge-${ae.workflowStepId}`,children:ae.verdict}),t.jsx("span",{className:`workflow-result-badge workflow-result-badge--${ae.status}`,"data-testid":`workflow-result-badge-${ae.workflowStepId}`,children:j$(ae.status)})]})]}),ae.notes&&ae.status!=="pending"&&t.jsxs("div",{className:"workflow-result-notes","data-testid":`workflow-result-notes-${ae.workflowStepId}`,children:[t.jsx("span",{className:"workflow-result-notes-label",children:"Notes:"}),t.jsx(ei,{remarkPlugins:[ti],components:Fd,children:ae.notes})]}),t.jsxs("div",{className:"workflow-result-meta",children:[ae.startedAt&&t.jsxs("span",{className:"workflow-result-timestamp",children:["Started: ",S$(ae.startedAt)]}),ae.completedAt&&t.jsx("span",{className:"workflow-result-duration",children:N$(ae.startedAt,ae.completedAt)})]}),ae.status==="pending"&&ae.startedAt?t.jsx(E$,{entries:N,startedAt:ae.startedAt,stepId:ae.workflowStepId}):ae.output?t.jsxs("div",{className:"workflow-result-output-section",children:[t.jsxs("div",{className:"workflow-result-output-header",children:[t.jsx("span",{className:"workflow-result-output-label",children:"Output:"}),t.jsx("button",{type:"button",className:"btn btn-sm workflow-result-toggle",onClick:()=>k(ae.workflowStepId),"data-testid":`workflow-result-toggle-${ae.workflowStepId}`,children:ie?"Hide output":"Show output"}),!ie&&t.jsx("span",{className:"workflow-result-output-preview","data-testid":`workflow-result-preview-${ae.workflowStepId}`,children:C$(ae.output)}),ie&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm workflow-result-mode-toggle",onClick:()=>R(ae.workflowStepId),"data-testid":`workflow-result-mode-toggle-${ae.workflowStepId}`,title:(h[ae.workflowStepId]??"markdown")==="markdown"?"Switch to plain text":"Switch to markdown",children:(h[ae.workflowStepId]??"markdown")==="markdown"?"Markdown":"Plain"}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm workflow-result-expand-toggle",onClick:()=>z(ae.workflowStepId),"data-testid":`workflow-result-expand-${ae.workflowStepId}`,title:"Expand output",children:t.jsx(_c,{size:12})})]})]}),ie&&t.jsx("div",{className:`workflow-result-output${(h[ae.workflowStepId]??"markdown")==="markdown"?" workflow-result-output--markdown":""}`,"data-testid":`workflow-result-output-${ae.workflowStepId}`,children:(h[ae.workflowStepId]??"markdown")==="markdown"?t.jsx("div",{className:"markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],components:Fd,children:ae.output})}):t.jsx("pre",{className:"workflow-result-output-text",children:Ns(ae.output??"")})})]}):null]},`${ae.workflowStepId}-${X}`)})]})},E=r?t.jsx("button",{type:"button",className:"btn btn-sm workflow-results-edit-toggle",onClick:()=>b(j=>!j),"data-testid":"workflow-steps-edit-toggle","aria-label":v?"Done editing workflow steps":"Edit workflow steps",title:v?"Done":"Edit",children:v?t.jsxs(t.Fragment,{children:[t.jsx(bs,{size:14}),"Done"]}):t.jsxs(t.Fragment,{children:[t.jsx(Fs,{size:14}),"Edit"]})}):null,P=!s&&!T&&F,$=r&&T;return t.jsxs("div",{className:"workflow-results-tab","data-task-id":e,children:[P?t.jsxs("div",{className:"workflow-configured-steps","data-testid":"workflow-configured-steps",children:[t.jsxs("div",{className:"workflow-configured-header","data-testid":"workflow-configured-header",children:[t.jsxs("div",{className:"workflow-configured-title-row",children:[t.jsx("h4",{children:"Configured Workflow Steps"}),t.jsxs("span",{className:"workflow-configured-count","data-testid":"workflow-configured-count",children:[W.length," step",W.length===1?"":"s"]})]}),E]}),t.jsx("div",{className:"workflow-configured-list","data-testid":"workflow-configured-list",children:W.map(j=>t.jsxs("div",{className:"workflow-configured-item","data-testid":`workflow-configured-step-${j.id}`,children:[t.jsxs("div",{className:"workflow-configured-name",children:[t.jsx("span",{className:"workflow-configured-name-text",children:j.name}),Ml(j.phase,j.id,"workflow-configured-phase")]}),t.jsx("p",{className:"workflow-configured-description",children:j.description})]},j.id))}),t.jsx("p",{className:"workflow-results-empty-hint",children:"Pre-merge steps run after implementation, before merge. Post-merge steps run after merge succeeds."}),oe()]}):t.jsxs(t.Fragment,{children:[$&&t.jsxs("div",{className:"workflow-results-edit-header","data-testid":"workflow-results-edit-header",children:[t.jsx("h4",{children:"Workflow Steps"}),E]}),D(),oe()]}),f&&(()=>{const j=n.find(be=>be.workflowStepId===f);if(!j)return null;const q=h[j.workflowStepId]??"markdown",de=j.phase||"pre-merge";return t.jsx("div",{className:"workflow-output-modal-overlay",onClick:be=>{be.target===be.currentTarget&&_()},"data-testid":"workflow-output-modal",children:t.jsxs("div",{className:"workflow-output-modal",role:"dialog","aria-modal":"true",children:[t.jsxs("div",{className:"workflow-output-modal-header",children:[t.jsxs("div",{className:"workflow-output-modal-title",children:[t.jsx("span",{className:"workflow-output-modal-name",children:j.workflowStepName}),Ml(de,j.workflowStepId,"workflow-output-modal-phase")]}),t.jsxs("div",{className:"workflow-output-modal-controls",children:[t.jsx("button",{type:"button",className:"btn btn-sm workflow-result-mode-toggle",onClick:()=>R(j.workflowStepId),"data-testid":"workflow-output-modal-mode-toggle",title:q==="markdown"?"Switch to plain text":"Switch to markdown",children:q==="markdown"?"Markdown":"Plain"}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm workflow-output-modal-close",onClick:_,"data-testid":"workflow-output-modal-close","aria-label":"Close",children:t.jsx(kn,{size:16})})]})]}),t.jsx("div",{className:"workflow-output-modal-body",children:t.jsx("div",{className:`workflow-result-output workflow-result-output--expanded${q==="markdown"?" workflow-result-output--markdown":""}`,"data-testid":"workflow-output-modal-content",children:q==="markdown"?t.jsx("div",{className:"markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],components:Fd,children:j.output})}):t.jsx("pre",{className:"workflow-result-output-text",children:Ns(j.output??"")})})})]})})})()]})}function M$(e){return e==="block"?"Block execution":e==="fallback-local"?"Fall back to local":"Not configured"}const A$=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]);function R$(e){return e!==void 0&&e!=="online"}function I$({task:e,settings:n,addToast:s,onTaskUpdated:a}){const[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState(null),[h,m]=i.useState(e.nodeId??""),[f,p]=i.useState(!1),g=i.useRef(e.id);i.useEffect(()=>{g.current=e.id,m(e.nodeId??""),p(!1)},[e.id,e.nodeId]),i.useEffect(()=>{c(!0),u(null),ac().then(_=>{o(_)}).catch(_=>{u(Me(_)||"Failed to load nodes")}).finally(()=>{c(!1)})},[]);const w=i.useMemo(()=>new Map(r.map(_=>[_.id,_])),[r]),v=i.useMemo(()=>[...r].sort((_,A)=>_.name.localeCompare(A.name)),[r]),b=n,y=e.nodeId??b?.defaultNodeId??null,N=e.nodeId?"Per-task override":b?.defaultNodeId?"Project default":"No routing",S=y?w.get(y):void 0,C=S?`${S.name} (${S.type})`:y?`${y} (node unavailable or unknown)`:"Local (no routing configured)",x=e.column==="in-progress"||A$.has(e.status),k=x||f||l,R=i.useCallback(async _=>{if(_===h)return;const A=e.id,Q=h;m(_),p(!0);try{const H=await Ts(A,{nodeId:_||null});if(g.current!==A)return;m(H.nodeId??""),a?.(H),s(_?"Node override updated":"Node override cleared","success")}catch(H){if(g.current!==A)return;m(Q),s(Me(H)||"Failed to update node override","error")}finally{g.current===A&&p(!1)}},[s,a,h,e.id]),z=i.useCallback(()=>{R("")},[R]);return t.jsxs("div",{className:"routing-tab",children:[t.jsx("h4",{children:"Task Routing"}),t.jsx("p",{className:"routing-tab__intro",children:"View the effective execution node and control per-task node override."}),t.jsxs("section",{className:"routing-tab__section",children:[t.jsx("h5",{children:"Routing Summary"}),t.jsxs("div",{className:"routing-summary-grid",role:"list",children:[t.jsxs("div",{className:"routing-summary-row",role:"listitem",children:[t.jsx("span",{className:"routing-summary-label",children:"Effective node"}),t.jsxs("span",{className:"routing-summary-value",children:[S?t.jsx(Ka,{status:S.status,compact:!0}):null,C,R$(S?.status)?t.jsx("span",{className:"routing-summary-warning",children:"Unhealthy"}):null]})]}),t.jsxs("div",{className:"routing-summary-row",role:"listitem",children:[t.jsx("span",{className:"routing-summary-label",children:"Routing source"}),t.jsx("span",{className:"routing-summary-value",children:N})]}),t.jsxs("div",{className:"routing-summary-row",role:"listitem",children:[t.jsx("span",{className:"routing-summary-label",children:"Unavailable-node policy"}),t.jsx("span",{className:"routing-summary-value",children:M$(b?.unavailableNodePolicy)})]})]}),x&&y?t.jsx("div",{className:"routing-tab__info-banner",children:"Routing is locked while this task is active. Node override cannot be changed until the task is no longer active."}):null]}),t.jsxs("section",{className:"routing-tab__section",children:[t.jsx("h5",{children:"Node Override"}),x?t.jsx("div",{className:"routing-tab__warning-banner",children:"Node override cannot be changed while the task is active."}):null,t.jsx("label",{className:"routing-tab__selector-label",htmlFor:`routing-node-${e.id}`,children:"Select execution node"}),t.jsxs("select",{id:`routing-node-${e.id}`,className:"select routing-tab__selector",value:h,disabled:k,onChange:_=>{R(_.target.value)},children:[t.jsx("option",{value:"",children:"Use project default"}),v.map(_=>t.jsxs("option",{value:_.id,title:`Status: ${_.status}`,children:[_.name," (",_.type,") — ",_.status]},_.id))]}),d?t.jsx("div",{className:"routing-tab__error",children:d}):null,e.nodeId?t.jsxs("div",{className:"routing-tab__override-row",children:[t.jsxs("span",{className:"routing-tab__override-text",children:["Override set to: ",w.get(e.nodeId)?.name??e.nodeId]}),t.jsx("button",{type:"button",className:"btn btn-sm",disabled:x||f,onClick:z,children:"Clear override"})]}):null]})]})}const T$=/^[a-zA-Z0-9_-]{1,64}$/,P$=200;function Sf(e){return e?new Date(e).toLocaleString():""}function $$(e,n=P$){return e.length<=n?e:e.substring(0,n)+"…"}function D$({taskId:e,addToast:n,onTaskUpdated:s,projectId:a,canEdit:r=!1}){const[o,l]=i.useState([]),[c,d]=i.useState(!0),[u,h]=i.useState(null),[m,f]=i.useState(""),[p,g]=i.useState(null),[w,v]=i.useState(""),[b,y]=i.useState(null),[N,S]=i.useState([]),[C,x]=i.useState(!1),[k,R]=i.useState(!1),[z,_]=i.useState(""),[A,Q]=i.useState(""),[H,M]=i.useState(!1),[T,F]=i.useState(null),[W,oe]=i.useState(null),[D,E]=i.useState(!1),P=i.useCallback(async()=>{try{const X=await lS(e,a);l(X)}catch(X){n(Me(X)||"Failed to load documents","error")}finally{d(!1)}},[e,a,n]);i.useEffect(()=>{P()},[P]);async function $(X){u===X.key?(h(null),f(""),g(null),v(""),y(null),S([]),E(!1)):(h(X.key),f(X.content),g(null),v(""),y(null),S([]),E(!1))}async function j(X){if(b===X)y(null),S([]);else{y(X),x(!0);try{const pe=await cS(e,X,a);S(pe)}catch(pe){n(Me(pe)||"Failed to load revisions","error")}finally{x(!1)}}}function q(){u&&(g(u),v(m))}function de(){g(null),v("")}async function be(){if(!(!p||!w.trim())){M(!0);try{await hh(e,p,w,{},a),g(null),v(""),await P();const X=o.find(pe=>pe.key===p);X&&f(X.content),n("Document saved","success")}catch(X){n(Me(X)||"Failed to save document","error")}finally{M(!1)}}}async function Ce(){const X=z.trim(),pe=A.trim();if(!X){n("Document key is required","error");return}if(!T$.test(X)){n("Invalid key format. Use 1-64 alphanumeric characters, hyphens, or underscores.","error");return}if(!pe){n("Content is required","error");return}M(!0);try{await hh(e,X,pe,{},a),R(!1),_(""),Q(""),await P(),n("Document created","success")}catch(ie){n(Me(ie)||"Failed to create document","error")}finally{M(!1)}}async function Ae(X){F(X);try{await dS(e,X,a),oe(null),F(null),u===X&&(h(null),f("")),b===X&&(y(null),S([])),await P(),n("Document deleted","success")}catch(pe){n(Me(pe)||"Failed to delete document","error")}finally{F(null)}}function ae(X){f(X.content),g(null),v("")}return c?t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Documents"}),t.jsx("div",{className:"detail-log-empty",children:"Loading documents…"})]}):t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Documents"}),k&&t.jsxs("div",{className:"task-document-create-form",children:[t.jsx("h5",{children:"New Document"}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"doc-key",children:"Key"}),t.jsx("input",{id:"doc-key",type:"text",className:"task-document-key-input",value:z,onChange:X=>_(X.target.value),placeholder:"e.g., plan, notes, research",disabled:H}),t.jsx("span",{className:"form-hint",children:"Alphanumeric, hyphens, underscores (1-64 chars)"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"doc-content",children:"Content"}),t.jsx("textarea",{id:"doc-content",value:A,onChange:X=>Q(X.target.value),rows:6,placeholder:"Enter document content…",disabled:H})]}),t.jsxs("div",{className:"form-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{R(!1),_(""),Q("")},disabled:H,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void Ce(),disabled:H||!z.trim()||!A.trim(),children:H?"Creating…":"Create"})]})]}),o.length===0&&!k?t.jsx("div",{className:"detail-log-empty",children:"No documents yet."}):t.jsx("div",{className:"task-documents-list",children:o.map(X=>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(ja,{size:14}),t.jsx("span",{className:"task-document-key",children:X.key}),t.jsxs("span",{className:"task-document-revision-badge",children:["v",X.revision]})]}),t.jsxs("div",{className:"task-document-meta",children:[t.jsx("span",{className:"task-document-author",children:X.author}),t.jsx("span",{className:"task-document-timestamp",children:Sf(X.updatedAt||X.createdAt)})]})]}),u===X.key&&p!==X.key&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"task-document-content-header",children:t.jsx("button",{className:"btn btn-sm document-mode-toggle",onClick:()=>E(pe=>!pe),"aria-label":D?"Switch to plain text":"Switch to markdown","aria-pressed":D,title:D?"Switch to plain text":"Switch to markdown",children:D?"Markdown":"Plain"})}),t.jsx("div",{className:"task-document-content",children:D?t.jsx("div",{className:"task-document-content-markdown",children:t.jsx("div",{className:"markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],children:m})})}):t.jsx("pre",{className:"task-document-content-text",children:m})}),b===X.key&&t.jsxs("div",{className:"task-document-revisions",children:[t.jsx("h5",{children:"Revision History"}),C?t.jsx("div",{className:"detail-log-empty",children:"Loading…"}):N.length<=1?t.jsx("div",{className:"detail-log-empty",children:"No previous revisions."}):t.jsx("div",{className:"task-document-revision-list",children:N.filter(pe=>pe.revision<X.revision).sort((pe,ie)=>ie.revision-pe.revision).map(pe=>t.jsxs("div",{className:"task-document-revision-item",onClick:()=>ae(pe),children:[t.jsxs("div",{className:"revision-header",children:[t.jsxs("span",{className:"revision-badge",children:["v",pe.revision]}),t.jsx("span",{className:"revision-author",children:pe.author}),t.jsx("span",{className:"revision-timestamp",children:Sf(pe.createdAt)})]}),t.jsx("div",{className:"revision-preview",children:$$(pe.content,100)})]},pe.id))})]})]}),p===X.key&&t.jsxs("div",{className:"task-document-edit-form",children:[t.jsx("textarea",{value:w,onChange:pe=>v(pe.target.value),rows:10,disabled:H}),t.jsxs("div",{className:"form-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:de,disabled:H,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void be(),disabled:H||!w.trim(),children:H?"Saving…":"Save"})]})]}),t.jsxs("div",{className:"task-document-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>void $(X),children:u===X.key?t.jsxs(t.Fragment,{children:[t.jsx(hi,{size:14})," Collapse"]}):t.jsxs(t.Fragment,{children:[t.jsx(Cn,{size:14})," Expand"]})}),u===X.key&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm",onClick:()=>void j(X.key),children:[t.jsx(qa,{size:14})," History"]}),r&&p!==X.key&&t.jsx("button",{className:"btn btn-sm",onClick:q,children:"Edit"}),r&&(W===X.key?t.jsxs("div",{className:"confirm-delete-actions",children:[t.jsx("span",{children:"Delete?"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>void Ae(X.key),disabled:T===X.key,children:T===X.key?"…":"Yes"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>oe(null),disabled:T===X.key,children:"No"})]}):t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>oe(X.key),children:t.jsx(zn,{size:14})}))]})]})]},X.key))}),r&&!k&&t.jsxs("button",{className:"btn btn-sm task-document-new-btn",onClick:()=>R(!0),children:[t.jsx(Bn,{size:14})," New Document"]})]})}function pa(e){return e.toLocaleString()}function L$(e){return`${(e*100).toFixed(1)}%`}function zd(e){const n=new Date(e);return Number.isNaN(n.getTime())?e:n.toLocaleString()}function go(e){if(e<1e3)return`${Math.round(e)} ms`;const n=e/1e3;if(n<60)return`${n.toFixed(1)} s`;const s=Math.floor(n/60),a=Math.round(n%60);return`${s}m ${a}s`}function O$(e){const n=Date.now(),s=e.map(o=>{if(!o.startedAt)return null;const l=new Date(o.startedAt).getTime();if(Number.isNaN(l))return null;let c;if(o.completedAt){const d=new Date(o.completedAt).getTime();if(Number.isNaN(d)||d<l)return null;c=d}else c=Math.max(l,n);return{name:o.workflowStepName||o.workflowStepId,durationMs:c-l}}).filter(o=>o!==null),a=Sx(e,n)??0,r=s.reduce((o,l)=>!o||l.durationMs>o.durationMs?l:o,void 0);return{timedStepCount:s.length,totalDurationMs:a,longestStep:r}}function F$({tokenUsage:e,loading:n,task:s}){const a=Date.now(),r=jx(s?.log??[]),o=r.filter(g=>typeof g.durationMs=="number"),l=o.reduce((g,w)=>g+(w.durationMs??0),0),c=Nx(s?.log)??0,d=typeof s?.timedExecutionMs=="number"?s.timedExecutionMs:Math.max(l,c),u=o.reduce((g,w)=>!g||(w.durationMs??0)>(g.durationMs??0)?w:g,void 0),h=O$(s?.workflowStepResults??[]),f=Cx(s?.executionStartedAt,s?.executionCompletedAt,a)??(typeof s?.timedExecutionMs=="number"?s.timedExecutionMs:d+h.totalDurationMs),p=s?.steps?.length??0;return t.jsxs("section",{className:"task-token-stats-panel","aria-label":"Task execution statistics",children:[t.jsx("h4",{children:"Execution & Token Stats"}),t.jsxs("div",{className:"task-token-stats-panel__section",children:[t.jsx("h5",{children:"Execution Timing"}),t.jsxs("div",{className:"task-token-stats-panel__grid",role:"list","aria-label":"Execution timing metrics",children:[t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Timing events"}),t.jsx("span",{className:"task-token-stats-panel__value",children:r.length.toLocaleString()})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Timed duration"}),t.jsx("span",{className:"task-token-stats-panel__value",children:go(d)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Workflow timed steps"}),t.jsx("span",{className:"task-token-stats-panel__value",children:h.timedStepCount.toLocaleString()})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Workflow runtime"}),t.jsx("span",{className:"task-token-stats-panel__value",children:go(h.totalDurationMs)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Total execution time"}),t.jsx("span",{className:"task-token-stats-panel__value",children:go(f)})]})]}),t.jsxs("dl",{className:"task-token-stats-panel__timestamps",children:[t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"Longest timing event"}),t.jsx("dd",{children:u?.durationMs?`${u.summary} (${go(u.durationMs)})`:"No timed events recorded yet."})]}),t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"Longest workflow step"}),t.jsx("dd",{children:h.longestStep?`${h.longestStep.name} (${go(h.longestStep.durationMs)})`:"No completed workflow step timings yet."})]})]})]}),t.jsxs("div",{className:"task-token-stats-panel__section",children:[t.jsx("h5",{children:"Execution Details"}),t.jsxs("dl",{className:"task-token-stats-panel__details",children:[t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Execution mode"}),t.jsx("dd",{children:s?.executionMode==="fast"?"Fast":"Standard"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Runtime status"}),t.jsx("dd",{children:s?.status??"Not set"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Paused"}),t.jsx("dd",{children:s?.paused?"Yes":"No"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Step progress"}),t.jsx("dd",{children:p>0?`${Math.min((s?.currentStep??0)+1,p)} / ${p}`:"No steps"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Retries (recovery / workflow / merge / task_done)"}),t.jsx("dd",{children:`${s?.recoveryRetryCount??0} / ${s?.workflowStepRetries??0} / ${s?.mergeRetries??0} / ${s?.taskDoneRetryCount??0}`})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Recovery state"}),t.jsx("dd",{children:s?.nextRecoveryAt?`Next recovery at ${zd(s.nextRecoveryAt)}`:"No scheduled recovery"})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Self-heal counters"}),t.jsx("dd",{children:`stuck kills: ${s?.stuckKillCount??0}, post-review fixes: ${s?.postReviewFixCount??0}`})]}),t.jsxs("div",{className:"task-token-stats-panel__detail-row",children:[t.jsx("dt",{children:"Runtime links"}),t.jsx("dd",{children:[s?.assignedAgentId?`agent ${s.assignedAgentId}`:null,s?.checkedOutBy?`checkout ${s.checkedOutBy}`:null,s?.blockedBy?`blocked by ${s.blockedBy}`:null,s?.sessionFile?"has session":null].filter(Boolean).join(", ")||"No runtime links"})]})]})]}),t.jsxs("div",{className:"task-token-stats-panel__section",children:[t.jsx("h5",{children:"Token Usage"}),!e&&n?t.jsx("div",{className:"task-token-stats-panel__loading",role:"status","aria-live":"polite",children:"Loading token statistics…"}):e?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"task-token-stats-panel__grid",role:"list","aria-label":"Task token totals",children:[t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Input"}),t.jsx("span",{className:"task-token-stats-panel__value",children:pa(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:pa(e.outputTokens)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Cache read"}),t.jsx("span",{className:"task-token-stats-panel__value",children:pa(e.cachedTokens)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Cache write"}),t.jsx("span",{className:"task-token-stats-panel__value",children:pa(e.cacheWriteTokens??0)})]}),t.jsxs("div",{className:"task-token-stats-panel__metric",role:"listitem",children:[t.jsx("span",{className:"task-token-stats-panel__label",children:"Total"}),t.jsx("span",{className:"task-token-stats-panel__value",children:pa(e.totalTokens)})]})]}),t.jsxs("div",{className:"task-token-stats-panel__cache-ratio",children:[t.jsx("span",{className:"task-token-stats-panel__cache-ratio-label",children:"Cache hit ratio:"})," ",t.jsx("span",{className:"task-token-stats-panel__cache-ratio-value",children:e.inputTokens+e.cachedTokens>0?L$(e.cachedTokens/(e.inputTokens+e.cachedTokens)):"—"})]}),t.jsxs("div",{className:"task-token-stats-panel__cache-breakdown",children:["(read ",pa(e.cachedTokens)," / write ",pa(e.cacheWriteTokens??0)," / input ",pa(e.inputTokens),")"]}),t.jsxs("dl",{className:"task-token-stats-panel__timestamps",children:[t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"First used"}),t.jsx("dd",{children:t.jsx("time",{dateTime:e.firstUsedAt,children:zd(e.firstUsedAt)})})]}),t.jsxs("div",{className:"task-token-stats-panel__timestamp-row",children:[t.jsx("dt",{children:"Last used"}),t.jsx("dd",{children:t.jsx("time",{dateTime:e.lastUsedAt,children:zd(e.lastUsedAt)})})]})]})]}):t.jsx("div",{className:"task-token-stats-panel__empty",role:"status",children:"No token usage recorded for this task yet."})]})]})}const Qv=/^In-review stall surfaced \[([^\]]+)\]/;function z$(e,n){if(!e.log?.length)return;const s=[...e.log].reverse();for(const[a,r]of s.entries()){const o=r.action.match(Qv);if(!(!o||o[1]!==n))return{entry:r,reversedIndex:a,code:n}}}const Lm=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]),Cf=/^Stale paused review surfaced \[([^\]]+)\]/,Ef={p:({children:e,...n})=>t.jsx("p",{...n,children:Gs(e)}),li:({children:e,...n})=>t.jsx("li",{...n,children:Gs(e)}),code:({children:e,...n})=>{const s=typeof e=="string"?e:wa.Children.toArray(e).join(""),a=Ns(s);return a.length===1&&typeof a[0]=="string"?t.jsx("code",{...n,children:e}):t.jsx("code",{...n,children:a})}};function B$(e){let n=null;for(const s of e){if(s.agent!=="executor"||s.type!=="text")continue;const a=s.text.match(/^Executor using model: (.+?)\/(.+)$/);a&&(n={provider:a[1],modelId:a[2]})}return n}function U$(e){let n=null;for(const s of e){if(s.agent!=="reviewer"||s.type!=="text")continue;const a=s.text.match(/^Reviewer using model: (.+?)\/(.+)$/);a&&(n={provider:a[1],modelId:a[2]})}return n}function _f(e){return(e.title??"").trim().length>0?!0:!!(e.description??"").split(/\r?\n/).map(s=>s.trim()).find(s=>s.length>0)}function Xv(e){const n=e?.runtimeConfig??void 0,s=typeof n?.model=="string"?n.model.trim():"";if(s){const o=s.indexOf("/");if(o>0&&o<s.length-1)return{provider:s.slice(0,o),modelId:s.slice(o+1)}}const a=typeof n?.modelProvider=="string"?n.modelProvider.trim():"",r=typeof n?.modelId=="string"?n.modelId.trim():"";return{provider:a||void 0,modelId:r||void 0}}function H$(e,n,s,a){const r=B$(n);if(r)return r;if(Lm.has(e.status??"")||e.column==="in-progress"){const o=Xv(s);if(o.provider&&o.modelId)return o}return Ob(e,a)}function q$(e,n,s,a){const r=U$(n);if(r)return r;if(Lm.has(e.status??"")||e.column==="in-progress"){const o=Xv(s);if(o.provider&&o.modelId)return o}return Fb(e,a)}function V$(e){let n=null;for(const s of e){if(s.agent!=="triage"||s.type!=="text")continue;const a=s.text.match(/^Triage using model: (.+?)\/(.+)$/);a&&(n={provider:a[1],modelId:a[2]})}return n}function W$(e,n,s){if(e.planningModelProvider&&e.planningModelId)return{provider:e.planningModelProvider,modelId:e.planningModelId};const a=V$(n);return a||zb(e,s)}function G$(e){switch(e){case"done":return"var(--color-success)";case"in-progress":return"var(--in-progress)";case"skipped":return"var(--text-dim)";case"pending":default:return"var(--border)"}}function yr(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(r/60),l=Math.floor(o/24);return r<1?"just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function K$(e){return e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function bo(e){const n=Math.max(1,Math.floor(e/6e4)),s=Math.floor(n/1440),a=Math.floor(n%1440/60),r=n%60;return s>0?`${s}d ${a}h`:a>0?`${a}h ${r}m`:`${r}m`}function Bd(e,n){return e.length>n?e.slice(0,n)+"…":e}function Mf(e=[],n=[]){return e.length===n.length&&e.every((s,a)=>s===n[a])}function Ud(e){const n=e.indexOf("/");return!e||n===-1?null:{provider:e.slice(0,n),modelId:e.slice(n+1)}}function Hd(e){return e.trim()}function J$(e){const n=e.trim();return n.length>0?n:void 0}function Qi(e){return typeof e=="string"&&Ca.includes(e)?e:Rs}function Xi(e){return e==="fast"?"fast":"standard"}function Y$(e){const n=e?.issueUrl;return typeof n=="string"&&n.length>0?n:void 0}function Q$(e){const n=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/(issues|pull)\/(\d+)(?:$|[/?#])/);if(!n)return null;const[,s,a,,r]=n;return{label:`${s}/${a}#${r}`,href:e}}function X$(e){const n=e?.findingLabel;if(typeof n=="string"&&n.length>0)return n;const s=e?.runId;return typeof s=="string"&&s.length>0?s:void 0}const Z$=i.lazy(()=>Rn(()=>import("./AgentDetailView-Cu4TgvBn.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])).then(e=>({default:e.AgentDetailView})));function e4(e,n={}){switch(e.sourceType){case"dashboard_ui":return{label:"Dashboard"};case"quick_chat":return{label:"Quick Chat"};case"chat_session":return{label:"Chat Session"};case"agent_heartbeat":return{label:n.sourceAgentName??e.sourceAgentId??"agent",sourceAgentId:e.sourceAgentId};case"automation":return{label:"Automation"};case"cron":return{label:"Scheduled Task"};case"workflow_step":return{label:"Workflow Step"};case"github_import":{const s=Y$(e.sourceMetadata),a=s?Q$(s):null;return{label:"GitHub Import",contextInfo:s?a?.label??"Open issue":void 0,contextHref:s,contextInfoFull:s}}case"research":{const s=X$(e.sourceMetadata);return{label:"Research",contextInfo:s,contextInfoFull:s}}case"task_refine":return{label:"Refinement",parentTaskId:e.sourceParentTaskId};case"task_duplicate":return{label:"Duplicate",parentTaskId:e.sourceParentTaskId};case"cli":return{label:"CLI"};case"api":return{label:"API"};case"recovery":return{label:"Recovery"};case"unknown":default:return null}}const qd=200,t4=new Set(["triage","todo"]),n4=new Set(["triage","todo","in-progress","in-review"]);function Zv({task:e,projectId:n,tasks:s=[],onOpenDetail:a,onMoveTask:r,onDeleteTask:o,onMergeTask:l,onRetryTask:c,onResetTask:d,onDuplicateTask:u,onTaskUpdated:h,addToast:m,prAuthAvailable:f,initialTab:p="definition",mobileHeaderMode:g="close",embedded:w=!1,onRequestClose:v}){const[b,y]=i.useState(p==="retries"?"definition":p),[N,S]=i.useState(()=>"prompt"in e?e:null),[C,x]=i.useState(()=>!("prompt"in e));i.useEffect(()=>{if("prompt"in e){S(e),x(!1);return}let K=!1;return x(!0),S(null),Ga(e.id,n).then(Se=>{K||(S(Se),x(!1))}).catch(()=>{K||x(!1)}),()=>{K=!0}},[e.id,n]);const k=N?{...N,...e,prompt:N.prompt,log:N.log,githubTracking:e.githubTracking??N.githubTracking}:{...e,prompt:""},R=e.status==="failed"||e.status==="stuck-killed"||e.status==="planning"||e.status==="needs-replan"||(e.stuckKillCount??0)>0||(e.recoveryRetryCount??0)>0||!!e.nextRecoveryAt,[z,_]=i.useState(null),[A,Q]=i.useState(null),H=e4(k,{sourceAgentName:z?.name});i.useEffect(()=>{y(p==="retries"?"definition":p),p==="retries"&&ze(!0)},[p]),i.useEffect(()=>{D(!1)},[e.id]);const[M,T]=i.useState("activity"),[F,W]=i.useState(null),[oe,D]=i.useState(!1),[E,P]=i.useState(e.attachments||[]),[$,j]=i.useState(!1),[q,de]=i.useState(e.dependencies||[]),[be,Ce]=i.useState(!1),[Ae,ae]=i.useState(""),[X,pe]=i.useState(null),[ie,ye]=i.useState([]),[ee,L]=i.useState(!1),[Y,me]=i.useState(!1),[B,xe]=i.useState(!1),[Ne,te]=i.useState(!1),[Be,$e]=i.useState(!1),[ct,De]=i.useState(k.prompt||""),[le,_e]=i.useState(""),[Le,mt]=i.useState(!1);i.useEffect(()=>{if(b!=="logs"||M!=="activity"){W(null);return}if(!F)return;const K=qn.current?.querySelector('[data-stall-highlight="true"]');K&&typeof K.scrollIntoView=="function"&&K.scrollIntoView({block:"nearest",behavior:"smooth"})},[b,M,F]);const[Ve,ge]=i.useState(""),[he,Pe]=i.useState(!1),[dt,jt]=i.useState(!1),[nt,xt]=i.useState(e.title||""),[Ie,Qe]=i.useState(e.description||""),[ot,Tt]=i.useState(e.dependencies||[]),[Mt,We]=i.useState(e.branch??""),[J,ke]=i.useState(e.baseBranch??""),[lt,ve]=i.useState(""),[st,Ue]=i.useState(""),[fe,Xe]=i.useState(""),[vt,St]=i.useState(""),[Et,Pt]=i.useState("default"),[Jt,dn]=i.useState(void 0),[Vt,ln]=i.useState(Rs),[fn,_n]=i.useState(e.nodeId),[an,Dn]=i.useState(Xi(e.executionMode)),[vn,Ut]=i.useState(""),[rn,bn]=i.useState(e.enabledWorkflowSteps||[]),[en,Yt]=i.useState(e.sourceIssue?.provider??""),[tn,Qt]=i.useState(e.sourceIssue?.repository??""),[Kt,xn]=i.useState(e.sourceIssue?.externalIssueId??""),[un,pn]=i.useState(e.sourceIssue?.url??""),[$t,ue]=i.useState([]),[Re,et]=i.useState(!1),[at,Je]=i.useState(Qi(e.priority)),[Nt,bt]=i.useState(!1),[At,se]=i.useState(Xi(e.executionMode)),[re,Ge]=i.useState(!1),[Ct,Gt]=i.useState(e.noCommitsExpected===!0),[cn,jn]=i.useState(!1),Ln=i.useRef(!1),[mn,Un]=i.useState(!1),[ce,it]=i.useState(!1),[ut,wt]=i.useState(!1),[G,ze]=i.useState(p==="retries"),[Ht,gn]=i.useState(!1),[Mn,je]=i.useState(e.githubTracking?.repoOverride??""),[pt,Dt]=i.useState(null),[Zt,Nn]=i.useState(null),[Xt,qt]=i.useState(!1),Ot=i.useRef(null),qn=i.useRef(null),On=i.useRef(null),os=i.useRef(null),{getSlotsForId:xs}=lx(n),vs=xs("task-detail-tab").map((K,Se)=>({entry:K,tabId:`plugin-${K.pluginId}-${Se}`})),as=typeof b=="string"&&b.startsWith("plugin-")?vs.find(K=>K.tabId===b)??null:null;i.useEffect(()=>(Ln.current=!0,()=>{Ln.current=!1}),[]);const[Tn,ys]=i.useState(void 0),[Ls,_s]=i.useState(null),[Z,Ee]=i.useState([]),[gt,zt]=i.useState(!1),[O,He]=i.useState(e.enabledWorkflowSteps||[]),Ze=e.column==="in-progress"||Lm.has(e.status);i.useEffect(()=>{xt(e.title||""),Qe(e.description||""),We(e.branch??""),ke(e.baseBranch??""),Yt(e.sourceIssue?.provider??""),Qt(e.sourceIssue?.repository??""),xn(e.sourceIssue?.externalIssueId??""),pn(e.sourceIssue?.url??""),Dn(Xi(e.executionMode)),wt(!1),gn(!1),je(k.githubTracking?.repoOverride??""),Dt(null),Nn(null),jt(!1)},[e.id,e.title,e.description,e.branch,e.baseBranch,e.sourceIssue,e.executionMode,k.githubTracking]),i.useEffect(()=>{He(e.enabledWorkflowSteps||[])},[e.id,e.enabledWorkflowSteps]),i.useEffect(()=>{Je(Qi(e.priority))},[e.id,e.priority]),i.useEffect(()=>{se(Xi(e.executionMode))},[e.id,e.executionMode]),i.useEffect(()=>{Gt(e.noCommitsExpected===!0)},[e.id,e.noCommitsExpected]),i.useEffect(()=>{pt!==null&&k.githubTracking?.enabled===!0===pt&&Dt(null)},[pt,k.githubTracking?.enabled]),i.useEffect(()=>{let K=!1;return Rc(n).then(Se=>{K||ys(Se)}).catch(()=>{}),ia().then(Se=>{K||_s(Se)}).catch(()=>{K||_s(null)}),()=>{K=!0}},[n]),i.useEffect(()=>{if(b!=="workflow")return;let K=!1;return zt(!0),J0(e.id,n).then(Se=>{K||Ee(Se)}).catch(Se=>{K||m(`Failed to load workflow results: ${Me(Se)}`,"error")}).finally(()=>{K||zt(!1)}),()=>{K=!0}},[b,e.id,n,m]),i.useEffect(()=>{if(b!=="workflow")return;const K=n?`?projectId=${encodeURIComponent(n)}`:"",Se=yt=>{try{const Wt=JSON.parse(yt.data);Wt.id===e.id&&Array.isArray(Wt.workflowStepResults)&&Ee(Wt.workflowStepResults)}catch{}};return pi(`/api/events${K}`,{events:{"task:updated":Se}})},[b,e.id,n]),i.useEffect(()=>{be||ae("")},[be]),i.useEffect(()=>{if(!e.assignedAgentId){pe(null);return}const K=ie.find(yt=>yt.id===e.assignedAgentId);if(K){pe(K);return}let Se=!1;return Su(e.assignedAgentId,n).then(yt=>{Se||pe(yt)}).catch(()=>{Se||pe(null)}),()=>{Se=!0}},[e.assignedAgentId,n,ie]),i.useEffect(()=>{if(!e.sourceAgentId){_(null);return}const K=ie.find(yt=>yt.id===e.sourceAgentId);if(K){_(K);return}let Se=!1;return Promise.resolve(Su(e.sourceAgentId,n)).then(yt=>{Se||_(yt??null)}).catch(()=>{Se||_(null)}),()=>{Se=!0}},[e.sourceAgentId,n,ie]),i.useEffect(()=>{L(!1)},[e.id]),i.useEffect(()=>{if(!(mn||ce))return;const Se=yt=>{const Wt=yt.target,Fn=Ot.current?.contains(Wt),Ti=os.current?.contains(Wt);!Fn&&mn&&Un(!1),!Ti&&ce&&it(!1)};return document.addEventListener("mousedown",Se),()=>document.removeEventListener("mousedown",Se)},[mn,ce]),i.useEffect(()=>{if(!(mn||ce))return;const Se=yt=>{yt.key==="Escape"&&(yt.stopPropagation(),mn&&Un(!1),ce&&it(!1))};return document.addEventListener("keydown",Se),()=>document.removeEventListener("keydown",Se)},[mn,ce]),i.useEffect(()=>{$e(!1),De(k.prompt||""),_e("")},[e.id,k.prompt]);const Ye=t4.has(e.column)&&!Re,ft=n4.has(e.column)&&!Re,Rt=pt??k.githubTracking?.enabled===!0,Ft=k.githubTracking?.issue,on=C&&typeof e.githubTracking>"u",yn=_f(e),ne=ft&&!Ft&&!on&&(!Rt||Xt&&k.githubTracking?.enabled!==!0),Fe=ft||Rt||!!Ft,qe=e.retrySummary,Bt=[{key:"stuckKill",label:"Stuck kills",title:"Stuck-task detector forced agent kill retries",value:qe?.stuckKill??0},{key:"recovery",label:"Recovery retries",title:"Transient executor recovery retries",value:qe?.recovery??0},{key:"taskDone",label:"task_done retries",title:"Agent exited without task_done and task was retried",value:qe?.taskDone??0},{key:"workflowStep",label:"Workflow retries",title:"Workflow step failure retries",value:qe?.workflowStep??0},{key:"verification",label:"Verification bounces",title:"Verification failure bounce retries",value:qe?.verification??0},{key:"postReviewFix",label:"Post-review fixes",title:"Post-review remediation retries",value:qe?.postReviewFix??0},{key:"mergeConflict",label:"Merge conflict bounces",title:"Merge conflict bounce retries",value:qe?.mergeConflict??0},{key:"branchConflict",label:"Branch conflict recovery",title:"FN-4068 branch-conflict recovery retries",value:qe?.branchConflict??0},{key:"reviewerContext",label:"Reviewer context retries",title:"FN-4082 compact reviewer retry",value:qe?.reviewerContext??0},{key:"reviewerFallback",label:"Reviewer fallback retries",title:"FN-4092 fallback-model retry",value:qe?.reviewerFallback??0}].filter(K=>K.value>0),nn=on?"Loading":Ft?"Linked":Rt?"Enabled":"Disabled",An=!Ft&&(Xt||on),es=Jv(Tn??null,Ls),Hn=Mn.trim(),Zn=i.useCallback(async()=>{if(!ft||Xt)return;const K=!Rt;Dt(K),qt(!0);try{const Se=await Ts(e.id,{githubTracking:{enabled:K}},n);h?.(Se)}catch(Se){Dt(k.githubTracking?.enabled===!0),m(`Failed to update ${e.id}: ${Me(Se)}`,"error")}finally{Ln.current&&qt(!1)}},[m,ft,Rt,Xt,h,n,k.githubTracking?.enabled,e.id]),ls=i.useCallback(async()=>{if(!(!ft||Xt)){if(Hn.length>0&&!Ac.test(Hn)){Nn("Repository override must be in owner/repo format");return}Nn(null),qt(!0);try{const K=await Ts(e.id,{githubTracking:{repoOverride:Hn.length>0?Hn:null}},n);h?.(K)}catch(K){m(`Failed to update ${e.id}: ${Me(K)}`,"error")}finally{Ln.current&&qt(!1)}}},[m,ft,Hn,Xt,h,n,e.id]),hs=i.useCallback(async()=>{if(!(!Rt||Ft||Xt)){if(!_f(e)){m("Add a title before creating a tracking issue","info");return}qt(!0);try{const K=await Ts(e.id,{githubTracking:{enabled:!0}},n);h?.(K),m("Requested GitHub tracking issue creation","info")}catch(K){m(`Failed to update ${e.id}: ${Me(K)}`,"error")}finally{Ln.current&&qt(!1)}}},[m,Ft,Rt,Xt,h,n,e]),qi=i.useCallback(()=>{if(!Ye)return;jt(!0),xt(e.title||""),Qe(e.description||""),Tt(e.dependencies||[]),We(e.branch??""),ke(e.baseBranch??"");const K=e.modelProvider&&e.modelId?`${e.modelProvider}/${e.modelId}`:"",Se=e.validatorModelProvider&&e.validatorModelId?`${e.validatorModelProvider}/${e.validatorModelId}`:"",yt=e.planningModelProvider&&e.planningModelId?`${e.planningModelProvider}/${e.planningModelId}`:"";ve(K),Ue(Se),Xe(yt),St(e.thinkingLevel??""),_n(e.nodeId),Pt(K||Se||yt?"custom":"default"),Ut(""),bn(e.enabledWorkflowSteps||[]),Dn(Xi(e.executionMode)),Yt(e.sourceIssue?.provider??""),Qt(e.sourceIssue?.repository??""),xn(e.sourceIssue?.externalIssueId??""),pn(e.sourceIssue?.url??""),ue([]),dn(e.reviewLevel),ln(Qi(e.priority))},[Ye,e]),_a=i.useCallback(()=>{jt(!1),xt(e.title||""),Qe(e.description||""),Tt(e.dependencies||[]),We(e.branch??""),ke(e.baseBranch??""),_n(e.nodeId),Yt(e.sourceIssue?.provider??""),Qt(e.sourceIssue?.repository??""),xn(e.sourceIssue?.externalIssueId??""),pn(e.sourceIssue?.url??""),ln(Qi(e.priority)),Dn(Xi(e.executionMode)),$t.forEach(K=>URL.revokeObjectURL(K.previewUrl)),ue([])},[e.title,e.description,e.dependencies,e.nodeId,e.priority,e.executionMode,$t]),[Mi,Vi]=i.useState("idle"),Ms=i.useRef(null),Wi=i.useRef(0),Ma=i.useCallback(K=>{const Se={},yt=nt.trim(),Wt=Ie.trim();yt&&yt!==(e.title??"")&&(Se.title=yt),K&&Wt&&Wt!==(e.description??"")&&(Se.description=Wt),Mf(ot,e.dependencies??[])||(Se.dependencies=ot),Mf(rn,e.enabledWorkflowSteps??[])||(Se.enabledWorkflowSteps=rn);const Fn=Mt.trim()||null,Ti=e.branch??null;Fn!==Ti&&(Se.branch=Fn);const qc=J.trim()||null,Vc=e.baseBranch??null;qc!==Vc&&(Se.baseBranch=qc);const Km=Ud(lt),ew=e.modelProvider&&e.modelId?`${e.modelProvider}/${e.modelId}`:"";lt!==ew&&(Se.modelProvider=Km?.provider??null,Se.modelId=Km?.modelId??null);const Jm=Ud(st),tw=e.validatorModelProvider&&e.validatorModelId?`${e.validatorModelProvider}/${e.validatorModelId}`:"";st!==tw&&(Se.validatorModelProvider=Jm?.provider??null,Se.validatorModelId=Jm?.modelId??null);const Ym=Ud(fe),nw=e.planningModelProvider&&e.planningModelId?`${e.planningModelProvider}/${e.planningModelId}`:"";fe!==nw&&(Se.planningModelProvider=Ym?.provider??null,Se.planningModelId=Ym?.modelId??null);const sw=e.thinkingLevel??"";vt!==sw&&(Se.thinkingLevel=vt!==""?vt:null),(e.nodeId??void 0)!==fn&&(Se.nodeId=fn??null),Jt!==e.reviewLevel&&(Se.reviewLevel=Jt),Vt!==Qi(e.priority)&&(Se.priority=Vt),an!==Xi(e.executionMode)&&(Se.executionMode=an==="fast"?"fast":null);const Wc=Hd(en),Gc=Hd(tn),hl=Hd(Kt),Kc=J$(un);if(Wc.length===0&&Gc.length===0&&hl.length===0&&!Kc)e.sourceIssue&&(Se.sourceIssue=null);else{if(!Wc||!Gc||!hl)return{updates:null,error:"Source issue provider, repository, and issue identifier are required"};const iw=Number.parseInt(hl,10),Jc=e.sourceIssue?.issueNumber??iw;if(!Number.isFinite(Jc)||Jc<=0)return{updates:null,error:"Source issue identifier must be numeric for new metadata"};const pr={provider:Wc,repository:Gc,externalIssueId:hl,issueNumber:Jc,...Kc?{url:Kc}:{}},fr=e.sourceIssue;(!fr||fr.provider!==pr.provider||fr.repository!==pr.repository||fr.externalIssueId!==pr.externalIssueId||fr.issueNumber!==pr.issueNumber||(fr.url??void 0)!==pr.url)&&(Se.sourceIssue=pr)}return{updates:Se,error:null}},[J,Mt,ot,Ie,an,lt,fn,fe,Vt,Jt,rn,Kt,en,tn,un,vt,nt,st,e]),Ai=i.useCallback(async K=>{const{updates:Se,error:yt}=Ma(K);if(!Se)return Vi("error"),yt&&m(`Failed to update ${e.id}: ${yt}`,"error"),!1;if(Object.keys(Se).length===0)return!0;const Wt=++Wi.current;et(!0),Vi("saving");try{const Fn=await Ts(e.id,Se,n);return Wt!==Wi.current?void 0:(h?.(Fn),Vi("saved"),!0)}catch(Fn){return Wt===Wi.current&&(Vi("error"),m(`Failed to update ${e.id}: ${Me(Fn)}`,"error")),!1}finally{Ln.current&&Wt===Wi.current&&et(!1)}},[m,Ma,h,n,e.id]),to=i.useCallback(async K=>{await Ai(!0)},[Ai]),Aa=i.useCallback(async()=>{await Ai(!0)&&(m(`Updated ${e.id}`,"success"),Ln.current&&jt(!1))},[m,Ai,e.id]);i.useEffect(()=>{if(dt)return Ms.current&&clearTimeout(Ms.current),Ms.current=setTimeout(()=>{Ai(!1)},700),()=>{Ms.current&&(clearTimeout(Ms.current),Ms.current=null)}},[dt,nt,ot,Mt,J,lt,st,fe,vt,fn,Jt,Vt,an,rn,en,tn,Kt,un,Ai]);const fi=i.useCallback(async K=>{const Se=Qi(K),yt=Qi(e.priority);if(Se===yt){Je(yt);return}const Wt=at;Je(Se),bt(!0);try{const Fn=await Ts(e.id,{priority:Se},n);Je(Qi(Fn.priority)),h?.(Fn),m(`Priority updated to ${Qi(Fn.priority)}`,"success")}catch(Fn){Je(Wt),m(`Failed to update ${e.id}: ${Me(Fn)}`,"error")}finally{Ln.current&&bt(!1)}},[e.id,e.priority,n,at,h,m]),ai=i.useCallback(async()=>{const Se=Xi(e.executionMode)==="fast"?"standard":"fast",yt=At;se(Se),Ge(!0);try{const Wt=await Ts(e.id,{executionMode:Se==="fast"?"fast":null},n),Fn=Xi(Wt.executionMode);se(Fn),h?.(Wt),m(`Execution mode updated to ${Fn}`,"success")}catch(Wt){se(yt),m(`Failed to update ${e.id}: ${Me(Wt)}`,"error")}finally{Ln.current&&Ge(!1)}},[e.id,e.executionMode,n,At,h,m]),Gi=i.useCallback(async()=>{const K=!Ct,Se=Ct;Gt(K),jn(!0);try{const yt=await Ts(e.id,{noCommitsExpected:K},n),Wt=yt.noCommitsExpected===!0;Gt(Wt),h?.(yt),m(`No-commits expectation ${Wt?"enabled":"disabled"}`,"success")}catch(yt){Gt(Se),m(`Failed to update ${e.id}: ${Me(yt)}`,"error")}finally{Ln.current&&jn(!1)}},[e.id,n,Ct,h,m]),la=i.useCallback(K=>{dt&&(K.key==="Escape"?(K.preventDefault(),_a()):K.key==="Enter"&&(K.ctrlKey||K.metaKey)&&(K.preventDefault(),Aa()))},[dt,_a,Aa]);i.useEffect(()=>{if(dt)return document.addEventListener("keydown",la),()=>document.removeEventListener("keydown",la)},[dt,la]);const Ki=i.useRef(null),{nodes:gi}=Pc(),{confirm:ts}=ii(),Ra=i.useCallback(async()=>{if(!(!Ye||!Ft||Xt||!await ts({title:"Unlink GitHub issue?",message:"This stops Fusion from syncing with the linked GitHub issue. The issue itself will not be modified.",confirmLabel:"Unlink",danger:!0}))){qt(!0);try{const Se=await Ts(e.id,{githubTracking:{issue:null}},n);h?.(Se),m("GitHub issue unlinked","success")}catch(Se){m(`Failed to update ${e.id}: ${Me(Se)}`,"error")}finally{Ln.current&&qt(!1)}}},[m,Ye,ts,Ft,Xt,h,n,e.id]),{entries:Ri,loading:sr,loadMore:Ji,hasMore:ca,total:da,loadingMore:bi}=Uv(e.id,b==="logs"&&M==="agent-log",n),Pn=i.useCallback(()=>{v?.()},[v]);i.useEffect(()=>{if(w)return;const K=Se=>{Se.key==="Escape"&&!dt&&Pn()};return document.addEventListener("keydown",K),()=>document.removeEventListener("keydown",K)},[w,Pn,dt]);const ir=i.useCallback(async K=>{try{const Se=e.steps.some(Fn=>Fn.status!=="pending"),yt=(K==="todo"||K==="triage")&&Se;let Wt;if(yt){if(await ts({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))Wt={preserveProgress:!0};else if(!await ts({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await r(e.id,K,Wt),Pn(),m(`Moved to ${ds[K]}`,"success")}catch(Se){m(Me(Se),"error")}},[e.id,e.steps,r,Pn,m,ts]),ua=i.useCallback(async()=>{if(!await ts({title:"Delete Task",message:`Delete ${e.id}?`,danger:!0}))return;const Se=e.githubTracking?.enabled===!0?e.githubTracking.issue:void 0;let yt;if(Se?.owner&&Se.repo&&Se.number){const Wt=`${Se.owner}/${Se.repo}#${Se.number}`;await ts({title:"Linked GitHub Issue",message:`Choose what to do with ${Wt} when deleting ${e.id}.
687
+
688
+ Close the issue?`,confirmLabel:"Close Issue",cancelLabel:"More Options"})?yt="close":yt=await ts({title:"Delete Linked GitHub Issue",message:`Delete ${Wt} on GitHub, or leave it unchanged?`,confirmLabel:"Delete Issue",cancelLabel:"Leave Unchanged",danger:!0})?"delete":"leave"}try{yt?await o(e.id,{githubIssueAction:yt}):await o(e.id),Pn();const Wt=Se?.owner&&Se.repo&&Se.number&&yt?` and ${yt==="close"?"closed":yt==="delete"?"deleted":"left"} issue ${Se.owner}/${Se.repo}#${Se.number}`:"";m(`Deleted ${e.id}${Wt}`,"info")}catch(Wt){const Fn=fm(Wt);if(!Fn||Fn.dependentIds.length===0){m(Me(Wt),"error");return}const Ti=Fn.dependentIds.join(", ");if(!await ts({title:"Force Delete Task",message:`${e.id} is a dependency of ${Ti}.
689
+
690
+ Delete anyway by removing these dependency references first?`,danger:!0}))return;try{await o(e.id,{removeDependencyReferences:!0,githubIssueAction:yt}),Pn(),m(`Deleted ${e.id} after removing dependency references`,"info")}catch(Vc){m(Me(Vc),"error")}}},[e.githubTracking?.enabled,e.githubTracking?.issue,e.id,o,Pn,m,ts]),Ii=i.useCallback(async()=>{await ts({title:"Merge Task",message:`Merge ${e.id} into the current branch?`})&&(Pn(),m(`Merging ${e.id}...`,"info"),l(e.id).then(Se=>{const yt=Se.merged?`Merged ${e.id} (branch: ${Se.branch})`:`Closed ${e.id} (${Se.error||"no branch to merge"})`;m(yt,"success")}).catch(Se=>{m(Me(Se),"error")}))},[e.id,l,Pn,m,ts]),ar=i.useCallback(()=>{c&&(Pn(),c(e.id).then(()=>{m(`Retried ${e.id}`,"success")}).catch(K=>{m(Me(K),"error")}))},[e.id,c,Pn,m]),rr=i.useCallback(()=>{d&&window.confirm(`This will erase all progress for ${e.id} and start the task from scratch. Continue?`)&&(Pn(),d(e.id).then(()=>{m(`Reset ${e.id} — fresh run will be allocated`,"success")}).catch(K=>{m(Me(K),"error")}))},[e.id,d,Pn,m]),or=i.useCallback(async()=>{if(!(!u||!await ts({title:"Duplicate Task",message:`Duplicate ${e.id}? This will create a new task in Triage with the same description and prompt.`})))try{const Se=await u(e.id);Pn(),m(`Duplicated ${e.id} → ${Se.id}`,"success")}catch(Se){m(Me(Se),"error")}},[e.id,u,Pn,m,ts]),ma=i.useCallback(async()=>{try{e.paused?(await Wb(e.id,n),m(`Unpaused ${e.id}`,"success")):(await Vb(e.id,n),m(`Paused ${e.id}`,"success")),Pn()}catch(K){m(Me(K),"error")}},[e.id,e.paused,Pn,m]),Ia=i.useCallback(async()=>{try{await tS(e.id,n),m(`Plan approved — ${e.id} moved to Todo`,"success"),Pn()}catch(K){m(Me(K),"error")}},[e.id,Pn,m]),Ta=i.useCallback(async()=>{if(await ts({title:"Reject Plan",message:"Reject this plan? The specification will be discarded and regenerated.",danger:!0}))try{await nS(e.id,n),m(`Plan rejected — ${e.id} returned to Planning for replanning`,"info"),Pn()}catch(Se){m(Me(Se),"error")}},[e.id,Pn,m,ts]),Pa=i.useCallback(async()=>{if(await ts({title:"Rebuild Plan",message:"Rebuild the plan for this task? The task will move to planning for replanning."}))try{await hS(e.id,n),Pn(),m(`Replanning ${e.id}...`,"info")}catch(Se){m(Me(Se),"error")}},[e.id,n,Pn,m,ts]),no=i.useCallback(()=>{mt(!0),ge("")},[]),xi=i.useCallback(()=>{Un(!1),it(!1)},[]),ri=i.useCallback(K=>{xi(),ir(K)},[xi]),vi=i.useCallback(K=>{xi(),K()},[xi]),lr=i.useCallback(()=>{xi(),Ii()},[xi,Ii]),$a=i.useCallback(()=>{mt(!1),ge(""),Pe(!1)},[]),cr=i.useCallback(async()=>{if(!Ve.trim()){m("Please enter feedback describing what needs refinement","error");return}if(Ve.length>2e3){m("Feedback must be 2000 characters or less","error");return}Pe(!0);try{const K=await pS(e.id,Ve.trim(),n);m(`Refinement task created: ${K.id}`,"success"),Pn()}catch(K){m(Me(K),"error")}finally{Pe(!1)}},[e.id,Ve,m,Pn]),yi=i.useCallback(async K=>{j(!0);try{const Se=await Ic(e.id,K,n);P(yt=>[...yt,Se]),m("Screenshot attached","success")}catch(Se){m(Me(Se),"error")}finally{j(!1)}},[e.id,m]),dr=i.useCallback(async K=>{const Se=K.target.files?.[0];Se&&(await yi(Se),Ki.current&&(Ki.current.value=""))},[yi]);i.useEffect(()=>{const K=Se=>{const yt=Se.clipboardData?.items;if(yt)for(let Wt=0;Wt<yt.length;Wt++){const Fn=yt[Wt];if(Fn.type.startsWith("image/")){const Ti=Fn.getAsFile();if(Ti){Se.preventDefault(),yi(Ti);return}}}};return document.addEventListener("paste",K),()=>document.removeEventListener("paste",K)},[yi]);const ur=i.useCallback(K=>{K.preventDefault()},[]),Da=i.useCallback(K=>{K.preventDefault();const Se=K.dataTransfer.files;for(let yt=0;yt<Se.length;yt++){const Wt=Se[yt];if(Wt.type.startsWith("image/")){yi(Wt);return}}},[yi]),Yi=i.useCallback(async K=>{try{await aS(e.id,K,n),P(Se=>Se.filter(yt=>yt.filename!==K)),m("Attachment deleted","info")}catch(Se){m(Me(Se),"error")}},[e.id,m]),mr=i.useCallback(async K=>{const Se=O;He(K);try{const yt=await Ts(e.id,{enabledWorkflowSteps:K},n);m("Workflow steps updated","success"),h?.(yt)}catch(yt){He(Se),m(`Failed to update workflow steps: ${Me(yt)}`,"error")}},[e.id,n,O,h,m]),U=i.useCallback(async()=>{me(!0);try{const K=await Yr(void 0,n);ye(K),L(!0)}catch(K){m(`Failed to load agents: ${Me(K)}`,"error"),L(!1)}finally{me(!1)}},[n,m]),Te=i.useCallback(async K=>{try{const Se=await Sh(e.id,K,n),yt=ie.find(Wt=>Wt.id===K)??null;pe(yt||(Wt=>Wt?.id===K?Wt:null)),L(!1),h?.(Se),m("Assigned agent updated","success")}catch(Se){m(`Failed to assign agent: ${Me(Se)}`,"error")}},[e.id,n,ie,h,m]),Ke=i.useCallback(async()=>{try{const K=await Sh(e.id,null,n);pe(null),L(!1),h?.(K),m("Agent unassigned","success")}catch(K){m(`Failed to unassign agent: ${Me(K)}`,"error")}},[e.id,n,h,m]),kt=i.useCallback(async K=>{const Se=[...q,K];de(Se);try{await Ts(e.id,{dependencies:Se},n)}catch(yt){de(q),m(Me(yt),"error")}},[e.id,q,m]),wn=i.useCallback(async(K,Se)=>{K.stopPropagation();const yt=q.filter(Wt=>Wt!==Se);de(yt);try{await Ts(e.id,{dependencies:yt},n)}catch(Wt){de(q),m(Me(Wt),"error")}},[e.id,q,m]),we=i.useCallback(async K=>{try{const Se=await Ga(K,n);a(Se)}catch{m(`Failed to load dependency ${K}`,"error")}},[a,m]),ht=i.useCallback(async K=>{xe(!0);try{await Ts(k.id,{prompt:K},n),m("Spec updated","success"),N&&(N.prompt=K)}catch(Se){throw m(Me(Se),"error"),Se}finally{xe(!1)}},[k,N,m]),Oe=i.useCallback(async K=>{te(!0);try{await mS(e.id,K,n),m("AI revision requested. Task moved to planning.","success"),Pn()}catch(Se){const yt=Me(Se);yt.includes("done")||yt.includes("archived")?m("Cannot request revision: Task must be in 'triage', 'todo', 'in-progress', or 'in-review' column.","error"):m(yt,"error")}finally{te(!1)}},[e.id,m,Pn]),tt=i.useCallback(()=>{$e(!0),De(k.prompt||""),_e("")},[k.prompt]),Lt=i.useCallback(()=>{$e(!1),De(k.prompt||""),_e("")},[k.prompt]),Sn=i.useCallback(async()=>{if(ct===(k.prompt||"")){Lt();return}$e(!1);try{await ht(ct)}catch(K){throw $e(!0),K}},[ct,k.prompt,ht,Lt]),qs=i.useCallback(async()=>{le.trim()&&await Oe(le.trim())},[le,Oe]),wi=i.useCallback(K=>{K.key==="Escape"?(K.preventDefault(),Lt()):K.key==="Enter"&&(K.ctrlKey||K.metaKey)&&(K.preventDefault(),Sn())},[Lt,Sn]),ps=s.filter(K=>K.id!==e.id&&!q.includes(K.id)).sort((K,Se)=>{const yt=Se.createdAt.localeCompare(K.createdAt);if(yt!==0)return yt;const Wt=parseInt(K.id.slice(K.id.lastIndexOf("-")+1),10)||0;return(parseInt(Se.id.slice(Se.id.lastIndexOf("-")+1),10)||0)-Wt}),hn=i.useMemo(()=>pm(s),[s]).get(e.id),fs=i.useMemo(()=>{if(!hn)return[];const K=new Set(hn.staleBlockedByDependentIds);return hn.dependentIds.map(Se=>{const yt=s.find(Wt=>Wt.id===Se);return{id:Se,label:yt?.title||yt?.description||Se,stale:K.has(Se)}})},[hn,s]),Vs=hn?`${e.id} is blocking ${hn.overlapBlockedTodoCount} todo task(s) via blockedBy overlap`:null,Ys=k.overlapBlockedBy?s.find(K=>K.id===k.overlapBlockedBy):void 0,so=!!(Ys&&(Ys.column==="in-progress"||Ys.column==="in-review")),hr=X?.name??e.assignedAgentId??null,Um=i.useMemo(()=>{const K=[];return k.modelProvider&&K.push(k.modelProvider),k.validatorModelProvider&&!K.includes(k.validatorModelProvider)&&K.push(k.validatorModelProvider),k.planningModelProvider&&!K.includes(k.planningModelProvider)&&K.push(k.planningModelProvider),K},[k.modelProvider,k.validatorModelProvider,k.planningModelProvider]),Jy=ku[e.column]||[],Yy=["todo","in-progress"],Hm=e.column==="in-review"?Yy:Jy,Os=Hm[0],Uc=Hm.slice(1),oi=Uc.length>0,qm=i.useCallback(()=>{Un(!1),On.current?.focus()},[]),Vm=i.useCallback(K=>{if(!oi){Os&&ri(Os);return}const Se=K.currentTarget.querySelector(".detail-move-btn__arrow");if(!!(K.target instanceof Element&&K.target.closest(".detail-move-btn__arrow")||Se&&K.clientX>0&&K.clientX>=Se.getBoundingClientRect().left)){Un(Wt=>!Wt),it(!1);return}Os&&ri(Os)},[oi,Os,ri]),Wm=i.useCallback(K=>{!oi||!(K.key==="ArrowDown"||K.altKey&&K.key==="ArrowDown")||(K.preventDefault(),Un(!0),it(!1))},[oi]),ul=i.useCallback(K=>{K.key==="Escape"&&(K.preventDefault(),K.stopPropagation(),qm())},[qm]);i.useEffect(()=>{if(!mn)return;Ot.current?.querySelector(".detail-move-menu-item")?.focus()},[mn]);const Qy={"creating-pr":"Creating PR…","awaiting-pr-checks":"Awaiting PR checks","merging-pr":"Merging PR…","merging-fix":"Merging fixes…"},Hc=e.status?Qy[e.status]:void 0,Xy=Tn?.mergeStrategy??"direct",Zy=Tn?.autoMerge??!1,Gm=Xy==="pull-request"&&!Zy;let ml="Merge & Close";return Gm&&!Hc&&(e.prInfo?e.prInfo.status==="open"?ml="Check PR Status":e.prInfo.status==="merged"&&(ml="Finish & Close"):ml="Start PR Review"),t.jsxs("div",{className:w?"task-detail-content task-detail-content--embedded":"task-detail-content",onDragOver:ur,onDrop:Da,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:ds[e.column]})]}),t.jsxs("div",{className:"modal-header-actions",children:[!dt&&Ye&&t.jsx("button",{className:"modal-edit-btn",onClick:qi,title:"Edit task","aria-label":"Edit task",children:t.jsx(Fs,{size:14})}),!w&&g==="back"&&t.jsxs("button",{className:"modal-close task-detail-mobile-back",onClick:Pn,"aria-label":"Back to task list",type:"button",children:[t.jsx(er,{"aria-hidden":"true"}),t.jsx("span",{children:"Back"})]}),!w&&g!=="back"&&t.jsx("button",{className:"modal-close",onClick:Pn,"aria-label":"Close",type:"button",children:"×"})]})]}),t.jsxs("div",{className:`detail-body${b==="logs"&&M==="agent-log"&&!dt?" detail-body--agent-log":""}`,children:[dt?t.jsx("div",{className:"modal-edit-form",children:t.jsx(Yv,{mode:"edit",title:nt,onTitleChange:xt,description:Ie,onDescriptionChange:Qe,dependencies:ot,onDependenciesChange:Tt,branch:Mt,onBranchChange:We,baseBranch:J,onBaseBranchChange:ke,executorModel:lt,onExecutorModelChange:ve,validatorModel:st,onValidatorModelChange:Ue,planningModel:fe,onPlanningModelChange:Xe,thinkingLevel:vt,onThinkingLevelChange:St,presetMode:Et,onPresetModeChange:Pt,selectedPresetId:vn,onSelectedPresetIdChange:Ut,selectedWorkflowSteps:rn,onWorkflowStepsChange:bn,pendingImages:$t,onImagesChange:ue,tasks:s.filter(K=>K.id!==e.id),projectId:n,disabled:Re,addToast:m,isActive:dt,onAutoSaveDescription:to,reviewLevel:Jt,onReviewLevelChange:dn,priority:Vt,onPriorityChange:ln,nodeId:fn,onNodeIdChange:_n,nodeOptions:gi,nodeOverrideDisabled:Ze,nodeOverrideDisabledReason:Ze?"Execution node override is locked while a task is active/in progress.":void 0,executionMode:an,onExecutionModeChange:Dn,renderBelowModelConfiguration:t.jsxs("div",{className:"form-group detail-source-edit-group",children:[t.jsx("label",{children:"Source Issue"}),t.jsxs("div",{className:"detail-source-edit-grid",children:[t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Provider (e.g. github)",value:en,onChange:K=>Yt(K.target.value),disabled:Re,"data-testid":"task-source-provider-input"}),t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Repository (e.g. owner/repo)",value:tn,onChange:K=>Qt(K.target.value),disabled:Re,"data-testid":"task-source-repository-input"}),t.jsx("input",{type:"text",className:"modal-edit-input",placeholder:"Issue identifier",value:Kt,onChange:K=>xn(K.target.value),disabled:Re,"data-testid":"task-source-external-id-input"}),t.jsx("input",{type:"url",className:"modal-edit-input",placeholder:"Issue URL",value:un,onChange:K=>pn(K.target.value),disabled:Re,"data-testid":"task-source-url-input"})]}),t.jsx("small",{children:"Leave all fields empty to clear source issue metadata."})]})})}):t.jsxs(t.Fragment,{children:[(()=>{const K=e.title||e.description||e.id,Se=!oe&&K.length>qd;return t.jsxs(t.Fragment,{children:[t.jsx("h2",{className:"detail-title",children:Se?K.slice(0,qd)+"…":K}),K.length>qd&&t.jsx("button",{className:"detail-description-toggle",onClick:()=>D(!oe),children:oe?"Show less":"Show more"})]})})(),t.jsxs("div",{className:"detail-meta",children:[t.jsxs("div",{className:"detail-meta-inline-controls","data-testid":"detail-meta-inline-controls",children:[t.jsxs("label",{className:`card-priority-badge card-priority-badge--${at} detail-priority-chip ${Nt?"detail-priority-chip--saving":""}`,children:[t.jsx("span",{children:"Priority:"}),t.jsx("select",{className:"detail-priority-select",value:at,onChange:K=>{fi(K.target.value)},disabled:Nt,"aria-label":"Task priority",children:Ca.map(K=>t.jsx("option",{value:K,children:K},K))})]}),t.jsxs("button",{type:"button",className:`btn btn-sm detail-execution-mode-toggle ${At==="fast"?"detail-execution-mode-toggle--fast":""} ${re?"detail-execution-mode-toggle--saving":""}`,onClick:()=>{ai()},disabled:re,"aria-label":`Execution mode: ${At}`,"aria-pressed":At==="fast",children:[t.jsx(rs,{"aria-hidden":"true"}),t.jsx("span",{children:At==="fast"?"Fast":"Standard"})]})]}),H&&t.jsxs("div",{className:"detail-provenance",children:[t.jsx(Ps,{"aria-hidden":"true"}),t.jsxs("span",{children:[k.sourceType==="agent_heartbeat"?t.jsxs(t.Fragment,{children:["Created by"," ",H.sourceAgentId?t.jsx("button",{type:"button",className:"detail-provenance-link",onClick:()=>Q(H.sourceAgentId),children:H.label}):H.label]}):t.jsxs(t.Fragment,{children:["Created via ",H.label]}),H.parentTaskId&&t.jsxs(t.Fragment,{children:[" ","of"," ",t.jsx("button",{type:"button",className:"detail-provenance-link",onClick:()=>we(H.parentTaskId),children:H.parentTaskId})]}),H.contextInfo?t.jsxs(t.Fragment,{children:[" (",H.contextHref?t.jsx("a",{className:"detail-provenance-link detail-provenance-context",href:H.contextHref,target:"_blank",rel:"noopener noreferrer",title:H.contextInfoFull,children:H.contextInfo}):t.jsx("span",{className:"detail-provenance-context",title:H.contextInfoFull,children:H.contextInfo}),")"]}):""]})]}),(e.prInfo?.number||e.mergeDetails?.prNumber)&&t.jsxs("div",{className:"detail-provenance detail-pr-link-row",children:[t.jsx(Ps,{"aria-hidden":"true"}),t.jsxs("span",{children:["PR"," ",e.prInfo?.url?t.jsxs("a",{className:"detail-provenance-link",href:e.prInfo.url,target:"_blank",rel:"noopener noreferrer",children:["#",e.prInfo.number]}):t.jsxs("span",{children:["#",e.prInfo?.number??e.mergeDetails?.prNumber]})]})]}),t.jsxs("div",{className:"detail-timestamps","aria-label":"Task timestamps",children:[t.jsxs("span",{className:"detail-timestamp-item",children:[t.jsx("span",{className:"detail-timestamp-label",children:"Created"})," ",t.jsx("time",{dateTime:e.createdAt,title:new Date(e.createdAt).toLocaleString(),children:yr(e.createdAt)})]}),t.jsx("span",{className:"detail-timestamp-separator","aria-hidden":"true",children:"·"}),t.jsxs("span",{className:"detail-timestamp-item",children:[t.jsx("span",{className:"detail-timestamp-label",children:"Updated"})," ",t.jsx("time",{dateTime:e.updatedAt,title:new Date(e.updatedAt).toLocaleString(),children:yr(e.updatedAt)})]})]})]})]}),e.status==="failed"&&e.error&&t.jsxs("div",{className:"detail-error-alert",children:[t.jsx("span",{className:"detail-error-icon",children:"⚠"}),t.jsxs("div",{className:"detail-error-content",children:[t.jsx("div",{className:"detail-error-title",children:"Task Failed"}),t.jsx("div",{className:"detail-error-message",children:e.error})]})]}),!dt&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"detail-tabs",children:[t.jsx("button",{className:`detail-tab${b==="definition"?" detail-tab-active":""}`,onClick:()=>y("definition"),children:"Definition"}),t.jsx("button",{className:`detail-tab${b==="logs"?" detail-tab-active":""}`,onClick:()=>y("logs"),children:"Logs"}),(e.column==="in-progress"||e.column==="in-review"||e.column==="done")&&t.jsx("button",{className:`detail-tab${b==="changes"?" detail-tab-active":""}`,onClick:()=>y("changes"),children:"Changes"}),t.jsx("button",{className:`detail-tab${b==="review"?" detail-tab-active":""}`,onClick:()=>y("review"),children:"Review"}),t.jsx("button",{className:`detail-tab${b==="comments"?" detail-tab-active":""}`,onClick:()=>y("comments"),children:"Comments"}),t.jsx("button",{className:`detail-tab${b==="documents"?" detail-tab-active":""}`,onClick:()=>y("documents"),children:"Documents"}),t.jsx("button",{className:`detail-tab${b==="model"?" detail-tab-active":""}`,onClick:()=>y("model"),children:"Model"}),t.jsx("button",{className:`detail-tab${b==="workflow"?" detail-tab-active":""}`,onClick:()=>y("workflow"),children:"Workflow"}),t.jsx("button",{className:`detail-tab${b==="stats"?" detail-tab-active":""}`,onClick:()=>y("stats"),children:"Stats"}),t.jsx("button",{className:`detail-tab${b==="routing"?" detail-tab-active":""}`,onClick:()=>y("routing"),children:"Routing"}),vs.map(({entry:K,tabId:Se})=>t.jsx("button",{className:`detail-tab${b===Se?" detail-tab-active":""}`,onClick:()=>y(Se),children:K.slot.label},`plugin-tab-${K.pluginId}-${Se}`))]}),b==="workflow"?t.jsx("div",{className:"detail-section",children:t.jsx(_$,{taskId:e.id,results:Z,loading:gt,enabledWorkflowSteps:O,canEdit:Ye,projectId:n,isTaskInProgress:e.column==="in-progress"&&e.status!=="paused",onWorkflowStepsChange:mr})}):b==="model"?t.jsx("div",{className:"detail-section",children:t.jsx(n$,{task:e,addToast:m,onTaskUpdated:h,settings:Tn})}):b==="logs"?t.jsxs("div",{className:`detail-section${M==="agent-log"?" detail-section--agent-log":""}`,children:[t.jsxs("div",{className:"log-subview-toggle",children:[t.jsx("button",{className:`log-subview-btn${M==="activity"?" log-subview-btn-active":""}`,onClick:()=>T("activity"),children:"Activity"}),t.jsx("button",{className:`log-subview-btn${M==="agent-log"?" log-subview-btn-active":""}`,onClick:()=>T("agent-log"),children:"Agent Log"})]}),M==="agent-log"?t.jsx(QP,{entries:Ri,loading:sr,executorModel:H$(e,Ri,X,Tn),validatorModel:q$(e,Ri,X,Tn),planningModel:W$(e,Ri,Tn),hasMore:ca,onLoadMore:Ji,loadingMore:bi,totalCount:da}):t.jsxs("div",{className:"detail-activity",children:[t.jsx("h4",{children:"Activity"}),k.activityLogTruncatedCount?t.jsxs("div",{className:"detail-log-truncated",children:["Showing the most recent ",k.log.length," activity entries."]}):null,k.log&&k.log.length>0?t.jsx("div",{className:"detail-activity-list",ref:qn,children:(()=>{let K=!1;return[...k.log].reverse().map((Se,yt)=>{const Wt=Se.action.match(Qv)??Se.action.match(Cf),Fn=!K&&F!=null&&Wt?.[1]===F;return Fn&&(K=!0),t.jsxs("div",{className:`detail-log-entry${Fn?" detail-log-entry--stall-highlight":""}`,"data-stall-highlight":Fn?"true":void 0,children:[t.jsxs("div",{className:"detail-log-header",children:[t.jsx("span",{className:"detail-log-timestamp",children:yr(Se.timestamp)}),t.jsx("span",{className:"detail-log-action",children:Se.action})]}),Se.outcome&&t.jsx("div",{className:"detail-log-outcome",children:Se.outcome})]},yt)})})()}):t.jsx("div",{className:"detail-log-empty",children:"(no activity)"})]})]}):b==="changes"?t.jsx(v$,{taskId:e.id,worktree:e.worktree,projectId:n,column:e.column,mergeDetails:e.mergeDetails,modifiedFiles:e.modifiedFiles}):b==="review"?t.jsx(p$,{task:e,addToast:m,projectId:n,onTaskUpdated:h}):b==="comments"?t.jsx(o$,{task:e,addToast:m,projectId:n,onTaskUpdated:h}):b==="documents"?t.jsx(D$,{taskId:e.id,addToast:m,projectId:n,onTaskUpdated:h,canEdit:Ye}):as?t.jsx("div",{className:"detail-section",children:t.jsx(va,{slotId:"task-detail-tab",projectId:n,pluginIds:[as.entry.pluginId]})}):b==="stats"?t.jsx("div",{className:"detail-section",children:t.jsx(F$,{tokenUsage:k.tokenUsage,loading:C,task:k})}):b==="routing"?t.jsx("div",{className:"detail-section",children:t.jsx(I$,{task:e,settings:Tn,addToast:m,onTaskUpdated:h})}):t.jsxs(t.Fragment,{children:[e.column==="done"&&e.summary&&t.jsxs("div",{className:"detail-section detail-summary",children:[t.jsx("h4",{children:"Summary"}),t.jsx("div",{className:"markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],components:Ef,children:e.summary})})]}),t.jsx(g$,{task:e}),(qe?.total??0)>0&&t.jsxs("div",{className:"detail-section detail-retries-section",children:[t.jsxs("div",{className:"detail-source-header",children:[t.jsxs("div",{className:"detail-source-summary",children:[t.jsx("span",{className:"detail-source-label",children:"Retries"}),t.jsx("span",{className:"detail-source-number",children:qe?.total??0})]}),t.jsx("button",{type:"button",className:"detail-source-toggle","aria-expanded":G,"aria-label":G?"Collapse retries details":"Expand retries details",onClick:()=>ze(K=>!K),children:t.jsx(Vn,{size:16,className:G?"detail-source-chevron--expanded":void 0})})]}),G&&t.jsx("dl",{className:"detail-source-grid detail-retries-grid",children:Bt.map(K=>t.jsxs("div",{children:[t.jsx("dt",{title:K.title,children:K.label}),t.jsx("dd",{children:K.value})]},K.key))}),Tn?.maxTotalRetriesBeforeFail!=null&&(qe?.total??0)>=Tn.maxTotalRetriesBeforeFail&&t.jsx("p",{className:"detail-retries-warning",children:"Retry cap reached for this task."})]}),e.sourceIssue&&t.jsxs("div",{className:"detail-section detail-source-section",children:[t.jsxs("div",{className:"detail-source-header",children:[t.jsxs("div",{className:"detail-source-summary",children:[t.jsx("span",{className:"detail-source-label",children:"Source issue"}),e.sourceIssue.provider.toLowerCase()==="github"&&t.jsxs("span",{className:"detail-source-provider-badge","aria-label":"GitHub source issue",children:[t.jsx(Ps,{"aria-hidden":"true"}),t.jsx("span",{children:"GitHub"})]}),e.sourceIssue.url?t.jsx("a",{className:"detail-source-link detail-source-link--summary detail-source-number",href:e.sourceIssue.url,target:"_blank",rel:"noopener noreferrer",children:`(#${e.sourceIssue.issueNumber})`}):t.jsx("span",{className:"detail-source-number",children:`(#${e.sourceIssue.issueNumber})`})]}),t.jsx("button",{type:"button",className:"detail-source-toggle","aria-expanded":ut,"aria-label":ut?"Collapse source issue details":"Expand source issue details",onClick:()=>wt(K=>!K),children:t.jsx(Vn,{size:16,className:ut?"detail-source-chevron--expanded":void 0})})]}),ut&&t.jsxs("dl",{className:"detail-source-grid",children:[t.jsxs("div",{children:[t.jsx("dt",{children:"Provider"}),t.jsx("dd",{children:e.sourceIssue.provider})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"Repository"}),t.jsx("dd",{children:e.sourceIssue.repository})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"Issue Identifier"}),t.jsx("dd",{children:e.sourceIssue.externalIssueId})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"URL"}),t.jsx("dd",{children:e.sourceIssue.url?t.jsx("a",{className:"detail-source-link",href:e.sourceIssue.url,target:"_blank",rel:"noopener noreferrer",children:e.sourceIssue.url}):t.jsx("span",{className:"detail-source-empty",children:"(none)"})})]})]})]}),Fe&&t.jsxs("div",{className:"detail-section detail-github-tracking-section",children:[t.jsxs("div",{className:"detail-source-header",children:[t.jsxs("div",{className:"detail-source-summary",children:[t.jsx("span",{className:"detail-source-label",children:"GitHub tracking"}),t.jsxs("span",{className:"detail-source-provider-badge","aria-label":"GitHub tracking status",children:[t.jsx(Ps,{"aria-hidden":"true"}),t.jsx("span",{children:nn})]}),!Ft&&t.jsx("span",{className:"detail-source-empty",children:on?"Checking tracking status":Rt?"Issue not yet created":"Tracking is currently disabled"})]}),ne&&t.jsx("button",{type:"button",className:"btn btn-sm btn-primary detail-github-tracking-enable","aria-label":"Enable GitHub tracking",disabled:Xt,onClick:()=>void Zn(),children:"Enable"}),An&&t.jsxs("span",{className:"detail-github-tracking-spinner",role:"status","aria-live":"polite","aria-label":Xt?"Enabling GitHub tracking":"Loading GitHub tracking status",children:[t.jsx(_t,{size:16,className:"spin","aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:Xt?"Enabling GitHub tracking…":"Loading GitHub tracking status…"})]}),t.jsx("button",{type:"button",className:"detail-source-toggle","aria-expanded":Ht,"aria-label":Ht?"Collapse GitHub tracking details":"Expand GitHub tracking details",onClick:()=>gn(K=>!K),children:t.jsx(Vn,{size:16,className:Ht?"detail-source-chevron--expanded":void 0})})]}),Ht&&t.jsxs("div",{className:"detail-github-tracking-content",children:[Ft&&t.jsxs("dl",{className:"detail-source-grid detail-github-tracking-grid",children:[t.jsxs("div",{children:[t.jsx("dt",{children:"Issue"}),t.jsx("dd",{children:Ft.url?t.jsx("a",{className:"detail-source-link",href:Ft.url,target:"_blank",rel:"noopener noreferrer",children:`${Ft.owner}/${Ft.repo}#${Ft.number}`}):t.jsx("span",{children:`${Ft.owner}/${Ft.repo}#${Ft.number}`})})]}),t.jsxs("div",{children:[t.jsx("dt",{children:"State"}),t.jsx("dd",{children:t.jsx("span",{className:`detail-github-issue-state ${e.issueInfo?.state==="closed"?"detail-github-issue-state--closed":"detail-github-issue-state--open"}`,children:e.issueInfo?.state??"open"})})]})]}),t.jsxs("div",{className:"detail-github-tracking-controls",children:[!Ft&&Rt&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm touch-target",onClick:()=>void hs(),disabled:Xt||!yn,title:yn?void 0:"Add a title or description so a tracking issue can be created.",children:"Create tracking issue"}),!yn&&t.jsx("small",{className:"detail-github-tracking-helper",children:"Tracking issue will be created once this task has a title or description to summarize."})]}),ft&&t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:"checkbox-label",htmlFor:"detail-github-tracking-toggle",children:[t.jsx("input",{id:"detail-github-tracking-toggle",type:"checkbox",checked:Rt,disabled:Xt,onChange:()=>void Zn()}),"Enable GitHub tracking"]}),t.jsxs("div",{className:"detail-github-tracking-repo-row",children:[t.jsx("input",{className:"input",value:Mn,onChange:K=>{je(K.target.value),Nn(null)},placeholder:es||"owner/repo"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void ls(),disabled:Xt,children:"Save"})]}),Zt&&t.jsx("small",{className:"detail-github-tracking-error",children:Zt}),Ft&&t.jsx("button",{className:"btn btn-sm touch-target",onClick:()=>void Ra(),disabled:Xt,children:"Unlink GitHub issue"})]})]})]})]}),t.jsx("div",{className:"detail-section detail-agent-section",children:t.jsxs("div",{className:"detail-meta-row",children:[t.jsxs("div",{className:"detail-meta-left",children:[Um.length>0&&t.jsx("span",{className:"detail-provider-icons","data-testid":"detail-provider-icons",children:Um.map(K=>t.jsx(Gn,{provider:K,size:"sm"},K))}),t.jsxs("span",{className:"detail-meta-label",children:[t.jsx(Qn,{size:14,className:"detail-meta-label-icon"}),"Agent"]})]}),t.jsxs("div",{className:"detail-agent-actions",children:[hr?t.jsxs("span",{className:"detail-agent-chip",children:[t.jsx(Qn,{size:14}),hr,t.jsx("button",{className:"detail-agent-clear",onClick:()=>void Ke(),title:"Unassign agent",children:t.jsx(kn,{size:12})})]}):t.jsx("button",{className:"btn btn-sm",onClick:()=>{ee?L(!1):U()},children:"Assign Agent"}),ee&&t.jsxs("div",{className:"agent-picker-dropdown",children:[Y&&t.jsx("div",{className:"agent-picker-loading",children:"Loading agents..."}),!Y&&ie.map(K=>t.jsxs("button",{className:`agent-picker-item${e.assignedAgentId===K.id?" selected":""}`,onClick:()=>void Te(K.id),children:[t.jsx(Qn,{size:14}),t.jsx("span",{className:"agent-picker-name",children:K.name}),t.jsx("span",{className:"agent-picker-role",children:K.role})]},K.id)),!Y&&ie.length===0&&t.jsx("div",{className:"agent-picker-empty",children:"No agents available"})]})]})]})}),t.jsxs("div",{className:"detail-section detail-step-progress",children:[t.jsx("h4",{children:"Progress"}),k.steps&&k.steps.length>0?t.jsxs("div",{className:"step-progress-wrapper",children:[t.jsx("div",{className:"step-progress-bar",children:k.steps.map((K,Se)=>t.jsx("div",{className:`step-progress-segment step-progress-segment--${K.status}`,"data-tooltip":`${K.name} (${K.status})`,style:{backgroundColor:G$(K.status)}},Se))}),t.jsxs("span",{className:"step-progress-label",children:[k.steps.filter(K=>K.status==="done").length,"/",k.steps.length," step",k.steps.length===1?"":"s"]})]}):t.jsx("div",{className:"step-progress-empty",children:"(no steps defined)"})]}),t.jsxs("div",{className:"detail-section",children:[!Be&&t.jsx("div",{className:"detail-spec-edit-trigger",children:t.jsx("button",{className:"btn btn-sm",onClick:tt,children:"Edit"})}),Be?t.jsxs("div",{className:"spec-editor-edit-mode",children:[t.jsx("textarea",{className:"spec-editor-textarea",value:ct,onChange:K=>De(K.target.value),onKeyDown:wi,disabled:B,placeholder:"Enter task specification in Markdown...",rows:12}),t.jsxs("div",{className:"spec-editor-actions-row",children:[t.jsx("button",{className:"btn btn-sm",onClick:Lt,disabled:B,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void Sn(),disabled:ct===(k.prompt||"")||B,children:B?"Saving…":"Save"})]}),t.jsxs("div",{className:"spec-editor-hint",children:[t.jsx("kbd",{children:"Ctrl"}),"+",t.jsx("kbd",{children:"Enter"})," to save · ",t.jsx("kbd",{children:"Escape"})," to cancel"]}),t.jsxs("div",{className:"spec-editor-revision",children:[t.jsx("h4",{children:"Ask AI to Revise"}),t.jsx("p",{className:"spec-editor-revision-help",children:"Provide feedback for the AI to improve this specification. The task will move to planning for replanning."}),t.jsx("textarea",{className:"spec-editor-feedback",value:le,onChange:K=>_e(K.target.value),placeholder:"e.g., 'Add more details about error handling', 'Split this into smaller steps', 'Include tests for the API endpoints'...",disabled:Ne,rows:4,maxLength:2e3}),t.jsxs("div",{className:"spec-editor-revision-actions",children:[t.jsxs("span",{className:"spec-editor-char-count",children:[le.length,"/2000"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void qs(),disabled:!le.trim()||Ne,children:Ne?"Requesting…":"Request AI Revision"})]})]})]}):C?t.jsx("div",{className:"spec-loading",children:"Loading specification…"}):k.prompt?t.jsx("div",{className:"markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],components:Ef,children:k.prompt.replace(/^#\s+[^\n]*\n+/,"")})}):t.jsx("div",{className:"detail-prompt",children:"(no prompt)"})]}),t.jsx("div",{className:"detail-section detail-no-commits-expected-section",children:t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{className:"checkbox-label",htmlFor:"detail-no-commits-expected-toggle",children:[t.jsx("input",{id:"detail-no-commits-expected-toggle",type:"checkbox",checked:Ct,disabled:cn,onChange:()=>{Gi()}}),"No commits expected (decision-only task)"]}),t.jsx("small",{children:"Allows the task to complete without producing git commits. Use for evaluation, verification, or audit tasks where the deliverable is the recorded decision."})]})}),t.jsxs("div",{className:"detail-section",children:[t.jsx("h4",{children:"Attachments"}),E.length>0?t.jsx("div",{className:"detail-attachments-grid",children:E.map(K=>{const Se=Ci(`/api/tasks/${e.id}/attachments/${K.filename}`);return t.jsxs("div",{className:"detail-attachment-card",children:[t.jsx("a",{className:"detail-attachment-link",href:Se,target:"_blank",rel:"noopener noreferrer",children:t.jsx("img",{src:Se,alt:K.originalName,className:"detail-attachment-image"})}),t.jsxs("div",{className:"detail-attachment-meta",children:[K.originalName," (",K$(K.size),")"]}),t.jsx("button",{className:"detail-attachment-delete",onClick:()=>Yi(K.filename),title:"Delete attachment",children:"×"})]},K.filename)})}):t.jsx("div",{className:"detail-empty-inline",children:"(no attachments)"}),t.jsx("input",{className:"detail-hidden-file-input",ref:Ki,type:"file",accept:"image/*",onChange:dr}),t.jsx("button",{className:"btn btn-sm",onClick:()=>Ki.current?.click(),disabled:$,children:$?"Uploading…":"Attach Screenshot"})]}),t.jsxs("div",{className:"detail-deps",children:[t.jsx("h4",{children:"Dependencies"}),q.length>0?t.jsx("ul",{className:"detail-dep-list",children:q.map(K=>{const Se=s.find(Wt=>Wt.id===K),yt=Se?.title||Se?.description||K;return t.jsxs("li",{className:"detail-dep-item",children:[t.jsxs("span",{className:"detail-dep-link",onClick:()=>we(K),onKeyDown:Wt=>{(Wt.key==="Enter"||Wt.key===" ")&&(Wt.preventDefault(),we(K))},role:"link",tabIndex:0,title:`Click to view ${K}`,children:[t.jsx("span",{className:"detail-dep-id",children:K}),t.jsx("span",{className:"detail-dep-label",children:Bd(yt,40)})]}),t.jsx("button",{className:"dep-remove-btn",onClick:Wt=>wn(Wt,K),title:`Remove dependency ${K}`,children:"×"})]},K)})}):t.jsx("div",{className:"detail-empty-inline",children:"(no dependencies)"}),k.overlapBlockedBy&&t.jsxs("div",{className:"detail-empty-inline",children:["File scope overlap blocker: ",k.overlapBlockedBy,!so&&" (stale)"]}),t.jsxs("div",{className:"dep-trigger-wrap",children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{be&&ae(""),Ce(K=>!K)},children:"Add Dependency"}),be&&(()=>{const K=Ae.toLowerCase(),Se=K?ps.filter(yt=>yt.id.toLowerCase().includes(K)||yt.title&&yt.title.toLowerCase().includes(K)||yt.description&&yt.description.toLowerCase().includes(K)):ps;return t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:Ae,onChange:yt=>ae(yt.target.value),onClick:yt=>yt.stopPropagation()}),Se.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):Se.map(yt=>t.jsxs("div",{className:"dep-dropdown-item",onClick:()=>{kt(yt.id),Ce(!1)},children:[t.jsx("span",{className:"dep-dropdown-id",children:yt.id}),t.jsx("span",{className:"dep-dropdown-title",children:Bd(yt.title||yt.description||yt.id,30)})]},yt.id))]})})()]})]}),t.jsxs("div",{className:"detail-deps detail-blocking",children:[t.jsx("h4",{children:"Blocking"}),hn&&t.jsx("div",{className:"detail-empty-inline",children:Vs}),fs.length>0?t.jsx("ul",{className:"detail-dep-list",children:fs.map(K=>t.jsxs("li",{className:"detail-dep-item",children:[t.jsxs("span",{className:"detail-dep-link",onClick:()=>we(K.id),onKeyDown:Se=>{(Se.key==="Enter"||Se.key===" ")&&(Se.preventDefault(),we(K.id))},role:"link",tabIndex:0,title:`Click to view ${K.id}`,children:[t.jsx("span",{className:"detail-dep-id",children:K.id}),t.jsx("span",{className:"detail-dep-label",children:Bd(K.label,40)})]}),K.stale&&t.jsx("span",{className:"detail-blocking-item--stale",title:"Stale blockedBy edge: self-healing clearStaleBlockedBy should clear this automatically",children:"(stale)"})]},K.id))}):t.jsx("div",{className:"detail-empty-inline",children:"(no downstream tasks blocked)"})]}),k.ageStaleness&&(()=>{const K=wx(k.ageStaleness);return K?t.jsxs("div",{className:"detail-section",children:[t.jsx("div",{className:"detail-sidebar-title",children:"Task age staleness"}),t.jsx("div",{children:K.headline}),t.jsx("div",{className:"detail-description",children:K.description}),t.jsxs("div",{className:"detail-in-review-stall-meta",children:[t.jsxs("span",{children:["Column ",k.ageStaleness.column]}),t.jsxs("span",{children:["Age ",bo(k.ageStaleness.ageMs)]}),t.jsxs("span",{children:["Warning ",bo(k.ageStaleness.warningThresholdMs)]}),t.jsxs("span",{children:["Critical ",bo(k.ageStaleness.criticalThresholdMs)]}),t.jsxs("span",{children:["Observed ",yr(k.ageStaleness.observedAt)]}),t.jsx("span",{children:k.ageStaleness.paused?"Paused":"Active"})]})]}):null})(),e.column==="in-review"&&t.jsxs(t.Fragment,{children:[xx(k)&&k.inReviewStall&&(()=>{const K=bx(k.inReviewStall,{mergeRetries:k.mergeRetries,maxAutoMergeRetries:Tc}),Se=z$(k,k.inReviewStall.code);return t.jsxs("div",{className:`detail-section detail-in-review-stall detail-in-review-stall--${K.code}`,"data-stall-code":K.code,children:[t.jsxs("div",{className:"detail-in-review-stall-header",children:[t.jsxs("span",{className:"card-status-badge card-status-badge--in-review in-review-stall",children:[K.badgeLabel,K.counter?` ${K.counter}`:""]}),t.jsx("span",{className:"detail-in-review-stall-headline",children:K.headline})]}),t.jsx("div",{className:"detail-in-review-stall-reason",children:k.inReviewStall.reason}),t.jsx("div",{className:"detail-in-review-stall-description",children:K.description}),t.jsx("div",{className:"detail-in-review-stall-action",children:K.suggestedAction}),t.jsxs("div",{className:"detail-in-review-stall-meta",children:[t.jsxs("span",{children:["Observed ",yr(k.inReviewStall.observedAt)]}),Se?t.jsx("button",{type:"button",className:"btn btn-sm detail-in-review-stall-jump",onClick:()=>{y("logs"),T("activity"),W(k.inReviewStall?.code??null)},children:"View activity log"}):t.jsx("span",{className:"detail-in-review-stall-no-log",title:"No 'In-review stall surfaced' entry on this task yet — self-healing may not have logged one within its rate-limit window.",children:"No log entry yet"})]})]})})(),yx(k)&&k.stalePausedReview&&(()=>{const K=vx(k.stalePausedReview),Se=[...k.log??[]].reverse().find(yt=>yt.action.match(Cf)?.[1]===k.stalePausedReview?.code);return t.jsxs("div",{className:`detail-section detail-in-review-stall detail-in-review-stall--${K.code}`,"data-stall-code":K.code,children:[t.jsxs("div",{className:"detail-in-review-stall-header",children:[t.jsx("span",{className:"card-status-badge card-status-badge--in-review stale-paused-review",children:K.badgeLabel}),t.jsx("span",{className:"detail-in-review-stall-headline",children:K.headline})]}),t.jsx("div",{className:"detail-in-review-stall-reason",children:k.stalePausedReview.reason}),t.jsx("div",{className:"detail-in-review-stall-description",children:K.description}),t.jsx("div",{className:"detail-in-review-stall-action",children:K.suggestedAction}),t.jsxs("div",{className:"detail-in-review-stall-meta",children:[t.jsxs("span",{children:["Age ",bo(k.stalePausedReview.ageMs)]}),t.jsxs("span",{children:["Threshold ",bo(k.stalePausedReview.thresholdMs)]}),t.jsxs("span",{children:["Observed ",yr(k.stalePausedReview.observedAt)]}),Se?t.jsx("button",{type:"button",className:"btn btn-sm detail-in-review-stall-jump",onClick:()=>{y("logs"),T("activity"),W(k.stalePausedReview?.code??null)},children:"View activity log"}):t.jsx("span",{className:"detail-in-review-stall-no-log",children:"No log entry yet"})]})]})})(),t.jsx("div",{className:"detail-section detail-pr-section",children:t.jsx(i$,{taskId:e.id,projectId:n,prInfo:e.prInfo,automationStatus:e.status??null,autoMerge:Tn?.autoMerge??!1,isManualPrFlow:Gm,prAuthAvailable:f??!1,onPrCreated:K=>{e.prInfo=K},onPrUpdated:K=>{e.prInfo=K},addToast:m})})]})]})]})]}),t.jsx("div",{className:"modal-actions",children:dt?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"modal-edit-hint",children:Mi==="saving"?"Autosaving…":Mi==="saved"?"Saved":Mi==="error"?"Save failed":"Changes autosave as you edit"}),t.jsx("div",{className:"modal-actions-spacer"}),t.jsx("button",{className:"btn btn-sm",onClick:_a,disabled:Re,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>void Aa(),disabled:Re,children:Re?"Saving…":"Save"})]}):t.jsxs(t.Fragment,{children:[e.column==="triage"&&e.status==="awaiting-approval"&&k.prompt&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-primary btn-sm",onClick:Ia,children:"Approve Plan"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:Ta,children:"Reject Plan"})]}),e.column==="triage"&&e.status!=="awaiting-approval"&&!R&&t.jsx("button",{className:"btn btn-sm btn-danger",onClick:ua,"aria-label":"Delete task",title:"Delete task",children:"Delete"}),(e.column!=="triage"||e.status==="awaiting-approval"||R||e.paused)&&t.jsxs("div",{className:"detail-actions-dropdown",ref:os,children:[t.jsxs("button",{className:"btn btn-sm",onClick:()=>{it(K=>!K),Un(!1)},"aria-haspopup":"menu","aria-expanded":ce,children:["Actions",t.jsx(Cn,{size:12})]}),ce&&t.jsxs("div",{className:"detail-actions-menu",role:"menu",children:[t.jsx("button",{className:"detail-actions-menu-item detail-actions-menu-item-danger",role:"menuitem",onClick:()=>vi(ua),children:"Delete"}),u&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(or),children:"Duplicate"}),(e.column==="done"||e.column==="in-review")&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(no),children:"Refine"}),t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(Pa),children:"Respecify"}),R&&c&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(ar),children:"Retry"}),d&&e.column!=="done"&&e.column!=="archived"&&t.jsx("button",{className:"detail-actions-menu-item detail-actions-menu-item-danger",role:"menuitem",onClick:()=>vi(rr),children:"Reset"}),e.column!=="done"&&!e.assignedAgentId&&t.jsx("button",{className:"detail-actions-menu-item",role:"menuitem",onClick:()=>vi(ma),children:e.paused?"Unpause":"Pause"}),e.column!=="done"&&e.paused&&e.pausedByAgentId&&t.jsx("span",{className:"detail-actions-menu-item detail-actions-menu-note",role:"note",children:"Paused by agent"})]})]}),t.jsx("div",{className:"modal-actions-spacer"}),t.jsx("div",{className:"detail-move-dropdown",ref:Ot,children:e.column==="in-review"?t.jsxs("div",{className:"detail-move-actions-in-review",children:[t.jsxs("div",{children:[t.jsxs("button",{ref:On,className:"btn btn-primary btn-sm detail-move-btn",onClick:Vm,onKeyDown:Wm,disabled:!Os,"aria-label":Os?`Move to ${ds[Os]}`:void 0,"aria-haspopup":oi?"menu":void 0,"aria-expanded":oi?mn:void 0,children:[t.jsxs("span",{className:"detail-move-btn__label",children:["Move to ",Os?ds[Os]:""]}),oi&&t.jsx("span",{className:"detail-move-btn__arrow","aria-hidden":"true",children:t.jsx(Cn,{size:12})})]}),mn&&oi&&t.jsx("div",{className:"detail-move-menu",role:"menu",onKeyDown:ul,children:Uc.map(K=>t.jsx("button",{className:"detail-move-menu-item",role:"menuitem",onClick:()=>ri(K),onKeyDown:ul,children:K==="in-progress"?"Back to In Progress":`Move to ${ds[K]}`},K))})]}),Hc?t.jsx("button",{className:"btn btn-primary btn-sm",disabled:!0,children:Hc}):t.jsx("button",{className:"btn btn-primary btn-sm",onClick:lr,children:ml})]}):t.jsxs("div",{children:[t.jsxs("button",{ref:On,className:"btn btn-primary btn-sm detail-move-btn",onClick:Vm,onKeyDown:Wm,disabled:!Os,"aria-label":Os?`Move to ${ds[Os]}`:void 0,"aria-haspopup":oi?"menu":void 0,"aria-expanded":oi?mn:void 0,children:[t.jsxs("span",{className:"detail-move-btn__label",children:["Move to ",Os?ds[Os]:""]}),oi&&t.jsx("span",{className:"detail-move-btn__arrow","aria-hidden":"true",children:t.jsx(Cn,{size:12})})]}),mn&&oi&&t.jsx("div",{className:"detail-move-menu",role:"menu",onKeyDown:ul,children:Uc.map(K=>t.jsxs("button",{className:"detail-move-menu-item",role:"menuitem",onClick:()=>ri(K),onKeyDown:ul,children:["Move to ",ds[K]]},K))})]})})]})}),Le&&t.jsx("div",{className:"modal-overlay open detail-refine-overlay",onClick:$a,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal detail-refine-modal",onClick:K=>K.stopPropagation(),children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{className:"detail-refine-title",children:"Refine"}),t.jsx("button",{className:"modal-close",onClick:$a,"aria-label":"Close",children:"×"})]}),t.jsxs("div",{className:"detail-body",children:[t.jsx("p",{className:"detail-refine-help",children:"Describe what needs to be refined or improved..."}),t.jsx("textarea",{className:"detail-refine-textarea",value:Ve,onChange:K=>ge(K.target.value),placeholder:"Enter your feedback here...",rows:6,maxLength:2e3,autoFocus:!0}),t.jsxs("div",{className:"detail-refine-input-group",children:[t.jsxs("div",{className:"detail-refine-char-count",children:[Ve.length,"/2000 characters"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:cr,disabled:!Ve.trim()||he,children:he?"Creating...":"Create Refinement Task"})]})]}),t.jsx("div",{className:"modal-actions",children:t.jsx("button",{className:"btn btn-sm",onClick:$a,disabled:he,children:"Cancel"})})]})}),A&&t.jsx(i.Suspense,{fallback:null,children:t.jsx(Z$,{agentId:A,projectId:n,onClose:()=>Q(null),addToast:m})})]})}function s4({onClose:e,...n}){const s=i.useRef(null);Ui(s,!0,"task-detail-modal-size"),_i(!0);const a=aa(e);return t.jsx("div",{className:"modal-overlay open",...a,role:"dialog","aria-modal":"true",children:t.jsx("div",{className:"modal modal-lg task-detail-modal",ref:s,children:t.jsx(Zv,{...n,onRequestClose:e})})})}const Al={triage:"var(--triage)",todo:"var(--todo)","in-progress":"var(--in-progress)","in-review":"var(--in-review)",done:"var(--done)",archived:"var(--text-dim)"},Af=new Set(["planning","researching","executing","finalizing","merging","merging-fix"]);function Rf(e){return e==="merging-fix"?"Merging fixes…":e}const ey=["title","status","column","retries","dependencies","progress"],i4=["title","status","column","retries"];function a4(e){return e==="online"?"Online":e==="connecting"?"Connecting":e==="error"?"Error":"Offline"}function r4(e){return e==="online"?"●":e==="connecting"?"◐":e==="error"?"✕":"○"}function If(e){try{const n=Wn("kb-dashboard-list-columns",e);if(n){const a=JSON.parse(n).filter(r=>ey.includes(r));if(a.length>0)return new Set(a)}}catch{}return new Set(i4)}function Tf(e){try{const n=Wn("kb-dashboard-hide-done",e);if(n!==null)return n==="true"}catch{}return!1}function Pf(e){try{const n=Wn("kb-dashboard-stale-only-filter",e);if(n!==null)return n==="true"}catch{}return!1}function $f(e){try{const n=Wn("kb-dashboard-list-collapsed",e);if(n){const a=JSON.parse(n).filter(r=>xa.includes(r));if(a.length>0)return new Set(a)}}catch{}return new Set}function Df(e){try{const n=Wn("kb-dashboard-selected-tasks",e);if(n){const s=JSON.parse(n);return new Set(s)}}catch{}return new Set}function Lf(e){try{const n=Wn("kb-dashboard-list-selected-task",e);if(typeof n=="string"&&n.trim().length>0)return n}catch{}return null}function Of(e){try{const s=Wn("kb-dashboard-list-sidebar-width",e);if(!s)return 400;const a=Number(s);if(Number.isFinite(a)&&a>0)return a}catch{}return 400}const mc=280,Bu=.65,Rl=16;function Uu(e){return Math.max(mc,e*Bu)}function Il(e,n){const s=Uu(n);return Math.min(Math.max(e,mc),s)}function o4(e){return e.status==="executing"||e.column==="in-progress"}function Ff(e){const n=kx(e);return n.total===0||!o4(e)?{label:"-",percent:0,hasProgress:!1}:{label:`${n.completed}/${n.total}`,percent:n.completed/n.total*100,hasProgress:!0}}function l4({tasks:e,onMoveTask:n,onRetryTask:s,onDeleteTask:a,onPauseTask:r,onUnpauseTask:o,onArchiveTask:l,onMergeTask:c,onResetTask:d,onDuplicateTask:u,onOpenDetail:h,addToast:m,globalPaused:f,onNewTask:p,onQuickCreate:g,availableModels:w,favoriteProviders:v=[],favoriteModels:b=[],onToggleFavorite:y,onToggleModelFavorite:N,onPlanningMode:S,onSubtaskBreakdown:C,onTasksUpdated:x,projectId:k,projectName:R,taskStuckTimeoutMs:z,searchQuery:_="",lastFetchTimeMs:A,prAuthAvailable:Q}){const[H,M]=i.useState(null),[T,F]=i.useState("asc"),[W,oe]=i.useState(null),[D,E]=i.useState(null),[P,$]=i.useState(null),q=si()==="mobile",{confirm:de}=ii(),[be,Ce]=i.useState(()=>If(k)),[Ae,ae]=i.useState(()=>Tf(k)),[X,pe]=i.useState(()=>Pf(k)),[ie,ye]=i.useState(!1),[ee,L]=i.useState(()=>$f(k));i.useEffect(()=>{typeof window<"u"&&ss("kb-dashboard-list-columns",JSON.stringify([...be]),k)},[k,be]),i.useEffect(()=>{typeof window<"u"&&ss("kb-dashboard-hide-done",Ae.toString(),k)},[Ae,k]),i.useEffect(()=>{typeof window<"u"&&ss("kb-dashboard-stale-only-filter",X.toString(),k)},[k,X]),i.useEffect(()=>{typeof window<"u"&&ss("kb-dashboard-list-collapsed",JSON.stringify([...ee]),k)},[ee,k]);const[Y,me]=i.useState(!1),[B,xe]=i.useState(!1),[Ne,te]=i.useState(()=>Df(k)),[Be,$e]=i.useState(()=>Lf(k)),[ct,De]=i.useState(null),[le,_e]=i.useState(()=>Of(k)),Le=i.useRef(null),mt=i.useRef(null);i.useEffect(()=>{Ce(If(k)),ae(Tf(k)),pe(Pf(k)),ye(!1),L($f(k)),te(Df(k));const ue=Lf(k);$e(ue),De(ue?e.find(Re=>Re.id===ue)??null:null),_e(Of(k))},[k,e]),i.useEffect(()=>{typeof window<"u"&&ss("kb-dashboard-selected-tasks",JSON.stringify([...Ne]),k)},[k,Ne]),i.useEffect(()=>{if(!(typeof window>"u")){if(Be){ss("kb-dashboard-list-selected-task",Be,k);return}Ya("kb-dashboard-list-selected-task",k)}},[k,Be]),i.useEffect(()=>{if(!Be){De(null);return}const ue=e.find(Re=>Re.id===Be);ue&&De(Re=>!Re||Re.id!==Be?ue:{...Re,...ue})},[Be,e]),i.useEffect(()=>{if(q||typeof ResizeObserver>"u")return;const ue=Le.current;if(!ue)return;const Re=()=>{const at=Il(le,ue.clientWidth);at!==le&&_e(at)};Re();const et=new ResizeObserver(Re);return et.observe(ue),()=>et.disconnect()},[q,le]),i.useEffect(()=>{if(q||typeof ResizeObserver>"u")return;const ue=mt.current,Re=Le.current;if(!ue||!Re)return;let et=null,at=ue.offsetWidth;const Je=new ResizeObserver(()=>{const Nt=Il(ue.offsetWidth,Re.clientWidth);Nt!==at&&(at=Nt,et&&clearTimeout(et),et=setTimeout(()=>{try{ss("kb-dashboard-list-sidebar-width",String(Nt),k)}catch{}},200))});return Je.observe(ue),()=>{Je.disconnect(),et&&clearTimeout(et)}},[q,k]);const Ve=i.useCallback(()=>{xe(ue=>(ue&&te(new Set),!ue))},[]),ge=i.useCallback(ue=>{te(Re=>{const et=new Set(Re);return et.has(ue)?et.delete(ue):et.add(ue),et})},[]),he=i.useCallback(()=>{te(new Set)},[]),Pe=i.useCallback(ue=>{Ce(Re=>{const et=new Set(Re);return et.has(ue)?et.size>1&&et.delete(ue):et.add(ue),et})},[]),dt={title:"Title",status:"Status",column:"Column",dependencies:"Dependencies",progress:"Progress",retries:"Retries"},jt=i.useCallback(ue=>{if(H===ue){F(Re=>Re==="asc"?"desc":"asc");return}M(ue),F("asc")},[H]),nt=i.useCallback(ue=>{$(Re=>Re===ue?null:ue)},[]),xt=i.useCallback(ue=>{L(Re=>{const et=new Set(Re);return et.has(ue)?et.delete(ue):et.add(ue),et})},[]),Ie=i.useCallback(()=>{$(null)},[]),Qe=i.useMemo(()=>{let ue=_?e.filter(at=>at.id.toLowerCase().includes(_.toLowerCase())||at.title&&at.title.toLowerCase().includes(_.toLowerCase())||at.description.toLowerCase().includes(_.toLowerCase())):[...e];Ae&&!P&&(ue=ue.filter(at=>at.column!=="done"&&at.column!=="archived")),X&&(ue=ue.filter(at=>at.ageStaleness!=null)),ie&&(ue=ue.filter(at=>at.stalePausedReview!=null));const Re=P?ue.filter(at=>at.column===P):ue,et={triage:[],todo:[],"in-progress":[],"in-review":[],done:[],archived:[]};Re.forEach(at=>{const Je=im(at.column)?at.column:tc;et[Je].push(at)});for(const at of xa){if(!H){et[at]=px(et[at],at);continue}et[at]=[...et[at]].sort((Je,Nt)=>{let bt=0;switch(H){case"title":bt=(Je.title||Je.description).localeCompare(Nt.title||Nt.description);break;case"status":bt=(Je.status||"").localeCompare(Nt.status||"");break;case"column":bt=Je.column.localeCompare(Nt.column);break;case"retries":bt=(Je.retrySummary?.total??0)-(Nt.retrySummary?.total??0);break}return T==="asc"?bt:-bt})}return et},[e,_,H,T,Ae,X,ie,P]),ot=i.useMemo(()=>Object.values(Qe).reduce((ue,Re)=>ue+Re.length,0),[Qe]),Tt=i.useMemo(()=>e.filter(ue=>ue.column==="done"||ue.column==="archived").length,[e]),Mt=i.useMemo(()=>Ae?Tt:0,[Ae,Tt]),We=i.useCallback(()=>{const ue=Object.values(Qe).flat().filter(Re=>Re.column!=="archived").map(Re=>Re.id);te(Re=>{if(ue.every(at=>Re.has(at))){const at=new Set(Re);return ue.forEach(Je=>at.delete(Je)),at}else return new Set([...Re,...ue])})},[Qe]),J=i.useMemo(()=>{const ue=Object.values(Qe).flat().filter(Re=>Re.column!=="archived");return ue.length===0?!1:ue.every(Re=>Ne.has(Re.id))},[Qe,Ne]),ke=i.useMemo(()=>{const ue=Object.values(Qe).flat().filter(et=>et.column!=="archived");if(ue.length===0)return!1;const Re=ue.filter(et=>Ne.has(et.id)).length;return Re>0&&Re<ue.length},[Qe,Ne]),[lt,ve]=i.useState("__no_change__"),[st,Ue]=i.useState("__no_change__"),[fe,Xe]=i.useState("__no_change__"),[vt,St]=i.useState([]),[Et,Pt]=i.useState(!1),Jt=i.useMemo(()=>fe&&fe!=="__no_change__"?vt.find(ue=>ue.id===fe):void 0,[vt,fe]),[dn,Vt]=i.useState(!1);i.useEffect(()=>{if(Ne.size===0)return;let ue=!1;return(async()=>{Pt(!0);try{const et=await ac();ue||St(et)}catch(et){console.error("Failed to fetch nodes for bulk edit",et),ue||St([])}finally{ue||Pt(!1)}})(),()=>{ue=!0}},[Ne.size]);const ln=i.useCallback(async()=>{if(Ne.size===0)return;const ue=Array.from(Ne).map(At=>e.find(se=>se.id===At)).filter(At=>!!At),Re=ue.filter(At=>At.column==="archived"),et=ue.filter(At=>At.column!=="archived");if(et.length===0){m("No selected tasks can be deleted (archived tasks are excluded)","error");return}if(!await de({title:"Delete Selected Tasks",message:`Delete ${et.length} selected task${et.length===1?"":"s"}?`,confirmLabel:"Delete",cancelLabel:"Cancel",danger:!0}))return;Vt(!0);const Je=[],Nt=[],bt=Re.map(At=>At.id);try{for(const At of et)try{await a(At.id),Je.push(At.id)}catch(se){const re=fm(se);if(!re){Nt.push(At.id);continue}if(!await de({title:"Force Delete Task",message:`Task ${At.id} has dependents: ${re.dependentIds.join(", ")}. Remove dependency references and force delete?`,confirmLabel:"Force Delete",cancelLabel:"Skip",danger:!0})){Nt.push(At.id);continue}try{await a(At.id,{removeDependencyReferences:!0}),Je.push(At.id)}catch{Nt.push(At.id)}}}finally{Vt(!1)}Je.length>0&&te(At=>{const se=new Set(At);for(const re of Je)se.delete(re);return se}),m(`Deleted ${Je.length} task${Je.length===1?"":"s"} · ${bt.length} archived skipped · ${Nt.length} failed`,Nt.length>0?"error":"success")},[m,de,a,Ne,e]),fn=i.useCallback(async()=>{if(Ne.size===0)return;if(!r){m("Pause action is unavailable","error");return}const ue=Array.from(Ne).map(Nt=>e.find(bt=>bt.id===Nt)).filter(Nt=>!!Nt),Re=ue.filter(Nt=>Nt.column!=="archived"&&Nt.paused!==!0),et=ue.length-Re.length;if(Re.length===0){m("No selected tasks can be paused","error");return}Vt(!0);const at=[],Je=[];try{for(const Nt of Re)try{await r(Nt.id),at.push(Nt.id)}catch{Je.push(Nt.id)}}finally{Vt(!1)}at.length>0&&te(Nt=>{const bt=new Set(Nt);for(const At of at)bt.delete(At);return bt}),m(`Paused ${at.length} · ${et} skipped · ${Je.length} failed`,Je.length>0?"error":"success")},[m,r,Ne,e]),_n=i.useCallback(async()=>{if(Ne.size===0)return;if(!o){m("Unpause action is unavailable","error");return}const ue=Array.from(Ne).map(Nt=>e.find(bt=>bt.id===Nt)).filter(Nt=>!!Nt),Re=ue.filter(Nt=>Nt.column!=="archived"&&Nt.paused===!0),et=ue.length-Re.length;if(Re.length===0){m("No selected tasks can be unpaused","error");return}Vt(!0);const at=[],Je=[];try{for(const Nt of Re)try{await o(Nt.id),at.push(Nt.id)}catch{Je.push(Nt.id)}}finally{Vt(!1)}at.length>0&&te(Nt=>{const bt=new Set(Nt);for(const At of at)bt.delete(At);return bt}),m(`Unpaused ${at.length} · ${et} skipped · ${Je.length} failed`,Je.length>0?"error":"success")},[m,o,Ne,e]),an=i.useCallback(async()=>{if(Ne.size===0)return;if(!l){m("Archive action is unavailable","error");return}const ue=Array.from(Ne).map(bt=>e.find(At=>At.id===bt)).filter(bt=>!!bt),Re=ue.filter(bt=>bt.column==="done"),et=ue.length-Re.length;if(Re.length===0){m("No selected tasks can be archived (only done tasks)","error");return}if(!await de({title:"Archive Selected Tasks",message:`Archive ${Re.length} selected task${Re.length===1?"":"s"}?`,confirmLabel:"Archive",cancelLabel:"Cancel",danger:!1}))return;Vt(!0);const Je=[],Nt=[];try{for(const bt of Re)try{await l(bt.id),Je.push(bt.id)}catch{Nt.push(bt.id)}}finally{Vt(!1)}Je.length>0&&te(bt=>{const At=new Set(bt);for(const se of Je)At.delete(se);return At}),m(`Archived ${Je.length} · ${et} skipped · ${Nt.length} failed`,Nt.length>0?"error":"success")},[m,de,l,Ne,e]),Dn=i.useCallback(async()=>{if(Ne.size===0)return;const ue=Array.from(Ne).filter(et=>{const at=e.find(Je=>Je.id===et);return at&&at.column!=="archived"});if(ue.length===0){m("No valid tasks to update (archived tasks cannot be modified)","error");return}const Re={taskIds:ue};if(lt!=="__no_change__")if(lt==="")Re.modelProvider=null,Re.modelId=null;else{const et=lt.indexOf("/");et!==-1&&(Re.modelProvider=lt.slice(0,et),Re.modelId=lt.slice(et+1))}if(st!=="__no_change__")if(st==="")Re.validatorModelProvider=null,Re.validatorModelId=null;else{const et=st.indexOf("/");et!==-1&&(Re.validatorModelProvider=st.slice(0,et),Re.validatorModelId=st.slice(et+1))}if(fe!=="__no_change__"&&(fe===""?Re.nodeId=null:Re.nodeId=fe),Object.keys(Re).length===1){m("No changes to apply","info");return}Vt(!0);try{const et=await VN(Re.taskIds,Re.modelProvider,Re.modelId,Re.validatorModelProvider,Re.validatorModelId,void 0,void 0,Re.nodeId,k);x&&x(et.updated),m(`Updated ${ue.length} task${ue.length===1?"":"s"}`,"success"),he(),ve("__no_change__"),Ue("__no_change__"),Xe("__no_change__")}catch(et){m(Me(et)||"Failed to update models","error")}finally{Vt(!1)}},[Ne,e,lt,st,fe,k,m,he,x]),vn=i.useCallback(ue=>{if(q){h(ue,{origin:"list-mobile"});return}$e(ue.id),De(ue)},[q,h]),Ut=i.useRef(null),rn=i.useRef(null);i.useEffect(()=>()=>{Ut.current&&clearTimeout(Ut.current)},[]);const bn=i.useCallback(ue=>{if($e(ue.id),De(ue),"prompt"in ue){rn.current=null,Ut.current&&(clearTimeout(Ut.current),Ut.current=null);return}rn.current=ue.id,Ut.current&&clearTimeout(Ut.current),Ut.current=setTimeout(()=>{Ut.current=null,rn.current===ue.id&&Ga(ue.id,k).then(et=>{rn.current===et.id&&De(at=>!at||at.id!==et.id?at:{...at,...et})}).catch(()=>{})},200)},[k]),en=i.useCallback((ue,Re)=>{if(Re.paused){ue.preventDefault();return}ue.dataTransfer.setData("text/plain",Re.id),ue.dataTransfer.effectAllowed="move",oe(Re.id)},[]),Yt=i.useCallback(()=>{oe(null),E(null)},[]),tn=i.useCallback(ue=>{if(q)return;ue.preventDefault();const Re=Le.current;if(!Re)return;const et=Re.getBoundingClientRect(),at=Nt=>{const bt=Nt.clientX-et.left;_e(Il(bt,et.width))},Je=()=>{window.removeEventListener("mousemove",at),window.removeEventListener("mouseup",Je)};window.addEventListener("mousemove",at),window.addEventListener("mouseup",Je)},[q]),Qt=i.useCallback(ue=>{if(q)return;const Re=Le.current?.clientWidth??0,et=le/Bu+Rl,at=Math.max(Re,et),Je=Uu(at);if(ue.key==="ArrowLeft"||ue.key==="ArrowRight"){ue.preventDefault();const Nt=ue.key==="ArrowLeft"?-Rl:Rl;_e(bt=>Il(bt+Nt,at));return}if(ue.key==="Home"){ue.preventDefault(),_e(mc);return}ue.key==="End"&&(ue.preventDefault(),_e(Je))},[q,le]),Kt=i.useCallback((ue,Re)=>{ue.preventDefault(),ue.dataTransfer.dropEffect="move",E(Re)},[]),xn=i.useCallback(()=>{E(null)},[]),un=i.useCallback(async(ue,Re)=>{ue.preventDefault(),E(null);const et=ue.dataTransfer.getData("text/plain");if(et){if(Re==="archived"){m("Tasks can only be archived via the archive button","error");return}try{const Je=e.find(At=>At.id===et)?.steps.some(At=>At.status!=="pending")??!1,Nt=(Re==="todo"||Re==="triage")&&Je;let bt;if(Nt){if(await de({title:"Preserve Progress?",message:"This task has completed steps. Keep progress before moving?",confirmLabel:"Keep Progress",cancelLabel:"Reset Progress"}))bt={preserveProgress:!0};else if(!await de({title:"Reset Progress?",message:"Reset all step progress before moving this task?",confirmLabel:"Reset Progress",cancelLabel:"Cancel Move",danger:!0}))return}await n(et,Re,bt)}catch(at){m(Me(at),"error")}}},[n,m,e,de]),pn=ue=>!H||H!==ue?t.jsx(Sb,{size:14,className:"sort-icon"}):T==="asc"?t.jsx(Ha,{size:14,className:"sort-icon active"}):t.jsx(Yo,{size:14,className:"sort-icon active"}),$t=ue=>t.jsxs("div",{id:ue,className:"list-view-options-panel",children:[t.jsx("div",{className:"list-view-options-columns",children:ey.map(Re=>{const et=be.has(Re),at=et&&be.size===1;return t.jsxs("label",{className:`list-column-dropdown-item${at?" disabled":""}`,title:at?"At least one column must be visible":"",children:[t.jsx("input",{type:"checkbox",checked:et,onChange:()=>Pe(Re),disabled:at}),t.jsx("span",{children:dt[Re]})]},Re)})}),t.jsxs("button",{className:"btn btn-sm list-hide-done-toggle",onClick:()=>ae(Re=>!Re),"aria-pressed":Ae,title:Ae?"Show done tasks":"Hide done tasks",children:[Ae?t.jsx(Gr,{size:14}):t.jsx(Zu,{size:14}),Ae?"Show Done":"Hide Done"]}),t.jsx("button",{className:"btn btn-sm list-hide-done-toggle",onClick:()=>pe(Re=>!Re),"aria-pressed":X,title:X?"Show all tasks":"Show stale tasks only",children:X?"Show all":"Stale only"}),t.jsx("button",{className:"btn btn-sm list-hide-done-toggle",onClick:()=>ye(Re=>!Re),"aria-pressed":ie,title:ie?"Show all tasks":"Show stale paused review tasks only",children:ie?"Show all":"Stale paused review"}),t.jsx("div",{className:"list-drop-zones list-drop-zones--sidebar",children:xa.map(Re=>{const et=e.filter(bt=>bt.column===Re).length,at=Re==="done"||Re==="archived",Je=Ae&&at?0:et,Nt=Ae&&at&&et>0;return t.jsxs("div",{className:`list-drop-zone${D===Re?" drag-over":""}${P===Re?" active":""}`,onClick:()=>nt(Re),onDragOver:bt=>Kt(bt,Re),onDragLeave:xn,onDrop:bt=>un(bt,Re),"data-column":Re,children:[t.jsx("span",{className:`list-section-dot dot-${Re}`}),t.jsx("span",{className:"drop-zone-label",children:ds[Re]}),t.jsx("span",{className:"drop-zone-count",children:Nt?`${Je} of ${et}`:et})]},Re)})})]});return t.jsxs("div",{className:"list-view",children:[q&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"list-toolbar",children:[t.jsx("button",{className:"btn btn-sm",onClick:Ve,"aria-pressed":B,children:B?"Done Editing":"Bulk Edit"}),t.jsxs("button",{className:"btn btn-sm list-view-options-toggle",onClick:()=>me(ue=>!ue),"aria-expanded":Y,"aria-controls":"list-view-options-panel-mobile",children:[t.jsx(th,{size:14}),"View options"]}),p?t.jsx("button",{className:"btn btn-task-create btn-sm list-new-task-action",onClick:p,children:"+ New Task"}):null,t.jsx("div",{className:"list-stats",children:P?`${ot} of ${e.length} tasks in ${ds[P]}`:`${ot} of ${e.length} tasks`})]}),Y?t.jsx("div",{className:"list-toolbar-mobile-options",children:$t("list-view-options-panel-mobile")}):null]}),t.jsx("div",{className:"list-table-container",children:t.jsxs("div",{className:q?"":"list-split-layout","data-testid":q?void 0:"list-split-layout",ref:Le,children:[t.jsxs("div",{className:q?"":"list-split-sidebar","data-testid":q?void 0:"list-split-sidebar",ref:mt,style:q?void 0:{width:`${le}px`},children:[!q&&t.jsxs("aside",{className:"list-sidebar-controls","aria-label":"List controls",children:[t.jsxs("div",{className:"list-sidebar-controls__header",children:[t.jsxs("p",{className:"list-stats",children:[P?`${ot} of ${e.length} tasks in ${ds[P]}`:`${ot} of ${e.length} tasks`,Mt>0&&!P&&t.jsxs("span",{className:"list-stats-hidden",children:[" (",Mt," hidden)"]})]}),t.jsxs("div",{className:"list-sidebar-controls__actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:Ve,"aria-pressed":B,children:B?"Done Editing":"Bulk Edit"}),p?t.jsx("button",{className:"btn btn-task-create btn-sm list-new-task-action",onClick:p,children:"+ New Task"}):null]}),t.jsxs("div",{className:"list-sidebar-summary-chips",children:[P?t.jsx("button",{className:"btn btn-sm",onClick:Ie,"aria-label":"Clear column filter",children:`Filter: ${ds[P]}`}):null,Ae?t.jsx("span",{className:"list-sidebar-chip",children:"Done hidden"}):null,X?t.jsx("span",{className:"list-sidebar-chip",children:"Stale only"}):null,ie?t.jsx("span",{className:"list-sidebar-chip",children:"Stale paused review"}):null,B?t.jsx("span",{className:"list-sidebar-chip",children:"Bulk edit"}):null,B&&Ne.size>0?t.jsx("button",{className:"btn btn-sm",onClick:he,children:`${Ne.size} selected`}):null]})]}),t.jsxs("button",{className:"btn btn-sm list-view-options-toggle",onClick:()=>me(ue=>!ue),"aria-expanded":Y,"aria-controls":"list-view-options-panel",children:[t.jsx(th,{size:14}),"View options"]}),Y&&$t("list-view-options-panel"),B&&Ne.size>0?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"bulk-edit-toolbar",children:[t.jsxs("button",{className:"btn btn-sm",onClick:fn,disabled:dn,title:"Pause all selected tasks that are not already paused",children:[t.jsx(ui,{size:14}),"Pause selected"]}),t.jsxs("button",{className:"btn btn-sm",onClick:_n,disabled:dn,title:"Unpause selected tasks that are currently paused",children:[t.jsx(is,{size:14}),"Unpause selected"]}),t.jsxs("button",{className:"btn btn-sm",onClick:an,disabled:dn,title:"Archive selected tasks that are in Done",children:[t.jsx(Wr,{size:14}),"Archive selected"]}),t.jsxs("button",{className:"btn btn-danger btn-sm",onClick:ln,disabled:dn,title:"Delete selected tasks",children:[t.jsx(zn,{size:14}),"Delete selected"]})]}),w&&w.length>0?t.jsxs("div",{className:"bulk-edit-toolbar",children:[t.jsx("span",{className:"bulk-edit-label",children:"Bulk Edit Models & Node:"}),t.jsx("div",{className:"bulk-edit-dropdown",children:t.jsx(Cs,{models:w,value:lt,onChange:ve,label:"Executor Model",noChangeValue:"__no_change__",noChangeLabel:"No change",favoriteProviders:v,onToggleFavorite:y,favoriteModels:b,onToggleModelFavorite:N})}),t.jsx("div",{className:"bulk-edit-dropdown",children:t.jsx(Cs,{models:w,value:st,onChange:Ue,label:"Reviewer Model",noChangeValue:"__no_change__",noChangeLabel:"No change",favoriteProviders:v,onToggleFavorite:y,favoriteModels:b,onToggleModelFavorite:N})}),t.jsxs("div",{className:"bulk-edit-dropdown bulk-edit-node-wrap",children:[t.jsxs("select",{className:"select bulk-node-select",value:fe,onChange:ue=>Xe(ue.target.value),"aria-label":"Node Override",disabled:Et,children:[t.jsx("option",{value:"__no_change__",children:"No change"}),t.jsx("option",{value:"",children:"Use project default"}),vt.map(ue=>t.jsx("option",{value:ue.id,children:`${r4(ue.status)} ${ue.name||ue.id} (${a4(ue.status)})`},ue.id))]}),Jt?t.jsx(Ka,{status:Jt.status,showLabel:!0}):null]}),t.jsx("button",{className:"btn btn-primary btn-sm bulk-edit-apply-btn",onClick:Dn,disabled:dn||lt==="__no_change__"&&st==="__no_change__"&&fe==="__no_change__",children:dn?"Applying...":"Apply"})]}):null]}):null]}),t.jsx("div",{className:"list-quick-entry-above-table",children:t.jsx(Rx,{onCreate:g??(async()=>m("Task creation not available","error")),addToast:m,tasks:e,availableModels:w,onPlanningMode:S,onSubtaskBreakdown:C,projectId:k,autoExpand:!1,favoriteProviders:v,favoriteModels:b,onToggleFavorite:y,onToggleModelFavorite:N})}),ot===0?t.jsx("div",{className:"list-empty",children:_?"No tasks match your filter":"No tasks yet"}):q?t.jsx("div",{className:"list-cards",children:xa.map(ue=>{if(P&&ue!==P||Ae&&(ue==="done"||ue==="archived")&&!P)return null;const Re=Qe[ue],et=Re.length===0;if(_&&et)return null;const at=ee.has(ue);return t.jsxs(i.Fragment,{children:[t.jsxs("div",{className:`list-card-section-header${at?" list-section-header--collapsed":""}`,onClick:()=>xt(ue),"aria-expanded":!at,role:"button",tabIndex:0,onKeyDown:Je=>{(Je.key==="Enter"||Je.key===" ")&&(Je.preventDefault(),xt(ue))},children:[t.jsx(Vn,{size:14,className:`list-section-chevron${at?"":" list-section-chevron--expanded"}`}),t.jsx("span",{className:`list-section-dot dot-${ue}`}),t.jsx("span",{className:"list-section-title",children:ds[ue]}),t.jsx("span",{className:"list-section-count",children:Re.length})]}),!at&&t.jsx(t.Fragment,{children:et?t.jsx("div",{className:"list-empty-cell list-card-empty",children:"No tasks"}):Re.map(Je=>{const Nt=Je.status==="failed",bt=Je.paused===!0,At=oc(Je,z,A),se=!f&&!Nt&&!bt&&!At&&(Je.column==="in-progress"||Af.has(Je.status)),re=typeof Je.status=="string"&&Je.status.trim().length>0,Ge=!!(Je.dependencies&&Je.dependencies.length>0),Ct=Ff(Je),Gt=Ct.hasProgress,cn=B;return t.jsxs("div",{className:`list-card${se?" agent-active":""}${cn?" list-card--selectable":""}`,onClick:()=>vn(Je),"data-id":Je.id,children:[cn&&t.jsx("label",{className:"list-card-checkbox",onClick:jn=>jn.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:Ne.has(Je.id),onChange:jn=>{jn.stopPropagation(),ge(Je.id)},onClick:jn=>jn.stopPropagation(),disabled:Je.column==="archived","aria-label":`Select ${Je.id}`})}),t.jsxs("div",{className:"list-card-row",children:[t.jsx("span",{className:"list-card-id",children:Je.id}),Je.executionMode==="fast"&&t.jsxs("span",{className:"list-execution-mode-badge list-execution-mode-badge--fast",title:"Fast mode","aria-label":"Fast mode",children:[t.jsx(rs,{"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:"Fast mode"})]}),t.jsx("span",{className:"list-card-spacer"}),bt&&Je.pausedByAgentId?t.jsx("span",{className:"list-status-badge paused",children:"paused by agent"}):At?t.jsx("span",{className:"list-status-badge stuck",children:"Stuck"}):re?t.jsx("span",{className:`list-status-badge list-status-badge--${Je.column}${Nt?" failed":""}${se?" pulsing":""}`,children:Rf(Je.status??"")}):null]}),t.jsx("div",{className:"list-card-row",children:t.jsx("div",{className:"list-card-title",children:Je.title||Je.description})}),(Ge||Gt)&&t.jsxs("div",{className:"list-card-row list-card-meta",children:[Ge&&t.jsxs("span",{className:"list-dep-badge",title:Je.dependencies.join(", "),children:[t.jsx(Tr,{size:12})," ",Je.dependencies.length]}),Gt&&t.jsxs("div",{className:"list-progress",children:[t.jsx("div",{className:"list-progress-bar",children:t.jsx("div",{className:"list-progress-fill",style:{width:`${Ct.percent}%`,backgroundColor:Al[Je.column]}})}),t.jsx("span",{className:"list-progress-label",children:Ct.label})]})]})]},Je.id)})})]},ue)})}):t.jsxs("table",{className:"list-table",children:[t.jsx("thead",{children:t.jsxs("tr",{children:[B&&t.jsx("th",{className:"list-header-cell list-header-checkbox",children:t.jsx("input",{type:"checkbox",checked:J,ref:ue=>{ue&&(ue.indeterminate=ke)},onChange:We,"aria-label":"Select all visible tasks"})}),be.has("title")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("title"),children:["Title ",pn("title")]}),be.has("status")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("status"),children:["Status ",pn("status")]}),be.has("column")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("column"),children:["Column ",pn("column")]}),be.has("retries")&&t.jsxs("th",{className:"list-header-cell",onClick:()=>jt("retries"),children:["Retries ",pn("retries")]}),be.has("dependencies")&&t.jsx("th",{className:"list-header-cell",children:"Dependencies"}),be.has("progress")&&t.jsx("th",{className:"list-header-cell",children:"Progress"})]})}),t.jsx("tbody",{children:xa.map(ue=>{if(P&&ue!==P||Ae&&(ue==="done"||ue==="archived")&&!P)return null;const Re=Qe[ue],et=Re.length===0;if(_&&et)return null;const at=ee.has(ue);return t.jsxs(i.Fragment,{children:[t.jsx("tr",{className:`list-section-header${at?" list-section-header--collapsed":""}`,onClick:()=>xt(ue),"aria-expanded":!at,children:t.jsxs("th",{colSpan:be.size+(B?1:0),className:"list-section-cell",children:[t.jsx(Vn,{size:14,className:`list-section-chevron${at?"":" list-section-chevron--expanded"}`}),t.jsx("span",{className:`list-section-dot dot-${ue}`}),t.jsx("span",{className:"list-section-title",children:ds[ue]}),t.jsx("span",{className:"list-section-count",children:Re.length})]})}),!at&&t.jsx(t.Fragment,{children:et?t.jsx("tr",{className:"list-section-empty",children:t.jsx("td",{colSpan:be.size+(B?1:0),className:"list-empty-cell",children:"No tasks"})}):Re.map(Je=>{const Nt=Je.status==="failed",bt=Je.paused===!0,At=oc(Je,z,A),se=!f&&!Nt&&!bt&&!At&&(Je.column==="in-progress"||Af.has(Je.status)),re=W===Je.id;return t.jsxs("tr",{className:`list-row${Nt?" failed":""}${bt?" paused":""}${At?" stuck":""}${se?" agent-active":""}${re?" dragging":""}${Be===Je.id?" list-row--selected":""}`,onClick:()=>vn(Je),draggable:!bt,onDragStart:Ge=>en(Ge,Je),onDragEnd:Yt,"data-id":Je.id,children:[B&&t.jsx("td",{className:"list-cell list-cell-checkbox",children:t.jsx("input",{type:"checkbox",checked:Ne.has(Je.id),onChange:Ge=>{Ge.stopPropagation(),ge(Je.id)},onClick:Ge=>Ge.stopPropagation(),disabled:Je.column==="archived","aria-label":`Select ${Je.id}`})}),be.has("title")&&t.jsx("td",{className:"list-cell list-cell-title",children:t.jsxs("div",{className:"list-title-content",children:[t.jsx("span",{className:"list-title-id",children:Je.id}),t.jsxs("div",{className:"list-title-row",children:[Je.executionMode==="fast"&&t.jsxs("span",{className:"list-execution-mode-badge list-execution-mode-badge--fast",title:"Fast mode","aria-label":"Fast mode",children:[t.jsx(rs,{"aria-hidden":"true"}),t.jsx("span",{className:"visually-hidden",children:"Fast mode"})]}),t.jsx("span",{className:"list-title-text",children:Je.title||Je.description})]})]})}),be.has("status")&&t.jsx("td",{className:"list-cell",children:bt&&Je.pausedByAgentId?t.jsx("span",{className:"list-status-badge paused",children:"paused by agent"}):At?t.jsx("span",{className:"list-status-badge stuck",children:"Stuck"}):Je.status?t.jsx("span",{className:`list-status-badge list-status-badge--${Je.column}${Nt?" failed":""}${se?" pulsing":""}`,children:Rf(Je.status??"")}):t.jsx("span",{className:"list-status-badge",children:"-"})}),be.has("column")&&t.jsx("td",{className:"list-cell",children:t.jsx("span",{className:"list-column-badge",style:{background:`color-mix(in srgb, ${Al[Je.column]} 12%, transparent)`,color:Al[Je.column]},children:ds[Je.column]})}),be.has("retries")&&t.jsx("td",{className:"list-cell",children:(Je.retrySummary?.total??0)>0?Je.retrySummary?.total??0:"—"}),be.has("dependencies")&&t.jsx("td",{className:"list-cell list-cell-deps",children:Je.dependencies&&Je.dependencies.length>0?t.jsxs("span",{className:"list-dep-badge",title:Je.dependencies.join(", "),children:[t.jsx(Tr,{size:12})," ",Je.dependencies.length]}):"-"}),be.has("progress")&&t.jsx("td",{className:"list-cell list-cell-progress",children:(()=>{const Ge=Ff(Je);return Ge.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:`${Ge.percent}%`,backgroundColor:Al[Je.column]}})}),t.jsx("span",{className:"list-progress-label",children:Ge.label})]}):"-"})()})]},Je.id)})})]},ue)})})]})]}),!q&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"list-split-resize-handle","data-testid":"list-split-resize-handle",onMouseDown:tn,onKeyDown:Qt,role:"separator",tabIndex:0,"aria-orientation":"vertical","aria-label":"Resize task list sidebar","aria-valuemin":mc,"aria-valuemax":Math.round(Uu(Le.current?.clientWidth??le/Bu+Rl)),"aria-valuenow":Math.round(le)}),t.jsx("div",{className:"list-split-detail","data-testid":"list-split-detail",children:ct?t.jsx("div",{className:"list-split-detail-content","data-testid":"list-split-detail-content",children:t.jsx(Zv,{task:ct,projectId:k,tasks:e,embedded:!0,onOpenDetail:bn,onMoveTask:n,onDeleteTask:a,onMergeTask:c,onRetryTask:s,onResetTask:d,onDuplicateTask:u,onTaskUpdated:ue=>{De(Re=>!Re||Re.id!==ue.id?Re:{...Re,...ue})},addToast:m,prAuthAvailable:Q})}):t.jsx("div",{className:"list-split-detail-empty",children:t.jsx("p",{children:"Select a task to view details"})})})]})]})})]})}const c4={active:{label:"Active",color:"var(--color-success)",icon:is},paused:{label:"Paused",color:"var(--color-warning)",icon:ui},errored:{label:"Error",color:"var(--color-error)",icon:Us},initializing:{label:"Initializing",color:"var(--color-warning)",icon:_t}};function d4(e){if(!e)return"Never";const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(a/36e5),l=Math.floor(a/864e5);return r<1?"Just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString()}function zf(e,n=40){if(e.length<=n)return e;const s=e.slice(0,Math.floor(n/2)-2),a=e.slice(-Math.floor(n/2)+2);return`${s}...${a}`}function u4(e,n){if(e.project.id!==n.project.id||e.project.status!==n.project.status||e.project.name!==n.project.name||e.project.path!==n.project.path||e.project.lastActivityAt!==n.project.lastActivityAt||e.isLoading!==n.isLoading)return!1;const s=e.health,a=n.health;if(!s&&!a)return!0;if(!s||!a||s.activeTaskCount!==a.activeTaskCount||s.inFlightAgentCount!==a.inFlightAgentCount||s.totalTasksCompleted!==a.totalTasksCompleted||s.totalTasksFailed!==a.totalTasksFailed||s.status!==a.status)return!1;const r=e.availabilityMappings??[],o=n.availabilityMappings??[];return r.length!==o.length?!1:r.every((l,c)=>{const d=o[c];return!!d&&l.nodeId===d.nodeId&&l.path===d.path&&l.displayName===d.displayName&&l.available===d.available})}function m4({project:e,health:n,onSelect:s,onPause:a,onResume:r,onRemove:o,availabilityMappings:l=[],isLoading:c=!1}){const[d,u]=i.useState(!1),h=c4[e.status],m=h.icon,f=i.useCallback(()=>{s(e)},[s,e]),p=i.useCallback(N=>{N.stopPropagation(),a(e)},[a,e]),g=i.useCallback(N=>{N.stopPropagation(),r(e)},[r,e]),w=i.useCallback(N=>{if(N.stopPropagation(),!d){u(!0);return}o(e),u(!1)},[d,o,e]),v=e.status==="paused",b=e.status==="errored",y=e.status==="initializing";return t.jsxs("div",{className:`project-card ${c?"project-card-loading":""} ${b?"project-card-errored":""}`,onClick:f,"data-project-id":e.id,role:"button",tabIndex:0,onKeyDown:N=>{(N.key==="Enter"||N.key===" ")&&(N.preventDefault(),f())},children:[t.jsxs("div",{className:"project-card-header",children:[t.jsx("div",{className:"project-card-icon",children:t.jsx(ks,{size:20})}),t.jsxs("div",{className:"project-card-title-section",children:[t.jsx("h3",{className:"project-card-name",title:e.name,children:e.name}),l.length>0&&t.jsxs("div",{className:"project-card-availability","aria-label":"Project node availability",children:[l.slice(0,3).map(N=>t.jsxs("div",{className:"project-card-availability__row",title:`${N.displayName} → ${N.path}`,children:[t.jsx("span",{className:"project-card-availability__node",children:N.displayName}),t.jsx("span",{className:"project-card-availability__arrow",children:"→"}),t.jsx("code",{className:"project-card-availability__path",children:zf(N.path,28)})]},`${N.nodeId}-${N.path}`)),l.length>3&&t.jsxs("span",{className:"project-card-availability__more",children:["+",l.length-3," more"]})]}),t.jsx("span",{className:"project-card-path",title:e.path,children:zf(e.path)})]}),t.jsxs("div",{className:"project-card-status-badge",style:{color:h.color,borderColor:h.color},children:[t.jsx(m,{size:12,className:y?"animate-spin":""}),t.jsx("span",{children:h.label})]})]}),t.jsxs("div",{className:"project-card-health",children:[n&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"project-card-metric",children:[t.jsx("span",{className:"project-card-metric-value",children:n.activeTaskCount}),t.jsx("span",{className:"project-card-metric-label",children:"Active Tasks"})]}),t.jsxs("div",{className:"project-card-metric",children:[t.jsx("span",{className:"project-card-metric-value",children:n.inFlightAgentCount}),t.jsx("span",{className:"project-card-metric-label",children:"Agents"})]}),t.jsxs("div",{className:"project-card-metric",children:[t.jsx("span",{className:"project-card-metric-value",children:n.totalTasksCompleted}),t.jsx("span",{className:"project-card-metric-label",children:"Completed"})]})]}),!n&&t.jsx("div",{className:"project-card-metric project-card-metric-empty",children:t.jsx("span",{className:"project-card-metric-label",children:"No health data available"})})]}),t.jsxs("div",{className:"project-card-footer",children:[t.jsxs("div",{className:"project-card-activity",children:[t.jsx("span",{className:"project-card-activity-label",children:"Last activity:"}),t.jsx("span",{className:"project-card-activity-time",children:d4(e.lastActivityAt||n?.lastActivityAt)})]}),t.jsxs("div",{className:"project-card-actions",children:[v?t.jsxs("button",{className:"project-card-action project-card-action-resume",onClick:g,disabled:c,title:"Resume project","aria-label":"Resume project",children:[t.jsx(is,{size:14}),t.jsx("span",{children:"Resume"})]}):t.jsxs("button",{className:"project-card-action project-card-action-pause",onClick:p,disabled:c||y,title:y?"Cannot pause while initializing":"Pause project","aria-label":"Pause project",children:[t.jsx(ui,{size:14}),t.jsx("span",{children:"Pause"})]}),t.jsxs("button",{className:"project-card-action project-card-action-open",onClick:f,disabled:c,title:"Open project","aria-label":"Open project",children:[t.jsx(Qo,{size:14}),t.jsx("span",{children:"Open"})]}),t.jsxs("button",{className:`project-card-action project-card-action-remove ${d?"is-armed":""}`,onClick:w,disabled:c,title:d?"Confirm remove":"Remove project","aria-label":d?"Confirm remove project":"Remove project",children:[t.jsx(zn,{size:14}),t.jsx("span",{children:d?"Confirm":""})]})]})]})]})}const h4=i.memo(m4,u4);function Bf(e){return typeof e=="string"&&e.trim().length>0}function Io(e){return(e.nodeMappings??[]).filter(s=>Bf(s.nodeId)&&Bf(s.path)).map(s=>({nodeId:s.nodeId,nodeName:s.nodeName,path:s.path,available:s.available!==!1}))}function p4(e,n){return Io(e).filter(s=>s.nodeId===n.id&&s.available)}function f4(e,n){return p4(e,n).length>0}function g4(e,n){return e.filter(s=>f4(s,n))}function VB(e,n){return g4(e,n).length}function Uf(e,n,s,a){const r=s.find(o=>o.id===e);return r?.name?r.name:n?.nodeName?n.nodeName:a._sourceNodeName?a._sourceNodeName:e}function b4(){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(ks,{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(Bs,{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(Xn,{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(Us,{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 x4=1e4,Hf=5;function v4(e){const[n,s]=i.useState({}),[a,r]=i.useState(!0),[o,l]=i.useState(null),c=i.useRef(null),d=i.useRef(null),u=i.useRef(!1),h=i.useCallback(async()=>{if(e.length===0){s({}),u.current||(u.current=!0),r(!1);return}d.current&&d.current.abort(),d.current=new AbortController,!u.current&&r(!0),l(null);try{const p={};for(let g=0;g<e.length;g+=Hf){const w=e.slice(g,g+Hf),v=await Promise.allSettled(w.map(async b=>{try{return await _h(b)}catch{return null}}));if(w.forEach((b,y)=>{const N=v[y];p[b]=N.status==="fulfilled"?N.value:null}),d.current?.signal.aborted)return}s(p),u.current=!0}catch(p){if(p instanceof Error&&p.name==="AbortError")return;l(p instanceof Error?p.message:"Failed to fetch health data"),u.current=!0}finally{r(!1)}},[e]),m=i.useCallback(async f=>{try{const p=await _h(f);s(g=>({...g,[f]:p}))}catch(p){console.error(`Failed to fetch health for project ${f}:`,p)}},[]);return i.useEffect(()=>(u.current=!1,h(),()=>{d.current&&d.current.abort()}),[h]),i.useEffect(()=>{if(e.length!==0)return c.current&&clearInterval(c.current),c.current=setInterval(()=>{h()},x4),()=>{c.current&&(clearInterval(c.current),c.current=null)}},[h,e.length]),{healthMap:n,loading:a,error:o,refresh:h,refreshProject:m}}function y4({projects:e,loading:n=!1,onSelectProject:s,onAddProject:a,onPauseProject:r,onResumeProject:o,onRemoveProject:l,nodes:c=[]}){const[d,u]=i.useState("all"),[h,m]=i.useState(null),[f,p]=i.useState("activity"),[g,w]=i.useState("desc");i.useEffect(()=>{if(typeof window>"u")return;const H=localStorage.getItem("kb-dashboard-recent-projects");if(H)try{const M=JSON.parse(H);b(M)}catch{}},[]);const[v,b]=i.useState([]),y=i.useMemo(()=>e.map(H=>H.id),[e]),{healthMap:N,loading:S}=v4(y),C=i.useMemo(()=>e.map(H=>({project:H,health:N[H.id]||null})),[e,N]),x=i.useMemo(()=>{let H=[...C];return d!=="all"&&(H=H.filter(({project:M})=>M.status===d)),h!==null&&(H=H.filter(({project:M})=>Io(M).some(T=>T.available&&T.nodeId===h))),H},[C,d,h]),k=i.useMemo(()=>{const H=[...x];return H.sort((M,T)=>{let F=0;switch(f){case"name":F=M.project.name.localeCompare(T.project.name);break;case"activity":{const W=M.project.lastActivityAt||M.health?.lastActivityAt||M.project.updatedAt,oe=T.project.lastActivityAt||T.health?.lastActivityAt||T.project.updatedAt;F=new Date(oe).getTime()-new Date(W).getTime();break}case"status":{const W={errored:0,initializing:1,paused:2,active:3};F=W[M.project.status]-W[T.project.status];break}}return g==="asc"?F:-F}),H},[x,f,g]),R=i.useMemo(()=>{const H=e.length,M=e.filter(P=>P.status==="active").length,T=e.filter(P=>P.status==="errored").length,F=new Set;e.forEach(P=>{Io(P).forEach($=>{$.available&&F.add($.nodeId)})});const W=F.size;let oe=0,D=0,E=0;return Object.values(N).forEach(P=>{P&&(oe+=P.activeTaskCount,D+=P.totalTasksCompleted,E+=P.inFlightAgentCount)}),{totalProjects:H,activeProjects:M,erroredProjects:T,totalNodes:W,totalActiveTasks:oe,totalCompletedTasks:D,totalInFlightAgents:E}},[e,N]),z=i.useMemo(()=>({all:e.length,active:e.filter(H=>H.status==="active").length,paused:e.filter(H=>H.status==="paused").length,errored:e.filter(H=>H.status==="errored").length}),[e]),_=i.useMemo(()=>{const H=new Map;return e.forEach(M=>{Io(M).filter(T=>T.available).forEach(T=>{const F=T.nodeId,W=H.get(F),oe=Uf(F,T,c,M);W?W.count+=1:H.set(F,{name:oe,count:1})})}),Array.from(H.entries()).map(([M,{name:T,count:F}])=>({nodeId:M,name:T,count:F}))},[e,c]),A=i.useCallback(H=>{const M=[H.id,...v.filter(T=>T!==H.id)].slice(0,3);b(M),typeof window<"u"&&localStorage.setItem("kb-dashboard-recent-projects",JSON.stringify(M)),s(H)},[s,v]);return n||S&&e.length>0&&Object.keys(N).length===0?t.jsx(b4,{}):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(ba,{size:48})}),t.jsx("h2",{className:"project-empty-state__title",children:"No Projects Found"}),t.jsx("p",{className:"project-empty-state__description",children:"Get started by adding your first project. Projects allow you to organize and track tasks across multiple repositories."}),t.jsxs("button",{className:"btn btn-primary project-empty-state__cta",onClick:a,children:[t.jsx(Bn,{size:16}),"Add Your First Project"]})]})}):t.jsxs("div",{className:"project-overview",children:[t.jsxs("div",{className:"project-overview__header",children:[t.jsxs("h2",{className:"project-overview__title",children:[t.jsx(Na,{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(ks,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalProjects}),t.jsx("span",{className:"project-stat__label",children:"Total"})]})]}),t.jsxs("div",{className:"project-stat project-stat--active",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(Bs,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalActiveTasks}),t.jsx("span",{className:"project-stat__label",children:"Active Tasks"})]})]}),t.jsxs("div",{className:"project-stat project-stat--completed",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(Xn,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalCompletedTasks}),t.jsx("span",{className:"project-stat__label",children:"Completed"})]})]}),R.erroredProjects>0&&t.jsxs("div",{className:"project-stat project-stat--error",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(Us,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.erroredProjects}),t.jsx("span",{className:"project-stat__label",children:"Errored"})]})]}),R.totalNodes>1&&t.jsxs("div",{className:"project-stat project-stat--nodes",children:[t.jsx("div",{className:"project-stat__icon",children:t.jsx(Ho,{size:16})}),t.jsxs("div",{className:"project-stat__content",children:[t.jsx("span",{className:"project-stat__value",children:R.totalNodes}),t.jsx("span",{className:"project-stat__label",children:"Nodes"})]})]})]}),t.jsxs("button",{className:"btn btn-primary project-overview__add-btn",onClick:a,children:[t.jsx(Bn,{size:16}),"Add Project"]})]}),t.jsxs("div",{className:"project-overview__filters",children:[t.jsxs("div",{className:"project-filter-tabs",children:[t.jsxs("button",{className:`project-filter-tab ${d==="all"?"active":""}`,onClick:()=>u("all"),children:["All",t.jsx("span",{className:"project-filter-count",children:z.all})]}),t.jsxs("button",{className:`project-filter-tab ${d==="active"?"active":""}`,onClick:()=>u("active"),children:["Active",t.jsx("span",{className:"project-filter-count",children:z.active})]}),t.jsxs("button",{className:`project-filter-tab ${d==="paused"?"active":""}`,onClick:()=>u("paused"),children:["Paused",t.jsx("span",{className:"project-filter-count",children:z.paused})]}),t.jsxs("button",{className:`project-filter-tab ${d==="errored"?"active":""} ${z.errored>0?"has-errors":""}`,onClick:()=>u("errored"),children:["Errored",t.jsx("span",{className:"project-filter-count",children:z.errored})]})]}),_.length>1&&t.jsxs("div",{className:"project-node-filter",children:[t.jsx(Ho,{size:14}),t.jsxs("select",{value:h??"",onChange:H=>{m(H.target.value||null)},className:"project-node-filter-select","aria-label":"Filter by node",children:[t.jsx("option",{value:"",children:"All Nodes"}),_.map(({nodeId:H,name:M,count:T})=>t.jsxs("option",{value:H??"",children:[M," (",T,")"]},H??"local"))]})]}),t.jsxs("div",{className:"project-sort",children:[t.jsx(Zl,{size:14}),t.jsxs("select",{value:`${f}-${g}`,onChange:H=>{const[M,T]=H.target.value.split("-");p(M),w(T)},className:"project-sort-select","aria-label":"Sort projects",children:[t.jsx("option",{value:"activity-desc",children:"Last Activity (Newest)"}),t.jsx("option",{value:"activity-asc",children:"Last Activity (Oldest)"}),t.jsx("option",{value:"name-asc",children:"Name (A-Z)"}),t.jsx("option",{value:"name-desc",children:"Name (Z-A)"}),t.jsx("option",{value:"status-asc",children:"Status (Error → Active)"}),t.jsx("option",{value:"status-desc",children:"Status (Active → Error)"})]}),t.jsx(Sb,{size:14})]})]}),t.jsx("div",{className:"project-grid",children:k.map(({project:H,health:M})=>{const T=Io(H).filter(F=>F.available).map(F=>({...F,displayName:Uf(F.nodeId,F,c,H)}));return t.jsx(h4,{project:H,health:M,availabilityMappings:T,onSelect:A,onPause:r,onResume:o,onRemove:l},H.id)})}),k.length===0&&t.jsxs("div",{className:"project-overview__no-results",children:[t.jsx(Zl,{size:32}),t.jsx("p",{children:"No projects match the current filter"}),t.jsx("button",{className:"btn btn-secondary",onClick:()=>u("all"),children:"Show All Projects"})]})]})}const ty=i.createContext(null);function w4({value:e,children:n}){return i.createElement(ty.Provider,{value:e},n)}function ny(){const e=i.useContext(ty);if(!e)throw new Error("useNavigationHistoryContext must be used within a NavigationHistoryProvider");return e}function k4(e){const{enabled:n}=e,s=i.useRef([]),a=i.useRef(!1),r=i.useRef(n);r.current=n;const o=i.useCallback(c=>{if(!r.current||a.current)return;const d=s.current[s.current.length-1];if(d){const m=d.type==="modal"?d.close:d.revert,f=c.type==="modal"?c.close:c.revert;if(m===f)return}s.current.push(c);const u=s.current.length,h=typeof window<"u"&&window.history.state?window.history.state:{};window.history.pushState({...h,navIndex:u},"")},[]),l=i.useCallback(c=>{if(!r.current||s.current.length===0)return;s.current[s.current.length-1]=c;const d=s.current.length,u=typeof window<"u"&&window.history.state?window.history.state:{};window.history.replaceState({...u,navIndex:d},"")},[]);return i.useEffect(()=>{if(typeof window>"u")return;const c=d=>{if(!r.current)return;const u=d.state?.navIndex??0,h=s.current.length;if(u>=h)return;const m=h-u;if(!(m<=0)){a.current=!0;try{for(let f=0;f<m;f++){const p=s.current.pop();p&&(p.type==="modal"?p.close():p.revert())}}finally{a.current=!1}}};return window.addEventListener("popstate",c),()=>{window.removeEventListener("popstate",c)}},[]),{pushNav:o,replaceCurrent:l}}const Om="kb-planning-last-description",Fm="kb-subtask-last-description",zm="kb-mission-last-goal";function j4(e,n){ss(Om,e,n)}function N4(e){return Wn(Om,e)||""}function wr(e){Ya(Om,e)}function S4(e,n){ss(Fm,e,n)}function C4(e){return Wn(Fm,e)||""}function Vd(e){Ya(Fm,e)}function E4(e,n){ss(zm,e,n)}function _4(e){return Wn(zm,e)||""}function fa(e){Ya(zm,e)}function M4(e){const{question:n,response:s}=e;if(!n)return s;if(s&&typeof s=="object"&&!Array.isArray(s)){const a=s;if(n.id in a)return a[n.id]}return s}function A4(e,n){switch(e.type){case"text":return typeof n=="string"?n:n==null?"":String(n);case"single_select":return typeof n=="string"?e.options?.find(a=>a.id===n)?.label??n:n==null?"":String(n);case"multi_select":return Array.isArray(n)?n.map(s=>typeof s!="string"?String(s):e.options?.find(r=>r.id===s)?.label??s).join(", "):n==null?"":String(n);case"confirm":return n===!0?"Yes":n===!1?"No":n==null?"":String(n);default:return n==null?"":JSON.stringify(n)}}function R4(e){let n=0;const s=[];for(const a of e){if(a.question){n+=1,s.push({...a,questionNumber:n});continue}a.thinkingOutput&&s.push({...a,questionNumber:null})}return s}function mi({entries:e,defaultShowThinking:n=!1}){const[s,a]=i.useState({}),r=R4(e);return r.length===0?null:t.jsx("div",{className:"conversation-history","data-testid":"conversation-history",children:r.map((o,l)=>{const c=!!o.question,d=!!o.thinkingOutput,u=s[l]??n,h=c?M4(o):void 0,m=o.question&&h!==void 0?A4(o.question,h):"",f=o.response&&typeof o.response=="object"&&!Array.isArray(o.response)?o.response:void 0,p=typeof f?._comment=="string"?f._comment.trim():"";return t.jsxs("div",{className:"conversation-entry",children:[c?t.jsxs("div",{className:"conversation-entry-question",children:[t.jsxs("span",{className:"conversation-entry-question-label",children:["Q",o.questionNumber]}),t.jsx("p",{children:o.question?.question})]}):t.jsx("div",{className:"conversation-entry-question",children:t.jsx("span",{className:"conversation-entry-question-label",children:"AI Reasoning"})}),c&&t.jsxs("div",{className:"conversation-entry-response",children:[t.jsx("strong",{children:"Your response"}),t.jsx("p",{children:m||"—"}),p&&t.jsxs("p",{className:"conversation-comment",children:["💬 ",p]})]}),d&&t.jsxs("div",{className:"conversation-entry-thinking",children:[t.jsxs("button",{type:"button",className:"conversation-thinking-toggle",onClick:()=>{a(g=>({...g,[l]:!u}))},"aria-expanded":u,children:[t.jsx("span",{"aria-hidden":"true",children:u?"▾":"▸"}),u?`Hide ${c?"AI thinking":"AI reasoning"}`:`Show ${c?"AI thinking":"AI reasoning"}`]}),u&&t.jsx("pre",{children:o.thinkingOutput})]})]},`${o.question?.id??"thinking"}-${l}`)})})}const qf="fusion-tab-id";function I4(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`tab-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function nr(){if(typeof window>"u")return"server-tab";const e=window.sessionStorage.getItem(qf);if(e)return e;const n=I4();return window.sessionStorage.setItem(qf,n),n}function Bc(e){const n=i.useMemo(()=>nr(),[]),[s,a]=i.useState(!1),[r,o]=i.useState(null),[l,c]=i.useState(!1);i.useEffect(()=>{if(!e){a(!1),o(null),c(!1);return}let u=!0;return c(!0),Promise.resolve(AC(e,n)).then(h=>{if(u){if(h.acquired){a(!1),o(null);return}a(!0),o(h.currentHolder)}}).catch(()=>{u&&(a(!1),o(null))}).finally(()=>{u&&c(!1)}),()=>{u=!1;try{const h=RC(e,n);h&&typeof h.catch=="function"&&h.catch(()=>{})}catch{}}},[e,n]),i.useEffect(()=>{if(!e||typeof window>"u")return;const u=()=>{if(typeof navigator.sendBeacon!="function")return;const h=Ci(`/api/ai-sessions/${encodeURIComponent(e)}/lock/beacon?tabId=${encodeURIComponent(n)}`);navigator.sendBeacon(h)};return window.addEventListener("beforeunload",u),()=>{window.removeEventListener("beforeunload",u)}},[e,n]),i.useEffect(()=>!e||typeof EventSource>"u"?void 0:pi("/api/events",{events:{"ai_session:updated":h=>{try{const m=JSON.parse(h.data);if(m.id!==e)return;const f=m.lockedByTab??null;o(f),a(!!(f&&f!==n))}catch{}}}}),[e,n]);const d=i.useCallback(async()=>{if(e){c(!0);try{await Promise.resolve(IC(e,n)),a(!1),o(null)}finally{c(!1)}}},[e,n]);return{isLockedByOther:s,currentHolder:r,takeControl:d,isLoading:l}}const T4="fusion:ai-session-sync",Vf="fusion:ai-session-sync",P4=3e4,$4=6e4;function $i(){return Date.now()}function D4(){const e=globalThis.crypto;return e&&typeof e.randomUUID=="function"?e.randomUUID():`tab-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function Wf(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 L4{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=D4(),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:$i()})}broadcastUpdate(n){const s=n.timestamp??$i();this.applySessionUpdate({sessionId:n.sessionId,status:n.status,needsInput:n.needsInput??n.status==="awaiting_input",owningTabId:n.owningTabId,type:n.type,title:n.title,projectId:n.projectId,updatedAt:n.updatedAt},s),this.publish({type:"session:updated",sessionId:n.sessionId,status:n.status,needsInput:n.needsInput,owningTabId:n.owningTabId,sessionType:n.type,title:n.title,projectId:n.projectId,updatedAt:n.updatedAt,timestamp:s})}broadcastCompleted(n){const s=n.status??"complete",a=n.timestamp??$i();this.applySessionUpdate({sessionId:n.sessionId,status:s,needsInput:!1,owningTabId:null},a),this.ownershipBySession.delete(n.sessionId),this.ownedSessions.delete(n.sessionId),this.emit(),this.publish({type:"session:completed",sessionId:n.sessionId,status:s,timestamp:a})}broadcastLock(n,s){const a=$i();this.applyTabOwnership(n,s,a),this.ownedSessions.set(n,s),this.publish({type:"tab:active",tabId:s,sessionId:n,timestamp:a})}broadcastUnlock(n,s){const a=$i();this.releaseTabOwnership(n,s,a),this.ownedSessions.delete(n),this.publish({type:"tab:inactive",tabId:s,sessionId:n,timestamp:a})}broadcastHeartbeat(n){const s=$i();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(T4),this.channel.onmessage=s=>{const a=Wf(s.data);a&&this.handleIncomingMessage(a)},this.usingStorageFallback=!1;return}catch{}this.usingStorageFallback=!0;const n=s=>{if(!(s.key!==Vf||!s.newValue))try{const a=JSON.parse(s.newValue),r=Wf(a.message);r&&this.handleIncomingMessage(r)}catch{}};window.addEventListener("storage",n),this.cleanupStorageListener=()=>{window.removeEventListener("storage",n)}}startHeartbeat(){this.heartbeatInterval=setInterval(()=>{const n=$i();this.updateHeartbeat(this.tabId,n),this.publish({type:"tab:heartbeat",tabId:this.tabId,timestamp:n})},P4)}startStaleSweep(){this.staleSweepInterval=setInterval(()=>{this.emit()},1e4)}setupBeforeUnloadCleanup(){const n=()=>{for(const[s,a]of this.ownedSessions.entries()){const r=$i();this.publish({type:"tab:inactive",tabId:a,sessionId:s,timestamp:r})}};window.addEventListener("beforeunload",n),this.cleanupBeforeUnload=()=>{window.removeEventListener("beforeunload",n)}}publish(n){const s={...n,senderTabId:this.tabId};if(this.channel){this.channel.postMessage(s);return}if(this.usingStorageFallback)try{const a={id:`${s.type}-${s.timestamp}-${Math.random().toString(36).slice(2,8)}`,message:s};window.localStorage.setItem(Vf,JSON.stringify(a))}catch{}}handleIncomingMessage(n){switch(n.type){case"session:updated":{this.applySessionUpdate({sessionId:n.sessionId,status:n.status,needsInput:n.needsInput,owningTabId:n.owningTabId,type:n.sessionType,title:n.title,projectId:n.projectId,updatedAt:n.updatedAt},n.timestamp);return}case"session:completed":{this.applySessionUpdate({sessionId:n.sessionId,status:n.status??"complete",needsInput:!1,owningTabId:null},n.timestamp),this.ownershipBySession.delete(n.sessionId),this.emit();return}case"tab:active":{this.applyTabOwnership(n.sessionId,n.tabId,n.timestamp);return}case"tab:inactive":{this.releaseTabOwnership(n.sessionId,n.tabId,n.timestamp);return}case"tab:heartbeat":{this.updateHeartbeat(n.tabId,n.timestamp);return}case"sync:request":{if(n.tabId===this.tabId)return;const s=[...this.sessionStates.values()].map(o=>{const l=this.ownershipBySession.get(o.sessionId);return{...o,owningTabId:l?.tabId??o.owningTabId??null}}),a=[...this.ownershipBySession.entries()].map(([o,l])=>({sessionId:o,tabId:l.tabId,timestamp:l.timestamp})),r=[...this.heartbeatByTab.entries()].map(([o,l])=>({tabId:o,timestamp:l}));this.publish({type:"sync:response",tabId:n.tabId,sessions:s,locks:a,heartbeats:r,timestamp:$i()});return}case"sync:response":{if(n.tabId!==this.tabId)return;for(const s of n.sessions)this.applySessionUpdate({sessionId:s.sessionId,status:s.status,needsInput:s.needsInput,owningTabId:s.owningTabId,type:s.type,title:s.title,projectId:s.projectId,updatedAt:s.updatedAt},s.lastEventTimestamp,!1);for(const s of n.locks??[])this.applyTabOwnership(s.sessionId,s.tabId,s.timestamp,!1);for(const s of n.heartbeats??[])this.updateHeartbeat(s.tabId,s.timestamp,!1);this.emit();return}default:return}}applySessionUpdate(n,s,a=!0){const r=this.sessionStates.get(n.sessionId);if(r&&s<r.lastEventTimestamp)return;const o=this.ownershipBySession.get(n.sessionId),l={sessionId:n.sessionId,status:n.status,needsInput:n.needsInput??n.status==="awaiting_input",lastEventTimestamp:s,owningTabId:n.owningTabId??o?.tabId??r?.owningTabId??null,type:n.type??r?.type,title:n.title??r?.title,projectId:n.projectId??r?.projectId,updatedAt:n.updatedAt??new Date(s).toISOString()};this.sessionStates.set(n.sessionId,l),n.owningTabId!==void 0&&(n.owningTabId?this.applyTabOwnership(n.sessionId,n.owningTabId,s,!1):this.ownershipBySession.delete(n.sessionId)),a&&this.emit()}applyTabOwnership(n,s,a,r=!0){const o=this.ownershipBySession.get(n);if(o&&a<o.timestamp)return;this.ownershipBySession.set(n,{tabId:s,timestamp:a}),this.updateHeartbeat(s,a,!1);const l=this.sessionStates.get(n);l&&a>=l.lastEventTimestamp&&this.sessionStates.set(n,{...l,owningTabId:s,lastEventTimestamp:a}),r&&this.emit()}releaseTabOwnership(n,s,a,r=!0){const o=this.ownershipBySession.get(n);if(!o||o.tabId!==s||a<o.timestamp)return;this.ownershipBySession.delete(n);const l=this.sessionStates.get(n);l&&a>=l.lastEventTimestamp&&this.sessionStates.set(n,{...l,owningTabId:null,lastEventTimestamp:a}),r&&this.emit()}updateHeartbeat(n,s,a=!0){const r=this.heartbeatByTab.get(n);r!==void 0&&s<r||(this.heartbeatByTab.set(n,s),a&&this.emit())}emit(){const n=$i(),s=new Map;for(const[r,o]of this.sessionStates.entries()){const l=this.ownershipBySession.get(r);s.set(r,{...o,owningTabId:l?.tabId??o.owningTabId??null})}const a=new Map;for(const[r,o]of this.ownershipBySession.entries()){const l=this.heartbeatByTab.get(o.tabId)??o.timestamp,c=n-l>$4;a.set(r,{sessionId:r,tabId:o.tabId,lastHeartbeatTimestamp:l,lastLockTimestamp:o.timestamp,stale:c})}this.snapshot={tabId:this.tabId,sessions:s,activeTabMap:a};for(const r of this.listeners)r()}}const Di=new L4;function eo(){const e=i.useSyncExternalStore(c=>Di.subscribe(c),()=>Di.getSnapshot(),()=>Di.getSnapshot());i.useEffect(()=>{Di.requestSync()},[]);const n=i.useCallback(c=>{Di.broadcastUpdate(c)},[]),s=i.useCallback(c=>{Di.broadcastCompleted(c)},[]),a=i.useCallback((c,d)=>{Di.broadcastLock(c,d)},[]),r=i.useCallback((c,d)=>{Di.broadcastUnlock(c,d)},[]),o=i.useCallback(c=>{Di.broadcastHeartbeat(c)},[]),l=i.useCallback(()=>{Di.requestSync()},[]);return{tabId:e.tabId,sessions:e.sessions,activeTabMap:e.activeTabMap,broadcastUpdate:n,broadcastCompleted:s,broadcastLock:a,broadcastUnlock:r,broadcastHeartbeat:o,requestSync:l}}function O4(e,n){return e&&n?`${e}/${n}`:""}function F4(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 z4=["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 B4({isOpen:e,onClose:n,onMissionCreated:s,projectId:a,initialGoal:r,resumeSessionId:o}){_i(e);const[l,c]=i.useState(""),[d,u]=i.useState({type:"initial"}),[h,m]=i.useState(null),[f,p]=i.useState([]),[g,w]=i.useState([]),[v,b]=i.useState(null),[y,N]=i.useState(!1),S=i.useRef(!1),[C,x]=i.useState(""),[k,R]=i.useState(!0),[z,_]=i.useState(!1),[A,Q]=i.useState(!1),[H,M]=i.useState(!1),T=i.useRef(null),F=i.useRef(null),W=i.useRef(null),oe=i.useRef(null),[D,E]=i.useState(o??null),P=i.useMemo(()=>nr(),[]),{isLockedByOther:$,takeControl:j,isLoading:q}=Bc(e?D:null),{activeTabMap:de,broadcastUpdate:be,broadcastCompleted:Ce,broadcastLock:Ae,broadcastUnlock:ae,broadcastHeartbeat:X}=eo(),{confirm:pe}=ii(),[ie,ye]=i.useState(void 0),[ee,L]=i.useState(void 0),[Y,me]=i.useState([]),[B,xe]=i.useState(!0),[Ne,te]=i.useState(null),[Be,$e]=i.useState([]),[ct,De]=i.useState([]),le=O4(ie,ee);i.useEffect(()=>{(async()=>{try{xe(!0);const J=await Hs();me(J.models),$e(J.favoriteProviders),De(J.favoriteModels)}catch(J){te(Me(J)||"Failed to load models")}finally{xe(!1)}})()},[]);const _e=i.useCallback(We=>{$e(J=>{const ke=J,ve=ke.includes(We)?ke.filter(st=>st!==We):[We,...ke];return Kn({favoriteProviders:ve,favoriteModels:ct}).catch(()=>{$e(ke)}),ve})},[ct]),Le=i.useCallback(We=>{De(J=>{const ke=J,ve=ke.includes(We)?ke.filter(st=>st!==We):[We,...ke];return Kn({favoriteProviders:Be,favoriteModels:ve}).catch(()=>{De(ke)}),ve})},[Be]),mt=i.useCallback((We,J)=>{if(!We||!J)return"Using default";const ke=Y.find(lt=>lt.provider===We&&lt.id===J);return ke?`${ke.provider}/${ke.id}`:`${We}/${J}`},[Y]),Ve=i.useCallback(We=>{F.current?.close();const J=gC(We,a,{onThinking:ke=>{x(lt=>lt+ke),be({sessionId:We,status:"generating",needsInput:!1,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null})},onQuestion:ke=>{_(!1),Q(!1),fa(a),u({type:"question",sessionId:We,question:ke}),x(""),N(!0),be({sessionId:We,status:"awaiting_input",needsInput:!0,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null})},onSummary:ke=>{_(!1),Q(!1),fa(a),u({type:"summary",sessionId:We,summary:ke}),b(ke),x(""),N(!0),be({sessionId:We,status:"complete",needsInput:!1,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null})},onError:ke=>{const lt=ke||"Session failed while contacting the AI.";_(!1),Q(!1),m(null),u({type:"error",sessionId:We,errorMessage:lt}),x(""),N(!0),W.current=We,be({sessionId:We,status:"error",needsInput:!1,owningTabId:P,type:"mission_interview",title:l.trim()||void 0,projectId:a??null}),Ce({sessionId:We,status:"error"})},onComplete:()=>{_(!1),Q(!1),W.current=null,Ce({sessionId:We,status:"complete"})},onConnectionStateChange:ke=>{_(ke==="reconnecting")}});F.current=J},[Ce,be,l,a,P]),ge=i.useCallback(async We=>{const J=We??l;if(J.trim()){m(null),x(""),p([]),w([]),_(!1),u({type:"loading"});try{const{sessionId:ke}=await dC(J.trim(),a,ie&&ee?{modelProvider:ie,modelId:ee}:void 0);W.current=ke,E(ke),fa(a),Ve(ke),p([])}catch(ke){_(!1),m(Me(ke)||"Failed to start interview session"),u({type:"initial"}),W.current=null,E(null)}}},[Ve,l,ie,ee,a]);i.useEffect(()=>{e&&d.type==="initial"&&T.current?.focus()},[e,d.type]),i.useEffect(()=>{if(e&&!r&&!o&&!S.current&&d.type==="initial"){const We=_4(a);We&&c(We)}},[e]),i.useEffect(()=>{if(e&&r&&!S.current&&d.type==="initial"){c(r);const We=setTimeout(()=>{S.current=!0,ge(r)},0);return()=>clearTimeout(We)}},[e,r,d.type,ge]),i.useEffect(()=>{e||(S.current=!1,_(!1),Q(!1),E(null))},[e]),i.useEffect(()=>{if(!e||!o||d.type!=="initial")return;let We=!1;return zi(o).then(J=>{if(We||!J)return;const ke=Lr(J.conversationHistory);if(w(ke),E(J.id),p(ke.map(lt=>lt.response).filter(lt=>!!(lt&&typeof lt=="object"&&!Array.isArray(lt)))),J.status==="awaiting_input"&&J.currentQuestion)try{fa(a);const lt=JSON.parse(J.currentQuestion);W.current=J.id,N(!0),u({type:"question",sessionId:J.id,question:lt})}catch{m("Failed to restore session question.")}else if(J.status==="complete"&&J.result)try{fa(a);const lt=JSON.parse(J.result);W.current=J.id,N(!0),b(lt),u({type:"summary",sessionId:J.id,summary:lt})}catch{m("Failed to restore session result.")}else J.status==="generating"?(W.current=J.id,N(!0),J.thinkingOutput&&x(J.thinkingOutput),u({type:"loading"}),Ve(J.id)):J.status==="error"&&(W.current=J.id,N(!0),m(null),u({type:"error",sessionId:J.id,errorMessage:J.error??"The session encountered an error."}))}).catch(()=>{We||m("Failed to resume session.")}),()=>{We=!0}},[Ve,e,o,d.type,a]),i.useEffect(()=>{if(!e){oe.current&&(ae(oe.current,P),oe.current=null);return}if(D&&oe.current!==D){oe.current&&ae(oe.current,P),Ae(D,P),oe.current=D;return}!D&&oe.current&&(ae(oe.current,P),oe.current=null)},[Ae,ae,e,D,P]),i.useEffect(()=>{if(!e||!D||oe.current!==D)return;X(P);const We=setInterval(()=>{X(P)},3e4);return()=>{clearInterval(We)}},[X,e,D,P]),i.useEffect(()=>()=>{F.current?.close(),F.current=null,oe.current&&(ae(oe.current,P),oe.current=null)},[ae,P]),i.useEffect(()=>{if(!e)return;const We=J=>{(d.type==="question"||d.type==="summary")&&(J.preventDefault(),J.returnValue=""),F.current?.close()};return window.addEventListener("beforeunload",We),()=>window.removeEventListener("beforeunload",We)},[e,d]);const he=i.useCallback(()=>{F.current?.close(),F.current=null,n()},[n]),Pe=i.useCallback(async()=>{if(l&&E4(l,a),!(y&&!await pe({title:"Close Interview",message:"Are you sure you want to close? Your interview progress will be lost.",danger:!0}))){if(F.current?.close(),F.current=null,d.type==="question"||d.type==="summary"||d.type==="error")try{await sx(d.sessionId,a,P)}catch{}c(""),u({type:"initial"}),m(null),p([]),w([]),b(null),x(""),_(!1),Q(!1),N(!1),M(!1),ye(void 0),L(void 0),W.current=null,E(null),n()}},[l,y,d,n,a,P,pe]);i.useEffect(()=>{if(!e)return;const We=J=>{J.key==="Escape"&&Pe()};return document.addEventListener("keydown",We),()=>document.removeEventListener("keydown",We)},[e,Pe]);const dt=i.useCallback(async We=>{if(d.type!=="question")return;const{sessionId:J}=d;m(null),p(ke=>[...ke,We]),w(ke=>[...ke,{question:d.question,response:We}]),u({type:"loading"}),x("");try{Ve(J),await uC(J,We,a,P),N(!0)}catch(ke){F.current?.close(),F.current=null,m(Me(ke)||"Failed to submit response"),u({type:"question",sessionId:J,question:d.question})}},[d,a,P,Ve]),jt=i.useCallback(async()=>{if(d.type!=="error")return;const We=d.sessionId;m(null),Q(!0),x(""),u({type:"loading"}),Ve(We);try{W.current=We,E(We),await mC(We,a,P)}catch(J){let ke=J;if((Me(J)||"").includes("not in an error state"))try{const ve=await zi(We);if(!ve)throw new Error("Failed to refresh interview session.");const st=Lr(ve.conversationHistory);if(w(st),p(st.map(Ue=>Ue.response).filter(Ue=>!!(Ue&&typeof Ue=="object"&&!Array.isArray(Ue)))),W.current=ve.id,E(ve.id),N(!0),ve.status==="generating")x(ve.thinkingOutput??""),u({type:"loading"}),F.current?.isConnected()||Ve(ve.id);else if(ve.status==="awaiting_input"){if(!ve.currentQuestion)throw new Error("Interview session is awaiting input but has no current question.");fa(a);const Ue=JSON.parse(ve.currentQuestion);u({type:"question",sessionId:ve.id,question:Ue}),F.current?.isConnected()||Ve(ve.id)}else if(ve.status==="complete"){if(!ve.result)throw new Error("Interview session is complete but has no result.");fa(a);const Ue=JSON.parse(ve.result);b(Ue),u({type:"summary",sessionId:ve.id,summary:Ue})}else ve.status==="error"&&u({type:"error",sessionId:ve.id,errorMessage:ve.error??"Retry failed. Please try again."});_(!1);return}catch(ve){ke=ve}F.current?.close(),F.current=null,u({type:"error",sessionId:We,errorMessage:Me(ke)||"Retry failed. Please try again."}),_(!1)}finally{Q(!1)}},[Ve,a,P,d]),nt=i.useCallback(async()=>{if(d.type==="summary"){m(null),M(!0);try{const We=await fC(d.sessionId,v||void 0,a);s(We),fa(a),F.current?.close(),F.current=null,c(""),u({type:"initial"}),m(null),p([]),w([]),b(null),x(""),_(!1),Q(!1),N(!1),M(!1),W.current=null,E(null),n()}catch(We){m(Me(We)||"Failed to create mission"),M(!1)}}},[d,v,s,n,a]),xt=()=>d.type==="question"?Math.min(f.length+1,6):6,Ie=d.type==="loading"||d.type==="question"||d.type==="summary"||d.type==="error",Qe=D?de.get(D):null,ot=Qe&&Qe.tabId!==P,Tt=!!(ot&&!Qe.stale),Mt=$&&(!ot||Qe.stale);return e?t.jsx("div",{className:"modal-overlay open",onClick:We=>We.target===We.currentTarget&&Pe(),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(Ss,{size:20,className:"icon-triage"}),t.jsx("h3",{children:"Plan Mission with AI"})]}),t.jsxs("div",{className:"modal-header-actions",children:[Ie&&t.jsx("button",{className:"modal-send-to-background",onClick:he,title:"Send to background","aria-label":"Send to background",children:t.jsx(Zo,{size:16})}),t.jsx("button",{className:"modal-close",onClick:Pe,"aria-label":"Close",children:t.jsx(kn,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[h&&t.jsx("div",{className:"form-error planning-error",children:h}),z&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),Tt&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),d.type==="initial"&&t.jsxs("div",{className:"planning-initial",children:[t.jsxs("div",{className:"planning-view-scroll",children:[t.jsxs("div",{className:"planning-intro",children:[t.jsx(cs,{size:32,className:"icon-triage-lg"}),t.jsx("h4",{children:"Transform your vision into a structured mission"}),t.jsx("p",{className:"text-muted",children:"Describe what you want to build. The AI will interview you to understand scope, constraints, and requirements, then produce a structured plan with milestones, slices, and features."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"mission-goal",children:"What do you want to build?"}),t.jsx("textarea",{ref:T,id:"mission-goal",rows:4,className:"planning-textarea",placeholder:"e.g., Build a real-time collaborative document editor with presence, comments, and version history...",value:l,onChange:We=>c(We.target.value),onKeyDown:We=>{We.key==="Enter"&&!We.shiftKey&&l.trim()&&(We.preventDefault(),ge())}})]}),t.jsxs("div",{className:"planning-examples",children:[t.jsx("span",{className:"planning-examples-label",children:"Try an example:"}),t.jsx("div",{className:"planning-example-chips",children:z4.map((We,J)=>t.jsx("button",{className:"planning-example-chip",onClick:()=>c(We),children:We.length>45?We.slice(0,45)+"...":We},J))})]}),t.jsxs("div",{className:"planning-model-select-group",children:[t.jsxs("label",{htmlFor:"mission-interview-modal-model",className:"form-label",children:["Planning Model",B&&t.jsx("span",{className:"text-muted text-muted-sm",children:"Loading models…"})]}),t.jsx(Cs,{id:"mission-interview-modal-model",label:"Planning Model",value:le,onChange:We=>{const{provider:J,modelId:ke}=F4(We);ye(J),L(ke)},models:Y,disabled:B,favoriteProviders:Be,onToggleFavorite:_e,favoriteModels:ct,onToggleModelFavorite:Le}),Ne&&t.jsxs("div",{className:"form-hint form-hint-error",children:[Ne," ",t.jsx("button",{type:"button",className:"text-link-btn",onClick:()=>{(async()=>{try{xe(!0);const We=await Hs();me(We.models),$e(We.favoriteProviders),De(We.favoriteModels),te(null)}catch(We){te(Me(We)||"Failed to load models")}finally{xe(!1)}})()},children:"Retry"})]}),t.jsx("div",{className:"model-selector-current model-selector-current--spaced",children:t.jsx("span",{className:`model-badge ${ie&&ee?"model-badge-custom":"model-badge-default"}`,children:mt(ie,ee)})})]})]}),t.jsx("div",{className:"planning-view-footer",children:t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>ge(),disabled:!l.trim(),children:[t.jsx(Ss,{size:16,className:"icon-mr-8"}),"Start Interview"]})})]}),d.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(_t,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:C?"AI is thinking...":"Preparing next question..."}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>R(!k),type:"button",children:k?"Hide thinking":"Show thinking"}),k&&C&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:C})})]})]}),d.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[g.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:g}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:d.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void jt(),disabled:A,children:[A?t.jsx(_t,{size:14,className:"spin"}):t.jsx(us,{size:14}),t.jsx("span",{className:"icon-ml-6",children:A?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:Pe,disabled:A,children:"Cancel"})]})]})]})}),d.type==="question"&&t.jsx(U4,{question:d.question,progress:xt(),historyEntries:g,onSubmit:dt}),d.type==="summary"&&v&&t.jsx(H4,{summary:v,historyEntries:g,onSummaryChange:b,onApprove:nt,onStartOver:()=>{u({type:"initial"}),N(!1),b(null),p([]),w([]),E(null),F.current?.close(),F.current=null},isCreating:H}),$&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(Ec,{size:16}),t.jsx("span",{children:Mt?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),Mt&&t.jsx("button",{type:"button",onClick:()=>{j()},disabled:q,className:"btn btn-primary session-lock-take-control",children:q?"Taking control...":"Take Control"})]})})]})]})}):null}function U4({question:e,progress:n,historyEntries:s,onSubmit:a}){const[r,o]=i.useState({}),[l,c]=i.useState(""),[d,u]=i.useState(""),h=i.useCallback(()=>{let f;e.type==="text"?f={[e.id]:l}:e.type==="confirm"?f={[e.id]:r[e.id]===!0}:f=r;const p=d.trim();p.length>0&&(f={...f,_comment:p}),a(f)},[d,e,r,l,a]);i.useEffect(()=>{o({}),c(""),u("")},[e.id]);const m=()=>{switch(e.type){case"text":return l.trim().length>0;case"single_select":return r[e.id]!==void 0;case"multi_select":return Array.isArray(r[e.id])&&r[e.id].length>0;case"confirm":return r[e.id]!==void 0;default:return!0}};return t.jsxs("div",{className:"planning-question-form",children:[t.jsxs("div",{className:"planning-view-scroll planning-question-scroll",children:[s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:s}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-question-panel",children:[t.jsxs("div",{className:"planning-progress",children:[t.jsx("div",{className:"planning-progress-bar",children:[1,2,3,4,5,6].map(f=>t.jsx("div",{className:`planning-progress-step ${f<=n?"active":""}`},f))}),t.jsxs("span",{className:"planning-progress-text",children:["Question ",n," of ~6"]})]}),t.jsxs("div",{className:"planning-question-content",children:[t.jsx("h4",{className:"planning-question-text",children:e.question}),e.description&&t.jsx("p",{className:"planning-question-desc",children:e.description}),t.jsxs("div",{className:"planning-options",children:[e.type==="text"&&t.jsx("textarea",{className:"planning-textarea",rows:4,placeholder:"Type your answer here...",value:l,onChange:f=>c(f.target.value),onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey&&l.trim()&&(f.preventDefault(),h())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(f=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:f.id,checked:r[e.id]===f.id,onChange:()=>o({[e.id]:f.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(f=>{const p=r[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:f.id,checked:p.includes(f.id),onChange:g=>{const w=g.target.checked?[...p,f.id]:p.filter(v=>v!==f.id);o({[e.id]:w})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id)})}),e.type==="confirm"&&t.jsxs("div",{className:"planning-confirm-group",children:[t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!0?"selected":""}`,onClick:()=>o({[e.id]:!0}),children:[t.jsx(Xn,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!1?"selected":""}`,onClick:()=>o({[e.id]:!1}),children:[t.jsx(kn,{size:18}),"No"]})]})]}),e.type!=="text"&&t.jsxs("div",{className:"planning-comment-section",children:[t.jsx("label",{className:"planning-comment-label",htmlFor:`planning-comment-${e.id}`,children:"Additional comments (optional)"}),t.jsx("textarea",{id:`planning-comment-${e.id}`,className:"planning-textarea",rows:2,placeholder:"Add any extra context or direction...",value:d,onChange:f=>u(f.target.value)})]})]})]})]}),t.jsx("div",{className:"planning-actions",children:t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:h,disabled:!m(),children:["Continue",t.jsx(Qo,{size:16,className:"icon-ml-4"})]})})]})}function H4({summary:e,historyEntries:n,onSummaryChange:s,onApprove:a,onStartOver:r,isCreating:o}){const[l,c]=i.useState(()=>new Set(e.milestones.map((S,C)=>C))),[d,u]=i.useState(()=>{const S=new Set;return e.milestones.forEach((C,x)=>{C.slices.forEach((k,R)=>S.add(`${x}-${R}`))}),S}),h=S=>{c(C=>{const x=new Set(C);return x.has(S)?x.delete(S):x.add(S),x})},m=S=>{u(C=>{const x=new Set(C);return x.has(S)?x.delete(S):x.add(S),x})},f=(S,C)=>{const x=[...e.milestones];x[S]={...x[S],...C},s({...e,milestones:x})},p=(S,C,x)=>{const k=[...e.milestones],R=[...k[S].slices];R[C]={...R[C],...x},k[S]={...k[S],slices:R},s({...e,milestones:k})},g=(S,C,x,k)=>{const R=[...e.milestones],z=[...R[S].slices],_=[...z[C].features];_[x]={..._[x],...k},z[C]={...z[C],features:_},R[S]={...R[S],slices:z},s({...e,milestones:R})},w=S=>{const C=e.milestones.filter((x,k)=>k!==S);s({...e,milestones:C})},v=(S,C)=>{const x=[...e.milestones];x[S]={...x[S],slices:x[S].slices.filter((k,R)=>R!==C)},s({...e,milestones:x})},b=(S,C,x)=>{const k=[...e.milestones],R=[...k[S].slices];R[C]={...R[C],features:R[C].features.filter((z,_)=>_!==x)},k[S]={...k[S],slices:R},s({...e,milestones:k})},y=(S,C)=>{const x=[...e.milestones],k=[...x[S].slices];k[C]={...k[C],features:[...k[C].features,{title:"New feature",description:""}]},x[S]={...x[S],slices:k},s({...e,milestones:x})},N=e.milestones.reduce((S,C)=>S+C.slices.reduce((x,k)=>x+k.features.length,0),0);return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[n.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(Xn,{size:24,className:"icon-success"}),t.jsx("h4",{children:"Mission Plan Ready"}),t.jsxs("p",{className:"text-muted",children:[e.milestones.length," milestones, ",N," features. Review and edit before approving."]})]}),t.jsxs("div",{className:"planning-summary-form",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Mission Title"}),t.jsx("input",{type:"text",className:"form-input",value:e.missionTitle||"",onChange:S=>s({...e,missionTitle:S.target.value})})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Mission Description"}),t.jsx("textarea",{className:"planning-textarea",rows:3,value:e.missionDescription||"",onChange:S=>s({...e,missionDescription:S.target.value})})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Roadmap"}),t.jsx("div",{className:"roadmap-list",children:e.milestones.map((S,C)=>t.jsxs("div",{className:"roadmap-card",children:[t.jsxs("div",{className:"roadmap-card-header",onClick:()=>h(C),children:[l.has(C)?t.jsx(Cn,{size:16,className:"icon-text-secondary"}):t.jsx(Vn,{size:16,className:"icon-text-secondary"}),t.jsx(Va,{size:16,className:"icon-milestone"}),t.jsx("input",{type:"text",className:"form-input roadmap-input-title",value:S.title,onChange:x=>f(C,{title:x.target.value}),onClick:x=>x.stopPropagation()}),e.milestones.length>1&&t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:x=>{x.stopPropagation(),w(C)},title:"Remove milestone",children:t.jsx(zn,{size:14,className:"icon-text-secondary"})})]}),l.has(C)&&t.jsxs("div",{className:"roadmap-card-body",children:[t.jsx("textarea",{className:"planning-textarea roadmap-textarea-md",rows:2,placeholder:"Milestone description...",value:S.description||"",onChange:x=>f(C,{description:x.target.value})}),t.jsxs("div",{className:"roadmap-field-group",children:[t.jsx("label",{className:"roadmap-field-label",children:"Verification Criteria"}),t.jsx("textarea",{className:"planning-textarea roadmap-textarea-sm",rows:2,placeholder:"How to confirm this milestone is complete...",value:S.verification||"",onChange:x=>f(C,{verification:x.target.value})})]}),S.slices.map((x,k)=>{const R=`${C}-${k}`;return t.jsxs("div",{className:"roadmap-slice-card",children:[t.jsxs("div",{className:"roadmap-slice-header",onClick:()=>m(R),children:[d.has(R)?t.jsx(Cn,{size:14,className:"icon-text-secondary"}):t.jsx(Vn,{size:14,className:"icon-text-secondary"}),t.jsx(vu,{size:14,className:"icon-slice"}),t.jsx("input",{type:"text",className:"form-input roadmap-input-subtitle",value:x.title,onChange:z=>p(C,k,{title:z.target.value}),onClick:z=>z.stopPropagation()}),S.slices.length>1&&t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:z=>{z.stopPropagation(),v(C,k)},title:"Remove slice",children:t.jsx(zn,{size:12,className:"icon-text-secondary"})})]}),d.has(R)&&t.jsxs("div",{className:"roadmap-slice-body",children:[t.jsxs("div",{className:"roadmap-slice-field-group",children:[t.jsx("label",{className:"roadmap-field-label",children:"Slice Verification"}),t.jsx("textarea",{className:"planning-textarea roadmap-textarea-xs",rows:1,placeholder:"How to confirm this slice is done...",value:x.verification||"",onChange:z=>p(C,k,{verification:z.target.value})})]}),x.features.map((z,_)=>t.jsxs("div",{className:"roadmap-feature-row",children:[t.jsx(hu,{size:12,className:"icon-feature"}),t.jsxs("div",{className:"roadmap-feature-content",children:[t.jsx("input",{type:"text",className:"form-input roadmap-input-feature",value:z.title,onChange:A=>g(C,k,_,{title:A.target.value})}),z.description&&t.jsx("p",{className:"roadmap-feature-text",children:z.description}),z.acceptanceCriteria&&t.jsxs("p",{className:"roadmap-feature-text--italic",children:["AC: ",z.acceptanceCriteria]})]}),t.jsx("button",{className:"btn-icon roadmap-shrink",onClick:()=>b(C,k,_),title:"Remove feature",children:t.jsx(zn,{size:12,className:"icon-text-secondary"})})]},_)),t.jsxs("button",{className:"btn roadmap-add-feature-btn",onClick:()=>y(C,k),children:[t.jsx(Bn,{size:12}),"Add Feature"]})]})]},k)})]})]},C))})]})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:r,disabled:o,children:[t.jsx(er,{size:16,className:"icon-mr-4"}),"Start Over"]}),t.jsx("button",{className:"btn btn-primary",onClick:a,disabled:o||e.milestones.length===0,children:o?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:16,className:"spin icon-mr-8"}),"Creating Mission..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Xn,{size:16,className:"icon-mr-8"}),"Approve Plan"]})})]})]})}const q4=30,V4=16,W4=16;function G4(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}let Ql=null;function sy(){return Ql===null&&(Ql=window.visualViewport?.height??window.innerHeight),Ql}function K4(e){const n=sy();e>n&&(Ql=e)}function J4(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 Gf(){if(typeof window>"u"||!window.visualViewport)return{overlap:0,open:!1,vvHeight:null,vvOffsetTop:0};const e=window.visualViewport,n=J4(document.activeElement),s=e.offsetTop;n||K4(e.height);const a=Math.max(0,window.innerHeight-e.offsetTop-e.height);if(a>0&&n)return{overlap:a,open:!0,vvHeight:e.height,vvOffsetTop:s};const r=sy(),o=Math.max(0,r-e.offsetTop-e.height);if(o>=q4&&n)return{overlap:o,open:!0,vvHeight:e.height,vvOffsetTop:s};if(o>=V4&&n)return{overlap:o,open:!0,vvHeight:e.height,vvOffsetTop:s};const l=Math.max(0,r-e.height);return n&&l>=W4?{overlap:0,open:!0,vvHeight:e.height,vvOffsetTop:s}:{overlap:0,open:!1,vvHeight:null,vvOffsetTop:0}}function oa({enabled:e=!0}={}){const[n,s]=i.useState(0),[a,r]=i.useState(null),[o,l]=i.useState(0),[c,d]=i.useState(!1);return i.useEffect(()=>{if(!e||!G4()){s(0),r(null),l(0),d(!1);return}const u=window.visualViewport;if(!u){s(0),r(null),l(0),d(!1);return}const h=()=>{const x=Gf();s(x.overlap),r(x.vvHeight),l(x.vvOffsetTop),d(x.open)},m=()=>{const x=Gf();s(x.overlap),r(x.vvHeight),d(x.open)},f=[],p=x=>{if(typeof window>"u")return;const k=window.setTimeout(()=>{typeof window>"u"||h()},x);f.push(k)};let g=null,w=0,v=-1,b=0;const y=()=>{g!==null&&typeof window<"u"&&(window.cancelAnimationFrame(g),g=null)},N=()=>{if(typeof window>"u")return;h();const x=window.visualViewport?.offsetTop??0;if(x===v?b+=1:(b=0,v=x),b>=2||performance.now()>w){g=null;return}g=window.requestAnimationFrame(N)},S=()=>{typeof window>"u"||(y(),w=performance.now()+1500,v=-1,b=0,g=window.requestAnimationFrame(N))},C=()=>{h(),p(50),p(200),p(500),p(1e3),p(1500),S()};return C(),u.addEventListener("resize",h),u.addEventListener("scroll",m),document.addEventListener("focusin",C),document.addEventListener("focusout",h),document.addEventListener("visibilitychange",C),window.addEventListener("pageshow",C),()=>{u.removeEventListener("resize",h),u.removeEventListener("scroll",m),document.removeEventListener("focusin",C),document.removeEventListener("focusout",h),document.removeEventListener("visibilitychange",C),window.removeEventListener("pageshow",C);for(const x of f)clearTimeout(x);y(),s(0),r(null),l(0),d(!1)}},[e]),{keyboardOverlap:n,viewportHeight:a,viewportOffsetTop:o,keyboardOpen:c}}function Y4({isOpen:e,onClose:n,onApplied:s,targetType:a,targetId:r,targetTitle:o,missionContext:l,projectId:c,resumeSessionId:d}){const u=si();_i(e);const{keyboardOverlap:h,viewportHeight:m,viewportOffsetTop:f,keyboardOpen:p}=oa({enabled:u==="mobile"}),g=p?{"--keyboard-overlap":`${h}px`,"--vv-offset-top":`${f}px`,...m!==null?{"--vv-height":`${m}px`}:{}}:{},[w,v]=i.useState({type:"initial"}),[b,y]=i.useState(null),[N,S]=i.useState([]),[C,x]=i.useState([]),[k,R]=i.useState(null),[z,_]=i.useState(""),[A,Q]=i.useState(!0),[H,M]=i.useState(!1),[T,F]=i.useState(!1),W=i.useRef(null),oe=i.useRef(null),D=i.useRef(null),E=i.useRef(null),[P,$]=i.useState(null),j=i.useMemo(()=>nr(),[]);Bc(e?P:null);const{activeTabMap:q,broadcastUpdate:de,broadcastCompleted:be,broadcastLock:Ce,broadcastUnlock:Ae,broadcastHeartbeat:ae}=eo(),X=a==="milestone"?bC:kC,pe=a==="milestone"?xC:jC,ie=a==="milestone"?vC:NC,ye=a==="milestone"?yC:SC,ee=a==="milestone"?wC:CC,L=a==="milestone"?"Milestone":"Slice",Y=a==="milestone"?"milestone_interview":"slice_interview",me=i.useCallback(Ve=>{oe.current?.close();const ge=ie(Ve,c,{onThinking:he=>{_(Pe=>Pe+he),de({sessionId:Ve,status:"generating",needsInput:!1,owningTabId:j,type:Y,title:o,projectId:c??null})},onQuestion:he=>{M(!1),B(),v({type:"question",sessionId:Ve,question:he}),_(""),de({sessionId:Ve,status:"awaiting_input",needsInput:!0,owningTabId:j,type:Y,title:o,projectId:c??null})},onSummary:he=>{M(!1),B(),v({type:"summary",sessionId:Ve,summary:he}),R(he),_(""),de({sessionId:Ve,status:"complete",needsInput:!1,owningTabId:j,type:Y,title:o,projectId:c??null})},onError:he=>{const Pe=he||"Session failed while contacting the AI.";M(!1),y(null),v({type:"error",sessionId:Ve,errorMessage:Pe}),_(""),D.current=Ve,de({sessionId:Ve,status:"error",needsInput:!1,owningTabId:j,type:Y,title:o,projectId:c??null}),be({sessionId:Ve,status:"error"})},onComplete:()=>{M(!1),D.current=null,be({sessionId:Ve,status:"complete"})},onConnectionStateChange:he=>{M(he==="reconnecting")}});oe.current=ge},[be,de,ie,Y,c,j,o]),B=()=>{R(null),S([]),x([]),_("")},xe=i.useCallback(async()=>{y(null),B(),M(!1),v({type:"loading"});try{const{sessionId:Ve}=await X(r,c);D.current=Ve,$(Ve),me(Ve)}catch(Ve){M(!1),y(Me(Ve)||`Failed to start ${L.toLowerCase()} interview`),v({type:"initial"}),D.current=null,$(null)}},[me,c,X,r,L]),Ne=i.useCallback(async()=>{y(null),F(!0);try{await ee(r,c),s(),v({type:"applied"})}catch(Ve){y(Me(Ve)||`Failed to skip ${L.toLowerCase()} interview`),F(!1)}},[s,c,ee,r,L]);i.useEffect(()=>{e&&w.type==="initial"&&W.current?.focus()},[e,w.type]),i.useEffect(()=>{if(!e||!d||w.type!=="initial")return;let Ve=!1;return zi(d).then(ge=>{if(Ve||!ge)return;const he=Lr(ge.conversationHistory);if(x(he),$(ge.id),S(he.map(Pe=>Pe.response).filter(Pe=>!!(Pe&&typeof Pe=="object"&&!Array.isArray(Pe)))),ge.status==="awaiting_input"&&ge.currentQuestion)try{const Pe=JSON.parse(ge.currentQuestion);D.current=ge.id,v({type:"question",sessionId:ge.id,question:Pe})}catch{y("Failed to restore session question.")}else if(ge.status==="complete"&&ge.result)try{const Pe=JSON.parse(ge.result);D.current=ge.id,R(Pe),v({type:"summary",sessionId:ge.id,summary:Pe})}catch{y("Failed to restore session result.")}else ge.status==="generating"?(D.current=ge.id,ge.thinkingOutput&&_(ge.thinkingOutput),v({type:"loading"}),me(ge.id)):ge.status==="error"&&(D.current=ge.id,y(null),v({type:"error",sessionId:ge.id,errorMessage:ge.error??"The session encountered an error."}))}).catch(()=>{Ve||y("Failed to resume session.")}),()=>{Ve=!0}},[me,e,d,w.type]),i.useEffect(()=>{e||(M(!1),$(null))},[e]),i.useEffect(()=>{if(!(!e||!P)){if(E.current!==P){E.current&&Ae(E.current,j),Ce(P,j),E.current=P;return}!P&&E.current&&(Ae(E.current,j),E.current=null)}},[Ce,Ae,e,P,j]),i.useEffect(()=>{if(!e||!P||E.current!==P)return;ae(j);const Ve=setInterval(()=>{ae(j)},3e4);return()=>{clearInterval(Ve)}},[ae,e,P,j]),i.useEffect(()=>()=>{oe.current?.close(),oe.current=null,E.current&&(Ae(E.current,j),E.current=null)},[Ae,j]);const te=i.useCallback(()=>{oe.current?.close(),oe.current=null,n()},[n]),Be=i.useCallback(async()=>{oe.current?.close(),oe.current=null,B(),v({type:"initial"}),y(null),D.current=null,$(null),n()},[n]),$e=i.useCallback(async Ve=>{if(w.type!=="question")return;const{sessionId:ge}=w;y(null),S(he=>[...he,Ve]),x(he=>[...he,{question:w.question,response:Ve}]),v({type:"loading"}),_("");try{me(ge),await pe(ge,Ve,c,j)}catch(he){oe.current?.close(),oe.current=null,y(Me(he)||"Failed to submit response"),v({type:"question",sessionId:ge,question:w.question})}},[me,c,pe,j,w]),ct=i.useCallback(async()=>{if(w.type==="summary"){y(null),F(!0);try{await ye(w.sessionId,k||void 0,c),s(),v({type:"applied"})}catch(Ve){y(Me(Ve)||"Failed to apply interview results"),F(!1)}}},[ye,k,s,c,w]),De=()=>w.type==="question"?Math.min(N.length+1,6):6,le=w.type==="loading"||w.type==="question"||w.type==="summary"||w.type==="error",_e=P?q.get(P):null,mt=!!(_e&&_e.tabId!==j&&!_e.stale);return e?t.jsx("div",{className:"modal-overlay open",onClick:Ve=>Ve.target===Ve.currentTarget&&Be(),role:"dialog","aria-modal":"true","data-testid":"milestone-slice-interview-modal",children:t.jsxs("div",{className:"modal modal-lg planning-modal",style:g,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx(cs,{size:20,className:"icon-triage"}),t.jsxs("h3",{children:["Plan ",L,": ",o]})]}),t.jsxs("div",{className:"modal-header-actions",children:[le&&t.jsx("button",{className:"modal-send-to-background",onClick:te,title:"Send to background","aria-label":"Send to background",children:t.jsx(Zo,{size:16})}),t.jsx("button",{className:"modal-close",onClick:Be,"aria-label":"Close",children:t.jsx(kn,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[b&&t.jsx("div",{className:"form-error planning-error",children:b}),H&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),mt&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),w.type==="initial"&&t.jsxs("div",{className:"planning-initial",children:[t.jsx("div",{className:"planning-view-scroll",children:t.jsxs("div",{className:"planning-intro",children:[t.jsx(cs,{size:32,className:"icon-triage-lg"}),t.jsxs("h4",{children:["Refine ",L," scope with AI"]}),t.jsxs("p",{className:"text-muted",children:["The AI will interview you to refine the ",a,"'s scope, acceptance criteria, and verification methods. Each ",a," can have its own refined plan or inherit context from the mission level."]}),l&&t.jsxs("div",{className:"planning-context-info",children:[t.jsx("span",{className:"planning-context-label",children:"Mission context:"}),t.jsx("span",{className:"planning-context-text",children:l})]})]})}),t.jsxs("div",{className:"planning-view-footer",children:[t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>void xe(),children:[t.jsx(cs,{size:16,className:"icon-mr-8"}),"Start Interview"]}),t.jsxs("button",{className:"btn planning-use-context-btn",onClick:()=>void Ne(),disabled:T,children:[T?t.jsx(_t,{size:16,className:"spin"}):null,"Use Mission Context"]}),t.jsx("button",{className:"btn",onClick:Be,children:"Cancel"})]})]}),w.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(_t,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:z?"AI is thinking...":"Preparing next question..."}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>Q(!A),type:"button",children:A?"Hide thinking":"Show thinking"}),A&&z&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:z})})]})]}),w.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[C.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:C}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:w.errorMessage}),t.jsx("div",{className:"ai-error-actions",children:t.jsx("button",{className:"btn",onClick:Be,children:"Cancel"})})]})]})}),w.type==="question"&&t.jsx(Q4,{question:w.question,progress:De(),historyEntries:C,onSubmit:$e}),w.type==="summary"&&k&&t.jsx(X4,{summary:k,historyEntries:C,onSummaryChange:R,onApply:ct,onCancel:Be,isApplying:T}),w.type==="applied"&&t.jsxs("div",{className:"planning-summary planning-applied",children:[t.jsx("div",{className:"planning-view-scroll",children:t.jsxs("div",{className:"planning-applied-content",children:[t.jsx(Xn,{size:48,className:"icon-success"}),t.jsxs("h4",{children:[L," Updated"]}),t.jsxs("p",{className:"text-muted",children:["The ",a,"'s scope and verification have been ",w.type==="applied"?"applied":"updated","."]})]})}),t.jsx("div",{className:"planning-view-footer",children:t.jsx("button",{className:"btn btn-primary",onClick:s,children:"Done"})})]})]})]})}):null}function Q4({question:e,progress:n,historyEntries:s,onSubmit:a}){const[r,o]=i.useState({}),[l,c]=i.useState(""),[d,u]=i.useState(""),h=i.useCallback(()=>{let f;e.type==="text"?f={[e.id]:l}:e.type==="confirm"?f={[e.id]:r[e.id]===!0}:f=r;const p=d.trim();p.length>0&&(f={...f,_comment:p}),a(f)},[d,e,r,l,a]);i.useEffect(()=>{o({}),c(""),u("")},[e.id]);const m=()=>{switch(e.type){case"text":return l.trim().length>0;case"single_select":return r[e.id]!==void 0;case"multi_select":return Array.isArray(r[e.id])&&r[e.id].length>0;case"confirm":return r[e.id]!==void 0;default:return!0}};return t.jsxs("div",{className:"planning-question-form",children:[t.jsxs("div",{className:"planning-view-scroll planning-question-scroll",children:[s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:s}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-question-panel",children:[t.jsxs("div",{className:"planning-progress",children:[t.jsx("div",{className:"planning-progress-bar",children:[1,2,3,4,5,6].map(f=>t.jsx("div",{className:`planning-progress-step ${f<=n?"active":""}`},f))}),t.jsxs("span",{className:"planning-progress-text",children:["Question ",n," of ~6"]})]}),t.jsxs("div",{className:"planning-question-content",children:[t.jsx("h4",{className:"planning-question-text",children:e.question}),e.description&&t.jsx("p",{className:"planning-question-desc",children:e.description}),t.jsxs("div",{className:"planning-options",children:[e.type==="text"&&t.jsx("textarea",{className:"planning-textarea",rows:4,placeholder:"Type your answer here...",value:l,onChange:f=>c(f.target.value),onKeyDown:f=>{f.key==="Enter"&&!f.shiftKey&&l.trim()&&(f.preventDefault(),h())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(f=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:f.id,checked:r[e.id]===f.id,onChange:()=>o({[e.id]:f.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(f=>{const p=r[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:f.id,checked:p.includes(f.id),onChange:g=>{const w=g.target.checked?[...p,f.id]:p.filter(v=>v!==f.id);o({[e.id]:w})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:f.label}),f.description&&t.jsx("span",{className:"planning-option-desc",children:f.description})]})]},f.id)})}),e.type==="confirm"&&t.jsxs("div",{className:"planning-confirm-group",children:[t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!0?"selected":""}`,onClick:()=>o({[e.id]:!0}),children:[t.jsx(Xn,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${r[e.id]===!1?"selected":""}`,onClick:()=>o({[e.id]:!1}),children:[t.jsx(kn,{size:18}),"No"]})]})]}),e.type!=="text"&&t.jsxs("div",{className:"planning-comment-section",children:[t.jsx("label",{className:"planning-comment-label",htmlFor:`planning-comment-${e.id}`,children:"Additional comments (optional)"}),t.jsx("textarea",{id:`planning-comment-${e.id}`,className:"planning-textarea",rows:2,placeholder:"Add any extra context or direction...",value:d,onChange:f=>u(f.target.value)})]})]})]})]}),t.jsx("div",{className:"planning-actions",children:t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:h,disabled:!m(),children:["Continue",t.jsx(Qo,{size:16,className:"icon-ml-4"})]})})]})}function X4({summary:e,historyEntries:n,onSummaryChange:s,onApply:a,onCancel:r,isApplying:o}){const[l,c]=i.useState(e),[d,u]=i.useState(!0),h=(m,f)=>{const p={...l,[m]:f};c(p),s(p)};return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[n.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-panel",children:[t.jsx("div",{className:"planning-summary-header",children:t.jsxs("button",{className:"planning-summary-toggle",onClick:()=>u(!d),"aria-expanded":d,children:[d?t.jsx(Cn,{size:16}):t.jsx(Vn,{size:16}),t.jsx("span",{children:"Refined Scope"})]})}),d&&t.jsxs("div",{className:"planning-summary-content",children:[l.description&&t.jsxs("div",{className:"planning-summary-field",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:3,value:l.description,onChange:m=>h("description",m.target.value)})]}),l.planningNotes&&t.jsxs("div",{className:"planning-summary-field",children:[t.jsx("label",{children:"Planning Notes"}),t.jsx("textarea",{rows:3,value:l.planningNotes,onChange:m=>h("planningNotes",m.target.value)})]}),l.verification&&t.jsxs("div",{className:"planning-summary-field",children:[t.jsx("label",{children:"Verification Criteria"}),t.jsx("textarea",{rows:2,value:l.verification,onChange:m=>h("verification",m.target.value)})]}),!l.description&&!l.planningNotes&&!l.verification&&t.jsx("p",{className:"text-muted planning-summary-empty",children:"No additional details were generated for this item."})]})]})]}),t.jsxs("div",{className:"planning-view-footer",children:[t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:a,disabled:o,children:[o?t.jsx(_t,{size:16,className:"spin"}):null,"Apply"]}),t.jsx("button",{className:"btn",onClick:r,disabled:o,children:"Cancel"})]})]})}const Kf=300,Tl=220,Pl=560,Jf="fusion:mission-sidebar-width",xo={planning:{bg:"var(--mission-planning-bg)",text:"var(--mission-planning-text)"},active:{bg:"var(--mission-active-bg)",text:"var(--mission-active-text)"},blocked:{bg:"var(--mission-blocked-bg)",text:"var(--mission-blocked-text)"},complete:{bg:"var(--mission-complete-bg)",text:"var(--mission-complete-text)"},archived:{bg:"var(--mission-archived-bg)",text:"var(--mission-archived-text)"}},Yf={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)"}},Qf={pending:{bg:"var(--slice-pending-bg)",text:"var(--slice-pending-text)"},active:{bg:"var(--slice-active-bg)",text:"var(--slice-active-text)"},complete:{bg:"var(--slice-complete-bg)",text:"var(--slice-complete-text)"}},$l={defined:{bg:"var(--feature-defined-bg)",text:"var(--feature-defined-text)"},triaged:{bg:"var(--feature-triaged-bg)",text:"var(--feature-triaged-text)"},"in-progress":{bg:"var(--feature-in-progress-bg)",text:"var(--feature-in-progress-text)"},done:{bg:"var(--feature-done-bg)",text:"var(--feature-done-text)"},blocked:{bg:"var(--mission-blocked-bg)",text:"var(--mission-blocked-text)"}},Dl={inactive:{bg:"var(--autopilot-inactive-bg)",text:"var(--autopilot-inactive-text)"},watching:{bg:"var(--autopilot-watching-bg)",text:"var(--autopilot-watching-text)"},activating:{bg:"var(--autopilot-activating-bg)",text:"var(--autopilot-activating-text)"},completing:{bg:"var(--autopilot-completing-bg)",text:"var(--autopilot-completing-text)"}},Ll={pending:{bg:"var(--assertion-pending-bg)",text:"var(--assertion-pending-text)"},passed:{bg:"var(--assertion-passed-bg)",text:"var(--assertion-passed-text)"},failed:{bg:"var(--assertion-failed-bg)",text:"var(--assertion-failed-text)"},blocked:{bg:"var(--assertion-blocked-bg)",text:"var(--assertion-blocked-text)"}},Xf={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)"}},Z4=3,eD=new Set(["generating","awaiting_input","error"]);function tD(e){switch(e){case"generating":return"Generating plan";case"awaiting_input":return"Awaiting input";case"error":return"Needs retry";default:return e}}function nD(e){switch(e){case"error":return"Retry interview";case"generating":return"Generating plan";default:return"Resume interview"}}function sD(e){return e==="completed"?"planned":e==="needs_update"?"needs_update":"not_started"}function Zf({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 eg(e){return e?e.replace(/_/g," ").replace(/^\w/,n=>n.toUpperCase()):"Not started"}const tg={title:"",description:"",status:"planning",autopilotEnabled:!1},Wd={title:"",description:"",status:"planning",dependencies:[]},Gd={title:"",description:"",status:"pending"},Kd={title:"",description:"",acceptanceCriteria:"",status:"defined"},iD=3600*1e3;function hc(e){if(!e)return"—";const n=new Date(e).getTime();if(Number.isNaN(n))return"—";const s=Date.now()-n;if(s<0)return"just now";const a=Math.floor(s/(60*1e3));if(a<1)return"just now";if(a<60)return`${a}m ago`;const r=Math.floor(a/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function aD(e){if(!e)return"healthy";const n=typeof e.lastErrorAt=="string"&&Date.now()-new Date(e.lastErrorAt).getTime()<=iD,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 rD(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 oD(e){if(!e||typeof e!="object")return!1;const n=e;return typeof n.id=="string"&&typeof n.missionId=="string"&&typeof n.eventType=="string"&&typeof n.description=="string"&&typeof n.timestamp=="string"}function Jd(e){if(!e||typeof e!="object")return!1;const n=e;return typeof n.rollup?.milestoneId=="string"&&typeof n.rollup?.state=="string"&&Array.isArray(n.validationTelemetry?.validationRounds)&&typeof n.validationTelemetry?.totalRuns=="number"&&n.validationContract!==void 0&&Array.isArray(n.fixFeatures)}const iy=["feature_triaged","feature_completed"],ay=["slice_activated","slice_completed","milestone_completed"],ry=["mission_started","mission_paused","mission_resumed","mission_completed"],oy=["autopilot_enabled","autopilot_disabled","autopilot_state_changed","autopilot_retry","autopilot_stale"];function ng(e,n){switch(n){case"errors":return e==="error"||e==="warning";case"state_changes":return ry.includes(e);case"tasks":return iy.includes(e);case"slices":return ay.includes(e);case"autopilot":return oy.includes(e);default:return!0}}function lD(e){return e==="error"||e==="warning"?"mission-event__type--error":ry.includes(e)?"mission-event__type--state":iy.includes(e)?"mission-event__type--task":ay.includes(e)?"mission-event__type--slice":oy.includes(e)?"mission-event__type--autopilot":"mission-event__type--default"}function cD(e){return e.replace(/_/g," ")}function dD(e,n){return n?e==="watching"?`Watching since ${hc(n)}`:`Last activation ${hc(n)}`:null}function uD({isOpen:e,isInline:n=!1,onClose:s,addToast:a,projectId:r,onSelectTask:o,availableTasks:l=[],resumeSessionId:c,targetMissionId:d,milestoneSliceResumeSessionId:u,onMilestoneSliceResumeFetchError:h}){const m=n||e,[f,p]=i.useState([]),[g,w]=i.useState(null),[v,b]=i.useState(!0),[y,N]=i.useState(!1),S=si()==="mobile",{pushNav:C}=ny(),[x,k]=i.useState(()=>{if(typeof window>"u")return Kf;const U=window.localStorage.getItem(Jf),Te=U?Number(U):NaN;return Number.isFinite(Te)?Math.max(Tl,Math.min(Pl,Te)):Kf}),R=i.useCallback(U=>{try{window.localStorage.setItem(Jf,String(U))}catch{}},[]),z=i.useCallback(U=>{if(S)return;U.preventDefault(),U.stopPropagation();const Te=U.currentTarget;typeof Te.setPointerCapture=="function"&&Te.setPointerCapture(U.pointerId);const Ke=U.clientX,kt=x;let wn=kt;document.body.style.userSelect="none";const we=Oe=>{const tt=Oe.clientX-Ke,Lt=Math.max(Tl,Math.min(Pl,kt+tt));wn=Lt,k(Lt)},ht=Oe=>{typeof Te.releasePointerCapture=="function"&&Te.releasePointerCapture(Oe.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",we),document.removeEventListener("pointerup",ht),R(wn)};document.addEventListener("pointermove",we),document.addEventListener("pointerup",ht)},[S,R,x]),_=i.useCallback(U=>{if(S||U.key!=="ArrowLeft"&&U.key!=="ArrowRight")return;U.preventDefault();const Te=U.shiftKey?50:10,Ke=U.key==="ArrowLeft"?-Te:Te,kt=Math.max(Tl,Math.min(Pl,x+Ke));k(kt),R(kt)},[S,R,x]),[A,Q]=i.useState(!1),[H,M]=i.useState(null),[T,F]=i.useState(tg),[W,oe]=i.useState(!1),[D,E]=i.useState(new Set),[P,$]=i.useState(new Set),[j,q]=i.useState(null),[de,be]=i.useState(Wd),[Ce,Ae]=i.useState(!1),[ae,X]=i.useState(null),[pe,ie]=i.useState(Gd),[ye,ee]=i.useState(!1),[L,Y]=i.useState(null),[me,B]=i.useState(null),[xe,Ne]=i.useState(Kd),[te,Be]=i.useState(!1),[$e,ct]=i.useState(null),[De,le]=i.useState(null),[_e,Le]=i.useState(""),[mt,Ve]=i.useState(!1),[ge,he]=i.useState([]),[Pe,dt]=i.useState([]),[jt,nt]=i.useState(void 0),xt=i.useRef(null),Ie=jt??(c&&xt.current===c?void 0:c),[Qe,ot]=i.useState(null),[Tt,Mt]=i.useState(null),[We,J]=i.useState(null);i.useEffect(()=>{m&&Ie&&Ve(!0)},[m,Ie]),i.useEffect(()=>{c&&xt.current!==c&&(xt.current=null)},[c]),i.useEffect(()=>{if(!m)return;let U=!1;return lm(r).then(Te=>{if(U)return;const Ke=Te.filter(kt=>kt.type!=="mission_interview"||!eD.has(kt.status)?!1:r?kt.projectId===r:kt.projectId==null);he(Ke)}).catch(Te=>{console.warn("[MissionManager] Failed to fetch pending interview sessions:",Te)}),()=>{U=!0}},[m,r,Ie]),i.useEffect(()=>{if(!m)return;let U=!1;return hC(r).then(Te=>{U||dt(Te)}).catch(Te=>{console.warn("[MissionManager] Failed to fetch mission interview drafts:",Te)}),()=>{U=!0}},[m,r,Ie]),i.useEffect(()=>{if(!m||!u)return;let U=!1;return zi(u).then(Te=>{if(!(U||!Te))try{const Ke=JSON.parse(Te.inputPayload||"{}");Ke.targetId&&Ke.targetType&&ot({type:Ke.targetType,id:Ke.targetId,title:Ke.targetTitle||Te.title,resumeSessionId:u})}catch{ot({type:"milestone",id:"",title:Te.title,resumeSessionId:u})}}).catch(Te=>{U||(console.warn("[MissionManager] Failed to fetch session for milestone/slice resume:",Te),h?.())}),()=>{U=!0}},[m,u,h]);const[ke,lt]=i.useState(null),[ve,st]=i.useState(new Map),[Ue,fe]=i.useState(null),[Xe,vt]=i.useState({title:"",assertion:"",status:"pending"}),[St,Et]=i.useState(!1),[Pt,Jt]=i.useState(null),[dn,Vt]=i.useState(new Map),[ln,fn]=i.useState(new Set),[_n,an]=i.useState(new Set),[Dn,vn]=i.useState(null),[Ut,rn]=i.useState(new Map),[bn,en]=i.useState(null),[Yt,tn]=i.useState(null),[Qt,Kt]=i.useState(!0),[xn,un]=i.useState(new Set),[pn,$t]=i.useState(new Map),[ue,Re]=i.useState(null),[et,at]=i.useState(new Map),[Je,Nt]=i.useState(null),[bt,At]=i.useState(new Map),[se,re]=i.useState(new Map),[Ge,Ct]=i.useState("structure"),[Gt,cn]=i.useState([]),jn=i.useRef([]),Ln=i.useRef([]),mn=i.useRef(null),Un=i.useRef(null),ce=i.useRef("structure"),it=i.useRef("all"),[ut,wt]=i.useState(!1),[G,ze]=i.useState(0),[Ht,gn]=i.useState("all"),[Mn,je]=i.useState(new Set),pt=i.useRef(null),Dt=i.useRef(null);Ln.current=f,mn.current=g,Un.current=bn,ce.current=Ge,it.current=Ht;const Zt=i.useCallback((U="auto")=>{const Te=Dt.current;if(Te&&typeof Te.scrollIntoView=="function"){Te.scrollIntoView({block:"end",behavior:U});return}const Ke=pt.current;Ke&&(Ke.scrollTop=Ke.scrollHeight)},[]),Nn=i.useCallback(()=>{const U=pt.current;return U?U.scrollHeight-U.scrollTop-U.clientHeight<=100:!0},[]),Xt=i.useCallback(async U=>{if(U.length===0){re(new Map);return}const Te=await L1(r);re(Ke=>{const kt=new Map(Ke);for(const[wn,we]of Object.entries(Te))rD(we)&&kt.set(wn,we);return kt})},[r]),qt=i.useCallback(async()=>{try{b(!0);const U=await I1(r);p(U),Xt(U)}catch(U){a(Me(U)||"Failed to load missions","error")}finally{b(!1)}},[a,r,Xt]),Ot=i.useCallback(async U=>{try{N(!0);const Te=await nx(U,r);if(!Te||!Array.isArray(Te.milestones)){N(!1);return}if(w(Te),Te.milestones.length>0){const Ke=Te.milestones[0].id;en(Ke),Kt(!0),E(new Set([Ke])),ed(Ke,r).then(kt=>{st(wn=>{const we=new Map(wn);return we.set(Ke,kt),we})}).catch(()=>{}),td(Ke,r).then(kt=>{rn(wn=>{const we=new Map(wn);return we.set(Ke,kt),we})}).catch(()=>{}),Te.milestones[0].slices.length>0&&$(new Set([Te.milestones[0].slices[0].id]))}else en(null),tn(null)}catch(Te){a(Me(Te)||"Failed to load mission details","error")}finally{N(!1)}},[a,r]);i.useEffect(()=>{if(!m||!bn){tn(null);return}let U=!1;return tn(null),Ah(bn,r).then(Te=>{if(!U){if(!Jd(Te)){tn(null);return}tn(Te),rn(Ke=>{const kt=new Map(Ke);return kt.set(bn,Te.rollup),kt})}}).catch(()=>{U||tn(null)}),()=>{U=!0}},[m,bn,r]),i.useEffect(()=>{Kt(!0)},[bn]);const qn=i.useCallback(U=>{!U||U!==Un.current||Ah(U,r).then(Te=>{Un.current!==U||!Jd(Te)||(tn(Te),rn(Ke=>{const kt=new Map(Ke);return kt.set(U,Te.rollup),kt}))}).catch(()=>{})},[r]),On=i.useCallback(async(U,Te)=>{const Ke=Te?.append??!1,kt=Ke?jn.current.length:0;Ke||(wt(!0),je(new Set));try{const wn=await D1(U,{limit:50,offset:kt,eventType:void 0},r),we=wn.events.filter(ht=>ng(ht.eventType,Ht));cn(ht=>{if(!Ke)return jn.current=we,we;const Oe=new Set(ht.map(Lt=>Lt.id)),tt=[...ht];for(const Lt of we)Oe.has(Lt.id)||tt.push(Lt);return jn.current=tt,tt}),ze(wn.total),Ke||requestAnimationFrame(()=>{Zt("auto")})}catch(wn){a(Me(wn)||"Failed to load mission activity","error")}finally{Ke||wt(!1)}},[a,Ht,r,Zt]);i.useEffect(()=>{jn.current=Gt},[Gt]),i.useEffect(()=>{m&&(qt(),w(null),en(null),tn(null),cn([]),ze(0),Ct("structure"),gn("all"),je(new Set))},[m,qt]);const os=i.useRef(null);i.useEffect(()=>{m&&d&&os.current!==d&&f.length>0&&(os.current=d,Ot(d))},[m,d,f,Ot]),i.useEffect(()=>{m||(os.current=null)},[m]);const xs=i.useRef(!1);i.useEffect(()=>{!m||!n||S||v||xs.current||g||d||f.length!==0&&(xs.current=!0,Ot(f[0].id))},[m,n,S,v,f,g,d,Ot]),i.useEffect(()=>{m||(xs.current=!1)},[m]),i.useEffect(()=>{!m||!g||Ge!=="activity"||On(g.id)},[Ge,m,On,g,Ht]),i.useEffect(()=>{if(!m||typeof EventSource>"u")return;const U=new URLSearchParams;r&&U.set("projectId",r);const Te=`/api/events${U.size>0?`?${U.toString()}`:""}`,Ke=()=>{Xt(Ln.current)},kt=ps=>{Ke();const ns=ps;if(ns.data)try{const hn=JSON.parse(ns.data);hn?.id&&p(fs=>fs.map(Vs=>Vs.id===hn.id?{...Vs,...hn}:Vs))}catch{}mn.current&&Ot(mn.current.id)},wn=ps=>{Ke(),mn.current&&Ot(mn.current.id)},we=()=>{Ke(),mn.current&&Ot(mn.current.id)},ht=ps=>{Ke(),mn.current&&Ot(mn.current.id)},Oe=ps=>{const ns=ps;if(ns.data)try{const hn=JSON.parse(ns.data);hn&&hn.featureId&&(fi(hn.featureId),ai(hn.featureId),hn.milestoneId&&qn(hn.milestoneId))}catch{}},tt=ps=>{const ns=ps;if(ns.data)try{const hn=JSON.parse(ns.data);hn&&hn.featureId&&(fi(hn.featureId),ai(hn.featureId),hn.milestoneId&&qn(hn.milestoneId),mn.current&&Ot(mn.current.id))}catch{}},Lt=ps=>{const ns=ps;if(ns.data)try{const hn=JSON.parse(ns.data);hn&&hn.milestoneId&&(hs(hn.milestoneId),qn(hn.milestoneId))}catch{}},Sn=ps=>{const ns=ps;if(ns.data)try{const hn=JSON.parse(ns.data);hn&&hn.milestoneId&&(ls(hn.milestoneId),hs(hn.milestoneId),qn(hn.milestoneId))}catch{}};return pi(Te,{events:{"mission:updated":kt,"slice:updated":wn,"feature:updated":we,"milestone:updated":ht,"mission:event":ps=>{Ke();const ns=mn.current;if(!ns||ce.current!=="activity")return;const hn=Nn(),fs=ps;if(fs.data)try{const Vs=JSON.parse(fs.data);if(!oD(Vs)||Vs.missionId!==ns.id||!ng(Vs.eventType,it.current))return;cn(Ys=>{const so=Ys.filter(hr=>hr.id!==Vs.id);return[Vs,...so].slice(0,100)}),ze(Ys=>Ys+1),hn&&requestAnimationFrame(()=>{const Ys=pt.current;Ys&&(Ys.scrollTop=0)})}catch{}},"validator-run:started":Oe,"validator-run:completed":tt,"milestone:validation:updated":Lt,"assertion:created":Sn,"assertion:updated":Sn,"assertion:deleted":Sn,"assertion:linked":Sn,"assertion:unlinked":Sn,"fix-feature:created":ps=>{const ns=ps;if(ns.data)try{const hn=JSON.parse(ns.data);if(hn&&hn.sourceFeatureId){fi(hn.sourceFeatureId);const fs=hn?.feature?.sliceId,Vs=mn.current;if(fs&&Vs){const Ys=Vs.milestones.find(so=>so.slices.some(hr=>hr.id===fs));Ys&&qn(Ys.id)}mn.current&&Ot(mn.current.id)}}catch{}}}})},[m,Nn,Ot,Xt,r,qn]);const ms=i.useCallback(U=>{M(U.id),Q(!1),F({title:U.title,description:U.description||"",status:U.status,autopilotEnabled:U.autopilotEnabled??!1})},[]),vs=i.useCallback(()=>{M(null),Q(!1),F(tg)},[]),as=i.useCallback(async()=>{if(!T.title.trim()){a("Mission title is required","error");return}try{if(oe(!0),A)await T1({title:T.title.trim(),description:T.description.trim()||void 0,autopilotEnabled:T.autopilotEnabled},r),a("Mission created","success");else if(H){const U={title:T.title.trim(),description:T.description.trim()||void 0,status:T.status,autopilotEnabled:T.autopilotEnabled};T.autopilotEnabled&&(U.autoAdvance=!0),await P1(H,U,r),a("Mission updated","success"),g?.id===H&&await Ot(H)}await qt(),vs()}catch(U){a(Me(U)||"Failed to save mission","error")}finally{oe(!1)}},[T,A,H,a,qt,Ot,g,vs,r]),Tn=i.useCallback(async U=>{try{await $1(U,r),a("Mission deleted","success"),g?.id===U&&w(null),await qt(),lt(null)}catch(Te){a(Me(Te)||"Failed to delete mission","error")}},[a,qt,g,r]),ys=i.useCallback(()=>{Ae(!0),q(null),be(Wd)},[]),Ls=i.useCallback(U=>{q(U.id),Ae(!1),be({title:U.title,description:U.description||"",status:U.status,dependencies:U.dependencies})},[]),_s=i.useCallback(()=>{q(null),Ae(!1),be(Wd)},[]),Z=i.useCallback(async()=>{if(!de.title.trim()){a("Milestone title is required","error");return}try{oe(!0),Ce&&g?(await O1(g.id,{title:de.title.trim(),description:de.description.trim()||void 0,dependencies:de.dependencies},r),a("Milestone created","success")):j&&(await F1(j,{title:de.title.trim(),description:de.description.trim()||void 0,status:de.status,dependencies:de.dependencies},r),a("Milestone updated","success")),await Ot(g.id),_s()}catch(U){a(Me(U)||"Failed to save milestone","error")}finally{oe(!1)}},[de,Ce,j,g,a,Ot,_s,T.title,r]),Ee=i.useCallback(async U=>{try{await z1(U,r),a("Milestone deleted","success"),await Ot(g.id),lt(null)}catch(Te){a(Me(Te)||"Failed to delete milestone","error")}},[a,Ot,g,r]),gt=i.useCallback(U=>{en(U),Kt(!0),E(Te=>{const Ke=new Set(Te);return!Ke.has(U)?(Ke.add(U),ed(U,r).then(wn=>{st(we=>{const ht=new Map(we);return ht.set(U,wn),ht})}).catch(()=>{}),td(U,r).then(wn=>{rn(we=>{const ht=new Map(we);return ht.set(U,wn),ht})}).catch(()=>{})):Ke.delete(U),Ke})},[r]),zt=i.useCallback(U=>{Y(U),ee(!0),X(null),ie(Gd)},[]),O=i.useCallback(U=>{X(U.id),ee(!1),ie({title:U.title,description:U.description||"",status:U.status})},[]),He=i.useCallback(()=>{X(null),ee(!1),Y(null),ie(Gd)},[]),Ze=i.useCallback(async()=>{if(!pe.title.trim()){a("Slice title is required","error");return}try{oe(!0),ye&&L?(await B1(L,{title:pe.title.trim(),description:pe.description.trim()||void 0},r),a("Slice created","success")):ae&&(await U1(ae,{title:pe.title.trim(),description:pe.description.trim()||void 0,status:pe.status},r),a("Slice updated","success")),await Ot(g.id),He()}catch(U){a(Me(U)||"Failed to save slice","error")}finally{oe(!1)}},[pe,ye,ae,L,g,a,Ot,He,r]),Ye=i.useCallback(async U=>{try{await H1(U,r),a("Slice deleted","success"),await Ot(g.id),lt(null)}catch(Te){a(Me(Te)||"Failed to delete slice","error")}},[a,Ot,g,r]),ft=i.useCallback(async U=>{try{await q1(U,r),a("Slice activated","success"),await Ot(g.id)}catch(Te){a(Me(Te)||"Failed to activate slice","error")}},[a,Ot,g,r]),Rt=i.useCallback(U=>{$(Te=>{const Ke=new Set(Te);return Ke.has(U)?Ke.delete(U):Ke.add(U),Ke})},[]),Ft=i.useCallback(U=>{ct(U),Be(!0),B(null),Ne(Kd)},[]),on=i.useCallback(U=>{B(U.id),Be(!1),Ne({title:U.title,description:U.description||"",acceptanceCriteria:U.acceptanceCriteria||"",status:U.status})},[]),yn=i.useCallback(()=>{B(null),Be(!1),ct(null),Ne(Kd)},[]),ne=i.useCallback(async()=>{if(!xe.title.trim()){a("Feature title is required","error");return}try{oe(!0),te&&$e?(await V1($e,{title:xe.title.trim(),description:xe.description.trim()||void 0,acceptanceCriteria:xe.acceptanceCriteria.trim()||void 0},r),a("Feature created","success")):me&&(await W1(me,{title:xe.title.trim(),description:xe.description.trim()||void 0,acceptanceCriteria:xe.acceptanceCriteria.trim()||void 0,status:xe.status},r),a("Feature updated","success")),await Ot(g.id),yn()}catch(U){a(Me(U)||"Failed to save feature","error")}finally{oe(!1)}},[xe,te,me,$e,g,a,Ot,yn,r]),Fe=i.useCallback(async U=>{try{await G1(U,r),a("Feature deleted","success"),await Ot(g.id),lt(null)}catch(Te){a(Me(Te)||"Failed to delete feature","error")}},[a,Ot,g,r]),qe=i.useCallback(async()=>{if(!De||!_e.trim()){a("Task ID is required","error");return}try{await K1(De,_e.trim(),r),a("Feature linked to task","success"),await Ot(g.id),le(null),Le("")}catch(U){a(Me(U)||"Failed to link feature to task","error")}},[De,_e,a,Ot,g,r]),Bt=i.useCallback(async U=>{try{await J1(U,r),a("Feature unlinked from task","success"),await Ot(g.id)}catch(Te){a(Me(Te)||"Failed to unlink feature","error")}},[a,Ot,g,r]),nn=i.useCallback(async U=>{try{oe(!0),await Y1(U,void 0,void 0,r),a("Feature triaged — task created","success"),await Ot(g.id)}catch(Te){a(Me(Te)||"Failed to triage feature","error")}finally{oe(!1)}},[a,Ot,g,r]),An=i.useCallback(async U=>{J(U);try{const Te=await EC(U,r);Mt({featureId:U,enrichedDescription:Te.description})}catch{await nn(U)}finally{J(null)}},[nn,r]),es=i.useCallback(async()=>{Tt&&(Mt(null),await nn(Tt.featureId))},[nn,Tt]),Hn=i.useCallback(()=>{Mt(null)},[]),Zn=i.useCallback(async U=>{try{oe(!0);const Te=await Q1(U,r);a(`Triaged ${Te.count} feature${Te.count!==1?"s":""}`,"success"),await Ot(g.id)}catch(Te){a(Me(Te)||"Failed to triage slice features","error")}finally{oe(!1)}},[a,Ot,g,r]),ls=i.useCallback(async U=>{try{const Te=await ed(U,r);st(Ke=>{const kt=new Map(Ke);return kt.set(U,Te),kt})}catch{}},[r]),hs=i.useCallback(async U=>{try{const Te=await td(U,r);rn(Ke=>{const kt=new Map(Ke);return kt.set(U,Te),kt})}catch{}},[r]),qi=i.useCallback(async U=>{if(!Xe.title.trim()||!Xe.assertion.trim()){a("Title and assertion text are required","error");return}try{oe(!0),await X1(U,{title:Xe.title.trim(),assertion:Xe.assertion.trim(),status:Xe.status},r),a("Assertion created","success"),await ls(U),await hs(U),Et(!1),vt({title:"",assertion:"",status:"pending"})}catch(Te){a(Me(Te)||"Failed to create assertion","error")}finally{oe(!1)}},[Xe,a,ls,hs,r]),_a=i.useCallback(U=>{fe(U.id),vt({title:U.title,assertion:U.assertion,status:U.status})},[]),Mi=i.useCallback(()=>{fe(null),Et(!1),vt({title:"",assertion:"",status:"pending"})},[]),Vi=i.useCallback(async(U,Te)=>{if(!Xe.title.trim()||!Xe.assertion.trim()){a("Title and assertion text are required","error");return}try{oe(!0),await Z1(U,{title:Xe.title.trim(),assertion:Xe.assertion.trim(),status:Xe.status},r),a("Assertion updated","success"),await ls(Te),await hs(Te),Mi()}catch(Ke){a(Me(Ke)||"Failed to update assertion","error")}finally{oe(!1)}},[Xe,a,ls,hs,Mi,r]),Ms=i.useCallback(async U=>{try{const Te=await nC(U,r);Vt(Ke=>{const kt=new Map(Ke);return kt.set(U,Te),kt})}catch{}},[r]),Wi=i.useCallback(async U=>{const Te=Pt!==U;Jt(Ke=>Ke===U?null:U),Te&&await Ms(U)},[Pt,Ms]),Ma=i.useCallback(U=>{Jt(U),Ms(U),requestAnimationFrame(()=>{const Te=document.querySelector(`[data-mission-assertion-id="${U}"]`);Te instanceof HTMLElement&&typeof Te.scrollIntoView=="function"&&Te.scrollIntoView({behavior:"smooth",block:"center"})})},[Ms]),Ai=i.useCallback(async(U,Te)=>{try{fn(Ke=>new Set(Ke).add(Te)),await eC(U,Te,r),a("Feature linked to assertion","success"),await Ms(Te),vn(null)}catch(Ke){a(Me(Ke)||"Failed to link feature","error")}finally{fn(Ke=>{const kt=new Set(Ke);return kt.delete(Te),kt})}},[a,Ms,r]),to=i.useCallback(async(U,Te)=>{const Ke=`${U}-${Te}`;try{an(kt=>new Set(kt).add(Ke)),await tC(U,Te,r),a("Feature unlinked from assertion","success"),await Ms(Te)}catch(kt){a(Me(kt)||"Failed to unlink feature","error")}finally{an(kt=>{const wn=new Set(kt);return wn.delete(Ke),wn})}},[a,Ms,r]),Aa=i.useCallback(async U=>{try{un(Ke=>new Set(Ke).add(U)),await sC(U,r),a("Validation triggered","success");const Te=await Rh(U,r);$t(Ke=>{const kt=new Map(Ke);return kt.set(U,Te),kt})}catch(Te){a(Me(Te)||"Failed to trigger validation","error")}finally{un(Te=>{const Ke=new Set(Te);return Ke.delete(U),Ke})}},[a,r]),fi=i.useCallback(async U=>{try{const Te=await Rh(U,r);$t(Ke=>{const kt=new Map(Ke);return kt.set(U,Te),kt})}catch{}},[r]),ai=i.useCallback(async U=>{try{const Te=await iC(U,{limit:10},r);at(Ke=>{const kt=new Map(Ke);return kt.set(U,Te),kt})}catch{}},[r]),Gi=i.useCallback(U=>{const Te=mn.current;if(Te){for(const Ke of Te.milestones)for(const kt of Ke.slices)if(kt.features.find(we=>we.id===U)){E(we=>{const ht=new Set(we);return ht.add(Ke.id),ht}),$(we=>{const ht=new Set(we);return ht.add(kt.id),ht}),Re(U),en(Ke.id),fi(U),ai(U),requestAnimationFrame(()=>{const we=document.querySelector(`[data-mission-feature-id="${U}"]`);we instanceof HTMLElement&&typeof we.scrollIntoView=="function"&&we.scrollIntoView({behavior:"smooth",block:"center"})});return}}},[fi,ai]),la=i.useCallback(async U=>{try{const Te=await aC(U,r);At(Ke=>{const kt=new Map(Ke);return kt.set(U,Te),kt})}catch{}},[r]),Ki=i.useCallback(async U=>{ue===U?Re(null):(Re(U),await fi(U),await ai(U))},[ue,fi,ai]),gi=i.useCallback(async U=>{Je===U?Nt(null):(Nt(U),await la(U))},[Je,la]),ts=i.useCallback(async U=>{try{await rC(U,r),a("Mission resumed","success"),await Ot(U),qt()}catch(Te){a(Me(Te)||"Failed to resume mission","error")}},[a,Ot,qt,r]),Ra=i.useCallback(async U=>{try{const Ke=(await oC(U,r)).pausedTaskIds?.length??0;a(`Mission stopped (${Ke} task${Ke!==1?"s":""} paused)`,"success"),await Ot(U),qt()}catch(Te){a(Me(Te)||"Failed to stop mission","error")}},[a,Ot,qt,r]),Ri=i.useCallback(async U=>{try{await lC(U,r),a("Mission started — first slice activated","success"),await Ot(U),qt()}catch(Te){a(Me(Te)||"Failed to start mission","error")}},[a,Ot,qt,r]),sr=i.useCallback(async(U,Te)=>{try{await cC(U,{enabled:Te},r),a(Te?"Autopilot enabled":"Autopilot disabled","success"),await Ot(U),qt()}catch(Ke){a(Me(Ke)||"Failed to update autopilot","error")}},[a,Ot,qt,r]),Ji=i.useCallback(U=>{Ct("structure"),en(null),tn(null),cn([]),ze(0),gn("all"),je(new Set),Ot(U.id)},[Ot]),ca=i.useCallback(()=>{w(null),en(null),tn(null),Ct("structure"),cn([]),ze(0),gn("all"),je(new Set),qt()},[qt]),da=Gt.length<G,bi=g?.autopilotState??"inactive",Pn=bi==="watching"||bi==="activating",ir=dD(bi,g?.lastAutopilotActivityAt),ua=i.useRef(g?.id??null);i.useEffect(()=>{const U=ua.current,Te=g?.id??null;ua.current=Te,!(!m||!S||!Te||U===Te)&&C({type:"view",revert:ca})},[ca,m,S,C,g?.id]);const Ii=i.useMemo(()=>!Yt||!bn||!Jd(Yt)?null:Yt.rollup.milestoneId===bn?Yt:null,[bn,Yt]),ar=i.useMemo(()=>{const U=new Map;for(const Te of Ii?.validationTelemetry.validationRounds??[]){const Ke=U.get(Te.featureId);(!Ke||Te.startedAt>Ke.startedAt)&&U.set(Te.featureId,Te)}return U},[Ii]),rr=i.useCallback(()=>{!g||ut||!da||On(g.id,{append:!0})},[ut,da,On,g]),or=i.useCallback(U=>{je(Te=>{const Ke=new Set(Te);return Ke.has(U)?Ke.delete(U):Ke.add(U),Ke})},[]),ma=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),as())},[as]),Ia=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),Z())},[Z]),Ta=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),Ze())},[Ze]),Pa=i.useCallback(U=>{U.key==="Enter"&&!U.shiftKey&&(U.preventDefault(),ne())},[ne]),no=i.useRef(null);if(i.useEffect(()=>{if(!m)return;const U=Te=>{Te.key==="Escape"&&s()};return document.addEventListener("keydown",U),()=>document.removeEventListener("keydown",U)},[m,s]),!m)return null;const xi=()=>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:[Pn&&t.jsx("span",{className:"mission-detail__autopilot-dot",title:"Autopilot watching"}),t.jsx("h3",{className:"mission-detail__title",children:g.title})]}),t.jsx("span",{className:"mission-status-badge",style:{backgroundColor:(xo[g.status]||xo.planning).bg,color:(xo[g.status]||xo.planning).text},children:g.status})]}),g.description&&t.jsx("p",{className:"mission-detail__description",children:g.description}),t.jsx("div",{className:"mission-detail__meta",children:t.jsxs("span",{className:"mission-detail__meta-info",children:[g.milestones.length," milestones"]})}),t.jsxs("div",{className:"mission-detail__autopilot",children:[t.jsxs("div",{className:"mission-detail__autopilot-toggle",children:[t.jsxs("label",{className:"mission-toggle","data-testid":"mission-autopilot-toggle",children:[t.jsx("input",{type:"checkbox",checked:g.autopilotEnabled??!1,onChange:U=>sr(g.id,U.target.checked),"aria-label":"Autopilot"}),t.jsx("span",{className:"mission-toggle__track","aria-hidden":"true",children:t.jsx("span",{className:"mission-toggle__thumb"})}),t.jsxs("span",{className:"mission-toggle__label",children:[t.jsx(rs,{size:14,className:"mission-detail__autopilot-icon"}),"Autopilot"]})]}),t.jsxs("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:(Dl[bi]||Dl.inactive).bg,color:(Dl[bi]||Dl.inactive).text},"data-testid":"autopilot-state-badge",children:[Pn&&t.jsx("span",{className:"mission-detail__autopilot-pulse"}),bi]})]}),ir&&t.jsx("span",{className:"mission-detail__autopilot-activity mission-relative-time",children:ir})]}),t.jsxs("div",{className:"mission-detail__actions",children:[g.status==="active"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>Ra(g.id),title:"Stop mission","aria-label":"Stop mission",children:t.jsx(Oi,{size:14})}),g.status==="blocked"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>ts(g.id),title:"Resume mission","aria-label":"Resume mission",children:t.jsx(is,{size:14})}),g.status==="planning"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>Ri(g.id),title:"Start mission","aria-label":"Start mission",children:t.jsx(is,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>ms(g),title:"Edit mission","aria-label":"Edit mission",children:t.jsx(Fs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>lt({type:"mission",id:g.id}),title:"Delete mission","aria-label":"Delete mission",children:t.jsx(zn,{size:14})})]})]}),H===g.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:T.title,onChange:U=>F({...T,title:U.target.value}),onKeyDown:ma,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:T.description,onChange:U=>F({...T,description:U.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__row",children:[t.jsxs("select",{value:T.status,onChange:U=>F({...T,status:U.target.value}),children:[t.jsx("option",{value:"planning",children:"Planning"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"blocked",children:"Blocked"}),t.jsx("option",{value:"complete",children:"Complete"}),t.jsx("option",{value:"archived",children:"Archived"})]}),t.jsxs("label",{className:"mission-checkbox",children:[t.jsx("input",{type:"checkbox",checked:T.autopilotEnabled,onChange:U=>F({...T,autopilotEnabled:U.target.checked})}),t.jsx(rs,{size:12})," Autopilot"]})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:as,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:vs,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-detail__tabs",role:"tablist","aria-label":"Mission detail tabs",children:[t.jsx("button",{className:`mission-btn ${Ge==="structure"?"mission-btn--primary":"mission-btn--ghost"} mission-btn--sm mission-detail__tab`,onClick:()=>Ct("structure"),role:"tab","aria-selected":Ge==="structure","data-testid":"mission-tab-structure",children:"Structure"}),t.jsxs("button",{className:`mission-btn ${Ge==="activity"?"mission-btn--primary":"mission-btn--ghost"} mission-btn--sm mission-detail__tab`,onClick:()=>Ct("activity"),role:"tab","aria-selected":Ge==="activity","data-testid":"mission-tab-activity",children:["Activity (",G,")"]})]}),Ge==="structure"?t.jsxs("div",{className:"mission-detail__milestones",children:[g.milestones.map(U=>{const Te=Ii?.rollup.milestoneId===U.id?Ii:null,Ke=Te?.rollup??Ut.get(U.id),kt=Te?.validationTelemetry.validationRounds??[],wn=Te?.fixFeatures??[],we=Xf[Ke?.state??"not_started"]??Xf.not_started,ht=Ke&&(Ke.state==="blocked"||Ke.state==="failed")?Te?.validationTelemetry.validationRounds.find(Oe=>Oe.blockedReason)?.blockedReason:void 0;return t.jsxs("div",{className:"mission-milestone",children:[t.jsxs("div",{className:"mission-milestone__header",onClick:()=>gt(U.id),children:[t.jsx("button",{className:"mission-milestone__expand",children:D.has(U.id)?t.jsx(Cn,{size:16}):t.jsx(Vn,{size:16})}),t.jsx(Va,{size:16,className:"mission-milestone__icon"}),t.jsx("span",{className:"mission-milestone__title",children:U.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Yf[U.status].bg,color:Yf[U.status].text},children:U.status}),t.jsxs("span",{className:"mission-milestone__count",children:[U.slices.length," slices"]}),t.jsx(Zf,{state:sD(U.interviewState)}),Ke&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:we.bg,color:we.text},title:"Validation state",children:eg(Ke.state)}),Ke.totalAssertions>0&&t.jsx("div",{className:"mission-milestone__coverage-bar",title:`${Ke.passedAssertions??0} of ${Ke.totalAssertions} assertions passing`,children:t.jsx("div",{className:"mission-milestone__coverage-bar-fill",style:{width:`${(Ke.passedAssertions??0)/Ke.totalAssertions*100}%`,backgroundColor:(Ke.passedAssertions??0)===Ke.totalAssertions?"var(--color-success)":"var(--color-warning)"}})})]}),U.status!=="complete"&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>ot({type:"milestone",id:U.id,title:U.title}),title:"Plan milestone","aria-label":"Plan milestone",children:t.jsx(ja,{size:14})}),t.jsxs("div",{className:"mission-milestone__actions",onClick:Oe=>Oe.stopPropagation(),children:[t.jsx("button",{className:"mission-icon-btn",onClick:()=>zt(U.id),title:"Add slice",children:t.jsx(Bn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Ls(U),title:"Edit milestone",children:t.jsx(Fs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>lt({type:"milestone",id:U.id}),title:"Delete milestone",children:t.jsx(zn,{size:14})})]})]}),D.has(U.id)&&t.jsxs("div",{className:"mission-milestone__body",children:[(Ce||j===U.id)&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Milestone title",value:de.title,onChange:Oe=>be({...de,title:Oe.target.value}),onKeyDown:Ia,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:de.description,onChange:Oe=>be({...de,description:Oe.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Z,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),j?"Update":"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:_s,children:"Cancel"})]})]}),Te&&t.jsxs("div",{className:"mission-validation-telemetry",children:[t.jsxs("div",{className:"mission-validation-telemetry__header",children:[t.jsx("span",{className:"mission-validation-telemetry__title",children:"Validation Telemetry"}),t.jsxs("span",{className:"mission-validation-telemetry__meta",children:[Te.validationTelemetry.totalRuns," rounds",Te.validationTelemetry.lastValidatorStatus?` · Last ${Te.validationTelemetry.lastValidatorStatus}`:""]})]}),ht&&t.jsxs("div",{className:"mission-blocked-reason",children:[t.jsx("strong",{children:"Blocked reason:"})," ",ht]}),kt.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:()=>Kt(Oe=>!Oe),title:Qt?"Hide validation rounds":"Show validation rounds",children:[Qt?t.jsx(Cn,{size:12}):t.jsx(Vn,{size:12}),"Validation rounds (",kt.length,")"]}),Qt&&t.jsx("div",{className:"mission-validation-rounds__list",children:kt.map(Oe=>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--${Oe.validatorStatus}`,children:Oe.validatorStatus}),t.jsx("span",{className:"mission-validation-round__feature",children:Oe.featureTitle}),t.jsxs("span",{className:"mission-validation-round__attempts",children:["impl #",Oe.implementationAttempt," · reviewer #",Oe.validatorAttempt]})]}),t.jsxs("div",{className:"mission-validation-round__links",children:[t.jsx("span",{className:"mission-validation-round__label",children:"Failed assertions:"}),Oe.failedAssertionIds.length>0?t.jsx("div",{className:"mission-validation-round__chip-list",children:Oe.failedAssertionIds.map(tt=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>Ma(tt),title:`Jump to assertion ${tt}`,children:tt},`${Oe.roundId}-${tt}`))}):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:"}),Oe.generatedFixFeatureIds.length>0?t.jsx("div",{className:"mission-validation-round__chip-list",children:Oe.generatedFixFeatureIds.map(tt=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>Gi(tt),title:`Jump to fix feature ${tt}`,children:tt},`${Oe.roundId}-${tt}`))}):t.jsx("span",{className:"mission-validation-round__empty",children:"None"})]}),Oe.blockedReason&&t.jsx("div",{className:"mission-validation-round__blocked-reason",children:Oe.blockedReason})]},Oe.roundId))})]}),wn.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:wn.map(Oe=>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:()=>Gi(Oe.id),title:`Jump to feature ${Oe.id}`,children:Oe.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:$l[Oe.status].bg,color:$l[Oe.status].text},children:Oe.status}),Oe.loopState&&t.jsx("span",{className:`mission-loop-state mission-loop-state--${Oe.loopState}`,children:Oe.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:()=>Gi(Oe.sourceFeatureId),title:`Jump to source feature ${Oe.sourceFeatureId}`,children:Oe.sourceFeatureId}),t.jsx("span",{children:"Run:"}),t.jsx("span",{className:"mission-fix-feature__run",children:Oe.runId})]}),Oe.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:Oe.failedAssertionIds.map(tt=>t.jsx("button",{className:"mission-validation-round__link-chip",onClick:()=>Ma(tt),title:`Jump to assertion ${tt}`,children:tt},`${Oe.id}-${tt}`))})]})]},Oe.id))})]})]}),t.jsxs("div",{className:"mission-slices",children:[U.slices.map(Oe=>t.jsxs("div",{className:"mission-slice",children:[t.jsxs("div",{className:"mission-slice__header",onClick:()=>Rt(Oe.id),children:[t.jsx("button",{className:"mission-slice__expand",children:P.has(Oe.id)?t.jsx(Cn,{size:16}):t.jsx(Vn,{size:16})}),t.jsx(vu,{size:16,className:"mission-slice__icon"}),t.jsx("span",{className:"mission-slice__title",children:Oe.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:Qf[Oe.status].bg,color:Qf[Oe.status].text},children:Oe.status}),t.jsxs("span",{className:"mission-slice__count",children:[Oe.features?.length||0," features"]}),t.jsx(Zf,{state:Oe.planState??"not_started"}),Oe.status!=="complete"&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>ot({type:"slice",id:Oe.id,title:Oe.title}),title:"Plan slice","aria-label":"Plan slice",children:t.jsx(ja,{size:14})}),t.jsxs("div",{className:"mission-slice__actions",onClick:tt=>tt.stopPropagation(),children:[Oe.status==="pending"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>ft(Oe.id),title:"Activate slice",children:t.jsx(is,{size:14})}),Oe.status==="active"&&Oe.features?.some(tt=>tt.status==="defined")&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>Zn(Oe.id),title:"Triage all features",disabled:W,children:W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(rs,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Ft(Oe.id),title:"Add feature",children:t.jsx(Bn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>O(Oe),title:"Edit slice",children:t.jsx(Fs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>lt({type:"slice",id:Oe.id}),title:"Delete slice",children:t.jsx(zn,{size:14})})]})]}),P.has(Oe.id)&&t.jsxs("div",{className:"mission-slice__body",children:[ye&&L===U.id&&!ae&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Slice title",value:pe.title,onChange:tt=>ie({...pe,title:tt.target.value}),onKeyDown:Ta,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:pe.description,onChange:tt=>ie({...pe,description:tt.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ze,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:He,children:"Cancel"})]})]}),ae===Oe.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Slice title",value:pe.title,onChange:tt=>ie({...pe,title:tt.target.value}),onKeyDown:Ta,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:pe.description,onChange:tt=>ie({...pe,description:tt.target.value}),rows:2}),t.jsxs("select",{value:pe.status,onChange:tt=>ie({...pe,status:tt.target.value}),children:[t.jsx("option",{value:"pending",children:"Pending"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"complete",children:"Complete"})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Ze,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:He,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-features",children:[Oe.features?.map(tt=>t.jsxs("div",{className:"mission-feature","data-mission-feature-id":tt.id,children:[t.jsxs("div",{className:"mission-feature__header",children:[t.jsx("button",{className:"mission-feature__expand",onClick:()=>Ki(tt.id),title:ue===tt.id?"Collapse details":"Expand to show run history",children:ue===tt.id?t.jsx(Cn,{size:14}):t.jsx(Vn,{size:14})}),t.jsx(hu,{size:14,className:"mission-feature__icon"}),t.jsx("span",{className:"mission-feature__title",children:tt.title}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:$l[tt.status].bg,color:$l[tt.status].text},children:tt.status}),tt.loopState&&tt.loopState!=="idle"&&t.jsxs("span",{className:`mission-loop-state mission-loop-state--${tt.loopState}`,title:`Loop state: ${tt.loopState}`,children:[tt.loopState==="implementing"&&"⏳",tt.loopState==="validating"&&"🔄",tt.loopState==="needs_fix"&&"🔧",tt.loopState==="passed"&&"✅",tt.loopState==="blocked"&&"🚫"]}),tt.generatedFromFeatureId&&t.jsx("button",{className:"mission-feature__lineage",onClick:()=>Gi(tt.generatedFromFeatureId),title:`Generated from feature: ${tt.generatedFromFeatureId}`,children:"🔗 Fix"}),(tt.loopState==="validating"||tt.loopState==="needs_fix")&&(()=>{const Lt=pn.get(tt.id),Sn=ar.get(tt.id),qs=Lt?.implementationAttemptCount??Sn?.implementationAttempt??tt.implementationAttemptCount??0,wi=Lt?.retryBudgetRemaining??Math.max(0,Z4-qs);return t.jsxs("span",{className:"mission-feature__retry-budget",title:"Implementation attempts and remaining retry budget",children:["Attempt ",qs," · ",wi," ",wi===1?"retry":"retries"," left"]})})(),tt.loopState==="implementing"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--validate",onClick:()=>Aa(tt.id),title:"Validate feature",disabled:xn.has(tt.id),children:xn.has(tt.id)?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(cs,{size:14})}),tt.taskId&&t.jsx("span",{className:"mission-feature__task-link",onClick:()=>o?.(tt.taskId),title:"Click to view task",children:tt.taskId}),t.jsxs("div",{className:"mission-feature__actions",children:[tt.status==="defined"&&!tt.taskId&&t.jsx("button",{className:"mission-icon-btn",onClick:()=>An(tt.id),title:"Triage — create task",disabled:W||We===tt.id,children:We===tt.id?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(rs,{size:14})}),tt.taskId?t.jsx("button",{className:"mission-icon-btn",onClick:()=>Bt(tt.id),title:"Unlink task",children:t.jsx(ah,{size:14})}):tt.status!=="defined"?t.jsx("button",{className:"mission-icon-btn",onClick:()=>le(tt.id),title:"Link to task",children:t.jsx(Tr,{size:14})}):null,t.jsx("button",{className:"mission-icon-btn",onClick:()=>on(tt),title:"Edit feature",children:t.jsx(Fs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>lt({type:"feature",id:tt.id}),title:"Delete feature",children:t.jsx(zn,{size:14})})]})]}),tt.description&&t.jsx("p",{className:"mission-feature__description",children:tt.description}),tt.acceptanceCriteria&&t.jsxs("p",{className:"mission-feature__criteria",children:[t.jsx("strong",{children:"Acceptance:"})," ",tt.acceptanceCriteria]}),Tt?.featureId===tt.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:Tt.enrichedDescription}),t.jsxs("div",{className:"mission-triage-preview__actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:es,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):null,"Create Task"]}),t.jsx("button",{className:"btn",onClick:Hn,disabled:W,children:"Cancel"})]})]}),me===tt.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Feature title",value:xe.title,onChange:Lt=>Ne({...xe,title:Lt.target.value}),onKeyDown:Pa,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:xe.description,onChange:Lt=>Ne({...xe,description:Lt.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:xe.acceptanceCriteria,onChange:Lt=>Ne({...xe,acceptanceCriteria:Lt.target.value}),rows:2}),t.jsxs("select",{value:xe.status,onChange:Lt=>Ne({...xe,status:Lt.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:ne,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:yn,children:"Cancel"})]})]}),ue===tt.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"})}),(et.get(tt.id)??[]).map(Lt=>t.jsxs("div",{className:"mission-run",children:[t.jsxs("div",{className:"mission-run__header",onClick:()=>gi(Lt.id),children:[t.jsx("span",{className:`mission-status-badge mission-status-badge--sm mission-run__status mission-run__status--${Lt.status}`,title:Lt.status,children:Lt.status}),t.jsx("span",{className:"mission-run__time",children:new Date(Lt.startedAt).toLocaleString()}),Lt.completedAt&&t.jsxs("span",{className:"mission-run__duration",children:[Math.round((new Date(Lt.completedAt).getTime()-new Date(Lt.startedAt).getTime())/1e3),"s"]}),Lt.triggerType&&t.jsx("span",{className:"mission-run__trigger",children:Lt.triggerType}),t.jsx("button",{className:"mission-icon-btn",title:Je===Lt.id?"Hide details":"Show details",children:Je===Lt.id?t.jsx(Cn,{size:12}):t.jsx(Vn,{size:12})})]}),Je===Lt.id&&bt.get(Lt.id)&&t.jsxs("div",{className:"mission-run__details",children:[Lt.summary&&t.jsx("p",{className:"mission-run__summary",children:Lt.summary}),Lt.blockedReason&&t.jsxs("p",{className:"mission-run__blocked-reason",children:[t.jsx("strong",{children:"Blocked:"})," ",Lt.blockedReason]}),bt.get(Lt.id)?.failures&&bt.get(Lt.id).failures.length>0&&t.jsxs("div",{className:"mission-run__failures",children:[t.jsx("span",{className:"mission-run__failures-title",children:"Failed Assertions:"}),bt.get(Lt.id).failures.map(Sn=>t.jsxs("div",{className:"mission-run__failure",children:[t.jsx("span",{className:"mission-run__failure-message",children:Sn.message}),Sn.expected&&t.jsxs("span",{className:"mission-run__failure-expected",children:["Expected: ",Sn.expected]}),Sn.actual&&t.jsxs("span",{className:"mission-run__failure-actual",children:["Actual: ",Sn.actual]})]},Sn.id))]}),(!bt.get(Lt.id)?.failures||bt.get(Lt.id).failures.length===0)&&t.jsx("p",{className:"mission-run__no-failures",children:"No assertion failures"})]})]},Lt.id)),(!et.get(tt.id)||et.get(tt.id).length===0)&&t.jsx("div",{className:"mission-run-history__empty",children:"No validation runs yet."})]})]},tt.id)),te&&$e===Oe.id&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Feature title",value:xe.title,onChange:tt=>Ne({...xe,title:tt.target.value}),onKeyDown:Pa,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:xe.description,onChange:tt=>Ne({...xe,description:tt.target.value}),rows:2}),t.jsx("textarea",{placeholder:"Acceptance criteria (optional)",value:xe.acceptanceCriteria,onChange:tt=>Ne({...xe,acceptanceCriteria:tt.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:ne,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:yn,children:"Cancel"})]})]}),!te&&(!Oe.features||Oe.features.length===0)&&t.jsxs("div",{className:"mission-manager__empty mission-features__empty",children:[t.jsx(hu,{size:16}),t.jsx("span",{children:"No fix features generated."})]})]})]})]},Oe.id)),U.slices.length===0&&!ye&&t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(vu,{size:16}),t.jsx("span",{children:"No slices yet"})]}),t.jsxs("div",{className:"mission-assertions",children:[t.jsxs("div",{className:"mission-assertions__header",children:[t.jsx("span",{className:"mission-assertions__title",children:"Assertions"}),Ke&&t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:we.bg,color:we.text},children:eg(Ke.state)}),Ke&&Ke.totalAssertions>0&&t.jsx("div",{className:"mission-assertions__coverage-bar",title:`${Ke.passedAssertions??0} of ${Ke.totalAssertions} assertions passing`,children:t.jsx("div",{className:"mission-assertions__coverage-bar-fill",style:{width:`${(Ke.passedAssertions??0)/Ke.totalAssertions*100}%`,backgroundColor:(Ke.passedAssertions??0)===Ke.totalAssertions?"var(--color-success)":"var(--color-warning)"}})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>{Et(!0),fe(null),vt({title:"",assertion:"",status:"pending"})},title:"Add assertion",children:t.jsx(Bn,{size:14})})]}),St&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Assertion title",value:Xe.title,onChange:Oe=>vt({...Xe,title:Oe.target.value}),autoFocus:!0}),t.jsx("textarea",{placeholder:"Assertion text (what should be true when complete)",value:Xe.assertion,onChange:Oe=>vt({...Xe,assertion:Oe.target.value}),rows:2}),t.jsxs("select",{value:Xe.status,onChange:Oe=>vt({...Xe,status:Oe.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:()=>qi(U.id),disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Mi,children:"Cancel"})]})]}),t.jsxs("div",{className:"mission-assertions__list",children:[(Array.isArray(ve.get(U.id))?ve.get(U.id):[]).map(Oe=>t.jsxs("div",{className:"mission-assertion","data-mission-assertion-id":Oe.id,children:[t.jsx("div",{className:"mission-assertion__header",children:Ue===Oe.id?t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Assertion title",value:Xe.title,onChange:tt=>vt({...Xe,title:tt.target.value}),autoFocus:!0}),t.jsx("textarea",{placeholder:"Assertion text",value:Xe.assertion,onChange:tt=>vt({...Xe,assertion:tt.target.value}),rows:2}),t.jsxs("select",{value:Xe.status,onChange:tt=>vt({...Xe,status:tt.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:()=>Vi(Oe.id,U.id),disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Save"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:Mi,children:"Cancel"})]})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:(Ll[Oe.status]??Ll.pending).bg,color:(Ll[Oe.status]??Ll.pending).text},children:Oe.status}),t.jsx("span",{className:"mission-assertion__title",children:Oe.title}),(()=>{const Lt=dn.get(Oe.id)?.length??0;return Lt>0?t.jsxs("span",{className:"mission-assertion__linked-count",title:`${Lt} linked feature${Lt!==1?"s":""}`,children:["(",Lt," linked)"]}):null})(),t.jsx("button",{className:"mission-icon-btn",onClick:()=>Wi(Oe.id),title:"Toggle details",children:Pt===Oe.id?t.jsx(Cn,{size:14}):t.jsx(Vn,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>_a(Oe),title:"Edit assertion",children:t.jsx(Fs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>lt({type:"assertion",id:Oe.id}),title:"Delete assertion",children:t.jsx(zn,{size:14})})]})}),Pt===Oe.id&&t.jsxs("div",{className:"mission-assertion__body",children:[t.jsx("p",{className:"mission-assertion__text",children:Oe.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()=>{Pt!==Oe.id&&await Wi(Oe.id),vn(Dn===Oe.id?null:Oe.id)},title:"Link a feature",children:[t.jsx(Tr,{size:12}),"Link Feature"]})]}),Dn===Oe.id&&t.jsx("div",{className:"mission-assertion__feature-picker",children:t.jsx("div",{className:"mission-assertion__feature-picker-dropdown",children:(()=>{const tt=new Set((dn.get(Oe.id)??[]).map(Sn=>Sn.id)),Lt=[];return g?.milestones.forEach(Sn=>Sn.slices.forEach(qs=>Lt.push(...qs.features.filter(wi=>!tt.has(wi.id))))),Lt.length===0?t.jsx("span",{className:"mission-assertion__feature-picker-empty",children:"All features already linked"}):Lt.map(Sn=>t.jsxs("button",{className:"mission-assertion__feature-picker-item",onClick:()=>Ai(Sn.id,Oe.id),disabled:ln.has(Oe.id),children:[t.jsx("span",{className:"mission-assertion__feature-picker-title",children:Sn.title}),ln.has(Oe.id)&&t.jsx(_t,{size:12,className:"spinner"})]},Sn.id))})()})}),(()=>{const tt=dn.get(Oe.id)??[];return tt.length===0?t.jsx("span",{className:"mission-assertion__linked-empty",children:"No features linked yet"}):tt.map(Lt=>{const Sn=`${Lt.id}-${Oe.id}`,qs=_n.has(Sn);return t.jsxs("div",{className:"mission-assertion__linked-feature",children:[t.jsx("span",{className:"mission-assertion__linked-feature-title",children:Lt.title}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>to(Lt.id,Oe.id),disabled:qs,title:"Unlink feature",children:qs?t.jsx(_t,{size:12,className:"spinner"}):t.jsx(ah,{size:12})})]},Lt.id)})})()]})]})]},Oe.id)),(!ve.get(U.id)||ve.get(U.id)?.length===0)&&!St&&t.jsx("div",{className:"mission-manager__empty mission-assertions__empty",children:t.jsx("span",{children:"No assertions defined. Add one to define completion criteria."})})]})]})]})]})]},U.id)}),g&&!Ce&&j===null&&t.jsxs("button",{className:"mission-add-btn",onClick:ys,children:[t.jsx(Bn,{size:16}),"Add Milestone"]}),Ce&&j===null&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Milestone title",value:de.title,onChange:U=>be({...de,title:U.target.value}),onKeyDown:Ia,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:de.description,onChange:U=>be({...de,description:U.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:Z,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:_s,children:"Cancel"})]})]}),g.milestones.length===0&&!Ce&&t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(Va,{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:Ht,onChange:U=>gn(U.target.value),"data-testid":"mission-activity-filter",children:[t.jsx("option",{value:"all",children:"All events"}),t.jsx("option",{value:"errors",children:"Errors & warnings"}),t.jsx("option",{value:"state_changes",children:"State changes"}),t.jsx("option",{value:"tasks",children:"Task events"}),t.jsx("option",{value:"slices",children:"Slice & milestone events"}),t.jsx("option",{value:"autopilot",children:"Autopilot events"})]})]}),t.jsxs("span",{className:"mission-detail__activity-count",children:[Gt.length," of ",G]})]}),!ut&&da&&t.jsx("div",{className:"mission-detail__activity-load-more mission-detail__activity-load-more--top",children:t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:rr,"data-testid":"mission-activity-load-more",children:"Load more"})}),ut?t.jsxs("div",{className:"mission-manager__loading mission-detail__activity-loading",children:[t.jsx(_t,{size:18,className:"spinner"}),t.jsx("span",{children:"Loading mission activity..."})]}):Gt.length===0?t.jsxs("div",{className:"mission-manager__empty",children:[t.jsx(Bs,{size:18}),t.jsx("span",{children:"No events yet."})]}):t.jsxs("div",{ref:pt,className:"mission-events","data-testid":"mission-activity-events",children:[Gt.map(U=>{const Te=!!(U.metadata&&Object.keys(U.metadata).length>0),Ke=Mn.has(U.id);return t.jsxs("div",{className:"mission-event",children:[t.jsxs("div",{className:"mission-event__header",children:[t.jsx("span",{className:`mission-event__type ${lD(U.eventType)}`,children:cD(U.eventType)}),t.jsx("span",{className:"mission-event__time",children:hc(U.timestamp)})]}),t.jsx("p",{className:"mission-event__description",children:U.description}),t.jsx("span",{className:"mission-event__timestamp",children:new Date(U.timestamp).toLocaleString()}),Te&&t.jsxs("div",{className:"mission-event__metadata",children:[t.jsxs("button",{className:"mission-btn mission-btn--ghost mission-btn--sm",onClick:()=>or(U.id),"data-testid":`mission-event-metadata-${U.id}`,children:[Ke?"Hide":"Show"," metadata"]}),Ke&&t.jsx("pre",{className:"mission-event__metadata-content",children:JSON.stringify(U.metadata,null,2)})]})]},U.id)}),t.jsx("div",{ref:Dt})]})]})]}):null,ri=U=>{nt(U),Ve(!0)},vi=()=>{xt.current=Ie??null,nt(void 0),Ve(!1)},lr=async U=>{try{await pC(U,r),dt(Te=>Te.filter(Ke=>Ke.id!==U))}catch(Te){if(Te instanceof sc&&Te.status===409){a("Draft is open in another tab","error");return}if(Te instanceof sc&&Te.status===404){dt(Ke=>Ke.filter(kt=>kt.id!==U));return}a(Me(Te)||"Failed to discard draft","error");return}finally{lt(null)}},$a=()=>Pe.map(U=>{const Te=U.status==="error",Ke=U.status==="generating",kt=nD(U.status);return t.jsxs("div",{className:"mission-list__item mission-list__item--interview",role:"button",tabIndex:0,"aria-label":`Resume interview ${U.title||"Mission interview"}`,onClick:()=>ri(U.id),onKeyDown:wn=>{if(wn.currentTarget===wn.target){if(wn.key==="Enter"){ri(U.id);return}wn.key===" "&&(wn.preventDefault(),ri(U.id))}},children:[t.jsxs("div",{className:"mission-list__item-content",children:[t.jsxs("div",{className:"mission-list__item-header",children:[t.jsx(cs,{size:16,className:"mission-list__item-icon"}),t.jsx("span",{className:"mission-list__item-title",children:U.title||"Mission interview"})]}),t.jsx("div",{className:"mission-list__item-tags",children:t.jsx("span",{className:`mission-status-badge mission-status-badge--sm mission-interview-status mission-interview-status--${U.status}`,children:tD(U.status)})}),t.jsx("p",{className:"mission-list__item-description",children:Ke?"Generating mission hierarchy from interview context.":Te?"Interview hit an error. Retry from this list item.":"Interview is waiting for your next response."})]}),t.jsxs("div",{className:"mission-list__item-actions mission-list__resume-actions",onClick:wn=>wn.stopPropagation(),children:[t.jsxs("button",{className:"mission-btn mission-btn--ghost mission-btn--sm",onClick:()=>ri(U.id),title:kt,"aria-label":kt,disabled:Ke,children:[Ke?t.jsx(_t,{size:14,className:"spinner"}):Te?t.jsx(us,{size:14}):t.jsx(cs,{size:14}),t.jsx("span",{children:Ke?"Generating…":Te?"Retry":"Resume"})]}),t.jsxs("button",{className:"mission-btn mission-btn--danger mission-btn--sm",onClick:()=>lt({type:"interview_draft",id:U.id}),title:"Discard draft","aria-label":"Discard draft",children:[t.jsx(zn,{size:14}),t.jsx("span",{children:"Discard"})]})]})]},U.id)}),cr=(U,Te)=>U.map(Ke=>{const kt=Ke,wn=g?.id===kt.id,we=xo[kt.status]||{bg:"",text:""},ht=kt.summary,Oe=se.get(kt.id),tt=aD(Oe),Lt=!!(ht&&(ht.totalMilestones>0||ht.totalFeatures>0)),Sn=Oe?.totalTasks??0,qs=Oe?.tasksCompleted??0,wi=Oe?.tasksFailed??0,ps=Oe?.estimatedCompletionPercent??ht?.progressPercent??0,ns=Lt||Sn>0||wi>0||!!Oe?.lastActivityAt,hn=Te?.interviewStyle===!0;return t.jsxs("div",{className:`mission-list__item ${wn?"mission-list__item--selected":""} ${hn?"mission-list__item--interview":""}`,role:"button",tabIndex:0,"aria-label":`Open mission ${kt.title}`,"aria-pressed":wn,onClick:()=>Ji(Ke),onKeyDown:fs=>{if(fs.currentTarget===fs.target){if(fs.key==="Enter"){Ji(Ke);return}fs.key===" "&&(fs.preventDefault(),Ji(Ke))}},children:[t.jsxs("div",{className:"mission-list__item-content",children:[t.jsxs("div",{className:"mission-list__item-header",children:[t.jsx(Ss,{size:16,className:"mission-list__item-icon"}),t.jsx("span",{className:"mission-list__item-title",children:kt.title})]}),t.jsxs("div",{className:"mission-list__item-tags",children:[Ke.autopilotEnabled&&t.jsx("span",{title:"Autopilot enabled",children:t.jsx(rs,{size:12,className:"mission-list__item-autopilot-icon"})}),t.jsx("span",{className:`mission-health-badge mission-health-badge--${tt}`,"data-testid":`mission-health-badge-${kt.id}`,"aria-label":`Mission health: ${tt}`}),t.jsx("span",{className:"mission-status-badge mission-status-badge--sm",style:{backgroundColor:we.bg,color:we.text},children:kt.status}),hn&&t.jsx("span",{className:"mission-status-badge mission-status-badge--sm mission-interview-status mission-interview-status--awaiting_input",children:"Interview in progress"})]}),hn?t.jsx("p",{className:"mission-list__item-description",children:"Mission interview is still in progress. Open this mission to continue planning."}):kt.description?t.jsx("p",{className:"mission-list__item-description",children:kt.description}):null,ns&&t.jsxs("div",{className:"mission-list__item-summary",children:[Lt&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:"mission-list__item-stat",children:[ht.completedMilestones,"/",ht.totalMilestones," milestones"]}),t.jsxs("span",{className:"mission-list__item-stat",children:[ht.completedFeatures,"/",ht.totalFeatures," features"]})]}),t.jsxs("span",{className:"mission-list__item-stat","data-testid":`mission-task-stats-${kt.id}`,children:[qs,"/",Sn," tasks"]}),wi>0&&t.jsxs("button",{className:"mission-list__item-failed",onClick:fs=>{fs.stopPropagation(),Ji(Ke)},"data-testid":`mission-failed-${kt.id}`,title:"View mission failures",children:[wi," failed"]}),t.jsx("div",{className:`mission-list__item-progress mission-list__item-progress--${tt}`,children:t.jsx("div",{className:"mission-list__item-progress-bar",style:{width:`${ps}%`}})})]}),ns&&t.jsx("div",{className:"mission-list__item-activity",children:t.jsxs("span",{className:"mission-relative-time","data-testid":`mission-last-activity-${kt.id}`,children:["Activity ",hc(Oe?.lastActivityAt)]})})]}),t.jsxs("div",{className:"mission-list__item-actions",onClick:fs=>fs.stopPropagation(),children:[kt.status==="active"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>Ra(kt.id),title:"Stop mission",children:t.jsx(Oi,{size:14})}),kt.status==="blocked"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>ts(kt.id),title:"Resume mission",children:t.jsx(is,{size:14})}),kt.status==="planning"&&t.jsx("button",{className:"mission-icon-btn mission-icon-btn--success",onClick:()=>Ri(kt.id),title:"Start mission",children:t.jsx(is,{size:14})}),t.jsx("button",{className:"mission-icon-btn",onClick:()=>ms(Ke),title:"Edit mission",children:t.jsx(Fs,{size:14})}),t.jsx("button",{className:"mission-icon-btn mission-icon-btn--danger",onClick:()=>lt({type:"mission",id:kt.id}),title:"Delete mission",children:t.jsx(zn,{size:14})})]})]},kt.id)}),yi=({hideBottomButtons:U=!1}={})=>{const Te=f.filter(we=>we.interviewState==="in_progress"),Ke=f.filter(we=>we.interviewState!=="in_progress"),kt=S&&f.length>0&&!A,wn=!U&&!kt;return t.jsxs("div",{className:"mission-list",children:[A&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:T.title,onChange:we=>F({...T,title:we.target.value}),onKeyDown:ma,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:T.description,onChange:we=>F({...T,description:we.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:as,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Create"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:vs,children:"Cancel"})]})]}),kt&&t.jsx("div",{className:"mission-list__top-action",children:t.jsxs("button",{className:"btn btn-sm btn-task-create mission-list__primary-cta",onClick:()=>Ve(!0),children:[t.jsx(cs,{size:14}),"Plan New Mission"]})}),Pe.length>0&&t.jsxs("div",{className:"mission-list__drafts-group",children:[t.jsxs("div",{className:"mission-list__drafts-header",children:[t.jsx(cs,{size:16,className:"mission-list__item-icon"}),t.jsx("span",{children:"Drafts"}),t.jsxs("span",{children:["(",Pe.length,")"]})]}),$a()]}),cr(Te,{interviewStyle:!0}),cr(Ke),H&&t.jsxs("div",{className:"mission-form-card",children:[t.jsx("input",{type:"text",placeholder:"Mission title",value:T.title,onChange:we=>F({...T,title:we.target.value}),onKeyDown:ma,autoFocus:!0}),t.jsx("textarea",{placeholder:"Description (optional)",value:T.description,onChange:we=>F({...T,description:we.target.value}),rows:2}),t.jsxs("div",{className:"mission-form-card__row",children:[t.jsxs("select",{value:T.status,onChange:we=>F({...T,status:we.target.value}),children:[t.jsx("option",{value:"planning",children:"Planning"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"blocked",children:"Blocked"}),t.jsx("option",{value:"complete",children:"Complete"}),t.jsx("option",{value:"archived",children:"Archived"})]}),t.jsxs("label",{className:"mission-checkbox",children:[t.jsx("input",{type:"checkbox",checked:T.autopilotEnabled,onChange:we=>F({...T,autopilotEnabled:we.target.checked})}),t.jsx(rs,{size:12})," Autopilot"]})]}),t.jsxs("div",{className:"mission-form-card__actions",children:[t.jsxs("button",{className:"mission-btn mission-btn--primary",onClick:as,disabled:W,children:[W?t.jsx(_t,{size:14,className:"spinner"}):t.jsx(bs,{size:14}),"Update"]}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:vs,children:"Cancel"})]})]}),f.length===0&&Pe.length===0&&Te.length===0&&!A&&t.jsxs("div",{className:"mission-manager__empty mission-manager__empty--large mission-manager__empty--mission",children:[t.jsx(Ss,{size:32}),t.jsx("h3",{className:"mission-manager__empty-title",children:"No missions yet"}),t.jsx("p",{className:"mission-manager__empty-body",children:"Missions are large initiatives that bundle milestones, slices, and features into a single plan. Plan a mission to break down a goal end-to-end and let agents work through it autopilot-style."}),t.jsxs("button",{className:"btn btn-sm btn-primary mission-manager__empty-cta",onClick:()=>Ve(!0),children:[t.jsx(cs,{size:14}),"Plan New Mission"]})]}),!A&&t.jsx("div",{className:"mission-list__footer",children:wn&&t.jsx("div",{className:"mission-list__footer-actions",children:t.jsxs("button",{className:"mission-add-btn",onClick:()=>Ve(!0),children:[t.jsx(cs,{size:16}),"Plan New Mission"]})})})]})},dr=()=>{const U=ke?.type==="interview_draft";return t.jsx("div",{className:"mission-confirm-panel mission-confirm-panel--danger",children:t.jsxs("div",{className:"mission-confirm-panel__content",children:[t.jsx("p",{children:U?"Discard this interview draft? This removes the saved draft and cannot be undone.":`Delete this ${ke?.type}? This cannot be undone.`}),t.jsxs("div",{className:"mission-confirm-panel__actions",children:[t.jsx("button",{className:"mission-btn mission-btn--danger",onClick:async()=>{ke&&(ke.type==="mission"?await Tn(ke.id):ke.type==="milestone"?await Ee(ke.id):ke.type==="slice"?await Ye(ke.id):ke.type==="feature"?await Fe(ke.id):ke.type==="interview_draft"&&await lr(ke.id))},children:U?"Discard":"Delete"}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:()=>lt(null),children:"Cancel"})]})]})})},ur=()=>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:_e,onChange:U=>Le(U.target.value),autoFocus:!0}),l.length>0&&t.jsxs("div",{className:"mission-task-suggestions",children:[t.jsx("small",{children:"Or select:"}),t.jsx("div",{className:"mission-task-suggestions__list",children:l.slice(0,5).map(U=>t.jsxs("button",{className:"mission-task-suggestions__item",onClick:()=>Le(U.id),children:[U.id,": ",U.title||"Untitled"]},U.id))})]}),t.jsxs("div",{className:"mission-confirm-panel__actions",children:[t.jsx("button",{className:"mission-btn mission-btn--primary",onClick:qe,children:"Link"}),t.jsx("button",{className:"mission-btn mission-btn--ghost",onClick:()=>{le(null),Le("")},children:"Cancel"})]})]})}),Da=t.jsxs("div",{ref:no,className:`mission-manager mission-manager--desktop${n?" mission-manager--inline":""}`,role:n?void 0:"dialog","aria-modal":n?void 0:!0,"aria-label":n?void 0:"Mission Manager","data-testid":"mission-manager-dialog",children:[t.jsxs("div",{className:`mission-manager__header${n?" mission-manager__header--inline":""}`,children:[t.jsxs("div",{className:"mission-manager__header-title",children:[g&&t.jsx("button",{className:"mission-manager__back-btn",onClick:ca,title:"Back to missions","aria-label":"Back to missions list","data-testid":"mission-back-btn",children:t.jsx(wc,{size:18})}),t.jsx(Ss,{size:18,className:"mission-manager__header-icon"}),t.jsxs("h2",{className:"mission-manager__title","data-testid":"mission-header-title",children:[t.jsx("span",{className:"mission-manager__title-text mission-manager__title-text--desktop",children:"Missions"}),t.jsx("span",{className:"mission-manager__title-text mission-manager__title-text--mobile",children:g?g.title:"Missions"})]})]}),!n&&t.jsx("button",{className:"modal-close",onClick:s,title:"Close","aria-label":"Close Mission Manager","data-testid":"mission-close-btn",children:t.jsx(kn,{size:18})})]}),S?t.jsxs("div",{className:"mission-manager__body mission-manager__body--stacked",children:[v?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(_t,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading missions..."})]}):y?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(_t,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading mission details..."})]}):g?xi():yi(),ke&&dr(),De&&ur()]}):t.jsxs("div",{className:"mission-manager__split",children:[t.jsxs("aside",{className:"mission-manager__sidebar","data-testid":"mission-sidebar","aria-label":"Mission list",style:S?void 0:{width:`${x}px`},children:[t.jsx("div",{className:"mission-manager__sidebar-list",children:v?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(_t,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading missions..."})]}):yi({hideBottomButtons:!0})}),t.jsx("div",{className:"mission-manager__sidebar-footer","data-testid":"mission-sidebar-footer",children:t.jsxs("button",{className:"btn btn-primary mission-manager__sidebar-cta",onClick:()=>Ve(!0),title:"Plan New Mission","aria-label":"Plan New Mission",children:[t.jsx(cs,{size:14}),"Plan New Mission"]})})]}),!S&&t.jsx("div",{className:"mission-manager__sidebar-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Tl,"aria-valuemax":Pl,"aria-valuenow":x,"aria-label":"Resize mission sidebar",tabIndex:0,onPointerDown:z,onKeyDown:_}),t.jsxs("div",{className:"mission-manager__detail-pane",children:[y?t.jsxs("div",{className:"mission-manager__loading",children:[t.jsx(_t,{size:24,className:"spinner"}),t.jsx("span",{children:"Loading mission details..."})]}):g?xi():t.jsxs("div",{className:"mission-manager__detail-pane-empty","data-testid":"mission-empty-detail",children:[t.jsx(Ss,{size:32}),t.jsx("span",{children:"Select a mission to view details"})]}),ke&&dr(),De&&ur()]})]})]}),Yi=t.jsx(B4,{isOpen:mt,onClose:vi,onMissionCreated:()=>{qt(),a("Mission created from AI interview","success")},projectId:r,resumeSessionId:Ie}),mr=Qe?t.jsx(Y4,{isOpen:!0,onClose:()=>ot(null),onApplied:()=>{ot(null),g&&Ot(g.id)},targetType:Qe.type,targetId:Qe.id,targetTitle:Qe.title,missionContext:g?.title,projectId:r,resumeSessionId:Qe.resumeSessionId}):null;return n?t.jsxs(t.Fragment,{children:[Da,Yi,mr]}):t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"mission-manager-overlay open",onClick:U=>U.target===U.currentTarget&&s(),"data-testid":"mission-manager-overlay",role:"dialog","aria-modal":"true",children:Da}),Yi,mr]})}const mD={pre:({children:e,...n})=>t.jsx("pre",{...n,className:"mailbox-markdown-pre",children:e}),table:({children:e,...n})=>t.jsx("table",{...n,className:"mailbox-markdown-table",children:e}),a:({children:e,...n})=>t.jsx("a",{...n,target:"_blank",rel:"noopener noreferrer",children:e})},sg=i.memo(function({content:n,className:s,testId:a}){const r=s?`mailbox-markdown ${s}`:"mailbox-markdown";return t.jsx("div",{className:r,"data-testid":a,children:t.jsx(ei,{remarkPlugins:[ti],components:mD,children:n})})}),Ol=2e3;function ig({recipient:e,replyContext:n,agents:s=[],projectId:a,onSend:r,onCancel:o,addToast:l,isLoadingAgents:c=!1}){const[d,u]=i.useState(e?.id??""),[h,m]=i.useState(e?.type??"agent"),[f,p]=i.useState(""),[g,w]=i.useState(!1),[v,b]=i.useState(!1),[y,N]=i.useState(null),S=i.useRef(null),C=i.useMemo(()=>s.find(H=>H.id===d),[s,d]),x=i.useMemo(()=>e?s.find(H=>H.id===e.id):void 0,[s,e]),k=h==="agent",R=k&&C?.runtimeConfig?.messageResponseMode==="immediate",z=k&&(g||R),_=d.trim()!==""&&f.trim().length>0&&f.length<=Ol,A=i.useCallback(async()=>{if(!(!_||v)){b(!0),N(null);try{const H=h==="agent"?"user-to-agent":"system",M=n?{replyTo:{messageId:n.messageId}}:void 0,T=z;await OC({toId:d.trim(),toType:h,content:f.trim(),type:H,...M?{metadata:M}:{},...T?{wakeImmediately:!0}:{}},a),r()}catch(H){const M=Me(H)||"Failed to send message";N(M),l?.(M,"error")}finally{b(!1)}}},[_,v,d,h,f,z,n,a,r,l]),Q=i.useCallback(H=>{u(H),m("agent")},[]);return i.useEffect(()=>{n&&S.current?.focus()},[n]),i.useEffect(()=>{if(!n||typeof window>"u"||window.visualViewport==null)return;const H=()=>{S.current?.scrollIntoView({block:"center",behavior:"auto"})};return window.visualViewport.addEventListener("resize",H),()=>{window.visualViewport?.removeEventListener("resize",H)}},[n]),t.jsxs("div",{className:"message-composer","data-testid":"message-composer",children:[t.jsxs("div",{className:"message-composer-header",children:[t.jsx("span",{children:n?"Reply":"New Message"}),t.jsx("button",{className:"btn-icon",onClick:o,"aria-label":"Cancel","data-testid":"message-composer-cancel",children:t.jsx(kn,{size:16})})]}),t.jsxs("div",{className:"message-composer-body",children:[!e&&t.jsxs("div",{className:"message-composer-field",children:[t.jsx("label",{className:"message-composer-label",htmlFor:"message-recipient",children:"To:"}),t.jsxs("select",{id:"message-recipient",className:"message-composer-select",value:d,onChange:H=>Q(H.target.value),disabled:c||s.length===0,"data-testid":"message-composer-recipient",children:[t.jsx("option",{value:"",children:c?"Loading agents…":s.length===0?"No agents available":"Select agent…"}),s.map(H=>t.jsx("option",{value:H.id,children:H.name||H.id},H.id))]})]}),e&&t.jsxs("div",{className:"message-composer-field",children:[t.jsx("span",{className:"message-composer-label",children:"To:"}),t.jsxs("span",{className:"message-composer-recipient-fixed",children:[t.jsx(Qn,{size:14}),x?.name||e.id]})]}),n&&t.jsxs("div",{className:"message-composer-field","data-testid":"message-composer-reply-context",children:[t.jsx("span",{className:"message-composer-label",children:"Replying to:"}),t.jsx("span",{className:"message-composer-recipient-fixed",children:n.preview?.trim()?n.preview:`Message ${n.messageId}`})]}),t.jsxs("div",{className:"message-composer-field message-composer-field--content",children:[t.jsx("label",{className:"message-composer-label",htmlFor:"message-content",children:"Message:"}),t.jsx("textarea",{id:"message-content",ref:S,className:"message-composer-textarea",placeholder:"Type your message…",value:f,onChange:H=>p(H.target.value),maxLength:Ol,rows:4,"data-testid":"message-composer-content"}),t.jsx("div",{className:"message-composer-charcount","data-testid":"message-composer-charcount",children:t.jsxs("span",{className:f.length>Ol?"over-limit":"",children:[f.length,"/",Ol]})})]}),k&&t.jsx("div",{className:"message-composer-field message-composer-field--wake",children:t.jsxs("label",{className:"message-composer-wake-label",children:[t.jsx("input",{type:"checkbox",checked:z,disabled:R,onChange:H=>w(H.target.checked),"data-testid":"message-composer-wake"}),t.jsxs("span",{children:["Wake agent immediately",t.jsx("span",{className:"message-composer-wake-hint","data-testid":"message-composer-wake-hint",children:R?"(agent is already set to immediate response mode)":"(one-off override for this message only)"})]})]})}),y&&t.jsxs("div",{className:"message-composer-error","data-testid":"message-composer-error",children:[t.jsx(Us,{size:14}),t.jsx("span",{children:y})]})]}),t.jsxs("div",{className:"message-composer-footer",children:[t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:o,"data-testid":"message-composer-cancel-btn",children:"Cancel"}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:A,disabled:!_||v,"data-testid":"message-composer-send",children:v?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:14,className:"spin"}),t.jsx("span",{children:"Sending…"})]}):t.jsxs(t.Fragment,{children:[t.jsx(Ua,{size:14}),t.jsx("span",{children:"Send"})]})})]})]})}const As="__all_agents__",pc=280,Hu=.65,Yd=16,ag=320;function qu(e){return Math.max(pc,e*Hu)}function Qd(e,n){const s=qu(n);return Math.min(Math.max(e,pc),s)}function rg(e){try{const n=Wn("kb-dashboard-mailbox-sidebar-width",e);if(!n)return ag;const s=Number(n);if(Number.isFinite(s)&&s>0)return s}catch{}return ag}function Zi(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(a/36e5),l=Math.floor(a/864e5);return r<1?"Just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function hD(e,n,s){if(n==="user")return e==="dashboard"?"You":`User: ${e}`;if(n==="agent"){const a=s?.get(e)?.trim();return a?a===e?`Agent: ${e}`:`Agent: ${a} (${e})`:`Agent: ${e}`}return"System"}function pD(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 og(e,n=80){return e.length<=n?e:`${e.slice(0,n)}…`}function lg(){if(typeof window>"u")return null;const n=new URLSearchParams(window.location.search).get("mailbox-message");return n||(/^#message-(.+)$/.exec(window.location.hash)?.[1]??null)}function vo(e){return`mailbox-list-message-${e}`}function Xd(e){return`mailbox-detail-message-${e}`}function fD(e,n){const s=[...e];s.some(o=>o.id===n.id)||s.push(n);const a=new Set([n.id]);let r=!0;for(;r;){r=!1;for(const o of s){const l=o.metadata?.replyTo?.messageId;a.has(o.id)&&l&&!a.has(l)&&(a.add(l),r=!0),l&&a.has(l)&&!a.has(o.id)&&(a.add(o.id),r=!0)}}return s.filter(o=>a.has(o.id)).sort((o,l)=>new Date(o.createdAt).getTime()-new Date(l.createdAt).getTime())}function gD({projectId:e,addToast:n,onUnreadCountChange:s}){const[a,r]=i.useState("inbox"),[o,l]=i.useState(null),[c,d]=i.useState(null),[u,h]=i.useState(0),[m,f]=i.useState(!1),[p,g]=i.useState(null),[w,v]=i.useState([]),[b,y]=i.useState(!1),[N,S]=i.useState(null),[C,x]=i.useState(null),[k,R]=i.useState(As),[z,_]=i.useState("inbox"),[A,Q]=i.useState(null),[H,M]=i.useState(null),[T,F]=i.useState([]),[W,oe]=i.useState("pending"),[D,E]=i.useState([]),[P,$]=i.useState(0),[j,q]=i.useState(null),[de,be]=i.useState(""),[Ce,Ae]=i.useState(!1),ae=i.useMemo(()=>new Map(T.map(J=>[J.id,J.name??""])),[T]),X=i.useCallback((J,ke)=>hD(J,ke,ae),[ae]),ie=si()==="mobile",ye=!ie,[ee,L]=i.useState(()=>rg(e)),Y=i.useRef(null),{keyboardOverlap:me,viewportHeight:B,viewportOffsetTop:xe,keyboardOpen:Ne}=oa({enabled:ie}),te=i.useMemo(()=>{if(Ne)return{"--keyboard-overlap":`${me}px`,"--vv-offset-top":`${xe}px`,...B!=null?{"--vv-height":`${B}px`}:{}}},[Ne,me,B,xe]);i.useEffect(()=>{L(rg(e))},[e]),i.useEffect(()=>{if(!ye)return;const J=Y.current?.clientWidth;J&&L(ke=>Qd(ke,J))},[ye]),i.useEffect(()=>{if(ye)try{ss("kb-dashboard-mailbox-sidebar-width",String(ee),e)}catch{}},[ye,e,ee]);const Be=i.useCallback(J=>{if(!ye)return;J.preventDefault();const ke=Y.current;if(!ke)return;const lt=ke.getBoundingClientRect(),ve=Ue=>{const fe=Ue.clientX-lt.left;L(Qd(fe,lt.width))},st=()=>{window.removeEventListener("mousemove",ve),window.removeEventListener("mouseup",st)};window.addEventListener("mousemove",ve),window.addEventListener("mouseup",st)},[ye]),$e=i.useCallback(J=>{if(!ye)return;const ke=Y.current?.clientWidth??0,lt=ee/Hu+Yd,ve=Math.max(ke,lt),st=qu(ve);if(J.key==="ArrowLeft"||J.key==="ArrowRight"){J.preventDefault();const Ue=J.key==="ArrowLeft"?-Yd:Yd;L(fe=>Qd(fe+Ue,ve));return}if(J.key==="Home"){J.preventDefault(),L(pc);return}J.key==="End"&&(J.preventDefault(),L(st))},[ye,ee]),ct=i.useCallback(async()=>{f(!0);try{const J=await DC({limit:50},e);l(J),h(J.unreadCount),s?.(J.unreadCount)}catch{}finally{f(!1)}},[e,s]),De=i.useCallback(async()=>{f(!0);try{const J=await LC({limit:50},e);d(J)}catch{}finally{f(!1)}},[e]),le=i.useCallback(async J=>{f(!0);try{const ke=await HC(J,e);Q(ke)}catch{}finally{f(!1)}},[e]),_e=i.useCallback(async()=>{f(!0);try{const J=await qC(e);M(J)}catch{}finally{f(!1)}},[e]),Le=i.useCallback(async()=>{try{const J=await Yr(void 0,e);F(J)}catch{}},[e]),mt=i.useCallback(async()=>{try{const J=await ax(e);h(J.unreadCount),$(J.pendingApprovalCount??0),s?.(J.unreadCount)}catch{}},[e,s]),Ve=i.useCallback(async J=>{f(!0);try{const ke=await xl({status:J==="pending"?"pending":void 0,limit:100},e);if(J==="pending")E(ke.requests);else{const[lt,ve,st]=await Promise.all([xl({status:"approved",limit:100},e),xl({status:"denied",limit:100},e),xl({status:"completed",limit:100},e)]);E([...lt.requests,...ve.requests,...st.requests].sort((Ue,fe)=>fe.updatedAt.localeCompare(Ue.updatedAt)))}$(ke.pendingCount)}catch{}finally{f(!1)}},[e]);i.useEffect(()=>{a==="inbox"?ct():a==="outbox"?De():a==="agents"?Le():a==="approvals"&&Ve(W)},[a,ct,De,Le,Ve,W]),i.useEffect(()=>{if(k===As){_e();return}le(k)},[k,le,_e]),i.useEffect(()=>{mt()},[mt]),i.useEffect(()=>{Le()},[Le]),i.useEffect(()=>{if(typeof EventSource>"u")return;const J=e?`?projectId=${encodeURIComponent(e)}`:"",ke=()=>{mt(),a==="inbox"?ct():a==="outbox"?De():a==="approvals"&&Ve(W),k===As?_e():k&&le(k)};return pi(`/api/events${J}`,{events:{"message:sent":ke,"message:received":ke,"message:read":ke,"message:deleted":ke,"approval:requested":ke,"approval:updated":ke,"approval:decided":ke}})},[e,a,k,mt,ct,De,le,_e,Ve,W]);const ge=i.useCallback(async J=>{if(g(J),!J.read&&a==="inbox")try{const ke=await FC(J.id,e);ke&&l(ve=>ve&&{...ve,messages:ve.messages.map(st=>st.id===ke.id?ke:st),unreadCount:Math.max(0,ve.unreadCount-1)});const lt=Math.max(0,u-1);h(lt),s?.(lt)}catch{}try{const ke=await UC(J.fromId,J.fromType,e);v(ke)}catch{v([J])}},[e,u,s,a]);i.useEffect(()=>{const J=lg();if(!J)return;const ke=[...o?.messages??[],...c?.messages??[],...A?.inbox??[],...A?.outbox??[],...H?.messages??[],...w].find(lt=>lt.id===J);ke&&ge(ke)},[o,c,A,H,w,ge]),i.useEffect(()=>{const J=lg();if(!J)return;const ke=document.getElementById(Xd(J));if(!ke)return;ke.scrollIntoView({behavior:"smooth",block:"center"}),ke.classList.add("mailbox-message-highlight");const lt=window.setTimeout(()=>{ke.classList.remove("mailbox-message-highlight")},2e3);return()=>{window.clearTimeout(lt)}},[p,w]);const he=i.useCallback(()=>{g(null),v([])},[]),Pe=i.useCallback(async()=>{try{const J=await zC(e);h(0),s?.(0),l(ke=>ke&&{...ke,messages:ke.messages.map(lt=>({...lt,read:!0})),unreadCount:0}),n?.(`Marked ${J.markedAsRead} messages as read`,"success")}catch{n?.("Failed to mark messages as read","error")}},[e,n,s]),dt=i.useCallback(async J=>{try{await BC(J,e),g(null),v([]),a==="inbox"?ct():a==="outbox"?De():k===As?_e():k&&le(k),n?.("Message deleted","success")}catch{n?.("Failed to delete message","error")}},[e,a,k,ct,De,le,_e,n]),jt=i.useCallback(J=>{S({id:J.fromId,type:J.fromType}),x({messageId:J.id,preview:og(J.content,120)}),y(!0)},[]),nt=i.useCallback(()=>{y(!1),S(null),x(null),n?.("Message sent","success"),a==="outbox"?De():a==="agents"&&k===As?_e():a==="agents"&&k&&le(k),mt()},[a,De,k,le,_e,n,mt]),xt=i.useCallback(()=>{S(a==="agents"&&k&&k!==As?{id:k,type:"agent"}:null),x(null),y(!0)},[a,k]),Ie=i.useCallback(()=>{y(!1),S(null),x(null)},[]),Qe=i.useCallback(async J=>{try{const ke=await Ih(J.id,e);q(ke),be("")}catch{n?.("Failed to load approval request","error")}},[e,n]),ot=i.useCallback(async J=>{if(!(!j||Ce)){Ae(J);try{await VC(j.id,{decision:J,comment:de||void 0},e),await Ve(W);const ke=await Ih(j.id,e);q(ke),be(""),n?.(`Request ${J==="approve"?"approved":"denied"}`,"success")}catch{n?.("Failed to submit decision","error")}finally{Ae(!1)}}},[j,Ce,de,e,Ve,W,n]),Tt=()=>{if(!p||b)return null;const J=fD(w,p);return t.jsxs("div",{className:"mailbox-message-detail","data-testid":"mailbox-message-detail",id:Xd(p.id),children:[t.jsxs("div",{className:"mailbox-message-detail-header",children:[ie&&t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:he,"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:pD(p.type)}),t.jsx("span",{className:"mailbox-message-time",children:Zi(p.createdAt)})]}),t.jsxs("div",{className:"mailbox-message-detail-actions",children:[p.fromType==="agent"&&t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:()=>jt(p),"data-testid":"mailbox-reply",children:[t.jsx(ta,{size:14}),t.jsx("span",{children:"Reply"})]}),t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:()=>dt(p.id),"data-testid":"mailbox-delete",children:[t.jsx(zn,{size:14}),t.jsx("span",{children:"Delete"})]})]})]}),t.jsxs("div",{className:"mailbox-message-participants",children:[t.jsxs("div",{className:"mailbox-participant",children:[t.jsx("span",{className:"mailbox-participant-label",children:"From:"}),t.jsxs("span",{className:"mailbox-participant-value",children:[p.fromType==="agent"?t.jsx(Qn,{size:14}):t.jsx(La,{size:14}),X(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(Qn,{size:14}):t.jsx(La,{size:14}),X(p.toId,p.toType)]})]})]}),J.length>1&&t.jsxs("div",{className:"mailbox-conversation","data-testid":"mailbox-conversation",children:[t.jsx("div",{className:"mailbox-conversation-label",children:"Conversation"}),J.map(ke=>{const lt=ke.metadata?.replyTo?.messageId,ve=lt?J.find(st=>st.id===lt):void 0;return t.jsxs("div",{id:Xd(ke.id),className:`mailbox-conversation-msg ${ke.id===p.id?"current":""}`,children:[t.jsxs("div",{className:"mailbox-conversation-msg-header",children:[t.jsx("span",{children:X(ke.fromId,ke.fromType)}),t.jsx("span",{className:"mailbox-message-time",children:Zi(ke.createdAt)})]}),lt&&t.jsxs("div",{className:"mailbox-reply-context-static","data-testid":`mailbox-reply-context-${ke.id}`,children:["↪ Replying to ",ve?og(ve.content,60):`message ${lt}`]}),t.jsx(sg,{content:ke.content,className:"mailbox-conversation-msg-body"})]},ke.id)})]}),J.length<=1&&t.jsxs(t.Fragment,{children:[p.metadata?.replyTo?.messageId&&t.jsxs("div",{className:"mailbox-reply-context-static","data-testid":"mailbox-selected-reply-context",children:["↪ Replying to message ",p.metadata.replyTo.messageId]}),t.jsx(sg,{content:p.content,className:"mailbox-message-body",testId:"mailbox-message-body"})]})]})},Mt=()=>t.jsxs(t.Fragment,{children:[a==="inbox"&&t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-inbox-list",children:[m&&!o&&t.jsx(Fl,{}),o&&o.messages.length===0&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-inbox-empty",children:[t.jsx(ba,{size:32}),t.jsx("p",{children:"No messages in your inbox"})]}),o?.messages.map(J=>t.jsxs("div",{id:vo(J.id),className:`mailbox-item ${J.read?"":"unread"}`,onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.fromType==="agent"?t.jsx(Qn,{size:16}):t.jsx(La,{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:X(J.fromId,J.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:Zi(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]}),!J.read&&t.jsx("div",{className:"mailbox-item-unread-dot","data-testid":`mailbox-unread-dot-${J.id}`})]},J.id))]}),a==="outbox"&&t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-outbox-list",children:[m&&!c&&t.jsx(Fl,{}),c&&c.messages.length===0&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-outbox-empty",children:[t.jsx(Ua,{size:32}),t.jsx("p",{children:"No sent messages"})]}),c?.messages.map(J=>t.jsxs("div",{id:vo(J.id),className:"mailbox-item",onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.toType==="agent"?t.jsx(Qn,{size:16}):t.jsx(La,{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: ",X(J.toId,J.toType)]}),t.jsx("span",{className:"mailbox-item-time",children:Zi(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id))]}),a==="approvals"&&t.jsxs("div",{className:"mailbox-approvals","data-testid":"mailbox-approvals",children:[t.jsxs("div",{className:"mailbox-approval-filters","data-testid":"mailbox-approval-filters",children:[t.jsx("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${W==="pending"?"active":""}`,onClick:()=>{oe("pending"),q(null)},"data-testid":"mailbox-approval-filter-pending",children:"Pending"}),t.jsx("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${W==="history"?"active":""}`,onClick:()=>{oe("history"),q(null)},"data-testid":"mailbox-approval-filter-history",children:"History"})]}),t.jsxs("div",{className:"mailbox-list","data-testid":"mailbox-approval-list",children:[D.length===0&&!m&&t.jsxs("div",{className:"mailbox-empty","data-testid":"mailbox-approval-empty",children:[t.jsx(ba,{size:32}),t.jsx("p",{children:W==="pending"?"No pending approvals":"No historical approvals"})]}),D.map(J=>t.jsxs("div",{className:"mailbox-item mailbox-approval-item",onClick:()=>void Qe(J),"data-testid":`mailbox-approval-item-${J.id}`,children:[t.jsx("div",{className:`status-dot mailbox-approval-status-dot mailbox-approval-status-dot--${J.status}`}),t.jsxs("div",{className:"mailbox-item-content",children:[t.jsxs("div",{className:"mailbox-item-header",children:[t.jsxs("span",{className:"mailbox-item-from",children:[J.agentId," · ",J.actionCategory]}),t.jsx("span",{className:"mailbox-item-time",children:Zi(J.createdAt)})]}),t.jsx("div",{className:"mailbox-item-preview",children:J.actionSummary})]}),t.jsx("span",{className:`mailbox-approval-status mailbox-approval-status--${J.status}`,children:J.status})]},J.id))]})]}),a==="agents"&&t.jsx("div",{className:"mailbox-agents","data-testid":"mailbox-agents",children:T.length===0?t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(Qn,{size:32}),t.jsx("p",{children:"No agents found"})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"mailbox-agents-header",children:[t.jsx("div",{className:"mailbox-agents-dropdown",children:t.jsxs("select",{className:"message-composer-select mailbox-agent-select",value:k,onChange:J=>{R(J.target.value),_("inbox")},"data-testid":"mailbox-agent-select",children:[t.jsx("option",{value:As,children:"All agents"}),T.map(J=>t.jsx("option",{value:J.id,children:J.name||J.id},J.id))]})}),t.jsxs("button",{className:"btn btn-sm btn-secondary mailbox-compose-btn",onClick:xt,"data-testid":"mailbox-compose-btn",children:[t.jsx(ta,{size:14}),t.jsx("span",{children:"Compose"})]})]}),k&&k!==As&&t.jsxs("div",{className:"mailbox-agent-subtabs","data-testid":"mailbox-agent-subtabs",children:[t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${z==="inbox"?"active":""}`,onClick:()=>_("inbox"),"data-testid":"mailbox-agent-subtab-inbox",children:[t.jsx(ba,{size:12}),t.jsx("span",{children:"Inbox"}),A&&A.unreadCount>0&&t.jsx("span",{className:"mailbox-tab-badge",children:A.unreadCount})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-agent-subtab ${z==="outbox"?"active":""}`,onClick:()=>_("outbox"),"data-testid":"mailbox-agent-subtab-outbox",children:[t.jsx(Ua,{size:12}),t.jsx("span",{children:"Outbox"})]})]}),t.jsxs("div",{className:"mailbox-agents-content",children:[k===As&&m&&!H&&t.jsx(Fl,{}),k===As&&H&&H.messages.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(ba,{size:32}),t.jsx("p",{children:"No agent-to-agent messages"})]}),k===As&&H&&H.messages.map(J=>t.jsxs("div",{id:vo(J.id),className:`mailbox-item ${J.read?"":"unread"}`,onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.fromType==="agent"?t.jsx(Qn,{size:16}):t.jsx(La,{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:X(J.fromId,J.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:Zi(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-participants","data-testid":`mailbox-item-participants-${J.id}`,children:[t.jsxs("span",{children:["From: ",X(J.fromId,J.fromType)]}),t.jsxs("span",{children:["To: ",X(J.toId,J.toType)]})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id)),k&&k!==As&&m&&!A&&t.jsx(Fl,{}),k&&k!==As&&A&&z==="inbox"&&A.inbox.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(ba,{size:32}),t.jsx("p",{children:"No received messages for this agent"})]}),k&&k!==As&&A&&z==="outbox"&&A.outbox.length===0&&t.jsxs("div",{className:"mailbox-empty",children:[t.jsx(Ua,{size:32}),t.jsx("p",{children:"No sent messages for this agent"})]}),k&&k!==As&&A&&z==="inbox"&&A.inbox.map(J=>t.jsxs("div",{id:vo(J.id),className:`mailbox-item ${J.read?"":"unread"}`,onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.fromType==="agent"?t.jsx(Qn,{size:16}):t.jsx(La,{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:X(J.fromId,J.fromType)}),t.jsx("span",{className:"mailbox-item-time",children:Zi(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id)),k&&k!==As&&A&&z==="outbox"&&A.outbox.map(J=>t.jsxs("div",{id:vo(J.id),className:"mailbox-item",onClick:()=>ge(J),"data-testid":`mailbox-item-${J.id}`,children:[t.jsx("div",{className:"mailbox-item-avatar",children:J.toType==="agent"?t.jsx(Qn,{size:16}):t.jsx(La,{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: ",X(J.toId,J.toType)]}),t.jsx("span",{className:"mailbox-item-time",children:Zi(J.createdAt)})]}),t.jsxs("div",{className:"mailbox-item-preview",children:[J.content.slice(0,80),J.content.length>80?"…":""]})]})]},J.id))]})]})})]}),We=()=>b?t.jsx(ig,{recipient:N,replyContext:C,agents:T,projectId:e,onSend:nt,onCancel:Ie,addToast:n}):p?Tt():a==="approvals"&&j?t.jsxs("div",{className:"mailbox-message-detail mailbox-approval-detail","data-testid":"mailbox-approval-detail",children:[ie&&t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:()=>q(null),"data-testid":"mailbox-approval-back-to-list",children:"← Back"}),t.jsx("div",{className:"mailbox-message-detail-header",children:t.jsxs("div",{className:"mailbox-message-detail-meta",children:[t.jsx("span",{className:"mailbox-message-type",children:j.actionCategory}),t.jsx("span",{className:"mailbox-message-time",children:j.status})]})}),t.jsxs("div",{className:"mailbox-message-body",children:[t.jsx("strong",{children:j.actionSummary}),t.jsxs("p",{children:["Requester: ",j.requester.actorName," (",j.agentId,")"]}),j.taskId&&t.jsxs("p",{children:["Task: ",j.taskId]}),t.jsxs("p",{children:["Requested: ",Zi(j.createdAt)]})]}),t.jsx("div",{className:"mailbox-conversation","data-testid":"mailbox-approval-history",children:j.history.map(J=>t.jsxs("div",{className:"mailbox-conversation-msg",children:[t.jsxs("div",{className:"mailbox-conversation-msg-header",children:[t.jsx("span",{children:J.eventType}),t.jsx("span",{children:J.actor.actorName})]}),J.note&&t.jsx("div",{className:"mailbox-item-preview",children:J.note})]},J.id))}),j.status==="pending"&&t.jsxs("div",{className:"mailbox-approval-decision","data-testid":"mailbox-approval-decision",children:[t.jsx("textarea",{className:"message-composer-textarea mailbox-approval-comment",value:de,onChange:J=>be(J.target.value),placeholder:"Optional comment","data-testid":"mailbox-approval-comment"}),t.jsxs("div",{className:"mailbox-header-actions",children:[t.jsx("button",{className:"btn btn-sm btn-secondary",onClick:()=>void ot("deny"),disabled:Ce!==!1,"data-testid":"mailbox-approval-deny",children:"Deny"}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>void ot("approve"),disabled:Ce!==!1,"data-testid":"mailbox-approval-approve",children:"Approve"})]})]})]}):t.jsxs("div",{className:"mailbox-split-empty","data-testid":"mailbox-split-empty",children:[t.jsx(Wa,{size:24}),t.jsx("p",{children:"Select a message to read"})]});return t.jsxs("div",{className:"mailbox-view",style:te,"data-testid":"mailbox-view",children:[t.jsxs("div",{className:"mailbox-header",children:[t.jsxs("div",{className:"mailbox-title",children:[t.jsx(Wa,{size:18}),t.jsx("span",{children:"Mailbox"}),u>0&&t.jsx("span",{className:"mailbox-unread-badge","data-testid":"mailbox-unread-badge",children:u})]}),t.jsxs("div",{className:"mailbox-header-actions",children:[t.jsxs("button",{className:"btn btn-sm btn-primary",onClick:xt,title:"Compose message","data-testid":"mailbox-header-compose",children:[t.jsx(ta,{size:14}),t.jsx("span",{children:"Compose"})]}),a==="inbox"&&u>0&&t.jsxs("button",{className:"btn btn-sm btn-secondary",onClick:Pe,title:"Mark all as read","data-testid":"mailbox-mark-all-read",children:[t.jsx(eh,{size:14}),t.jsx("span",{children:"Mark all read"})]}),t.jsx("button",{className:"btn-icon",onClick:()=>{a==="inbox"?ct():a==="outbox"?De():a==="approvals"?Ve(W):k===As?_e():k&&le(k)},disabled:m,title:"Refresh","data-testid":"mailbox-refresh",children:m?t.jsx(_t,{size:14,className:"spin"}):t.jsx(us,{size:14})})]})]}),t.jsxs("div",{className:"mailbox-tabs","data-testid":"mailbox-tabs",children:[t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="inbox"?"active":""}`,onClick:()=>{r("inbox"),g(null)},"data-testid":"mailbox-tab-inbox",children:[t.jsx(ba,{size:14}),t.jsx("span",{children:"Inbox"}),u>0&&t.jsx("span",{className:"mailbox-tab-badge",children:u})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="outbox"?"active":""}`,onClick:()=>{r("outbox"),g(null)},"data-testid":"mailbox-tab-outbox",children:[t.jsx(Ua,{size:14}),t.jsx("span",{children:"Outbox"})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="agents"?"active":""}`,onClick:()=>{r("agents"),g(null),q(null)},"data-testid":"mailbox-tab-agents",children:[t.jsx(Qn,{size:14}),t.jsx("span",{children:"Agents"})]}),t.jsxs("button",{className:`btn btn-sm btn-secondary mailbox-tab ${a==="approvals"?"active":""}`,onClick:()=>{r("approvals"),g(null),q(null)},"data-testid":"mailbox-tab-approvals",children:[t.jsx(eh,{size:14}),t.jsx("span",{children:"Approvals"}),P>0&&t.jsx("span",{className:"mailbox-tab-badge","data-testid":"mailbox-approvals-pending-badge",children:P})]})]}),t.jsx("div",{className:"mailbox-content","data-testid":"mailbox-content",children:ye?t.jsxs("div",{className:"mailbox-split-layout","data-testid":"mailbox-split-layout",ref:Y,children:[t.jsx("div",{className:"mailbox-split-list-pane","data-testid":"mailbox-split-list-pane",style:{width:`${ee}px`},children:Mt()}),t.jsx("div",{className:"mailbox-split-resize-handle","data-testid":"mailbox-split-resize-handle",role:"separator","aria-orientation":"vertical","aria-label":"Resize message list pane",tabIndex:0,"aria-valuemin":pc,"aria-valuemax":Math.round(qu(Y.current?.clientWidth??ee/Hu)),"aria-valuenow":Math.round(ee),onMouseDown:Be,onKeyDown:$e}),t.jsx("div",{className:"mailbox-split-detail-pane","data-testid":"mailbox-split-detail-pane",children:We()})]}):t.jsxs(t.Fragment,{children:[Tt(),a==="approvals"&&j&&We(),b&&t.jsx(ig,{recipient:N,replyContext:C,agents:T,projectId:e,onSend:nt,onCancel:Ie,addToast:n}),!p&&!j&&!b&&Mt()]})})]})}function Fl(){return t.jsx("div",{className:"mailbox-skeleton","data-testid":"mailbox-skeleton",children:Array.from({length:5}).map((e,n)=>t.jsxs("div",{className:"mailbox-skeleton-item",children:[t.jsx("div",{className:"mailbox-skeleton-avatar"}),t.jsxs("div",{className:"mailbox-skeleton-content",children:[t.jsx("div",{className:"mailbox-skeleton-line mailbox-skeleton-line--short"}),t.jsx("div",{className:"mailbox-skeleton-line mailbox-skeleton-line--long"})]})]},n))})}const bD=640;function xD({isOpen:e,onClose:n,onImport:s,tasks:a,projectId:r}){_i(e);const[o,l]=i.useState(""),[c,d]=i.useState(""),[u,h]=i.useState(""),[m,f]=i.useState(!1),[p,g]=i.useState("issues"),[w,v]=i.useState([]),[b,y]=i.useState(null),[N,S]=i.useState([]),[C,x]=i.useState(null),[k,R]=i.useState(null),[z,_]=i.useState(!1),[A,Q]=i.useState([]),[H,M]=i.useState(!1),[T,F]=i.useState(""),W=i.useRef(!1),oe=i.useRef(null);Ui(oe,e,"fusion:github-modal-size");const D=aa(n),[E,P]=i.useState(!1),[$,j]=i.useState("list"),q=i.useRef(null),de=new Set;for(const ge of a){const he=ge.description.match(/Source: (https:\/\/github\.com\/[^/]+\/[^/]+\/issues\/\d+)/);he&&de.add(he[1]);const Pe=ge.description.match(/PR: (https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+)/);Pe&&de.add(Pe[1])}i.useEffect(()=>{if(e)return l(""),d(""),h(""),v([]),y(null),S([]),x(null),g("issues"),R(null),_(!1),Q([]),M(!0),F(""),q.current=null,W.current=!0,zS().then(ge=>{if(W.current)if(Q(ge),M(!1),ge.length===1){const he=ge[0];l(he.owner),d(he.repo),F(he.name)}else ge.length>1&&(l(""),d(""),F(""))}).catch(()=>{W.current&&M(!1)}),()=>{W.current=!1}},[e]);const be=i.useCallback(ge=>{if(F(ge),ge==="")l(""),d("");else{const he=A.find(Pe=>Pe.name===ge);he&&(l(he.owner),d(he.repo))}},[A]),Ce=i.useCallback(async()=>{if(!o.trim()||!c.trim()){R("Repository must be selected");return}f(!0),R(null),v([]),y(null);try{const ge=u.split(",").map(Pe=>Pe.trim()).filter(Boolean),he=await DS(o.trim(),c.trim(),30,ge.length>0?ge:void 0);v(he),he.length===0&&R("No open issues found")}catch(ge){R(Me(ge)||"Failed to fetch issues")}finally{f(!1)}},[o,c,u]),Ae=i.useCallback(async()=>{if(!o.trim()||!c.trim()){R("Repository must be selected");return}f(!0),R(null),S([]),x(null);try{const ge=await OS(o.trim(),c.trim(),30);S(ge),ge.length===0&&R("No open pull requests found")}catch(ge){R(Me(ge)||"Failed to fetch pull requests")}finally{f(!1)}},[o,c]);i.useEffect(()=>{if(!e||!o.trim()||!c.trim()||m||z)return;const ge={owner:o.trim(),repo:c.trim(),labels:u.trim(),tab:p};q.current?.owner===ge.owner&&q.current?.repo===ge.repo&&q.current?.labels===ge.labels&&q.current?.tab===ge.tab||(q.current=ge,p==="issues"?Ce():Ae())},[o,c,u,p,e,m,z,Ce,Ae]),i.useEffect(()=>{if(!e)return;const ge=he=>{he.key==="Escape"&&n()};return document.addEventListener("keydown",ge),()=>document.removeEventListener("keydown",ge)},[e,n]),i.useEffect(()=>{if(!e)return;const ge=()=>{P(window.innerWidth<=bD)};return ge(),window.addEventListener("resize",ge),()=>window.removeEventListener("resize",ge)},[e]);const ae=i.useCallback(ge=>{y(ge),E&&j("preview")},[E]),X=i.useCallback(ge=>{x(ge),E&&j("preview")},[E]),pe=i.useCallback(()=>{j("list")},[]),ie=i.useCallback(async()=>{if(p==="issues"){if(b===null)return;_(!0),R(null);try{const ge=await LS(o.trim(),c.trim(),b,r);s(ge),y(null),E&&$==="preview"&&j("list")}catch(ge){const he=Me(ge);he?.includes("already imported")?R(he):R(he||"Failed to import issue")}finally{_(!1)}}else{if(C===null)return;_(!0),R(null);try{const ge=await FS(o.trim(),c.trim(),C,r);s(ge),x(null),E&&$==="preview"&&j("list")}catch(ge){const he=Me(ge);he?.includes("already imported")?R(he):R(he||"Failed to import pull request")}finally{_(!1)}}},[p,b,C,o,c,s,E,$]),ye=w.find(ge=>ge.number===b),ee=N.find(ge=>ge.number===C);if(!e)return null;const L=A.length>0,Y=A.length===1,me=w.filter(ge=>de.has(ge.html_url)).length,B=N.filter(ge=>de.has(ge.html_url)).length,xe=k==="No open issues found",Ne=k==="No open pull requests found",te=p==="issues"?xe:Ne,Be=!!k&&!xe&&w.length===0&&!m,$e=!!k&&!Ne&&N.length===0&&!m,ct=p==="issues"?Be:$e,De=m||w.length>0||xe||Be,le=m||N.length>0||Ne||$e,_e=p==="issues"?De:le,Le=!!k&&w.length>0&&!xe,mt=!!k&&N.length>0&&!Ne,Ve=p==="issues"?Le:mt;return t.jsx("div",{className:"modal-overlay open",...D,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg github-import-modal",ref:oe,children:[t.jsxs("div",{className:"modal-header github-import-modal__header",children:[t.jsxs("div",{children:[t.jsx("h3",{children:"Import from GitHub"}),t.jsx("p",{className:"github-import-modal__subtitle",children:"Choose a detected remote, load open issues or pull requests, and import one into the board."})]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close import modal",children:"×"})]}),t.jsxs("div",{className:"modal-body github-import-modal__body",children:[t.jsxs("div",{className:"github-import-tabs",role:"tablist","aria-label":"Import type",children:[t.jsxs("button",{role:"tab","aria-selected":p==="issues","aria-controls":"github-import-list-pane",className:`github-import-tab ${p==="issues"?"active":""}`,onClick:()=>{g("issues"),x(null)},disabled:m||z,children:[t.jsx(kc,{size:16}),t.jsx("span",{children:"Issues"})]}),t.jsxs("button",{role:"tab","aria-selected":p==="pulls","aria-controls":"github-import-list-pane",className:`github-import-tab ${p==="pulls"?"active":""}`,onClick:()=>{g("pulls"),y(null)},disabled:m||z,children:[t.jsx(Xs,{size:16}),t.jsx("span",{children:"Pull Requests"})]})]}),t.jsxs("div",{className:"github-import-toolbar","data-testid":"github-import-toolbar",role:"toolbar","aria-label":"GitHub import controls",children:[t.jsx("div",{className:"github-import-toolbar__zone github-import-toolbar__zone--remote",children:H?t.jsxs("div",{className:"github-import-toolbar__loading",role:"status","aria-live":"polite",children:[t.jsx(_t,{size:16,className:"spin"}),t.jsx("span",{children:"Detecting…"})]}):L?Y?t.jsxs("div",{className:"github-import-remote-pill","data-testid":"github-import-single-remote",children:[t.jsx("span",{className:"github-import-remote-pill__name",children:A[0].name}),t.jsxs("span",{className:"github-import-remote-pill__repo",children:[A[0].owner,"/",A[0].repo]})]}):t.jsxs("div",{className:"github-import-remote-select",children:[t.jsx("label",{htmlFor:"gh-remote",className:"visually-hidden",children:"Repository"}),t.jsxs("select",{id:"gh-remote",value:T,onChange:ge=>be(ge.target.value),disabled:m||z,"aria-label":"Select Git remote",children:[t.jsx("option",{value:"",children:"Select remote…"}),A.map(ge=>t.jsxs("option",{value:ge.name,children:[ge.name," (",ge.owner,"/",ge.repo,")"]},ge.name))]})]}):t.jsx("span",{className:"github-import-toolbar__no-remote",children:"No remotes"})}),t.jsx("div",{className:"github-import-toolbar__zone github-import-toolbar__zone--filter",children:p==="issues"?t.jsxs(t.Fragment,{children:[t.jsx("label",{htmlFor:"gh-labels",className:"visually-hidden",children:"Filter by labels"}),t.jsx("input",{id:"gh-labels",type:"text",placeholder:"Filter: bug,enhancement…",value:u,onChange:ge=>h(ge.target.value),onKeyDown:ge=>ge.key==="Enter"&&Ce(),disabled:m||z||!L,"aria-label":"Filter issues by labels"})]}):t.jsxs("span",{className:"github-import-filter-hint",children:["Open pull requests from ",o||"selected remote"]})}),t.jsx("div",{className:"github-import-toolbar__zone github-import-toolbar__zone--action",children:t.jsxs("button",{id:"gh-load",className:"btn btn-primary github-import-load-button",onClick:p==="issues"?Ce:Ae,disabled:m||z||!o.trim()||!c.trim(),"aria-label":m?`Loading ${p}`:`Load ${p} from repository`,title:m?"Loading…":`Load ${p}`,children:[m?t.jsx(_t,{size:14,className:"spin"}):t.jsx(us,{size:14}),t.jsx("span",{children:m?"Loading…":"Load"})]})})]}),!H&&!L&&t.jsxs("div",{className:"github-import-state github-import-state--warning",role:"alert",children:[t.jsxs("div",{children:[t.jsx("strong",{children:"No GitHub remotes detected"}),t.jsx("span",{children:"Add a GitHub remote to this repository, then reopen the modal."})]}),t.jsx("code",{className:"github-import-command",children:"git remote add origin https://github.com/owner/repo.git"})]}),Ve&&t.jsx("div",{className:"form-error github-import-banner",role:"alert",children:k}),t.jsxs("div",{className:"github-import-workspace",children:[t.jsxs("section",{className:`github-import-list-pane ${E?"mobile":""} ${$==="list"?"active":""}`,"data-testid":"github-import-list-pane","aria-labelledby":"github-import-results-heading",children:[t.jsxs("div",{className:"github-import-pane-header",children:[t.jsx("h4",{id:"github-import-results-heading",children:p==="issues"?"Issues":"Pull Requests"}),p==="issues"&&w.length>0&&t.jsxs("div",{className:"github-import-results-meta","aria-live":"polite",children:[t.jsxs("span",{children:[w.length," issue",w.length===1?"":"s"]}),t.jsxs("span",{children:[me," imported"]})]}),p==="pulls"&&N.length>0&&t.jsxs("div",{className:"github-import-results-meta","aria-live":"polite",children:[t.jsxs("span",{children:[N.length," pull request",N.length===1?"":"s"]}),t.jsxs("span",{children:[B," imported"]})]})]}),t.jsxs("div",{className:"github-import-pane-content",children:[!_e&&t.jsx("div",{className:"github-import-state github-import-state--idle","data-testid":"github-import-results-idle",children:t.jsxs("div",{children:[t.jsx("strong",{children:"Nothing loaded yet"}),t.jsx("span",{children:"Select a repository and click Load to start reviewing import candidates."})]})}),m&&t.jsxs("div",{className:"github-import-state github-import-state--loading",role:"status","aria-live":"polite",children:[t.jsx(_t,{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."})]})]}),ct&&t.jsx("div",{className:"github-import-state github-import-state--error",role:"alert",children:t.jsxs("div",{children:[t.jsxs("strong",{children:["Could not load ",p==="issues"?"issues":"pull requests"]}),t.jsx("span",{children:k})]})}),te&&t.jsx("div",{className:"github-import-state github-import-state--empty",role:"status",children:t.jsxs("div",{children:[t.jsxs("strong",{children:["No open ",p==="issues"?"issues":"pull requests"," found"]}),t.jsx("span",{children:p==="issues"?"Try a different label filter or choose another repository.":"Choose another repository."})]})}),p==="issues"&&w.length>0&&t.jsx("div",{className:"issues-list","aria-live":"polite",children:w.map(ge=>{const he=de.has(ge.html_url);return t.jsxs("div",{className:`issue-item ${b===ge.number?"selected":""} ${he?"imported":""}`,onClick:()=>!he&&ae(ge.number),children:[t.jsx("input",{type:"radio",name:"issue",checked:b===ge.number,onChange:()=>ae(ge.number),disabled:he,"aria-label":`Select issue #${ge.number}`}),t.jsxs("div",{className:"issue-main",children:[t.jsxs("div",{className:"issue-heading-row",children:[t.jsxs("span",{className:"issue-number",children:["#",ge.number]}),t.jsx("span",{className:"issue-title",children:ge.title})]}),ge.labels.length>0&&t.jsx("span",{className:"issue-labels",children:ge.labels.map(Pe=>t.jsx("span",{className:"label-chip",children:Pe.name},Pe.name))})]}),he&&t.jsx("span",{className:"imported-badge",children:"Imported"})]},ge.number)})}),p==="pulls"&&N.length>0&&t.jsx("div",{className:"issues-list","aria-live":"polite",children:N.map(ge=>{const he=de.has(ge.html_url);return t.jsxs("div",{className:`issue-item ${C===ge.number?"selected":""} ${he?"imported":""}`,onClick:()=>!he&&X(ge.number),children:[t.jsx("input",{type:"radio",name:"pull",checked:C===ge.number,onChange:()=>X(ge.number),disabled:he,"aria-label":`Select pull request #${ge.number}`}),t.jsxs("div",{className:"issue-main",children:[t.jsxs("div",{className:"issue-heading-row",children:[t.jsxs("span",{className:"issue-number",children:["#",ge.number]}),t.jsx("span",{className:"issue-title",children:ge.title})]}),t.jsxs("span",{className:"pull-branch-info",children:[ge.headBranch," → ",ge.baseBranch]})]}),he&&t.jsx("span",{className:"imported-badge",children:"Imported"})]},ge.number)})})]})]}),t.jsxs("section",{className:`github-import-preview-pane ${E?"mobile":""} ${$==="preview"?"active":""}`,"data-testid":"github-import-preview-pane","aria-labelledby":"github-import-preview-heading",children:[t.jsxs("div",{className:"github-import-pane-header",children:[E&&t.jsxs("button",{className:"github-import-back-button",onClick:pe,"data-testid":"github-import-back-button","aria-label":`Back to ${p==="issues"?"issues":"pull requests"} list`,children:[t.jsx(er,{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"&&ye?t.jsxs("div",{className:"issue-preview","data-testid":"github-import-preview-card",children:[t.jsxs("div",{className:"preview-meta",children:["Issue #",ye.number]}),t.jsx("div",{className:"preview-title",children:ye.title}),t.jsx("div",{className:"preview-body",children:ye.body?ye.body.slice(0,200)+(ye.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"&&ee?t.jsxs("div",{className:"issue-preview","data-testid":"github-import-preview-card",children:[t.jsxs("div",{className:"preview-meta",children:["Pull Request #",ee.number]}),t.jsx("div",{className:"preview-title",children:ee.title}),t.jsxs("div",{className:"preview-branch",children:[t.jsx("strong",{children:"Branch:"})," ",ee.headBranch," → ",ee.baseBranch]}),t.jsx("div",{className:"preview-body",children:ee.body?ee.body.slice(0,200)+(ee.body.length>200?"…":""):"(no description)"})]}):p==="pulls"?t.jsx("div",{className:"github-import-state github-import-state--idle","data-testid":"github-import-preview-empty",children:t.jsxs("div",{children:[t.jsx("strong",{children:"No pull request selected"}),t.jsx("span",{children:"Choose a pull request from the list to inspect its details."})]})}):null]})]})]})]}),t.jsxs("div",{className:"modal-actions github-import-modal__actions",children:[t.jsx("button",{className:"btn",onClick:n,disabled:z,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:ie,disabled:(p==="issues"?b===null:C===null)||z,children:z?t.jsx(_t,{size:14,className:"spin"}):"Import"})]})]})})}function ci({summary:e,children:n,className:s="",onToggle:a,defaultOpen:r=!1}){const[o,l]=i.useState(r);return t.jsxs("div",{className:`onboarding-disclosure ${s}`.trim(),children:[t.jsxs("button",{className:"onboarding-disclosure-trigger",onClick:()=>{const c=!o;l(c),a?.(c)},"aria-expanded":o,type:"button",children:[t.jsx(Vn,{size:14,className:"onboarding-disclosure-chevron","aria-hidden":"true"}),t.jsx("span",{children:e})]}),o?t.jsx("div",{className:"onboarding-disclosure-content",children:n}):null]})}const vD=["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 Xa(e){return e&&Ca.includes(e)?e:Rs}function Zd(e){return{...e,priority:Xa(e.priority)}}function yD(e,n){return e.length===n.length&&e.every((s,a)=>s===n[a])}function wD(e,n){const s=new Map(e.map(a=>[a.id,a]));return n.map(a=>{const r=s.get(a.id),o=Xa(a.priority),l={id:a.id};return(!r||a.title!==r.title)&&(l.title=a.title),(!r||a.description!==r.description)&&(l.description=a.description),(!r||a.suggestedSize!==r.suggestedSize)&&(l.suggestedSize=a.suggestedSize),(!r||o!==Xa(r.priority))&&(l.priority=o),(!r||!yD(a.dependsOn,r.dependsOn))&&(l.dependsOn=a.dependsOn),l})}function kD(e,n){return e&&n?`${e}/${n}`:""}function jD(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 ND({isOpen:e,onClose:n,onTaskCreated:s,onTasksCreated:a,tasks:r,initialPlan:o,projectId:l,resumeSessionId:c}){const[d,u]=i.useState(""),[h,m]=i.useState({type:"initial"}),[f,p]=i.useState(null),[g,w]=i.useState([]),[v,b]=i.useState([]),[y,N]=i.useState(null),S=i.useRef(!1),C=i.useRef(!1),[x,k]=i.useState(""),[R,z]=i.useState(!0),[_,A]=i.useState(!1),[Q,H]=i.useState(!1),[M,T]=i.useState(null),[F,W]=i.useState(0),oe=i.useRef(null),D=i.useRef(null),E=i.useRef(null),P=i.useRef(null),$=i.useRef(null),j=i.useRef(null),q=i.useRef(null),[de,be]=i.useState(c??null),Ce=i.useMemo(()=>nr(),[]),{isLockedByOther:Ae,takeControl:ae,isLoading:X}=Bc(e?de:null),{activeTabMap:pe,broadcastUpdate:ie,broadcastCompleted:ye,broadcastLock:ee,broadcastUnlock:L,broadcastHeartbeat:Y}=eo(),[me,B]=i.useState(void 0),[xe,Ne]=i.useState(void 0),[te,Be]=i.useState("medium"),[$e,ct]=i.useState(""),[De,le]=i.useState([]),[_e,Le]=i.useState(!1),[mt,Ve]=i.useState(null),[ge,he]=i.useState([]),[Pe,dt]=i.useState([]),[jt,nt]=i.useState({}),xt=i.useRef(null),[Ie,Qe]=i.useState([]),[ot,Tt]=i.useState(!1),[Mt,We]=i.useState(c??null),[J,ke]=i.useState(!!c),[lt,ve]=i.useState(null),[st,Ue]=i.useState(!1),fe=i.useRef(!1),Xe=i.useRef(null),vt=i.useRef(""),St=i.useRef(null),Et=i.useRef(null);Ui(D,e,"fusion:planning-modal-size");const Pt=si(),Jt=Pt==="mobile",{pushNav:dn}=ny(),{keyboardOverlap:Vt,viewportHeight:ln,viewportOffsetTop:fn,keyboardOpen:_n}=oa({enabled:Pt==="mobile"});_i(Pt==="mobile"&&e),i.useEffect(()=>{const ce=D.current;ce&&(_n?(ce.style.setProperty("--keyboard-overlap",`${Vt}px`),ce.style.setProperty("--vv-offset-top",`${fn}px`),ln!==null?ce.style.setProperty("--vv-height",`${ln}px`):ce.style.removeProperty("--vv-height")):(ce.style.removeProperty("--keyboard-overlap"),ce.style.removeProperty("--vv-offset-top"),ce.style.removeProperty("--vv-height")))},[_n,Vt,fn,ln]),i.useEffect(()=>{vt.current=x},[x]),i.useEffect(()=>{const ce=Xe.current;if(!ce)return;ce.scrollHeight-ce.scrollTop-ce.clientHeight<32&&(ce.scrollTop=ce.scrollHeight)},[x]),i.useEffect(()=>{if(h.type!=="loading"){T(null),W(0);return}const ce=Date.now();T(ce),W(0);const it=setInterval(()=>{W(Math.max(0,Math.floor((Date.now()-ce)/1e3)))},1e3);return()=>clearInterval(it)},[h.type]),i.useEffect(()=>{if(h.type!=="loading")return;const ce=P.current;if(!ce)return;let it=!1;const wt=setInterval(async()=>{try{const G=await zi(ce);if(it||!G||P.current!==ce)return;if(G.status==="awaiting_input"&&G.currentQuestion){const ze=JSON.parse(G.currentQuestion);m({type:"question",session:{sessionId:ce,currentQuestion:ze,summary:null}}),k("")}else if(G.status==="complete"&&G.result){const ze=Zd(JSON.parse(G.result));m({type:"summary",session:{sessionId:ce,currentQuestion:null,summary:ze},summary:ze}),N(ze),k("")}}catch{}},8e3);return()=>{it=!0,clearInterval(wt)}},[h.type]);const an=i.useCallback(()=>{u(""),m({type:"initial"}),p(null),w([]),b([]),N(null),k(""),A(!1),H(!1),B(void 0),Ne(void 0),Be("medium"),ct(""),P.current=null,be(null)},[]),Dn=kD(me,xe),vn=i.useCallback((ce,it)=>{if(!ce||!it)return jt.provider&&jt.modelId?`${jt.provider}/${jt.modelId}`:"Using default";const ut=De.find(wt=>wt.provider===ce&&wt.id===it);return ut?`${ut.provider}/${ut.id}`:`${ce}/${it}`},[De,jt.modelId,jt.provider]),Ut=i.useCallback(async()=>{Le(!0),Ve(null);try{const ce=await Hs();le(ce.models),he(ce.favoriteProviders),dt(ce.favoriteModels),nt({provider:ce.resolvedPlanningProvider,modelId:ce.resolvedPlanningModelId})}catch(ce){Ve(Me(ce)||"Failed to load models")}finally{Le(!1)}},[]),rn=i.useCallback(ce=>{he(it=>{const ut=it,G=ut.includes(ce)?ut.filter(ze=>ze!==ce):[ce,...ut];return Kn({favoriteProviders:G,favoriteModels:Pe}).catch(()=>{he(ut)}),G})},[Pe]),bn=i.useCallback(ce=>{dt(it=>{const ut=it,G=ut.includes(ce)?ut.filter(ze=>ze!==ce):[ce,...ut];return Kn({favoriteProviders:ge,favoriteModels:G}).catch(()=>{dt(ut)}),G})},[ge]),en=i.useCallback(ce=>{E.current?.close();const it=()=>P.current!==ce,ut=B0(ce,l,{onThinking:wt=>{it()||(k(G=>G+wt),ie({sessionId:ce,status:"generating",needsInput:!1,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null}))},onQuestion:wt=>{if(it())return;A(!1),H(!1),wr(l);const G=vt.current.trim();G&&b(ze=>ze[ze.length-1]?.thinkingOutput===G?ze:[...ze,{thinkingOutput:G}]),m({type:"question",session:{sessionId:ce,currentQuestion:wt,summary:null}}),k(""),ie({sessionId:ce,status:"awaiting_input",needsInput:!0,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null})},onSummary:wt=>{if(it())return;A(!1),H(!1),wr(l);const G=vt.current.trim();G&&b(ze=>ze[ze.length-1]?.thinkingOutput===G?ze:[...ze,{thinkingOutput:G}]),m({type:"summary",session:{sessionId:ce,currentQuestion:null,summary:wt},summary:wt}),N(wt),k(""),ie({sessionId:ce,status:"complete",needsInput:!1,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null})},onError:wt=>{const G=wt||"Session failed while contacting the AI.";A(!0),(async()=>{try{const ze=await zi(ce);if(ze&&(ze.status==="generating"||ze.status==="awaiting_input")){en(ce);return}}catch{}A(!1),H(!1),p(null),m(ze=>ze.type==="question"||ze.type==="summary"||ze.type==="error"?{type:"error",session:ze.session,errorMessage:G}:{type:"error",session:{sessionId:ce,currentQuestion:null,summary:null},errorMessage:G}),k(""),P.current=ce,ie({sessionId:ce,status:"error",needsInput:!1,owningTabId:Ce,type:"planning",title:d.trim()||void 0,projectId:l??null}),ye({sessionId:ce,status:"error"})})()},onComplete:()=>{A(!1),H(!1),P.current=null,ye({sessionId:ce,status:"complete"})},onConnectionStateChange:wt=>{A(wt==="reconnecting")}});E.current=ut},[ye,ie,d,l,Ce]),Yt=i.useCallback(async ce=>{const it=ce??d;if(it.trim()){p(null),k(""),b([]),w([]),A(!1),m({type:"loading"});try{const ut=me&&xe?{planningModelProvider:me,planningModelId:xe}:void 0,wt=$e.trim()?Number.parseInt($e,10):void 0,G=$.current,{sessionId:ze}=await j0(it.trim(),l,ut,{planningDepth:te,customQuestionCount:Number.isInteger(wt)?wt:void 0},G??void 0);$.current=null,P.current=ze,be(ze),We(ze),en(ze),w([])}catch(ut){A(!1),p(Me(ut)||"Failed to start planning session"),m({type:"initial"}),P.current=null,be(null)}}},[en,$e,d,te,xe,me,l]);i.useEffect(()=>{e&&h.type==="initial"&&oe.current?.focus()},[e,h.type]),i.useEffect(()=>{e&&Ut()},[e,Ut]),i.useEffect(()=>{if(e&&o&&!S.current&&h.type==="initial"){u(o);const ce=setTimeout(()=>{S.current=!0,Yt(o)},0);return()=>clearTimeout(ce)}else if(e&&!o&&!S.current&&!C.current&&h.type==="initial"){C.current=!0;const ce=N4(l);ce&&u(ce)}},[e,o,h.type,Yt,l]);const tn=i.useCallback(async ce=>{E.current?.close(),E.current=null,p(null),k(""),w([]),b([]),N(null),H(!1),m({type:"loading"});try{const it=await zi(ce);if(!it){We(null),ke(!1),m({type:"initial"});return}P.current=ce,be(ce);const ut=Lr(it.conversationHistory);if(b(ut),w(ut.map(wt=>wt.response).filter(wt=>!!(wt&&typeof wt=="object"&&!Array.isArray(wt)))),it.status==="draft"){let wt="",G,ze;try{const Ht=it.inputPayload?JSON.parse(it.inputPayload):null;Ht&&typeof Ht.initialPlan=="string"&&(wt=Ht.initialPlan),Ht&&typeof Ht.modelProvider=="string"&&typeof Ht.modelId=="string"&&(G=Ht.modelProvider,ze=Ht.modelId)}catch{}u(wt),B(G),Ne(ze),$.current=ce,Et.current=wt?{sessionId:ce,initialPlan:wt.trim(),modelProvider:G,modelId:ze}:null,m({type:"initial"})}else if(it.status==="awaiting_input"&&it.currentQuestion){wr(l);const wt=JSON.parse(it.currentQuestion);if(m({type:"question",session:{sessionId:ce,currentQuestion:wt,summary:null}}),it.thinkingOutput){const G=it.thinkingOutput.trim();G&&b(ze=>ze[ze.length-1]?.thinkingOutput===G?ze:[...ze,{thinkingOutput:G}])}en(ce)}else if(it.status==="complete"&&it.result){wr(l);const wt=Zd(JSON.parse(it.result));m({type:"summary",session:{sessionId:ce,currentQuestion:null,summary:wt},summary:wt}),N(wt)}else it.status==="generating"?(m({type:"loading"}),it.thinkingOutput&&k(it.thinkingOutput),en(ce)):it.status==="error"&&m({type:"error",session:{sessionId:ce,currentQuestion:null,summary:null},errorMessage:it.error||"Session failed"})}catch{p("Failed to load session"),m({type:"initial"})}},[en,l]);i.useEffect(()=>{!e||!c||P.current!==c&&q.current!==c&&(We(c),ke(!0),tn(c))},[e,c]),i.useEffect(()=>{e&&Mt&&(c&&c===Mt||tn(Mt))},[e]);const Qt=i.useCallback(async()=>{Tt(!0);try{const it=(await lm(l,{includeCompleted:!0,includeArchived:st})).filter(ut=>ut.type==="planning").sort((ut,wt)=>Date.parse(wt.updatedAt)-Date.parse(ut.updatedAt));Qe(it)}catch{}finally{Tt(!1)}},[l,st]);i.useEffect(()=>{e&&Qt()},[e,Qt]);const Kt=i.useRef(!1);i.useEffect(()=>{const ce=Kt.current&&!ot;Kt.current=ot,ce&&Pt==="mobile"&&(J||c||Mt||Ie.length>0||ke(!0))},[Pt,J,c,Mt,ot,Ie.length]),i.useEffect(()=>{if(!e)return;const ce=l?`?projectId=${encodeURIComponent(l)}`:"",it=wt=>{try{const G=JSON.parse(wt.data);if(G.type!=="planning")return;Qe(ze=>{const Ht=ze.findIndex(Mn=>Mn.id===G.id);return(Ht>=0?[...ze.slice(0,Ht),G,...ze.slice(Ht+1)]:[G,...ze]).sort((Mn,je)=>Date.parse(je.updatedAt)-Date.parse(Mn.updatedAt))})}catch{}},ut=wt=>{try{const G=JSON.parse(wt.data);Qe(ze=>ze.filter(Ht=>Ht.id!==G))}catch{}};return pi(`/api/events${ce}`,{events:{"ai_session:updated":it,"ai_session:deleted":ut},onReconnect:()=>{Qt()}})},[e,l,Qt]);const xn=i.useCallback(ce=>{if(Mt===ce){ke(!0);return}We(ce),ke(!0),tn(ce)},[tn,Mt]),un=i.useCallback(()=>{E.current?.close(),E.current=null,$.current=null,j.current&&(clearTimeout(j.current),j.current=null),c&&(q.current=c),an(),We(null),ke(!0)},[an,c]),pn=i.useCallback(()=>{ke(!1)},[]),$t=i.useRef(!1);i.useEffect(()=>{e||($t.current=!1)},[e]),i.useEffect(()=>{const ce=$t.current;if(Jt){if(!J){$t.current=!1;return}ce||dn({type:"view",revert:pn}),$t.current=!0}},[pn,Jt,J,dn]);const ue=i.useCallback(async(ce,it)=>{const ut=it.trim();if(!(!ut||Et.current?.sessionId===ce&&Et.current.initialPlan===ut&&Et.current.modelProvider===me&&Et.current.modelId===xe))try{await PC(ce,{initialPlan:ut,modelProvider:me&&xe?me:void 0,modelId:me&&xe?xe:void 0},l),Et.current={sessionId:ce,initialPlan:ut,modelProvider:me,modelId:xe}}catch{}},[xe,me,l]);i.useEffect(()=>{if(St.current&&(clearTimeout(St.current),St.current=null),!(!e||h.type!=="initial"||!Mt))return St.current=setTimeout(()=>{ue(Mt,d)},500),()=>{St.current&&(clearTimeout(St.current),St.current=null)}},[d,e,Mt,ue,h.type]),i.useEffect(()=>{Et.current=null},[Mt]),i.useEffect(()=>()=>{St.current&&(clearTimeout(St.current),St.current=null)},[]);const Re=i.useCallback(async ce=>{const it=wt=>wt==="generating"||wt==="awaiting_input",ut=Ie.find(wt=>wt.id===ce);if(ut&&it(ut.status))try{await Jb(ce,l,Ce)}catch{}try{await ix(ce)}catch{}ye({sessionId:ce,status:"complete",timestamp:Date.now()}),Qe(wt=>wt.filter(G=>G.id!==ce)),Mt===ce&&(E.current?.close(),E.current=null,an(),We(null),ke(!1)),ve(null)},[ye,Ie,l,an,Mt,Ce]),et=i.useCallback(async ce=>{const ut=Ie.find(wt=>wt.id===ce)?.archived===!0;try{ut?await MC(ce):await _C(ce)}catch{return}Qe(wt=>!ut&&!st?wt.filter(G=>G.id!==ce):wt.map(G=>G.id===ce?{...G,archived:!ut}:G)),!ut&&Mt===ce&&!st&&(E.current?.close(),E.current=null,an(),We(null),ke(!1))},[Ie,an,Mt,ke,st]);i.useEffect(()=>{e||(S.current=!1,C.current=!1,A(!1),H(!1),be(null))},[e]),i.useEffect(()=>{if(!e){xt.current&&(L(xt.current,Ce),xt.current=null);return}if(de&&xt.current!==de){xt.current&&L(xt.current,Ce),ee(de,Ce),xt.current=de;return}!de&&xt.current&&(L(xt.current,Ce),xt.current=null)},[ee,L,e,de,Ce]),i.useEffect(()=>{if(!e||!de||xt.current!==de)return;Y(Ce);const ce=setInterval(()=>{Y(Ce)},3e4);return()=>{clearInterval(ce)}},[Y,e,de,Ce]),i.useEffect(()=>()=>{j.current&&(clearTimeout(j.current),j.current=null),E.current?.close(),E.current=null,xt.current&&(L(xt.current,Ce),xt.current=null)},[L,Ce]),i.useEffect(()=>{if(!e)return;const ce=()=>{E.current?.close(),E.current=null};return window.addEventListener("beforeunload",ce),()=>window.removeEventListener("beforeunload",ce)},[e]);const at=i.useCallback((ce,it)=>{St.current&&(clearTimeout(St.current),St.current=null),(async()=>{try{await ue(ce,it),await $C(ce,l)}catch{}})()},[l,ue]),Je=i.useCallback(()=>{if(Pt!=="mobile")return;const ce=document.activeElement;ce instanceof HTMLElement&&ce.blur(),window.scrollTo(0,0),requestAnimationFrame(()=>{window.scrollTo(0,0)})},[Pt]),Nt=i.useCallback(()=>{d&&h.type==="initial"&&j4(d,l);const ce=$.current;ce&&d.trim()&&at(ce,d),$.current=null,j.current&&(clearTimeout(j.current),j.current=null),E.current?.close(),E.current=null,A(!1),H(!1),Je(),n()},[at,d,n,l,Je,h.type]);i.useEffect(()=>{if(!e)return;const ce=it=>{it.key==="Escape"&&Nt()};return document.addEventListener("keydown",ce),()=>document.removeEventListener("keydown",ce)},[e,Nt]);const bt=i.useCallback(async ce=>{if(h.type!=="question")return;const{session:it}=h,ut=it.sessionId,wt=it.currentQuestion;if(!wt){p("No active question in session");return}p(null),w(G=>[...G,ce]),b(G=>{const ze=vt.current.trim();let Ht=G;return ze&&Ht[Ht.length-1]?.thinkingOutput!==ze&&(Ht=[...Ht,{thinkingOutput:ze}]),[...Ht,{question:wt,response:ce}]}),m({type:"loading"}),k("");try{await xh(ut,ce,l,Ce)}catch(G){p(Me(G)||"Failed to submit response"),m({type:"question",session:it})}},[l,Ce,h]),At=i.useCallback(async()=>{if(h.type!=="summary")return;const{session:ce,summary:it}=h,ut=ce.sessionId;P.current=ut,be(ut),p(null),H(!1),k(""),m({type:"loading"}),en(ut);try{await xh(ut,{refine:!0},l,Ce)}catch(wt){E.current?.close(),E.current=null,p(Me(wt)||"Failed to refine plan"),m({type:"summary",session:ce,summary:y??it})}},[en,y,l,Ce,h]),se=i.useCallback(async()=>{const ce=P.current;if(ce){try{await C0(ce,l,Ce)}catch{}E.current?.close(),E.current=null,A(!1),H(!1),m({type:"error",session:{sessionId:ce,currentQuestion:null,summary:null},errorMessage:"Generation stopped by user. You can retry or start a new session."}),k("")}},[l,Ce]),re=i.useCallback(async()=>{if(h.type!=="error")return;const ce=h.session;p(null),H(!0),k(""),m({type:"loading"}),en(ce.sessionId);try{P.current=ce.sessionId,be(ce.sessionId),await S0(ce.sessionId,l,Ce)}catch(it){let ut=it;if((Me(it)||"").includes("not in an error state"))try{const G=await zi(ce.sessionId);if(!G)throw new Error("Failed to refresh planning session.");if(P.current=G.id,be(G.id),G.status==="generating")k(G.thinkingOutput??""),m({type:"loading"});else if(G.status==="awaiting_input"){if(!G.currentQuestion)throw new Error("Planning session is awaiting input but has no current question.");const ze=JSON.parse(G.currentQuestion);if(wr(l),m({type:"question",session:{sessionId:G.id,currentQuestion:ze,summary:null}}),G.thinkingOutput){const Ht=G.thinkingOutput.trim();Ht&&b(gn=>gn[gn.length-1]?.thinkingOutput===Ht?gn:[...gn,{thinkingOutput:Ht}])}E.current?.isConnected()||en(G.id)}else if(G.status==="complete"){if(!G.result)throw new Error("Planning session is complete but has no result.");const ze=Zd(JSON.parse(G.result));wr(l),m({type:"summary",session:{sessionId:G.id,currentQuestion:null,summary:ze},summary:ze}),N(ze)}else G.status==="error"&&m({type:"error",session:{sessionId:G.id,currentQuestion:null,summary:null},errorMessage:G.error||"Retry failed. Please try again."});A(!1);return}catch(G){ut=G}E.current?.close(),E.current=null,m({type:"error",session:ce,errorMessage:Me(ut)||"Retry failed. Please try again."}),A(!1)}finally{H(!1)}},[en,l,Ce,h]),Ge=i.useCallback(async()=>{if(h.type==="summary"){p(null),m({type:"loading"});try{const ce=h.session.sessionId,it=await E0(ce,y??void 0,l);s(it),We(null),Qe(ut=>ut.filter(wt=>wt.id!==ce)),ye({sessionId:ce,status:"complete",timestamp:Date.now()}),Nt()}catch(ce){p(Me(ce)||"Failed to create task"),m({type:"summary",session:h.session,summary:h.summary})}}},[ye,y,h,l,s,Nt]),Ct=i.useCallback(async()=>{if(h.type==="summary"){p(null),m({type:"loading"});try{const ce=await _0(h.session.sessionId,y??void 0,l),it=ce.subtasks.map(ut=>({...ut,priority:Xa(ut.priority),dependsOn:[...ut.dependsOn]}));be(ce.sessionId),m({type:"breakdown",sessionId:ce.sessionId,originalSubtasks:it.map(ut=>({...ut,dependsOn:[...ut.dependsOn]})),subtasks:it.map(ut=>({...ut,dependsOn:[...ut.dependsOn]})),dirty:!1})}catch(ce){p(Me(ce)||"Failed to start breakdown"),m({type:"summary",session:h.session,summary:h.summary})}}},[y,h,l]),Gt=i.useCallback(async()=>{if(h.type==="breakdown"){p(null),m({type:"creating"});try{const ce=h.sessionId,it=await M0(ce,wD(h.originalSubtasks,h.subtasks.map(ut=>({...ut,priority:Xa(ut.priority)}))),l);a(it.tasks),Qe(ut=>ut.filter(wt=>wt.id!==ce)),ye({sessionId:ce,status:"complete",timestamp:Date.now()}),u(""),m({type:"initial"}),p(null),w([]),b([]),N(null),k(""),B(void 0),Ne(void 0),Be("medium"),ct(""),P.current=null,be(null),We(null),Nt()}catch(ce){p(Me(ce)||"Failed to create tasks"),m({type:"breakdown",sessionId:h.sessionId,originalSubtasks:h.originalSubtasks,subtasks:h.subtasks,dirty:h.dirty})}}},[ye,Nt,h,a,l]),cn=i.useCallback(async()=>{if(h.type!=="question"||g.length===0)return;const ce=h.session.sessionId;p(null),m({type:"loading"});try{const it=await N0(ce,l,Ce);w(it.history.map(ut=>ut.response&&typeof ut.response=="object"&&!Array.isArray(ut.response)?ut.response:{[ut.question.id]:ut.response})),b(it.history.map(ut=>({question:ut.question,response:ut.response&&typeof ut.response=="object"&&!Array.isArray(ut.response)?ut.response:{[ut.question.id]:ut.response},thinkingOutput:ut.thinkingOutput}))),k(""),m({type:"question",session:{...h.session,currentQuestion:it.currentQuestion,summary:null}})}catch(it){p(Me(it)||"Failed to go back to the previous question"),m({type:"question",session:h.session})}},[l,g.length,Ce,h]),jn=()=>h.type==="question"?Math.min(g.length+1,3):3,Ln=de?pe.get(de):null,mn=Ln&&Ln.tabId!==Ce,Un=Ae&&(!mn||Ln.stale);return e?t.jsx("div",{className:"modal-overlay open",onMouseDown:ce=>{fe.current=ce.target===ce.currentTarget},onClick:ce=>{ce.target===ce.currentTarget&&fe.current&&Nt(),fe.current=!1},role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg planning-modal",ref:D,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[J&&t.jsx("button",{className:"modal-back planning-mobile-back",onClick:pn,"aria-label":"Back to sessions",title:"Back to sessions",children:t.jsx(wc,{size:18})}),t.jsx(Bi,{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:Nt,"aria-label":"Close",children:t.jsx(kn,{size:20})})})]}),t.jsxs("div",{className:`planning-modal-body planning-modal-body--split ${J?"planning-modal-body--show-detail":"planning-modal-body--show-list"}`,children:[t.jsx(MD,{sessions:Ie,loading:ot,selectedSessionId:Mt,pendingDeleteId:lt,showArchived:st,onToggleShowArchived:()=>Ue(ce=>!ce),onArchive:ce=>void et(ce),onSelectSession:xn,onNewSession:un,onRequestDelete:ve,onConfirmDelete:ce=>void Re(ce),onCancelDelete:()=>ve(null)}),t.jsxs("div",{className:"planning-detail",children:[f&&t.jsx("div",{className:"form-error planning-error",children:f}),_&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),h.type==="initial"&&t.jsxs("div",{className:"planning-initial",children:[t.jsxs("div",{className:"planning-view-scroll",children:[t.jsxs("div",{className:"planning-intro",children:[t.jsx(cs,{size:32,className:"icon-triage-lg"}),t.jsx("h4",{children:"Transform your idea into a detailed task"}),t.jsx("p",{className:"text-muted",children:"Describe what you want to build in plain language. The AI will ask clarifying questions and help you structure a well-defined task."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"initial-plan",children:"What do you want to build?"}),t.jsx("textarea",{ref:oe,id:"initial-plan",rows:4,className:"planning-textarea",placeholder:"e.g., Build a user authentication system with login, signup, and password reset...",value:d,onChange:ce=>{const it=ce.target.value;u(it),!($.current||it.trim().length===0)&&(j.current&&clearTimeout(j.current),j.current=setTimeout(()=>{if($.current)return;const ut=it.trim();if(!ut)return;k0(ut,l,me&&xe?{planningModelProvider:me,planningModelId:xe}:void 0).then(G=>{$.current=G.sessionId,Qe(ze=>ze.some(gn=>gn.id===G.sessionId)?ze:[{id:G.sessionId,type:"planning",status:"draft",title:G.title,preview:ut.length>80?`${ut.slice(0,79).trimEnd()}…`:ut,projectId:l??null,lockedByTab:null,updatedAt:new Date().toISOString(),archived:!1},...ze].sort((gn,Mn)=>Date.parse(Mn.updatedAt)-Date.parse(gn.updatedAt))),We(G.sessionId)}).catch(()=>{})},300))},onKeyDown:ce=>{ce.key==="Enter"&&!ce.shiftKey&&d.trim()&&(ce.preventDefault(),Yt())},onBlur:()=>{const ce=$.current;ce&&d.trim()&&at(ce,d)}})]}),t.jsxs("div",{className:"planning-examples",children:[t.jsx("span",{className:"planning-examples-label",children:"Try an example:"}),t.jsx("div",{className:"planning-example-chips",children:vD.map((ce,it)=>t.jsx("button",{className:"planning-example-chip",onClick:()=>u(ce),children:ce.length>40?ce.slice(0,40)+"...":ce},it))})]}),t.jsx(ci,{summary:"Advanced planning settings",className:"planning-advanced-disclosure",children:t.jsxs("div",{className:"planning-advanced-content",children:[t.jsxs("div",{className:"planning-advanced-section planning-model-select-group",children:[t.jsxs("label",{htmlFor:"planning-modal-model",className:"form-label",children:["Planning Model",_e&&t.jsx("span",{className:"text-muted text-muted-sm",children:"Loading models…"})]}),t.jsx("p",{className:"planning-advanced-blurb",children:"Selects which model runs the planning interview and writes the final draft."}),t.jsx(Cs,{id:"planning-modal-model",label:"Planning Model",value:Dn,onChange:ce=>{const{provider:it,modelId:ut}=jD(ce);B(it),Ne(ut)},models:De,disabled:_e,favoriteProviders:ge,onToggleFavorite:rn,favoriteModels:Pe,onToggleModelFavorite:bn}),mt&&t.jsxs("div",{className:"form-hint form-hint-error",children:[mt," ",t.jsx("button",{type:"button",className:"text-link-btn",onClick:()=>{Ut()},children:"Retry"})]}),t.jsx("div",{className:"model-selector-current model-selector-current--spaced",children:t.jsx("span",{className:`model-badge ${me&&xe?"model-badge-custom":"model-badge-default"}`,children:vn(me,xe)})})]}),t.jsxs("div",{className:"planning-advanced-section planning-depth-selector",children:[t.jsx("p",{className:"planning-advanced-blurb",children:"Plan size sets default interview depth. Questions lets you override with an exact count."}),t.jsxs("div",{className:"planning-depth-controls-row",children:[t.jsx("div",{className:"planning-depth-chip-group",role:"group","aria-label":"Planning depth",children:[{value:"small",label:"Small"},{value:"medium",label:"Medium"},{value:"large",label:"Large"}].map(ce=>t.jsx("button",{type:"button",className:`planning-depth-chip btn ${te===ce.value?"btn-primary planning-depth-chip-active":""}`,onClick:()=>Be(ce.value),"aria-pressed":te===ce.value,children:ce.label},ce.value))}),t.jsxs("label",{className:"planning-depth-question-count",htmlFor:"planning-depth-questions",children:[t.jsx("span",{children:"Questions"}),t.jsx("input",{id:"planning-depth-questions",className:"input planning-depth-question-input",type:"number",min:1,max:20,value:$e,onChange:ce=>ct(ce.target.value),placeholder:"Auto"})]})]})]})]})})]}),t.jsx("div",{className:"planning-view-footer",children:t.jsxs("button",{className:"btn btn-primary planning-start-btn",onClick:()=>Yt(),disabled:!d.trim(),children:[t.jsx(Bi,{size:16,className:"icon-mr-8"}),"Start Planning"]})})]}),h.type==="loading"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(_t,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:x?"AI is thinking...":"Generating next question..."}),M&&t.jsxs("div",{className:"planning-elapsed",children:["Thinking… (",F,"s)"]}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>z(!R),type:"button",children:R?"Hide thinking":"Show thinking"}),t.jsx("div",{className:"planning-loading-actions",children:t.jsxs("button",{className:"btn planning-stop-btn",type:"button",onClick:()=>void se(),children:[t.jsx(Vw,{size:14}),t.jsx("span",{className:"icon-ml-6",children:"Stop"})]})}),R&&x&&t.jsx("div",{className:"planning-thinking-output",ref:Xe,children:t.jsx("pre",{children:x})})]})]}),h.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[v.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:v}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:h.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void re(),disabled:Q,children:[Q?t.jsx(_t,{size:14,className:"spin"}):t.jsx(us,{size:14}),t.jsx("span",{className:"icon-ml-6",children:Q?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:Nt,disabled:Q,children:"Dismiss"})]})]})]})}),h.type==="creating"&&t.jsxs("div",{className:"planning-loading",children:[t.jsx(_t,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:"Creating tasks..."})]}),h.type==="question"&&h.session.currentQuestion&&t.jsx("div",{className:"planning-question",children:t.jsx(SD,{question:h.session.currentQuestion,progress:jn(),historyEntries:v,onSubmit:bt,onBack:g.length>0?cn:void 0})}),h.type==="summary"&&y&&t.jsx(CD,{summary:y,historyEntries:v,onSummaryChange:N,tasks:r,onCreateTask:Ge,onBreakIntoTasks:Ct,onRefine:()=>{At()},isLoading:!1}),h.type==="breakdown"&&t.jsx(_D,{subtasks:h.subtasks,isLoading:!1,onUpdateSubtasks:ce=>m({...h,subtasks:ce,dirty:!0}),onCreateTasks:Gt,onBack:()=>{const it={sessionId:h.sessionId,currentQuestion:null,summary:y??null};y&&m({type:"summary",session:it,summary:y})}})]}),Ae&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(Ec,{size:16}),t.jsx("span",{children:Un?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),Un&&t.jsx("button",{type:"button",onClick:()=>{ae()},disabled:X,className:"btn btn-primary session-lock-take-control",children:X?"Taking control...":"Take Control"})]})})]})]})}):null}function SD({question:e,progress:n,historyEntries:s,onSubmit:a,onBack:r}){const[o,l]=i.useState({}),[c,d]=i.useState(""),[u,h]=i.useState(""),m=i.useCallback(()=>{let p;e.type==="text"?p={[e.id]:c}:e.type==="confirm"?p={[e.id]:o[e.id]===!0}:p=o;const g=u.trim();g.length>0&&(p={...p,_comment:g}),a(p)},[u,e,o,c,a]);i.useEffect(()=>{l({}),d(""),h("")},[e.id]);const f=()=>{switch(e.type){case"text":return c.trim().length>0;case"single_select":return o[e.id]!==void 0;case"multi_select":return Array.isArray(o[e.id])&&o[e.id].length>0;case"confirm":return o[e.id]!==void 0;default:return!0}};return t.jsxs("div",{className:"planning-question-form",children:[t.jsxs("div",{className:"planning-view-scroll planning-question-scroll",children:[s.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:s}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-question-panel",children:[t.jsxs("div",{className:"planning-progress",children:[t.jsx("div",{className:"planning-progress-bar",children:[1,2,3].map(p=>t.jsx("div",{className:`planning-progress-step ${p<=n?"active":""}`},p))}),t.jsxs("span",{className:"planning-progress-text",children:["Question ",n," of ~3"]})]}),t.jsxs("div",{className:"planning-question-content",children:[t.jsx("h4",{className:"planning-question-text",children:e.question}),e.description&&t.jsx("p",{className:"planning-question-desc",children:e.description}),t.jsxs("div",{className:"planning-options",children:[e.type==="text"&&t.jsx("textarea",{className:"planning-textarea",rows:4,placeholder:"Type your answer here...",value:c,onChange:p=>d(p.target.value),onKeyDown:p=>{p.key==="Enter"&&!p.shiftKey&&c.trim()&&(p.preventDefault(),m())}}),e.type==="single_select"&&e.options&&t.jsx("div",{className:"planning-radio-group",role:"radiogroup",children:e.options.map(p=>t.jsxs("label",{className:"planning-option planning-option--radio",children:[t.jsx("input",{type:"radio",name:e.id,value:p.id,checked:o[e.id]===p.id,onChange:()=>l({[e.id]:p.id})}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:p.label}),p.description&&t.jsx("span",{className:"planning-option-desc",children:p.description})]})]},p.id))}),e.type==="multi_select"&&e.options&&t.jsx("div",{className:"planning-checkbox-group",children:e.options.map(p=>{const g=o[e.id]||[];return t.jsxs("label",{className:"planning-option planning-option--checkbox",children:[t.jsx("input",{type:"checkbox",value:p.id,checked:g.includes(p.id),onChange:w=>{const v=w.target.checked?[...g,p.id]:g.filter(b=>b!==p.id);l({[e.id]:v})}}),t.jsxs("div",{className:"planning-option-content",children:[t.jsx("span",{className:"planning-option-label",children:p.label}),p.description&&t.jsx("span",{className:"planning-option-desc",children:p.description})]})]},p.id)})}),e.type==="confirm"&&t.jsxs("div",{className:"planning-confirm-group",children:[t.jsxs("button",{className:`planning-confirm-btn ${o[e.id]===!0?"selected":""}`,onClick:()=>l({[e.id]:!0}),children:[t.jsx(Xn,{size:18}),"Yes"]}),t.jsxs("button",{className:`planning-confirm-btn ${o[e.id]===!1?"selected":""}`,onClick:()=>l({[e.id]:!1}),children:[t.jsx(kn,{size:18}),"No"]})]})]}),e.type!=="text"&&t.jsxs("div",{className:"planning-comment-section",children:[t.jsx("label",{className:"planning-comment-label",htmlFor:`planning-comment-${e.id}`,children:"Additional comments (optional)"}),t.jsx("textarea",{id:`planning-comment-${e.id}`,className:"planning-textarea",rows:2,placeholder:"Add any extra context or direction...",value:u,onChange:p=>h(p.target.value)})]})]})]})]}),t.jsxs("div",{className:"planning-actions",children:[r&&t.jsxs("button",{className:"btn",onClick:r,children:[t.jsx(er,{size:16,className:"icon-mr-4"}),"Back"]}),t.jsxs("button",{className:"btn btn-primary planning-actions-primary",onClick:m,disabled:!f(),children:["Continue",t.jsx(Qo,{size:16,className:"icon-ml-4"})]})]})]})}function CD({summary:e,historyEntries:n,onSummaryChange:s,tasks:a,onCreateTask:r,onBreakIntoTasks:o,onRefine:l,isLoading:c}){const[d,u]=i.useState(!1),[h,m]=i.useState(e.suggestedDependencies),f=Xa(e.priority),p=g=>{const w=h.includes(g)?h.filter(v=>v!==g):[...h,g];m(w),s({...e,suggestedDependencies:w})};return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[n.length>0&&t.jsxs(ci,{summary:"Show user Q&A",className:"planning-summary-qa-disclosure",children:[t.jsx(mi,{entries:n}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(Xn,{size:24,className:"icon-success"}),t.jsx("h4",{children:"Planning Complete!"}),t.jsx("p",{className:"text-muted",children:"Review and refine your task before creating it."})]}),t.jsxs("div",{className:"planning-summary-form",children:[t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{children:["Description",t.jsx("button",{type:"button",className:"planning-expand-btn",onClick:()=>u(!d),children:d?"Collapse":"Expand"})]}),t.jsx("textarea",{className:`planning-textarea ${d?"expanded":""}`,rows:d?10:4,value:e.description,onChange:g=>s({...e,description:g.target.value})})]}),t.jsxs("div",{className:"planning-summary-meta-row",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"planning-summary-size",children:"Suggested Size"}),t.jsxs("select",{id:"planning-summary-size",className:"planning-size-select",value:e.suggestedSize,onChange:g=>s({...e,suggestedSize:g.target.value}),disabled:c,children:[t.jsx("option",{value:"S",children:"S (Small)"}),t.jsx("option",{value:"M",children:"M (Medium)"}),t.jsx("option",{value:"L",children:"L (Large)"})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"planning-summary-priority",children:"Priority"}),t.jsx("select",{id:"planning-summary-priority",className:"planning-size-select",value:f,onChange:g=>s({...e,priority:g.target.value}),disabled:c,children:Ca.map(g=>t.jsx("option",{value:g,children:g[0].toUpperCase()+g.slice(1)},g))})]})]}),a.length>0&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Suggested Dependencies"}),t.jsx("div",{className:"planning-deps-list",children:a.map(g=>t.jsxs("label",{className:`planning-dep-chip ${h.includes(g.id)?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:h.includes(g.id),onChange:()=>p(g.id)}),t.jsx("span",{className:"planning-dep-id",children:g.id}),t.jsx("span",{className:"planning-dep-title",children:g.title||g.description.slice(0,30)})]},g.id))})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Key Deliverables"}),t.jsx("ul",{className:"planning-deliverables",children:e.keyDeliverables.map((g,w)=>t.jsx("li",{children:g},w))})]})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:l,disabled:c,children:[t.jsx(er,{size:16,className:"icon-mr-4"}),"Refine Further"]}),t.jsxs("div",{className:"planning-summary-actions-right",children:[t.jsx("button",{className:"btn",onClick:r,disabled:c,children:c?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:16,className:"spin icon-mr-8"}),"Creating..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Xn,{size:16,className:"icon-mr-8"}),"Create Single Task"]})}),t.jsx("button",{className:"btn btn-primary",onClick:o,disabled:c,title:"Break the plan into multiple tasks with dependencies",children:c?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:16,className:"spin icon-mr-8"}),"Breaking down..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Cc,{size:16,className:"icon-mr-8"}),"Break into Tasks"]})})]})]})]})}function cg(e){const n=new Map(e.map(o=>[o.id,o.dependsOn])),s=new Set,a=new Set,r=o=>{if(s.has(o))return!0;if(a.has(o))return!1;s.add(o);for(const l of n.get(o)??[])if(n.has(l)&&r(l))return!0;return s.delete(o),a.add(o),!1};return e.some(o=>r(o.id))}function ED(e){return{id:`subtask-${e}`,title:"",description:"",suggestedSize:"M",priority:Rs,dependsOn:[]}}function _D({subtasks:e,isLoading:n,onUpdateSubtasks:s,onCreateTasks:a,onBack:r}){const[o,l]=i.useState(null),[c,d]=i.useState(null),[u,h]=i.useState(null),m=i.useRef([]),f=i.useMemo(()=>e.length===0||e.some(x=>!x.title.trim())?!0:cg(e),[e]),p=i.useCallback((x,k)=>{s(e.map(R=>R.id===x?{...R,...k}:R))},[e,s]),g=i.useCallback(()=>{s([...e,ED(e.length+1)])},[e,s]),w=i.useCallback(x=>{s(e.filter(k=>k.id!==x).map(k=>({...k,dependsOn:k.dependsOn.filter(R=>R!==x)})))},[e,s]),v=i.useCallback((x,k)=>{if(k<0||k>=e.length)return;const R=[...e],[z]=R.splice(x,1);R.splice(k,0,z),s(R)},[e,s]),b=i.useCallback(x=>k=>{l(x),k.dataTransfer.setData("text/plain",x),k.dataTransfer.effectAllowed="move"},[]),y=i.useCallback(()=>{l(null),d(null),h(null)},[]),N=i.useCallback(x=>k=>{if(k.preventDefault(),x===o)return;const R=k.currentTarget.getBoundingClientRect(),z=R.top+R.height/2,_=k.clientY<z?"before":"after";d(x),h(_)},[o]),S=i.useCallback(x=>k=>{k.preventDefault();const R=k.dataTransfer.getData("text/plain");if(!R||R===x){y();return}const z=e.findIndex(M=>M.id===R),_=e.findIndex(M=>M.id===x);if(z===-1||_===-1){y();return}const A=[...e],[Q]=A.splice(z,1);let H=_;u==="after"&&z<_&&H--,u==="after"&&H++,A.splice(H,0,Q),s(A),y()},[e,u,s,y]),C=i.useCallback(x=>{const k=x.currentTarget.getBoundingClientRect(),R=x.clientX,z=x.clientY;(R<k.left||R>k.right||z<k.top||z>k.bottom)&&(d(null),h(null))},[]);return t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(Cc,{size:24,className:"icon-triage"}),t.jsx("h4",{children:"Break into Tasks"}),t.jsx("p",{className:"text-muted",children:"Review and edit the subtasks generated from your plan. Adjust titles, descriptions, sizes, priorities, and dependencies before creating."})]}),t.jsxs("div",{className:"planning-summary-form",children:[e.map((x,k)=>{const R=o===x.id,z=c===x.id,_=["task-detail-section","subtask-item",R?"subtask-item-dragging":"",z?"subtask-item-drop-target":"",z&&u==="before"?"subtask-item-drop-before":"",z&&u==="after"?"subtask-item-drop-after":""].filter(Boolean).join(" ");return t.jsxs("div",{className:_,"data-testid":`subtask-item-${k}`,draggable:!n,onDragStart:b(x.id),onDragEnd:y,onDragOver:N(x.id),onDrop:S(x.id),onDragLeave:C,children:[t.jsxs("div",{className:"detail-title-row subtask-item-header subtask-item-header--between",children:[t.jsxs("div",{className:"subtask-drag-handle",title:"Drag to reorder",children:[t.jsx(Sc,{size:16}),t.jsx("strong",{children:x.id})]}),t.jsxs("div",{className:"subtask-item-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>v(k,k-1),disabled:n||k===0,title:"Move up","aria-label":"Move subtask up",children:t.jsx(Ha,{size:14})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>v(k,k+1),disabled:n||k===e.length-1,title:"Move down","aria-label":"Move subtask down",children:t.jsx(Yo,{size:14})}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>w(x.id),disabled:n,children:[t.jsx(zn,{size:14})," Remove"]})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Title"}),t.jsx("input",{ref:A=>{m.current[k]=A},value:x.title,onChange:A=>p(x.id,{title:A.target.value}),onKeyDown:A=>{A.key==="Enter"&&(A.preventDefault(),k<e.length-1&&m.current[k+1]?.focus())},disabled:n})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:3,value:x.description,onChange:A=>p(x.id,{description:A.target.value}),disabled:n})]}),t.jsxs("div",{className:"planning-summary-meta-row",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`${x.id}-size`,children:"Size"}),t.jsxs("select",{id:`${x.id}-size`,className:"planning-size-select",value:x.suggestedSize,onChange:A=>p(x.id,{suggestedSize:A.target.value}),disabled:n,children:[t.jsx("option",{value:"S",children:"S"}),t.jsx("option",{value:"M",children:"M"}),t.jsx("option",{value:"L",children:"L"})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`${x.id}-priority`,children:"Priority"}),t.jsx("select",{id:`${x.id}-priority`,className:"planning-size-select",value:Xa(x.priority),onChange:A=>p(x.id,{priority:A.target.value}),disabled:n,children:Ca.map(A=>t.jsx("option",{value:A,children:A[0].toUpperCase()+A.slice(1)},A))})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Dependencies"}),t.jsxs("div",{className:"planning-deps-list",children:[e.slice(0,k).filter(A=>A.id!==x.id).map(A=>{const Q=x.dependsOn.includes(A.id);return t.jsxs("label",{className:`planning-dep-chip ${Q?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:Q,onChange:()=>{const H=Q?x.dependsOn.filter(M=>M!==A.id):[...x.dependsOn,A.id];p(x.id,{dependsOn:H})},disabled:n}),t.jsx("span",{className:"planning-dep-id",children:A.id}),t.jsx("span",{className:"planning-dep-title",children:A.title||"Untitled"})]},A.id)}),k===0&&t.jsx("div",{className:"text-muted",children:"First subtask cannot have dependencies."}),k>0&&e.slice(0,k).filter(A=>A.id!==x.id).length===0&&t.jsx("div",{className:"text-muted",children:"No previous subtasks available."})]})]})]},x.id)}),t.jsxs("button",{type:"button",className:"btn",onClick:g,disabled:n,children:[t.jsx(Bn,{size:16,className:"icon-mr-6"})," Add subtask"]}),cg(e)&&t.jsx("div",{className:"form-error planning-error",children:"Dependencies contain a cycle. Remove circular references before creating tasks."})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsxs("button",{className:"btn",onClick:r,disabled:n,children:[t.jsx(er,{size:16,className:"icon-mr-4"}),"Back to Summary"]}),t.jsx("button",{className:"btn btn-primary",onClick:a,disabled:n||f,children:n?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:16,className:"spin icon-mr-6"}),"Creating..."]}):t.jsx(t.Fragment,{children:"Create Tasks"})})]})]})}function MD({sessions:e,loading:n,selectedSessionId:s,pendingDeleteId:a,showArchived:r,onToggleShowArchived:o,onArchive:l,onSelectSession:c,onNewSession:d,onRequestDelete:u,onConfirmDelete:h,onCancelDelete:m}){return t.jsxs("aside",{className:"planning-sidebar","aria-label":"Planning sessions",children:[t.jsx("div",{className:"planning-sidebar-header",children:t.jsxs("button",{className:`planning-sidebar-new ${s===null?"active":""}`,onClick:d,type:"button",children:[t.jsx(lj,{size:16}),t.jsx("span",{children:"New session"})]})}),t.jsxs("div",{className:"planning-sidebar-list",children:[e.length===0&&!n&&t.jsx("div",{className:"planning-sidebar-empty text-muted",children:"No saved sessions yet. Start one on the right to see it here."}),e.map(f=>{const p=f.id===s,g=a===f.id,w=f.archived===!0,v=f.status==="complete"||f.status==="error";return t.jsxs("div",{className:`planning-sidebar-item ${p?"selected":""} ${g?"pending-delete":""} ${w?"archived":""}`,children:[t.jsxs("button",{type:"button",className:"planning-sidebar-item-button",onClick:()=>c(f.id),children:[t.jsx(AD,{status:f.status}),t.jsxs("span",{className:"planning-sidebar-item-body",children:[t.jsx("span",{className:"planning-sidebar-item-title",children:f.status==="draft"&&(!f.title||f.title==="New planning session")?f.preview??"New planning session":f.title||"Untitled session"}),t.jsxs("span",{className:"planning-sidebar-item-meta",children:[t.jsx(RD,{status:f.status}),t.jsx("span",{"aria-hidden":!0,children:" · "}),t.jsx("span",{children:ID(f.updatedAt)})]})]})]}),g?t.jsxs("div",{className:"planning-sidebar-confirm",children:[t.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>h(f.id),children:"Delete"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,children:"Cancel"})]}):t.jsxs("div",{className:"planning-sidebar-item-actions",children:[v&&t.jsx("button",{type:"button",className:"planning-sidebar-item-archive",onClick:b=>{b.stopPropagation(),l(f.id)},"aria-label":w?"Unarchive session":"Archive session",title:w?"Unarchive session":"Archive session",children:w?t.jsx(ww,{size:14}):t.jsx(Wr,{size:14})}),t.jsx("button",{type:"button",className:"planning-sidebar-item-delete",onClick:b=>{b.stopPropagation(),u(f.id)},"aria-label":"Delete session",title:"Delete session",children:t.jsx(zn,{size:14})})]})]},f.id)})]}),t.jsx("div",{className:"planning-sidebar-footer",children:t.jsx("a",{href:"#",className:"planning-sidebar-toggle-archived-link",onClick:f=>{f.preventDefault(),o()},"aria-pressed":r,children:r?"Hide archived":"Show archived"})})]})}function AD({status:e}){switch(e){case"generating":return t.jsx(_t,{size:14,className:"spin planning-sidebar-status-icon planning-sidebar-status-generating"});case"awaiting_input":return t.jsx(pu,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-awaiting"});case"complete":return t.jsx(Xn,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-complete"});case"error":return t.jsx(Us,{size:14,className:"planning-sidebar-status-icon planning-sidebar-status-error"});default:return t.jsx(sa,{size:14,className:"planning-sidebar-status-icon"})}}function RD({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 ID(e){const n=Date.now()-Date.parse(e);if(!Number.isFinite(n)||n<0)return"";const s=Math.floor(n/1e3);if(s<60)return"just now";const a=Math.floor(s/60);if(a<60)return`${a}m ago`;const r=Math.floor(a/60);if(r<24)return`${r}h ago`;const o=Math.floor(r/24);if(o<7)return`${o}d ago`;const l=Math.floor(o/7);return l<4?`${l}w ago`:new Date(e).toLocaleDateString()}function TD(e){return{id:`subtask-${e}`,title:"",description:"",suggestedSize:"M",dependsOn:[]}}function dg(e){const n=new Map(e.map(o=>[o.id,o.dependsOn])),s=new Set,a=new Set,r=o=>{if(s.has(o))return!0;if(a.has(o))return!1;s.add(o);for(const l of n.get(o)??[])if(n.has(l)&&r(l))return!0;return s.delete(o),a.add(o),!1};return e.some(o=>r(o.id))}function PD({isOpen:e,onClose:n,initialDescription:s,onTasksCreated:a,parentTaskId:r,projectId:o,resumeSessionId:l}){const c=si();_i(e);const{keyboardOverlap:d,viewportHeight:u,viewportOffsetTop:h,keyboardOpen:m}=oa({enabled:c==="mobile"}),f=m?{"--keyboard-overlap":`${d}px`,"--vv-offset-top":`${h}px`,...u!==null?{"--vv-height":`${u}px`}:{}}:{},[p,g]=i.useState({type:"initial"}),[w,v]=i.useState([]),[b,y]=i.useState([]),[N,S]=i.useState(""),[C,x]=i.useState(!0),[k,R]=i.useState(!1),[z,_]=i.useState(!1),[A,Q]=i.useState(s),[H,M]=i.useState(null),[T,F]=i.useState(!1),[W,oe]=i.useState("project-default"),[D,E]=i.useState(""),[P,$]=i.useState(""),[j,q]=i.useState("shared"),[de,be]=i.useState(null),[Ce,Ae]=i.useState(null),[ae,X]=i.useState(null),pe=i.useRef(null),ie=i.useRef([]),ye=i.useRef(!1),ee=i.useRef(null),L=p.type==="generating"||p.type==="editing"||p.type==="creating"||p.type==="error"?p.sessionId:null,Y=i.useMemo(()=>nr(),[]),{isLockedByOther:me,takeControl:B,isLoading:xe}=Bc(e?L:null),{activeTabMap:Ne,broadcastUpdate:te,broadcastCompleted:Be,broadcastLock:$e,broadcastUnlock:ct,broadcastHeartbeat:De}=eo(),le=i.useMemo(()=>w.length===0||w.some(fe=>!fe.title.trim())||(W==="existing"||W==="custom-new")&&!D.trim()?!0:dg(w),[W,D,w]),_e=p.type==="generating"||p.type==="editing"||p.type==="error",Le=L?Ne.get(L):null,{confirm:mt}=ii(),Ve=Le&&Le.tabId!==Y,ge=!!(Ve&&!Le.stale),he=me&&(!Ve||Le.stale),Pe=i.useCallback(()=>{A&&S4(A,o),pe.current?.close(),pe.current=null,g({type:"initial"}),v([]),y([]),S(""),x(!0),R(!1),_(!1),M(null),F(!1),oe("project-default"),E(""),$(""),q("shared"),ye.current=!1},[A,o]),dt=i.useCallback(()=>{pe.current?.close(),pe.current=null,n()},[n]),jt=i.useCallback(async()=>{if(!((T||p.type==="editing"||p.type==="creating")&&!await mt({title:"Discard Changes",message:"Close subtask breakdown? Unsaved changes will be lost.",danger:!0}))){if(L)try{await Xb(L,o,Y)}catch{}Pe(),n()}},[T,n,Pe,L,Y,p.type,o,mt]),nt=i.useCallback(fe=>{pe.current?.close(),pe.current=i1(fe,o,{onThinking:Xe=>{S(vt=>vt+Xe),te({sessionId:fe,status:"generating",needsInput:!1,owningTabId:Y,type:"subtask",title:A.trim()||void 0,projectId:o??null})},onSubtasks:Xe=>{R(!1),_(!1),Vd(o),v(Xe),g({type:"editing",sessionId:fe}),F(!1),te({sessionId:fe,status:"awaiting_input",needsInput:!0,owningTabId:Y,type:"subtask",title:A.trim()||void 0,projectId:o??null})},onError:Xe=>{const vt=Xe||"Session failed while contacting the AI.";R(!1),_(!1),M(null),g({type:"error",sessionId:fe,errorMessage:vt}),te({sessionId:fe,status:"error",needsInput:!1,owningTabId:Y,type:"subtask",title:A.trim()||void 0,projectId:o??null}),Be({sessionId:fe,status:"error"})},onComplete:()=>{Be({sessionId:fe,status:"complete"})},onConnectionStateChange:Xe=>{R(Xe==="reconnecting")}})},[Be,te,A,o,Y]),xt=i.useCallback(async()=>{if(A.trim()){M(null),y([]),S(""),R(!1);try{const{sessionId:fe}=await t1(A.trim(),o);g({type:"generating",sessionId:fe}),nt(fe)}catch(fe){M(Me(fe)||"Failed to start subtask breakdown"),g({type:"initial"})}}},[nt,A,o]);i.useEffect(()=>{if(!e){Pe();return}if(e&&s&&!ye.current)Q(s),ye.current=!0,xt();else if(e&&!s&&!ye.current){const fe=C4(o);fe&&Q(fe)}},[e,s,xt,Pe]),i.useEffect(()=>{!e||!l||p.type!=="initial"||(async()=>{try{const fe=await zi(l);if(!fe)return;const Xe=Lr(fe.conversationHistory);if(y(Xe),fe.status==="generating"||fe.status==="awaiting_input")S(fe.thinkingOutput??""),g({type:"generating",sessionId:l}),nt(l);else if(fe.status==="complete"&&fe.result){Vd(o);const vt=JSON.parse(fe.result);v(vt),g({type:"editing",sessionId:l})}else fe.status==="error"&&(M(null),g({type:"error",sessionId:l,errorMessage:fe.error??"Session encountered an error"}))}catch(fe){M(Me(fe)||"Failed to resume session")}})()},[nt,e,l,p.type,o]),i.useEffect(()=>{if(!e){ee.current&&(ct(ee.current,Y),ee.current=null);return}if(L&&ee.current!==L){ee.current&&ct(ee.current,Y),$e(L,Y),ee.current=L;return}!L&&ee.current&&(ct(ee.current,Y),ee.current=null)},[$e,ct,e,L,Y]),i.useEffect(()=>{if(!e||!L||ee.current!==L)return;De(Y);const fe=setInterval(()=>{De(Y)},3e4);return()=>{clearInterval(fe)}},[De,e,L,Y]),i.useEffect(()=>()=>{pe.current?.close(),ee.current&&(ct(ee.current,Y),ee.current=null)},[ct,Y]),i.useEffect(()=>{if(!e)return;const fe=Xe=>{Xe.key==="Escape"&&(Xe.preventDefault(),jt())};return document.addEventListener("keydown",fe),()=>document.removeEventListener("keydown",fe)},[e,jt]);const Ie=i.useCallback((fe,Xe)=>{v(vt=>vt.map(St=>St.id===fe?{...St,...Xe}:St)),F(!0)},[]),Qe=i.useCallback(()=>{v(fe=>[...fe,TD(fe.length+1)]),F(!0)},[]),ot=i.useCallback(fe=>{v(Xe=>Xe.filter(vt=>vt.id!==fe).map(vt=>({...vt,dependsOn:vt.dependsOn.filter(St=>St!==fe)}))),F(!0)},[]),Tt=i.useCallback(fe=>Xe=>{be(fe),Xe.dataTransfer.setData("text/plain",fe),Xe.dataTransfer.effectAllowed="move"},[]),Mt=i.useCallback(()=>{be(null),Ae(null),X(null)},[]),We=i.useCallback(fe=>Xe=>{if(Xe.preventDefault(),fe===de)return;const vt=Xe.currentTarget.getBoundingClientRect(),St=vt.top+vt.height/2,Et=Xe.clientY<St?"before":"after";Ae(fe),X(Et)},[de]),J=i.useCallback(fe=>Xe=>{Xe.preventDefault();const vt=Xe.dataTransfer.getData("text/plain");if(!vt||vt===fe){be(null),Ae(null),X(null);return}v(St=>{const Et=St.findIndex(ln=>ln.id===vt),Pt=St.findIndex(ln=>ln.id===fe);if(Et===-1||Pt===-1)return St;const Jt=[...St],[dn]=Jt.splice(Et,1);let Vt=Pt;return ae==="after"&&Et<Pt&&Vt--,ae==="after"&&Vt++,Jt.splice(Vt,0,dn),Jt}),F(!0),be(null),Ae(null),X(null)},[ae]),ke=i.useCallback(fe=>{const Xe=fe.currentTarget.getBoundingClientRect(),vt=fe.clientX,St=fe.clientY;(vt<Xe.left||vt>Xe.right||St<Xe.top||St>Xe.bottom)&&(Ae(null),X(null))},[]),lt=i.useCallback((fe,Xe)=>{Xe<0||Xe>=w.length||(v(vt=>{const St=[...vt],[Et]=St.splice(fe,1);return St.splice(Xe,0,Et),St}),F(!0))},[w.length]),ve=i.useCallback(fe=>{ie.current[fe+1]?.focus()},[]),st=i.useCallback(async()=>{if(!(!L||le)){M(null),g({type:"creating",sessionId:L});try{const fe=await a1(L,w,r,o,{branchSelection:{mode:W,...W==="existing"||W==="custom-new"?{branchName:D}:{},...P.trim()?{baseBranch:P.trim()}:{}},branchAssignment:{mode:j}});a(fe.tasks),Pe(),n()}catch(fe){M(Me(fe)||"Failed to create tasks"),g({type:"editing",sessionId:L})}}},[P,j,W,D,le,n,a,r,o,Pe,L,w]),Ue=i.useCallback(async()=>{if(p.type!=="error")return;const fe=p.sessionId;M(null),_(!0),S(""),g({type:"generating",sessionId:fe}),nt(fe);try{await n1(fe,o,Y)}catch(Xe){let vt=Xe;if((Me(Xe)||"").includes("not in an error state"))try{const Et=await zi(fe);if(!Et)throw new Error("Failed to refresh subtask session.");if(y(Lr(Et.conversationHistory)),Et.status==="generating"||Et.status==="awaiting_input")S(Et.thinkingOutput??""),g({type:"generating",sessionId:Et.id}),pe.current?.isConnected()||nt(Et.id);else if(Et.status==="complete"){if(!Et.result)throw new Error("Subtask session is complete but has no result.");Vd(o);const Pt=JSON.parse(Et.result);v(Pt),g({type:"editing",sessionId:Et.id}),F(!1)}else Et.status==="error"&&g({type:"error",sessionId:Et.id,errorMessage:Et.error??"Retry failed. Please try again."});R(!1);return}catch(Et){vt=Et}pe.current?.close(),pe.current=null,g({type:"error",sessionId:fe,errorMessage:Me(vt)||"Retry failed. Please try again."}),R(!1)}finally{_(!1)}},[nt,o,Y,p]);return e?t.jsx("div",{className:"modal-overlay open",onClick:fe=>fe.target===fe.currentTarget&&void jt(),role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg planning-modal",style:f,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx(Cc,{size:20,className:"icon-triage"}),t.jsx("h3",{children:"Subtask Breakdown"})]}),t.jsxs("div",{className:"modal-header-actions",children:[_e&&t.jsx("button",{className:"modal-send-to-background",onClick:dt,title:"Send to background","aria-label":"Send to background",children:t.jsx(Zo,{size:16})}),t.jsx("button",{className:"modal-close",onClick:()=>void jt(),"aria-label":"Close",children:t.jsx(kn,{size:20})})]})]}),t.jsxs("div",{className:"planning-modal-body",children:[H&&t.jsx("div",{className:"form-error planning-error",children:H}),k&&t.jsx("div",{className:"form-hint text-muted",children:"Reconnecting…"}),ge&&t.jsx("div",{className:"form-hint text-muted","data-testid":"session-active-another-tab-banner",children:"Session is active in another tab."}),p.type==="initial"&&t.jsx("div",{className:"planning-initial",children:t.jsxs("div",{className:"planning-view-scroll",children:[t.jsx("p",{className:"text-muted",children:"Preparing to break this task into subtasks."}),t.jsx("pre",{className:"planning-thinking-output",children:A})]})}),p.type==="generating"&&t.jsxs("div",{className:"planning-loading",children:[b.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:b,defaultShowThinking:!0}),t.jsx("div",{className:"conversation-separator"})]}),t.jsx(_t,{size:40,className:"spin icon-todo"}),t.jsx("p",{children:"AI is generating subtasks..."}),t.jsxs("div",{className:"planning-thinking-container",children:[t.jsx("button",{className:"planning-thinking-toggle",onClick:()=>x(!C),type:"button",children:C?"Hide thinking":"Show thinking"}),C&&N&&t.jsx("div",{className:"planning-thinking-output",children:t.jsx("pre",{children:N})})]})]}),p.type==="error"&&t.jsx("div",{className:"planning-summary",children:t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[b.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:b,defaultShowThinking:!0}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"ai-error-panel",role:"alert",children:[t.jsx("div",{className:"ai-error-icon",children:"⚠️"}),t.jsx("div",{className:"ai-error-message",children:p.errorMessage}),t.jsxs("div",{className:"ai-error-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:()=>void Ue(),disabled:z,children:[z?t.jsx(_t,{size:14,className:"spin"}):t.jsx(us,{size:14}),t.jsx("span",{className:"icon-ml-6",children:z?"Retrying...":"Retry"})]}),t.jsx("button",{className:"btn",onClick:()=>void jt(),disabled:z,children:"Cancel"})]})]})]})}),(p.type==="editing"||p.type==="creating")&&t.jsxs("div",{className:"planning-summary",children:[t.jsxs("div",{className:"planning-view-scroll planning-summary-scroll",children:[b.length>0&&t.jsxs(t.Fragment,{children:[t.jsx(mi,{entries:b}),t.jsx("div",{className:"conversation-separator"})]}),t.jsxs("div",{className:"planning-summary-header",children:[t.jsx(Xn,{size:24,className:"icon-success"}),t.jsx("h4",{children:"Review your subtasks"}),t.jsx("p",{className:"text-muted",children:"Edit titles, descriptions, sizes, and dependencies before creating all tasks at once."})]}),t.jsxs("div",{className:"planning-summary-form",children:[t.jsxs("div",{className:"task-detail-section",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Branch strategy"}),t.jsxs("select",{value:W,onChange:fe=>oe(fe.target.value),disabled:p.type==="creating",children:[t.jsx("option",{value:"project-default",children:"Use project/default branch"}),t.jsx("option",{value:"auto-new",children:"Create auto-named branch per task"}),t.jsx("option",{value:"existing",children:"Use existing branch"}),t.jsx("option",{value:"custom-new",children:"Create custom new branch"})]})]}),(W==="existing"||W==="custom-new")&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Branch name"}),t.jsx("input",{value:D,onChange:fe=>E(fe.target.value),disabled:p.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Merge target / base branch (optional)"}),t.jsx("input",{value:P,onChange:fe=>$(fe.target.value),disabled:p.type==="creating",placeholder:"main"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Planning branch mode"}),t.jsxs("select",{value:j,onChange:fe=>q(fe.target.value),disabled:p.type==="creating",children:[t.jsx("option",{value:"shared",children:"Shared branch for all subtasks"}),t.jsx("option",{value:"per-task-derived",children:"Per-task branch derived from planning branch"})]})]})]}),w.map((fe,Xe)=>{const vt=de===fe.id,St=Ce===fe.id,Et=["task-detail-section","subtask-item",vt?"subtask-item-dragging":"",St?"subtask-item-drop-target":"",St&&ae==="before"?"subtask-item-drop-before":"",St&&ae==="after"?"subtask-item-drop-after":""].filter(Boolean).join(" ");return t.jsxs("div",{className:Et,"data-testid":`subtask-item-${Xe}`,draggable:p.type!=="creating",onDragStart:Tt(fe.id),onDragEnd:Mt,onDragOver:We(fe.id),onDrop:J(fe.id),onDragLeave:ke,children:[t.jsxs("div",{className:"detail-title-row subtask-item-header subtask-item-header--between",children:[t.jsxs("div",{className:"subtask-drag-handle",title:"Drag to reorder",children:[t.jsx(Sc,{size:16}),t.jsx("strong",{children:fe.id})]}),t.jsxs("div",{className:"subtask-item-actions",children:[t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>lt(Xe,Xe-1),disabled:p.type==="creating"||Xe===0,title:"Move up","aria-label":"Move subtask up",children:t.jsx(Ha,{})}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>lt(Xe,Xe+1),disabled:p.type==="creating"||Xe===w.length-1,title:"Move down","aria-label":"Move subtask down",children:t.jsx(Yo,{})}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>ot(fe.id),disabled:p.type==="creating",children:[t.jsx(zn,{size:14})," Remove"]})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Title"}),t.jsx("input",{ref:Pt=>{ie.current[Xe]=Pt},value:fe.title,onChange:Pt=>Ie(fe.id,{title:Pt.target.value}),onKeyDown:Pt=>{Pt.key==="Enter"&&(Pt.preventDefault(),ve(Xe))},disabled:p.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{rows:8,value:fe.description,onChange:Pt=>Ie(fe.id,{description:Pt.target.value}),disabled:p.type==="creating"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Size"}),t.jsxs("select",{className:"planning-size-select",value:fe.suggestedSize,onChange:Pt=>Ie(fe.id,{suggestedSize:Pt.target.value}),disabled:p.type==="creating",children:[t.jsx("option",{value:"S",children:"S"}),t.jsx("option",{value:"M",children:"M"}),t.jsx("option",{value:"L",children:"L"})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Dependencies"}),t.jsxs("div",{className:"planning-deps-list",children:[w.slice(0,Xe).filter(Pt=>Pt.id!==fe.id).map(Pt=>{const Jt=fe.dependsOn.includes(Pt.id);return t.jsxs("label",{className:`planning-dep-chip ${Jt?"selected":""}`,children:[t.jsx("input",{type:"checkbox",checked:Jt,onChange:()=>{const dn=Jt?fe.dependsOn.filter(Vt=>Vt!==Pt.id):[...fe.dependsOn,Pt.id];Ie(fe.id,{dependsOn:dn})},disabled:p.type==="creating"}),t.jsx("span",{className:"planning-dep-id",children:Pt.id}),t.jsx("span",{className:"planning-dep-title",children:Pt.title||"Untitled"})]},Pt.id)}),Xe===0&&t.jsx("div",{className:"text-muted",children:"First subtask cannot have dependencies."}),Xe>0&&w.slice(0,Xe).filter(Pt=>Pt.id!==fe.id).length===0&&t.jsx("div",{className:"text-muted",children:"No previous subtasks available."})]})]})]},fe.id)}),t.jsxs("button",{type:"button",className:"btn",onClick:Qe,disabled:p.type==="creating",children:[t.jsx(Bn,{size:16,className:"icon-mr-6"})," Add subtask"]}),dg(w)&&t.jsx("div",{className:"form-error planning-error",children:"Dependencies contain a cycle. Remove circular references before creating tasks."})]})]}),t.jsxs("div",{className:"planning-actions planning-summary-actions",children:[t.jsx("button",{className:"btn",onClick:()=>void jt(),disabled:p.type==="creating",children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:()=>void st(),disabled:p.type==="creating"||le,children:p.type==="creating"?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:16,className:"spin icon-mr-6"}),"Creating..."]}):t.jsx(t.Fragment,{children:"Create Tasks"})})]})]}),me&&t.jsx("div",{className:"session-lock-overlay","data-testid":"session-lock-overlay",children:t.jsxs("div",{className:"session-lock-banner",children:[t.jsx(Ec,{size:16}),t.jsx("span",{children:he?"This session is active in another tab":"This session is active in another tab (live heartbeat)"}),he&&t.jsx("button",{type:"button",onClick:()=>{B()},disabled:xe,className:"btn btn-primary session-lock-take-control",children:xe?"Taking control...":"Take Control"})]})})]})]})}):null}const $D=5,DD=1e3,LD=45e3;function zl(){return{scrollback:null,connected:null,data:[]}}function OD(e,n){const[s,a]=i.useState("disconnected"),r=i.useRef(0),o=i.useRef(e),l=i.useRef(n),c=o.current!==e||l.current!==n;c&&(o.current=e,l.current=n,r.current++);const d=i.useRef(null),u=i.useRef(0),h=i.useRef(null),m=i.useRef(null),f=i.useRef(!1),p=i.useRef(new Set),g=i.useRef(new Set),w=i.useRef(new Set),v=i.useRef(new Set),b=i.useRef(new Set),y=i.useRef(zl()),N=i.useCallback(M=>{p.current.add(M);const T=y.current;return T.data.length>0&&(T.data.forEach(F=>M(F)),T.data=[]),()=>p.current.delete(M)},[]),S=i.useCallback(M=>(g.current.add(M),()=>g.current.delete(M)),[]),C=i.useCallback(M=>{w.current.add(M);const T=y.current;return T.connected&&(M(T.connected),T.connected=null),()=>w.current.delete(M)},[]),x=i.useCallback(M=>{v.current.add(M);const T=y.current;return T.scrollback&&(M(T.scrollback),T.scrollback=null),()=>v.current.delete(M)},[]),k=i.useCallback(M=>(b.current.add(M),()=>b.current.delete(M)),[]),R=i.useCallback(M=>{const T=d.current;T?.readyState===WebSocket.OPEN&&T.send(JSON.stringify({type:"input",data:M}))},[]),z=i.useCallback((M,T)=>{const F=d.current;F?.readyState===WebSocket.OPEN&&F.send(JSON.stringify({type:"resize",cols:M,rows:T}))},[]),_=i.useCallback(()=>{h.current&&(clearTimeout(h.current),h.current=null),m.current&&(clearInterval(m.current),m.current=null),d.current&&(d.current.onopen=null,d.current.onmessage=null,d.current.onclose=null,d.current.onerror=null,d.current.close(),d.current=null),y.current=zl()},[]),A=i.useCallback(()=>{h.current&&(clearTimeout(h.current),h.current=null),m.current&&(clearInterval(m.current),m.current=null),d.current&&(f.current=!0,d.current.onopen=null,d.current.onmessage=null,d.current.onclose=null,d.current.onerror=null,d.current.close(),d.current=null),y.current=zl()},[]),Q=i.useCallback(()=>{if(!e){a("disconnected");return}if(d.current?.readyState===WebSocket.OPEN)return;d.current&&(f.current=!0,d.current.onopen=null,d.current.onmessage=null,d.current.onclose=null,d.current.onerror=null,d.current.close(),d.current=null),f.current=!1,a("connecting");const M=r.current;let F=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/api/terminal/ws?sessionId=${encodeURIComponent(e)}`;n&&(F+=`&projectId=${encodeURIComponent(n)}`);const W=new WebSocket(Ci(F));d.current=W,W.onopen=()=>{if(r.current!==M){W.close();return}y.current=zl(),a("connected"),u.current=0,m.current&&clearInterval(m.current),m.current=setInterval(()=>{r.current===M&&W.readyState===WebSocket.OPEN&&W.send(JSON.stringify({type:"ping"}))},LD)},W.onmessage=oe=>{if(r.current===M)try{const D=JSON.parse(oe.data),E=y.current;switch(D.type){case"data":D.data&&(p.current.size===0&&E.data.push(D.data),p.current.forEach(P=>P(D.data)));break;case"scrollback":D.data&&(E.scrollback=D.data,v.current.forEach(P=>P(D.data)));break;case"connected":D.shell&&D.cwd&&(E.connected={shell:D.shell,cwd:D.cwd},w.current.forEach(P=>P({shell:D.shell,cwd:D.cwd})));break;case"exit":D.exitCode!==void 0&&g.current.forEach(P=>P(D.exitCode));break;case"ping":W.readyState===WebSocket.OPEN&&W.send(JSON.stringify({type:"pong"}));break;case"pong":break}}catch{}},W.onclose=oe=>{if(r.current!==M)return;if(d.current=null,m.current&&(clearInterval(m.current),m.current=null),f.current){a("disconnected");return}if(oe.code===4e3||oe.code===4004){a("disconnected"),oe.code===4004&&b.current.forEach(P=>P());return}if(u.current++,u.current>$D){a("disconnected");return}const D=DD*Math.pow(2,u.current-1);a("reconnecting");const E=r.current;h.current=setTimeout(()=>{r.current===E&&(f.current||Q())},Math.min(D,16e3))},W.onerror=()=>{}},[e,n]),H=i.useCallback(()=>{u.current=0,A(),Q()},[A,Q]);return i.useEffect(()=>(c&&(_(),u.current=0,a("disconnected")),e?Q():a("disconnected"),A),[e,n,c,Q,A,_]),{connectionStatus:s,sendInput:R,resize:z,onData:N,onExit:S,onConnect:C,onScrollback:x,reconnect:H,onSessionInvalid:k}}const ly="kb-terminal-tabs",FD=15e3,zD=15e3;function ug(){return`tab-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}function mg(e){if(typeof window>"u")return[];try{const n=Wn(ly,e);if(n)return JSON.parse(n)}catch{}return[]}function eu(e){const n=e instanceof Error?e.message:typeof e=="string"?e:"";return n.includes("Failed to parse URL")||n.includes("Invalid URL")}function hg(e,n,s){let a;const r=new Promise((o,l)=>{a=setTimeout(()=>l(new Error(`${s} timed out after ${n}ms`)),n)});return Promise.race([e,r]).finally(()=>clearTimeout(a))}function BD(e){const[n,s]=i.useState(()=>mg(e)),[a,r]=i.useState(!1),[o,l]=i.useState(!0),[c,d]=i.useState(null),[u,h]=i.useState(0),m=i.useRef(0);i.useEffect(()=>{m.current+=1,s(mg(e)),r(!1),l(!0),d(null)},[e]),i.useEffect(()=>{try{ss(ly,JSON.stringify(n),e)}catch{}},[e,n]),i.useEffect(()=>{let C=!1;const x=m.current;return(async()=>{if(!C)try{const R=await hg(KS(e),FD,"listTerminalSessions");if(C||x!==m.current)return;const z=new Set(R.map(_=>_.id));l(!0),s(_=>{if(C||x!==m.current)return _;const Q=_.map(T=>({...T,_verified:z.has(T.sessionId)})).filter(T=>T._verified);if(Q.length===0)return[];const H=Q.map(({_verified:T,...F})=>F);return H.find(T=>T.isActive)?H:H.map((T,F)=>({...T,isActive:F===0}))}),r(!0)}catch(R){if(C||x!==m.current)return;const z=eu(R);z||console.warn("Failed to validate terminal sessions with server:",R),l(!z),r(!0)}})(),()=>{C=!0}},[e]),i.useEffect(()=>{if(n.length===0&&a&&o){const C=m.current,x=setTimeout(()=>{hg(fl(void 0,void 0,void 0,e),zD,"createTerminalSession").then(k=>{if(C!==m.current)return;const R={id:ug(),sessionId:k.sessionId,title:`Terminal ${n.length+1}`,isActive:!0,createdAt:Date.now()};s(z=>z.length>0?z:[...z.map(A=>({...A,isActive:!1})),R]),d(null)}).catch(k=>{if(C!==m.current)return;eu(k)||console.error(k);const R=k instanceof Error?k.message:typeof k=="string"?k:"Failed to create terminal session";d(R)})},0);return()=>clearTimeout(x)}},[a,o,n.length,u]);const f=i.useCallback(async()=>{const C=await fl(void 0,void 0,void 0,e),x={id:ug(),sessionId:C.sessionId,title:`Terminal ${n.length+1}`,isActive:!0,createdAt:Date.now()};return s(k=>[...k.map(z=>({...z,isActive:!1})),x]),x},[n.length]),p=i.useCallback(async()=>f(),[f]),g=i.useCallback(C=>{s(x=>{const k=x.find(A=>A.id===C);if(!k)return x;ph(k.sessionId,e).catch(A=>{console.warn(`Failed to kill terminal session ${k.sessionId}:`,A)});const R=x.findIndex(A=>A.id===C),z=k.isActive,_=x.filter(A=>A.id!==C);if(_.length===0)return[];if(z){const A=Math.min(R,_.length-1);return _.map((Q,H)=>({...Q,isActive:H===A}))}return _})},[]),w=i.useCallback(C=>{s(x=>{let k=!1;const R=x.map(z=>z.id===C?(k=!0,{...z,isActive:!0}):{...z,isActive:!1});return k?R:x})},[]),v=i.useCallback((C,x)=>{s(k=>k.map(R=>R.id===C?{...R,title:x}:R))},[]),b=i.useCallback(async()=>{s(k=>{const R=k.find(z=>z.isActive);return R&&ph(R.sessionId,e).catch(z=>{console.warn(`Failed to kill old session ${R.sessionId}:`,z)}),k});const C=n.find(k=>k.isActive);if(!C)return;const x=await fl(void 0,void 0,void 0,e);s(k=>k.map(R=>R.id===C.id?{...R,sessionId:x.sessionId}:R))},[n]),y=i.useCallback(async()=>{const C=n.find(x=>x.isActive);if(C)try{const x=await fl(void 0,void 0,void 0,e);s(k=>k.map(R=>R.id===C.id?{...R,sessionId:x.sessionId}:R)),d(null)}catch(x){eu(x)||console.error(x);const k=x instanceof Error?x.message:typeof x=="string"?x:"Failed to create terminal session";d(k)}},[n]),N=n.find(C=>C.isActive)??null,S=i.useCallback(()=>{d(null),m.current+=1,h(C=>C+1)},[]);return{tabs:n,activeTab:N,isReady:a,bootstrapError:c,createTab:p,closeTab:g,setActiveTab:w,updateTabTitle:v,restartActiveTab:b,retryBootstrap:S,replaceActiveTabSession:y}}const UD=1e4,HD=[500,1500,3e3],cy="kb-terminal-font-size",To=14,qD=8,VD=32,WD='"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 GD(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 KD(e){return`\x1B${e}`}const JD=[{label:"C",key:"c",description:"SigInt"},{label:"D",key:"d",description:"EOF"},{label:"Z",key:"z",description:"Suspend"},{label:"L",key:"l",description:"Clear"},{label:"R",key:"r",description:"Reverse search"},{label:"A",key:"a",description:"Home"},{label:"E",key:"e",description:"End"},{label:"U",key:"u",description:"Kill line"},{label:"K",key:"k",description:"Kill to EOL"},{label:"W",key:"w",description:"Del word"},{label:".",key:".",description:"Last argument"}];function Po(e){return Math.min(VD,Math.max(qD,e))}function YD(){if(typeof window>"u")return To;try{const e=window.localStorage.getItem(cy);if(!e)return To;const n=Number.parseInt(e,10);return Number.isFinite(n)?Po(n):To}catch{return To}}function QD(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 XD(e){return new Promise(n=>setTimeout(n,e))}async function ZD(e,n=HD){let s;for(let a=0;a<=n.length;a+=1)try{return await e()}catch(r){if(!QD(r))throw r;s===void 0&&(s=r);const o=n[a];if(o===void 0)throw s??r;const l=r instanceof Error?r.message:String(r);console.warn(`[TerminalModal] Dynamic xterm import failed (attempt ${a+1}/${n.length+1}). Retrying in ${o}ms...`,l),await XD(o)}throw s??new Error("Dynamic import failed")}function pg(){if(typeof window>"u")return!1;const e="ontouchstart"in window||navigator.maxTouchPoints>0,n=window.innerWidth<=768;return e&&n}function eL(){if(typeof window>"u"||!window.visualViewport)return 0;const e=window.visualViewport,n=Math.max(0,window.innerHeight-e.offsetTop-e.height);if(n>0)return n;const a=tL()-e.offsetTop-e.height;return a>=30&&a>80?a:0}let tu=null;function tL(){return tu===null&&(tu=window.innerHeight),tu}function nL({isOpen:e,onClose:n,initialCommand:s,projectId:a}){const[r,o]=i.useState(null),[l,c]=i.useState(null),[d,u]=i.useState(!1),[h,m]=i.useState(null),[f,p]=i.useState(0),[g,w]=i.useState(0),[v,b]=i.useState(null),[y,N]=i.useState(()=>YD()),[S,C]=i.useState(!1),[x,k]=i.useState(null),R=i.useRef(null),z=i.useRef(null),_=i.useRef(!1);Ui(z,e,"fusion:terminal-modal-size");const A=i.useRef(null),Q=i.useRef(null),H=i.useRef(!1),M=i.useRef(!1),T=i.useRef(null),F=i.useRef(()=>{}),W=i.useRef(null),oe=i.useRef(0),D=i.useRef(y),E=i.useRef(null),P=i.useRef(a);oe.current=g,D.current=y;const $=i.useCallback(Ie=>{if(Ie&&M.current!==Ie)return;const Qe=Q.current,ot=A.current,Tt=T.current;if(!(!Qe||!ot)&&!(Ie&&M.current!==Ie))try{Qe.fit(),Tt&&Tt(ot.cols,ot.rows)}catch{}},[]);i.useEffect(()=>{e&&p(Ie=>Ie+1)},[e]),i.useEffect(()=>{if(!e||!pg())return;const Ie=window.visualViewport;if(!Ie)return;const Qe=()=>{const ot=eL();w(ot),b(Ie.height),ot>0&&z.current?.scrollIntoView&&z.current.scrollIntoView({block:"end",behavior:"smooth"}),E.current!==null&&(cancelAnimationFrame(E.current),E.current=null);const Tt=typeof M.current=="string"?M.current:void 0;E.current=requestAnimationFrame(()=>{E.current=null,$(Tt)})};return Qe(),Ie.addEventListener("resize",Qe),Ie.addEventListener("scroll",Qe),()=>{Ie.removeEventListener("resize",Qe),Ie.removeEventListener("scroll",Qe),E.current!==null&&(cancelAnimationFrame(E.current),E.current=null),w(0),b(null)}},[$,e]),i.useEffect(()=>{if(!e)return;const Ie=z.current;if(!Ie||typeof ResizeObserver>"u")return;let Qe=null;const ot=new ResizeObserver(()=>{Qe!==null&&cancelAnimationFrame(Qe),Qe=requestAnimationFrame(()=>{Qe=null;const Tt=typeof M.current=="string"?M.current:void 0;$(Tt)})});return ot.observe(Ie),()=>{ot.disconnect(),Qe!==null&&cancelAnimationFrame(Qe)}},[$,e]);const{tabs:j,activeTab:q,isReady:de,bootstrapError:be,createTab:Ce,closeTab:Ae,setActiveTab:ae,updateTabTitle:X,restartActiveTab:pe,retryBootstrap:ie,replaceActiveTabSession:ye}=BD(a),{connectionStatus:ee,sendInput:L,resize:Y,onData:me,onConnect:B,onExit:xe,onScrollback:Ne,reconnect:te,onSessionInvalid:Be}=OD(q?.sessionId??null,a);T.current=Y,F.current=L,i.useEffect(()=>{if(!(typeof window>"u"))try{window.localStorage.setItem(cy,String(y))}catch{}},[y]);const $e=i.useCallback(()=>{const Ie=A.current;if(Ie)try{Q.current?.fit(),Y(Ie.cols,Ie.rows)}catch{}},[Y]);i.useEffect(()=>{if(!e||!de)return;const Ie=q?.sessionId;if(!Ie)return;const Qe=P.current!==a;if(Qe&&(P.current=a),M.current===Ie&&A.current&&!Qe)return;A.current&&(M.current!==Ie||Qe)&&(A.current.dispose(),A.current=null,Q.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),u(!1),m(null));let ot=!0,Tt;return(async()=>{const We=ZD(()=>Promise.all([Rn(()=>import("./vendor-xterm-DzcZoU0P.js").then(ve=>ve.x),__vite__mapDeps([6,1,7])),Rn(()=>import("./addon-fit-C7jRorKK.js").then(ve=>ve.a),__vite__mapDeps([10,1])),Rn(()=>import("./addon-web-links-CkJwd4cQ.js").then(ve=>ve.a),__vite__mapDeps([11,1]))])),J=new Promise((ve,st)=>{Tt=setTimeout(()=>{st(new Error("xterm initialization timed out"))},UD)});let ke,lt;try{const[{Terminal:ve},{FitAddon:st},{WebLinksAddon:Ue}]=await Promise.race([We,J]);if(!ot||!R.current||A.current)return;ke=new ve({cursorBlink:!0,cursorStyle:"block",fontSize:D.current,fontFamily:WD,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}),lt=new st,ke.loadAddon(lt);const fe=new Ue;if(ke.loadAddon(fe),!pg())try{const{WebglAddon:St}=await Rn(async()=>{const{WebglAddon:Pt}=await import("./addon-webgl-BjvOw43o.js").then(Jt=>Jt.a);return{WebglAddon:Pt}},__vite__mapDeps([12,1])),Et=new St;Et.onContextLoss(()=>{Et.dispose()}),ke.loadAddon(Et)}catch{}ke.open(R.current),Tt&&clearTimeout(Tt);const Xe=R.current?.querySelector(".xterm-helper-textarea");if(Xe&&Xe.focus(),R.current)try{R.current.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))}catch{}setTimeout(()=>{lt.fit();const St=R.current?.querySelector(".xterm-helper-textarea");St&&St.focus()},50),A.current=ke,Q.current=lt,M.current=Ie,oe.current>0&&(E.current!==null&&(cancelAnimationFrame(E.current),E.current=null),E.current=requestAnimationFrame(()=>{E.current=null,$(Ie)})),ke.onData(St=>{M.current===Ie&&F.current(St)});const vt=()=>{if(M.current===Ie&&Q.current&&A.current)try{Q.current.fit();const{cols:St,rows:Et}=A.current;T.current?.(St,Et)}catch{}};window.addEventListener("resize",vt),W.current&&window.removeEventListener("resize",W.current),W.current=vt,u(!0),m(null)}catch(ve){if(Tt&&clearTimeout(Tt),!ot)return;const st=ve instanceof Error?ve.message:"xterm initialization failed";m(st)}})(),()=>{ot=!1,Tt&&clearTimeout(Tt)}},[$,e,de,q?.sessionId,a]),i.useEffect(()=>{e||(A.current&&(A.current.dispose(),A.current=null),Q.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),u(!1),m(null),H.current=!1,o(null),c(null),C(!1),k(null))},[e]),i.useEffect(()=>{if(!d||!A.current||!q)return;const Ie=q.sessionId,Qe=J=>{M.current===Ie&&A.current?.write(J)},ot=me(J=>{Qe(J)}),Tt=Ne(J=>{Qe(J)}),Mt=B(J=>{X(q.id,um(J.shell)||J.shell)}),We=xe(J=>{M.current===Ie&&(c(J),A.current?.write(`\r
691
+ \x1B[33m[Process exited with code ${J}]\x1B[0m\r
692
+ `))});return()=>{ot(),Tt(),Mt(),We()}},[d,q?.sessionId,q?.id,q,ee,me,Ne,B,xe,X]),i.useEffect(()=>{ee==="connected"&&s&&H.current!==s&&q&&(H.current=s,setTimeout(()=>{L(s+`
693
+ `)},500))},[ee,s,L,q,f]),i.useEffect(()=>{if(!d||!A.current)return;A.current.options.fontSize=y,E.current!==null&&(cancelAnimationFrame(E.current),E.current=null);const Ie=requestAnimationFrame(()=>{E.current=null,$e()});return E.current=Ie,()=>{E.current===Ie&&(cancelAnimationFrame(Ie),E.current=null)}},[y,d,$e]),i.useEffect(()=>{if(!e)return;const Ie=Qe=>{if(!(!Qe.ctrlKey&&!Qe.metaKey)){if(Qe.code==="Equal"||Qe.code==="NumpadAdd"){Qe.preventDefault(),N(ot=>Po(ot+1));return}if(Qe.code==="Minus"||Qe.code==="NumpadSubtract"){Qe.preventDefault(),N(ot=>Po(ot-1));return}if(Qe.code==="Digit0"||Qe.code==="Numpad0"){Qe.preventDefault(),N(To);return}}};return window.addEventListener("keydown",Ie),()=>window.removeEventListener("keydown",Ie)},[e,$e]),i.useEffect(()=>{if(!e)return;const Ie=Qe=>{Qe.key==="Escape"&&n()};return document.addEventListener("keydown",Ie),()=>document.removeEventListener("keydown",Ie)},[e,n]),i.useEffect(()=>{ee==="connected"&&A.current&&setTimeout(()=>{if(!A.current||!R.current)return;const Ie=R.current.querySelector(".xterm-helper-textarea");Ie&&Ie.focus();try{R.current.dispatchEvent(new MouseEvent("click",{bubbles:!0,cancelable:!0}))}catch{}},100)},[ee]);const ct=i.useCallback(()=>{if(!R.current||typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(hover: none) and (pointer: coarse)")?.matches===!0)return;A.current?.focus();const Qe=R.current.querySelector(".xterm-helper-textarea");if(!Qe)return;Qe.autocapitalize="off",Qe.autocomplete="off",Qe.autocorrect="off",Qe.spellcheck=!1,Qe.setAttribute("inputmode","text");try{Qe.focus({preventScroll:!0})}catch{Qe.focus()}const ot=Qe.value.length;Qe.setSelectionRange(ot,ot)},[]);i.useEffect(()=>Be(()=>{A.current?.clear(),c(null),H.current=!1,A.current&&(A.current.dispose(),A.current=null),Q.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),u(!1),m(null),ye().catch(Qe=>{console.error("Failed to replace invalid terminal session:",Qe)})}),[Be,ye]);const De=i.useCallback(Ie=>{Ie.target===Ie.currentTarget&&(_.current=!0)},[]),le=i.useCallback(Ie=>{_.current&&Ie.target===Ie.currentTarget&&n(),_.current=!1},[n]),_e=i.useCallback(()=>{A.current?.clear()},[]),Le=i.useCallback(async()=>{A.current?.clear(),c(null),H.current=!1;try{await pe()}catch(Ie){o(Me(Ie)||"Failed to restart terminal session")}},[pe]),mt=i.useCallback(()=>{A.current&&(A.current.dispose(),A.current=null),Q.current=null,M.current=!1,W.current&&(window.removeEventListener("resize",W.current),W.current=null),m(null),u(!1)},[]),Ve=i.useCallback(()=>{window.location.reload()},[]),ge=i.useCallback(()=>{N(Ie=>Po(Ie+1))},[]),he=i.useCallback(()=>{N(Ie=>Po(Ie-1))},[]),Pe=i.useCallback(Ie=>{k(Qe=>Qe===Ie?null:Ie)},[]),dt=i.useCallback(Ie=>{if(x==="ctrl"){L(GD(Ie)),k(null);return}if(x==="alt"){L(KD(Ie)),k(null);return}L(Ie)},[L,x]),jt=i.useCallback(Ie=>{L(Ie),k(null)},[L]);if(!e)return null;const nt=()=>{switch(ee){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}},xt=!de||!q&&!be;return t.jsx("div",{className:"modal-overlay open",onMouseDown:De,onMouseUp:le,role:"dialog","aria-modal":"true","data-testid":"terminal-modal-overlay",style:g>0?{"--overlay-padding-top":"0px"}:void 0,children:t.jsxs("div",{ref:z,className:"modal terminal-modal","data-testid":"terminal-modal",style:g>0?{"--keyboard-overlap":`${g}px`,"--vv-height":v?`${v}px`:void 0}:void 0,children:[t.jsxs("div",{className:"terminal-header",children:[t.jsxs("div",{className:"terminal-tabs","data-testid":"terminal-tabs",children:[j.map(Ie=>t.jsxs("div",{className:`terminal-tab ${Ie.isActive?"terminal-tab--active":""}`,onClick:()=>ae(Ie.id),title:Ie.title,role:"tab","aria-selected":Ie.isActive,children:[t.jsx("span",{className:"terminal-tab-label",children:Ie.title}),j.length>1&&t.jsx("button",{className:"terminal-tab-close",onClick:Qe=>{Qe.stopPropagation(),Ae(Ie.id)},title:"Close tab",children:"×"})]},Ie.id)),t.jsx("button",{className:"terminal-tab terminal-tab--new",onClick:Ce,title:"New terminal",children:"+"})]}),t.jsxs("div",{className:"terminal-title","data-testid":"terminal-title",children:[t.jsx(na,{size:16}),nt()]}),t.jsxs("div",{className:"terminal-actions","data-testid":"terminal-actions",children:[ee==="disconnected"&&q&&t.jsxs("button",{className:"terminal-reconnect-btn",onClick:te,title:"Reconnect","data-testid":"terminal-reconnect-btn",children:[t.jsx(us,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"Reconnect"})]}),l!==null&&t.jsxs("button",{className:"terminal-restart-btn",onClick:Le,title:"New Session","data-testid":"terminal-restart-btn",children:[t.jsx(us,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"New Session"})]}),t.jsxs("button",{className:"terminal-clear-btn",onClick:_e,"data-testid":"terminal-clear-btn",title:"Clear terminal",children:[t.jsx(zn,{size:14}),t.jsx("span",{className:"terminal-action-label",children:"Clear"})]}),t.jsxs("button",{className:"terminal-clear-btn terminal-clear-btn--shortcut",onClick:()=>C(Ie=>!Ie),"data-testid":"terminal-shortcut-toggle",title:"Shortcuts","aria-pressed":S,children:[t.jsx(Uk,{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(kn,{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:[xt&&!be&&t.jsxs("div",{className:"terminal-loading","data-testid":"terminal-loading",children:[t.jsx("div",{className:"terminal-spinner"}),t.jsx("span",{children:"Starting terminal..."})]}),be&&!q&&t.jsx("div",{className:"terminal-loading","data-testid":"terminal-bootstrap-error",children:t.jsxs("div",{className:"terminal-error-content",children:[t.jsxs("span",{children:["Failed to start terminal: ",be]}),t.jsxs("div",{className:"terminal-error-actions",children:[t.jsxs("button",{className:"terminal-retry-btn",onClick:ie,"data-testid":"terminal-retry-btn",children:[t.jsx(us,{size:14}),"Retry"]}),t.jsxs("button",{className:"terminal-retry-btn",onClick:Ve,"data-testid":"terminal-bootstrap-refresh-btn",children:[t.jsx(us,{size:14}),"Refresh page"]})]})]})}),h&&q&&t.jsx("div",{className:"terminal-loading","data-testid":"terminal-xterm-init-error",children:t.jsxs("div",{className:"terminal-error-content",children:[t.jsxs("span",{children:["Terminal UI failed to initialize: ",h]}),t.jsxs("div",{className:"terminal-error-actions",children:[t.jsxs("button",{className:"terminal-retry-btn",onClick:mt,"data-testid":"terminal-reinit-btn",children:[t.jsx(us,{size:14}),"Reinitialize"]}),t.jsxs("button",{className:"terminal-retry-btn",onClick:Ve,"data-testid":"terminal-xterm-refresh-btn",children:[t.jsx(us,{size:14}),"Refresh page"]})]})]})}),t.jsx("div",{ref:R,className:"terminal-xterm","data-testid":"terminal-xterm",onPointerDown:ct,onTouchStart:ct},q?.sessionId)]}),S&&t.jsxs("div",{className:"terminal-shortcut-panel","data-testid":"terminal-shortcut-panel",children:[t.jsxs("div",{className:"terminal-shortcut-modifier-row",children:[t.jsx("button",{type:"button",className:`terminal-shortcut-btn terminal-shortcut-btn--modifier ${x==="ctrl"?"is-active":""}`,"data-testid":"terminal-modifier-ctrl",onClick:()=>Pe("ctrl"),"aria-pressed":x==="ctrl",children:"Ctrl"}),t.jsx("button",{type:"button",className:`terminal-shortcut-btn terminal-shortcut-btn--modifier ${x==="alt"?"is-active":""}`,"data-testid":"terminal-modifier-alt",onClick:()=>Pe("alt"),"aria-pressed":x==="alt",children:"Alt"}),t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>jt("\x1B"),children:"ESC"}),t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>jt(" "),children:"Tab"})]}),JD.map(Ie=>t.jsx("button",{type:"button",className:"terminal-shortcut-btn",onClick:()=>dt(Ie.key),title:Ie.description,children:Ie.label},Ie.label))]}),t.jsxs("div",{className:"terminal-status-bar","data-testid":"terminal-status-bar",children:[t.jsxs("span",{className:`terminal-connection-status ${ee}`,children:[ee==="connected"&&"Connected",ee==="connecting"&&"Connecting...",ee==="reconnecting"&&"Reconnecting...",ee==="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:he,"data-testid":"terminal-font-size-decrease","aria-label":"Decrease terminal font size",children:t.jsx(mj,{size:14})}),t.jsxs("span",{className:"terminal-font-size-value","data-testid":"terminal-font-size-value",children:[y,"px"]}),t.jsx("button",{type:"button",className:"terminal-font-size-btn",onClick:ge,"data-testid":"terminal-font-size-increase","aria-label":"Increase terminal font size",children:t.jsx(Bn,{size:14})})]}),t.jsx("span",{className:"terminal-shortcuts",children:"Ctrl++/- zoom • ⌨ Shortcuts panel • Esc close"})]})]})})}const yo={name:"",command:""};function fg(e){return/^[a-zA-Z0-9_-]+$/.test(e)}function sL(e,n=60){return e.length<=n?e:e.slice(0,n-3)+"..."}function iL({isOpen:e,onClose:n,addToast:s,projectId:a,onRunScript:r}){_i(e);const[o,l]=i.useState({}),[c,d]=i.useState(!0),[u,h]=i.useState(!1),[m,f]=i.useState(null),[p,g]=i.useState(yo),[w,v]=i.useState(!1),[b,y]=i.useState(null),[N,S]=i.useState(null),C=aa(n),x=i.useCallback(async()=>{try{d(!0);const F=await Vo(a);l(F)}catch(F){s(Me(F)||"Failed to load scripts","error")}finally{d(!1)}},[s,a]);i.useEffect(()=>{e&&x()},[e,x]);const k=i.useCallback(()=>{h(!0),f(null),g(yo),S(null)},[]),R=i.useCallback((F,W)=>{f(F),h(!1),g({name:F,command:W}),S(null)},[]),z=i.useCallback(()=>{f(null),h(!1),g(yo),S(null)},[]),_=i.useCallback(F=>{g(W=>({...W,name:F})),F&&!fg(F)?S("Name must contain only letters, numbers, hyphens, and underscores (no spaces)"):S(null)},[]),A=i.useCallback(async()=>{const F=p.name.trim(),W=p.command.trim();if(!F){s("Script name is required","error");return}if(!fg(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 Z0(F,W,a),s(m?"Script updated":"Script created","success"),f(null),h(!1),g(yo),S(null),await x()}catch(oe){const D=Me(oe);D?.includes("already exists")?s("A script with this name already exists","error"):s(D||"Failed to save script","error")}finally{v(!1)}},[p,m,s,x,a]),Q=i.useCallback(async F=>{try{await e1(F,a),s("Script deleted","success"),y(null),m===F&&(f(null),g(yo)),await x()}catch(W){s(Me(W)||"Failed to delete script","error")}},[m,s,x,a]),H=i.useCallback((F,W)=>{r&&r(F,W)},[r]);if(!e)return null;const M=u||m!==null,T=Object.entries(o).map(([F,W])=>({name:F,command:W}));return t.jsx("div",{className:"modal-overlay open",...C,"data-testid":"scripts-modal",children:t.jsxs("div",{className:"modal scripts-modal",role:"dialog","aria-modal":"true","aria-label":"Scripts",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h2",{children:[t.jsx(na,{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(_t,{size:24,className:"spin",style:{margin:"0 auto 8px",display:"block"}}),"Loading scripts..."]}):M?t.jsxs("div",{className:"scripts-modal-form",style:{display:"flex",flexDirection:"column",gap:"16px"},children:[t.jsxs("div",{children:[t.jsx("label",{htmlFor:"script-name",style:{display:"block",marginBottom:"4px",fontSize:"13px",fontWeight:500,color:"var(--text)"},children:"Script Name"}),t.jsx("input",{id:"script-name",type:"text",className:"input",value:p.name,onChange:F=>_(F.target.value),placeholder:"e.g., build, test, lint",disabled:w||m!==null,"data-testid":"script-name-input",style:{width:"100%",borderColor:N?"var(--color-error)":void 0}}),N&&t.jsx("div",{style:{fontSize:"12px",color:"var(--color-error)",marginTop:"4px"},"data-testid":"script-name-error",children:N}),t.jsx("div",{style:{fontSize:"11px",color:"var(--text-muted)",marginTop:"4px"},children:"Letters, numbers, hyphens, and underscores only"})]}),t.jsxs("div",{children:[t.jsx("label",{htmlFor:"script-command",style:{display:"block",marginBottom:"4px",fontSize:"13px",fontWeight:500,color:"var(--text)"},children:"Command"}),t.jsx("textarea",{id:"script-command",className:"input",value:p.command,onChange:F=>g(W=>({...W,command:F.target.value})),placeholder:"e.g., npm run build",rows:3,disabled:w,"data-testid":"script-command-input",style:{width:"100%",resize:"vertical",fontFamily:"monospace"}})]}),t.jsxs("div",{className:"scripts-modal-form-actions",style:{display:"flex",gap:"8px",justifyContent:"flex-end"},children:[t.jsx("button",{className:"btn btn-secondary",onClick:z,disabled:w,"data-testid":"script-cancel-btn",children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:A,disabled:w||!!N,"data-testid":"script-save-btn",children:w?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:14,className:"spin",style:{marginRight:"6px"}}),"Saving..."]}):m?"Update":"Create"})]})]}):t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"scripts-modal-list-header",style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"16px"},children:[t.jsx("div",{style:{fontSize:"13px",color:"var(--text-muted)"},children:T.length===0?"No scripts defined":`${T.length} script${T.length===1?"":"s"}`}),t.jsxs("button",{className:"btn btn-primary",onClick:k,"data-testid":"add-script-btn",style:{display:"flex",alignItems:"center",gap:"6px"},children:[t.jsx(Bn,{size:14}),"Add Script"]})]}),T.length===0?t.jsxs("div",{style:{textAlign:"center",padding:"32px",color:"var(--text-muted)",fontSize:"14px",border:"1px dashed var(--border)",borderRadius:"8px"},"data-testid":"empty-state",children:[t.jsx(na,{size:32,style:{margin:"0 auto 12px",opacity:.5}}),t.jsx("div",{children:"No scripts defined yet."}),t.jsx("div",{style:{marginTop:"4px",fontSize:"12px"},children:"Add scripts to quickly run common commands from the dashboard."})]}):t.jsx("div",{className:"scripts-modal-list",style:{display:"flex",flexDirection:"column",gap:"8px"},children:T.map(F=>t.jsx("div",{className:"script-card","data-testid":`script-${F.name}`,style:{padding:"12px 16px",border:"1px solid var(--border)",borderRadius:"8px",background:"var(--card)"},children:t.jsxs("div",{className:"script-card-header",style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[t.jsxs("div",{style:{flex:1,minWidth:0},children:[t.jsx("div",{style:{display:"flex",alignItems:"center",gap:"8px",marginBottom:"4px"},children:t.jsx("span",{style:{fontWeight:600,fontSize:"14px",fontFamily:"monospace"},children:F.name})}),t.jsx("div",{style:{fontSize:"12px",color:"var(--text-muted)",fontFamily:"monospace",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},title:F.command,children:sL(F.command)})]}),t.jsxs("div",{className:"script-card-actions",style:{display:"flex",gap:"4px",marginLeft:"8px",flexShrink:0},children:[t.jsxs("button",{className:"btn btn-secondary",onClick:()=>H(F.name,F.command),title:"Run script","aria-label":`Run ${F.name}`,"data-testid":`run-script-${F.name}`,style:{display:"flex",alignItems:"center",gap:"4px",padding:"4px 10px",fontSize:"12px"},children:[t.jsx(is,{size:12}),"Run"]}),t.jsx("button",{className:"btn-icon",onClick:()=>R(F.name,F.command),title:"Edit","aria-label":`Edit ${F.name}`,"data-testid":`edit-script-${F.name}`,children:t.jsx(Bn,{size:14,style:{transform:"rotate(45deg)"}})}),b===F.name?t.jsxs("div",{className:"script-delete-confirm",style:{display:"flex",gap:"4px",alignItems:"center"},children:[t.jsx("button",{className:"btn-icon",onClick:()=>Q(F.name),title:"Confirm delete","aria-label":`Confirm delete ${F.name}`,"data-testid":`confirm-delete-script-${F.name}`,style:{color:"var(--color-error)"},children:t.jsx(zn,{size:14})}),t.jsx("button",{className:"btn-icon",onClick:()=>y(null),title:"Cancel delete","aria-label":"Cancel delete","data-testid":`cancel-delete-script-${F.name}`,children:t.jsx(kn,{size:14})})]}):t.jsx("button",{className:"btn-icon",onClick:()=>y(F.name),title:"Delete","aria-label":`Delete ${F.name}`,"data-testid":`delete-script-${F.name}`,children:t.jsx(zn,{size:14})})]})]})},F.name))})]})})]})})}function aL(e,n,s){const[a,r]=i.useState([]),[o,l]=i.useState("."),[c,d]=i.useState(!1),[u,h]=i.useState(null),[m,f]=i.useState(0),p=i.useCallback(()=>{f(w=>w+1)},[]),g=i.useCallback(w=>{l(w),h(null)},[]);return i.useEffect(()=>{l("."),h(null),r([])},[e]),i.useEffect(()=>{if(!n||!e)return;let w=!1;async function v(){d(!0),h(null);try{const b=await h0(e,o==="."?void 0:o,s);w||r(b.entries)}catch(b){w||(h(Me(b)||"Failed to load files"),r([]))}finally{w||d(!1)}}return v(),()=>{w=!0}},[e,o,n,m,s]),{entries:a,currentPath:o,setPath:g,loading:c,error:u,refresh:p}}function rL(e,n,s,a){const[r,o]=i.useState(""),[l,c]=i.useState(""),[d,u]=i.useState(null),[h,m]=i.useState(!1),[f,p]=i.useState(!1),[g,w]=i.useState(null),v=i.useCallback(N=>{o(N),w(null)},[]);i.useEffect(()=>{if(!e||!n){o(""),c(""),u(null),w(null);return}let N=!1;async function S(){m(!0),w(null);try{const C=await p0(e,n,a);N||(o(C.content),c(C.content),u(C.mtime))}catch(C){N||(w(Me(C)||"Failed to load file"),o(""),c(""),u(null))}finally{N||m(!1)}}return S(),()=>{N=!0}},[e,n,s,a]);const b=r!==l,y=i.useCallback(async()=>{if(!(!e||!n||!b)){p(!0),w(null);try{const N=await f0(e,n,r,a);c(r),u(N.mtime)}catch(N){throw w(Me(N)||"Failed to save file"),N}finally{p(!1)}}},[e,n,r,b,a]);return{content:r,setContent:v,originalContent:l,loading:h,saving:f,error:g,save:y,hasChanges:b,mtime:d}}const oL=1e4;function lL(e){const s=e.replace(/[\\/]+$/,"").split(/[\\/]/).filter(Boolean);return s[s.length-1]||e||"Project Root"}function cL(e){return{id:e.id,label:e.id,title:e.title,worktree:e.worktree,kind:"task"}}function dL(e){const[n,s]=i.useState("Project Root"),[a,r]=i.useState([]),[o,l]=i.useState(!0),[c,d]=i.useState(null);return i.useEffect(()=>{let u=!1;async function h(){try{const f=await m0(e);if(u)return;s(lL(f.project)),r(f.tasks.map(cL)),d(null)}catch(f){u||d(Me(f)||"Failed to load workspaces")}finally{u||l(!1)}}h();const m=window.setInterval(()=>{h()},oL);return()=>{u=!0,window.clearInterval(m)}},[e]),{projectName:n,workspaces:a,loading:o,error:c}}function uL(e){return e===void 0?"":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function mL(e){return e?new Date(e).toLocaleDateString():""}function gg(e,n){return ME(e,n)}const wo={visible:!1,x:0,y:0,entry:null,entryFullPath:""},nu={type:null,entry:null,entryFullPath:""},hL=200,pL=500,bg=10;function fL({x:e,y:n,entry:s,onAction:a,onClose:r}){const o=i.useRef(null),[l,c]=i.useState({x:e,y:n});i.useEffect(()=>{const h=o.current;if(!h)return;const m=h.getBoundingClientRect(),f=window.visualViewport,p=f?.width&&f.width>0?f.width:window.innerWidth,g=f?.height&&f.height>0?f.height:window.innerHeight,w=f?.offsetLeft??0,v=f?.offsetTop??0,b=8;let y=e-w,N=n-v;y+m.width>p-b&&(y=p-b-m.width),N+m.height>g-b&&(N=g-b-m.height),y<b&&(y=b),N<b&&(N=b),c({x:y+w,y:N+v})},[e,n]),i.useEffect(()=>{const h=m=>{m.key==="Escape"&&r()};return document.addEventListener("keydown",h),()=>document.removeEventListener("keydown",h)},[r]);const d=s.type==="directory",u=[{id:"copy",label:"Copy",icon:ka,disabled:!1},{id:"move",label:"Move",icon:fj,disabled:!1},{id:"rename",label:"Rename",icon:Fs,disabled:!1},...d?[{id:"download-zip",label:"Download as ZIP",icon:Wr,disabled:!1}]:[{id:"download",label:"Download",icon:tk,disabled:!1}],{id:"divider",label:"",icon:ka,disabled:!0},{id:"delete",label:"Delete",icon:zn,disabled:!1}];return t.jsx("div",{className:"context-menu-overlay",onClick:r,children:t.jsx("div",{ref:o,className:"file-browser-context-menu",role:"menu","aria-label":"File operations",style:{left:l.x,top:l.y},onClick:h=>h.stopPropagation(),children:u.map(h=>h.id==="divider"?t.jsx("div",{className:"file-browser-context-menu__divider",role:"separator"},"divider"):t.jsxs("button",{role:"menuitem",className:`file-browser-context-menu__item ${h.disabled?"file-browser-context-menu__disabled":""} ${h.id==="delete"?"file-browser-context-menu__item--danger":""}`,disabled:h.disabled,onClick:()=>a(h.id),children:[t.jsx(h.icon,{size:14,className:"file-browser-context-menu__item-icon"}),t.jsx("span",{children:h.label})]},h.id))})})}function gL({type:e,entry:n,entryFullPath:s,onConfirm:a,onCancel:r,loading:o,error:l}){const c=i.useRef(null),d=e==="rename"?n.name:"",[u,h]=i.useState(d);i.useEffect(()=>{setTimeout(()=>c.current?.focus(),50)},[]),i.useEffect(()=>{if(e==="rename"&&c.current){const g=n.name.lastIndexOf(".");g>0?c.current.setSelectionRange(0,g):c.current.select()}},[e,n.name]);const m=g=>{g.key==="Enter"&&u.trim()&&a(u.trim()),g.key==="Escape"&&r()};if(e==="delete")return t.jsx("div",{className:"context-menu-overlay",onClick:r,children:t.jsxs("div",{className:"file-browser-dialog",onClick:g=>g.stopPropagation(),children:[t.jsxs("div",{className:"file-browser-dialog-title",children:["Delete ",n.type==="directory"?"Folder":"File"]}),t.jsxs("div",{className:"file-browser-dialog-message",children:["Are you sure you want to delete ",t.jsx("strong",{children:n.name}),"?",n.type==="directory"&&" This will delete all contents recursively."]}),l&&t.jsx("div",{className:"file-browser-dialog-error",children:l}),t.jsxs("div",{className:"file-browser-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:r,disabled:o,children:"Cancel"}),t.jsx("button",{className:"btn btn-danger btn-sm",onClick:()=>a(""),disabled:o,children:o?"Deleting...":"Delete"})]})]})});const p={copy:{title:"Copy",placeholder:"Destination path",confirm:"Copy"},move:{title:"Move",placeholder:"Destination path",confirm:"Move"},rename:{title:"Rename",placeholder:"New name",confirm:"Rename"}}[e];return t.jsx("div",{className:"context-menu-overlay",onClick:r,children:t.jsxs("div",{className:"file-browser-dialog",onClick:g=>g.stopPropagation(),children:[t.jsx("div",{className:"file-browser-dialog-title",children:p.title}),t.jsx("div",{className:"file-browser-dialog-info",children:e==="rename"?n.name:s}),t.jsx("input",{ref:c,className:"file-browser-dialog-input",type:"text",value:u,onChange:g=>h(g.target.value),placeholder:p.placeholder,onKeyDown:m,disabled:o}),l&&t.jsx("div",{className:"file-browser-dialog-error",children:l}),t.jsxs("div",{className:"file-browser-dialog-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:r,disabled:o,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>a(u.trim()),disabled:o||!u.trim(),children:o?`${p.confirm}ing...`:p.confirm})]})]})})}function bL({entries:e,currentPath:n,onSelectFile:s,onNavigate:a,loading:r,error:o,onRetry:l,workspace:c,onRefresh:d,projectId:u}){const[h,m]=i.useState(wo),[f,p]=i.useState(nu),[g,w]=i.useState(!1),[v,b]=i.useState(null),[y,N]=i.useState(!1),[S,C]=i.useState(null),x=i.useRef(null),k=i.useRef(null),R=i.useRef(null),z=i.useRef(!1),_=i.useCallback(()=>{x.current!==null&&(window.clearTimeout(x.current),x.current=null),k.current!==null&&(window.clearTimeout(k.current),k.current=null)},[]),A=i.useCallback(()=>{_(),R.current=null,N(!1),C(null)},[_]);i.useEffect(()=>()=>{_()},[_]);const Q=i.useCallback((P,$,j,q)=>{m({visible:!0,x:P,y:$,entry:j,entryFullPath:q})},[]),H=i.useCallback((P,$,j)=>{if(P.touches.length!==1)return;const q=P.touches[0];q&&(A(),R.current={x:q.clientX,y:q.clientY},k.current=window.setTimeout(()=>{N(!0),C(j)},hL),x.current=window.setTimeout(()=>{const de=R.current;de&&(z.current=!0,N(!1),C(null),_(),Q(de.x,de.y,$,j))},pL))},[A,_,Q]),M=i.useCallback(P=>{const $=R.current,j=P.touches[0];!$||!j||(Math.abs(j.clientX-$.x)>bg||Math.abs(j.clientY-$.y)>bg)&&A()},[A]),T=i.useCallback(()=>{A()},[A]);i.useEffect(()=>{if(!h.visible)return;const P=document.querySelector(".file-browser-list"),$=()=>{z.current=!1,A(),m(wo)};return P?.addEventListener("scroll",$),()=>P?.removeEventListener("scroll",$)},[A,h.visible]),i.useEffect(()=>{if(!h.visible)return;const P=$=>{$.key==="Escape"&&(z.current=!1,m(wo))};return document.addEventListener("keydown",P),()=>document.removeEventListener("keydown",P)},[h.visible]);const F=i.useCallback((P,$)=>{P.preventDefault(),P.stopPropagation(),A(),z.current=!1,Q(P.clientX,P.clientY,$,gg(n,$.name))},[A,n,Q]),W=i.useCallback(P=>{if(!h.entry)return;z.current=!1;const $=h.entry,j=h.entryFullPath;if(m(wo),P==="download"){if(!c)return;const q=Kb(c,j,u);window.open(Ci(q),"_blank");return}if(P==="download-zip"){if(!c)return;const q=w0(c,j,u);window.open(Ci(q),"_blank");return}p({type:P,entry:$,entryFullPath:j}),b(null)},[h,c,u]),oe=i.useCallback(async P=>{if(!(!f.type||!f.entry||!c)){w(!0),b(null);try{switch(f.type){case"copy":await b0(c,f.entryFullPath,P,u);break;case"move":await x0(c,f.entryFullPath,P,u);break;case"rename":await y0(c,f.entryFullPath,P,u);break;case"delete":await v0(c,f.entryFullPath,u);break}p(nu),d?.()}catch($){b(Me($)||"Operation failed")}finally{w(!1)}}},[f,c,d,u]),D=i.useCallback(()=>{p(nu),b(null)},[]),E=i.useCallback((P,$)=>{if(z.current){z.current=!1;return}h.visible||(P.type==="directory"?a($):s($))},[h.visible,a,s]);return r?t.jsxs("div",{className:"file-browser-loading",children:[t.jsx(_t,{className:"spin",size:24}),t.jsx("span",{children:"Loading files..."})]}):o?t.jsxs("div",{className:"file-browser-error",children:[t.jsxs("p",{children:["Error: ",o]}),l&&t.jsx("button",{className:"btn btn-sm",onClick:l,children:"Retry"})]}):t.jsxs("div",{className:"file-browser",children:[t.jsxs("div",{className:"file-browser-header",children:[n!=="."&&t.jsxs("button",{className:"file-browser-up",onClick:()=>{a(AE(n))},children:[t.jsx(Vn,{size:16,style:{transform:"rotate(-90deg)"}}),"Up one level"]}),t.jsx("span",{className:"file-browser-path",children:n==="."?"Root":Qr(n)})]}),t.jsx("div",{className:"file-browser-list",children:e.length===0?t.jsx("div",{className:"file-browser-empty",children:"(empty directory)"}):e.map(P=>{const $=gg(n,P.name),j=y&&S===$;return t.jsxs("div",{className:`file-node file-node--${P.type} ${j?"file-node--long-pressing":""}`,onClick:()=>E(P,$),onContextMenu:q=>F(q,P),onTouchStart:q=>H(q,P,$),onTouchMove:M,onTouchEnd:T,onTouchCancel:T,children:[t.jsx("div",{className:"file-node-icon",children:P.type==="directory"?t.jsx(ks,{size:16}):t.jsx(Rb,{size:16})}),t.jsx("div",{className:"file-node-name",children:P.name}),P.type==="file"&&P.size!==void 0&&t.jsx("div",{className:"file-node-size",children:uL(P.size)}),P.mtime&&t.jsx("div",{className:"file-node-time",children:mL(P.mtime)})]},P.name)})}),h.visible&&h.entry&&t.jsx(fL,{x:h.x,y:h.y,entry:h.entry,onAction:W,onClose:()=>{z.current=!1,m(wo)}}),f.type&&f.entry&&t.jsx(gL,{type:f.type,entry:f.entry,entryFullPath:f.entryFullPath,onConfirm:oe,onCancel:D,loading:g,error:v})]})}function xL(e){if(!e)return null;const n=e.toLowerCase();return n.endsWith(".js")||n.endsWith(".mjs")||n.endsWith(".cjs")||n.endsWith(".jsx")?Qm({jsx:!0}):n.endsWith(".ts")||n.endsWith(".tsx")?Qm({jsx:!0,typescript:!0}):n.endsWith(".css")?rw():n.endsWith(".json")?ow():n.endsWith(".md")||n.endsWith(".markdown")||n.endsWith(".mdx")?lw():null}function vL(e){if(!e)return!1;const n=e.toLowerCase();return n.endsWith(".md")||n.endsWith(".markdown")||n.endsWith(".mdx")}function xg(){return document.documentElement.dataset.theme!=="light"}function vg(e){return e?[dw]:[uw(mw)]}function yL({content:e,onChange:n,readOnly:s,filePath:a,showLineNumbers:r=!1,onToggleLineNumbers:o,canToggleLineNumbers:l=!0,toolbarExpanded:c,toolbarActionsId:d}){const[u,h]=i.useState(!1),[m,f]=i.useState(!0),[p,g]=i.useState(!1),w=c!==void 0,v=w?c:p,b=i.useRef(null),y=i.useRef(null),N=i.useRef(!1),S=i.useRef(n);S.current=n;const C=i.useRef(new io),x=i.useRef(new io),k=i.useRef(new io),R=i.useRef(new io),z=i.useRef(new io),_=vL(a),A=i.useId(),Q=d??A,[H,M]=i.useState(()=>xg()),T=_&&(s?!0:u),F=r&&!s&&!T,W=!!o&&l&&!s&&!T,oe=_||!s||W,D=i.useMemo(()=>xL(a),[a]),E=i.useCallback(()=>h(!1),[]),P=i.useCallback(()=>h(!0),[]),$=i.useCallback(()=>f(q=>!q),[]),j=i.useCallback(()=>{w||g(q=>!q)},[w]);return i.useEffect(()=>{if(!b.current||T)return;const q=ao.theme({"&":{height:"100%",fontFamily:"var(--font-mono)",backgroundColor:"var(--bg)",color:"var(--text)"},".cm-gutters":{backgroundColor:"var(--surface)",color:"var(--text-muted)",borderRight:"calc(var(--space-xs) * 0.25) solid var(--border)"},"&.cm-focused":{outline:"none"}}),de=Xm.create({doc:e,extensions:[C.current.of(F?cw():[]),x.current.of(m?ao.lineWrapping:[]),k.current.of(s?[Xm.readOnly.of(!0),ao.editable.of(!1)]:[]),R.current.of(D??[]),z.current.of(vg(H)),q,ao.updateListener.of(Ce=>{!Ce.docChanged||N.current||S.current(Ce.state.doc.toString())})]}),be=new ao({state:de,parent:b.current});return y.current=be,()=>{y.current=null,be.destroy()}},[e,T,D,s,F,m]),i.useEffect(()=>{const q=new MutationObserver(()=>{M(xg())});return q.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>q.disconnect()},[]),i.useEffect(()=>{const q=y.current;q&&q.dispatch({effects:z.current.reconfigure(vg(H))})},[H]),i.useEffect(()=>{const q=y.current;!q||q.state.doc.toString()===e||(N.current=!0,q.dispatch({changes:{from:0,to:q.state.doc.length,insert:e}}),N.current=!1)},[e]),t.jsxs("div",{className:"file-editor-container",children:[oe&&(v||!w)?t.jsxs("div",{className:`file-editor-toolbar ${v?"file-editor-toolbar--expanded":""}`,children:[!w&&t.jsx("button",{className:"btn btn-sm btn-icon file-editor-toolbar-button",onClick:j,"aria-label":"Toggle editor options",title:"Toggle editor options","aria-expanded":v,"aria-controls":Q,children:v?t.jsx(hi,{size:14}):t.jsx(Cn,{size:14})}),t.jsxs("div",{className:"file-editor-toolbar-actions",id:Q,hidden:!v,children:[_?t.jsxs(t.Fragment,{children:[!s&&t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${T?"":"btn-primary"}`,onClick:E,disabled:!T,"aria-label":"Edit mode",children:[t.jsx(Ab,{size:14}),"Edit"]}),t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${T?"btn-primary":""}`,onClick:P,disabled:T,"aria-label":"Preview mode",children:[t.jsx(Gr,{size:14}),"Preview"]})]}):null,W&&t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${r?"btn-primary":""}`,onClick:o,"aria-label":"Toggle line numbers","aria-pressed":r,title:"Toggle line numbers",children:[t.jsx(Yk,{size:14}),t.jsx("span",{children:"Line #"})]}),!s&&t.jsxs("button",{className:`btn btn-sm file-editor-toolbar-button ${m?"btn-primary":""}`,onClick:$,"aria-label":"Toggle word wrap",title:"Toggle word wrap",children:[t.jsx(tm,{size:14}),t.jsx("span",{children:"Wrap"})]})]})]}):null,T?t.jsx("div",{className:"file-editor-preview markdown-body",children:t.jsx(ei,{remarkPlugins:[ti],children:e})}):t.jsx("div",{className:"file-editor-codemirror",ref:b,"aria-label":a?`Editor for ${a}`:"File editor"})]})}function wL(e,n=44){if(e)return e.length<=n?e:`${e.slice(0,n-1)}…`}function kL({currentWorkspace:e,projectName:n,workspaces:s,onSelect:a}){const[r,o]=i.useState(!1),l=typeof e=="string"?e:"project",c=i.useMemo(()=>l==="project"?n||"Project Root":s.find(u=>u.id===l)?.label??l,[l,n,s]);return t.jsxs("div",{className:"workspace-selector",children:[t.jsxs("button",{type:"button",className:"workspace-selector-trigger",onClick:()=>o(d=>!d),"aria-haspopup":"listbox","aria-expanded":r,children:[l==="project"?t.jsx(nh,{size:14}):t.jsx(bu,{size:14}),t.jsx("span",{className:"workspace-selector-trigger-label",children:c}),t.jsx(Cn,{size:14,className:`workspace-selector-trigger-icon${r?" open":""}`})]}),r&&t.jsxs("div",{className:"workspace-selector-menu",role:"listbox","aria-label":"Select workspace",children:[t.jsxs("button",{type:"button",className:`workspace-selector-option${l==="project"?" active":""}`,onClick:()=>{a("project"),o(!1)},children:[t.jsxs("div",{className:"workspace-selector-option-main",children:[t.jsx(nh,{size:14}),t.jsx("span",{children:"Project Root"})]}),t.jsx("span",{className:"workspace-selector-option-meta",children:n})]}),s.length>0&&t.jsxs("div",{className:"workspace-selector-group",children:[t.jsx("div",{className:"workspace-selector-group-label",children:"Task Worktrees"}),s.map(d=>t.jsxs("button",{type:"button",className:`workspace-selector-option${l===d.id?" active":""}`,onClick:()=>{a(d.id),o(!1)},children:[t.jsxs("div",{className:"workspace-selector-option-main",children:[t.jsx(bu,{size:14}),t.jsx("span",{children:d.id})]}),d.title&&t.jsx("span",{className:"workspace-selector-option-meta",title:d.title,children:wL(d.title)})]},d.id))]})]})]})}const jL=768,NL=280,Bl=180,Ul=500,yg="fusion:file-browser-sidebar-width",wg="kb-files-line-numbers",dy=new Set([".png",".jpg",".jpeg",".gif",".webp",".ico",".bmp",".svgz"]),SL=new Set([...dy,".exe",".dll",".so",".dylib",".zip",".tar",".gz",".bz2",".xz",".7z",".rar",".pdf",".doc",".docx",".xls",".xlsx",".ppt",".pptx",".mp3",".mp4",".avi",".mov",".webm",".mkv",".flv",".woff",".woff2",".ttf",".otf",".eot",".wasm",".bin"]);function ko(e){const n=e.slice(e.lastIndexOf(".")).toLowerCase();return SL.has(n)}function CL(e){const n=e.slice(e.lastIndexOf(".")).toLowerCase();return dy.has(n)}function EL(e){const n=e.replace(/\\/g,"/").replace(/^\.\//,"").replace(/\/$/,""),s=n.lastIndexOf("/");return s>0?n.slice(0,s):"."}function _L({initialWorkspace:e="project",initialFile:n=null,onClose:s,onWorkspaceChange:a,projectId:r}){const{projectName:o,workspaces:l}=dL(r),c=i.useRef(null);Ui(c,!0,"fusion:files-modal-size");const d=aa(s),[u,h]=i.useState(e),[m,f]=i.useState(null),[p,g]=i.useState(!1),[w,v]=i.useState("list"),[b,y]=i.useState(NL),[N,S]=i.useState(!1),[C,x]=i.useState(!1),k=i.useId(),{entries:R,currentPath:z,setPath:_,loading:A,error:Q,refresh:H}=aL(u,!0,r),{content:M,setContent:T,originalContent:F,loading:W,saving:oe,error:D,save:E,hasChanges:P,mtime:$}=rL(u,m,!0,r);i.useEffect(()=>{h(e)},[e]),i.useEffect(()=>{const L=()=>{g(window.innerWidth<=jL)};return L(),window.addEventListener("resize",L),()=>window.removeEventListener("resize",L)},[]),i.useEffect(()=>{m||v("list"),x(!1)},[m]),i.useEffect(()=>{if(!n){f(null);return}f(n),_(EL(n)),p&&v("editor")},[n,p,_]),i.useEffect(()=>{try{const L=localStorage.getItem(yg);if(!L)return;const Y=Number.parseInt(L,10);if(!Number.isNaN(Y)){const me=Math.max(Bl,Math.min(Ul,Y));y(me)}}catch{}},[]),i.useEffect(()=>{const L=Wn(wg,r);S(L==="true")},[r]),i.useEffect(()=>{const L=Y=>{Y.key==="Escape"&&s(),(Y.metaKey||Y.ctrlKey)&&Y.key==="s"&&(Y.preventDefault(),P&&!oe&&E())};return document.addEventListener("keydown",L),()=>document.removeEventListener("keydown",L)},[s,P,oe,E]);const j=i.useCallback(L=>{f(L),p&&v("editor")},[p]),q=i.useCallback(()=>{v("list")},[]),de=i.useCallback(()=>{T(F)},[F,T]),be=i.useCallback(L=>{h(L),f(null),v("list"),a?.(L)},[a]),Ce=i.useCallback(L=>{try{localStorage.setItem(yg,String(L))}catch{}},[]),Ae=i.useCallback(L=>{if(p)return;L.preventDefault(),L.stopPropagation();const Y=L.currentTarget;typeof Y.setPointerCapture=="function"&&Y.setPointerCapture(L.pointerId);const me=L.clientX,B=b;let xe=B;document.body.style.userSelect="none";const Ne=Be=>{const $e=Be.clientX-me,ct=Math.max(Bl,Math.min(Ul,B+$e));xe=ct,y(ct)},te=Be=>{typeof Y.releasePointerCapture=="function"&&Y.releasePointerCapture(Be.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",Ne),document.removeEventListener("pointerup",te),Ce(xe)};document.addEventListener("pointermove",Ne),document.addEventListener("pointerup",te)},[p,Ce,b]),ae=i.useCallback(L=>{if(p)return;const Y=20;if(L.key!=="ArrowLeft"&&L.key!=="ArrowRight")return;L.preventDefault();const me=L.key==="ArrowLeft"?-Y:Y,B=Math.max(Bl,Math.min(Ul,b+me));y(B),Ce(B)},[p,Ce,b]),X=i.useCallback(()=>{S(L=>{const Y=!L;return ss(wg,String(Y),r),Y})},[r]),ie=`Files — ${i.useMemo(()=>u==="project"?"Project":l.find(L=>L.id===u)?.id??u,[u,l])}`,ye=i.useMemo(()=>!m||!CL(m)?null:Kb(u,m,r),[m,u,r]),ee=L=>{const Y=new Blob([L]).size;return Y<1024?`${Y} B`:`${(Y/1024).toFixed(1)} KB`};return t.jsx("div",{className:"modal-overlay open",...d,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal file-browser-modal",ref:c,children:[t.jsxs("div",{className:"modal-header file-browser-modal-header",children:[t.jsxs("div",{className:"file-browser-header-title",children:[t.jsx(ks,{size:18}),t.jsx("span",{children:ie}),m&&t.jsx("span",{className:"file-browser-header-path",children:m})]}),t.jsxs("div",{className:"file-browser-header-actions",children:[t.jsx(kL,{currentWorkspace:u,projectName:o,workspaces:l,onSelect:be}),t.jsx("button",{className:"modal-close",onClick:s,"aria-label":"Close",children:t.jsx(kn,{size:20})})]})]}),t.jsxs("div",{className:"file-browser-body",children:[t.jsx("div",{className:`file-browser-sidebar ${p?"mobile":""} ${w==="list"?"active":""}`,style:p?void 0:{width:`${b}px`},children:t.jsx(bL,{entries:R,currentPath:z,onSelectFile:j,onNavigate:_,loading:A,error:Q,onRetry:H,workspace:u,onRefresh:H,projectId:r})}),!p&&t.jsx("div",{className:"file-browser-resize-handle",role:"separator","aria-orientation":"vertical","aria-valuemin":Bl,"aria-valuemax":Ul,"aria-valuenow":b,"aria-label":"Resize sidebar",tabIndex:0,onPointerDown:Ae,onKeyDown:ae}),t.jsx("div",{className:`file-browser-content ${p?"mobile":""} ${w==="editor"?"active":""}`,children:m?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"file-browser-toolbar",children:[t.jsxs("div",{className:"file-browser-file-info",children:[p&&w==="editor"&&t.jsxs("button",{className:"file-browser-back-button",onClick:q,"aria-label":"Back to file list",children:[t.jsx(er,{size:16}),t.jsx("span",{children:"Back"})]}),!ko(m)&&t.jsx("button",{className:"btn btn-sm btn-icon file-editor-toolbar-button",onClick:()=>x(L=>!L),"aria-label":"Toggle editor options",title:"Toggle editor options","aria-expanded":C,"aria-controls":k,children:C?t.jsx(hi,{size:14}):t.jsx(Cn,{size:14})}),m,ko(m)&&t.jsxs("span",{className:"file-browser-binary-indicator",children:[t.jsx(vk,{size:12}),"Binary file — read only"]}),$&&t.jsxs("span",{className:"file-browser-mtime",children:["Modified: ",new Date($).toLocaleString()]}),W&&t.jsx("span",{className:"file-browser-loading",children:"Loading..."})]}),t.jsx("div",{className:"file-browser-actions",children:!ye&&P&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm",onClick:de,disabled:oe,children:[t.jsx(Aj,{size:14}),"Discard"]}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>void E(),disabled:oe,children:[t.jsx(Db,{size:14}),oe?"Saving...":"Save"]})]})})]}),D&&!ye&&t.jsx("div",{className:"file-browser-error-banner",children:D}),ye?t.jsx("div",{className:"file-browser-image-preview",children:t.jsx("img",{src:ye,alt:m??"",className:"file-browser-image"})}):t.jsx("div",{className:"file-editor-wrapper",children:t.jsx(yL,{content:M,onChange:T,filePath:m,readOnly:ko(m),showLineNumbers:N&&!ko(m),onToggleLineNumbers:X,canToggleLineNumbers:!ko(m),toolbarExpanded:C,toolbarActionsId:k})}),!ye&&t.jsxs("div",{className:"file-browser-footer",children:[t.jsx("span",{children:ee(M)}),P&&t.jsx("span",{className:"file-browser-unsaved",children:"Unsaved changes"})]})]}):t.jsxs("div",{className:"file-browser-placeholder",children:[t.jsx(ks,{size:48,opacity:.3}),t.jsx("p",{children:"Select a file to edit"})]})})]})]})})}const ML=i.lazy(()=>Rn(()=>import("./TodoView-hbD0NOCY.js"),__vite__mapDeps([13,1,6,7,8,14])).then(e=>({default:e.TodoView})));function AL({onClose:e,projectId:n,addToast:s,onPlanningMode:a}){const r=aa(e),l=si()==="mobile",{keyboardOverlap:c,viewportHeight:d,viewportOffsetTop:u,keyboardOpen:h}=oa({enabled:l});_i(l);const m=h?{"--keyboard-overlap":`${c}px`,"--vv-offset-top":`${u}px`,...d!==null?{"--vv-height":`${d}px`}:{}}:{};return i.useEffect(()=>{const f=p=>{p.key==="Escape"&&e()};return document.addEventListener("keydown",f),()=>document.removeEventListener("keydown",f)},[e]),t.jsx("div",{className:"modal-overlay open",...r,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal todo-modal",style:m,children:[t.jsxs("div",{className:"modal-header todo-modal-header",children:[t.jsxs("div",{className:"todo-modal-header-title",children:[t.jsx(Kk,{size:18}),t.jsxs("div",{children:[t.jsx("h2",{children:"Todos"}),t.jsx("p",{children:"Manage reusable todo lists for your project."})]})]}),t.jsx("button",{className:"modal-close",onClick:e,"aria-label":"Close",children:t.jsx(kn,{size:20})})]}),t.jsx("div",{className:"todo-modal-body",children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(ML,{projectId:n,addToast:s,onPlanningMode:a,onClose:e,mobileKeyboardActive:l&&h})})})]})})}function RL(e={}){const{pollInterval:n=3e4,autoRefresh:s=!0}=e,[a,r]=i.useState({providers:[],loading:!0,error:null,lastUpdated:null}),o=i.useRef(null),l=i.useRef(null),c=i.useCallback(async(u=!1)=>{l.current&&l.current.abort(),l.current=new AbortController,u&&r(h=>({...h,loading:!0,error:null}));try{const{providers:h}=await fS();r({providers:h,loading:!1,error:null,lastUpdated:new Date})}catch(h){if(h instanceof Error&&h.name==="AbortError")return;r(m=>({...m,loading:!1,error:Me(h)||"Failed to fetch usage data"}))}},[]);i.useEffect(()=>{c()},[c]),i.useEffect(()=>{if(s)return o.current=setInterval(()=>{c(!1)},n),()=>{o.current&&(clearInterval(o.current),o.current=null)}},[s,n,c]),i.useEffect(()=>()=>{l.current&&l.current.abort(),o.current&&clearInterval(o.current)},[]);const d=i.useCallback(()=>c(!0),[c]);return{providers:a.providers,loading:a.loading,error:a.error,lastUpdated:a.lastUpdated,refresh:d}}function IL(e){const n=new Date(e),s=new Date,a=n.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0});if(n.toDateString()===s.toDateString())return a;const o=new Date(s.getFullYear(),s.getMonth(),s.getDate()),l=new Date(n.getFullYear(),n.getMonth(),n.getDate()),c=Math.round((l.getTime()-o.getTime())/(1440*60*1e3));return c>=1&&c<=7?`${n.toLocaleDateString(void 0,{weekday:"short"})} ${a}`:`${n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}, ${a}`}function TL(e){return e>90?"usage-progress-fill--high":e>70?"usage-progress-fill--medium":"usage-progress-fill--low"}const uy="kb-usage-hidden-windows",my="kb-usage-modal-size",hy="kb-usage-provider-order";function kg(e){const n=Wn(my,e);if(!n)return null;try{const s=JSON.parse(n);if(s&&typeof s.width=="number"&&typeof s.height=="number"&&s.width>0&&s.height>0)return{width:s.width,height:s.height}}catch{}return null}function jg(e){const n=Wn(uy,e);if(!n)return{};try{const s=JSON.parse(n);return!s||typeof s!="object"?{}:Object.entries(s).reduce((a,[r,o])=>{if(Array.isArray(o)){const l=o.filter(c=>typeof c=="string");l.length>0&&(a[r]=l)}return a},{})}catch{return{}}}function PL(e,n){ss(uy,JSON.stringify(e),n)}function Ng(e){const n=Wn(hy,e);if(!n)return[];try{const s=JSON.parse(n);return Array.isArray(s)?s.filter(a=>typeof a=="string"):[]}catch{return[]}}function Sg(e,n){ss(hy,JSON.stringify(e),n)}function py(e,n,s){return s[e]?.includes(n)??!1}function $L({window:e,viewMode:n,isHidden:s,onToggleHidden:a}){const r=TL(e.percentUsed),o=n==="remaining",l=Math.round(o?e.percentLeft:e.percentUsed),c=o?`${Math.round(e.percentLeft)}% remaining`:`${Math.round(e.percentUsed)}% used`,d=o?`${Math.round(e.percentUsed)}% used`:`${Math.round(e.percentLeft)}% left`;let u=e.resetText;if(!u&&e.resetAt){const v=new Date(e.resetAt).getTime()-Date.now();if(v>0){const b=Math.floor(v/36e5),y=Math.floor(b/24),N=b%24;y>0&&N>0?u=`resets in ${y}d ${N}h`:y>0?u=`resets in ${y}d`:b>0?u=`resets in ${b}h`:u=`resets in ${Math.floor(v/6e4)}m`}}const h=e.pace,m=h!==void 0;let f=0;m&&(f=o?100-h.percentElapsed:h.percentElapsed);const p=h?.status==="ahead",g=h?.status==="behind",w=h?.status==="on-track";return t.jsxs("div",{className:`usage-window ${s?"usage-window--hidden":""}`,children:[t.jsxs("div",{className:"usage-window-header",children:[t.jsx("span",{className:"usage-window-label",children:e.label}),t.jsxs("div",{className:"usage-window-header-controls",children:[!s&&t.jsx("span",{className:"usage-window-percentage",children:c}),!s&&t.jsx("button",{className:"btn-icon usage-window-hide-btn",onClick:a,"aria-label":`Hide ${e.label}`,"data-testid":"usage-window-hide-btn",children:t.jsx(Gr,{size:14})})]})]}),t.jsxs("div",{className:"usage-progress-wrapper",children:[t.jsx("div",{className:"usage-progress-bar",children:t.jsx("div",{className:`usage-progress-fill ${r}`,style:{width:`${l}%`},role:"progressbar","aria-valuenow":l,"aria-valuemin":0,"aria-valuemax":100,"aria-label":`${e.label}: ${c}`})}),m&&t.jsx("div",{className:"usage-pace-marker",style:{left:`${f}%`},"aria-hidden":"true","data-testid":"pace-marker"})]}),t.jsxs("div",{className:"usage-window-footer",children:[t.jsx("span",{className:"usage-window-left",children:d}),t.jsxs("span",{className:"usage-window-reset-group",children:[u&&t.jsx("span",{className:"usage-window-reset",children:u}),e.resetAt&&t.jsx("span",{className:"usage-window-reset-at",children:IL(e.resetAt)})]})]}),m&&t.jsxs("div",{className:"usage-pace-row","data-testid":"pace-row",children:[p&&t.jsxs(t.Fragment,{children:[t.jsx(Kr,{size:14,className:"pace-icon pace-ahead"}),t.jsx("span",{className:"pace-text pace-ahead",children:h.message})]}),g&&t.jsxs(t.Fragment,{children:[t.jsx(Qj,{size:14,className:"pace-icon pace-behind"}),t.jsx("span",{className:"pace-text pace-behind",children:h.message})]}),w&&t.jsxs(t.Fragment,{children:[t.jsx(Xn,{size:14,className:"pace-icon pace-ontrack"}),t.jsx("span",{className:"pace-text pace-ontrack",children:h.message})]})]})]})}function DL(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 LL({provider:e,viewMode:n,hiddenWindows:s,onToggleWindow:a,onShowAllHidden:r,isDragging:o,isDragOver:l,dragOverPosition:c,onDragStart:d,onDragOver:u,onDragLeave:h,onDrop:m,onDragEnd:f,isTouchReorderMode:p,canMoveUp:g,canMoveDown:w,onMoveUp:v,onMoveDown:b}){const y=s[e.name]?.length??0,N=()=>{switch(e.status){case"ok":return null;case"error":return t.jsx("span",{className:"usage-status-badge usage-status-badge--error",children:"Error"});case"no-auth":default:return t.jsx("span",{className:"usage-status-badge usage-status-badge--not-configured",children:"Not configured"})}};return t.jsxs("div",{className:`usage-provider${o?" usage-provider--dragging":""}${l&&c==="before"?" usage-provider--drag-over-before":""}${l&&c==="after"?" usage-provider--drag-over-after":""}`,"data-provider":e.name,"data-status":e.status,draggable:!p,onDragStart:p?void 0:d,onDragOver:p?void 0:u,onDragLeave:p?void 0:h,onDrop:p?void 0:m,onDragEnd:p?void 0:f,children:[t.jsxs("div",{className:"usage-provider-header",children:[t.jsxs("div",{className:"usage-provider-info",children:[t.jsx(Gn,{provider:DL(e.name),size:"md"}),t.jsx("span",{className:"usage-provider-name",children:e.name}),y>0&&t.jsxs("button",{className:"btn btn-sm usage-show-hidden-btn",onClick:()=>r(e.name),"data-testid":"usage-show-hidden-btn",children:["Show hidden (",y,")"]})]}),t.jsxs("div",{className:"usage-provider-actions",children:[p&&t.jsxs("div",{className:"usage-provider-reorder-controls",role:"group","aria-label":`Reorder ${e.name}`,children:[t.jsx("button",{className:"btn-icon usage-provider-reorder-btn",type:"button",onClick:v,disabled:!g,"aria-label":`Move ${e.name} up`,children:t.jsx(hi,{size:14})}),t.jsx("button",{className:"btn-icon usage-provider-reorder-btn",type:"button",onClick:b,disabled:!w,"aria-label":`Move ${e.name} down`,children:t.jsx(Cn,{size:14})})]}),N(),t.jsx("div",{className:"usage-provider-drag-handle","aria-hidden":"true",children:t.jsx(Sc,{size:16})})]})]}),e.error&&t.jsx("div",{className:"usage-provider-error",children:e.error}),e.plan&&t.jsx("div",{className:"usage-provider-meta",children:t.jsx("span",{className:"usage-provider-plan",children:e.plan})}),e.windows.length>0?t.jsx("div",{className:"usage-provider-windows",children:e.windows.map((S,C)=>{const x=py(e.name,S.label,s);return t.jsx($L,{window:S,viewMode:n,isHidden:x,onToggleHidden:()=>a(e.name,S.label)},`${e.name}-${S.label}-${C}`)})}):e.status==="ok"?t.jsx("div",{className:"usage-provider-empty",children:"No usage data available"}):null]})}function OL(){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 FL({isOpen:e,onClose:n,projectId:s,anchorRect:a}){const{providers:r,loading:o,error:l,lastUpdated:c,refresh:d}=RL({autoRefresh:e}),[u,h]=i.useState(!1),[m,f]=i.useState(()=>typeof window<"u"?window.innerWidth>=769:!1),[p,g]=i.useState(()=>typeof window>"u"?!1:window.matchMedia?.("(pointer: coarse)").matches??!1),[w,v]=i.useState("used"),[b,y]=i.useState(()=>jg(s)),[N,S]=i.useState(()=>Ng(s)),[C,x]=i.useState(null),[k,R]=i.useState(null),[z,_]=i.useState(null),A=i.useRef(null),Q=i.useRef(null),H=i.useRef(e),M=i.useRef(!1),[T,F]=i.useState(()=>kg(s));i.useEffect(()=>{F(kg(s))},[s]),i.useEffect(()=>{if(!e||!m)return;const B=Q.current;if(!B||typeof ResizeObserver>"u")return;let xe=null;const Ne=new ResizeObserver(te=>{const Be=te[0];if(!Be)return;const{width:$e,height:ct}=Be.contentRect;$e<=0||ct<=0||(xe&&clearTimeout(xe),xe=setTimeout(()=>{ss(my,JSON.stringify({width:Math.round($e),height:Math.round(ct)}),s)},250))});return Ne.observe(B),()=>{xe&&clearTimeout(xe),Ne.disconnect()}},[e,m,s]),i.useEffect(()=>{e||(M.current=!1)},[e]),i.useEffect(()=>{r.length>0&&(M.current=!0)},[r.length]),i.useEffect(()=>{if(typeof window>"u")return;const B=window.matchMedia?.("(pointer: coarse)"),xe=()=>{f(window.innerWidth>=769),g(B?.matches??!1)};return xe(),window.addEventListener("resize",xe),B?.addEventListener?.("change",xe),()=>{window.removeEventListener("resize",xe),B?.removeEventListener?.("change",xe)}},[]),i.useEffect(()=>{!H.current&&e&&(!c||Date.now()-c.getTime()>5e3)&&d(),H.current=e},[e,c,d]),i.useEffect(()=>{const B=Wn("kb-usage-view-mode",s);if(B==="used"||B==="remaining"){v(B);return}v("used")},[s]);const W=i.useCallback(B=>{v(B),ss("kb-usage-view-mode",B,s)},[s]);i.useEffect(()=>{y(jg(s)),S(Ng(s))},[s]),i.useEffect(()=>{PL(b,s)},[b,s]);const oe=i.useCallback((B,xe)=>{y(Ne=>{if(py(B,xe,Ne)){const te=(Ne[B]??[]).filter(Be=>Be!==xe);if(te.length===0){const{[B]:Be,...$e}=Ne;return $e}return{...Ne,[B]:te}}return{...Ne,[B]:[...Ne[B]??[],xe]}})},[]),D=i.useCallback(B=>{y(xe=>{if(!xe[B])return xe;const{[B]:Ne,...te}=xe;return te})},[]),E=i.useCallback(B=>{if(N.length===0)return B;const xe=new Map(B.map(te=>[te.name,te])),Ne=[];for(const te of N){const Be=xe.get(te);Be&&(Ne.push(Be),xe.delete(te))}return[...Ne,...xe.values()]},[N]),P=i.useCallback((B,xe)=>{B.dataTransfer.effectAllowed="move",B.dataTransfer.setData("text/plain",xe),x(xe)},[]),$=i.useCallback((B,xe)=>{if(!C||C===xe)return;B.preventDefault(),B.dataTransfer.dropEffect="move";const{top:Ne,height:te}=B.currentTarget.getBoundingClientRect(),Be=Ne+te/2,$e=B.clientY<Be?"before":"after";R(xe),_($e)},[C]),j=i.useCallback((B,xe)=>{B.preventDefault();const Ne=C??B.dataTransfer.getData("text/plain");if(!Ne||Ne===xe){R(null),_(null);return}const Be=E(r).map(De=>De.name).filter(De=>De!==Ne),$e=Be.indexOf(xe);if($e<0){R(null),_(null);return}const ct=z==="after"?$e+1:$e;Be.splice(ct,0,Ne),Sg(Be,s),S(Be),R(null),_(null)},[C,z,s,r,E]),q=i.useCallback(()=>{x(null),R(null),_(null)},[]),de=i.useCallback((B,xe)=>{const Ne=E(r).map(De=>De.name),te=Ne.indexOf(B),Be=te+xe;if(te<0||Be<0||Be>=Ne.length)return;const $e=[...Ne],[ct]=$e.splice(te,1);$e.splice(Be,0,ct),Sg($e,s),S($e)},[s,r,E]),be=i.useCallback(async()=>{h(!0),await d(),h(!1)},[d]);i.useEffect(()=>{if(!e)return;const B=xe=>{xe.key==="Escape"&&n()};return document.addEventListener("keydown",B),()=>document.removeEventListener("keydown",B)},[e,n]);const Ce=i.useCallback(B=>{B.target===B.currentTarget&&n()},[n]);if(!e)return null;const Ae=!!(a&&m),ae=8,X=12,ie=T?.width??420,ye=Ae?Math.min((a?.bottom??0)+ae,window.innerHeight-X):void 0,ee=Ae?Math.max(8,(a?.right??0)-ie):void 0,L=m&&T?{width:T.width,height:T.height}:{},Y=E(r),me=t.jsxs("div",{ref:Q,className:`usage-modal${Ae?" usage-modal--popover":" modal"}`,"data-testid":"usage-modal",style:Ae?{position:"fixed",top:ye,left:ee,...L}:L,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"usage-header",children:[t.jsx(Bs,{size:18,className:"usage-header-icon"}),t.jsx("h3",{children:"Usage"})]}),t.jsxs("div",{className:"usage-header-actions",children:[t.jsxs("div",{className:"usage-view-toggle",role:"group","aria-label":"Usage view mode",children:[t.jsx("button",{className:`usage-view-toggle-btn ${w==="used"?"active":""}`,onClick:()=>W("used"),"aria-pressed":w==="used","data-testid":"usage-view-toggle-used",children:"Used"}),t.jsx("button",{className:`usage-view-toggle-btn ${w==="remaining"?"active":""}`,onClick:()=>W("remaining"),"aria-pressed":w==="remaining","data-testid":"usage-view-toggle-remaining",children:"Remaining"})]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close usage modal","data-testid":"usage-modal-close",children:t.jsx(kn,{size:20})})]})]}),t.jsx("div",{className:"usage-content",ref:A,children:(o||!M.current&&!l)&&r.length===0?t.jsx(OL,{}):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:be,children:"Retry"})]}):r.length===0?t.jsxs("div",{className:"usage-empty",children:[t.jsx("p",{children:"No AI providers configured"}),t.jsx("p",{className:"usage-empty-hint",children:"Configure authentication in Settings to see usage data."})]}):t.jsx("div",{className:"usage-providers",children:Y.map((B,xe)=>t.jsx(LL,{provider:B,viewMode:w,hiddenWindows:b,onToggleWindow:oe,onShowAllHidden:D,isDragging:C===B.name,isDragOver:k===B.name,dragOverPosition:k===B.name?z:null,onDragStart:Ne=>P(Ne,B.name),onDragOver:Ne=>$(Ne,B.name),onDragLeave:()=>{k===B.name&&(R(null),_(null))},onDrop:Ne=>j(Ne,B.name),onDragEnd:q,isTouchReorderMode:p,canMoveUp:xe>0,canMoveDown:xe<Y.length-1,onMoveUp:()=>de(B.name,-1),onMoveDown:()=>de(B.name,1)},B.name))})}),t.jsxs("div",{className:"modal-actions usage-actions",children:[t.jsx("div",{className:"modal-actions-left usage-actions-left",children:t.jsx("div",{className:"usage-last-updated",children:c&&t.jsxs("span",{children:["Last updated: ",c.toLocaleTimeString()]})})}),t.jsxs("div",{className:"modal-actions-right usage-actions-right",children:[t.jsxs("button",{className:"btn btn-sm",onClick:be,disabled:o||u,"data-testid":"usage-refresh-btn",children:[t.jsx(us,{size:14,className:u?"spin":"",style:{marginRight:6}}),"Refresh"]}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:n,children:"Close"})]})]})]});return Ae?t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"usage-popover-backdrop",onClick:n,"data-testid":"usage-modal-overlay"}),me]}):t.jsx("div",{className:"modal-overlay open",onClick:Ce,"data-testid":"usage-modal-overlay",children:me})}function fy(e){if(e<1e3)return`${e}ms`;const n=Math.floor(e/1e3);if(n<60)return`${n}s`;const s=Math.floor(n/60),a=n%60;if(s<60)return a>0?`${s}m ${a}s`:`${s}m`;const r=Math.floor(s/60),o=s%60;return o>0?`${r}h ${o}m`:`${r}h`}function fc(e){const n=Date.now(),s=new Date(e).getTime(),a=n-s;if(a<0){const r=Math.abs(a);return r<6e4?"in a moment":r<36e5?`in ${Math.floor(r/6e4)}m`:r<864e5?`in ${Math.floor(r/36e5)}h`:`in ${Math.floor(r/864e5)}d`}return a<6e4?"just now":a<36e5?`${Math.floor(a/6e4)}m ago`:a<864e5?`${Math.floor(a/36e5)}h ago`:`${Math.floor(a/864e5)}d ago`}const zL={cron:"var(--color-blue, #3b82f6)",webhook:"var(--color-purple, #a855f7)",api:"var(--color-green, #22c55e)",manual:"var(--color-gray, #6b7280)"},gy={cron:"Cron",webhook:"Webhook",api:"API",manual:"Manual"},BL={cron:Cb,webhook:Lb,api:Eb,manual:rs},UL={parallel:"Concurrent",queue:"Queued",reject:"Exclusive"},HL={run:"Catch up",skip:"Skip missed",run_one:"Catch up (latest)"};function qL({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(Xn,{size:12}):t.jsx(Xo,{size:12}),t.jsx("span",{children:e.success?"Success":"Failed"}),n>0&&t.jsx("span",{className:"schedule-run-duration",children:fy(n)})]})}function VL({result:e,index:n}){const[s,a]=i.useState(!1),r=e.completedAt&&e.startedAt?new Date(e.completedAt).getTime()-new Date(e.startedAt).getTime():0;return t.jsxs("div",{className:"schedule-history-item",children:[t.jsxs("button",{className:"schedule-history-header",onClick:()=>a(!s),"aria-expanded":s,"aria-label":`Run #${n+1}: ${e.success?"succeeded":"failed"} ${fc(e.startedAt)}`,children:[t.jsx("span",{className:`schedule-history-status ${e.success?"success":"failure"}`,children:e.success?t.jsx(Xn,{size:12}):t.jsx(Xo,{size:12})}),t.jsx("span",{className:"schedule-history-time",children:fc(e.startedAt)}),e.triggerType&&t.jsx("span",{className:"routine-history-trigger-type",children:gy[e.triggerType]}),t.jsx("span",{className:"schedule-history-duration",children:fy(r)}),s?t.jsx(hi,{size:12}):t.jsx(Cn,{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 WL({routine:e,onEdit:n,onDelete:s,onRun:a,onToggle:r,running:o,lastRunOutput:l}){const[c,d]=i.useState(!1),{confirm:u}=ii(),h=i.useCallback(async()=>{await u({title:"Delete Routine",message:`Delete routine "${e.name}"? This cannot be undone.`,danger:!0})&&s(e)},[e,s,u]),m=zL[e.trigger.type],f=BL[e.trigger.type],p=e.trigger.type==="cron"?("cronExpression"in e.trigger?e.trigger.cronExpression:void 0)||e.cronExpression||"":e.cronExpression||"";return t.jsxs("div",{className:`routine-card${e.enabled?"":" disabled"}${o?" running":""}`,children:[t.jsxs("div",{className:"routine-card-header",children:[t.jsxs("div",{className:"routine-card-info",children:[t.jsxs("div",{className:"routine-card-name-row",children:[t.jsx("span",{className:"routine-card-name",children:e.name}),t.jsxs("span",{className:"routine-trigger-badge",style:{borderColor:m,color:m},children:[t.jsx(f,{size:10}),gy[e.trigger.type]]}),e.scope&&t.jsxs("span",{className:`routine-scope-badge${e.scope==="global"?" global":" project"}`,title:`${e.scope==="global"?"Global":"Project"}-scoped routine`,children:[e.scope==="global"?t.jsx(jc,{size:10}):t.jsx(ks,{size:10}),e.scope]})]}),e.description&&t.jsx("p",{className:"routine-card-description",children:e.description})]}),t.jsxs("div",{className:"routine-card-actions",children:[t.jsx("button",{className:"btn-icon",onClick:()=>a(e),disabled:o,title:o?"Running…":"Run now","aria-label":o?"Running…":`Run ${e.name} now`,children:o?t.jsx(_t,{className:"spinner"}):t.jsx(is,{})}),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(ui,{}):t.jsx(is,{})}),t.jsx("button",{className:"btn-icon",onClick:()=>n(e),title:"Edit","aria-label":`Edit ${e.name}`,children:t.jsx(Fs,{})}),t.jsx("button",{className:"btn-icon",onClick:h,title:"Delete","aria-label":`Delete ${e.name}`,children:t.jsx(zn,{})})]})]}),t.jsxs("div",{className:"routine-card-meta",children:[e.steps&&e.steps.length>0?t.jsxs("div",{className:"routine-meta-item",children:[t.jsx(Va,{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(sa,{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:UL[e.executionPolicy]})}),t.jsx("div",{className:"routine-meta-item",children:t.jsx("span",{className:"routine-policy-badge",title:`Catch-up policy: ${e.catchUpPolicy}`,children:HL[e.catchUpPolicy]})}),e.nextRunAt&&e.enabled&&t.jsxs("div",{className:"routine-meta-item",children:[t.jsx("span",{className:"routine-meta-label",children:"Next:"}),t.jsx("span",{title:e.nextRunAt,children:fc(e.nextRunAt)})]}),e.lastRunAt&&t.jsxs("div",{className:"routine-meta-item",children:[t.jsx("span",{className:"routine-meta-label",children:"Last:"}),t.jsx("span",{title:e.lastRunAt,children:fc(e.lastRunAt)})]}),e.lastRunResult&&t.jsx(qL,{result:e.lastRunResult}),t.jsxs("div",{className:"routine-meta-item",children:[t.jsx("span",{className:"routine-meta-label",children:"Runs:"}),t.jsx("span",{children:e.runCount})]})]}),l&&t.jsxs("div",{className:`routine-run-output ${l.success?"success":"failure"}`,children:[l.output&&t.jsx("pre",{className:"routine-run-output-text",children:l.output}),l.error&&t.jsx("div",{className:"routine-run-output-error",children:l.error})]}),e.runHistory.length>0&&t.jsxs("div",{className:"routine-card-history",children:[t.jsxs("button",{className:"schedule-history-toggle",onClick:()=>d(g=>!g),"aria-expanded":c,children:[c?t.jsx(hi,{size:12}):t.jsx(Cn,{size:12}),t.jsxs("span",{children:["Run History (",e.runHistory.length,")"]})]}),c&&t.jsxs("div",{className:"schedule-history-list",children:[e.runHistory.slice(0,10).map((g,w)=>t.jsx(VL,{result:g,index:w},`${g.startedAt}-${w}`)),e.runHistory.length>10&&t.jsxs("div",{className:"schedule-history-more",children:["…and ",e.runHistory.length-10," more"]})]})]})]})}function GL({type:e,size:n=12}){return e==="command"?t.jsxs("span",{className:"step-type-badge step-type-command",title:"Command step",children:[t.jsx(na,{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(Xk,{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(cs,{size:n}),t.jsx("span",{children:"AI Prompt"})]})}function su(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`step-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function KL(e){return e==="command"?{id:su(),type:e,name:"New Command Step",command:"",continueOnFailure:!1}:e==="ai-prompt"?{id:su(),type:e,name:"New AI Prompt Step",prompt:"",continueOnFailure:!1}:{id:su(),type:e,name:"New Create Task Step",taskDescription:"",taskColumn:"triage",continueOnFailure:!1}}function JL({step:e,onSave:n,onCancel:s}){const[a,r]=i.useState(e.name),[o,l]=i.useState(e.type),[c,d]=i.useState(e.command??""),[u,h]=i.useState(e.prompt??""),[m,f]=i.useState(e.modelProvider??""),[p,g]=i.useState(e.modelId??""),[w,v]=i.useState(e.taskTitle??""),[b,y]=i.useState(e.taskDescription??""),[N,S]=i.useState(e.taskColumn??"triage"),[C,x]=i.useState(e.timeoutMs),[k,R]=i.useState(e.continueOnFailure??!1),[z,_]=i.useState({}),[A,Q]=i.useState([]),[H,M]=i.useState(!1),[T,F]=i.useState(null);i.useEffect(()=>{let P=!1;return M(!0),F(null),Hs().then($=>{P||Q($.models)}).catch($=>{P||F($ instanceof Error?$.message:"Failed to load models")}).finally(()=>{P||M(!1)}),()=>{P=!0}},[]);const W=i.useCallback(()=>{const P={};return a.trim()||(P.name="Step name is required"),o==="command"&&!c.trim()&&(P.command="Command is required"),o==="ai-prompt"&&!u.trim()&&(P.prompt="Prompt is required"),o==="create-task"&&!b.trim()&&(P.taskDescription="Task description is required"),(o==="ai-prompt"||o==="create-task")&&(m||p)&&(!m||!p)&&(P.modelProvider="Both model provider and model ID must be set together"),C!==void 0&&C<1e3&&(P.timeoutMs="Timeout must be at least 1 second (1000ms)"),_(P),Object.keys(P).length===0},[a,o,c,u,b,m,p,C]),oe=m&&p?`${m}/${p}`:"",D=i.useCallback(P=>{if(!P)f(""),g("");else{const $=P.indexOf("/");$!==-1&&(f(P.slice(0,$)),g(P.slice($+1)))}},[]),E=i.useCallback(()=>{if(!W())return;const P={...e,name:a.trim(),type:o,command:o==="command"?c.trim():void 0,prompt:o==="ai-prompt"?u.trim():void 0,taskTitle:o==="create-task"&&w.trim()?w.trim():void 0,taskDescription:o==="create-task"&&b.trim()?b.trim():void 0,taskColumn:o==="create-task"?N:void 0,modelProvider:(o==="ai-prompt"||o==="create-task")&&m.trim()?m.trim():void 0,modelId:(o==="ai-prompt"||o==="create-task")&&p.trim()?p.trim():void 0,timeoutMs:C||void 0,continueOnFailure:k};o!=="ai-prompt"&&delete P.prompt,o!=="create-task"&&(delete P.taskTitle,delete P.taskDescription,delete P.taskColumn),n(P)},[W,n,e,a,o,c,u,w,b,N,m,p,C,k]);return t.jsxs("div",{className:"step-editor",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-name-${e.id}`,children:"Step Name"}),t.jsx("input",{id:`step-name-${e.id}`,type:"text",placeholder:"e.g. Run tests",value:a,onChange:P=>r(P.target.value),"aria-invalid":!!z.name}),z.name&&t.jsx("small",{className:"field-error",children:z.name})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-type-${e.id}`,children:"Step Type"}),t.jsxs("select",{id:`step-type-${e.id}`,value:o,onChange:P=>l(P.target.value),children:[t.jsx("option",{value:"command",children:"Command"}),t.jsx("option",{value:"ai-prompt",children:"AI Prompt"}),t.jsx("option",{value:"create-task",children:"Create Task"})]})]}),o==="command"&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-command-${e.id}`,children:"Command"}),t.jsx("textarea",{id:`step-command-${e.id}`,placeholder:"e.g. npm test",value:c,onChange:P=>d(P.target.value),rows:2,"aria-invalid":!!z.command}),z.command&&t.jsx("small",{className:"field-error",children:z.command})]}),o==="ai-prompt"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-prompt-${e.id}`,children:"Prompt"}),t.jsx("textarea",{id:`step-prompt-${e.id}`,placeholder:"e.g. Summarize the test results and highlight any failures",value:u,onChange:P=>h(P.target.value),rows:3,"aria-invalid":!!z.prompt}),z.prompt&&t.jsx("small",{className:"field-error",children:z.prompt})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-model-${e.id}`,children:"Model (optional)"}),t.jsx(Cs,{id:`step-model-${e.id}`,label:"Model",models:A,value:oe,onChange:D,placeholder:"Use default",disabled:H}),T&&t.jsx("small",{className:"field-error",children:T}),t.jsx("small",{children:"AI model for this step. Uses default if not selected."})]})]}),o==="create-task"&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-title-${e.id}`,children:"Task Title (optional)"}),t.jsx("input",{id:`step-task-title-${e.id}`,type:"text",placeholder:"e.g. Review weekly dependencies",value:w,onChange:P=>v(P.target.value)}),t.jsx("small",{children:"Leave blank to auto-summarize from description"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-description-${e.id}`,children:"Task Description *"}),t.jsx("textarea",{id:`step-task-description-${e.id}`,placeholder:"e.g. Check all npm dependencies for security vulnerabilities and update outdated packages",value:b,onChange:P=>y(P.target.value),rows:4,"aria-invalid":!!z.taskDescription}),z.taskDescription&&t.jsx("small",{className:"field-error",children:z.taskDescription})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-column-${e.id}`,children:"Target Column"}),t.jsxs("select",{id:`step-task-column-${e.id}`,value:N,onChange:P=>S(P.target.value),children:[t.jsx("option",{value:"triage",children:"Triage"}),t.jsx("option",{value:"todo",children:"To Do"})]}),t.jsx("small",{children:"Column where the new task will be created"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-task-model-${e.id}`,children:"Executor Model (optional)"}),t.jsx(Cs,{id:`step-task-model-${e.id}`,label:"Model",models:A,value:oe,onChange:D,placeholder:"Use default",disabled:H}),T&&t.jsx("small",{className:"field-error",children:T}),z.modelProvider&&t.jsx("small",{className:"field-error",children:z.modelProvider}),t.jsx("small",{children:"AI model for executing the created task. Uses default if not selected."})]})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:`step-timeout-${e.id}`,children:"Timeout (ms, optional)"}),t.jsx("input",{id:`step-timeout-${e.id}`,type:"number",min:1e3,step:1e3,placeholder:"Override schedule timeout",value:C??"",onChange:P=>x(P.target.value?Number(P.target.value):void 0),"aria-invalid":!!z.timeoutMs}),z.timeoutMs&&t.jsx("small",{className:"field-error",children:z.timeoutMs})]}),t.jsxs("div",{className:"form-group",children:[t.jsxs("label",{htmlFor:`step-continue-${e.id}`,className:"checkbox-label",children:[t.jsx("input",{id:`step-continue-${e.id}`,type:"checkbox",checked:k,onChange:P=>R(P.target.checked)}),"Continue on failure"]}),t.jsx("small",{children:"If checked, the next step will run even if this one fails"})]}),t.jsxs("div",{className:"step-editor-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:s,children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:E,children:"Save Step"})]})]})}function YL({steps:e,onChange:n,onEditingChange:s}){const[a,r]=i.useState(null);i.useEffect(()=>{s?.(a!==null)},[a,s]);const o=i.useCallback(u=>{const h=KL(u);n([...e,h]),r(h.id)},[e,n]),l=i.useCallback(u=>{n(e.filter(h=>h.id!==u)),a===u&&r(null)},[e,n,a]),c=i.useCallback((u,h)=>{const m=e.findIndex(g=>g.id===u);if(m<0)return;const f=h==="up"?m-1:m+1;if(f<0||f>=e.length)return;const p=[...e];[p[m],p[f]]=[p[f],p[m]],n(p)},[e,n]),d=i.useCallback(u=>{n(e.map(h=>h.id===u.id?u:h)),r(null)},[e,n]);return t.jsxs("div",{className:"steps-editor",children:[t.jsx("div",{className:"steps-editor-header",children:t.jsxs("span",{className:"steps-editor-title",children:["Steps (",e.length,")"]})}),e.length===0&&t.jsx("div",{className:"steps-empty-state",children:t.jsx("p",{children:"No steps added yet. Add a command or AI prompt step to get started."})}),t.jsx("div",{className:"steps-list",children:e.map((u,h)=>t.jsx("div",{className:"step-card",children:a===u.id?t.jsx(JL,{step:u,onSave:d,onCancel:()=>r(null)}):t.jsxs("div",{className:"step-card-row",children:[t.jsx("div",{className:"step-card-drag",children:t.jsx(Sc,{size:14})}),t.jsx("span",{className:"step-card-index",children:h+1}),t.jsx(GL,{type:u.type}),t.jsx("span",{className:"step-card-name",children:u.name}),u.continueOnFailure&&t.jsx("span",{className:"step-card-flag",title:"Continues on failure",children:"⚡"}),t.jsxs("div",{className:"step-card-actions",children:[t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>c(u.id,"up"),disabled:h===0,title:"Move up","aria-label":`Move ${u.name} up`,children:t.jsx(hi,{})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>c(u.id,"down"),disabled:h===e.length-1,title:"Move down","aria-label":`Move ${u.name} down`,children:t.jsx(Cn,{})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>r(u.id),title:"Edit","aria-label":`Edit ${u.name}`,children:t.jsx(Fs,{})}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>l(u.id),title:"Delete","aria-label":`Delete ${u.name}`,children:t.jsx(zn,{})})]})]})},u.id))}),t.jsxs("div",{className:"steps-add-buttons",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("command"),children:[t.jsx(Bn,{size:14}),"Add Command Step"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("ai-prompt"),children:[t.jsx(Bn,{size:14}),"Add AI Prompt Step"]}),t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>o("create-task"),children:[t.jsx(Bn,{size:14}),"Add Create Task Step"]})]})]})}const by={hourly:"0 * * * *",daily:"0 0 * * *",weekly:"0 0 * * 1",monthly:"0 0 1 * *"},QL={hourly:"Every hour",daily:"Every day (midnight)",weekly:"Every week (Monday)",monthly:"Every month (1st)",custom:"Custom cron expression"};function XL(e){const n=e.trim();for(const[s,a]of Object.entries(by))if(a===n)return s;return"custom"}function ZL(e){const n=e.trim().split(/\s+/);return n.length!==5?!1:n.every(s=>/^[\d*,/-]+$/.test(s))}function eO(e,n,s,a,r){switch(e){case"cron":return{type:"cron",cronExpression:n};case"webhook":return{type:"webhook",webhookPath:s||"/trigger/"+Math.random().toString(36).slice(2,10),secret:a||void 0};case"api":return{type:"api",endpoint:r||"/api/routine/"+Math.random().toString(36).slice(2,10)};case"manual":return{type:"manual"}}}function tO(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 nO=[{value:"parallel",label:"Allow concurrent runs"},{value:"queue",label:"Queue after current (one at a time)"},{value:"reject",label:"Reject new runs while running"}],sO=[{value:"skip",label:"Skip missed runs"},{value:"run_one",label:"Run the most recent missed run"},{value:"run",label:"Run all missed runs"}];function Cg(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`step-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}function Eg({routine:e,onSubmit:n,onCancel:s,scope:a,projectId:r,onScopeChange:o}){const l=!!e,c=e?tO(e):{triggerType:"cron",cronExpression:"0 * * * *",webhookPath:"",webhookSecret:"",endpoint:""},[d,u]=i.useState(e?.name??""),[h,m]=i.useState(e?.description??""),[f,p]=i.useState(c.triggerType),[g,w]=i.useState(c.cronExpression),[v,b]=i.useState(()=>c.triggerType!=="cron"?"custom":XL(c.cronExpression)),[y,N]=i.useState(c.webhookPath),[S,C]=i.useState(c.webhookSecret),[x,k]=i.useState(c.endpoint),[R,z]=i.useState(e?.executionPolicy??"queue"),[_,A]=i.useState(e?.catchUpPolicy??"run_one"),[Q,H]=i.useState(e?.enabled??!0),M=e?.steps&&e.steps.length===1&&e.steps[0].type==="ai-prompt"&&!e.command,T=e?.steps&&e.steps.length===1&&e.steps[0].type==="create-task"&&!e.command,[F,W]=i.useState(e?.steps&&e.steps.length>0&&!M&&!T?"advanced":"simple"),[oe,D]=i.useState(()=>M?"ai-prompt":T?"create-task":"command"),[E,P]=i.useState(e?.command??""),[$,j]=i.useState(e?.steps??[]),[q,de]=i.useState(!1),[be,Ce]=i.useState(e?.timeoutMs??3e5),[Ae,ae]=i.useState(M?e.steps?.[0]?.prompt??"":""),[X,pe]=i.useState(T?e.steps?.[0]?.taskTitle??"":""),[ie,ye]=i.useState(T?e.steps?.[0]?.taskDescription??"":""),[ee,L]=i.useState(T?e.steps?.[0]?.taskColumn??"triage":"triage"),[Y,me]=i.useState(M||T?e.steps?.[0]?.modelProvider??"":""),[B,xe]=i.useState(M||T?e.steps?.[0]?.modelId??"":""),[Ne,te]=i.useState([]),[Be,$e]=i.useState(!1),[ct,De]=i.useState(null),[le,_e]=i.useState(a??"global"),[Le,mt]=i.useState({}),[Ve,ge]=i.useState(!1),he=i.useRef(!0);i.useEffect(()=>()=>{he.current=!1},[]),i.useEffect(()=>{a&&_e(a)},[a]),i.useEffect(()=>{let ve=!1;return $e(!0),De(null),Hs().then(st=>{ve||te(st.models)}).catch(st=>{ve||De(st instanceof Error?st.message:"Failed to load models")}).finally(()=>{ve||$e(!1)}),()=>{ve=!0}},[]);const Pe=Y&&B?`${Y}/${B}`:"",dt=i.useCallback(ve=>{if(!ve){me(""),xe("");return}const st=ve.indexOf("/");st!==-1&&(me(ve.slice(0,st)),xe(ve.slice(st+1)))},[]),jt=i.useCallback(()=>{const ve={};if(d.trim()||(ve.name="Name is required"),le==="project"&&!r&&(ve.scope="Project-specific entries require an active project."),f==="cron"&&v==="custom"&&(g.trim()?ZL(g)||(ve.cronExpression="Invalid cron format — expected 5 fields (e.g. '0 */6 * * *')"):ve.cronExpression="Cron expression is required"),f==="webhook"&&!y.trim()&&(ve.webhookPath="Webhook path is required"),f==="api"&&!x.trim()&&(ve.endpoint="API endpoint is required"),F==="simple")oe==="command"&&!E.trim()&&(ve.command="Command is required"),oe==="ai-prompt"&&!Ae.trim()&&(ve.prompt="Prompt is required"),oe==="create-task"&&!ie.trim()&&(ve.taskDescription="Task description is required"),(Y.trim()&&!B.trim()||!Y.trim()&&B.trim())&&(ve.model="Both model provider and model ID must be set, or both must be empty");else{$.length===0&&(ve.steps="At least one step is required"),q&&(ve.stepsEditing="Please save or cancel all step edits before saving the routine");const st=[];$.forEach((Ue,fe)=>{Ue.name?.trim()||st.push(`Step ${fe+1}: Name is required`),Ue.type==="command"&&!Ue.command?.trim()&&st.push(`Step ${fe+1}: Command is required`),Ue.type==="ai-prompt"&&!Ue.prompt?.trim()&&st.push(`Step ${fe+1}: Prompt is required`),Ue.type==="create-task"&&!Ue.taskDescription?.trim()&&st.push(`Step ${fe+1}: Task description is required`)}),st.length>0&&(ve.steps=st.join("; "))}return be<1e3&&(ve.timeoutMs="Timeout must be at least 1 second (1000ms)"),mt(ve),Object.keys(ve).length===0},[d,f,g,v,y,x,le,r,F,oe,E,Ae,ie,Y,B,$,q,be]),nt=i.useCallback(async ve=>{if(ve.preventDefault(),!!jt()){ge(!0);try{let st=e?.scope??le??(r?"project":"global");st==="project"&&!r&&(st="global");const Ue=eO(f,g,y,S,x);let fe,Xe;F==="simple"?oe==="command"?fe=E.trim()||void 0:oe==="ai-prompt"?Xe=[{id:Cg(),type:"ai-prompt",name:d.trim(),prompt:Ae.trim(),modelProvider:Y.trim()||void 0,modelId:B.trim()||void 0}]:Xe=[{id:Cg(),type:"create-task",name:d.trim(),taskTitle:X.trim()||void 0,taskDescription:ie.trim(),taskColumn:ee,modelProvider:Y.trim()||void 0,modelId:B.trim()||void 0}]:Xe=$;const vt={name:d.trim(),agentId:e?.agentId??"",description:h.trim()||void 0,trigger:Ue,command:fe,steps:Xe,timeoutMs:be,executionPolicy:R,catchUpPolicy:_,enabled:Q,scope:st};await n(vt)}finally{he.current&&ge(!1)}}},[jt,n,d,h,f,g,y,S,x,F,oe,E,Ae,Y,B,X,ie,ee,$,be,R,_,Q,le,r,e?.scope,e?.agentId]),xt="routine-name-error",Ie="routine-cron-error",Qe="routine-webhook-error",ot="routine-endpoint-error",Tt="routine-command-error",Mt="routine-prompt-error",We="routine-task-description-error",J="routine-model-error",ke="routine-timeout-error",lt=i.useCallback(ve=>{b(ve),ve!=="custom"&&w(by[ve])},[]);return t.jsxs("form",{className:"routine-form",onSubmit:nt,noValidate:!0,children:[t.jsx("h4",{className:"settings-section-heading",children:l?"Edit Routine":"New Routine"}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-name",children:"Name"}),t.jsx("input",{id:"routine-name",type:"text",placeholder:"e.g. Daily standup reminder",value:d,onChange:ve=>u(ve.target.value),"aria-invalid":!!Le.name,"aria-describedby":Le.name?xt:void 0}),Le.name&&t.jsx("small",{id:xt,className:"field-error",children:Le.name})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-description",children:"Description (optional)"}),t.jsx("textarea",{id:"routine-description",placeholder:"What does this routine do?",value:h,onChange:ve=>m(ve.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${le==="global"?" active":""}`,onClick:()=>{_e("global"),o?.("global")},role:"radio","aria-checked":le==="global"?"true":"false",disabled:!!e?.scope,title:e?.scope?`Scope is locked to ${e.scope} for existing routines`:"Global scope",children:[t.jsx(jc,{size:12}),"Global"]}),t.jsxs("button",{type:"button",className:`routine-scope-btn${le==="project"?" active":""}`,onClick:()=>{_e("project"),o?.("project")},role:"radio","aria-checked":le==="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(ks,{size:12}),"Project"]})]}),t.jsx("small",{children:!r&&!e?.scope?"No active project. Routines will be created at global scope.":le==="project"&&r?"This routine will be scoped to the current project.":"This routine will be created at global scope."}),Le.scope&&t.jsx("small",{className:"field-error",children:Le.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(Cb,{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(Lb,{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(Eb,{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(rs,{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:ve=>lt(ve.target.value),children:Object.entries(QL).map(([ve,st])=>t.jsx("option",{value:ve,children:st},ve))}),t.jsx("label",{htmlFor:"routine-cron",children:"Cron Expression"}),t.jsx("input",{id:"routine-cron",type:"text",placeholder:"* * * * *",value:g,onChange:ve=>w(ve.target.value),disabled:v!=="custom","aria-invalid":!!Le.cronExpression,"aria-describedby":Le.cronExpression?Ie:void 0}),Le.cronExpression?t.jsx("small",{id:Ie,className:"field-error",children:Le.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:ve=>N(ve.target.value),"aria-invalid":!!Le.webhookPath,"aria-describedby":Le.webhookPath?Qe:void 0}),Le.webhookPath?t.jsx("small",{id:Qe,className:"field-error",children:Le.webhookPath}):t.jsx("small",{children:"URL path for the webhook endpoint"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-webhook-secret",children:"Webhook Secret (optional)"}),t.jsx("input",{id:"routine-webhook-secret",type:"password",placeholder:"Optional — leave empty for unauthenticated webhooks",value:S,onChange:ve=>C(ve.target.value)}),t.jsx("small",{children:"HMAC secret for signature verification. Leave empty for unauthenticated webhooks."})]})]}),f==="api"&&t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-endpoint",children:"API Endpoint"}),t.jsx("input",{id:"routine-endpoint",type:"text",placeholder:"/api/routine/my-routine",value:x,onChange:ve=>k(ve.target.value),"aria-invalid":!!Le.endpoint,"aria-describedby":Le.endpoint?ot:void 0}),Le.endpoint?t.jsx("small",{id:ot,className:"field-error",children:Le.endpoint}):t.jsx("small",{children:"API endpoint path that triggers this routine"})]}),f==="manual"&&t.jsx("div",{className:"form-group",children:t.jsx("small",{className:"routine-trigger-info",children:"This routine will be triggered manually via the dashboard or API."})}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Action Mode"}),t.jsxs("div",{className:"schedule-mode-toggle",role:"radiogroup","aria-label":"Action mode",children:[t.jsx("button",{type:"button",className:`schedule-mode-btn${F==="simple"?" active":""}`,onClick:()=>W("simple"),role:"radio","aria-checked":F==="simple",children:"Simple"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${F==="advanced"?" active":""}`,onClick:()=>W("advanced"),role:"radio","aria-checked":F==="advanced",children:"Multi-Step"})]}),t.jsx("small",{children:F==="simple"?"Run one command, prompt, or task creation action":"Run multiple actions sequentially"})]}),F==="simple"?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Action Type"}),t.jsxs("div",{className:"schedule-mode-toggle",role:"radiogroup","aria-label":"Action type",children:[t.jsx("button",{type:"button",className:`schedule-mode-btn${oe==="command"?" active":""}`,onClick:()=>D("command"),role:"radio","aria-checked":oe==="command",children:"Command"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${oe==="ai-prompt"?" active":""}`,onClick:()=>D("ai-prompt"),role:"radio","aria-checked":oe==="ai-prompt",children:"AI Prompt"}),t.jsx("button",{type:"button",className:`schedule-mode-btn${oe==="create-task"?" active":""}`,onClick:()=>D("create-task"),role:"radio","aria-checked":oe==="create-task",children:"Create Task"})]})]}),oe==="command"?t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-command",children:"Command"}),t.jsx("input",{id:"routine-command",type:"text",placeholder:"e.g. npx runfusion.ai backup --create",value:E,onChange:ve=>P(ve.target.value),"aria-invalid":!!Le.command,"aria-describedby":Le.command?Tt:void 0}),Le.command?t.jsx("small",{id:Tt,className:"field-error",children:Le.command}):t.jsx("small",{children:"Shell command to execute."})]}):oe==="ai-prompt"?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-prompt",children:"Prompt"}),t.jsx("textarea",{id:"routine-prompt",placeholder:"e.g. Summarize recent activity and create action items",value:Ae,onChange:ve=>ae(ve.target.value),rows:3,"aria-invalid":!!Le.prompt,"aria-describedby":Le.prompt?Mt:void 0}),Le.prompt?t.jsx("small",{id:Mt,className:"field-error",children:Le.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(Cs,{id:"routine-model",label:"Model",models:Ne,value:Pe,onChange:dt,placeholder:"Use default",disabled:Be}),ct&&t.jsx("small",{className:"field-error",children:ct}),Le.model&&t.jsx("small",{id:J,className:"field-error",children:Le.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:X,onChange:ve=>pe(ve.target.value)})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-task-description",children:"Task Description"}),t.jsx("textarea",{id:"routine-task-description",placeholder:"e.g. Check npm dependencies for security vulnerabilities",value:ie,onChange:ve=>ye(ve.target.value),rows:4,"aria-invalid":!!Le.taskDescription,"aria-describedby":Le.taskDescription?We:void 0}),Le.taskDescription?t.jsx("small",{id:We,className:"field-error",children:Le.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:ee,onChange:ve=>L(ve.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(Cs,{id:"routine-task-model",label:"Executor Model",models:Ne,value:Pe,onChange:dt,placeholder:"Use default",disabled:Be}),ct&&t.jsx("small",{className:"field-error",children:ct}),Le.model&&t.jsx("small",{id:J,className:"field-error",children:Le.model})]})]})]}):t.jsxs(t.Fragment,{children:[t.jsx(YL,{steps:$,onChange:j,onEditingChange:de}),Le.steps&&t.jsx("small",{className:"field-error",children:Le.steps}),Le.stepsEditing&&t.jsx("small",{className:"field-error",children:Le.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:be,onChange:ve=>Ce(Number(ve.target.value)),"aria-invalid":!!Le.timeoutMs,"aria-describedby":Le.timeoutMs?ke:void 0}),Le.timeoutMs?t.jsx("small",{id:ke,className:"field-error",children:Le.timeoutMs}):t.jsx("small",{children:"Maximum execution time in milliseconds."})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-execution-policy",children:"Execution Policy"}),t.jsx("select",{id:"routine-execution-policy",value:R,onChange:ve=>z(ve.target.value),children:nO.map(ve=>t.jsx("option",{value:ve.value,children:ve.label},ve.value))}),t.jsx("small",{children:"How to handle concurrent executions of this routine"})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{htmlFor:"routine-catchup-policy",children:"Catch-up Policy"}),t.jsx("select",{id:"routine-catchup-policy",value:_,onChange:ve=>A(ve.target.value),children:sO.map(ve=>t.jsx("option",{value:ve.value,children:ve.label},ve.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:Q,onChange:ve=>H(ve.target.checked)}),"Enabled"]}),t.jsx("small",{children:"When disabled, the routine will not run automatically"})]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:s,disabled:Ve,children:"Cancel"}),t.jsx("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:Ve,children:Ve?"Saving…":l?"Save Changes":"Create Routine"})]})]})}const iO=3e4;function aO({onClose:e,addToast:n,projectId:s}){const[a,r]=i.useState(()=>s?"project":"global"),[o,l]=i.useState([]),[c,d]=i.useState("list"),[u,h]=i.useState(),[m,f]=i.useState(null),[p,g]=i.useState({}),w=i.useRef(null);Ui(w,!0,"fusion:automation-modal-size");const v=i.useMemo(()=>({scope:a,projectId:a==="project"?s:void 0}),[a,s]),b=i.useCallback(async()=>{try{const M=await U0(v);l(M),g(T=>{const F={...T};for(const W of M){const oe=F[W.id];if(!oe||!W.lastRunResult)continue;const D=W.lastRunResult;D.success===oe.success&&(D.output||"")===oe.output&&(D.error||"")===(oe.error||"")&&delete F[W.id]}return F})}catch(M){n(Me(M)||"Failed to load routines","error")}},[n,v]);i.useEffect(()=>{b()},[b]),i.useEffect(()=>{const M=setInterval(()=>{b()},iO);return()=>clearInterval(M)},[b]),i.useEffect(()=>{const M=T=>{T.key==="Escape"&&(c!=="list"?(d("list"),h(void 0)):e())};return document.addEventListener("keydown",M),()=>document.removeEventListener("keydown",M)},[e,c]);const y=aa(e),N=i.useCallback(async M=>{try{await H0(M,v),n("Routine created","success"),d("list"),await b()}catch(T){n(Me(T)||"Failed to create routine","error")}},[n,b,v]),S=i.useCallback(M=>{h(M),d("edit")},[]),C=i.useCallback(async M=>{if(u)try{await wh(u.id,M,v),n("Routine updated","success"),d("list"),h(void 0),await b()}catch(T){n(Me(T)||"Failed to update routine","error")}},[u,n,b,v]),x=i.useCallback(async M=>{try{await q0(M.id,v),n(`Deleted "${M.name}"`,"success"),await b()}catch(T){n(Me(T)||"Failed to delete routine","error")}},[n,b,v]),k=i.useCallback(async M=>{f(M.id);try{const{result:T}=await V0(M.id,v);g(F=>({...F,[M.id]:{output:T.output||"",error:T.error,success:T.success}})),T.success?n(`"${M.name}" completed successfully`,"success"):n(`"${M.name}" failed: ${T.error||"Unknown error"}`,"error"),await b()}catch(T){n(Me(T)||"Failed to run routine","error")}finally{f(null)}},[n,b,v]),R=i.useCallback(async M=>{try{await wh(M.id,{enabled:!M.enabled},v),n(`"${M.name}" ${M.enabled?"disabled":"enabled"}`,"success"),await b()}catch(T){n(Me(T)||"Failed to toggle routine","error")}},[n,b,v]),z=i.useCallback(()=>{d("list"),h(void 0)},[]);i.useEffect(()=>{c!=="list"&&g({})},[c]);const _=i.useCallback(M=>{r(M),d("list"),h(void 0),g({})},[]),A=()=>c==="create"?t.jsx(Eg,{onSubmit:N,onCancel:z,scope:a,projectId:s}):c==="edit"&&u?t.jsx(Eg,{routine:u,onSubmit:C,onCancel:z,scope:a,projectId:s}):o.length===0?t.jsxs("div",{className:"routine-empty-state",children:[t.jsx(rs,{size:48,strokeWidth:1}),t.jsx("h4",{children:"No automations yet"}),t.jsx("p",{children:"Create an automation with a schedule, webhook, API, or manual trigger."}),t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>d("create"),children:[t.jsx(Bn,{size:14}),"Create your first automation"]})]}):t.jsx("div",{className:"routine-list",children:o.map(M=>t.jsx(WL,{routine:M,onEdit:S,onDelete:x,onRun:k,onToggle:R,running:m===M.id,lastRunOutput:p[M.id]??null},M.id))}),Q=()=>A(),H=c==="list"&&o.length>0;return t.jsx("div",{className:"modal-overlay open",...y,children:t.jsxs("div",{ref:w,className:"modal modal-lg automation-modal",role:"dialog","aria-modal":"true","aria-labelledby":"schedules-modal-title",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("div",{className:"detail-title-row",children:[t.jsx(rs,{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(kn,{size:20})})]}),t.jsxs("div",{className:"scheduling-toolbar","aria-live":"polite",children:[t.jsxs("div",{className:"scheduling-toolbar-left",role:"group","aria-label":"Scheduling scope",children:[t.jsxs("div",{className:"scheduling-scope-selector",children:[t.jsxs("button",{type:"button",className:`scope-btn${a==="global"?" active":""}`,onClick:()=>_("global"),"aria-pressed":a==="global",title:"Global (user-level) automations",children:[t.jsx(jc,{size:14}),"Global"]}),t.jsxs("button",{type:"button",className:`scope-btn${a==="project"?" active":""}`,onClick:()=>_("project"),"aria-pressed":a==="project",title:"Project-scoped automations",children:[t.jsx(ks,{size:14}),"Project"]})]}),t.jsxs("span",{className:"scheduling-count",children:[t.jsx(rs,{size:14}),o.length," automation",o.length===1?"":"s"]})]}),t.jsx("div",{className:"scheduling-toolbar-right",children:H&&t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>d("create"),"aria-label":"Create new automation",children:[t.jsx(Bn,{size:14}),"New Automation"]})})]}),t.jsx("div",{className:"schedule-modal-content",id:"scheduled-tasks-content",children:Q()})]})})}const rO=3e4,Vu=new Map,iu=new Map;function _g(e){return e??"default"}function Mg(e){const n=Vu.get(e);return n?Date.now()>=n.expiresAt?(Vu.delete(e),null):n:null}function oO(e,n){const s=e.some(r=>r.id!=="github"&&r.authenticated),a=e.some(r=>r.id==="github"&&r.authenticated)||(n?.authenticated??!1);return{hasAiProvider:s,hasGithub:a}}async function lO(e){const n=iu.get(e);if(n)return n;const s=qo().then(({providers:a,ghCli:r})=>{const l={...oO(a,r),ghCli:r,expiresAt:Date.now()+rO};return Vu.set(e,l),l}).finally(()=>{iu.delete(e)});return iu.set(e,s),s}function xy(e){const n=_g(e),s=Mg(n),[a,r]=i.useState(s?.hasAiProvider??!1),[o,l]=i.useState(s?.hasGithub??!1),[,c]=i.useState(s?.ghCli),[d,u]=i.useState(s==null),h=i.useRef(!!s);return i.useEffect(()=>{let m=!1;const f=_g(e),p=Mg(f);if(p)return r(p.hasAiProvider),l(p.hasGithub),c(p.ghCli),u(!1),h.current=!0,()=>{m=!0};h.current=!1;async function g(){!h.current&&u(!0);try{const v=await lO(f);if(m)return;r(v.hasAiProvider),l(v.hasGithub),c(v.ghCli)}catch{}finally{m||(h.current=!0,u(!1))}}return g(),()=>{m=!0}},[e]),i.useMemo(()=>({hasAiProvider:a,hasGithub:o,loading:d,hasWarnings:!a||!o}),[a,o,d])}function vy({hasAiProvider:e,hasGithub:n,compact:s=!1,onDismiss:a}){if(e&&n)return null;const r=a?t.jsx("button",{type:"button",className:"setup-warning-banner__dismiss touch-target","aria-label":"Dismiss setup warning",onClick:a,children:t.jsx(kn,{size:16,"aria-hidden":"true"})}):null;if(s)return t.jsxs("div",{className:`setup-warning-banner setup-warning-banner--compact${a?" setup-warning-banner--dismissible":""}`,role:"status","aria-live":"polite",children:[t.jsx("p",{className:"setup-warning-banner__compact-text",children:"⚠ Setup incomplete — AI and/or GitHub features will be limited."}),r]});const o=[];return e||o.push({key:"ai",title:"No AI provider connected",description:"AI agents won't be able to work on tasks until you connect a provider. Set one up in Settings → AI Setup."}),n||o.push({key:"github",title:"GitHub not connected",description:"You won't be able to import issues from GitHub, but you can still create tasks manually."}),t.jsxs("div",{className:`setup-warning-banner${a?" setup-warning-banner--dismissible":""}`,role:"status","aria-live":"polite",children:[r,o.map(l=>t.jsxs("div",{className:"setup-warning-banner__item",children:[t.jsx("strong",{className:"setup-warning-banner__title",children:l.title}),t.jsx("p",{className:"setup-warning-banner__description",children:l.description})]},l.key))]})}function cO({isOpen:e,onClose:n,projectId:s,tasks:a,onCreateTask:r,addToast:o}){const{confirm:l}=ii(),c=si();_i(e);const{keyboardOverlap:d,viewportHeight:u,viewportOffsetTop:h,keyboardOpen:m}=oa({enabled:c==="mobile"}),f=m?{"--keyboard-overlap":`${d}px`,"--vv-offset-top":`${h}px`,...u!==null?{"--vv-height":`${u}px`}:{}}:{},[p,g]=i.useState(""),[w,v]=i.useState([]),[b,y]=i.useState(""),[N,S]=i.useState(""),[C,x]=i.useState([]),[k,R]=i.useState(!1),[z,_]=i.useState(""),[A,Q]=i.useState(""),[H,M]=i.useState(""),[T,F]=i.useState(""),[W,oe]=i.useState(""),[D,E]=i.useState("default"),[P,$]=i.useState(!1),[j,q]=i.useState([]),[de,be]=i.useState(!1),[Ce,Ae]=i.useState(void 0),[ae,X]=i.useState(Rs),[pe,ie]=i.useState(void 0),[ye,ee]=i.useState(!1),[L,Y]=i.useState(""),[me,B]=i.useState(null),[xe,Ne]=i.useState([]),[te,Be]=i.useState(!1),[$e,ct]=i.useState(!1),De=i.useRef(null),[le,_e]=i.useState(!1),[Le,mt]=i.useState(""),Ve=i.useRef(null),{hasAiProvider:ge,hasGithub:he,loading:Pe}=xy(s),{nodes:dt}=Pc(),jt=i.useCallback(Ue=>{be(!0),q(Ue)},[]),nt=i.useCallback(()=>{be(!1)},[]),xt=i.useCallback(async()=>{if(xe.length>0){Be(!0);return}ct(!0);try{const Ue=await Yr(void 0,s);Ne(Ue),Be(!0)}catch(Ue){const fe=Me(Ue);o(fe?`Failed to load agents: ${fe}`:"Failed to load agents","error"),Be(!1)}finally{ct(!1)}},[xe.length,s,o]);i.useEffect(()=>{if(!te)return;const Ue=fe=>{De.current&&!De.current.contains(fe.target)&&Be(!1)};return document.addEventListener("mousedown",Ue),()=>document.removeEventListener("mousedown",Ue)},[te]),i.useEffect(()=>{if(!le)return;const Ue=fe=>{Ve.current&&!Ve.current.contains(fe.target)&&(_e(!1),mt(""))};return document.addEventListener("mousedown",Ue),()=>document.removeEventListener("mousedown",Ue)},[le]);const Ie=a.filter(Ue=>!w.includes(Ue.id)).sort((Ue,fe)=>{const Xe=fe.createdAt.localeCompare(Ue.createdAt);if(Xe!==0)return Xe;const vt=parseInt(Ue.id.slice(Ue.id.lastIndexOf("-")+1),10)||0;return(parseInt(fe.id.slice(fe.id.lastIndexOf("-")+1),10)||0)-vt}),Qe=Le?Ie.filter(Ue=>Ue.id.toLowerCase().includes(Le.toLowerCase())||Ue.title&&Ue.title.toLowerCase().includes(Le.toLowerCase())||Ue.description&&Ue.description.toLowerCase().includes(Le.toLowerCase())):Ie,ot=(Ue,fe)=>Ue.length>fe?Ue.slice(0,fe)+"…":Ue,Tt=L.trim(),Mt=Tt.length>0&&!Ac.test(Tt);i.useEffect(()=>{const Ue=p.trim()!==""||w.length>0||C.length>0||z!==""||A!==""||H!==""||T!==""||j.length>0||me!==null||Ce!==void 0||ae!==Rs||pe!==void 0||b!==""||N!==""||ye||Tt!=="";$(Ue)},[p,w,C,z,A,H,T,j,me,Ce,ae,pe,b,N,ye,Tt]);const We=i.useCallback(async()=>{P&&!await l({title:"Discard Changes",message:"You have unsaved changes. Discard them?",danger:!0})||(C.forEach(Ue=>URL.revokeObjectURL(Ue.previewUrl)),x([]),g(""),v([]),_(""),Q(""),M(""),F(""),oe(""),E("default"),q([]),be(!1),B(null),Be(!1),Ae(void 0),X(Rs),ie(void 0),y(""),S(""),$(!1),ee(!1),Y(""),n())},[P,n,C,l]),J=i.useCallback(async()=>{const Ue=p.trim();if(!(!Ue||k||Mt)){R(!0);try{const fe=z.indexOf("/"),Xe=A.indexOf("/"),vt=H.indexOf("/"),St=await r({title:void 0,description:Ue,column:"triage",dependencies:w.length?w:void 0,enabledWorkflowSteps:de?j.length>0?j:[]:void 0,...me?{assignedAgentId:me}:{},modelPresetId:D==="preset"&&W||void 0,modelProvider:z&&fe!==-1?z.slice(0,fe):void 0,modelId:z&&fe!==-1?z.slice(fe+1):void 0,validatorModelProvider:A&&Xe!==-1?A.slice(0,Xe):void 0,validatorModelId:A&&Xe!==-1?A.slice(Xe+1):void 0,planningModelProvider:H&&vt!==-1?H.slice(0,vt):void 0,planningModelId:H&&vt!==-1?H.slice(vt+1):void 0,thinkingLevel:T!==""?T:void 0,reviewLevel:Ce,priority:ae,nodeId:pe,branch:b.trim()===""?void 0:b.trim(),baseBranch:N.trim()===""?void 0:N.trim(),...ye||Tt!==""?{githubTracking:{enabled:ye,...Tt!==""?{repoOverride:Tt}:{}}}:{}});if(C.length>0){const Et=[];for(const Pt of C)try{await Ic(St.id,Pt.file,s)}catch{Et.push(Pt.file.name)}Et.length>0&&o(`Failed to upload: ${Et.join(", ")}`,"error")}C.forEach(Et=>URL.revokeObjectURL(Et.previewUrl)),x([]),g(""),v([]),_(""),Q(""),M(""),F(""),oe(""),E("default"),q([]),be(!1),B(null),Be(!1),Ae(void 0),X(Rs),ie(void 0),y(""),S(""),o(`Created ${St.id}`,"success"),n()}catch(fe){o(Me(fe)||"Failed to create task","error")}finally{R(!1)}}},[p,w,C,z,A,H,T,k,r,o,n,s,D,W,j,de,me,Ce,ae,pe,b,N]),ke=i.useCallback(Ue=>{Ue.key==="Escape"&&(Ue.preventDefault(),We())},[We]),ve=(me?xe.find(Ue=>Ue.id===me):void 0)?.name??me,st=t.jsxs("div",{className:"new-task-quick-fields",children:[t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Dependencies"}),t.jsxs("div",{className:"dep-trigger-wrap",ref:Ve,children:[t.jsx("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>_e(Ue=>!Ue),disabled:k,"data-testid":"dep-trigger",children:w.length>0?`${w.length} selected`:"Add dependencies"}),le&&t.jsxs("div",{className:"dep-dropdown",children:[t.jsx("input",{className:"dep-dropdown-search",placeholder:"Search tasks…",autoFocus:!0,value:Le,onChange:Ue=>mt(Ue.target.value),onClick:Ue=>Ue.stopPropagation()}),Qe.length===0?t.jsx("div",{className:"dep-dropdown-empty",children:"No available tasks"}):Qe.map(Ue=>t.jsxs("div",{className:`dep-dropdown-item${w.includes(Ue.id)?" selected":""}`,onClick:()=>{v(w.includes(Ue.id)?w.filter(fe=>fe!==Ue.id):[...w,Ue.id]),_e(!1),mt("")},onMouseDown:fe=>fe.preventDefault(),children:[t.jsx("span",{className:"dep-dropdown-id",children:Ue.id}),t.jsx("span",{className:"dep-dropdown-title",children:ot(Ue.title||Ue.description||Ue.id,30)})]},Ue.id))]})]}),w.length>0&&t.jsx("div",{className:"selected-deps",children:w.map(Ue=>t.jsxs("span",{className:"dep-chip",children:[Ue,t.jsx("button",{type:"button",className:"dep-chip-remove",onClick:()=>v(w.filter(fe=>fe!==Ue)),disabled:k,children:"×"})]},Ue))})]}),t.jsxs("div",{className:"form-group",children:[t.jsx("label",{children:"Assign Agent"}),t.jsxs("div",{className:"agent-trigger-wrap",ref:De,children:[t.jsxs("button",{type:"button",className:"btn btn-sm dep-trigger",onClick:()=>{te?Be(!1):xt()},disabled:k,"data-testid":"new-task-agent-button",children:[t.jsx(Qn,{size:12,style:{verticalAlign:"middle"}}),ve?` ${ve}`:" Assign agent"]}),te&&t.jsxs("div",{className:"dep-dropdown agent-picker-dropdown",onMouseDown:Ue=>Ue.preventDefault(),children:[t.jsx("div",{className:"dep-dropdown-search-header",children:"Select agent"}),$e&&t.jsx("div",{className:"dep-dropdown-empty",children:"Loading agents..."}),!$e&&xe.map(Ue=>t.jsxs("div",{className:`dep-dropdown-item${me===Ue.id?" selected":""}`,onMouseDown:fe=>fe.preventDefault(),onClick:()=>{B(Ue.id===me?null:Ue.id),Be(!1)},"data-testid":`agent-option-${Ue.id}`,children:[t.jsx(Qn,{size:12,style:{marginRight:6}}),t.jsx("span",{className:"dep-dropdown-id",children:Ue.role}),t.jsx("span",{className:"dep-dropdown-title",children:Ue.name})]},Ue.id)),!$e&&xe.length===0&&t.jsx("div",{className:"dep-dropdown-empty",children:"No agents available"}),me&&t.jsx("div",{className:"dep-dropdown-item",onMouseDown:Ue=>Ue.preventDefault(),onClick:()=>{B(null),Be(!1)},children:t.jsx("span",{className:"dep-dropdown-title",children:"Clear selection"})})]})]})]})]});return e?t.jsx("div",{className:"modal-overlay open",onClick:We,onKeyDown:ke,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal-lg new-task-modal",onClick:Ue=>Ue.stopPropagation(),style:f,children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h3",{children:"New Task"}),t.jsx("button",{className:"modal-close",onClick:We,disabled:k,"aria-label":"Close",children:"×"})]}),t.jsxs("div",{className:"modal-body",children:[!Pe&&t.jsx(vy,{hasAiProvider:ge,hasGithub:he}),t.jsx(Yv,{mode:"create",description:p,onDescriptionChange:g,dependencies:w,onDependenciesChange:v,executorModel:z,onExecutorModelChange:_,validatorModel:A,onValidatorModelChange:Q,presetMode:D,onPresetModeChange:E,selectedPresetId:W,onSelectedPresetIdChange:oe,selectedWorkflowSteps:j,onWorkflowStepsChange:jt,onDefaultOnApplied:nt,pendingImages:C,onImagesChange:x,tasks:a,projectId:s,disabled:k,addToast:o,isActive:e,onClose:We,planningModel:H,onPlanningModelChange:M,thinkingLevel:T,onThinkingLevelChange:F,reviewLevel:Ce,onReviewLevelChange:Ae,priority:ae,onPriorityChange:X,branch:b,onBranchChange:y,baseBranch:N,onBaseBranchChange:S,nodeId:pe,onNodeIdChange:ie,nodeOptions:dt,githubTrackingEnabled:ye,onGithubTrackingEnabledChange:ee,githubRepoOverride:L,onGithubRepoOverrideChange:Y,renderBelowPrimary:st,hideDependencies:!0,autoExpandMoreOptionsOnSelection:!1})]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:We,disabled:k,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:J,disabled:!p.trim()||k||Mt,children:k?"Creating...":"Create Task"})]})]})}):null}function ji(e){if(!Number.isFinite(e)||e<0)return"—";const n=e/(1024*1024);return n<1024?`${n.toFixed(0)} MB`:`${(n/1024).toFixed(2)} GB`}function Ag(e,n){return!Number.isFinite(e)||!Number.isFinite(n)||n<=0?"—":`${(e/n*100).toFixed(1)}%`}function dO(e,n){if(n<=0)return"normal";const s=e/n;return s>=.85?"critical":s>=.65?"warning":"normal"}function uO(e,n){if(n<=0)return"normal";const s=e/n;return s>=.5?"critical":s>=.25?"warning":"normal"}function mO(e,n){if(n<=0)return"normal";const s=e/n;return s>=.9?"critical":s>=.75?"warning":"normal"}function hO(e,n){if(e===null||!Number.isFinite(e)||e<0)return"normal";const s=n>0?e/n:e;return s>=80?"critical":s>=50?"warning":"normal"}function Hl(e){return e==="critical"?"system-stats-modal__value--critical":e==="warning"?"system-stats-modal__value--warning":""}function pO(e){if(!e)return"Not yet";const n=new Date(e);return Number.isNaN(n.getTime())?"Not yet":n.toLocaleString()}function fO({isOpen:e,onClose:n,projectId:s}){const[a,r]=i.useState(null),[o,l]=i.useState(!1),[c,d]=i.useState(null),[u,h]=i.useState(!0),[m,f]=i.useState(90),[p,g]=i.useState(!1),[w,v]=i.useState(!1),[b,y]=i.useState(null),[N,S]=i.useState(null),[C,x]=i.useState(null),k=i.useCallback(async X=>{l(!0);try{const pe=await C1(s);r(pe),d(null),x(Date.now()),X?.preserveKillResult||y(null)}catch(pe){d(pe instanceof Error?pe.message:"Failed to load system stats")}finally{l(!1)}},[s]);i.useEffect(()=>{if(!e)return;k();const X=window.setInterval(()=>{k()},5e3);return()=>{window.clearInterval(X)}},[e,k]),i.useEffect(()=>{if(!e)return;(async()=>{try{const pe=await ia();h(pe.vitestAutoKillEnabled??!0),f(pe.vitestKillThresholdPct??90),S(null)}catch(pe){S(pe instanceof Error?pe.message:"Failed to load vitest settings")}})()},[e]),i.useEffect(()=>{if(!e)return;const X=pe=>{pe.key==="Escape"&&n()};return document.addEventListener("keydown",X),()=>document.removeEventListener("keydown",X)},[e,n]);const R=i.useMemo(()=>{if(!a)return[];const X=a.systemStats,pe=Hl(dO(X.heapUsed,X.heapLimit)),ie=Hl(uO(X.rss,X.systemTotalMem));return[{label:"RSS",value:ji(X.rss),detail:Ag(X.rss,X.systemTotalMem),className:ie},{label:"Heap Used",value:ji(X.heapUsed),detail:`of ${ji(X.heapTotal)}`,className:pe},{label:"Heap Limit",value:ji(X.heapLimit),detail:"V8 limit"},{label:"External",value:ji(X.external)},{label:"Array Buffers",value:ji(X.arrayBuffers)}]},[a]),z=i.useCallback(async X=>{h(X);try{await Kn({vitestAutoKillEnabled:X}),S(null)}catch(pe){S(pe instanceof Error?pe.message:"Failed to save vitest settings")}},[]),_=i.useCallback(async X=>{const pe=Math.min(99,Math.max(50,Number.isFinite(X)?Math.round(X):90));f(pe);try{await Kn({vitestKillThresholdPct:pe}),S(null)}catch(ie){S(ie instanceof Error?ie.message:"Failed to save vitest settings")}},[]),A=i.useCallback(async()=>{if(!p){if(!w){v(!0);return}g(!0);try{const X=await E1(s);y(X),v(!1),await k({preserveKillResult:!0})}catch(X){d(X instanceof Error?X.message:"Failed to kill vitest processes")}finally{g(!1)}}},[w,p,k,s]);if(!e)return null;const Q=a?.systemStats,H=o&&!!a,M=C?`Updated ${new Date(C).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"})}`:"Waiting for first update",T=a?.taskStats,F=Q?Q.systemTotalMem-Q.systemFreeMem:0,W=Q?mO(F,Q.systemTotalMem):"normal",oe=Q?Hl(W):"",D=Q&&Number.isFinite(Q.systemTotalMem)&&Q.systemTotalMem>0?Math.max(0,Math.min(100,F/Q.systemTotalMem*100)):0,E=Q?`System memory used: ${D.toFixed(1)}% (${ji(F)} of ${ji(Q.systemTotalMem)})`:"System memory usage unavailable",P=a?.vitestProcessCount,$=hO(Q?.cpuPercent??null,Q?.cpuCount??0),j=Hl($),q=Q?.cpuPercent??null,de=q===null?0:Math.max(0,Math.min(100,q)),be=q===null?"Sampling…":`${q.toFixed(1)}%`,Ce=q===null?"App CPU usage unavailable: waiting for another sample":`App CPU usage: ${q.toFixed(1)}%`,Ae=b?b.killed>0?"system-stats-modal__kill-result system-stats-modal__kill-result--success":"system-stats-modal__kill-result system-stats-modal__kill-result--error":"",ae=pO(a?.vitestLastAutoKillAt);return t.jsx("div",{className:"modal-overlay open",role:"dialog","aria-modal":"true","aria-labelledby":"system-stats-modal-title",onClick:X=>{X.target===X.currentTarget&&n()},"data-testid":"system-stats-modal-overlay",children:t.jsxs("div",{className:"modal modal-lg system-stats-modal","data-testid":"system-stats-modal",children:[t.jsxs("div",{className:"modal-header system-stats-modal__header",children:[t.jsxs("h2",{id:"system-stats-modal-title",className:"system-stats-modal__title",children:[t.jsx(Pr,{}),t.jsx("span",{children:"System Stats"})]}),t.jsxs("div",{className:"system-stats-modal__header-actions",children:[t.jsxs("span",{className:"system-stats-modal__auto-refresh","aria-live":"polite",children:[t.jsx("span",{children:"Auto-refresh · 5s"}),t.jsx("span",{className:"system-stats-modal__auto-refresh-time",children:M})]}),t.jsx("button",{type:"button",className:"btn-icon",onClick:()=>void k(),title:"Refresh","aria-label":"Refresh system stats",children:t.jsx(us,{size:16,className:H?"system-stats-modal__refresh--spinning":void 0})}),t.jsx("button",{type:"button",className:"modal-close",onClick:n,"aria-label":"Close",children:t.jsx(kn,{})})]})]}),o&&!a&&t.jsx("div",{className:"system-stats-modal__state",children:"Loading system stats…"}),c&&!a&&t.jsx("div",{className:"system-stats-modal__state system-stats-modal__state--error",role:"alert",children:c}),a&&t.jsxs("div",{className:"system-stats-modal__content",children:[t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Process stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"Process"}),t.jsx("dl",{className:"system-stats-modal__grid",children:R.map(X=>t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:X.label}),t.jsxs("dd",{children:[t.jsx("span",{className:`system-stats-modal__value ${X.className}`.trim(),children:X.value}),X.detail?t.jsx("span",{className:"system-stats-modal__detail",children:X.detail}):null]})]},X.label))})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"CPU and load stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"CPU & Load"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row system-stats-modal__row--cpu-used",children:[t.jsx("dt",{children:"App CPU"}),t.jsxs("dd",{children:[t.jsx("span",{className:`system-stats-modal__value ${j}`.trim(),children:be}),t.jsx("span",{className:"system-stats-modal__detail",children:q===null?"First sample pending":"process usage"})]}),t.jsx("div",{className:"system-stats-modal__memory-progress-wrapper",children:t.jsx("div",{className:`system-stats-modal__memory-progress-track system-stats-modal__memory-progress-track--${$}`,role:"progressbar","aria-valuenow":Math.round(de),"aria-valuemin":0,"aria-valuemax":100,"aria-label":Ce,children:t.jsx("div",{className:`system-stats-modal__memory-progress-fill system-stats-modal__memory-progress-fill--${$}`,style:{width:`${de}%`}})})})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Load Avg"}),t.jsx("dd",{children:Q?.loadAvg.map(X=>X.toFixed(2)).join(" ")??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Cores"}),t.jsx("dd",{children:Q?.cpuCount??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Platform"}),t.jsx("dd",{children:Q?.platform??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Node"}),t.jsx("dd",{children:Q?.nodeVersion??"—"})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"PID"}),t.jsx("dd",{children:Q?.pid??"—"})]})]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"System memory stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"System"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row system-stats-modal__row--memory-used",children:[t.jsx("dt",{children:"Memory Used"}),t.jsxs("dd",{children:[t.jsx("span",{className:`system-stats-modal__value ${oe}`.trim(),children:Q?ji(F):"—"}),t.jsx("span",{className:"system-stats-modal__detail",children:Q?`${Ag(F,Q.systemTotalMem)} of ${ji(Q.systemTotalMem)}`:""})]}),t.jsx("div",{className:"system-stats-modal__memory-progress-wrapper",children:t.jsx("div",{className:`system-stats-modal__memory-progress-track system-stats-modal__memory-progress-track--${W}`,role:"progressbar","aria-valuenow":Math.round(D),"aria-valuemin":0,"aria-valuemax":100,"aria-label":E,children:t.jsx("div",{className:`system-stats-modal__memory-progress-fill system-stats-modal__memory-progress-fill--${W}`,style:{width:`${D}%`}})})})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Memory Free"}),t.jsx("dd",{children:Q?ji(Q.systemFreeMem):"—"})]})]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Task stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"Tasks"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Total"}),t.jsx("dd",{children:T?.total??0})]}),Object.entries(T?.byColumn??{}).map(([X,pe])=>t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:X}),t.jsx("dd",{children:pe})]},X))]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Agent stats",children:[t.jsx("h3",{className:"system-stats-modal__section-title",children:"Agents"}),t.jsxs("dl",{className:"system-stats-modal__grid",children:[t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"idle"}),t.jsx("dd",{children:T?.agents.idle??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"active"}),t.jsx("dd",{children:T?.agents.active??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"running"}),t.jsx("dd",{children:T?.agents.running??0})]}),t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"error"}),t.jsx("dd",{children:T?.agents.error??0})]})]})]}),t.jsxs("section",{className:"system-stats-modal__section","aria-label":"Vitest controls",children:[t.jsxs("h3",{className:"system-stats-modal__section-title system-stats-modal__section-title--with-icon",children:[t.jsx(Oj,{}),t.jsx("span",{children:"Vitest Controls"})]}),t.jsx("dl",{className:"system-stats-modal__grid system-stats-modal__vitest-controls",children:t.jsxs("div",{className:"system-stats-modal__row",children:[t.jsx("dt",{children:"Vitest Processes"}),t.jsx("dd",{children:P??"—"})]})}),t.jsxs("div",{className:"system-stats-modal__vitest-controls",children:[t.jsx("div",{className:"system-stats-modal__kill-row",children:t.jsxs("button",{type:"button",className:"btn btn-danger",onClick:()=>void A(),disabled:p||P===0,children:[t.jsx(Uj,{}),t.jsx("span",{children:w?"Confirm Kill?":"Kill Vitest Processes"})]})}),t.jsxs("label",{className:"system-stats-modal__toggle-row",children:[t.jsx("input",{type:"checkbox",checked:u,onChange:X=>{z(X.target.checked)}}),t.jsx("span",{children:"Auto-kill vitest on memory pressure"})]}),t.jsxs("div",{className:"system-stats-modal__threshold-row",children:[t.jsx("label",{htmlFor:"vitest-threshold-number",children:"Kill threshold (%)"}),t.jsxs("div",{className:"system-stats-modal__threshold-controls",children:[t.jsx("input",{id:"vitest-threshold-range",type:"range",min:50,max:99,value:m,"aria-label":"Kill threshold slider (%)",onChange:X=>{const pe=Number.parseInt(X.target.value,10);_(Number.isNaN(pe)?90:pe)}}),t.jsx("input",{id:"vitest-threshold-number",type:"number",className:"input",min:50,max:99,value:m,"aria-label":"Kill threshold (%)",onChange:X=>{const pe=Number.parseInt(X.target.value,10);_(Number.isNaN(pe)?90:pe)},onBlur:()=>{_(m)}})]})]}),b&&t.jsxs("p",{className:Ae,children:["Killed ",b.killed," processes"]}),t.jsxs("p",{className:"system-stats-modal__last-kill",children:["Last auto-kill: ",ae]}),N&&t.jsx("p",{className:"system-stats-modal__kill-result system-stats-modal__kill-result--error",children:N})]})]})]}),c&&a&&t.jsxs("div",{className:"system-stats-modal__footer-error",children:["Latest refresh failed: ",c]})]})})}const gO=5e3;function bO(e={}){const{projectId:n,type:s,limit:a=50,autoRefresh:r=!0,useCentralFeed:o=!1}=e,[l,c]=i.useState([]),[d,u]=i.useState(!1),[h,m]=i.useState(null),[f,p]=i.useState(!1),g=i.useRef(null),w=i.useRef(void 0),v=i.useCallback(async()=>{try{u(!0),m(null);let N;o?N=await Mh({limit:a,projectId:n,type:s}):N=(await kh({limit:a,type:s,projectId:n})).map(C=>({...C,projectId:n??"",projectName:""})),c(N),p(N.length===a),N.length>0&&(w.current=N[N.length-1].timestamp)}catch(N){m(N instanceof Error?N.message:"Failed to load activity log")}finally{u(!1)}},[a,n,s,o]),b=i.useCallback(async()=>{if(w.current)try{u(!0);let N;o?N=await Mh({limit:a,projectId:n,type:s,since:w.current}):N=(await kh({limit:a,type:s,since:w.current,projectId:n})).map(C=>({...C,projectId:n??"",projectName:""})),c(S=>[...S,...N]),p(N.length===a),N.length>0&&(w.current=N[N.length-1].timestamp)}catch(N){m(N instanceof Error?N.message:"Failed to load more entries")}finally{u(!1)}},[a,n,s,o]),y=i.useCallback(()=>{c([]),p(!1),w.current=void 0},[]);return i.useEffect(()=>{v()},[v]),i.useEffect(()=>{if(r)return g.current=setInterval(()=>{v()},gO),()=>{g.current&&(clearInterval(g.current),g.current=null)}},[r,v]),{entries:l,loading:d,error:h,refresh:v,clear:y,hasMore:f,loadMore:b}}const au={"task:created":"Task Created","task:moved":"Task Moved","task:updated":"Task Updated","task:deleted":"Task Deleted","task:merged":"Task Merged","task:failed":"Task Failed","settings:updated":"Settings Updated"},xO={"task:created":t.jsx(Bn,{size:14,className:"activity-icon created"}),"task:moved":t.jsx(Qo,{size:14,className:"activity-icon moved"}),"task:updated":t.jsx(us,{size:14,className:"activity-icon updated"}),"task:deleted":t.jsx(kn,{size:14,className:"activity-icon deleted"}),"task:merged":t.jsx(Xn,{size:14,className:"activity-icon merged"}),"task:failed":t.jsx(Xo,{size:14,className:"activity-icon failed"}),"settings:updated":t.jsx(Do,{size:14,className:"activity-icon settings"})};function vO(e){const n=new Date(e),a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4),o=Math.floor(a/36e5),l=Math.floor(a/864e5);return r<1?"Just now":r<60?`${r}m ago`:o<24?`${o}h ago`:l<7?`${l}d ago`:n.toLocaleDateString(void 0,{month:"short",day:"numeric"})}function yO({isOpen:e,onClose:n,tasks:s,onOpenTaskDetail:a,projectId:r,projects:o=[],onProjectFilterChange:l,currentProject:c}){const[d,u]=i.useState("all"),[h,m]=i.useState(r||"all"),[f,p]=i.useState(!1);i.useEffect(()=>{m(r||"all")},[r]);const g=d==="all"?void 0:d,w=h==="all"?void 0:h,v=!c&&o.length>0,{entries:b,loading:y,error:N,refresh:S,hasMore:C}=bO({projectId:w,type:g,limit:100,autoRefresh:e,useCentralFeed:v}),x=b.map(A=>({id:A.id,timestamp:A.timestamp,type:A.type,taskId:A.taskId,taskTitle:A.taskTitle,details:A.details,metadata:A.metadata,projectId:A.projectId,projectName:A.projectName})),k=async()=>{try{await W0(),S(),p(!1)}catch{p(!1)}},R=A=>{a&&a(A)},z=A=>{m(A),l?.(A==="all"?void 0:A)};i.useEffect(()=>{if(!e)return;const A=Q=>{Q.key==="Escape"&&(f?p(!1):n())};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[e,n,f]);const _=d!=="all"||h!=="all";return e?t.jsx("div",{className:"modal-overlay open",onClick:A=>{A.target===A.currentTarget&&n()},role:"dialog","aria-modal":"true","data-testid":"activity-log-modal-overlay",children:t.jsxs("div",{className:"modal modal-lg activity-log-modal","data-testid":"activity-log-modal",children:[t.jsxs("div",{className:"modal-header activity-log-header",children:[t.jsxs("div",{className:"activity-log-title",children:[t.jsx(qa,{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(ks,{size:14}),t.jsxs("select",{value:h,onChange:A=>z(A.target.value),className:"activity-log-filter-select","data-testid":"activity-project-filter",children:[t.jsx("option",{value:"all",children:"All Projects"}),o.map(A=>t.jsx("option",{value:A.id,children:A.name},A.id))]})]}),t.jsxs("div",{className:"activity-log-filter",children:[t.jsx(Zl,{size:14}),t.jsxs("select",{value:d,onChange:A=>u(A.target.value),className:"activity-log-filter-select","data-testid":"activity-filter",children:[t.jsx("option",{value:"all",children:"All Events"}),Object.entries(au).map(([A,Q])=>t.jsx("option",{value:A,children:Q},A))]})]}),t.jsx("button",{className:"activity-log-refresh",onClick:()=>S(),title:"Refresh","data-testid":"activity-refresh",children:y?t.jsx(_t,{size:14,className:"spin"}):t.jsx(us,{size:14})}),x.length>0&&t.jsx("button",{className:"activity-log-clear",onClick:()=>p(!0),title:"Clear Log","data-testid":"activity-clear",children:t.jsx(zn,{size:14})})]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",title:"Close","data-testid":"activity-close",children:"×"})]}),_&&t.jsxs("div",{className:"activity-log-active-filters",children:[t.jsx("span",{className:"activity-log-filter-label",children:"Active filters:"}),h!=="all"&&t.jsxs("span",{className:"activity-log-filter-badge",children:["Project: ",o.find(A=>A.id===h)?.name||h]}),d!=="all"&&t.jsxs("span",{className:"activity-log-filter-badge",children:["Type: ",au[d]]}),t.jsx("button",{className:"activity-log-clear-filters",onClick:()=>{u("all"),m("all"),l?.(void 0)},children:"Clear all"})]}),t.jsxs("div",{className:"activity-log-content","data-testid":"activity-log-content",children:[N&&t.jsxs("div",{className:"activity-log-error","data-testid":"activity-error",children:[t.jsx(Us,{size:16}),t.jsx("span",{children:N})]}),x.length===0&&!y&&!N&&t.jsxs("div",{className:"activity-log-empty","data-testid":"activity-empty",children:[t.jsx(qa,{size:48,className:"activity-log-empty-icon"}),t.jsx("p",{children:_?"No activity matches the current filters":"No activity recorded yet"}),_&&t.jsx("button",{className:"btn btn-secondary",onClick:()=>{u("all"),m("all"),l?.(void 0)},children:"Clear Filters"})]}),t.jsx("div",{className:"activity-log-list",children:x.map(A=>t.jsxs("div",{className:"activity-log-entry","data-testid":"activity-entry",children:[t.jsx("div",{className:"activity-log-entry-icon",children:xO[A.type]}),t.jsxs("div",{className:"activity-log-entry-content",children:[t.jsxs("div",{className:"activity-log-entry-header",children:[t.jsx("span",{className:"activity-log-entry-type",children:au[A.type]}),t.jsx("span",{className:"activity-log-entry-time",children:vO(A.timestamp)})]}),t.jsxs("div",{className:"activity-log-entry-details",children:[A.taskId&&t.jsx("button",{className:"activity-log-task-link",onClick:()=>R(A.taskId),"data-testid":"activity-task-link",children:A.taskId}),A.taskTitle&&t.jsx("span",{className:"activity-log-task-title",children:A.taskTitle}),t.jsx("span",{className:"activity-log-entry-text",children:Ns(A.details??"")})]}),A.metadata&&Object.keys(A.metadata).length>0&&t.jsxs("div",{className:"activity-log-entry-metadata",children:[typeof A.metadata.from=="string"&&typeof A.metadata.to=="string"&&t.jsxs("span",{className:"activity-log-metadata-item",children:[A.metadata.from," → ",A.metadata.to]}),typeof A.metadata.merged=="boolean"&&t.jsx("span",{className:`activity-log-metadata-item ${A.metadata.merged?"success":"error"}`,children:A.metadata.merged?"Merged":"Not merged"})]})]})]},A.id))}),C&&!y&&t.jsx("button",{className:"activity-log-load-more",onClick:S,"data-testid":"activity-load-more",children:"Load More"}),y&&x.length>0&&t.jsx("div",{className:"activity-log-loading",children:t.jsx(_t,{size:20,className:"spin"})})]}),f&&t.jsx("div",{className:"activity-log-confirm-overlay",children:t.jsxs("div",{className:"activity-log-confirm-dialog",children:[t.jsx("h3",{children:"Clear Activity Log?"}),t.jsx("p",{children:"This will permanently delete all activity log entries. This action cannot be undone."}),t.jsxs("div",{className:"activity-log-confirm-actions",children:[t.jsx("button",{className:"activity-log-confirm-cancel",onClick:()=>p(!1),children:"Cancel"}),t.jsx("button",{className:"activity-log-confirm-clear",onClick:k,children:"Clear Log"})]})]})})]})}):null}const jo=[{id:"status",label:"Status",icon:$b},{id:"changes",label:"Changes",icon:gu},{id:"commits",label:"Commits",icon:Ir},{id:"branches",label:"Branches",icon:Ps},{id:"worktrees",label:"Worktrees",icon:$k},{id:"stashes",label:"Stashes",icon:Wr},{id:"remotes",label:"Remotes",icon:Ib}];function Rg({status:e}){switch(e){case"added":case"untracked":return t.jsx(pk,{size:14,className:"gm-file-icon gm-file-added"});case"modified":return t.jsx(Ab,{size:14,className:"gm-file-icon gm-file-modified"});case"deleted":return t.jsx(uk,{size:14,className:"gm-file-icon gm-file-deleted"});case"renamed":case"copied":return t.jsx(ja,{size:14,className:"gm-file-icon gm-file-renamed"});default:return t.jsx(gk,{size:14,className:"gm-file-icon"})}}function Ig({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 wO(e){return i.useCallback(async(n,s)=>{try{await navigator.clipboard.writeText(n),e(`Copied ${s||"to clipboard"}`,"success")}catch{e("Failed to copy","error")}},[e])}function zr(e){if(!e)return"—";const n=new Date(e);if(isNaN(n.getTime()))return"—";const a=new Date().getTime()-n.getTime(),r=Math.floor(a/6e4);if(r<1)return"just now";if(r<60)return`${r}m ago`;const o=Math.floor(r/60);if(o<24)return`${o}h ago`;const l=Math.floor(o/24);return l<30?`${l}d ago`:n.toLocaleDateString()}function kO({isOpen:e,onClose:n,tasks:s,addToast:a,projectId:r}){const o=ii(),l=si();_i(e);const{keyboardOverlap:c,viewportHeight:d,viewportOffsetTop:u,keyboardOpen:h}=oa({enabled:l==="mobile"}),m=h?{"--keyboard-overlap":`${c}px`,"--vv-offset-top":`${u}px`,...d!==null?{"--vv-height":`${d}px`}:{}}:{},f=i.useCallback(()=>{if(l==="mobile"){const re=document.activeElement;re instanceof HTMLElement&&re.blur(),window.scrollTo(0,0),requestAnimationFrame(()=>{window.scrollTo(0,0)})}n()},[n,l]),[p,g]=i.useState("status"),[w,v]=i.useState(!1),[b,y]=i.useState(null),N=i.useRef(null);Ui(N,e,"fusion:git-modal-size");const S=aa(f),C=wO(a),[x,k]=i.useState(null),[R,z]=i.useState([]),[_,A]=i.useState(new Set),[Q,H]=i.useState(""),[M,T]=i.useState(!1),[F,W]=i.useState(null),[oe,D]=i.useState(!1),[E,P]=i.useState(null),[$,j]=i.useState(null),q=i.useRef(0),[de,be]=i.useState([]),[Ce,Ae]=i.useState(null),[ae,X]=i.useState(null),[pe,ie]=i.useState(!1),[ye,ee]=i.useState(20),[L,Y]=i.useState(""),[me,B]=i.useState([]),[xe,Ne]=i.useState(""),[te,Be]=i.useState(""),[$e,ct]=i.useState(""),[De,le]=i.useState(null),[_e,Le]=i.useState([]),[mt,Ve]=i.useState(!1),[ge,he]=i.useState(null),[Pe,dt]=i.useState(null),[jt,nt]=i.useState(!1),[xt,Ie]=i.useState([]),[Qe,ot]=i.useState([]),[Tt,Mt]=i.useState(""),[We,J]=i.useState(null),[ke,lt]=i.useState(null),[ve,st]=i.useState(null),[Ue,fe]=i.useState(!1),[Xe,vt]=i.useState(null),St=i.useRef(0),[Et,Pt]=i.useState(null),[Jt,dn]=i.useState(null),Vt=i.useCallback(async()=>{if(e){v(!0),y(null);try{switch(p){case"status":{const re=await ki(r);k(re);break}case"changes":{const[re,Ge]=await Promise.all([ki(r),gr(r)]);k(re),z(Ge),A(new Set),j(null),W(null),P(null);break}case"commits":{const re=await JS(ye,r);be(re);break}case"branches":{const[re,Ge]=await Promise.all([ro(r),ki(r)]);B(re),k(Ge);break}case"worktrees":{const re=await ZS(r);Ie(re);break}case"stashes":{const re=await gl(r);ot(re),lt(null),st(null),vt(null),St.current+=1;break}case"remotes":{const re=await ki(r);k(re);break}}}catch(re){y(Me(re)||"Failed to fetch git data"),a(Me(re)||"Failed to fetch git data","error")}finally{v(!1)}}},[p,e,ye,a,r]);i.useEffect(()=>{e&&Vt()},[Vt,e]),i.useEffect(()=>{if(!e)return;const re=Ge=>{if(Ge.key==="Escape"){f();return}if((Ge.key==="ArrowUp"||Ge.key==="ArrowDown")&&Ge.altKey){Ge.preventDefault();const Ct=jo.findIndex(Gt=>Gt.id===p);Ge.key==="ArrowUp"&&Ct>0?g(jo[Ct-1].id):Ge.key==="ArrowDown"&&Ct<jo.length-1&&g(jo[Ct+1].id)}};return document.addEventListener("keydown",re),()=>document.removeEventListener("keydown",re)},[e,f,p]);const ln=i.useCallback(async re=>{try{await gh(re,r),a(`Staged ${re.length} file(s)`,"success");const Ge=await gr(r);z(Ge),A(new Set),j(null),W(null),P(null)}catch(Ge){a(Me(Ge)||"Failed to stage files","error")}},[a,r]),fn=i.useCallback(async re=>{try{await d0(re,r),a(`Unstaged ${re.length} file(s)`,"success");const Ge=await gr(r);z(Ge),A(new Set),j(null),W(null),P(null)}catch(Ge){a(Me(Ge)||"Failed to unstage files","error")}},[a,r]),_n=i.useCallback(async re=>{if(await o.confirm({title:"Discard Changes",message:`Discard changes to ${re.length} file(s)? This cannot be undone.`,danger:!0}))try{await u0(re,r),a(`Discarded changes to ${re.length} file(s)`,"success");const[Ct,Gt]=await Promise.all([gr(r),ki(r)]);z(Ct),k(Gt),A(new Set),j(null),W(null),P(null)}catch(Ct){a(Me(Ct)||"Failed to discard changes","error")}},[a,r,o]),an=i.useCallback(async re=>{if(re.preventDefault(),!!Q.trim()){T(!0);try{const Ge=await bh(Q.trim(),r);a(`Committed: ${Ge.hash}`,"success"),H("");const[Ct,Gt]=await Promise.all([gr(r),ki(r)]);z(Ct),k(Gt),j(null),W(null),P(null)}catch(Ge){a(Me(Ge)||"Failed to commit","error")}finally{T(!1)}}},[Q,a,r]),Dn=i.useCallback(async()=>{if(Q.trim()){T(!0);try{const re=R.filter(cn=>!cn.staged).map(cn=>cn.file);re.length>0&&await gh(re,r);const Ge=await bh(Q.trim(),r);a(`Committed: ${Ge.hash}`,"success"),H("");const[Ct,Gt]=await Promise.all([gr(r),ki(r)]);z(Ct),k(Gt),j(null),W(null),P(null)}catch(re){a(Me(re)||"Failed to commit","error")}finally{T(!1)}}},[Q,R,a,r]),vn=i.useCallback(async(re,Ge)=>{j({file:re,staged:Ge}),D(!0),P(null);const Ct=q.current+1;q.current=Ct;try{const Gt=await c0(re,Ge,r);if(q.current!==Ct)return;W(Gt)}catch(Gt){if(q.current!==Ct)return;const cn=Me(Gt)||"Failed to load file diff";W(null),P(cn),a(cn,"error")}finally{q.current===Ct&&D(!1)}},[a,r]),Ut=i.useCallback(re=>{A(Ge=>{const Ct=new Set(Ge);return Ct.has(re)?Ct.delete(re):Ct.add(re),Ct})},[]),rn=i.useCallback(async re=>{if(Ce===re){Ae(null),X(null);return}Ae(re),ie(!0);try{const Ge=await ic(re,r);X(Ge)}catch(Ge){a(Me(Ge)||"Failed to load diff","error"),X(null)}finally{ie(!1)}},[Ce,a,r]),bn=i.useCallback(()=>{ee(re=>Math.min(re+20,100))},[]),en=i.useMemo(()=>{if(!L.trim())return de;const re=L.toLowerCase();return de.filter(Ge=>Ge.message.toLowerCase().includes(re)||Ge.author.toLowerCase().includes(re)||Ge.shortHash.toLowerCase().includes(re))},[de,L]),Yt=i.useCallback(async re=>{if(re.preventDefault(),!!xe.trim()){v(!0);try{await e0(xe.trim(),te.trim()||void 0,r),a(`Created branch ${xe}`,"success"),Ne(""),Be("");const Ge=await ro(r);B(Ge)}catch(Ge){a(Me(Ge)||"Failed to create branch","error")}finally{v(!1)}}},[xe,te,a,r]),tn=i.useCallback(async re=>{v(!0);try{await t0(re,r),a(`Switched to ${re}`,"success");const[Ge,Ct]=await Promise.all([ki(r),ro(r)]);k(Ge),B(Ct)}catch(Ge){a(Me(Ge)||"Failed to checkout branch","error")}finally{v(!1)}},[a,r]),Qt=i.useCallback(async re=>{if(await o.confirm({title:"Delete Branch",message:`Delete branch "${re}"?`,danger:!0})){v(!0);try{await fh(re,void 0,r),a(`Deleted branch ${re}`,"success");const Ct=await ro(r);B(Ct)}catch(Ct){if(Me(Ct).includes("not fully merged")){if(await o.confirm({title:"Force Delete Branch",message:"Branch has unmerged commits. Force delete?",danger:!0}))try{await fh(re,!0,r),a(`Force deleted branch ${re}`,"success");const cn=await ro(r);B(cn)}catch(cn){a(Me(cn)||"Failed to delete branch","error")}}else a(Me(Ct)||"Failed to delete branch","error")}finally{v(!1)}}},[a,r,o]),Kt=i.useMemo(()=>{if(!$e.trim())return me;const re=$e.toLowerCase();return me.filter(Ge=>Ge.name.toLowerCase().includes(re))},[me,$e]),xn=i.useCallback(async re=>{if(De===re){le(null),Le([]),he(null),dt(null);return}le(re),Le([]),he(null),dt(null),Ve(!0);try{const Ge=await XS(re,10,r);Le(Ge)}catch{Le([])}finally{Ve(!1)}},[De,r]),un=i.useCallback(async re=>{if(ge===re){he(null),dt(null);return}he(re),dt(null),nt(!0);try{const Ge=await ic(re,r);dt(Ge)}catch{dt(null)}finally{nt(!1)}},[ge,r]),pn=i.useCallback(()=>{le(null),Le([]),he(null),dt(null)},[]),$t=i.useCallback(()=>{St.current+=1,lt(null),st(null),vt(null),fe(!1)},[]),ue=i.useCallback(async re=>{re.preventDefault(),J("create"),$t();try{await a0(Tt.trim()||void 0,r),a("Changes stashed","success"),Mt("");const Ge=await gl(r);ot(Ge)}catch(Ge){a(Me(Ge)||"Failed to stash changes","error")}finally{J(null)}},[Tt,a,r,$t]),Re=i.useCallback(async(re,Ge=!1)=>{J(`apply-${re}`),$t();try{await r0(re,Ge,r),a(Ge?"Stash popped":"Stash applied","success");const Ct=await gl(r);ot(Ct)}catch(Ct){a(Me(Ct)||"Failed to apply stash","error")}finally{J(null)}},[a,r,$t]),et=i.useCallback(async re=>{if(await o.confirm({title:"Drop Stash",message:`Drop stash@{${re}}? This cannot be undone.`,danger:!0})){J(`drop-${re}`),$t();try{await o0(re,r),a("Stash dropped","success");const Ct=await gl(r);ot(Ct)}catch(Ct){a(Me(Ct)||"Failed to drop stash","error")}finally{J(null)}}},[a,r,o,$t]),at=i.useCallback(async re=>{if(ke===re){$t();return}const Ge=St.current+1;St.current=Ge,lt(re),st(null),vt(null),fe(!0);try{const Ct=await l0(re,r);if(St.current!==Ge)return;st(Ct)}catch(Ct){if(St.current!==Ge)return;st(null),vt(Me(Ct)||"Failed to load stash diff")}finally{St.current===Ge&&fe(!1)}},[ke,r,$t]),Je=i.useCallback(async()=>{Pt("fetch");try{const re=await n0(void 0,r);dn(re),a(re.message||"Fetch completed",re.fetched?"success":"info");const Ge=await ki(r);k(Ge)}catch(re){a(Me(re)||"Fetch failed","error")}finally{Pt(null)}},[a,r]),Nt=i.useCallback(async re=>{Pt("pull");try{const Ge=await s0(re,r);if(dn(Ge),Ge.conflict)a("Merge conflict detected. Resolve manually.","error");else{const Gt=re?.rebase?"Pull --rebase completed":"Pull completed";a(Ge.message||Gt,"success")}const Ct=await ki(r);k(Ct)}catch(Ge){a(Me(Ge)||"Pull failed","error")}finally{Pt(null)}},[a,r]),bt=i.useCallback(async()=>{Pt("push");try{const re=await i0(r);dn(re),a(re.message||"Push completed","success");const Ge=await ki(r);k(Ge)}catch(re){a(Me(re)||"Push failed","error")}finally{Pt(null)}},[a,r]),At=i.useMemo(()=>R.filter(re=>re.staged),[R]),se=i.useMemo(()=>R.filter(re=>!re.staged),[R]);return e?t.jsx("div",{className:"modal-overlay open git-manager-modal-overlay",...S,role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal gm-modal",ref:N,style:m,children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h3",{children:[t.jsx(bu,{size:18,style:{marginRight:8,verticalAlign:"middle"}}),"Git Manager"]}),t.jsxs("div",{className:"gm-header-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:Vt,disabled:w,title:"Refresh",children:t.jsx(us,{size:14,className:w?"spin":""})}),t.jsx("button",{className:"modal-close",onClick:f,"aria-label":"Close",children:t.jsx(kn,{size:18})})]})]}),t.jsxs("div",{className:"gm-layout",children:[t.jsx("nav",{className:"gm-sidebar",role:"tablist","aria-label":"Git Manager Sections",children:jo.map(re=>{const Ge=re.icon;return t.jsxs("button",{role:"tab","aria-selected":p===re.id,className:`gm-nav-item${p===re.id?" active":""}`,onClick:()=>g(re.id),children:[t.jsx(Ge,{size:16}),t.jsx("span",{className:"gm-nav-label",children:re.label})]},re.id)})}),t.jsxs("div",{className:"gm-content",role:"tabpanel",children:[w&&t.jsxs("div",{className:"gm-loading",children:[t.jsx(_t,{size:24,className:"spin"}),t.jsx("span",{children:"Loading..."})]}),b&&!w&&t.jsxs("div",{className:"gm-error",children:[t.jsx(Us,{size:18}),t.jsx("span",{children:b}),t.jsx("button",{className:"btn btn-sm",onClick:Vt,children:"Retry"})]}),p==="status"&&!w&&x&&t.jsx(jO,{status:x,copyToClipboard:C}),p==="changes"&&!w&&t.jsx(NO,{status:x,stagedFiles:At,unstagedFiles:se,selectedFiles:_,toggleFileSelection:Ut,onStageFiles:ln,onUnstageFiles:fn,onDiscardChanges:_n,onSelectDiffFile:vn,selectedDiffTarget:$,changeDiff:F,loadingChangeDiff:oe,changeDiffError:E,commitMessage:Q,setCommitMessage:H,onCommit:an,onStageAllAndCommit:Dn,committing:M}),p==="commits"&&!w&&t.jsx(SO,{commits:en,commitSearch:L,setCommitSearch:Y,selectedCommit:Ce,commitDiff:ae,loadingDiff:pe,onCommitClick:rn,onLoadMore:bn,canLoadMore:de.length>=ye&&ye<100,copyToClipboard:C}),p==="branches"&&!w&&t.jsx(CO,{branches:Kt,branchSearch:$e,setBranchSearch:ct,newBranchName:xe,setNewBranchName:Ne,branchBase:te,setBranchBase:Be,onCreateBranch:Yt,onCheckoutBranch:tn,onDeleteBranch:Qt,loading:w,allBranches:me,selectedBranch:De,branchCommits:_e,loadingBranchCommits:mt,expandedBranchCommit:ge,branchCommitDiff:Pe,loadingBranchCommitDiff:jt,onSelectBranch:xn,onBranchCommitClick:un,onCloseBranchDetails:pn}),p==="worktrees"&&!w&&t.jsx(EO,{worktrees:xt}),p==="stashes"&&!w&&t.jsx(_O,{stashes:Qe,stashMessage:Tt,setStashMessage:Mt,onCreateStash:ue,onApplyStash:Re,onDropStash:et,onToggleStashDiff:at,stashLoading:We,expandedStashIndex:ke,stashDiff:ve,loadingStashDiff:Ue,stashDiffError:Xe}),p==="remotes"&&!w&&t.jsx(MO,{status:x,remoteLoading:Et,lastRemoteResult:Jt,onFetch:Je,onPull:Nt,onPush:bt,addToast:a,projectId:r,copyToClipboard:C})]})]})]})}):null}function jO({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(Ps,{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(ka,{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(Us,{size:12}),"Modified"]}):t.jsxs(t.Fragment,{children:[t.jsx(Xn,{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(Ha,{size:12}),e.ahead]}),e.behind>0&&t.jsxs("span",{className:"gm-behind",title:`${e.behind} commit(s) behind`,children:[t.jsx(Yo,{size:12}),e.behind]}),e.ahead===0&&e.behind===0&&t.jsxs("span",{className:"gm-in-sync",children:[t.jsx(Xn,{size:12}),"Up to date"]})]})]})]})]})}function NO({status:e,stagedFiles:n,unstagedFiles:s,selectedFiles:a,toggleFileSelection:r,onStageFiles:o,onUnstageFiles:l,onDiscardChanges:c,onSelectDiffFile:d,selectedDiffTarget:u,changeDiff:h,loadingChangeDiff:m,changeDiffError:f,commitMessage:p,setCommitMessage:g,onCommit:w,onStageAllAndCommit:v,committing:b}){const y=s.filter(S=>a.has(`unstaged:${S.file}`)),N=n.filter(S=>a.has(`staged:${S.file}`));return t.jsxs("div",{className:"gm-panel","data-testid":"changes-panel",children:[e&&t.jsxs("div",{className:"gm-changes-header",children:[t.jsxs("span",{className:"gm-branch-indicator",children:[t.jsx(Ps,{size:14}),e.branch]}),e.isDirty&&t.jsx("span",{className:"gm-dirty-badge",children:"Modified"})]}),t.jsxs("div",{className:"gm-changes-split",children:[t.jsxs("div",{className:"gm-changes-lists",children:[t.jsxs("div",{className:"gm-file-section",children:[t.jsxs("div",{className:"gm-file-section-header",children:[t.jsxs("h5",{children:["Unstaged Changes (",s.length,")"]}),t.jsxs("div",{className:"gm-file-section-actions",children:[y.length>0&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn-sm btn-primary",onClick:()=>o(y.map(S=>S.file)),title:"Stage selected",children:[t.jsx(Bn,{size:12})," Stage (",y.length,")"]}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>c(y.map(S=>S.file)),title:"Discard selected",children:t.jsx(Xo,{size:12})})]}),s.length>0&&t.jsx("button",{className:"btn btn-sm",onClick:()=>o(s.map(S=>S.file)),title:"Stage all",children:"Stage All"})]})]}),t.jsx("div",{className:"gm-file-list gm-file-list-unstaged","data-testid":"gm-file-list-unstaged",children:s.length===0?t.jsx("div",{className:"gm-empty",children:"No unstaged changes"}):s.map(S=>{const C=u?.file===S.file&&u.staged===!1;return t.jsxs("div",{className:`gm-file-item${C?" active":""}`,onClick:()=>d(S.file,!1),role:"button",tabIndex:0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),d(S.file,!1))},children:[t.jsx("label",{className:"gm-file-checkbox",onClick:x=>x.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:a.has(`unstaged:${S.file}`),onChange:()=>r(`unstaged:${S.file}`)})}),t.jsx(Rg,{status:S.status}),t.jsx("span",{className:"gm-file-name",title:S.file,children:t.jsx("bdo",{dir:"ltr",children:S.file})}),t.jsx(Ig,{status:S.status}),t.jsx("button",{className:"gm-icon-btn",onClick:x=>{x.stopPropagation(),o([S.file])},title:"Stage file",children:t.jsx(Bn,{size:12})})]},`unstaged:${S.file}`)})})]}),t.jsxs("div",{className:"gm-file-section",children:[t.jsxs("div",{className:"gm-file-section-header",children:[t.jsxs("h5",{children:["Staged Changes (",n.length,")"]}),t.jsxs("div",{className:"gm-file-section-actions",children:[N.length>0&&t.jsxs("button",{className:"btn btn-sm",onClick:()=>l(N.map(S=>S.file)),title:"Unstage selected",children:["Unstage (",N.length,")"]}),n.length>0&&t.jsx("button",{className:"btn btn-sm",onClick:()=>l(n.map(S=>S.file)),title:"Unstage all",children:"Unstage All"})]})]}),t.jsx("div",{className:"gm-file-list gm-file-list-staged","data-testid":"gm-file-list-staged",children:n.length===0?t.jsx("div",{className:"gm-empty",children:"No staged changes"}):n.map(S=>{const C=u?.file===S.file&&u.staged===!0;return t.jsxs("div",{className:`gm-file-item staged${C?" active":""}`,onClick:()=>d(S.file,!0),role:"button",tabIndex:0,onKeyDown:x=>{(x.key==="Enter"||x.key===" ")&&(x.preventDefault(),d(S.file,!0))},children:[t.jsx("label",{className:"gm-file-checkbox",onClick:x=>x.stopPropagation(),children:t.jsx("input",{type:"checkbox",checked:a.has(`staged:${S.file}`),onChange:()=>r(`staged:${S.file}`)})}),t.jsx(Rg,{status:S.status}),t.jsx("span",{className:"gm-file-name",title:S.file,children:t.jsx("bdo",{dir:"ltr",children:S.file})}),t.jsx(Ig,{status:S.status}),t.jsx("button",{className:"gm-icon-btn",onClick:x=>{x.stopPropagation(),l([S.file])},title:"Unstage file",children:t.jsx(kn,{size:12})})]},`staged:${S.file}`)})})]})]}),t.jsx("div",{className:"gm-changes-diff",children:u||m||h||f?t.jsxs("div",{className:"gm-diff-section",children:[u&&t.jsxs("div",{className:"gm-diff-target",children:[t.jsx(gu,{size:14}),t.jsxs("span",{children:[u.staged?"Staged":"Unstaged"," diff: "]}),t.jsx("code",{children:u.file})]}),m&&t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(_t,{size:16,className:"spin"}),"Loading diff..."]}),f&&!m&&t.jsx("div",{className:"gm-diff-error",children:f}),h&&!m&&t.jsxs("div",{className:"gm-diff-viewer",children:[h.stat&&t.jsx("pre",{className:"gm-diff-stat",children:h.stat}),t.jsx("pre",{className:"gm-diff-patch",children:h.patch})]})]}):t.jsxs("div",{className:"gm-diff-empty",children:[t.jsx(gu,{size:20}),t.jsx("span",{children:"Select a file to view its diff"})]})})]}),t.jsxs("form",{className:"gm-commit-form",onSubmit:w,children:[t.jsx("textarea",{className:"gm-commit-input",placeholder:"Commit message...",value:p,onChange:S=>g(S.target.value),rows:3,disabled:b}),t.jsxs("div",{className:"gm-commit-actions",children:[t.jsxs("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:b||!p.trim()||n.length===0,title:n.length===0?"No staged changes to commit":"Commit staged changes",children:[b?t.jsx(_t,{size:14,className:"spin"}):t.jsx(Ua,{size:14}),"Commit"]}),s.length>0&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:v,disabled:b||!p.trim(),title:"Stage all and commit",children:"Stage All & Commit"})]})]})]})}function SO({commits:e,commitSearch:n,setCommitSearch:s,selectedCommit:a,commitDiff:r,loadingDiff:o,onCommitClick:l,onLoadMore:c,canLoadMore:d,copyToClipboard:u}){return t.jsxs("div",{className:"gm-panel","data-testid":"commits-panel",children:[t.jsxs("div",{className:"gm-panel-header",children:[t.jsx("h4",{children:"Commits"}),t.jsxs("div",{className:"gm-search-box",children:[t.jsx(Fi,{size:14}),t.jsx("input",{type:"text",placeholder:"Search commits...",value:n,onChange:h=>s(h.target.value)})]})]}),t.jsx("div",{className:"gm-commits-list",children:e.length===0?t.jsx("div",{className:"gm-empty",children:n?"No matching commits":"No commits found"}):e.map((h,m)=>t.jsxs("div",{className:"gm-commit-item",children:[t.jsxs("div",{className:"gm-commit-graph",children:[t.jsx("div",{className:"gm-commit-dot"}),m<e.length-1&&t.jsx("div",{className:"gm-commit-line"})]}),t.jsxs("div",{className:"gm-commit-body",children:[t.jsxs("button",{className:"gm-commit-header",onClick:()=>l(h.hash),children:[t.jsxs("div",{className:"gm-commit-top-row",children:[t.jsx("code",{className:"gm-hash",children:h.shortHash}),t.jsx("span",{className:"gm-commit-message",title:h.message,children:h.message})]}),t.jsxs("div",{className:"gm-commit-meta",children:[t.jsx("span",{children:h.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(h.date)}),h.parents.length>1&&t.jsx("span",{className:"gm-merge-badge",children:"merge"})]})]}),t.jsx("div",{className:"gm-commit-actions-row",children:t.jsx("button",{className:"gm-icon-btn",onClick:()=>u(h.hash,"commit hash"),title:"Copy full hash",children:t.jsx(ka,{size:12})})}),a===h.hash&&t.jsx("div",{className:"gm-commit-diff",children:o?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(_t,{size:16,className:"spin"}),"Loading diff..."]}):r?t.jsxs(t.Fragment,{children:[h.body&&t.jsx("div",{className:"gm-commit-message-full",children:h.body}),r.stat&&t.jsx("pre",{className:"gm-diff-stat",children:r.stat}),t.jsx("pre",{className:"gm-diff-patch",children:r.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]})]},h.hash))}),d&&t.jsx("button",{className:"gm-load-more",onClick:c,children:"Load more commits"})]})}function CO({branches:e,branchSearch:n,setBranchSearch:s,newBranchName:a,setNewBranchName:r,branchBase:o,setBranchBase:l,onCreateBranch:c,onCheckoutBranch:d,onDeleteBranch:u,loading:h,allBranches:m,selectedBranch:f,branchCommits:p,loadingBranchCommits:g,expandedBranchCommit:w,branchCommitDiff:v,loadingBranchCommitDiff:b,onSelectBranch:y,onBranchCommitClick:N,onCloseBranchDetails:S}){return t.jsxs("div",{className:"gm-panel","data-testid":"branches-panel",children:[t.jsxs("div",{className:"gm-panel-header",children:[t.jsx("h4",{children:"Branches"}),t.jsxs("div",{className:"gm-search-box",children:[t.jsx(Fi,{size:14}),t.jsx("input",{type:"text",placeholder:"Filter branches...",value:n,onChange:C=>s(C.target.value)})]})]}),t.jsxs("form",{className:"gm-create-form",onSubmit:c,children:[t.jsx("input",{type:"text",placeholder:"New branch name",value:a,onChange:C=>r(C.target.value),disabled:h}),t.jsxs("select",{value:o,onChange:C=>l(C.target.value),disabled:h,className:"gm-branch-select",children:[t.jsx("option",{value:"",children:"Base: HEAD"}),m.map(C=>t.jsx("option",{value:C.name,children:C.name},C.name))]}),t.jsxs("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:h||!a.trim(),children:[t.jsx(Bn,{size:14}),"Create"]})]}),t.jsx("div",{className:"gm-branches-list",children:e.length===0?t.jsx("div",{className:"gm-empty",children:n?"No matching branches":"No branches found"}):e.map(C=>t.jsxs("div",{children:[t.jsxs("div",{className:`gm-branch-item${C.isCurrent?" current":""}${f===C.name?" selected":""}`,onClick:()=>y(C.name),children:[t.jsxs("div",{className:"gm-branch-info",children:[t.jsxs("span",{className:"gm-branch-name",children:[C.isCurrent&&t.jsx(bs,{size:14,className:"gm-current-icon"}),C.name]}),C.remote&&t.jsxs("span",{className:"gm-branch-remote",children:["→ ",C.remote]}),C.lastCommitDate&&t.jsx("span",{className:"gm-branch-date",children:zr(C.lastCommitDate)})]}),t.jsx("div",{className:"gm-branch-actions",children:!C.isCurrent&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:x=>{x.stopPropagation(),d(C.name)},disabled:h,title:"Checkout",children:t.jsx(Ps,{size:14})}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:x=>{x.stopPropagation(),u(C.name)},disabled:h,title:"Delete",children:t.jsx(zn,{size:14})})]})})]}),f===C.name&&t.jsxs("div",{className:"gm-branch-details",children:[t.jsxs("div",{className:"gm-branch-details-header",children:[t.jsxs("span",{className:"gm-branch-details-title",children:[t.jsx(Ir,{size:14}),"Commits on ",C.name]}),t.jsx("button",{className:"gm-icon-btn",onClick:S,title:"Close","data-testid":"close-branch-details",children:t.jsx(kn,{size:14})})]}),g?t.jsxs("div",{className:"gm-branch-details-loading",children:[t.jsx(_t,{size:16,className:"spin"}),"Loading commits..."]}):p.length===0?t.jsx("div",{className:"gm-empty",children:"No commits found"}):t.jsx("div",{className:"gm-branch-commits-list",children:p.map(x=>t.jsxs("div",{className:"gm-branch-commit",children:[t.jsxs("button",{className:"gm-branch-commit-row",onClick:()=>N(x.hash),"data-testid":`branch-commit-${x.shortHash}`,children:[t.jsx("span",{className:"gm-commit-hash",children:x.shortHash}),t.jsx("span",{className:"gm-commit-message",title:x.message,children:x.message}),t.jsxs("div",{className:"gm-commit-meta",children:[t.jsx("span",{children:x.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(x.date)}),x.parents.length>1&&t.jsx("span",{className:"gm-merge-badge",children:"merge"})]})]}),w===x.hash&&t.jsx("div",{className:"gm-commit-diff",children:b?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(_t,{size:16,className:"spin"}),"Loading diff..."]}):v?t.jsxs(t.Fragment,{children:[(x.body||x.message)&&t.jsx("div",{className:"gm-commit-message-full",children:x.body||x.message}),v.stat&&t.jsx("pre",{className:"gm-diff-stat",children:v.stat}),t.jsx("pre",{className:"gm-diff-patch",children:v.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},x.hash))})]})]},C.name))})]})}function EO({worktrees:e}){return t.jsxs("div",{className:"gm-panel","data-testid":"worktrees-panel",children:[t.jsxs("div",{className:"gm-panel-header",children:[t.jsx("h4",{children:"Worktrees"}),t.jsxs("div",{className:"gm-worktree-stats",children:[t.jsxs("span",{children:[e.length," total"]}),t.jsx("span",{className:"gm-stat-separator",children:"•"}),t.jsxs("span",{children:[e.filter(n=>n.taskId).length," in use"]})]})]}),t.jsx("div",{className:"gm-worktrees-list",children:e.map(n=>t.jsx("div",{className:`gm-worktree-item${n.isMain?" main":""}`,children:t.jsxs("div",{className:"gm-worktree-info",children:[t.jsxs("div",{className:"gm-worktree-path-row",children:[n.isMain&&t.jsx("span",{className:"gm-badge main",children:"main"}),n.isBare&&t.jsx("span",{className:"gm-badge bare",children:"bare"}),t.jsx("span",{className:"gm-worktree-path",title:n.path,children:um(n.path)||n.path})]}),t.jsxs("div",{className:"gm-worktree-detail",children:[n.branch&&t.jsxs("span",{className:"gm-worktree-branch",children:[t.jsx(Ps,{size:12}),n.branch]}),n.taskId&&t.jsx("span",{className:"gm-worktree-task",children:n.taskId})]})]})},n.path))})]})}function _O({stashes:e,stashMessage:n,setStashMessage:s,onCreateStash:a,onApplyStash:r,onDropStash:o,onToggleStashDiff:l,stashLoading:c,expandedStashIndex:d,stashDiff:u,loadingStashDiff:h,stashDiffError:m}){return t.jsxs("div",{className:"gm-panel","data-testid":"stashes-panel",children:[t.jsx("div",{className:"gm-panel-header",children:t.jsx("h4",{children:"Stashes"})}),t.jsxs("form",{className:"gm-create-form",onSubmit:a,children:[t.jsx("input",{type:"text",placeholder:"Stash message (optional)",value:n,onChange:f=>s(f.target.value),disabled:c!==null}),t.jsxs("button",{type:"submit",className:"btn btn-primary btn-sm",disabled:c!==null,children:[c==="create"?t.jsx(_t,{size:14,className:"spin"}):t.jsx(Wr,{size:14}),"Stash"]})]}),t.jsx("div",{className:"gm-stash-list",children:e.length===0?t.jsx("div",{className:"gm-empty",children:"No stashes"}):e.map(f=>t.jsxs("div",{className:"gm-stash-item",children:[t.jsxs("div",{className:"gm-stash-header",children:[t.jsxs("div",{className:"gm-stash-info",children:[t.jsxs("span",{className:"gm-stash-ref",children:["stash@",`{${f.index}}`]}),t.jsx("span",{className:"gm-stash-message",children:f.message}),t.jsxs("div",{className:"gm-stash-meta",children:[f.branch&&t.jsxs("span",{className:"gm-stash-branch",children:[t.jsx(Ps,{size:12}),f.branch]}),t.jsx("span",{children:zr(f.date)})]})]}),t.jsxs("div",{className:"gm-stash-actions",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>l(f.index),disabled:c!==null,children:d===f.index?"Hide":"View"}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>r(f.index,!1),disabled:c!==null,title:"Apply stash (keep)",children:c===`apply-${f.index}`?t.jsx(_t,{size:14,className:"spin"}):"Apply"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>r(f.index,!0),disabled:c!==null,title:"Pop stash (apply and drop)",children:"Pop"}),t.jsx("button",{className:"btn btn-sm btn-danger",onClick:()=>o(f.index),disabled:c!==null,title:"Drop stash",children:c===`drop-${f.index}`?t.jsx(_t,{size:14,className:"spin"}):t.jsx(zn,{size:14})})]})]}),d===f.index&&t.jsx("div",{className:"gm-stash-diff",children:h?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(_t,{size:14,className:"spin"}),"Loading stash diff…"]}):m?t.jsx("div",{className:"gm-diff-error",children:m}):u?t.jsxs("div",{className:"gm-diff-viewer",children:[u.stat&&t.jsx("pre",{className:"gm-diff-stat",children:u.stat}),t.jsx("pre",{className:"gm-diff-patch",children:u.patch})]}):null})]},f.index))})]})}function MO({status:e,remoteLoading:n,lastRemoteResult:s,onFetch:a,onPull:r,onPush:o,addToast:l,projectId:c,copyToClipboard:d}){const u=he=>{try{return new URL(he).hostname}catch{return he.replace(/^git@/,"").split(":")[0]||he}},[h,m]=i.useState([]),[f,p]=i.useState(!1),[g,w]=i.useState(null),[v,b]=i.useState(""),[y,N]=i.useState(""),[S,C]=i.useState(null),[x,k]=i.useState(""),[R,z]=i.useState(""),[_,A]=i.useState(!1),[Q,H]=i.useState(!1),M=i.useRef(null),[T,F]=i.useState([]),[W,oe]=i.useState(!1),[D,E]=i.useState(null),[P,$]=i.useState([]),[j,q]=i.useState(!1),[de,be]=i.useState(null),Ce=i.useRef(0),Ae=h.find(he=>he.name===D);i.useEffect(()=>{(n!==null||f)&&H(!1)},[n,f]),i.useEffect(()=>{if(!Q)return;const he=dt=>{M.current?.contains(dt.target)||H(!1)},Pe=dt=>{dt.key==="Escape"&&H(!1)};return document.addEventListener("mousedown",he),document.addEventListener("keydown",Pe),()=>{document.removeEventListener("mousedown",he),document.removeEventListener("keydown",Pe)}},[Q]);const[ae,X]=i.useState(null),[pe,ie]=i.useState(null),[ye,ee]=i.useState(!1),[L,Y]=i.useState(null),[me,B]=i.useState(null),[xe,Ne]=i.useState(!1);i.useEffect(()=>{te()},[]),i.useEffect(()=>{e&&e.ahead>0?Be():e&&e.ahead===0&&F([])},[e?.ahead]),i.useEffect(()=>{h.length>0&&!D&&E(h[0].name)},[h]),i.useEffect(()=>{D?$e(D):($([]),be(null))},[D]),i.useEffect(()=>{!D||!s||$e(D)},[D,s]),i.useEffect(()=>{D&&!h.find(he=>he.name===D)&&E(h.length>0?h[0].name:null)},[h,D]);const te=async()=>{p(!0);try{const he=await BS(c);m(he)}catch(he){l(Me(he)||"Failed to load remotes","error")}finally{p(!1)}},Be=async()=>{oe(!0);try{const he=await YS(c);F(he)}catch{F([])}finally{oe(!1)}},$e=async he=>{const Pe=Ce.current+1;Ce.current=Pe,q(!0),be(null);try{const dt=await QS(he,void 0,10,c);if(Ce.current!==Pe)return;$(dt)}catch(dt){if(Ce.current!==Pe)return;be(Me(dt)||"Failed to load remote commits"),$([])}finally{Ce.current===Pe&&q(!1)}},ct=ii(),De=async he=>{if(he.preventDefault(),!(!v.trim()||!y.trim())){w("add");try{await US(v.trim(),y.trim(),c),l(`Remote '${v}' added successfully`,"success"),b(""),N(""),A(!1),await te()}catch(Pe){l(Me(Pe)||"Failed to add remote","error")}finally{w(null)}}},le=async he=>{if(await ct.confirm({title:"Remove Remote",message:`Are you sure you want to remove remote '${he}'?`,danger:!0})){w(`remove-${he}`);try{await HS(he,c),l(`Remote '${he}' removed`,"success"),await te()}catch(dt){l(Me(dt)||"Failed to remove remote","error")}finally{w(null)}}},_e=async he=>{if(R.trim()){w(`rename-${he}`);try{await qS(he,R.trim(),c),l(`Remote renamed to '${R.trim()}'`,"success"),C(null),z(""),await te()}catch(Pe){l(Me(Pe)||"Failed to rename remote","error")}finally{w(null)}}},Le=async he=>{if(x.trim()){w(`url-${he}`);try{await VS(he,x.trim(),c),l("Remote URL updated","success"),C(null),k(""),await te()}catch(Pe){l(Me(Pe)||"Failed to update remote URL","error")}finally{w(null)}}},mt=i.useCallback(async(he,Pe)=>{if(Pe==="ahead"){if(ae===he){X(null),ie(null);return}X(he),ie(null),ee(!0);try{const dt=await ic(he);ie(dt)}catch{ie(null)}finally{ee(!1)}}else{if(L===he){Y(null),B(null);return}Y(he),B(null),Ne(!0);try{const dt=await ic(he);B(dt)}catch{B(null)}finally{Ne(!1)}}},[ae,L]),Ve=he=>{C(`url-${he.name}`),k(he.pushUrl||he.fetchUrl)},ge=he=>{C(`name-${he.name}`),z(he.name)};return t.jsx("div",{className:"gm-panel gm-remotes-panel","data-testid":"remotes-panel",children:t.jsxs("div",{className:"gm-remotes-layout",children:[t.jsxs("div",{className:"gm-remote-selector","data-testid":"remote-selector",children:[t.jsxs("div",{className:"gm-remote-selector-header",children:[t.jsx("span",{className:"gm-remote-selector-title",children:"Remotes"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>A(!_),disabled:g!==null,title:_?"Cancel":"Add Remote",children:_?t.jsx(kn,{size:14}):t.jsx(Bn,{size:14})})]}),_&&t.jsxs("form",{className:"gm-remote-form",onSubmit:De,children:[t.jsx("input",{type:"text",placeholder:"Remote name",value:v,onChange:he=>b(he.target.value),disabled:g==="add",className:"input gm-input"}),t.jsx("input",{type:"text",placeholder:"Repository URL",value:y,onChange:he=>N(he.target.value),disabled:g==="add",className:"input gm-input gm-input-url"}),t.jsxs("button",{type:"submit",className:"btn btn-sm btn-primary",disabled:!v.trim()||!y.trim()||g==="add",children:[g==="add"?t.jsx(_t,{size:12,className:"spin"}):t.jsx(Bn,{size:12}),"Add"]})]}),f?t.jsxs("div",{className:"gm-loading",children:[t.jsx(_t,{size:16,className:"spin"}),"Loading..."]}):h.length===0?t.jsx("div",{className:"gm-empty",children:"No remotes"}):h.map(he=>t.jsxs("div",{className:`gm-remote-selector-item${D===he.name?" selected":""}`,onClick:()=>E(he.name),role:"button",tabIndex:0,onKeyDown:Pe=>{(Pe.key==="Enter"||Pe.key===" ")&&(Pe.preventDefault(),E(he.name))},children:[t.jsxs("div",{className:"gm-remote-selector-info",children:[t.jsxs("span",{className:"gm-remote-selector-name",children:[t.jsx("span",{className:"gm-remote-selector-name-text",children:he.name}),he.name==="origin"&&t.jsx("span",{className:"gm-remote-default-badge",children:"default"})]}),t.jsx("span",{className:"gm-remote-selector-host",title:he.fetchUrl,children:u(he.fetchUrl)})]}),t.jsx("button",{className:"btn btn-icon btn-sm gm-remote-remove-btn",onClick:Pe=>{Pe.stopPropagation(),le(he.name)},disabled:g!==null,title:"Remove remote",children:t.jsx(zn,{size:14})})]},he.name))]}),t.jsxs("div",{className:"gm-remote-detail","data-testid":"remote-detail-panel",children:[D&&Ae?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"gm-remote-sync-card","data-testid":"remote-sync-card",children:[t.jsxs("div",{className:"gm-remote-sync-card-header",children:[t.jsx("span",{className:"gm-remote-sync-card-title",children:D}),e&&(e.ahead>0||e.behind>0)&&t.jsxs("div",{className:"gm-remote-status",children:[e.ahead>0&&t.jsxs("div",{className:"gm-remote-indicator ahead",children:[t.jsx("span",{className:"status-dot status-dot--online","aria-hidden":"true"}),t.jsx(Ha,{size:14}),e.ahead," to push"]}),e.behind>0&&t.jsxs("div",{className:"gm-remote-indicator behind",children:[t.jsx("span",{className:"status-dot status-dot--pending","aria-hidden":"true"}),t.jsx(Yo,{size:14}),e.behind," to pull"]})]})]}),t.jsxs("div",{className:"gm-remote-actions",children:[t.jsxs("button",{className:"btn btn-primary",onClick:a,disabled:n!==null||f,children:[n==="fetch"?t.jsx(_t,{size:14,className:"spin"}):t.jsx(us,{size:14}),"Fetch"]}),t.jsxs("div",{className:"gm-pull-split",ref:M,children:[t.jsxs("button",{className:"btn btn-primary gm-pull-split-main",onClick:()=>{H(!1),r({rebase:!1})},disabled:n!==null||f,children:[n==="pull"?t.jsx(_t,{size:14,className:"spin"}):t.jsx(Xs,{size:14}),"Pull"]}),t.jsx("button",{className:"btn btn-primary btn-icon gm-pull-split-toggle",onClick:()=>H(he=>!he),disabled:n!==null||f,"aria-label":"Pull options","aria-haspopup":"menu","aria-expanded":Q,children:t.jsx(Cn,{size:14})}),Q?t.jsxs("div",{className:"gm-pull-menu",role:"menu","aria-label":"Pull options menu",children:[t.jsx("button",{className:"gm-pull-menu-item",role:"menuitem",onClick:()=>{H(!1),r({rebase:!1})},children:"Pull"}),t.jsx("button",{className:"gm-pull-menu-item",role:"menuitem",onClick:()=>{H(!1),r({rebase:!0})},children:"Pull --rebase"})]}):null]}),t.jsxs("button",{className:"btn btn-primary",onClick:o,disabled:n!==null||f,children:[n==="push"?t.jsx(_t,{size:14,className:"spin"}):t.jsx(Ha,{size:14}),"Push"]})]})]}),t.jsxs("div",{className:"gm-remote-detail-card","data-testid":"remote-detail-card",children:[t.jsxs("div",{className:"gm-remote-detail-urls",children:[t.jsxs("div",{className:"gm-remote-detail-url-row",children:[t.jsx("span",{className:"gm-url-label",children:"Fetch:"}),S===`url-${D}`?t.jsxs("div",{className:"gm-remote-edit",children:[t.jsx("input",{type:"text",value:x,onChange:he=>k(he.target.value),className:"input gm-input",autoFocus:!0}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>Le(D),disabled:g===`url-${D}`,children:g===`url-${D}`?t.jsx(_t,{size:12,className:"spin"}):t.jsx(bs,{size:12})}),t.jsx("button",{className:"btn btn-sm",onClick:()=>{C(null),k("")},title:"Cancel",children:t.jsx(kn,{size:12})})]}):t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"gm-url-value",title:Ae.fetchUrl,children:t.jsx("bdo",{dir:"ltr",children:Ae.fetchUrl})}),t.jsxs("div",{className:"gm-remote-inline-actions",children:[t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>d(Ae.fetchUrl,"fetch URL"),title:"Copy fetch URL",children:t.jsx(ka,{size:14})}),t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>Ve(Ae),disabled:g!==null,title:"Edit remote URL",children:t.jsx(Fs,{size:14})})]})]})]}),Ae.pushUrl&&Ae.pushUrl!==Ae.fetchUrl&&t.jsxs("div",{className:"gm-remote-detail-url-row",children:[t.jsx("span",{className:"gm-url-label",children:"Push:"}),t.jsx("span",{className:"gm-url-value",title:Ae.pushUrl,children:t.jsx("bdo",{dir:"ltr",children:Ae.pushUrl})}),t.jsx("div",{className:"gm-remote-inline-actions",children:t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>d(Ae.pushUrl,"push URL"),title:"Copy push URL",children:t.jsx(ka,{size:14})})})]})]}),t.jsx("div",{className:"gm-remote-detail-name-row",children:S===`name-${D}`?t.jsxs("div",{className:"gm-remote-edit",children:[t.jsx("input",{type:"text",value:R,onChange:he=>z(he.target.value),className:"input gm-input",autoFocus:!0}),t.jsx("button",{className:"btn btn-sm btn-primary",onClick:()=>_e(D),disabled:g===`rename-${D}`,children:g===`rename-${D}`?t.jsx(_t,{size:12,className:"spin"}):t.jsx(bs,{size:12})}),t.jsx("button",{className:"btn btn-sm",onClick:()=>{C(null),z("")},title:"Cancel",children:t.jsx(kn,{size:12})})]}):t.jsx("button",{className:"btn btn-icon btn-sm",onClick:()=>ge(Ae),disabled:g!==null,title:"Edit remote name",children:t.jsx(Fs,{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(Ha,{size:14}),"Commits to Push (",e.ahead,")"]})}),W?t.jsxs("div",{className:"gm-loading",children:[t.jsx(_t,{size:14,className:"spin"}),"Loading..."]}):T.length>0?t.jsx("div",{className:"gm-ahead-commits-list","data-testid":"ahead-commits-list",children:T.map(he=>t.jsxs("div",{className:"gm-commit-item-compact-wrapper",children:[t.jsxs("div",{className:"gm-commit-item-compact gm-commit-clickable",onClick:()=>mt(he.hash,"ahead"),role:"button",tabIndex:0,onKeyDown:Pe=>{(Pe.key==="Enter"||Pe.key===" ")&&(Pe.preventDefault(),mt(he.hash,"ahead"))},title:"Click to view diff",children:[t.jsx("div",{className:"gm-commit-compact-hash",children:t.jsx("code",{className:"gm-hash",children:he.shortHash})}),t.jsxs("div",{className:"gm-commit-compact-info",children:[t.jsx("span",{className:"gm-commit-message",title:he.message,children:he.message}),t.jsxs("span",{className:"gm-commit-meta",children:[t.jsx("span",{children:he.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(he.date)})]})]}),t.jsx("span",{className:"gm-commit-expand-icon",children:ae===he.hash?t.jsx(Cn,{size:14}):t.jsx(Vn,{size:14})})]}),ae===he.hash&&t.jsx("div",{className:"gm-commit-diff gm-commit-diff-compact",children:ye?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(_t,{size:16,className:"spin"}),"Loading diff..."]}):pe?t.jsxs(t.Fragment,{children:[(he.body||he.message)&&t.jsx("div",{className:"gm-commit-message-full",children:he.body||he.message}),pe.stat&&t.jsx("pre",{className:"gm-diff-stat",children:pe.stat}),t.jsx("pre",{className:"gm-diff-patch",children:pe.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},he.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($b,{size:14}),"Recent commits on ",D]})}),j?t.jsxs("div",{className:"gm-loading",children:[t.jsx(_t,{size:14,className:"spin"}),"Loading commits..."]}):de?t.jsxs("div",{className:"gm-error",children:[t.jsx(Us,{size:14}),de]}):P.length===0?t.jsxs("div",{className:"gm-empty",children:["No commits found on ",D,". Try fetching first."]}):t.jsx("div",{className:"gm-remote-commits-list","data-testid":"remote-commits-list",children:P.map(he=>t.jsxs("div",{className:"gm-commit-item-compact-wrapper",children:[t.jsxs("div",{className:"gm-commit-item-compact gm-commit-clickable",onClick:()=>mt(he.hash,"remote"),role:"button",tabIndex:0,onKeyDown:Pe=>{(Pe.key==="Enter"||Pe.key===" ")&&(Pe.preventDefault(),mt(he.hash,"remote"))},title:"Click to view diff",children:[t.jsx("div",{className:"gm-commit-compact-hash",children:t.jsx("code",{className:"gm-hash",children:he.shortHash})}),t.jsxs("div",{className:"gm-commit-compact-info",children:[t.jsx("span",{className:"gm-commit-message",title:he.message,children:he.message}),t.jsxs("span",{className:"gm-commit-meta",children:[t.jsx("span",{children:he.author}),t.jsx("span",{children:"•"}),t.jsx("span",{children:zr(he.date)})]})]}),t.jsx("span",{className:"gm-commit-expand-icon",children:L===he.hash?t.jsx(Cn,{size:14}):t.jsx(Vn,{size:14})})]}),L===he.hash&&t.jsx("div",{className:"gm-commit-diff gm-commit-diff-compact",children:xe?t.jsxs("div",{className:"gm-diff-loading",children:[t.jsx(_t,{size:16,className:"spin"}),"Loading diff..."]}):me?t.jsxs(t.Fragment,{children:[(he.body||he.message)&&t.jsx("div",{className:"gm-commit-message-full",children:he.body||he.message}),me.stat&&t.jsx("pre",{className:"gm-diff-stat",children:me.stat}),t.jsx("pre",{className:"gm-diff-patch",children:me.patch})]}):t.jsx("div",{className:"gm-diff-error",children:"Failed to load diff"})})]},he.hash))})]})]}):t.jsx("div",{className:"gm-empty",children:"Select a remote to view details"}),s&&t.jsx("div",{className:"gm-remote-result",children:s.message})]})]})})}const kr={name:"",description:"",mode:"prompt",phase:"pre-merge",prompt:"",gateMode:"advisory",scriptName:"",enabled:!0,defaultOn:!1,modelProvider:"",modelId:""};function AO(e,n){return e&&n?`${e}/${n}`:""}function RO(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 Tg(e){switch(e){case"file-text":return ja;case"check-circle":return Xn;case"shield":return zj;case"zap":return rs;case"eye":return Gr;case"globe":return jc;case"layout-grid":return Na;case"puzzle":return Sj;default:return Xn}}function Pg(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 IO({isOpen:e,onClose:n,addToast:s,projectId:a}){const[r,o]=i.useState([]),[l,c]=i.useState([]),[d,u]=i.useState({}),[h,m]=i.useState(!0),[f,p]=i.useState(!0),[g,w]=i.useState("my-steps"),[v,b]=i.useState(null),[y,N]=i.useState(!1),[S,C]=i.useState(!1),[x,k]=i.useState(kr),[R,z]=i.useState(!1),[_,A]=i.useState(!1),[Q,H]=i.useState(null),[M,T]=i.useState(null),[F,W]=i.useState({}),[oe,D]=i.useState([]),E=i.useRef(null);Ui(E,e,"fusion:workflow-steps-modal-size");const P=i.useCallback(async()=>{try{m(!0);const L=await sl(a);o(L)}catch(L){s(Me(L)||"Failed to load workflow steps","error")}finally{m(!1)}},[s,a]),$=i.useCallback(async()=>{try{const L=await Vo(a);W(L||{})}catch{}},[a]),j=i.useCallback(async()=>{try{const L=await Hs();D(L.models||[])}catch{}},[]),q=i.useCallback(async()=>{try{p(!0);const[L,Y]=await Promise.all([Y0(),Q0()]);c(L.templates);const me=Object.fromEntries(Y.templates.map(({pluginId:B,template:xe})=>[xe.id,B]));u(me)}catch(L){s(Me(L)||"Failed to load templates","error")}finally{p(!1)}},[s]);i.useEffect(()=>{e&&(P(),q(),$(),j())},[e,P,q,$,j]);const de=i.useCallback(()=>{C(!0),N(!1),b(null),k(kr)},[]),be=i.useCallback(()=>{C(!1),N(!0),b(null),k(kr)},[]),Ce=i.useCallback(L=>{b(L.id),N(!1),k({name:L.name,description:L.description,mode:L.mode||"prompt",phase:L.phase||"pre-merge",prompt:L.prompt,gateMode:L.gateMode||((L.mode||"prompt")==="script"?"gate":"advisory"),scriptName:L.scriptName||"",enabled:L.enabled,defaultOn:L.defaultOn||!1,modelProvider:L.modelProvider||"",modelId:L.modelId||""})},[]),Ae=i.useCallback(()=>{b(null),N(!1),C(!1),k(kr)},[]),ae=i.useCallback(async()=>{if(!x.name.trim()||!x.description.trim()){s("Name and description are required","error");return}z(!0);try{const L=x.mode==="prompt"&&x.modelProvider&&x.modelId?{modelProvider:x.modelProvider,modelId:x.modelId}:x.mode==="prompt"?{modelProvider:void 0,modelId:void 0}:{};if(y){const Y={name:x.name.trim(),description:x.description.trim(),mode:x.mode,phase:x.phase,prompt:x.mode==="prompt"&&x.prompt.trim()||void 0,gateMode:x.gateMode,scriptName:x.mode==="script"?x.scriptName.trim():void 0,enabled:x.enabled,defaultOn:x.defaultOn||void 0,...L};await jh(Y,a),s("Workflow step created","success")}else v&&(await G0(v,{name:x.name.trim(),description:x.description.trim(),mode:x.mode,phase:x.phase,prompt:x.mode==="prompt"?x.prompt:"",gateMode:x.gateMode,scriptName:x.mode==="script"?x.scriptName.trim():void 0,enabled:x.enabled,defaultOn:x.defaultOn,...L},a),s("Workflow step updated","success"));N(!1),b(null),k(kr),await P()}catch(L){s(Me(L)||"Failed to save workflow step","error")}finally{z(!1)}},[x,y,v,s,P]),X=i.useCallback(async L=>{try{await K0(L,a),s("Workflow step deleted","success"),H(null),v===L&&(b(null),k(kr)),await P()}catch(Y){s(Me(Y)||"Failed to delete workflow step","error")}},[v,s,P]),pe=i.useCallback(async()=>{if(!(!v&&!y)&&x.mode==="prompt"){if(y){if(!x.name.trim()||!x.description.trim()){s("Name and description are required before refining","error");return}z(!0);try{const L=x.modelProvider&&x.modelId?{modelProvider:x.modelProvider,modelId:x.modelId}:{},Y={name:x.name.trim(),description:x.description.trim(),mode:"prompt",prompt:x.prompt.trim()||void 0,gateMode:x.gateMode,enabled:x.enabled,defaultOn:x.defaultOn||void 0,...L},me=await jh(Y,a);N(!1),b(me.id),A(!0);const B=await Nh(me.id,a);k(xe=>({...xe,prompt:B.prompt})),s("Prompt refined with AI","success"),await P()}catch(L){s(Me(L)||"Failed to refine prompt","error")}finally{z(!1),A(!1)}return}if(v){A(!0);try{const L=await Nh(v,a);k(Y=>({...Y,prompt:L.prompt})),s("Prompt refined with AI","success"),await P()}catch(L){s(Me(L)||"Failed to refine prompt","error")}finally{A(!1)}}}},[v,y,x,s,P]),ie=i.useCallback(async L=>{T(L.id);try{await X0(L.id,a),s(`Added ${L.name} workflow step`,"success"),await P(),w("my-steps"),C(!1)}catch(Y){const me=Me(Y);me?.includes("already exists")?s(`A workflow step named '${L.name}' already exists`,"error"):s(me||"Failed to add workflow step from template","error")}finally{T(null)}},[s,P]),ye=aa(n);if(!e)return null;const ee=y||v!==null;return t.jsx("div",{className:"modal-overlay open",...ye,"data-testid":"workflow-step-manager",children:t.jsxs("div",{ref:E,className:"modal workflow-step-manager-modal",role:"dialog","aria-modal":"true","aria-label":"Workflow Steps",children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h2",{children:"Workflow Steps"}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:"×"})]}),t.jsx("div",{className:"wfm-body",children:h?t.jsx("div",{className:"wfm-loading",children:"Loading..."}):t.jsxs(t.Fragment,{children:[!ee&&t.jsxs("div",{className:"wfm-tab-row",children:[t.jsxs("button",{className:`btn ${g==="my-steps"?"btn-primary":"btn-secondary"} wfm-tab-btn`,onClick:()=>w("my-steps"),"data-testid":"tab-my-steps",children:[t.jsx(Mw,{size:14}),"My Workflow Steps (",r.length,")"]}),t.jsxs("button",{className:`btn ${g==="templates"?"btn-primary":"btn-secondary"} wfm-tab-btn`,onClick:()=>w("templates"),"data-testid":"tab-templates",children:[t.jsx(Na,{size:14}),"Templates (",l.length,")"]})]}),g==="my-steps"&&!ee&&!S&&t.jsxs(t.Fragment,{children:[r.length===0&&t.jsx("div",{className:"wfm-empty","data-testid":"empty-state",children:"No workflow steps defined. Create one to get started, or add one from the Templates tab."}),r.length>0&&t.jsx("div",{className:"wfm-step-list",children:r.map(L=>t.jsx("div",{className:"wfm-step-card","data-testid":`workflow-step-${L.id}`,children:t.jsxs("div",{className:"wfm-step-card-top",children:[t.jsxs("div",{className:"wfm-step-card-info",children:[t.jsxs("div",{className:"wfm-step-card-title-row",children:[t.jsx("span",{className:"wfm-step-card-name",children:L.name}),t.jsx("span",{className:`wfm-badge ${L.enabled?"wfm-badge-enabled":"wfm-badge-disabled"}`,children:L.enabled?"Enabled":"Disabled"}),t.jsx("span",{className:`wfm-badge ${(L.mode||"prompt")==="script"?"wfm-badge-script":"wfm-badge-prompt"}`,children:(L.mode||"prompt")==="script"?"Script":"AI Prompt"}),t.jsx("span",{className:`wfm-badge ${(L.phase||"pre-merge")==="post-merge"?"wfm-badge-post-merge":"wfm-badge-pre-merge"}`,children:(L.phase||"pre-merge")==="post-merge"?"Post-merge":"Pre-merge"}),t.jsx("span",{className:`wfm-badge ${(L.gateMode||((L.mode||"prompt")==="script"?"gate":"advisory"))==="gate"?"wfm-badge-gate":"wfm-badge-advisory"}`,children:(L.gateMode||((L.mode||"prompt")==="script"?"gate":"advisory"))==="gate"?"Gate":"Advisory"}),L.defaultOn&&t.jsx("span",{className:"wfm-badge wfm-badge-default-on",children:"Default on"})]}),t.jsx("div",{className:"wfm-step-card-desc",children:L.description})]}),t.jsxs("div",{className:"wfm-step-card-actions",children:[t.jsx("button",{className:"btn-icon",onClick:()=>Ce(L),title:"Edit","aria-label":`Edit ${L.name}`,children:t.jsx(Fs,{size:14})}),Q===L.id?t.jsxs("div",{className:"wfm-delete-confirm",children:[t.jsx("button",{className:"btn-icon wfm-delete-confirm-btn",onClick:()=>X(L.id),title:"Confirm delete","aria-label":`Confirm delete ${L.name}`,children:t.jsx(bs,{size:14})}),t.jsx("button",{className:"btn-icon",onClick:()=>H(null),title:"Cancel delete","aria-label":"Cancel delete",children:t.jsx(kn,{size:14})})]}):t.jsx("button",{className:"btn-icon",onClick:()=>H(L.id),title:"Delete","aria-label":`Delete ${L.name}`,children:t.jsx(zn,{size:14})})]})]})},L.id))})]}),g==="templates"&&!ee&&!S&&t.jsx(t.Fragment,{children:f?t.jsxs("div",{className:"wfm-loading",children:[t.jsx(_t,{size:24,className:"spin wfm-spinner"}),"Loading templates..."]}):l.length===0?t.jsx("div",{className:"wfm-empty","data-testid":"no-templates-state",children:"No templates available."}):t.jsx("div",{className:"wfm-template-list",children:l.map(L=>{const Y=Tg(L.icon),me=Pg(L.category),B=M===L.id;return t.jsx("div",{className:"wfm-template-card","data-testid":`template-${L.id}`,children:t.jsxs("div",{className:"wfm-template-inner",children:[t.jsx("div",{className:"wfm-template-icon",children:t.jsx(Y,{size:20})}),t.jsxs("div",{className:"wfm-template-content",children:[t.jsxs("div",{className:"wfm-template-title-row",children:[t.jsx("span",{className:"wfm-template-name",children:L.name}),t.jsx("span",{className:me,children:L.category}),d[L.id]&&t.jsx("span",{className:"wfm-badge-category wfm-badge-category-plugin",children:d[L.id]})]}),t.jsx("div",{className:"wfm-template-desc",children:L.description}),t.jsx("button",{className:"btn btn-primary wfm-template-add-btn",onClick:()=>ie(L),disabled:B,"data-testid":`add-template-${L.id}`,children:B?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:12,className:"spin"}),"Adding..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Bn,{size:12}),"Add"]})})]})]})},L.id)})})}),S&&!ee&&t.jsxs("div",{className:"wfm-create-chooser","data-testid":"workflow-step-create-chooser",children:[t.jsx("h3",{className:"wfm-form-title",children:"How would you like to create this workflow step?"}),t.jsx("p",{className:"wfm-create-chooser-hint",children:"Start from a built-in template or create a fully custom workflow step."}),t.jsxs("button",{className:"btn wfm-create-custom-btn",onClick:be,"data-testid":"create-custom-step",children:[t.jsx(Bn,{size:14}),"Custom workflow step"]}),f?t.jsxs("div",{className:"wfm-loading","data-testid":"create-chooser-template-loading",children:[t.jsx(_t,{size:24,className:"spin wfm-spinner"}),"Loading built-in templates..."]}):l.length===0?t.jsx("div",{className:"wfm-empty","data-testid":"create-chooser-no-templates",children:"No built-in templates are available right now. You can still create a custom step."}):t.jsx("div",{className:"wfm-template-list","data-testid":"create-chooser-templates",children:l.map(L=>{const Y=Tg(L.icon),me=Pg(L.category),B=M===L.id;return t.jsx("div",{className:"wfm-template-card","data-testid":`chooser-template-${L.id}`,children:t.jsxs("div",{className:"wfm-template-inner",children:[t.jsx("div",{className:"wfm-template-icon",children:t.jsx(Y,{size:20})}),t.jsxs("div",{className:"wfm-template-content",children:[t.jsxs("div",{className:"wfm-template-title-row",children:[t.jsx("span",{className:"wfm-template-name",children:L.name}),t.jsx("span",{className:me,children:L.category}),d[L.id]&&t.jsx("span",{className:"wfm-badge-category wfm-badge-category-plugin",children:d[L.id]})]}),t.jsx("div",{className:"wfm-template-desc",children:L.description}),t.jsx("button",{className:"btn btn-primary wfm-template-add-btn",onClick:()=>ie(L),disabled:B,"data-testid":`chooser-add-template-${L.id}`,children:B?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:12,className:"spin"}),"Adding..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Bn,{size:12}),"Add template"]})})]})]})},L.id)})})]}),ee&&t.jsxs("div",{className:"wfm-form","data-testid":"workflow-step-form",children:[t.jsx("h3",{className:"wfm-form-title",children:y?"New Workflow Step":"Edit Workflow Step"}),t.jsxs("div",{className:"wfm-form-fields",children:[t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Name"}),t.jsx("input",{type:"text",value:x.name,onChange:L=>k(Y=>({...Y,name:L.target.value})),placeholder:"e.g. Documentation Review","data-testid":"workflow-step-name"})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Description"}),t.jsx("textarea",{value:x.description,onChange:L=>k(Y=>({...Y,description:L.target.value})),placeholder:"Brief description of what this step does",rows:2,"data-testid":"workflow-step-description"})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Execution Mode"}),t.jsxs("div",{className:"wfm-mode-selector","data-testid":"workflow-step-mode-selector",children:[t.jsxs("button",{className:`btn ${x.mode==="prompt"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,mode:"prompt",gateMode:L.gateMode||"advisory",scriptName:""})),"data-testid":"mode-prompt",children:[t.jsx(ta,{size:14}),"AI Prompt"]}),t.jsxs("button",{className:`btn ${x.mode==="script"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,mode:"script",gateMode:"gate",prompt:"",modelProvider:"",modelId:""})),"data-testid":"mode-script",children:[t.jsx(na,{size:14}),"Run Script"]})]})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Execution Phase"}),t.jsxs("div",{className:"wfm-mode-selector","data-testid":"workflow-step-phase-selector",children:[t.jsx("button",{className:`btn ${x.phase==="pre-merge"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,phase:"pre-merge"})),"data-testid":"phase-pre-merge",children:"Pre-merge"}),t.jsx("button",{className:`btn ${x.phase==="post-merge"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,phase:"post-merge"})),"data-testid":"phase-post-merge",children:"Post-merge"})]}),t.jsx("div",{className:"wfm-field-hint",children:x.phase==="pre-merge"?"Runs before merge — can block merge on failure":"Runs after merge success — failures are logged but do not block"})]}),t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Failure Behavior"}),t.jsxs("div",{className:"wfm-mode-selector","data-testid":"workflow-step-gate-mode-selector",children:[t.jsx("button",{className:`btn ${x.gateMode==="advisory"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,gateMode:"advisory"})),"data-testid":"gate-mode-advisory",children:"Advisory"}),t.jsx("button",{className:`btn ${x.gateMode==="gate"?"btn-primary":"btn-secondary"} wfm-mode-btn`,onClick:()=>k(L=>({...L,gateMode:"gate"})),"data-testid":"gate-mode-gate",children:"Gate"})]}),t.jsx("div",{className:"wfm-field-hint",children:x.gateMode==="gate"?"Failures block merge and request remediation.":"Failures are recorded as advisory and do not block merge."})]}),x.mode==="prompt"&&t.jsxs("div",{className:"wfm-field",children:[t.jsxs("div",{className:"wfm-prompt-header",children:[t.jsx("label",{children:"Agent Prompt"}),t.jsxs("button",{className:"btn-icon wfm-refine-btn",onClick:pe,disabled:!x.description.trim()||_,title:"Refine with AI","aria-label":"Refine prompt with AI","data-testid":"refine-btn",children:[_?t.jsx(_t,{size:12,className:"spin"}):t.jsx(cs,{size:12}),t.jsx("span",{children:"Refine with AI"})]})]}),t.jsx("textarea",{value:x.prompt,onChange:L=>k(Y=>({...Y,prompt:L.target.value})),placeholder:"Leave empty to use AI refinement",rows:6,className:"wfm-prompt-textarea","data-testid":"workflow-step-prompt"})]}),x.mode==="prompt"&&t.jsxs("div",{className:"wfm-field","data-testid":"workflow-step-model-field",children:[t.jsxs("div",{className:"wfm-model-header",children:[t.jsx("label",{children:"Model Override"}),x.modelProvider&&x.modelId&&t.jsxs("button",{type:"button",className:"btn-icon wfm-model-clear-btn",onClick:()=>k(L=>({...L,modelProvider:"",modelId:""})),title:"Clear model override (use global default)","data-testid":"clear-model-override",children:[t.jsx(kn,{size:12}),t.jsx("span",{children:"Use default"})]})]}),t.jsx("span",{className:"wfm-model-hint",children:x.modelProvider&&x.modelId?`Using ${x.modelProvider}/${x.modelId}`:"Using global default model"}),t.jsx("div",{"data-testid":"workflow-step-model-select",children:t.jsx(Cs,{models:oe,value:AO(x.modelProvider,x.modelId),onChange:L=>{const Y=RO(L);k(me=>({...me,modelProvider:Y.provider,modelId:Y.modelId}))},placeholder:"Select a model override…",label:"Model override for this workflow step"})})]}),x.mode==="script"&&t.jsxs("div",{className:"wfm-field",children:[t.jsx("label",{children:"Script"}),Object.keys(F).length===0?t.jsx("div",{className:"wfm-no-scripts","data-testid":"no-scripts-message",children:"No scripts configured. Add scripts in Settings → Scripts first."}):t.jsxs("select",{value:x.scriptName,onChange:L=>k(Y=>({...Y,scriptName:L.target.value})),"data-testid":"workflow-step-script-select",children:[t.jsx("option",{value:"",children:"Select a script…"}),Object.entries(F).map(([L,Y])=>t.jsxs("option",{value:L,children:[L," (",Y,")"]},L))]})]}),t.jsxs("label",{className:"wfm-checkbox-label",children:[t.jsx("input",{type:"checkbox",checked:x.enabled,onChange:L=>k(Y=>({...Y,enabled:L.target.checked})),"data-testid":"workflow-step-enabled"}),"Enabled (available for selection on new tasks)"]}),t.jsxs("label",{className:"wfm-checkbox-label",children:[t.jsx("input",{type:"checkbox",checked:x.defaultOn,onChange:L=>k(Y=>({...Y,defaultOn:L.target.checked})),"data-testid":"workflow-step-default-on"}),"Default on for new tasks"]}),t.jsxs("div",{className:"wfm-form-actions",children:[t.jsx("button",{className:"btn btn-secondary",onClick:Ae,disabled:R,children:"Cancel"}),t.jsx("button",{className:"btn btn-primary",onClick:ae,disabled:R||!x.name.trim()||!x.description.trim()||x.mode==="script"&&!x.scriptName.trim(),"data-testid":"save-workflow-step",children:R?"Saving...":y?"Create":"Save"})]})]})]})]})}),!ee&&!S&&t.jsx("div",{className:"wfm-footer",children:t.jsxs("button",{className:"btn btn-primary wfm-footer-add-btn",onClick:de,"data-testid":"add-workflow-step",children:[t.jsx(Bn,{size:14}),"Add Workflow Step"]})})]})})}const TO=36e5,PO=3e5,ru=[{value:3e5,label:"5m"},{value:9e5,label:"15m"},{value:18e5,label:"30m"},{value:36e5,label:"1h"},{value:108e5,label:"3h"},{value:216e5,label:"6h"},{value:432e5,label:"12h"},{value:864e5,label:"24h"},{value:1728e5,label:"48h"},{value:2592e5,label:"72h"},{value:6048e5,label:"1w"}];function $O(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 DO(e){return typeof e!="number"||!Number.isFinite(e)?TO:Math.max(PO,Math.round(e))}function WB(e){if(ru.some(s=>s.value===e))return[...ru];const n={value:e,label:`${$O(e)} (custom)`};return[...ru,n].sort((s,a)=>s.value-a.value)}const LO=4,OO=5*6e4;function FO(e){const n=DO(e?.heartbeatIntervalMs);return Math.max(n*LO,OO)}function $g(e){const n=Math.floor(e/6e4);if(n<1)return"<1m";const s=Math.floor(n/60),a=n%60;return s>0&&a>0?`${s}h ${a}m`:s>0?`${s}h`:`${a}m`}function zO(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 BO(e){const s=e.metadata?.heartbeatTimerRepair;if(!s||typeof s!="object")return{};const a=s;return{repairedAt:typeof a.repairedAt=="string"?a.repairedAt:void 0,staleAtRepair:typeof a.staleAtRepair=="boolean"?a.staleAtRepair:void 0,staleRepairReason:typeof a.staleRepairReason=="string"?a.staleRepairReason:void 0}}function UO(e){const{state:n,lastHeartbeatAt:s,lastError:a,pauseReason:r,runtimeConfig:o}=e,l=zO(e),c=l||o?.enabled!==!1;if(n==="error")return{label:a??"Error",icon:t.jsx(Bs,{size:14}),color:"var(--state-error-text)",stateDerived:!a};if(n==="paused")return{label:r?`Paused: ${r}`:"Paused",icon:t.jsx(ui,{size:14}),color:"var(--state-paused-text)",stateDerived:!r};if(n==="running"||l&&n==="active")return{label:"Running",icon:t.jsx(Bs,{size:14}),color:"var(--state-active-text)",stateDerived:!0};if(!c)return{label:"Heartbeat Disabled",icon:t.jsx(ui,{size:14}),color:"var(--state-paused-text)",stateDerived:!1};if(!s)return{label:n==="active"?"Starting...":"Idle",icon:t.jsx(Qn,{size:14}),color:"var(--text-muted)",stateDerived:!1};const d=BO(e);if(d.staleAtRepair&&d.repairedAt){const f=Date.parse(d.repairedAt),p=Date.parse(s);if(Number.isFinite(f)&&Number.isFinite(p)&&p<f)return{label:"Unresponsive",icon:t.jsx(Bs,{size:14}),color:"var(--state-error-text)",stateDerived:!1,reason:d.staleRepairReason??"Heartbeat scheduler repaired a missing timer; waiting for recovery heartbeat"}}const u=new Date(s).getTime(),h=Date.now()-u,m=FO(o);if(h>m){const f=`No heartbeat for ${$g(h)} (threshold: ${$g(m)})`;return{label:"Unresponsive",icon:t.jsx(Bs,{size:14}),color:"var(--state-error-text)",stateDerived:!1,reason:f}}return{label:"Healthy",icon:t.jsx(Lk,{size:14}),color:"var(--state-active-text)",stateDerived:!1}}function gc({agent:e,size:n=36,className:s}){const[a,r]=i.useState(!1);i.useEffect(()=>{r(!1)},[e.imageUrl]);const o=i.useMemo(()=>{if(!e.imageUrl)return;const l=encodeURIComponent(e.updatedAt??""),c=e.imageUrl.includes("?")?"&":"?";return`${e.imageUrl}${c}t=${l}`},[e.imageUrl,e.updatedAt]);return t.jsx("span",{className:`agent-avatar${s?` ${s}`:""}`,style:{width:`${n}px`,height:`${n}px`},"aria-label":`${e.name} avatar`,children:o&&!a?t.jsx("img",{src:o,alt:`${e.name} avatar`,onError:()=>r(!0)}):e.icon?.trim()?t.jsx("span",{className:"agent-avatar-emoji",style:{fontSize:`calc(${n}px * 0.58)`},"aria-hidden":"true",children:e.icon}):t.jsx(Qn,{size:Math.max(14,Math.round(n*.55)),"aria-hidden":"true"})})}const HO="https://github.com/Runfusion/Fusion/issues/new";function qO(e,n){const s=`[Agent Error] ${n.surface}${n.agentName?` - ${n.agentName}`:""}`,a=["## Agent Error Report","",`- Surface: ${n.surface}`,`- Agent ID: ${n.agentId??"unknown"}`,`- Agent Name: ${n.agentName??"unknown"}`,`- Agent State: ${n.agentState??"unknown"}`,`- Run ID: ${n.runId??"n/a"}`,`- Task ID: ${n.taskId??"n/a"}`,`- Timestamp: ${n.timestamp??new Date().toISOString()}`,"","## Error","```text",e,"```"],r=new URLSearchParams({title:s,body:a.join(`
694
+ `)});return`${HO}?${r.toString()}`}function VO({open:e,onClose:n,errorText:s,issueContext:a}){const[r,o]=i.useState(!1),l=i.useMemo(()=>qO(s,a),[s,a]);return e?t.jsx("div",{className:"modal-overlay open",onClick:c=>c.target===c.currentTarget&&n(),role:"dialog","aria-modal":"true","aria-label":"Agent error details",children:t.jsxs("div",{className:"modal agent-error-modal",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h2",{className:"modal-title",children:[t.jsx(Us,{size:16}),"Agent Error Details"]}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:"×"})]}),t.jsx("div",{className:"agent-error-modal__content",children:t.jsx("pre",{className:"agent-error-modal__error",children:s})}),t.jsxs("div",{className:"modal-actions",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:()=>{navigator.clipboard.writeText(s).then(()=>{o(!0),setTimeout(()=>o(!1),1500)})},"aria-label":r?"Copied error to clipboard":"Copy error to clipboard",children:[r?t.jsx(bs,{size:14}):t.jsx(ka,{size:14}),r?"Copied":"Copy"]}),t.jsxs("a",{className:"btn btn-sm btn-warning",href:l,target:"_blank",rel:"noreferrer",onClick:c=>{c.preventDefault(),window.open(l,"_blank","noopener,noreferrer")},children:[t.jsx(Mb,{size:14}),"Report on GitHub"]})]})]})}):null}function WO({errorText:e,issueContext:n,summaryPrefix:s="Error"}){const[a,r]=i.useState(!1);return t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",className:"agent-error-indicator",onClick:()=>r(!0),"aria-label":"Open error details",children:[t.jsx(Us,{size:14}),t.jsx("span",{className:"agent-error-indicator__label",children:s})]}),t.jsx(VO,{open:a,onClose:()=>r(!1),errorText:e,issueContext:n})]})}const ql=[{value:"triage",label:"Triage",icon:"⊕"},{value:"executor",label:"Executor",icon:"▶"},{value:"reviewer",label:"Reviewer",icon:"⊙"},{value:"merger",label:"Merger",icon:"⊞"},{value:"scheduler",label:"Scheduler",icon:"◷"},{value:"engineer",label:"Engineer",icon:"⎔"},{value:"custom",label:"Custom",icon:"✦"}];function GO({isOpen:e,onClose:n,addToast:s,projectId:a}){const[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState(!1),[h,m]=i.useState(""),[f,p]=i.useState("custom"),[g,w]=i.useState("all"),[v,b]=i.useState(()=>{if(typeof window>"u")return"list";const $=Wn("fn-agent-view",a);return $==="board"||$==="list"?$:"list"});i.useEffect(()=>{const $=Wn("fn-agent-view",a);if($==="board"||$==="list"){b($);return}b("list")},[a]),i.useEffect(()=>{ss("fn-agent-view",v,a)},[a,v]);const[y,N]=i.useState(null),S=i.useRef(null),[C,x]=i.useState(new Set),[k,R]=i.useState(new Map),{confirm:z}=ii(),_=i.useMemo(()=>k.size===0?r:r.map($=>{const j=k.get($.id);return j?{...$,state:j}:$}),[r,k]),A=i.useMemo(()=>g!=="all"?_:[..._].sort(($,j)=>{const q=$.state==="paused"?1:0,de=j.state==="paused"?1:0;return q!==de?q-de:(j.updatedAt??"").localeCompare($.updatedAt??"")}),[_,g]),Q=i.useCallback(async()=>{c(!0);try{const j=await Yr(g!=="all"?{state:g}:void 0,a);o(j)}catch($){s(`Failed to load agents: ${Me($)}`,"error")}finally{c(!1)}},[g,s,a]);i.useEffect(()=>{e&&Q()},[e,Q]),i.useEffect(()=>{if(!e)return;const $=setInterval(()=>{Q()},3e4);return()=>{clearInterval($)}},[e,Q]);const H=async()=>{if(h.trim())try{await o1({name:h.trim(),role:f},a),s(`Agent "${h}" created`,"success"),m(""),u(!1),Q()}catch($){s(`Failed to create agent: ${Me($)}`,"error")}},M=async($,j)=>{if(!C.has($)){x(q=>new Set(q).add($)),R(q=>{const de=new Map(q);return de.set($,j),de});try{await c1($,j,a),s(`Agent state updated to ${j}`,"success"),await Q(),R(q=>{const de=new Map(q);return de.delete($),de})}catch(q){R(de=>{const be=new Map(de);return be.delete($),be}),s(`Failed to update state: ${Me(q)}`,"error")}finally{x(q=>{const de=new Set(q);return de.delete($),de})}}},T=async($,j)=>{if(await z({title:"Delete Agent",message:`Delete agent "${j}"? This cannot be undone.`,danger:!0}))try{await d1($,a),s(`Agent "${j}" deleted`,"success"),Q()}catch(de){s(`Failed to delete agent: ${Me(de)}`,"error")}},F=async($,j)=>{const q=r.find(de=>de.id===$);if(q){if(q.role===j){N(null);return}try{await l1($,{role:j},a),s(`Agent role updated to ${ql.find(de=>de.value===j)?.label??j}`,"success"),N(null),Q()}catch(de){s(`Failed to update role: ${Me(de)}`,"error")}}},W=($,j)=>{$.key==="Escape"&&N(null)},oe=$=>ql.find(j=>j.value===$)?.label??$,D=$=>UO($),E=$=>$.color==="var(--state-active-text)"?"active":$.color==="var(--state-paused-text)"?"paused":$.color==="var(--state-error-text)"?"error":"muted",P=($,j)=>$.state==="error"?{title:void 0,label:"Error"}:{title:j.reason??j.label,label:j.stateDerived?null:j.label};return e?t.jsx("div",{className:"modal-overlay open",onClick:$=>$.target===$.currentTarget&&n(),role:"dialog","aria-modal":"true",children:t.jsxs("div",{className:"modal modal--wide agent-list-modal",children:[t.jsxs("div",{className:"modal-header",children:[t.jsxs("h2",{className:"modal-title",children:[t.jsx(Qn,{size:20}),"Agents"]}),t.jsxs("div",{className:"modal-actions",children:[t.jsxs("div",{className:"view-toggle",children:[t.jsx("button",{className:`view-toggle-btn${v==="board"?" active":""}`,onClick:()=>b("board"),title:"Board view","aria-label":"Board view","aria-pressed":v==="board",children:t.jsx(Na,{size:16})}),t.jsx("button",{className:`view-toggle-btn${v==="list"?" active":""}`,onClick:()=>b("list"),title:"List view","aria-label":"List view","aria-pressed":v==="list",children:t.jsx(xu,{size:16})})]}),t.jsx("button",{className:"btn-icon",onClick:()=>void Q(),title:"Refresh",disabled:l,children:t.jsx(us,{size:16,className:l?"spin":""})}),t.jsx("button",{className:"modal-close",onClick:n,"aria-label":"Close",children:"×"})]})]}),t.jsxs("div",{className:"modal-content agent-modal-content",children:[t.jsxs("div",{className:"agent-controls",children:[t.jsxs("div",{className:"agent-state-filter",children:[t.jsx(Zl,{size:14}),t.jsxs("select",{className:"agent-state-filter-select",value:g,onChange:$=>w($.target.value),"aria-label":"Filter agents by state",children:[t.jsx("option",{value:"all",children:"All States"}),t.jsx("option",{value:"idle",children:"Idle"}),t.jsx("option",{value:"active",children:"Active"}),t.jsx("option",{value:"running",children:"Running"}),t.jsx("option",{value:"paused",children:"Paused"}),t.jsx("option",{value:"error",children:"Error"})]})]}),t.jsxs("button",{className:"btn btn-task-create btn-sm",onClick:()=>u(!d),children:[t.jsx(Bn,{size:16}),d?"Cancel":"New Agent"]})]}),d&&t.jsxs("div",{className:"agent-create-form",children:[t.jsx("input",{type:"text",placeholder:"Agent name...",value:h,onChange:$=>m($.target.value),onKeyDown:$=>$.key==="Enter"&&H(),className:"input",autoFocus:!0}),t.jsx("select",{className:"select",value:f,onChange:$=>p($.target.value),children:ql.map($=>t.jsxs("option",{value:$.value,children:[$.icon," ",$.label]},$.value))}),t.jsx("button",{className:"btn btn-task-create btn-sm",onClick:()=>void H(),children:"Create"})]}),t.jsx("div",{className:v==="board"?"agent-board":"agent-list",children:A.length===0?t.jsxs("div",{className:"agent-empty",children:[t.jsx(Qn,{size:48,opacity:.3}),t.jsx("p",{children:"No agents found"}),t.jsx("p",{className:"text-secondary",children:"Create an agent to get started"})]}):v==="board"?A.map($=>{const j=D($),q=P($,j),de=E(j);return t.jsxs("div",{className:"agent-board-card","data-state":$.state,children:[t.jsxs("div",{className:"agent-board-header",children:[t.jsx("span",{className:"agent-board-icon",children:t.jsx(gc,{agent:$,size:20})}),t.jsx("span",{className:"agent-board-badge","data-state":$.state,children:$.state}),t.jsx("span",{className:"agent-board-health","data-health":de,title:q.title,children:j.icon})]}),t.jsx("div",{className:"agent-board-name",title:$.name,children:$.name}),t.jsx("div",{className:"agent-board-id",children:$.id}),t.jsxs("div",{className:"agent-board-actions",children:[$.state==="idle"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Activate",children:t.jsx(is,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:t.jsx(zn,{size:14})})]}),$.state==="active"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:t.jsx(ui,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:t.jsx(Oi,{size:14})})]}),$.state==="paused"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Resume",children:t.jsx(is,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:t.jsx(zn,{size:14})})]}),$.state==="running"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:t.jsx(ui,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:t.jsx(Oi,{size:14})})]}),$.state==="error"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Retry",children:t.jsx(is,{size:14})}),t.jsx("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:t.jsx(Oi,{size:14})})]})]})]},$.id)}):A.map($=>{const j=D($),q=P($,j),de=E(j);return t.jsxs("div",{className:"agent-card","data-state":$.state,children:[t.jsxs("div",{className:"agent-card-header",children:[t.jsxs("div",{className:"agent-info",children:[y===$.id?t.jsx("select",{ref:S,className:"select agent-role-select",value:$.role,onChange:be=>void F($.id,be.target.value),onKeyDown:be=>W(be,$.id),onBlur:()=>N(null),autoFocus:!0,children:ql.map(be=>t.jsxs("option",{value:be.value,children:[be.icon," ",be.label]},be.value))}):t.jsx("span",{className:"agent-icon agent-icon--clickable",onClick:()=>N($.id),title:"Click to change role",role:"button",tabIndex:0,onKeyDown:be=>{(be.key==="Enter"||be.key===" ")&&N($.id)},children:t.jsx(gc,{agent:$,size:20})}),t.jsxs("div",{className:"agent-meta",children:[t.jsx("span",{className:"agent-name",children:$.name}),t.jsx("span",{className:"agent-id text-secondary",children:$.id})]})]}),t.jsxs("div",{className:"agent-badges",children:[t.jsx("span",{className:"badge agent-list-state-badge","data-state":$.state,children:$.state}),t.jsxs("span",{className:"badge agent-list-health-badge","data-health":de,title:q.title,children:[j.icon,q.label?` ${q.label}`:""]}),t.jsx("span",{className:"badge text-secondary",children:oe($.role)})]})]}),t.jsxs("div",{className:"agent-card-body",children:[$.state==="error"&&$.lastError?t.jsx(WO,{errorText:$.lastError,issueContext:{surface:"AgentListModal list",agentId:$.id,agentName:$.name,agentState:$.state,taskId:$.taskId}}):null,$.taskId&&t.jsxs("div",{className:"agent-task",children:[t.jsx("span",{className:"text-secondary",children:"Working on:"}),t.jsx("span",{className:"badge",children:$.taskId})]}),$.lastHeartbeatAt&&t.jsxs("div",{className:"agent-heartbeat",children:[t.jsx("span",{className:"text-secondary",children:"Last heartbeat:"}),t.jsx("span",{children:new Date($.lastHeartbeatAt).toLocaleString()})]})]}),t.jsxs("div",{className:"agent-card-actions",children:[$.state==="idle"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Activate",children:[t.jsx(is,{size:14})," Start"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:[t.jsx(zn,{size:14})," Delete"]})]}),$.state==="active"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:[t.jsx(ui,{size:14})," Pause"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:[t.jsx(Oi,{size:14})," Stop"]})]}),$.state==="paused"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Resume",children:[t.jsx(is,{size:14})," Resume"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void T($.id,$.name),title:"Delete",children:[t.jsx(zn,{size:14})," Delete"]})]}),$.state==="running"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Pause",children:[t.jsx(ui,{size:14})," Pause"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:[t.jsx(Oi,{size:14})," Stop"]})]}),$.state==="error"&&t.jsxs(t.Fragment,{children:[t.jsxs("button",{className:"btn btn--sm",onClick:()=>void M($.id,"active"),disabled:C.has($.id),title:"Retry",children:[t.jsx(is,{size:14})," Retry"]}),t.jsxs("button",{className:"btn btn--sm btn--danger",onClick:()=>void M($.id,"paused"),disabled:C.has($.id),title:"Stop",children:[t.jsx(Oi,{size:14})," Stop"]})]})]})]},$.id)})})]})]})}):null}function KO({authenticated:e,onToggled:n,compact:s=!1}){const[a,r]=i.useState(null),[o,l]=i.useState(null),[c,d]=i.useState(null),u=i.useRef(!0);i.useEffect(()=>(u.current=!0,()=>{u.current=!1}),[]);const h=i.useCallback(async()=>{try{const b=await gS();return u.current&&r(b),b}catch(b){return u.current&&d({kind:"error",message:b instanceof Error?b.message:String(b)}),null}},[]);i.useEffect(()=>{h()},[h]);const m=i.useCallback(async()=>{l("testing"),d(null),await h(),u.current&&l(null)},[h]),f=i.useCallback(async b=>{l(b?"enabling":"disabling"),d(null);try{const y=await kS(b);u.current&&d({kind:y.enabled?"enabled":"disabled",restartRequired:y.restartRequired}),n?.(y.enabled),await h()}catch(y){u.current&&d({kind:"error",message:y instanceof Error?y.message:String(y)})}finally{u.current&&l(null)}},[n,h]),p=a?.binary.available??!1,g=a?.enabled??e,w=t.jsxs("span",{className:"onboarding-provider-card__description",children:["Route AI calls through your locally-installed ",t.jsx("code",{children:"claude"})," CLI. Uses your existing Claude subscription / quota instead of an API key."]}),v=t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:m,disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(_t,{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(Gn,{provider:"claude-cli",size:"sm"}),t.jsx("strong",{children:"Anthropic — via Claude CLI"}),t.jsx(JO,{status:a,authenticated:e})]}),t.jsx("div",{className:"auth-provider-cli-actions",children:v})]}),t.jsxs("details",{className:"auth-provider-cli-details",children:[t.jsx("summary",{children:"Details"}),t.jsxs("div",{className:"auth-provider-cli-details-body",children:[w,t.jsx(Dg,{status:a,authenticated:e}),c&&t.jsx(Lg,{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(Gn,{provider:"claude-cli",size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:"Anthropic — via Claude CLI"}),w,t.jsx(Dg,{status:a,authenticated:e})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:v}),c&&t.jsx(Lg,{action:c})]})}function JO({status:e,authenticated:n}){const s=e?.enabled??n,a=e?.binary.available??!1;return s?t.jsx("span",{className:"auth-status-badge authenticated",children:"✓ Active"}):!a&&e?t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not installed"}):t.jsx("span",{className:"auth-status-badge not-authenticated",children:"✗ Not connected"})}function Dg({status:e,authenticated:n}){if(!e)return t.jsxs("small",{className:"settings-muted",children:[t.jsx(_t,{size:10,className:"animate-spin"})," Probing local CLI…"]});const{binary:s,enabled:a,extension:r,ready:o}=e;return s.available?a?r&&r.status!=="ok"?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--warning",children:["⚠ Extension load failed: ",r.reason??r.status]}):o||n?t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--connected",children:["✓ Connected",s.version?` — ${s.version}`:""]}):t.jsx("small",{className:"settings-muted",children:"Enabled. Validating…"}):t.jsxs("small",{className:"settings-muted",children:[t.jsx("code",{children:"claude"})," ",s.version?`(${s.version})`:""," detected",s.binaryPath?` at ${s.binaryPath}`:"",". Click Enable to route AI calls through it."]}):t.jsxs("small",{className:"onboarding-provider-card__status onboarding-provider-card__status--error",children:["✗ ",s.reason??"`claude` not found on PATH"]})}function Lg({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 YO({authenticated:e,compact:n=!1,onToggled:s}){const[a,r]=i.useState(null),[o,l]=i.useState(null),c=i.useRef(!0);i.useEffect(()=>(c.current=!0,()=>{c.current=!1}),[]);const d=i.useCallback(async()=>{try{const g=await yS();return c.current&&r(g),g}catch{return null}},[]);i.useEffect(()=>{d()},[d]);const u=i.useCallback(async g=>{l(g?"enabling":"disabling");try{const w=await NS(g);s?.(w.enabled),await d()}finally{c.current&&l(null)}},[s,d]),h=a?.enabled??e,m=a?.binary.available??!1,f=t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{l("testing"),d().finally(()=>{c.current&&l(null)})},disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:12,className:"animate-spin"})," Testing…"]}):"Test"}),h?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void u(!1),disabled:o!==null,children:o==="disabling"?"Disabling…":"Disable"}):t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void u(!0),disabled:o!==null||!m,children:o==="enabling"?"Enabling…":"Enable"})]}),p=a?a.binary.available?h?`Connected${a.binary.version?` — ${a.binary.version}`:""}`:"Detected. Click Enable to route calls through Cursor CLI.":a.binary.reason??"`cursor-agent` not found on PATH":"Probing local CLI…";return n?t.jsxs("div",{className:`cursor-cli-provider-card auth-provider-card auth-provider-card--cli${e?" auth-provider-card--authenticated":""}`,"data-testid":"cursor-cli-provider-card",children:[t.jsxs("div",{className:"auth-provider-header",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Gn,{provider:"cursor-cli",size:"sm"}),t.jsx("strong",{children:"Cursor — via Cursor CLI"}),t.jsx("span",{className:`auth-status-badge ${h?"authenticated":"not-authenticated"}`,children:h?"✓ Active":"✗ Not connected"})]}),t.jsx("div",{className:"auth-provider-cli-actions",children:f})]}),t.jsx("small",{className:"settings-muted",children:p})]}):t.jsxs("div",{className:`cursor-cli-provider-card onboarding-provider-card${e?" onboarding-provider-card--connected":""}`,"data-testid":"cursor-cli-provider-card",children:[t.jsx("div",{className:"onboarding-provider-card__icon",children:t.jsx(Gn,{provider:"cursor-cli",size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:"Cursor — via Cursor CLI"}),t.jsx("span",{className:"onboarding-provider-card__description",children:"Route AI calls through your local Cursor agent runtime."}),t.jsx("small",{className:"settings-muted",children:p})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:f})]})}function QO({authenticated:e,onToggled:n,compact:s=!1}){const[a,r]=i.useState(null),[o,l]=i.useState(null),c=i.useRef(!0);i.useEffect(()=>(c.current=!0,()=>{c.current=!1}),[]);const d=i.useCallback(async()=>{const w=await wS();return c.current&&r(w),w},[]);i.useEffect(()=>{d()},[d]);const u=i.useCallback(async w=>{l(w?"enabling":"disabling");try{const v=await SS(w);n?.(v.enabled),await d()}finally{c.current&&l(null)}},[n,d]),h=i.useCallback(async()=>{l("testing");try{await d()}finally{c.current&&l(null)}},[d]),m=a?.enabled??e,f=a?.server.available??!1,p=a?a.server.available?`Server reachable at ${a.server.url}`:`Server unavailable: ${a.server.reason??"not reachable"}`:"Probing llama.cpp server…",g=t.jsxs("div",{className:"auth-provider-cli-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void h(),disabled:o!==null,children:o==="testing"?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:12,className:"animate-spin"}),"Testing…"]}):"Test"}),m?t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void u(!1),disabled:o!==null,children:o==="disabling"?"Disabling…":"Disable"}):t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void u(!0),disabled:o!==null||!f,children:o==="enabling"?"Enabling…":"Enable"})]});return s?t.jsxs("div",{className:`auth-provider-card auth-provider-card--cli llama-cpp-provider-card llama-cpp-provider-card--compact${m?" auth-provider-card--authenticated":""}`,"data-testid":"llama-cpp-provider-card",children:[t.jsxs("div",{className:"auth-provider-header",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Gn,{provider:"llama-cpp",size:"sm"}),t.jsx("strong",{children:"llama.cpp — via HTTP server"})]}),g]}),t.jsx("small",{className:`auth-hint llama-cpp-status${a?.ready?" llama-cpp-status--ok":""}`,children:p})]}):t.jsxs("div",{className:"onboarding-provider-card llama-cpp-provider-card llama-cpp-provider-card--full","data-testid":"llama-cpp-provider-card",children:[t.jsxs("div",{className:"auth-provider-info",children:[t.jsx(Gn,{provider:"llama-cpp",size:"md"}),t.jsx("strong",{children:"llama.cpp — via HTTP server"})]}),t.jsx("small",{className:`llama-cpp-status${a?.ready?" llama-cpp-status--ok":""}`,children:p}),g]})}function XO(e){const n="([A-Z0-9]{2,}(?:-[A-Z0-9]{2,})+|[A-Z0-9]{6,9})",s=new RegExp(`\\b(?:device\\s+code|your\\s+code|code)\\s*(?:is|:)?\\s*${n}\\b`,"i"),a=new RegExp(`\\b(?:enter|use)\\s+${n}\\b`,"i"),r=/\b([A-Z0-9]{2,}(?:-[A-Z0-9]{2,})+)\b/,o=e.match(s);if(o?.[1])return o[1];const l=e.match(a);if(l?.[1])return l[1];const c=e.match(r);return c?.[1]?c[1]:null}function ou({instructions:e,"data-testid":n}){const[s,a]=i.useState(!1),r=XO(e),o=i.useRef(null),l=i.useCallback(()=>{a(!0),setTimeout(()=>a(!1),2e3)},[]),c=i.useCallback(async()=>{const d=r??e;try{await navigator.clipboard.writeText(d),l()}catch{}},[r,e,l]);return i.useEffect(()=>{const d=o.current===null&&r!==null;if(o.current=r,!d)return;(async()=>{try{await navigator.clipboard.writeText(r),l()}catch{}})()},[r,l]),t.jsx("p",{className:"auth-login-instructions","data-testid":n,children:r?t.jsx(t.Fragment,{children:e.split(r).map((d,u,h)=>t.jsxs("span",{children:[d,u<h.length-1&&t.jsxs("span",{className:"device-code-wrapper",children:[t.jsx("code",{className:"device-code",children:r}),t.jsx("button",{className:"device-code-copy-btn",onClick:c,title:s?"Copied!":"Copy code","aria-label":s?"Copied to clipboard":"Copy device code",type:"button",children:s?t.jsx(bs,{size:12}):t.jsx(ka,{size:12})})]})]},u))}):e})}function ZO({value:e,onChange:n,onSubmit:s,prompt:a,placeholder:r,helpText:o,disabled:l=!1,submitLabel:c="Submit code","data-testid":d}){const u=i.useRef(null),h=i.useRef(null),[m,f]=i.useState(!1),p=i.useCallback(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return!1;const v=window.matchMedia("(max-width: 768px)").matches,b=window.matchMedia("(pointer: coarse)").matches;return v||b},[]),g=i.useCallback(()=>typeof window>"u"||typeof window.matchMedia!="function"||window.matchMedia("(prefers-reduced-motion: reduce)").matches?"auto":"smooth",[]),w=i.useCallback(()=>{if(!p())return;const v=h.current??u.current;if(!v||typeof v.scrollIntoView!="function")return;const b=g();requestAnimationFrame(()=>{v.scrollIntoView({block:"center",behavior:b,inline:"nearest"}),window.setTimeout(()=>{v.scrollIntoView({block:"center",behavior:b,inline:"nearest"})},120)})},[g,p]);return i.useEffect(()=>{if(!m||!p())return;w();const v=window.visualViewport;if(!v)return;const b=()=>{document.activeElement===h.current&&w()};return v.addEventListener("resize",b),v.addEventListener("scroll",b),()=>{v.removeEventListener("resize",b),v.removeEventListener("scroll",b)}},[m,w,p]),t.jsxs("div",{ref:u,className:"oauth-manual-code","data-testid":d,children:[t.jsx("p",{className:"oauth-manual-code__prompt",children:a}),t.jsx("textarea",{ref:h,className:"form-input oauth-manual-code__input",value:e,onChange:v=>n(v.target.value),onFocus:()=>{f(!0),w()},onBlur:()=>f(!1),placeholder:r,rows:3,spellCheck:!1,disabled:l}),t.jsx("div",{className:"oauth-manual-code__actions",children:t.jsx("button",{type:"button",className:"btn btn-sm",onClick:s,disabled:l,children:c})}),o&&t.jsx("p",{className:"oauth-manual-code__help",children:o})]})}const eF=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"]),tF=/^[a-z][a-z0-9-]*$/,Og=["openai-completions","openai-responses","anthropic-messages","google-generative-ai"];function Fg(){return{id:"",name:"",reasoning:!1}}function nF({initialConfig:e,onSave:n,onCancel:s,saving:a=!1,error:r}){const o=!!e,[l,c]=i.useState(e?.id??""),[d,u]=i.useState(e?.name??""),[h,m]=i.useState(e?.baseUrl??""),[f,p]=i.useState(e?.api??"openai-completions"),[g,w]=i.useState(e?.apiKey??""),[v,b]=i.useState(e?.models?.length?e.models:[Fg()]),[y,N]=i.useState(null),[S,C]=i.useState(!1),[x,k]=i.useState(null),R=v.length>1,z=i.useMemo(()=>y??r??null,[y,r]);function _(F,W){b(oe=>oe.map((D,E)=>E===F?{...D,...W}:D))}function A(F){b(W=>W.length<=1?W:W.filter((oe,D)=>D!==F))}const Q=f==="anthropic-messages"?"anthropic-compatible":f==="google-generative-ai"?"google-generative-ai":"openai-compatible",H=i.useCallback(async()=>{const F=h.trim();if(!F){k("Base URL is required to detect models.");return}C(!0),k(null);try{const W=await MS({baseUrl:F,apiKey:g.trim()||void 0,apiType:Q});if(W.models.length===0){k("No models found. The provider may require an API key.");return}const oe=new Set(v.map(E=>E.id.trim())),D=W.models.filter(E=>!oe.has(E.id.trim())).map(E=>({id:E.id,name:E.name||E.id,reasoning:!!E.reasoning,contextWindow:E.contextWindow,maxTokens:E.maxTokens}));D.length>0?b(E=>[...E.filter($=>$.id.trim().length>0),...D]):k("All discovered models are already in the list.")}catch(W){k(W instanceof Error?W.message:"Failed to detect models")}finally{C(!1)}},[h,g,Q,v]);function M(){if(!l.trim())return"Provider ID is required.";if(!tF.test(l.trim()))return"Provider ID must be kebab-case.";if(!o&&eF.has(l.trim()))return"Provider ID conflicts with a built-in provider.";if(!h.trim())return"Base URL is required.";try{const F=new URL(h.trim());if(F.protocol!=="http:"&&F.protocol!=="https:")return"Base URL must use http or https."}catch{return"Base URL must be a valid URL."}return Og.includes(f)?v.length===0?"At least one model is required.":v.some(F=>!F.id?.trim())?"Each model must have a model ID.":null:"API type is required."}async function T(F){F.preventDefault();const W=M();N(W),!W&&await n({id:l.trim(),name:d.trim()||void 0,baseUrl:h.trim(),api:f,apiKey:g.trim()||void 0,models:v.map(oe=>({id:oe.id.trim(),name:oe.name?.trim()||void 0,reasoning:!!oe.reasoning,contextWindow:oe.contextWindow,maxTokens:oe.maxTokens}))})}return t.jsxs("form",{onSubmit:T,className:"custom-provider-form","aria-label":"custom-provider-form",children:[t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-id",children:"Provider ID"}),t.jsx("input",{id:"custom-provider-id",className:"input",value:l,onChange:F=>c(F.target.value),disabled:o||a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-name",children:"Display Name"}),t.jsx("input",{id:"custom-provider-name",className:"input",value:d,onChange:F=>u(F.target.value),disabled:a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-base-url",children:"Base URL"}),t.jsx("input",{id:"custom-provider-base-url",className:"input",value:h,onChange:F=>m(F.target.value),disabled:a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-api",children:"API Type"}),t.jsx("select",{id:"custom-provider-api",className:"select",value:f,onChange:F=>p(F.target.value),disabled:a,children:Og.map(F=>t.jsx("option",{value:F,children:F},F))})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{htmlFor:"custom-provider-api-key",children:"API Key"}),t.jsx("input",{id:"custom-provider-api-key",className:"input",placeholder:"sk-..., MY_API_KEY, or !command",value:g,onChange:F=>w(F.target.value),disabled:a})]}),t.jsxs("div",{className:"form-group custom-provider-form__group",children:[t.jsx("label",{children:"Models"}),t.jsx("div",{className:"custom-provider-form__models",children:v.map((F,W)=>t.jsxs("div",{className:"custom-provider-form__model-row",children:[t.jsx("input",{className:"input","aria-label":`Model ID ${W+1}`,placeholder:"Model ID",value:F.id,onChange:oe=>_(W,{id:oe.target.value}),disabled:a}),t.jsx("input",{className:"input","aria-label":`Model name ${W+1}`,placeholder:"Display name",value:F.name??"",onChange:oe=>_(W,{name:oe.target.value}),disabled:a}),t.jsxs("label",{className:"checkbox-label custom-provider-form__toggle",children:[t.jsx("input",{type:"checkbox",checked:!!F.reasoning,onChange:oe=>_(W,{reasoning:oe.target.checked}),disabled:a}),"Reasoning"]}),t.jsx("input",{className:"input","aria-label":`Context window ${W+1}`,placeholder:"Context window",type:"number",value:F.contextWindow??"",onChange:oe=>_(W,{contextWindow:oe.target.value?Number(oe.target.value):void 0}),disabled:a}),t.jsx("input",{className:"input","aria-label":`Max tokens ${W+1}`,placeholder:"Max tokens",type:"number",value:F.maxTokens??"",onChange:oe=>_(W,{maxTokens:oe.target.value?Number(oe.target.value):void 0}),disabled:a}),t.jsx("button",{type:"button",className:"btn btn-icon btn-sm",onClick:()=>A(W),disabled:a||!R,"aria-label":`Remove model ${W+1}`,children:"×"})]},`${W}-model`))}),t.jsxs("div",{className:"custom-provider-form__model-actions",style:{display:"flex",gap:"8px",alignItems:"center"},children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>b(F=>[...F,Fg()]),disabled:a,children:"+ Add model"}),t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void H(),disabled:a||S||!h.trim(),title:"Call the provider's /models endpoint to discover available models",children:S?t.jsxs(t.Fragment,{children:[t.jsx(_t,{className:"spin",size:14})," Detecting…"]}):t.jsxs(t.Fragment,{children:[t.jsx(Fi,{size:14})," Detect Models"]})})]}),x?t.jsx("div",{className:"form-error",style:{marginTop:"4px"},children:x}):null]}),z?t.jsx("div",{className:"form-error",children:z}):null,t.jsxs("div",{className:"custom-provider-form__actions",children:[s?t.jsx("button",{type:"button",className:"btn",onClick:s,disabled:a,children:"Cancel"}):null,t.jsx("button",{type:"submit",className:"btn btn-primary",disabled:a,children:a?"Saving...":"Save Provider"})]})]})}const sF=new Set(["google-antigravity","antigravity","google-gemini-cli"]);function iF(e){return!sF.has(e)}function zg(e){return e.filter(n=>iF(n.id))}const yy={host:"web",activeProfileId:null,profiles:[]},wy=i.createContext({shellApi:null,state:yy,ready:!0,openConnectionManagerSignal:0});function aF({children:e}){const n=i.useMemo(()=>typeof window<"u"?window.fusionShell??null:null,[]),[s,a]=i.useState(yy),[r,o]=i.useState(!n),[l,c]=i.useState(0);return i.useEffect(()=>{if(!n)return;let d=!1;n.getState().then(m=>{d||(a(m),o(!0))});const u=n.subscribe(m=>{a(m)}),h=()=>{c(m=>m+1)};return window.addEventListener("shell:open-connection-manager",h),()=>{d=!0,u(),window.removeEventListener("shell:open-connection-manager",h)}},[n]),t.jsx(wy.Provider,{value:{shellApi:n,state:s,ready:r,openConnectionManagerSignal:l},children:e})}function rF(){return i.useContext(wy)}const oF={host:"web",activeProfileId:null,profiles:[]};function lF(e){if(!e)return oF;const n=Array.isArray(e.profiles)?e.profiles.filter(a=>!!(a&&a.id&&a.serverUrl)):[],s=e.activeProfileId&&n.some(a=>a.id===e.activeProfileId)?e.activeProfileId:null;return{...e,activeProfileId:s,profiles:n}}function Bm(e){return new Error(`${e} is only available in native shell mode`)}async function cF(e,n){if(!e)throw Bm("Saving connection profiles");return e.saveProfile(n)}async function dF(e,n){if(!e)throw Bm("Deleting connection profiles");await e.deleteProfile(n)}async function uF(e,n){if(!e)throw Bm("Switching connection profiles");return e.setActiveProfile(n)}function ky(){const e=rF(),n=i.useMemo(()=>lF(e.state),[e.state]),s=i.useCallback(o=>cF(e.shellApi,o),[e.shellApi]),a=i.useCallback(o=>dF(e.shellApi,o),[e.shellApi]),r=i.useCallback(o=>uF(e.shellApi,o),[e.shellApi]);return{...e,state:n,saveProfile:s,removeProfile:a,setActiveProfile:r}}const Za="fusion_model_onboarding_state",Br=[],Ur=[],bc=!1,xc=!1,Hr={},mF=void 0,ga=["ai-setup","github","project-setup","first-task"],hF={"ai-setup":"AI Setup",github:"GitHub","project-setup":"Project","first-task":"First Task",complete:"Complete"};function ni(){if(typeof window>"u")return null;try{const e=localStorage.getItem(Za);if(!e)return null;const n=JSON.parse(e);return n&&typeof n=="object"&&"currentStep"in n&&typeof n.currentStep=="string"?pF(n):null}catch{return null}}function pF(e){const n=e.postOnboardingDismissedAt??mF;return{...e,completedSteps:e.completedSteps??Br,skippedSteps:e.skippedSteps??Ur,dismissed:e.dismissed??bc,completed:e.completed??xc,stepData:e.stepData??Hr,...n?{postOnboardingDismissedAt:n}:{}}}function Vl(e,n){if(!(typeof window>"u")){if(!n){const s={currentStep:e,updatedAt:new Date().toISOString(),completedSteps:Br,skippedSteps:Ur,dismissed:bc,completed:xc,stepData:Hr};try{localStorage.setItem(Za,JSON.stringify(s))}catch{}return}try{const s=ni(),a=new Date().toISOString(),r=n.completed??xc;let o=n.dismissed??bc;r&&(o=!1);const l=n.completedSteps??s?.completedSteps??Br,c=n.skippedSteps??s?.skippedSteps??Ur,d={...s?.stepData??Hr};if(n.stepData)for(const[h,m]of Object.entries(n.stepData))m!==void 0&&(d[h]={...d[h]??{},...m});const u={currentStep:e,updatedAt:a,completedSteps:l,skippedSteps:c,dismissed:o,completed:r,stepData:d};localStorage.setItem(Za,JSON.stringify(u))}catch{}}}function fF(e){if(!(typeof window>"u"))try{const n=ni(),s=new Date().toISOString();if(!n){const o={currentStep:e,updatedAt:s,completedSteps:Br,skippedSteps:[e],dismissed:bc,completed:xc,stepData:Hr};localStorage.setItem(Za,JSON.stringify(o));return}const a=n.skippedSteps.includes(e)?n.skippedSteps:[...n.skippedSteps,e],r={...n,skippedSteps:a,completedSteps:n.completedSteps.filter(o=>o!==e),updatedAt:s};localStorage.setItem(Za,JSON.stringify(r))}catch{}}function Bg(){if(!(typeof window>"u"))try{const e=ni(),n=new Date().toISOString(),s=e?{...e,completedAt:n,completed:!0,dismissed:!1,updatedAt:n}:{currentStep:"complete",updatedAt:n,completedAt:n,completedSteps:Br,skippedSteps:Ur,dismissed:!1,completed:!0,stepData:Hr};localStorage.setItem(Za,JSON.stringify(s))}catch{}}function qr(){const e=ni();return e?e.completed===!0?!0:typeof e.completedAt=="string"&&e.completedAt.length>0:!1}function gF(){if(!(typeof window>"u"))try{const e=ni(),n=new Date().toISOString(),s=e?{...e,updatedAt:n,postOnboardingDismissedAt:n}:{currentStep:"complete",updatedAt:n,completedSteps:Br,skippedSteps:Ur,dismissed:!1,completed:!1,stepData:Hr,postOnboardingDismissedAt:n};localStorage.setItem(Za,JSON.stringify(s))}catch{}}function jy(){const e=ni();return e?typeof e.postOnboardingDismissedAt=="string"&&e.postOnboardingDismissedAt.length>0:!1}function bF(){const e=ni();return!e||qr()?!1:e.currentStep!=="complete"}function xF(){const e=ni();if(!e||qr()||e.currentStep==="complete")return null;const n=e.currentStep,s=hF[n]??wF(e.currentStep);return{currentStep:e.currentStep,label:s,completedSteps:e.completedSteps}}function vF(){const e=ni();return e?e.skippedSteps:Ur}function yF(e){const n=ni();return!n||!n.stepData?null:n.stepData[e]??null}function wF(e){return e.replace(/[-_]/g," ").replace(/\b\w/g,n=>n.toUpperCase())}const Ny="fusion_onboarding_events",Ug="fusion_onboarding_session_id",kF=200,jF=50;function li(e,n={}){if(!(typeof window>"u"))try{const s=SF(),a=_F(n.step),r={type:e,timestamp:new Date().toISOString(),...a?{step:a}:{},metadata:n,sessionId:NF()},o=EF([...s,r]);CF(o)}catch{}}function NF(){if(typeof window>"u")return"server-session";try{const e=sessionStorage.getItem(Ug);if(e)return e;const n=Hg();return sessionStorage.setItem(Ug,n),n}catch{return Hg()}}function Hg(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`onboarding-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,12)}`}function SF(){try{const e=localStorage.getItem(Ny);if(!e)return[];const n=JSON.parse(e);return Array.isArray(n)?n.filter(MF):[]}catch{return[]}}function CF(e){try{localStorage.setItem(Ny,JSON.stringify(e))}catch{}}function EF(e){const n=[...e];for(;n.length>kF;)n.splice(0,jF);return n}function _F(e){if(e==="ai-setup"||e==="github"||e==="first-task"||e==="complete")return e}function MF(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 AF=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}))??[]}),RF={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"}}},Sy={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:"..."}},IF={pattern:/^.{8,}$/,hint:"At least 8 characters",example:"..."},qg={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"},TF=e=>`After you sign in with ${e}, the browser will try to redirect to a localhost address that this dashboard can't reach. The redirect tab will look like it failed. Before that happens, copy the full URL from the browser address bar — you'll paste it back here to finish login. Continue?`;function Wu(e){if(qg[e])return qg[e];const n=e.trim();return n?n.split(/[-_\s]+/).filter(Boolean).map(s=>s.charAt(0).toUpperCase()+s.slice(1)).join(" "):"This provider"}const lu=["anthropic","openai","google","gemini","ollama"],PF=["anthropic","claude-cli","droid-cli","cursor-cli","llama-cpp","openai-codex","gemini","minimax","kimi","zai"],$F={anthropic:"anthropic","claude-cli":"claude-cli","droid-cli":"droid-cli","llama-cpp":"llama-cpp","openai-codex":"openai-codex",google:"gemini",gemini:"gemini",minimax:"minimax",kimi:"kimi",moonshot:"kimi","kimi-coding":"kimi",zai:"zai"},DF={gemini:["google","gemini"],kimi:["kimi","moonshot","kimi-coding"]};function Gu(e){return $F[e]??e}function Vg(e){const n=Gu(e),s=PF.indexOf(n);return s===-1?Number.POSITIVE_INFINITY:s}function Wg(e,n){if(e.authenticated!==n.authenticated)return e.authenticated?-1:1;const s=Vg(e.id),a=Vg(n.id);if(s!==a)return s-a;const r=Gu(e.id),o=Gu(n.id);if(r!==o)return r.localeCompare(o);const l=DF[r];if(l){const d=l.indexOf(e.id),u=l.indexOf(n.id);if(d!==u)return(d===-1?Number.POSITIVE_INFINITY:d)-(u===-1?Number.POSITIVE_INFINITY:u)}const c=e.name.localeCompare(n.name);return c!==0?c:e.id.localeCompare(n.id)}function LF(e,n){const s=n.trim();if(!s)return"API key is required";const a=Sy[e]??IF;return a.pattern.test(s)?null:`${Wu(e)} keys should follow this format: ${a.hint} (e.g. ${a.example})`}const Cy={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"},OF={description:"AI provider — connect to start using AI models",apiKeyInfo:Cy};function Ku(e){return RF[e]??OF}function FF(e){return Ku(e.id).apiKeyInfo??Cy}function zF({items:e}){return e.some(s=>s.status!=="connected")?t.jsxs("div",{className:"onboarding-readiness-summary","data-testid":"readiness-summary",role:"status",children:[t.jsx("p",{className:"onboarding-readiness-header",children:"Setup Summary"}),e.map(s=>{const a=s.status==="connected"?"✓":s.status==="missing"?"⚠":"○";return t.jsxs("div",{className:`onboarding-readiness-item onboarding-readiness-item--${s.status}`,"data-status":s.status,children:[t.jsx("span",{className:"onboarding-readiness-icon","aria-hidden":"true",children:a}),t.jsxs("span",{className:"onboarding-readiness-content",children:[t.jsx("span",{className:"onboarding-readiness-label",children:s.label}),s.detail&&t.jsx("span",{className:"onboarding-readiness-detail",children:s.detail})]})]},s.label)})]}):t.jsx("div",{className:"onboarding-readiness-summary","data-testid":"readiness-summary",role:"status",children:t.jsx("p",{className:"onboarding-readiness-all-connected",children:"✓ All integrations connected"})})}function BF({provider:e,apiKeyInfo:n,inputValue:s,isSaving:a,error:r,success:o,isConnected:l,onInputChange:c,onSave:d,onClear:u}){const h=`onboarding-apikey-input-${e.id}`,m=a||!s.trim(),f=Sy[e.id],p=`input onboarding-apikey-input${r?" onboarding-apikey-input--error":""}${o?" onboarding-apikey-input--success":""}`,g=t.jsxs(t.Fragment,{children:[f&&t.jsxs("small",{className:"onboarding-apikey-hint",children:["Format: ",f.hint]}),t.jsx("p",{className:"onboarding-apikey-instructions",children:n.setupInstructions}),n.dashboardUrl&&t.jsx("a",{href:n.dashboardUrl,target:"_blank",rel:"noreferrer",className:"onboarding-apikey-dashboard-link",children:"Get your API key →"}),t.jsx("p",{className:"onboarding-apikey-usage",children:n.usageDescription})]});return l?t.jsxs("div",{className:"onboarding-apikey-form","data-testid":`onboarding-apikey-form-${e.id}`,children:[t.jsxs("div",{className:"onboarding-apikey-connected-header",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:n.fieldLabel}),t.jsx("span",{className:"auth-status-badge connected",children:"✓ API key saved"})]}),t.jsx("button",{className:"btn btn-sm",onClick:()=>u(e.id),disabled:a,children:a?"Removing…":"Remove Key"}),t.jsx(ci,{summary:"Advanced setup details",children:g}),r&&t.jsx("small",{className:"field-error",children:r})]}):t.jsxs("div",{className:"onboarding-apikey-form","data-testid":`onboarding-apikey-form-${e.id}`,children:[t.jsx("label",{htmlFor:h,className:"onboarding-apikey-field-label",children:n.fieldLabel}),t.jsxs("div",{className:"onboarding-apikey-input-row",children:[t.jsx("input",{id:h,type:"password",className:p,placeholder:n.inputPlaceholder??"Enter API key",value:s,onChange:w=>c(e.id,w.target.value),onKeyDown:w=>{w.key==="Enter"&&d(e.id,s)},"data-testid":h}),t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>d(e.id,s),disabled:m,"data-testid":`onboarding-apikey-save-${e.id}`,children:a?"Saving…":"Save"})]}),r&&t.jsx("small",{className:"field-error",children:r}),o&&!r&&t.jsx("small",{className:"onboarding-apikey-success","data-testid":`onboarding-apikey-success-${e.id}`,children:o}),t.jsx(ci,{summary:"Advanced setup details",children:g})]})}const UF=150;function HF({onComplete:e,addToast:n,projectId:s,onOpenSetupWizard:a,onOpenNewTask:r,onOpenGitHubImport:o,firstCreatedTask:l,onViewTask:c}){const{confirm:d}=ii(),u=ni(),h=u?.currentStep,m=h==="complete"?"ai-setup":ga.includes(h)?h:"ai-setup",f=u?.completedSteps??[],p=u?.skippedSteps??vF(),[g,w]=i.useState(!0),[v,b]=i.useState(m),[y,N]=i.useState(f),[S,C]=i.useState(p),[x,k]=i.useState(!1),[R,z]=i.useState(""),[_,A]=i.useState(!1),[Q,H]=i.useState(null),[M,T]=i.useState(null),[F,W]=i.useState([]),[oe,D]=i.useState(void 0),[E,P]=i.useState(!0),[$,j]=i.useState(null),[q,de]=i.useState({}),[be,Ce]=i.useState({}),[Ae,ae]=i.useState({}),[X,pe]=i.useState({}),[ie,ye]=i.useState(null),[ee,L]=i.useState([]),[Y,me]=i.useState(""),[B,xe]=i.useState(!1),[Ne,te]=i.useState({}),[Be,$e]=i.useState({}),[ct,De]=i.useState({}),[le,_e]=i.useState([]),[Le,mt]=i.useState(!1),[Ve,ge]=i.useState(!1),[he,Pe]=i.useState(),[dt,jt]=i.useState("Remote Server"),[nt,xt]=i.useState(""),[Ie,Qe]=i.useState(""),[ot,Tt]=i.useState(!1),[Mt,We]=i.useState(null),J=i.useRef({}),ke=i.useRef(null),lt=i.useRef(null),ve=i.useRef(null),[st,Ue]=i.useState({}),[fe,Xe]=i.useState(()=>ni()?.stepData?.github?.skipped===!0),vt=i.useRef(0),St=i.useRef(l),{shellApi:Et,state:Pt}=ky(),Jt=i.useRef(!1),dn=u?.currentStep,Vt=!!u&&u.currentStep!=="complete";Ui(lt,g,"fusion:model-onboarding-modal-size"),i.useEffect(()=>{const O=ke.current;O&&(O.scrollTop=0)},[v]);const[ln,fn]=i.useState(()=>ni()?.stepData?.["ai-setup"]?.skippedProviders??{}),_n=[{key:"ai-setup",label:"AI Setup"},{key:"github",label:"GitHub"},{key:"project-setup",label:"Project"},{key:"first-task",label:"First Task"}],an=_n.findIndex(O=>O.key===v),Dn=v==="complete"?_n.length:an;i.useEffect(()=>{v!=="complete"&&Vl(v,{completedSteps:y,skippedSteps:S})},[v,y,S]),i.useEffect(()=>{Jt.current||(Jt.current=!0,li("onboarding:wizard-opened",{source:Vt?"resume":"initial",resumedFromStep:dn}))},[Vt,dn]),i.useEffect(()=>{const O=St.current!=null,He=l!=null;!O&&He&&k(!0),He||k(!1),St.current=l},[l]);const vn=i.useRef(m);i.useEffect(()=>{if(vn.current==="ai-setup"&&v!=="ai-setup"&&!F.some(He=>He.id!=="github"&&He.authenticated)){const He={};for(const Ze of F)Ze.id!=="github"&&!Ze.authenticated&&!ln[Ze.id]&&(He[Ze.id]=!0);if(Object.keys(He).length>0){const Ze={...ln,...He};fn(Ze),Vl(v,{stepData:{"ai-setup":{skippedProviders:Ze}}})}}vn.current=v},[v,F,ln]);const Ut=i.useCallback(async()=>{try{const{providers:O,ghCli:He}=await qo(),Ze=zg(O);W(Ze),D(He),de(Ye=>{const ft={};for(const[Rt,Ft]of Object.entries(Ye)){const on=Ze.find(yn=>yn.id===Rt);on&&!on.authenticated&&on.loginInProgress&&(ft[Rt]=Ft)}return Object.keys(ft).length===Object.keys(Ye).length?Ye:ft}),Ue(Ye=>{let ft=!1;const Rt={...Ye};for(const[Ft,on]of Object.entries(Ye)){if(on!=="pending")continue;Ze.find(ne=>ne.id===Ft)?.loginInProgress||(delete Rt[Ft],ft=!0)}return ft?Rt:Ye}),fn(Ye=>{const ft={...Ye};for(const Rt of Ze)Rt.authenticated&&ft[Rt.id]&&delete ft[Rt.id];return Object.keys(ft).length===Object.keys(Ye).length?Ye:ft})}catch{}},[]),rn=i.useCallback(async()=>{try{const O=await CS();_e((O.providers??[]).map(AF))}catch{}},[]),bn=i.useCallback(async O=>{ge(!0),Pe(void 0);try{await _S(O),await rn(),await Hs().then(He=>L(He.models??[])),mt(!1)}catch(He){Pe(Me(He)||"Failed to create custom provider")}finally{ge(!1)}},[rn]),en=i.useRef(!1);i.useEffect(()=>{v==="ai-setup"&&rn(),en.current&&Ut(),en.current=v!=="ai-setup"},[v,Ut,rn]),i.useEffect(()=>{if(!F.some(Ze=>Ze.loginInProgress))return;const He=setInterval(()=>{Ut()},2e3);return()=>clearInterval(He)},[F,Ut]);const Yt=F.find(O=>O.id==="github"),tn=!!Yt,Qt=Yt?.authenticated??!1,Kt=Yt?.loginInProgress??!1,xn=oe?.authenticated??!1,un=Qt||xn,pn=!Qt&&xn,$t=i.useCallback(O=>{if(O.authenticated)return"connected";const He=st?.[O.id];return He==="timeout"||He==="failed"?"retry":ln[O.id]?"skipped":"not-connected"},[st,ln]);function ue({status:O}){const He={connected:{text:"✓ Connected",className:"auth-status-badge connected"},"not-connected":{text:"Not connected",className:"auth-status-badge not-connected"},skipped:{text:"Skipped",className:"auth-status-badge skipped"},retry:{text:"Retry",className:"auth-status-badge retry"}},{text:Ze,className:Ye}=He[O];return t.jsx("span",{"data-testid":"provider-status-badge",className:Ye,"data-status":O,children:Ze})}const Re=i.useCallback(()=>{if(un)return"connected";const O=st.github;return O==="pending"?"pending":O==="failed"||O==="timeout"?"failed":fe?"skipped":"not-connected"},[un,st,fe]);function et({status:O}){const He={connected:{text:"✓ Connected",className:"auth-status-badge connected"},pending:{text:"⏳ Connecting…",className:"auth-status-badge pending"},failed:{text:"✗ Connection failed",className:"auth-status-badge retry"},skipped:{text:"Skipped",className:"auth-status-badge skipped"},"not-connected":{text:"Not connected",className:"auth-status-badge not-connected"}},{text:Ze,className:Ye}=He[O];return t.jsx("span",{"data-testid":"github-status-badge",className:Ye,"data-status":O,children:Ze})}const at=i.useCallback(async()=>{try{const O=await Hs();L(O.models)}catch{}},[]),Je=i.useCallback(async()=>{try{const O=await ia();if(O.defaultProvider&&O.defaultModelId){const He=`${O.defaultProvider}/${O.defaultModelId}`;me(He)}}catch{}},[]);i.useEffect(()=>{Promise.all([Ut(),at(),Je()]).finally(()=>P(!1))},[Ut,at,Je]),i.useEffect(()=>{const O=yF("ai-setup");if(O?.loginOutcomes){const He=O.loginOutcomes,Ze={};for(const[Ye,ft]of Object.entries(He))ft!=="pending"&&(Ze[Ye]=ft);Object.keys(Ze).length>0&&Ue(Ze)}},[]);const Nt=i.useCallback((O,He)=>{Vl(v,{completedSteps:y,stepData:{"ai-setup":{loginOutcomes:{[O]:He}}}})},[v,y]);i.useEffect(()=>{const O=Object.entries(st).filter(([He,Ze])=>Ze!=="pending");for(const[He,Ze]of O)Nt(He,Ze)},[st,Nt]),i.useEffect(()=>()=>{ve.current&&clearInterval(ve.current),Object.values(J.current).forEach(clearTimeout),J.current={}},[]);const bt=i.useCallback(O=>{Xe(O),Vl(v,{completedSteps:y,stepData:{github:{skipped:O}}})},[v,y]),At=i.useCallback(O=>O==="complete"?-1:ga.indexOf(O),[]),se=i.useCallback(()=>{N(He=>[...new Set([...He,v])]),C(He=>He.filter(Ze=>Ze!==v)),li("onboarding:step-completed",{step:v}),v==="github"&&!Qt&&bt(!1);const O=At(v);O>=0&&O<ga.length-1&&b(ga[O+1])},[v,Qt,bt,At]),re=i.useCallback(()=>{C(He=>[...new Set([...He,v])]),fF(v),li("onboarding:step-skipped",{step:v}),v==="github"&&!Qt&&bt(!0);const O=At(v);O>=0&&O<ga.length-1&&b(ga[O+1])},[v,Qt,bt,At]),Ge=i.useCallback(()=>{const O=v;N(Ze=>Ze.filter(Ye=>Ye!==O)),C(Ze=>Ze.filter(Ye=>Ye!==O)),O==="github"&&!Qt&&bt(!1);const He=At(v);He>0&&b(ga[He-1])},[v,Qt,bt,At]),Ct=i.useCallback(()=>{re()},[re]),Gt=i.useCallback(async O=>{const He=F.find(Ye=>Ye.id===O);if(He?.requiresManualCode===!0&&!await d({title:"Heads up — manual paste-back required",message:TF(He.name),confirmLabel:"Continue to login",cancelLabel:"Cancel"}))return;Ue(Ye=>{const ft=Ye[O];if(ft&&ft!=="pending"){const{[O]:Rt,...Ft}=Ye;return Ft}return Ye});const Ze=()=>{de(Ye=>{if(!(O in Ye))return Ye;const ft={...Ye};return delete ft[O],ft}),Ce(Ye=>{if(!(O in Ye))return Ye;const ft={...Ye};return delete ft[O],ft}),pe(Ye=>{if(!(O in Ye))return Ye;const ft={...Ye};return delete ft[O],ft}),ae(Ye=>{if(!(O in Ye))return Ye;const ft={...Ye};return delete ft[O],ft})};Ze(),Ue(Ye=>({...Ye,[O]:"pending"})),j(O),vt.current=0;try{const{url:Ye,instructions:ft,manualCode:Rt,deviceCode:Ft}=await AS(O);ft?.trim()&&!(O==="github-copilot"&&Ft)&&de(on=>({...on,[O]:ft})),Rt&&Ce(on=>({...on,[O]:Rt})),Ft&&O==="github-copilot"&&ae(on=>({...on,[O]:Ft})),window.open(Ci(Ft?.verificationUri??Ye),"_blank"),ve.current=setInterval(async()=>{if(vt.current++,vt.current>=UF){ve.current&&(clearInterval(ve.current),ve.current=null),j(null),W(on=>on.map(yn=>yn.id===O?{...yn,loginInProgress:!1}:yn)),Ue(on=>({...on,[O]:"timeout"})),Ze(),n("Login timed out. Please try again.","warning");return}try{const{providers:on,ghCli:yn}=await qo(),ne=zg(on);W(ne),D(yn);const Fe=ne.find(qe=>qe.id===O);if(Fe?.authenticated){ve.current&&(clearInterval(ve.current),ve.current=null),j(null),Ue(qe=>({...qe,[O]:"success"})),Ze(),O==="github"&&bt(!1),n("Login successful","success");return}Fe?.loginInProgress||(ve.current&&(clearInterval(ve.current),ve.current=null),j(null),Ue(qe=>({...qe,[O]:"failed"})),Ze(),n("Login did not complete. Please try again.","error"))}catch{}},2e3)}catch(Ye){Ye instanceof Error&&Ye.message.includes("already in progress")||Ye&&typeof Ye=="object"&&"status"in Ye&&Ye.status===409?(n("Login already in progress. Cancel it to retry.","warning"),Ue(Rt=>({...Rt,[O]:"pending"})),Ut()):(n(Ye instanceof Error?Ye.message:"Login failed","error"),Ue(Rt=>({...Rt,[O]:"failed"}))),j(null),Ze()}},[n,F,d,Ut,bt]),cn=i.useCallback(async O=>{const He=X[O]?.trim();if(!He){n("Paste the full redirect URL or authorization code first.","warning");return}ye(O);try{(await RS(O,He)).submitted?(pe(Ye=>{if(!(O in Ye))return Ye;const ft={...Ye};return delete ft[O],ft}),n("Authorization code received. Finishing login…","success")):n("That authorization code was already submitted. Waiting for login…","warning")}catch(Ze){n(Me(Ze)||"Failed to submit authorization code","error")}finally{ye(null)}},[n,X]),jn=i.useCallback(async O=>{ve.current&&(clearInterval(ve.current),ve.current=null),j(O),vt.current=0,W(He=>He.map(Ze=>Ze.id===O?{...Ze,loginInProgress:!1}:Ze)),Ue(He=>({...He,[O]:"cancelled"}));try{await TS(O),await Ut().catch(()=>{}),n("Login cancelled","success")}catch(He){n(Me(He)||"Failed to cancel login","error")}finally{j(null),de(He=>{if(!(O in He))return He;const Ze={...He};return delete Ze[O],Ze}),Ce(He=>{if(!(O in He))return He;const Ze={...He};return delete Ze[O],Ze}),pe(He=>{if(!(O in He))return He;const Ze={...He};return delete Ze[O],Ze}),ye(He=>He===O?null:He),ae(He=>{if(!(O in He))return He;const Ze={...He};return delete Ze[O],Ze})}},[n,Ut]),Ln=i.useCallback((O,He)=>{te(Ye=>({...Ye,[O]:He}));const Ze=J.current[O];Ze&&(clearTimeout(Ze),delete J.current[O]),$e(Ye=>{if(!Ye[O])return Ye;const ft={...Ye};return delete ft[O],ft}),De(Ye=>{if(!Ye[O])return Ye;const ft={...Ye};return delete ft[O],ft})},[]),mn=i.useCallback(()=>{const O=ke.current;if(!O)return;const He=typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;try{if(typeof O.scrollTo=="function"){O.scrollTo({top:0,behavior:He?"auto":"smooth"});return}}catch{}O.scrollTop=0},[]),Un=i.useCallback(async(O,He)=>{const Ze=(He??Ne[O]??"").trim(),Ye=LF(O,Ze);if(Ye){$e(Rt=>({...Rt,[O]:Ye}));return}const ft=J.current[O];ft&&(clearTimeout(ft),delete J.current[O]),j(O),$e(Rt=>{const Ft={...Rt};return delete Ft[O],Ft}),De(Rt=>{if(!Rt[O])return Rt;const Ft={...Rt};return delete Ft[O],Ft});try{await PS(O,Ze),await Ut(),mn(),te(Rt=>{const Ft={...Rt};return delete Ft[O],Ft}),$e(Rt=>{if(!Rt[O])return Rt;const Ft={...Rt};return delete Ft[O],Ft}),De(Rt=>({...Rt,[O]:"✓ Key saved"})),J.current[O]=setTimeout(()=>{De(Rt=>{if(!Rt[O])return Rt;const Ft={...Rt};return delete Ft[O],Ft}),delete J.current[O]},3e3),n("API key saved","success")}catch(Rt){const Ft=Rt instanceof TypeError&&Rt.message.includes("Failed to fetch")?"Could not reach the server. Check your connection and try again.":Rt instanceof Error?Rt.message:"Failed to save API key";$e(on=>({...on,[O]:Ft})),De(on=>{if(!on[O])return on;const yn={...on};return delete yn[O],yn}),n(Ft,"error")}finally{j(null)}},[Ne,n,Ut,mn]),ce=i.useCallback(async O=>{j(O);try{await $S(O),await Ut(),n("API key removed","success")}catch(He){n(He instanceof Error?He.message:"Failed to clear API key","error")}finally{j(null)}},[n,Ut]),it=i.useCallback(async O=>{j(O);try{await IS(O),await Ut(),n("Logged out","success")}catch(He){n(He instanceof Error?He.message:"Logout failed","error")}finally{j(null)}},[n,Ut]),ut=i.useCallback(O=>{me(O)},[]),wt=i.useCallback(async()=>{try{const O={modelOnboardingComplete:!0};if(Y){const He=Y.indexOf("/"),Ze=He!==-1?Y.slice(0,He):void 0,Ye=He!==-1?Y.slice(He+1):Y,ft=ee.find(Rt=>Rt.id===Ye);ft?(O.defaultProvider=ft.provider,O.defaultModelId=ft.id):Ze&&Ye&&(O.defaultProvider=Ze,O.defaultModelId=Ye)}await Kn(O),Bg()}catch{}},[Y,ee,Kn,Bg]),G=i.useCallback(async()=>{const O=[...new Set([...y,"first-task"])];xe(!0);try{await wt(),li("onboarding:completed",{completedSteps:O,skippedSteps:S}),N(O),C(He=>He.filter(Ze=>Ze!=="first-task")),b("complete")}finally{xe(!1)}},[wt,y,S]),ze=i.useCallback(async()=>{if(!s)return;const O=R.trim();if(!O){H("Please enter a task description.");return}H(null),A(!0);let He=!1;try{const Ze=await qb({description:O,source:{sourceType:"dashboard_ui"}},s);T(Ze),k(!0),li("onboarding:first-task-created",{taskId:Ze?.id}),n("Task created","success"),He=!0}catch(Ze){const Ye=Ze instanceof Error?Ze.message:"Something went wrong creating your task. Please try again.";H(Ye),n(Ye,"error")}finally{A(!1)}He&&wt()},[s,R,n,wt]),Ht=i.useCallback(async()=>{xe(!0);try{await wt()}finally{xe(!1)}li("onboarding:open-new-task",{}),r?.()},[wt,r]),gn=i.useCallback(async()=>{if(un){xe(!0);try{await wt()}finally{xe(!1)}w(!1),e(),li("onboarding:open-github-import",{}),o?.()}},[wt,un,e,o]),Mn=i.useCallback(async()=>{li("onboarding:dismissed",{currentStep:v,completedSteps:y,skippedSteps:S}),xe(!0);try{await Kn({modelOnboardingComplete:!0})}catch{}w(!1),e()},[v,y,S,e]),je=i.useCallback(()=>{li("onboarding:finished",{}),w(!1),e()},[e]),pt=i.useCallback(()=>{const O=l??M;O&&(wt(),c?.(O),e())},[l,M,wt,c,e]),Dt=i.useCallback(()=>{wt(),e()},[wt,e]),Zt=Re(),Nn=F.filter(O=>O.id!=="github"),Xt=Pt.host!=="web"&&!Pt.activeProfileId,qt=[...Nn].sort(Wg),Ot=qt.some(O=>!O.type||O.type==="oauth"),qn=qt.some(O=>O.type==="api_key"),On=Nn.filter(O=>O.authenticated),os=On.length>0,xs=!!s,ms=v==="github"&&!os,vs=i.useCallback(async()=>{if(Et){We(null),Tt(!0);try{const O=await Et.saveProfile({name:dt,serverUrl:nt,authToken:Ie.trim()?Ie:null});try{await Et.setActiveProfile(O.id)}catch(He){We(Me(He)||"Saved profile but failed to activate it");return}xt(""),Qe(""),n("Remote server profile saved","success")}catch(O){We(Me(O)||"Failed to save shell connection")}finally{Tt(!1)}}},[Et,dt,nt,Ie,n]);if(!g)return null;const as=(()=>{if(!Y)return"";const O=Y.indexOf("/"),He=O===-1?void 0:Y.slice(0,O),Ze=O===-1?Y:Y.slice(O+1),Ye=ee.find(ft=>ft.id===Ze&&(!He||ft.provider===He));return Ye?.name?Ye.name:He?`${Wu(He)} ${Ze}`:Y})(),Tn=[];if(xs?Tn.push({label:"Project",status:"connected",detail:"Project selected — task creation and imports are available"}):Tn.push({label:"Project",status:"missing",detail:"Register a project to enable task creation and imports"}),os){const O=Wu(On[0]?.id??"");Tn.push({label:"AI Provider",status:"connected",detail:`${O} connected — AI agents can work on tasks`})}else Nn.length>0&&Nn.some(O=>ln[O.id])?Tn.push({label:"AI Provider",status:"skipped",detail:"AI agents won't be available until you connect a provider"}):Tn.push({label:"AI Provider",status:"missing",detail:"Connect a provider in Settings → AI Setup"});un?Tn.push({label:"GitHub",status:"connected",detail:pn?"Connected via GitHub CLI — imports and PR tracking are available":"Issues and PRs can be imported"}):!tn||fe?Tn.push({label:"GitHub",status:"skipped",detail:"You can connect anytime from Settings"}):Tn.push({label:"GitHub",status:"missing",detail:"Connect to import issues as tasks"}),as&&Tn.push({label:"Default Model",status:"connected",detail:as});const ys=l??M,Ls=ys?.description?.split(`
695
+ `)[0]?.trim()||ys?.title||"",_s=new Set(lu),Z=qt.filter(O=>_s.has(O.id)).sort((O,He)=>{const Ze=lu.indexOf(O.id),Ye=lu.indexOf(He.id);return Ze!==Ye?Ze-Ye:Wg(O,He)}),Ee=qt.filter(O=>O.authenticated&&!_s.has(O.id)),gt=qt.filter(O=>!O.authenticated&&!_s.has(O.id)),zt=O=>{const He=st[O.id]==="timeout"||st[O.id]==="failed"||st[O.id]==="cancelled",Ze=O.loginInProgress&&!He;if(O.id==="llama-cpp"&&O.type==="cli")return t.jsx(QO,{authenticated:O.authenticated,onToggled:()=>{Ut()}},O.id);if(O.id==="claude-cli"&&O.type==="cli")return t.jsx(KO,{authenticated:O.authenticated,onToggled:()=>{Ut()}},O.id);if(O.id==="cursor-cli"&&O.type==="cli")return t.jsx(YO,{authenticated:O.authenticated,onToggled:()=>{Ut()}},O.id);if(O.type==="api_key"){const Ye=Ku(O.id),ft=FF(O);return t.jsxs("div",{"data-testid":`onboarding-provider-card-${O.id}`,className:`onboarding-provider-card${O.authenticated?" onboarding-provider-card--connected":""}`,children:[t.jsx("div",{className:"onboarding-provider-card__icon","data-testid":`onboarding-provider-icon-${O.id}`,"aria-hidden":"true",children:t.jsx(Gn,{provider:O.id,size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsxs("strong",{className:"onboarding-provider-card__name",children:[t.jsx(Tb,{size:14,className:"onboarding-provider-key-icon"}),O.name]}),t.jsx("span",{className:"onboarding-provider-card__description",children:Ye.description}),t.jsx(ue,{status:$t(O)}),O.authenticated&&O.keyHint&&t.jsxs("span",{className:"auth-key-hint",children:["Key: ",O.keyHint]})]}),t.jsx("div",{className:"onboarding-provider-card__actions onboarding-provider-card__actions--api-key",children:t.jsx(BF,{provider:O,apiKeyInfo:ft,inputValue:Ne[O.id]??"",isSaving:$===O.id,error:Be[O.id],success:ct[O.id],isConnected:O.authenticated,onInputChange:Ln,onSave:Un,onClear:ce})})]},O.id)}return t.jsxs("div",{"data-testid":`onboarding-provider-card-${O.id}`,className:`onboarding-provider-card${O.authenticated?" onboarding-provider-card--connected":""}`,children:[t.jsx("div",{className:"onboarding-provider-card__icon","data-testid":`onboarding-provider-icon-${O.id}`,"aria-hidden":"true",children:t.jsx(Gn,{provider:O.id,size:"md"})}),t.jsxs("div",{className:"onboarding-provider-card__body",children:[t.jsx("strong",{className:"onboarding-provider-card__name",children:O.name}),t.jsx("span",{className:"onboarding-provider-card__description",children:Ku(O.id).description}),t.jsx(ue,{status:$t(O)})]}),t.jsx("div",{className:"onboarding-provider-card__actions",children:$===O.id?O.authenticated?t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Logging out…"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Waiting for login…"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void jn(O.id),children:"Cancel"})]}):Ze?t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Waiting for login…"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void jn(O.id),children:"Cancel"})]}):O.authenticated?t.jsx("button",{className:"btn btn-sm",onClick:()=>it(O.id),children:"Logout"}):t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>Gt(O.id),children:"Login"})}),($===O.id||Ze)&&O.id==="github-copilot"&&Ae[O.id]&&t.jsxs("div",{className:"auth-device-code-panel","data-testid":`onboarding-device-code-${O.id}`,children:[t.jsx("strong",{children:"Enter this code on GitHub"}),t.jsx("div",{className:"auth-device-code-pill",children:Ae[O.id].userCode}),t.jsxs("div",{className:"auth-provider-actions-row",children:[t.jsx("button",{className:"btn btn-sm",onClick:()=>{navigator.clipboard?.writeText(Ae[O.id].userCode)},children:"Copy code"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>window.open(Ci(Ae[O.id].verificationUri),"_blank"),children:"Open GitHub"})]})]}),($===O.id||Ze)&&q[O.id]&&t.jsx(ou,{instructions:q[O.id],"data-testid":`onboarding-login-instructions-${O.id}`}),($===O.id||Ze)&&be[O.id]&&t.jsx(ZO,{value:X[O.id]??"",onChange:Ye=>pe(ft=>({...ft,[O.id]:Ye})),onSubmit:()=>void cn(O.id),prompt:be[O.id].prompt,placeholder:be[O.id].placeholder,helpText:be[O.id].helpText,disabled:ie===O.id,submitLabel:ie===O.id?"Submitting…":"Submit code","data-testid":`onboarding-manual-code-${O.id}`}),st[O.id]==="timeout"&&$!==O.id&&t.jsx("p",{className:"onboarding-helper-text onboarding-inline-feedback",children:"Login timed out. Please try again."}),st[O.id]==="failed"&&$!==O.id&&t.jsx("p",{className:"field-error onboarding-inline-feedback",children:"Login failed. Please try again."})]},O.id)};return t.jsx("div",{className:"modal-overlay open",role:"dialog","aria-modal":"true","aria-labelledby":"onboarding-title",children:t.jsxs("div",{className:"modal model-onboarding-modal",ref:lt,children:[t.jsxs("div",{className:"model-onboarding-header",children:[t.jsxs("h2",{id:"onboarding-title",className:"model-onboarding-title",children:[v==="ai-setup"&&t.jsxs(t.Fragment,{children:[t.jsx(rs,{size:24})," Set Up AI ",t.jsx("span",{className:"onboarding-optional-badge",children:"Optional"})]}),v==="github"&&t.jsxs(t.Fragment,{children:[t.jsx(Xs,{size:24})," Connect GitHub ",t.jsx("span",{className:"onboarding-optional-badge",children:"Optional"})]}),v==="project-setup"&&t.jsxs(t.Fragment,{children:[t.jsx(sh,{size:24})," Set Up Your Project"]}),v==="first-task"&&t.jsxs(t.Fragment,{children:[t.jsx(sh,{size:24})," Create Your First Task"]}),v==="complete"&&t.jsxs(t.Fragment,{children:[t.jsx(Xn,{size:24})," All Set!"]})]}),v!=="complete"&&t.jsx("button",{className:"modal-close",onClick:Mn,"aria-label":"Skip onboarding",title:"Skip for now",children:t.jsx(kn,{size:20})})]}),t.jsx("div",{className:"model-onboarding-steps",children:_n.map((O,He)=>{const Ze=Dn>He,Ye=y.includes(O.key)&&Ze,ft=S.includes(O.key)&&!y.includes(O.key)&&Ze,Rt=Ye||ft;return t.jsxs("div",{className:"onboarding-step-wrapper",children:[He>0&&t.jsx("div",{className:`model-onboarding-step-connector ${He<=Dn?"done":""}`}),Rt?t.jsxs("button",{className:`model-onboarding-step-indicator ${v===O.key?"active":""} ${Ye?"done":""} ${ft?"skipped":""}`,onClick:()=>b(O.key),"aria-label":`Go back to ${O.label}`,title:`Review ${O.label}`,children:[t.jsx("span",{className:"step-number",children:Ye?t.jsx(Xn,{size:14}):ft?t.jsx("span",{className:"onboarding-step-skip-mark",children:"–"}):He+1}),t.jsx("span",{className:"step-label",children:O.label})]}):t.jsxs("div",{className:`model-onboarding-step-indicator ${v===O.key?"active":""} ${Ye?"done":""} ${ft?"skipped":""}`,children:[t.jsx("span",{className:"step-number",children:Ye?t.jsx(Xn,{size:14}):ft?t.jsx("span",{className:"onboarding-step-skip-mark",children:"–"}):He+1}),t.jsx("span",{className:"step-label",children:O.label})]})]},O.key)})}),t.jsxs("div",{className:"model-onboarding-content",ref:ke,children:[v==="ai-setup"&&t.jsxs("div",{className:"model-onboarding-ai-setup",children:[t.jsx("p",{className:"model-onboarding-description",children:"Fusion uses AI models to plan, write, and review code for you. Connect an AI provider below to get started — you can use a hosted service or enter an API key."}),t.jsx("p",{className:"onboarding-helper-text model-onboarding-primary-helper",children:"You only need one provider to get started."}),t.jsx("p",{className:"onboarding-helper-text",children:"Research runs require provider credentials and an enabled Research View. After onboarding, verify these in Settings → Authentication and Settings → Experimental Features."}),Xt&&t.jsxs("div",{className:"card",children:[t.jsx("h3",{className:"onboarding-section-title",children:"Connect remote Fusion server"}),t.jsx("p",{className:"onboarding-helper-text",children:"Your native shell needs an active remote profile before dashboard handoff can complete."}),t.jsx("label",{htmlFor:"onboarding-shell-profile-name",className:"onboarding-apikey-field-label",children:"Profile name"}),t.jsx("input",{id:"onboarding-shell-profile-name",className:"input",value:dt,onChange:O=>jt(O.target.value)}),t.jsx("label",{htmlFor:"onboarding-shell-server-url",className:"onboarding-apikey-field-label",children:"Server URL"}),t.jsx("input",{id:"onboarding-shell-server-url",className:"input",placeholder:"https://your-fusion-host",value:nt,onChange:O=>xt(O.target.value)}),t.jsx("label",{htmlFor:"onboarding-shell-token",className:"onboarding-apikey-field-label",children:"Auth token (optional)"}),t.jsx("input",{id:"onboarding-shell-token",className:"input",type:"password",value:Ie,onChange:O=>Qe(O.target.value)}),Mt&&t.jsx("small",{className:"field-error",children:Mt}),t.jsxs("div",{className:"onboarding-apikey-input-row",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void Et?.openConnectionManager(),children:"Open manager"}),t.jsx("button",{type:"button",className:"btn btn-primary btn-sm",onClick:()=>void vs(),disabled:!nt.trim()||ot,children:ot?"Saving…":"Save remote server"})]})]}),!E&&F.length>0&&(()=>{const O=F.filter(Rt=>Rt.id!=="github"&&Rt.authenticated).length,He=F.filter(Rt=>Rt.id!=="github").length,Ze=Object.keys(ln).filter(Rt=>!F.find(Ft=>Ft.id===Rt)?.authenticated).length;if(He===0)return null;let Ye="onboarding-provider-summary",ft="";return O>0?(Ye+=" onboarding-provider-summary--connected",ft=`✓ ${O} of ${He} provider${He!==1?"s":""} connected`):Ze>0?(Ye+=" onboarding-provider-summary--skipped",ft=`${Ze} provider${Ze!==1?"s":""} skipped`):(Ye+=" onboarding-provider-summary--none",ft="No providers connected yet"),t.jsx("div",{className:Ye,"data-testid":"provider-summary",children:ft})})(),t.jsx(va,{slotId:"onboarding-recommendation-card",projectId:s}),t.jsx(ci,{summary:"What are AI providers?",children:t.jsx("p",{className:"onboarding-helper-text",children:"AI providers like OpenAI and Anthropic power the AI capabilities in Fusion. Connecting a provider lets Fusion's agents use AI models to help with your tasks."})}),F.length>0&&!F.some(O=>O.authenticated)&&t.jsx("p",{className:"onboarding-helper-text",children:"Skip this step if you'd like — you can always add providers later from Settings."}),E?t.jsxs("div",{className:"model-onboarding-loading",children:[t.jsx(_t,{size:24,className:"animate-spin"}),t.jsx("span",{children:"Loading providers…"})]}):F.length===0?t.jsx("div",{className:"model-onboarding-empty",children:"No AI providers are configured. Please check your Fusion configuration."}):t.jsxs(t.Fragment,{children:[t.jsx(va,{slotId:"onboarding-provider-card",projectId:s,renderPlaceholder:!1,actions:{refreshAuthProviders:()=>{Ut()}}}),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"}),Z.length>0?t.jsx("div",{className:"model-onboarding-providers",children:Z.map(O=>zt(O))}):t.jsx("p",{className:"onboarding-helper-text",children:"No quick-start providers are available in this environment."})]}),Ee.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:Ee.map(O=>zt(O))})]}),t.jsxs("div",{className:"onboarding-model-section",children:[t.jsx("h3",{className:"onboarding-section-title",children:"Default Model (Optional)"}),t.jsx("p",{className:"model-onboarding-description",children:"Pick a default model for AI tasks, or leave this blank to choose later. Models vary in speed, capability, and cost."}),t.jsx(ci,{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."})}),ee.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(Cs,{models:ee,value:Y,onChange:ut,placeholder:"Select a default model…",label:"Default model"})}),Y&&t.jsx("div",{className:"onboarding-model-preview",children:t.jsxs("small",{className:"settings-muted",children:["Selected:"," ",ee.find(O=>O.id===Y)?.name??Y]})})]}),t.jsx(ci,{summary:"Advanced provider settings",className:"onboarding-provider-advanced",children:t.jsxs("div",{"data-testid":"onboarding-advanced-provider-settings",children:[gt.length>0?t.jsx("div",{className:"model-onboarding-providers",children:gt.map(O=>zt(O))}):t.jsx("p",{className:"onboarding-helper-text",children:"All currently available providers are already shown above."}),le.length>0?t.jsx("div",{className:"onboarding-custom-provider-list",children:le.map(O=>t.jsxs("div",{className:"onboarding-custom-provider-item",children:[t.jsx(Gn,{provider:O.id,size:"sm"}),t.jsx("span",{children:O.name||O.id})]},O.id))}):null,Le?t.jsx(nF,{onSave:bn,onCancel:()=>{mt(!1),Pe(void 0)},saving:Ve,error:he}):t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>mt(!0),children:"Add custom provider"})]})}),Ot&&t.jsx(ci,{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."})}),qn&&t.jsx(ci,{summary:"What is an API key?",children:t.jsx("p",{className:"onboarding-helper-text",children:"An API key is a secret token that authenticates Fusion with the provider. You can find your key in the provider's dashboard under API settings. Keys are stored securely on your machine."})}),t.jsx(va,{slotId:"onboarding-setup-help",projectId:s})]})]}),v==="github"&&t.jsxs("div",{className:"model-onboarding-github",children:[un?t.jsx("p",{className:"model-onboarding-description",children:pn?"GitHub CLI is already authenticated — issue imports and pull request tracking work right now. You're all set; no further action needed.":"GitHub is connected — issue imports and pull request tracking are available. You're all set; no further action needed."}):t.jsx("p",{className:"model-onboarding-description",children:"Connecting GitHub unlocks issue imports and pull request tracking. You can skip this — task creation works without it."}),!un&&t.jsx("div",{className:"onboarding-feature-list",children:t.jsxs("ul",{children:[t.jsx("li",{className:"onboarding-feature-list-heading",children:t.jsx("strong",{children:"Without GitHub (available now):"})}),t.jsx("li",{className:"onboarding-helper-text",children:"Create tasks manually"}),t.jsx("li",{className:"onboarding-helper-text",children:"Describe work for AI agents"}),t.jsx("li",{className:"onboarding-helper-text",children:"Track progress on the board"}),t.jsx("li",{className:"onboarding-feature-list-heading",children:t.jsx("strong",{children:"With GitHub (after connecting):"})}),t.jsx("li",{className:"onboarding-helper-text onboarding-feature-list-item--with-github",children:"Import issues as tasks"}),t.jsx("li",{className:"onboarding-helper-text onboarding-feature-list-item--with-github",children:"Sync pull request status"}),t.jsx("li",{className:"onboarding-helper-text onboarding-feature-list-item--with-github",children:"Link code changes to tasks"})]})}),ms&&t.jsxs("div",{className:"onboarding-skip-banner",role:"status",children:[t.jsx("strong",{children:"No AI provider connected"}),t.jsx("p",{children:"AI features like task planning and code generation won't be available until you connect one. You can set this up later in Settings."})]}),t.jsx(ci,{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."})}),tn?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(Xs,{size:16,className:"onboarding-provider-title-icon"}),"GitHub"]}),t.jsx("span",{"data-testid":"onboarding-auth-status-github",children:t.jsx(et,{status:Zt})})]}),Qt&&($==="github"?t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Logging out…"}):t.jsx("button",{className:"btn btn-sm",onClick:()=>it("github"),children:"Disconnect"}))]}),(Zt==="not-connected"||Zt==="pending")&&t.jsxs("div",{className:"onboarding-github-connect-cta","data-testid":"onboarding-github-connect-cta",children:[$==="github"||Kt?t.jsxs("div",{className:"onboarding-github-connect-actions",children:[t.jsx("button",{className:"btn btn-sm",disabled:!0,children:"Waiting for login…"}),t.jsx("button",{className:"btn btn-sm",onClick:()=>void jn("github"),children:"Cancel"})]}):t.jsxs("button",{className:"btn btn-primary btn-sm",onClick:()=>Gt("github"),children:[t.jsx(Xs,{size:16}),"Connect"]}),($==="github"||Kt)&&q.github&&t.jsx(ou,{instructions:q.github,"data-testid":"onboarding-login-instructions-github"})]}),Zt==="connected"&&t.jsx("div",{className:"onboarding-github-feedback onboarding-github-feedback--success",children:pn?"GitHub CLI is authenticated. Imports and pull request tracking are available. Connect OAuth in Settings → Authentication if you want dashboard-managed sign-in controls.":"GitHub OAuth is connected. You can import issues and track pull requests."}),Zt==="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:()=>Gt("github"),children:"Retry"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:Ct,children:"Skip for now"})]})]}),Zt==="pending"&&t.jsx("div",{className:"onboarding-github-feedback onboarding-github-feedback--info",children:"Waiting for GitHub authorization…"}),Zt==="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:()=>Gt("github"),children:"Connect anyway"})})]}),Zt==="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(Gn,{provider:"github",size:"lg"})}),pn?t.jsx("p",{children:"GitHub CLI is already authenticated, so imports and PR tracking work now. OAuth from the dashboard is optional and only controls dashboard-managed connect/disconnect."}):t.jsx("p",{children:"GitHub OAuth isn't connected yet. You can set it up in Settings → Authentication, or continue now and connect later."}),t.jsxs("div",{className:"model-onboarding-github-optional__actions",children:[t.jsx("button",{className:"btn btn-primary btn-sm",onClick:()=>b("project-setup"),children:pn?"Continue with gh CLI auth →":"Continue without GitHub →"}),pn&&($==="github"||Kt?t.jsxs("button",{className:"btn btn-sm",disabled:!0,children:[t.jsx(_t,{size:14,className:"onboarding-spinner"}),"Waiting for OAuth login…"]}):t.jsxs("button",{className:"btn btn-sm",onClick:()=>Gt("github"),children:[t.jsx(Gn,{provider:"github",size:"sm"}),"Connect OAuth (optional)"]}))]}),pn&&($==="github"||Kt)&&q.github&&t.jsx(ou,{instructions:q.github,"data-testid":"onboarding-login-instructions-github"})]})]}),v==="project-setup"&&t.jsxs("div",{className:"model-onboarding-project-setup",children:[t.jsx("p",{className:"model-onboarding-description",children:"Choose your first project before creating or importing tasks. You can register an existing local directory or clone a GitHub repository URL through the setup wizard."}),xs?t.jsx("div",{className:"onboarding-project-ready","data-testid":"onboarding-project-ready",role:"status",children:t.jsx("p",{children:"Project selected — task creation and imports are available."})}):t.jsxs("div",{className:"onboarding-project-prerequisite","data-testid":"onboarding-project-prerequisite",children:[t.jsx("p",{className:"onboarding-helper-text",children:"A project is required before first-task actions are available."}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:a,"data-testid":"onboarding-open-setup-wizard",children:"Set Up Project"}),t.jsx("p",{className:"onboarding-helper-text",children:"In the setup wizard, pick an existing directory or paste a GitHub clone URL."})]}),t.jsx(ci,{summary:"What does project setup do?",children:t.jsx("p",{className:"onboarding-helper-text",children:"Project setup registers a workspace so Fusion knows where to read files, run commands, and track task changes."})})]}),v==="first-task"&&t.jsxs("div",{className:"model-onboarding-first-task",children:[t.jsx("p",{className:"model-onboarding-description",children:"Create your first task to start the board and launch AI execution."}),x&&ys?t.jsxs("div",{className:"onboarding-task-created",children:[t.jsx(Xn,{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:ys.id}),Ls&&t.jsx("p",{className:"onboarding-task-created__description",children:Ls}),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:pt,children:"View Task"}),t.jsx("button",{type:"button",className:"btn",onClick:Dt,children:"Go to Dashboard"})]})]}):t.jsxs(t.Fragment,{children:[xs?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"onboarding-first-task-form",children:[t.jsx("label",{className:"onboarding-first-task-form__label",htmlFor:"onboarding-first-task-input",children:"Describe your first task"}),t.jsx("textarea",{id:"onboarding-first-task-input",className:"input onboarding-first-task-form__input","data-testid":"onboarding-first-task-input",value:R,onChange:O=>{z(O.target.value),H(null)},placeholder:"Example: Build a login page with email and password",rows:4}),t.jsx("div",{className:"onboarding-first-task-form__actions",children:t.jsx("button",{type:"button",className:"btn btn-primary",onClick:ze,disabled:_,"data-testid":"onboarding-first-task-submit",children:_?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Creating task…"})]}):"Create First Task"})})]}),Q&&t.jsxs("div",{className:"onboarding-task-error",role:"alert","data-testid":"onboarding-task-error",children:[t.jsx("p",{className:"field-error",children:Q}),t.jsx("p",{className:"onboarding-helper-text",children:"Your text has been preserved — fix the issue and try again."})]})]}):t.jsxs("div",{className:"onboarding-project-prerequisite","data-testid":"onboarding-project-prerequisite",children:[t.jsx("p",{className:"onboarding-helper-text",children:"A project must be selected before you can create tasks or import from GitHub."}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:a,"data-testid":"onboarding-open-setup-wizard",children:"Set Up Project"})]}),t.jsx(zF,{items:Tn}),xs&&t.jsxs(t.Fragment,{children:[t.jsx(ci,{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:Ht,disabled:B,children:[t.jsx("div",{className:"cta-icon",children:t.jsx(Bn,{size:24})}),t.jsxs("div",{className:"cta-content",children:[t.jsx("strong",{children:"Create a New Task"}),t.jsx("span",{children:"Describe what you need built and AI will work on it"})]})]}),t.jsxs("button",{className:`onboarding-cta-card${un?"":" onboarding-cta-card--disabled"}`,"data-testid":"cta-github-import",onClick:gn,disabled:B||!un,children:[t.jsx("div",{className:"cta-icon",children:t.jsx(Xs,{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"}),!un&&t.jsx("small",{className:"onboarding-cta-note",children:"Requires GitHub connection"})]})]})]}),t.jsxs("p",{className:"onboarding-skip-note",children:["You can create tasks anytime from the board, or use"," ",t.jsx("code",{children:"fn task create"})," in the terminal."]})]})]})]}),v==="complete"&&t.jsxs("div",{className:"model-onboarding-complete",children:[t.jsx(Xn,{size:48,className:"success-icon"}),t.jsx("p",{children:"Setup complete! Head to the board to create your first task, or explore the dashboard to see what's available."})]})]}),t.jsxs("div",{className:"model-onboarding-footer",children:[v==="ai-setup"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Mn,disabled:B,children:"Skip for now"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:re,children:"Skip setup →"}),t.jsx("button",{className:"btn btn-primary",onClick:se,children:"Next →"})]}),v==="github"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Ge,children:"← Back"}),t.jsx("button",{className:"onboarding-skip-step-link",onClick:re,children:"Skip GitHub →"}),t.jsx("button",{className:"btn btn-primary",onClick:se,children:"Next →"})]}),v==="project-setup"&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Ge,children:"← Back"}),t.jsx("button",{className:"btn btn-primary",onClick:se,disabled:!xs,children:"Next →"})]}),v==="first-task"&&!x&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:"btn btn-sm",onClick:Ge,children:"← Back"}),t.jsx("button",{className:"btn btn-primary",onClick:G,disabled:B,children:B?t.jsxs(t.Fragment,{children:[t.jsx(_t,{size:16,className:"animate-spin"}),t.jsx("span",{children:"Saving…"})]}):"Finish Setup"})]}),v==="complete"&&t.jsxs("button",{className:"btn btn-primary",onClick:je,children:[t.jsx(Xn,{size:16}),t.jsx("span",{children:"Get Started"})]})]})]})})}function Ey({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 qF=i.lazy(()=>Rn(()=>import("./SetupWizardModal-BmmRM3g-.js"),__vite__mapDeps([15,1,16,17,18,19,6,7,8,20])).then(e=>({default:e.SetupWizardModal}))),VF=i.lazy(()=>Rn(()=>import("./SettingsModal-c1QwWno0.js"),__vite__mapDeps([21,1,22,23,24,2,3,6,7,8,25])).then(e=>({default:e.SettingsModal})));function WF(){(typeof window<"u"&&window.requestIdleCallback||(n=>globalThis.setTimeout(n,200)))(()=>{Rn(()=>import("./SettingsModal-c1QwWno0.js"),__vite__mapDeps([21,1,22,23,24,2,3,6,7,8,25]))},{timeout:1500})}function GF({projectId:e,tasks:n,projects:s,currentProject:a,addToast:r,toasts:o,removeToast:l,modalManager:c,projectActions:d,taskHandlers:u,taskOperations:h,deepLink:m,settings:f,onSettingsClose:p,onReopenOnboarding:g}){const[w,v]=i.useState(null),b=c.detailTask?(()=>{const k=n.find(R=>R.id===c.detailTask?.id);return k?"prompt"in c.detailTask?{...c.detailTask,...k,prompt:c.detailTask.prompt,log:c.detailTask.log}:k:c.detailTask})():null,y=p??c.closeSettings,N=i.useCallback(()=>{c.openNewTask()},[c]),S=i.useCallback(()=>{c.openGitHubImport()},[c]),C=i.useCallback(k=>{v(null),c.closeModelOnboarding(),c.openDetailTask(k)},[c]),x=i.useCallback(async k=>{const R=await u.handleModalCreate(k);return c.modelOnboardingOpen&&v(R),R},[u.handleModalCreate,c.modelOnboardingOpen]);return i.useEffect(()=>{!c.modelOnboardingOpen&&w&&v(null)},[c.modelOnboardingOpen,w]),i.useEffect(()=>{WF()},[]),t.jsxs(t.Fragment,{children:[b&&t.jsx(Oa,{children:t.jsx(s4,{task:b,projectId:e,tasks:n,onClose:m.handleDetailClose,onOpenDetail:c.openDetailTask,mobileHeaderMode:c.detailTaskOrigin==="list-mobile"?"back":"close",onMoveTask:h.moveTask,onDeleteTask:h.deleteTask,onMergeTask:h.mergeTask,onRetryTask:h.retryTask,onResetTask:h.resetTask,onDuplicateTask:h.duplicateTask,onTaskUpdated:c.updateDetailTask,addToast:r,prAuthAvailable:f.prAuthAvailable,initialTab:c.detailTaskInitialTab})}),c.settingsOpen&&t.jsx(Oa,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(VF,{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(xD,{isOpen:c.githubImportOpen,onClose:c.closeGitHubImport,onImport:u.handleGitHubImport,tasks:n,projectId:e}),t.jsx(Oa,{children:t.jsx(ND,{isOpen:c.isPlanningOpen,onClose:c.closePlanning,onTaskCreated:u.handlePlanningTaskCreated,onTasksCreated:u.handlePlanningTasksCreated,tasks:n,initialPlan:c.planningInitialPlan??void 0,projectId:e,resumeSessionId:c.planningResumeSessionId})}),t.jsx(Oa,{children:t.jsx(PD,{isOpen:c.isSubtaskOpen,onClose:c.closeSubtask,initialDescription:c.subtaskInitialDescription??"",onTasksCreated:u.handleSubtaskTasksCreated,projectId:e,resumeSessionId:c.subtaskResumeSessionId})}),t.jsx(nL,{isOpen:c.terminalOpen,onClose:c.closeTerminal,initialCommand:c.terminalInitialCommand,projectId:e}),t.jsx(iL,{isOpen:c.scriptsOpen,onClose:c.closeScripts,addToast:r,onRunScript:c.runScript,projectId:e}),c.filesOpen&&t.jsx(_L,{initialWorkspace:c.fileBrowserWorkspace,initialFile:c.fileBrowserInitialFile,isOpen:!0,onClose:c.closeFiles,onWorkspaceChange:c.setFileWorkspace,projectId:e}),c.todosOpen&&t.jsx(AL,{isOpen:!0,onClose:c.closeTodos,addToast:r,projectId:e,onPlanningMode:c.openPlanningWithInitialPlan}),t.jsx(FL,{isOpen:c.usageOpen,onClose:c.closeUsage,projectId:e,anchorRect:c.usageAnchorRect}),t.jsx(fO,{isOpen:c.systemStatsOpen,onClose:c.closeSystemStats,projectId:e}),c.schedulesOpen&&t.jsx(aO,{onClose:c.closeSchedules,addToast:r,projectId:e}),t.jsx(Oa,{children:t.jsx(cO,{isOpen:c.newTaskModalOpen,onClose:c.closeNewTask,tasks:n,onCreateTask:x,addToast:r,projectId:e})}),t.jsx(yO,{isOpen:c.activityLogOpen,onClose:c.closeActivityLog,tasks:n,projectId:e,projects:s,currentProject:a,onOpenTaskDetail:k=>{const R=n.find(z=>z.id===k);R&&c.openDetailTask(R)}}),t.jsx(Oa,{children:t.jsx(kO,{isOpen:c.gitManagerOpen,onClose:c.closeGitManager,tasks:n,addToast:r,projectId:e})}),t.jsx(Oa,{children:t.jsx(IO,{isOpen:c.workflowStepsOpen,onClose:c.closeWorkflowSteps,addToast:r,projectId:e})}),t.jsx(GO,{isOpen:c.agentsOpen,onClose:c.closeAgents,addToast:r,projectId:e}),c.setupWizardOpen&&t.jsx(i.Suspense,{fallback:null,children:t.jsx(qF,{onProjectRegistered:d.handleSetupComplete,onClose:c.closeSetupWizard})}),c.modelOnboardingOpen&&t.jsx(HF,{onComplete:d.handleModelOnboardingComplete,addToast:r,projectId:e??"",onOpenSetupWizard:d.handleAddProject,onOpenNewTask:N,onOpenGitHubImport:S,firstCreatedTask:w,onViewTask:C}),t.jsx(Ey,{toasts:o,onRemove:l})]})}function KF({errorMessage:e,isRetrying:n,onRetry:s,onManageConnection:a}){return t.jsxs("div",{className:"project-overview-empty",role:"alert","aria-live":"polite",children:[t.jsx("h2",{children:"Can't reach the Fusion backend"}),t.jsx("p",{className:"settings-muted",children:"Fusion couldn't load your projects right now. Please make sure the backend is running and try again."}),t.jsxs("p",{className:"settings-muted",children:["Error: ",e]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn btn-primary",onClick:s,disabled:n,children:n?"Retrying…":"Retry Connection"}),a&&t.jsx("button",{type:"button",className:"btn",onClick:a,children:"Manage Connection"})]})]})}const Ju=[{id:"projects",label:"Loading projects"},{id:"project",label:"Selecting project"},{id:"tasks",label:"Fetching tasks"}];function JF(e,n){if(n==="ready")return"done";const s=Ju.findIndex(r=>r.id===n),a=Ju.findIndex(r=>r.id===e);return a<s?"done":a===s?"active":"pending"}function YF({stage:e}){const[n]=i.useState(()=>rN());return t.jsx("div",{className:"dashboard-loader",role:"status","aria-live":"polite","aria-label":n?"Updating Fusion dashboard":"Loading Fusion dashboard","data-stage":e,"data-version-update":n?"true":void 0,children:t.jsxs("div",{className:"dashboard-loader__content",children:[t.jsx("h1",{className:"dashboard-loader__logo",children:"Fusion"}),n?t.jsx("p",{className:"dashboard-loader__message dashboard-loader__message--update",children:"Updating to a new frontend version..."}):t.jsx("p",{className:"dashboard-loader__message",children:"Initializing dashboard..."}),t.jsx("ol",{className:"dashboard-loader__steps","aria-label":"Dashboard loading progress",children:Ju.map(s=>{const a=JF(s.id,e);return t.jsxs("li",{className:`dashboard-loader__step dashboard-loader__step--${a}`,"data-testid":`dashboard-loader-step-${s.id}`,children:[t.jsx("span",{className:"dashboard-loader__step-icon","aria-hidden":"true",children:a==="done"?"✓":a==="active"?t.jsx(_t,{className:"dashboard-loader__spinner animate-spin",size:14}):"•"}),t.jsx("span",{className:"dashboard-loader__step-label",children:s.label})]},s.id)})})]})})}const QF=5e3;function XF(e,n,s){return e||n&&s===0?"idle":n&&s>0?"paused":s>0?"running":"idle"}function ZF(e,n,s){let a=0,r=0,o=0,l=0,c=0;for(const d of e){switch(d.column){case"in-progress":a++,oc(d,n,s)&&o++;break;case"todo":l++;break;case"in-review":c++;break}d.blockedBy&&d.blockedBy.length>0&&r++}return{runningTaskCount:a,blockedTaskCount:r,stuckTaskCount:o,queuedTaskCount:l,inReviewCount:c}}function ez(e,n,s,a){const[r,o]=i.useState({globalPause:!1,enginePaused:!1,maxConcurrent:2}),[l,c]=i.useState(!0),[d,u]=i.useState(null),h=i.useRef(null),m=i.useRef(null),f=i.useCallback(async()=>{m.current&&m.current.abort(),m.current=new AbortController;try{c(!0),u(null);const v=await S1(n);o(v)}catch(v){if(v instanceof Error&&v.name==="AbortError")return;u(v instanceof Error?v.message:"Failed to fetch executor stats")}finally{c(!1)}},[n]);i.useEffect(()=>(f(),()=>{m.current&&m.current.abort()}),[f]),i.useEffect(()=>(h.current&&clearInterval(h.current),h.current=setInterval(()=>{f()},QF),()=>{h.current&&(clearInterval(h.current),h.current=null)}),[f]);const p=ZF(e,s,a),g=XF(r.globalPause,r.enginePaused,p.runningTaskCount);return{stats:{...p,executorState:g,maxConcurrent:r.maxConcurrent,lastActivityAt:r.lastActivityAt},loading:l,error:d,refresh:f}}const tz={planning:Bi,subtask:Va,mission_interview:Ss,milestone_interview:Ss,slice_interview:Ss},nz={planning:"Planning",subtask:"Subtask Breakdown",mission_interview:"Mission Interview",milestone_interview:"Milestone Interview",slice_interview:"Slice Interview"};function sz({sessions:e,generating:n,needsInput:s,onOpenSession:a,onDismissSession:r}){const{confirm:o}=ii(),[l,c]=i.useState(!1),[d,u]=i.useState(new Set),h=i.useRef(null),m=i.useRef(new Map),f=i.useRef(null),{activeTabMap:p}=eo(),g=i.useMemo(()=>nr(),[]);if(i.useEffect(()=>{if(!l)return;const b=y=>{h.current&&!h.current.contains(y.target)&&c(!1)};return document.addEventListener("mousedown",b),()=>document.removeEventListener("mousedown",b)},[l]),i.useEffect(()=>{const b=new Set,y=new Map;for(const N of e){const S=p.get(N.id),C=[N.status,N.updatedAt,S?.tabId??N.lockedByTab??"",S?.stale?"stale":"fresh"].join("|"),x=m.current.get(N.id);x&&x!==C&&b.add(N.id),y.set(N.id,C)}if(m.current=y,b.size!==0)return u(b),f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{u(new Set),f.current=null},500),()=>{f.current&&(clearTimeout(f.current),f.current=null)}},[p,e]),e.length===0)return null;const w=e.length,v=s>0;return t.jsxs("div",{ref:h,className:"background-tasks-indicator",children:[t.jsxs("button",{className:`background-tasks-indicator__pill${v?" background-tasks-indicator__pill--attention":""}`,onClick:()=>c(b=>!b),title:`${w} background AI task${w!==1?"s":""}${s>0?` (${s} need${s!==1?"":"s"} input)`:""}`,children:[n>0&&t.jsx(_t,{size:12,style:{animation:"spin 1s linear infinite"}}),s>0&&n===0&&t.jsx(pu,{size:12}),t.jsxs("span",{children:["AI ",w]})]}),l&&t.jsxs("div",{className:"background-tasks-indicator__popover",children:[t.jsx("div",{className:"background-tasks-indicator__popover-header",children:"Background Tasks"}),t.jsx("div",{className:"background-tasks-indicator__popover-list",children:e.map(b=>{const y=tz[b.type],N=b.status==="generating",S=b.status==="awaiting_input",C=b.status==="error",x=p.get(b.id),k=x?.tabId??b.lockedByTab??null,R=!!(k&&k!==g&&!x?.stale),z=d.has(b.id);return t.jsxs("div",{className:`background-tasks-indicator__item${z?" background-tasks-indicator__item--updated":""}`,style:{transition:"background-color 220ms ease, transform 220ms ease",backgroundColor:z?"var(--color-accent-soft, rgba(59, 130, 246, 0.14))":void 0,transform:z?"translateY(-1px)":void 0},onClick:async()=>{R&&!await o({title:"Open Active Session",message:"This session is active in another tab. Open anyway?"})||(a(b),c(!1))},children:[C?t.jsx(Us,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--color-error)"}}):t.jsx(y,{size:14,className:"background-tasks-indicator__session-icon"}),t.jsxs("div",{className:"background-tasks-indicator__session-content",children:[t.jsx("div",{className:"background-tasks-indicator__session-title",children:b.title}),t.jsxs("div",{className:"background-tasks-indicator__session-meta",children:[C?"Failed":nz[b.type],N&&" — generating...",S&&!R&&" — needs input",S&&R&&" — active in another tab"]})]}),N&&t.jsx(_t,{size:14,className:"background-tasks-indicator__session-icon",style:{animation:"spin 1s linear infinite",color:"var(--color-success)"}}),S&&!R&&t.jsx(pu,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--triage)"}}),S&&R&&t.jsx(Ec,{size:14,className:"background-tasks-indicator__session-icon",style:{color:"var(--text-muted)"}}),t.jsx("button",{className:"background-tasks-indicator__item-dismiss",onClick:_=>{_.stopPropagation(),r(b.id)},title:"Dismiss",children:t.jsx(kn,{size:12})})]},b.id)})})]})]})}function iz(e){if(!e)return"no activity";const n=Date.now(),s=new Date(e).getTime(),a=n-s,r=Math.floor(a/1e3),o=Math.floor(r/60),l=Math.floor(o/60),c=Math.floor(l/24);return c>0?`${c}d ago`:l>0?`${l}h ago`:o>0?`${o}m ago`:r>10?`${r}s ago`:"just now"}function az(e){switch(e){case"running":return{label:"Running",color:"var(--color-success)",icon:is};case"paused":return{label:"Paused",color:"var(--triage)",icon:ui};case"idle":default:return{label:"Idle",color:"var(--text-muted)",icon:rs}}}function rz({tasks:e,projectId:n,taskStuckTimeoutMs:s,staleHighFanoutBlockerAgeThresholdMs:a,backgroundSessions:r,backgroundGenerating:o,backgroundNeedsInput:l,onOpenBackgroundSession:c,onDismissBackgroundSession:d,lastFetchTimeMs:u,currentProjectPath:h,onOpenProjectDirectory:m,keyboardOpen:f}){if(f)return null;const{stats:p,loading:g,error:w}=ez(e,n,s,u),[v,b]=i.useState(!1),y=i.useMemo(()=>az(p.executorState),[p.executorState]),N=i.useMemo(()=>iz(p.lastActivityAt),[p.lastActivityAt]),S=i.useMemo(()=>{const x=pm(e,{staleHighFanoutAgeThresholdMs:a??Ub});return Array.from(x.entries()).map(([R,z])=>({blockerId:R,entry:z})).filter(({entry:R})=>R.isHighFanout).sort((R,z)=>{if(z.entry.overlapBlockedTodoCount!==R.entry.overlapBlockedTodoCount)return z.entry.overlapBlockedTodoCount-R.entry.overlapBlockedTodoCount;const _=R.entry.escalation?.blockingAgeMs??0,A=z.entry.escalation?.blockingAgeMs??0;return A!==_?A-_:R.blockerId.localeCompare(z.blockerId,"en",{numeric:!0,sensitivity:"base"})})[0]??null},[e,a]),C=y.icon;return w?t.jsx("div",{className:"executor-status-bar executor-status-bar--error",role:"status","aria-label":"Executor status",children:t.jsxs("span",{className:"executor-status-bar__error",children:[t.jsx(Kr,{size:14}),w]})}):g&&p.runningTaskCount===0?t.jsx("div",{className:"executor-status-bar executor-status-bar--loading",role:"status","aria-label":"Executor status",children:t.jsx("span",{className:"executor-status-bar__loading-text",children:"Loading..."})}):t.jsxs("div",{className:`executor-status-bar ${p.executorState==="running"?"executor-status-bar--running":""}`,role:"status","aria-label":"Executor status",children:[r&&r.length>0&&c&&d&&t.jsxs(t.Fragment,{children:[t.jsx(sz,{sessions:r,generating:o??0,needsInput:l??0,onOpenSession:c,onDismissSession:d}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"})]}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--queued","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Queued"}),t.jsx("span",{className:"executor-status-bar__count",children:p.queuedTaskCount})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:`executor-status-bar__indicator executor-status-bar__indicator--running ${p.runningTaskCount>0?"executor-status-bar__indicator--active":""}`,"aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Running"}),t.jsx("span",{className:"executor-status-bar__count",children:p.runningTaskCount}),t.jsx("span",{className:"executor-status-bar__separator","aria-hidden":"true",children:"/"}),t.jsx("span",{className:"executor-status-bar__max",children:p.maxConcurrent})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),p.stuckTaskCount>0&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--stuck",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--stuck executor-status-bar__indicator--active","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Stuck"}),t.jsx("span",{className:"executor-status-bar__count executor-status-bar__count--error",children:p.stuckTaskCount})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"})]}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:`executor-status-bar__indicator executor-status-bar__indicator--blocked ${p.blockedTaskCount>0?"executor-status-bar__indicator--active":""}`,"aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Blocked"}),t.jsx("span",{className:`executor-status-bar__count ${p.blockedTaskCount>0?"executor-status-bar__count--warning":""}`,children:p.blockedTaskCount})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--review","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"In Review"}),t.jsx("span",{className:"executor-status-bar__count",children:p.inReviewCount})]}),S&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--fanout",children:[t.jsx("span",{className:"executor-status-bar__indicator executor-status-bar__indicator--fanout executor-status-bar__indicator--active","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__label",children:"Overlap queue"}),t.jsxs("span",{className:"executor-status-bar__fanout-summary",title:`${S.entry.escalation?"Escalated":"Temporary"} overlap bottleneck ${S.blockerId}: ${S.entry.overlapBlockedTodoCount} todo blocked via blockedBy (threshold ${am})`,children:[S.blockerId," · ",S.entry.overlapBlockedTodoCount," todo",S.entry.escalation?" (escalated)":""]})]})]}),h&&m&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--project-directory",children:[t.jsx("button",{className:`executor-status-bar__folder-toggle${v?" executor-status-bar__folder-toggle--active":""}`,onClick:()=>b(x=>!x),"aria-label":v?"Hide project directory":"Show project directory","aria-expanded":v,"data-testid":"executor-project-path-toggle",title:v?"Hide project directory":"Show project directory",children:t.jsx(ks,{size:12,"aria-hidden":"true"})}),v&&t.jsx("button",{className:"executor-status-bar__project-path",onClick:m,title:h,"data-testid":"executor-project-path-link",children:h})]})]}),t.jsx("div",{className:"executor-status-bar__spacer"}),t.jsxs("div",{className:"executor-status-bar__segment executor-status-bar__segment--time",children:[t.jsx(sa,{size:12,className:"executor-status-bar__icon","aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__time",children:N})]}),t.jsx("span",{className:"executor-status-bar__divider","aria-hidden":"true"}),t.jsxs("div",{className:"executor-status-bar__segment",children:[t.jsx(C,{size:12,style:{color:y.color},"aria-hidden":"true"}),t.jsx("span",{className:"executor-status-bar__state",style:{color:y.color},children:y.label})]})]})}const oz={planning:Bi,subtask:Va,mission_interview:Ss,milestone_interview:Ss,slice_interview:Ss},lz={planning:"Planning",subtask:"Subtask Breakdown",mission_interview:"Mission Interview",milestone_interview:"Milestone Interview",slice_interview:"Slice Interview"},_y="fusion:session-banner-dismissed";function $o(e){if(!e)return 0;const n=Date.parse(e);return Number.isFinite(n)?n:0}function cz(){if(typeof window>"u")return new Map;try{const e=window.localStorage.getItem(_y);if(!e)return new Map;const n=JSON.parse(e),s=new Map;for(const[a,r]of Object.entries(n)){const o=typeof r=="number"?r:$o(r);s.set(a,o)}return s}catch{return new Map}}function dz(e){if(!(typeof window>"u"))try{const n={};for(const[s,a]of e)n[s]=a;window.localStorage.setItem(_y,JSON.stringify(n))}catch{}}const ea=cz();function uz({sessions:e,onResumeSession:n,onDismissSession:s,onDismissAll:a}){const[r,o]=i.useState(0),l=()=>{dz(ea),o(g=>g+1)};i.useEffect(()=>{if(ea.size===0)return;const g=new Map(e.map(v=>[v.id,v]));let w=!1;for(const[v,b]of ea){const y=g.get(v);if(!y)continue;if(!(y.status==="awaiting_input"||y.status==="error")){ea.delete(v),w=!0;continue}$o(y.updatedAt)>b&&(ea.delete(v),w=!0)}w&&l()},[e]);const c=i.useMemo(()=>e.filter(g=>{if(g.status!=="awaiting_input"&&g.status!=="error")return!1;const w=ea.get(g.id);return w===void 0?!0:$o(g.updatedAt)>w}),[e,r]);if(c.length===0)return null;const d=c.filter(g=>g.status==="awaiting_input").length,u=c.filter(g=>g.status==="error").length;let h="";d>0&&u>0?h=`${d} AI session${d===1?"":"s"} need${d===1?"s":""} your input, ${u} failed`:d>0?h=`${d} AI session${d===1?"":"s"} need${d===1?"s":""} your input`:u>0&&(h=`${u} AI session${u===1?"":"s"} failed`);const m=g=>{ea.set(g.id,Math.max($o(g.updatedAt),Date.now())),l()},f=g=>{ea.delete(g.id),l(),n(g)},p=()=>{const g=Date.now();for(const w of c)ea.set(w.id,Math.max($o(w.updatedAt),g));l(),a()};return t.jsxs("section",{className:"session-notification-banner",role:"region","aria-live":"polite","aria-label":"AI sessions needing input or failed",children:[t.jsxs("div",{className:"session-notification-banner__header",children:[t.jsxs("div",{className:"session-notification-banner__headline",children:[t.jsx(Us,{size:16,"aria-hidden":"true"}),t.jsx("span",{children:h})]}),t.jsxs("button",{className:"session-notification-banner__dismiss-all",onClick:p,children:[t.jsx(kn,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:"Dismiss all"})]})]}),t.jsx("div",{className:"session-notification-banner__list",children:c.map(g=>{const w=oz[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(Us,{size:16,className:"session-notification-banner__type-icon session-notification-banner__type-icon--error","aria-hidden":"true"}):t.jsx(w,{size:16,className:"session-notification-banner__type-icon","aria-hidden":"true"}),t.jsxs("div",{className:"session-notification-banner__text",children:[t.jsx("p",{className:"session-notification-banner__title",title:g.title,children:g.title}),t.jsx("p",{className:"session-notification-banner__meta",children:v?"Failed":lz[g.type]})]})]}),t.jsxs("div",{className:"session-notification-banner__actions",children:[t.jsx("button",{className:"session-notification-banner__resume",onClick:()=>f(g),children:v?"Retry":"Resume"}),t.jsx("button",{className:"session-notification-banner__dismiss",onClick:()=>{m(g),s(g.id)},"aria-label":`Dismiss ${g.title}`,children:t.jsx(kn,{size:14,"aria-hidden":"true"})})]})]},g.id)})})]})}const My="fusion:cli-binary-banner-dismissed";function mz(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(My)==="1"}catch{return!1}}function hz(){if(!(typeof window>"u"))try{window.localStorage.setItem(My,"1")}catch{}}function pz({onOpenSettings:e}){const[n,s]=i.useState(null),[a,r]=i.useState(()=>mz()),[o,l]=i.useState(!1),[c,d]=i.useState(null);i.useEffect(()=>{if(a)return;let y=!1;return bS().then(N=>{y||s(N)}).catch(()=>{}),()=>{y=!0}},[a]);const u=i.useCallback(async()=>{l(!0),d(null);try{const y=await xS();s({binary:y.binary,expectedVersion:y.expectedVersion,state:y.state,install:y.install}),y.installResult.success||d(y.installResult.permissionsHint||y.installResult.stderr||`Install failed (exit ${y.installResult.exitCode??"n/a"})`)}catch(y){d(y instanceof Error?y.message:String(y))}finally{l(!1)}},[]),h=i.useCallback(()=>{hz(),r(!0)},[]);if(a||!n||n.state==="installed"||n.state==="skipped")return null;const m=n.state==="version-mismatch",f=n.binary.version,p=n.expectedVersion,g=m?"Update the Fusion CLI":"Install the Fusion CLI",w=m?t.jsxs(t.Fragment,{children:["Your installed ",t.jsx("code",{children:"fn"}),"/",t.jsx("code",{children:"fusion"})," CLI is"," ",t.jsxs("strong",{children:["v",f??"unknown"]})," but this dashboard expects"," ",t.jsxs("strong",{children:["v",p]}),". Update to stay in sync."]}):t.jsxs(t.Fragment,{children:["Get the ",t.jsx("code",{children:"fn"})," and ",t.jsx("code",{children:"fusion"})," commands on your terminal so you can drive Fusion from anywhere. One click below or copy the command into your shell."]}),v=m?"Update with npm":"Install with npm",b=m?"Updating…":"Installing…";return t.jsxs("div",{className:"cli-binary-banner",role:"status",children:[t.jsxs("div",{className:"cli-binary-banner__body",children:[t.jsx("div",{className:"cli-binary-banner__title",children:g}),t.jsx("div",{className:"cli-binary-banner__text",children:w}),t.jsxs("div",{className:"cli-binary-banner__actions",children:[t.jsx("button",{type:"button",className:"cli-binary-banner__primary",onClick:()=>void u(),disabled:o,children:o?b:v}),t.jsx("button",{type:"button",className:"cli-binary-banner__secondary",onClick:e,children:"Open Settings"})]}),c&&t.jsx("div",{className:"cli-binary-banner__error",children:c})]}),t.jsx("button",{type:"button",className:"cli-binary-banner__dismiss","aria-label":"Dismiss",onClick:h,children:t.jsx(kn,{size:16})})]})}function fz({signal:e,onDismiss:n}){return!e||!e.atRisk?null:t.jsxs("div",{className:`capacity-risk-banner${n?" capacity-risk-banner--dismissible":""}`,role:"status","aria-live":"polite",children:[t.jsxs("div",{className:"capacity-risk-banner__content",children:[t.jsx("strong",{children:"Capacity risk:"})," Todo ",e.todoCount," (threshold ",e.threshold,") · In Progress ",e.inProgressCount," · In Review ",e.inReviewCount," · Idle agents ",e.idleNonEphemeralAgentCount]}),n?t.jsx("button",{type:"button",className:"capacity-risk-banner__dismiss touch-target","aria-label":"Dismiss capacity warning",onClick:n,children:t.jsx(kn,{"aria-hidden":"true"})}):null]})}const gz={duplicate_active_id:"Duplicate active task ID",id_in_active_and_archived:"Task ID present in active and archived storage",next_sequence_at_or_below_used:"Allocator next sequence overlaps an existing task ID",task_row_outside_known_prefix:"Task row uses a prefix outside allocator state"};function bz(e){return e.length<=5?e.join(", "):`${e.slice(0,5).join(", ")} +${e.length-5} more`}function xz({report:e,recommendedAction:n,onRefresh:s}){const[a,r]=i.useState(!1),[o,l]=i.useState(null);if(e.status!=="anomaly")return null;const c=async()=>{r(!0),l(null);try{const d=await HN();s?.(d.taskIdIntegrity,d.taskIdIntegrity.recommendedAction)}catch(d){l(d instanceof Error?d.message:"Failed to refresh integrity status.")}finally{r(!1)}};return t.jsxs("section",{className:"task-id-integrity-banner",role:"alert","aria-live":"assertive",children:[t.jsxs("div",{className:"task-id-integrity-banner__header",children:[t.jsxs("div",{className:"task-id-integrity-banner__headline-wrap",children:[t.jsx("span",{className:"status-dot status-dot--error","aria-hidden":"true"}),t.jsx(Kr,{"aria-hidden":"true"}),t.jsx("h2",{className:"task-id-integrity-banner__headline",children:"Task ID integrity anomaly detected"})]}),t.jsxs("button",{type:"button",className:"btn btn-sm task-id-integrity-banner__refresh",onClick:()=>{c()},disabled:a,children:[t.jsx(us,{className:a?"task-id-integrity-banner__refresh-icon task-id-integrity-banner__refresh-icon--spinning":"task-id-integrity-banner__refresh-icon","aria-hidden":"true"}),a?"Re-checking…":"Re-check"]})]}),t.jsx("p",{className:"task-id-integrity-banner__body",children:"Fusion found allocator state that can cause task IDs to be reused or overwrite live task records."}),t.jsx("ul",{className:"task-id-integrity-banner__list",children:e.anomalies.map(d=>t.jsxs("li",{className:"task-id-integrity-banner__item",children:[t.jsx("strong",{className:"task-id-integrity-banner__item-title",children:gz[d.kind]}),t.jsx("span",{className:"task-id-integrity-banner__item-detail",children:d.details}),t.jsx("code",{className:"task-id-integrity-banner__ids",children:bz(d.affectedIds)})]},`${d.kind}:${d.prefix}:${d.affectedIds.join(",")}`))}),t.jsx("p",{className:"task-id-integrity-banner__footer",children:n}),o?t.jsx("p",{className:"task-id-integrity-banner__error",children:o}):null]})}function vz({latestVersion:e,currentVersion:n,onDismiss:s}){return t.jsxs("div",{className:"update-available-banner",role:"status","aria-live":"polite",children:[t.jsxs("p",{className:"update-available-banner__text",children:["Update available: v",e," (current: v",n,"). Run ",t.jsx("code",{children:"fn update"})," for an installed CLI, or pull this source checkout."," ",t.jsx("a",{className:"update-available-banner__link",href:"https://github.com/Runfusion/Fusion/blob/main/CHANGELOG.md",target:"_blank",rel:"noreferrer",children:"Release notes"})," ","·"," ",t.jsx("a",{className:"update-available-banner__link",href:"https://runfusion.ai",target:"_blank",rel:"noreferrer",children:"Learn more"})]}),t.jsx("button",{type:"button",className:"update-available-banner__dismiss touch-target","aria-label":"Dismiss update notice",onClick:s,children:t.jsx(kn,{size:16,"aria-hidden":"true"})})]})}function yz({pendingCount:e,onOpenMailbox:n,onDismiss:s}){const a=e===1?"request":"requests";return t.jsx("section",{className:"approval-notification-banner",role:"region","aria-live":"polite","aria-label":"Approval requests",children:t.jsxs("div",{className:"approval-notification-banner__content",children:[t.jsxs("div",{className:"approval-notification-banner__headline",children:[t.jsx("span",{className:"status-dot","aria-hidden":"true"}),t.jsx(Kr,{"aria-hidden":"true"}),t.jsxs("span",{children:[e," approval ",a," need your attention"]})]}),t.jsxs("div",{className:"approval-notification-banner__actions",children:[t.jsxs("button",{type:"button",className:"btn btn-sm",onClick:n,children:[t.jsx(ba,{"aria-hidden":"true"}),t.jsx("span",{children:"Open Mailbox"})]}),t.jsx("button",{type:"button",className:"btn-icon approval-notification-banner__dismiss",onClick:s,"aria-label":"Dismiss approval notification banner",children:t.jsx(kn,{"aria-hidden":"true"})})]})]})})}function wz({onResume:e}){const n=xF();if(!n)return null;const s=n.completedSteps.length,a=ga.length,r=s>0?`${s} of ${a} step${s!==1?"s":""} complete — You're on the `:"You're on the ";return t.jsxs("section",{className:"onboarding-resume-card",role:"region","aria-label":"Resume onboarding",children:[t.jsxs("div",{className:"onboarding-resume-card__main",children:[t.jsx("div",{className:"onboarding-resume-card__icon","aria-hidden":"true",children:t.jsx(cs,{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:()=>{li("onboarding:resumed",{source:"resume-card",resumedFromStep:n.currentStep}),e()},children:[t.jsx(is,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:"Continue onboarding"})]})})]})}function kz({onOpenSettings:e,onOpenModelOnboarding:n}){const s=qr(),a=jy(),[r,o]=i.useState(!0),[l,c]=i.useState(!1),[d,u]=i.useState(!1),[h,m]=i.useState({needsAiProvider:!1,needsDefaultModel:!1,needsGitHub:!1});i.useEffect(()=>{if(!s||a){o(!1);return}let b=!1;return(async()=>{try{o(!0),c(!1);const[N,S]=await Promise.all([qo(),ia()]);if(b)return;const C=N.providers??[],x=C.find(A=>A.id==="github"),R=!C.some(A=>A.id!=="github"&&A.authenticated),z=!S.defaultProvider&&!S.defaultModelId,_=x?!x.authenticated:!1;m({needsAiProvider:R,needsDefaultModel:z,needsGitHub:_})}catch{b||c(!0)}finally{b||o(!1)}})(),()=>{b=!0}},[s,a]);const f=i.useCallback(()=>{gF(),u(!0)},[]),p=i.useCallback(()=>{n()},[n]),g=i.useCallback(()=>{e("global-models")},[e]),w=i.useCallback(()=>{e("authentication")},[e]),v=i.useMemo(()=>{const b=[];return h.needsAiProvider&&b.push({id:"ai-provider",title:"Connect AI Provider",description:"Connect an AI provider to enable AI agents for task planning and code generation",actionLabel:"Set Up AI",onAction:p,icon:rs}),h.needsDefaultModel&&b.push({id:"default-model",title:"Select Default Model",description:"Choose a default AI model for task execution",actionLabel:"Choose Model",onAction:g,icon:Tb}),h.needsGitHub&&b.push({id:"github",title:"Connect GitHub",description:"Connect GitHub to import issues and track pull requests",actionLabel:"Connect GitHub",onAction:w,icon:Xs}),b},[h.needsAiProvider,h.needsDefaultModel,h.needsGitHub,w,g,p]);return!s||a||d||r||l||v.length===0?null:t.jsxs("section",{className:"post-onboarding-recommendations",role:"region","aria-label":"Setup recommendations",children:[t.jsxs("div",{className:"post-onboarding-recommendations__main",children:[t.jsx("div",{className:"post-onboarding-recommendations__icon","aria-hidden":"true",children:t.jsx(Bi,{size:18,"aria-hidden":!0})}),t.jsxs("div",{className:"post-onboarding-recommendations__content",children:[t.jsx("h2",{className:"post-onboarding-recommendations__title",children:"Recommended Next Steps"}),t.jsx("p",{className:"post-onboarding-recommendations__description",children:"Complete these setup items to get the most out of Fusion."}),t.jsx("ul",{className:"post-onboarding-recommendations__list",children:v.map(b=>{const y=b.icon;return t.jsxs("li",{className:"post-onboarding-recommendations__item",children:[t.jsx("span",{className:"post-onboarding-recommendations__item-icon","aria-hidden":"true",children:t.jsx(y,{size:14,"aria-hidden":!0})}),t.jsxs("span",{className:"post-onboarding-recommendations__item-text",children:[t.jsx("strong",{children:b.title}),t.jsx("span",{children:b.description})]}),t.jsx("button",{type:"button",className:"btn btn-sm btn-primary",onClick:b.onAction,children:b.actionLabel})]},b.id)})}),t.jsx(va,{slotId:"post-onboarding-recommendation",renderPlaceholder:!1,actions:{openSettingsSection:e,openModelOnboarding:n}})]})]}),t.jsx("button",{type:"button",className:"post-onboarding-recommendations__dismiss",onClick:f,"aria-label":"Dismiss recommendations",children:t.jsx(kn,{size:16,"aria-hidden":!0})})]})}function jz({size:e=20}){return t.jsx("svg",{width:e,height:e,viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:t.jsx("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.203 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"})})}function No(e){return e>99?"99+":String(e)}function Nz({view:e,onChangeView:n,footerVisible:s,modalOpen:a=!1,keyboardOpen:r=!1,onOpenSettings:o,onOpenActivityLog:l,onOpenSystemStats:c,onOpenMailbox:d,mailboxUnreadCount:u=0,mailboxPendingApprovalCount:h=0,chatHasUnreadResponse:m=!1,stashOrphanCount:f=0,onOpenGitManager:p,onOpenWorkflowSteps:g,onOpenSchedules:w,onOpenScripts:v,onToggleTerminal:b,onOpenFiles:y,onOpenTodos:N,todosOpen:S=!1,onOpenGitHubImport:C,onOpenPlanning:x,onResumePlanning:k,activePlanningSessionCount:R=0,onOpenUsage:z,onRunScript:_,projectId:A,onViewAllProjects:Q,showSkillsTab:H,experimentalFeatures:M,onOpenNodes:T,pluginDashboardViews:F=[],shellConnectionControl:W}){const oe=si(),[D,E]=i.useState(!1),[P,$]=i.useState(!1),[j,q]=i.useState({}),[de,be]=i.useState(!1),Ce=i.useMemo(()=>Object.entries(j).sort(([te],[Be])=>te.localeCompare(Be)),[j]);i.useEffect(()=>{if(!P)return;let te=!1;return be(!0),Vo(A).then(Be=>{te||q(Be)}).catch(()=>{te||q({})}).finally(()=>{te||be(!1)}),()=>{te=!0}},[P,A]);const Ae=i.useCallback(()=>E(!1),[]),ae=i.useCallback(te=>{Ae(),te?.()},[Ae]);if(i.useEffect(()=>{if(!D)return;const te=Be=>{Be.key==="Escape"&&E(!1)};return document.addEventListener("keydown",te),()=>document.removeEventListener("keydown",te)},[D]),oe!=="mobile"||a||r)return null;const X=R>0&&k?k:x,pe=!!H,ie=!!M?.todoView,ye=pe,ee=pe&&!ye,me=F.filter(te=>te.view.placement==="primary").sort((te,Be)=>(te.view.order??Number.MAX_SAFE_INTEGER)-(Be.view.order??Number.MAX_SAFE_INTEGER)).slice(0,1),B=new Set(me.map(te=>`${te.pluginId}:${te.view.viewId}`)),xe=F.filter(te=>!B.has(`${te.pluginId}:${te.view.viewId}`)).sort((te,Be)=>(te.view.order??Number.MAX_SAFE_INTEGER)-(Be.view.order??Number.MAX_SAFE_INTEGER)),Ne=e==="documents"||!!M?.evalsView&&e==="evals"||e==="research"||e==="insights"||e==="memory"||e==="devserver"||e==="dev-server"||S&&ie||e==="skills"&&!ye||e==="graph"||e==="stash-recovery"||Mr(e)&&!me.some(te=>Lo(te.pluginId,te.view.viewId)===e);return t.jsxs(t.Fragment,{children:[t.jsxs("nav",{className:`mobile-nav-bar${s?" mobile-nav-bar--with-footer":""}`,role:"tablist","aria-label":"Primary navigation",children:[t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="board"||e==="list"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-tasks",role:"tab","aria-selected":e==="board"||e==="list",onClick:()=>{n(e==="board"||e==="list"?e:"board")},children:[t.jsx(Na,{}),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(Qn,{}),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(Ss,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Missions"})]}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="chat"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-chat",role:"tab","aria-selected":e==="chat",onClick:()=>n("chat"),children:[t.jsxs("span",{className:"mobile-nav-tab-icon-wrapper",children:[t.jsx(ta,{}),m&&e!=="chat"&&t.jsx("span",{className:"status-dot status-dot--pending mobile-nav-chat-unread-dot","aria-label":"Unread chat response"})]}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Chat"})]}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${e==="mailbox"?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-mailbox",role:"tab","aria-selected":e==="mailbox",onClick:()=>n("mailbox"),children:[t.jsxs("span",{className:"mobile-nav-tab-icon-wrapper",children:[t.jsx(Wa,{}),h>0&&e!=="mailbox"&&t.jsx("span",{className:"status-dot status-dot--pending mobile-nav-chat-unread-dot","aria-label":"Pending approvals"})]}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Mailbox"}),u>0&&t.jsx("span",{className:"mobile-nav-tab-badge",children:No(u)})]}),ye&&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(rs,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"Skills"})]}),me.map(te=>{const Be=Lo(te.pluginId,te.view.viewId),$e=rc(te.view.icon);return t.jsxs("button",{type:"button",className:`mobile-nav-tab${e===Be||e==="graph"&&te.pluginId==="fusion-plugin-dependency-graph"&&te.view.viewId==="graph"?" mobile-nav-tab--active":""}`,"data-testid":`mobile-nav-tab-plugin-${te.pluginId}-${te.view.viewId}`,role:"tab","aria-selected":e===Be||e==="graph"&&te.pluginId==="fusion-plugin-dependency-graph"&&te.view.viewId==="graph",onClick:()=>n(te.pluginId==="fusion-plugin-dependency-graph"&&te.view.viewId==="graph"?"graph":Be),children:[t.jsx($e,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:te.view.label})]},`${te.pluginId}:${te.view.viewId}`)}),t.jsxs("button",{type:"button",className:`mobile-nav-tab${Ne?" mobile-nav-tab--active":""}`,"data-testid":"mobile-nav-tab-more",role:"tab","aria-selected":!1,onClick:()=>E(te=>!te),children:[t.jsx(fu,{}),t.jsx("span",{className:"mobile-nav-tab-label",children:"More"})]})]}),D&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"mobile-more-sheet-backdrop",onClick:Ae}),t.jsxs("div",{className:"mobile-more-sheet",children:[t.jsx("div",{className:"mobile-more-sheet-handle"}),t.jsx("div",{className:"mobile-more-sheet-title",children:"Navigate"}),W?t.jsx("div",{className:"mobile-more-shell-connection","data-testid":"mobile-more-shell-connection",children:W}):null,t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-mailbox",onClick:()=>ae(d),children:[t.jsx(Wa,{}),t.jsx("span",{children:"Mailbox"}),u>0&&t.jsx("span",{className:"mobile-more-item-badge mobile-more-item-badge--unread",children:No(u)}),h>0&&t.jsx("span",{className:"mobile-more-item-badge",children:No(h)})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-activity",onClick:()=>ae(l),children:[t.jsx(Bs,{}),t.jsx("span",{children:"Activity Log"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-system-stats",onClick:()=>ae(c),children:[t.jsx(Pr,{}),t.jsx("span",{children:"System Stats"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-git",onClick:()=>ae(p),children:[t.jsx(Ps,{}),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:()=>ae(b),children:[t.jsx(na,{}),t.jsx("span",{children:"Terminal"})]}),t.jsx("button",{type:"button",className:"mobile-more-split-toggle","data-testid":"mobile-more-terminal-split-toggle",onClick:()=>$(te=>!te),"aria-expanded":P,"aria-haspopup":"menu","aria-label":"Show scripts",children:t.jsx(Vn,{size:14,className:`mobile-more-chevron${P?" mobile-more-chevron--open":""}`})})]}),P&&t.jsx("div",{className:"mobile-more-submenu",role:"menu","aria-label":"Scripts submenu",children:de?t.jsxs("div",{className:"mobile-more-submenu-loading","data-testid":"mobile-more-scripts-loading",children:[t.jsx(_t,{className:"animate-spin"}),t.jsx("span",{children:"Loading scripts…"})]}):Ce.length>0?t.jsxs(t.Fragment,{children:[Ce.map(([te,Be])=>t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem","data-testid":`mobile-more-script-item-${te}`,onClick:()=>{_&&_(te,Be),Ae(),$(!1)},children:[t.jsx(is,{}),t.jsx("span",{children:te})]},te)),v&&t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem mobile-more-subitem--manage","data-testid":"mobile-more-scripts-manage",onClick:()=>{Ae(),$(!1),v()},children:[t.jsx(Ni,{}),t.jsx("span",{children:"Manage Scripts…"})]})]}):v&&t.jsxs("button",{type:"button",className:"mobile-more-item mobile-more-subitem","data-testid":"mobile-more-scripts-manage",onClick:()=>{Ae(),$(!1),v()},children:[t.jsx(Ni,{}),t.jsx("span",{children:"No scripts — add one…"})]})}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-files",onClick:()=>ae(y),children:[t.jsx(ks,{}),t.jsx("span",{children:"Files"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-planning",onClick:()=>ae(X),children:[t.jsx(Bi,{}),t.jsx("span",{children:"Planning"}),R>0&&t.jsx("span",{className:"mobile-more-item-badge",children:No(R)})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-workflow",onClick:()=>ae(g),children:[t.jsx(ec,{}),t.jsx("span",{children:"Workflow Steps"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-schedules",onClick:()=>ae(w),children:[t.jsx(sa,{}),t.jsx("span",{children:"Automation"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-github",onClick:()=>ae(C),children:[t.jsx(jz,{}),t.jsx("span",{children:"Import from GitHub"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-usage",onClick:()=>ae(z),children:[t.jsx(Bs,{}),t.jsx("span",{children:"Usage"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-projects",onClick:()=>ae(Q),children:[t.jsx(Nc,{}),t.jsx("span",{children:"Projects"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-documents",onClick:()=>ae(()=>n("documents")),children:[t.jsx(ja,{}),t.jsx("span",{children:"Documents"})]}),M?.evalsView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-evals",onClick:()=>ae(()=>n("evals")),children:[t.jsx(Ss,{}),t.jsx("span",{children:"Evals"})]}),ee&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-skills",onClick:()=>ae(()=>n("skills")),children:[t.jsx(rs,{}),t.jsx("span",{children:"Skills"})]}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-stash-recovery",onClick:()=>ae(()=>n("stash-recovery")),children:[t.jsx(qa,{}),t.jsx("span",{children:"Stash Recovery"}),f>0?t.jsx("span",{className:"mobile-more-item-badge",children:No(f)}):null]}),M?.researchView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-research",onClick:()=>ae(()=>n("research")),children:[t.jsx(Fi,{}),t.jsx("span",{children:"Research"})]}),M?.insights&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-insights",onClick:()=>ae(()=>n("insights")),children:[t.jsx(cs,{}),t.jsx("span",{children:"Insights"})]}),M?.memoryView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-memory",onClick:()=>ae(()=>n("memory")),children:[t.jsx(Uo,{}),t.jsx("span",{children:"Memory"})]}),M?.devServerView&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-dev-server",onClick:()=>{ae(()=>n("dev-server"))},children:[t.jsx(Pr,{}),t.jsx("span",{children:"Dev Server"})]}),M?.nodesView&&T&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-nodes",onClick:()=>ae(T),children:[t.jsx(bj,{}),t.jsx("span",{children:"Nodes"})]}),ie&&t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-todos",onClick:()=>ae(()=>N?.()),children:[t.jsx(em,{}),t.jsx("span",{children:"Todos"})]}),xe.map(te=>{const Be=Lo(te.pluginId,te.view.viewId),$e=rc(te.view.icon);return t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":`mobile-more-item-plugin-${te.pluginId}-${te.view.viewId}`,onClick:()=>ae(()=>n(te.pluginId==="fusion-plugin-dependency-graph"&&te.view.viewId==="graph"?"graph":Be)),children:[t.jsx($e,{}),t.jsx("span",{children:te.view.label})]},`${te.pluginId}:${te.view.viewId}`)}),t.jsx("div",{className:"mobile-more-separator"}),t.jsxs("button",{type:"button",className:"mobile-more-item","data-testid":"mobile-more-item-settings",onClick:()=>ae(o),children:[t.jsx(Do,{}),t.jsx("span",{children:"Settings"})]})]})]})]})}function Gg(e){return e.trim().toLowerCase().replace(/[\s-]+/g,"_").replace(/_+/g,"_")}function Ay(e,n){const s=n.trim();if(!s)return!0;const a=Gg(s);return Gg(e).includes(a)||e.toLowerCase().includes(s.toLowerCase())}function Sz({agents:e,filter:n,highlightedIndex:s,visible:a,onSelect:r,position:o="below",roomMemberIds:l,roomName:c}){const d=i.useMemo(()=>e.filter(g=>Ay(g.name,n)),[e,n]),u=!!l,h=u&&n.trim().length>0,m=i.useMemo(()=>u?d.filter(g=>l?.has(g.id)):d,[d,l,u]),f=i.useMemo(()=>u?d.filter(g=>!l?.has(g.id)):[],[d,l,u]),p=h?[...m,...f]:m;return a?t.jsx("div",{className:`agent-mention-popup agent-mention-popup--${o}`,"data-testid":"agent-mention-popup",role:"listbox","aria-label":"Agent mention suggestions",children:p.length===0?t.jsx("div",{className:"agent-mention-empty",children:"No agents found"}):t.jsxs(t.Fragment,{children:[u&&t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-members-header",children:c?`Members of #${c}`:"Room members"}),m.map((g,w)=>t.jsxs("button",{type:"button",className:`agent-mention-item${w===s?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${g.id}`,onMouseDown:v=>v.preventDefault(),onClick:()=>r(g),role:"option","aria-selected":w===s,children:[t.jsx(gc,{agent:g,size:20}),u&&t.jsx("span",{className:"status-dot agent-mention-member-dot","aria-label":"Room member"}),t.jsx("span",{className:"agent-mention-name",children:g.name}),t.jsx("span",{className:"agent-mention-role",children:g.role})]},g.id)),u&&!h&&f.length>0&&t.jsx("div",{className:"agent-mention-hint","data-testid":"agent-mention-other-hint",children:"Type to search other agents"}),u&&h&&f.length>0&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"agent-mention-section-header","data-testid":"agent-mention-others-header",children:"Other agents"}),f.map((g,w)=>{const v=m.length+w;return t.jsxs("button",{type:"button",className:`agent-mention-item${v===s?" agent-mention-item--highlighted":""}`,"data-testid":`agent-mention-item-${g.id}`,onMouseDown:b=>b.preventDefault(),onClick:()=>r(g),role:"option","aria-selected":v===s,children:[t.jsx(gc,{agent:g,size:20}),t.jsx("span",{className:"agent-mention-name",children:g.name}),t.jsx("span",{className:"agent-mention-role",children:g.role})]},g.id)})]})]})}):null}function Kg(e){const{sessionId:n,tempUserMessageId:s,setStreamingText:a,setStreamingThinking:r,setStreamingToolCalls:o,cancelStreamingFlushesRef:l,addToast:c,onDone:d,onError:u,onFallbackSession:h}=e;let m="",f="",p=[],g,w=null,v=null;const b=()=>{w=null,a(m)},y=()=>{v=null,r(f)},N=()=>{w!==null&&(cancelAnimationFrame(w),w=null),v!==null&&(cancelAnimationFrame(v),v=null)};return l.current=N,{handlers:{onThinking:C=>{f+=C,v===null&&(v=requestAnimationFrame(y))},onText:C=>{m+=C,w===null&&(w=requestAnimationFrame(b))},onToolStart:C=>{p=[...p,{toolName:C.toolName,args:C.args,isError:!1,status:"running"}],o(p)},onToolEnd:C=>{const x=[...p];for(let k=x.length-1;k>=0;k--){const R=x[k];if(R?.toolName===C.toolName&&R.status==="running"){x[k]={...R,status:"completed",isError:C.isError,result:C.result},p=x,o(x);return}}p=[...x,{toolName:C.toolName,isError:C.isError,result:C.result,status:"completed"}],o(p)},onFallback:C=>{g=C,h?.(C,n),c?.(`Primary model unavailable. Switched to fallback ${C.fallbackModel}.`,"warning")},onDone:C=>{N(),d({messageId:C.messageId,message:C.message,accumulated:{text:m,thinking:f,toolCalls:p,fallbackInfo:g}})},onError:C=>{N(),u(C,s)}},cancelFlushes:N}}let Jg=null,Yg=null;const Cz=["load failed","failed to fetch","networkerror when attempting to fetch resource.","connection aborted","connection closed unexpectedly","network error"];function Ez(e){const n=e.trim().toLowerCase();return n?Cz.some(s=>n.includes(s)):!1}function _z(){const e=i.useRef(Jg),n=i.useRef(Yg),s=i.useRef(new Set);i.useEffect(()=>{if(typeof document>"u")return;let l=document.visibilityState;const c=()=>{const d=Date.now(),u=document.visibilityState;if(u==="hidden"&&(e.current=d,Jg=d),u==="visible"&&(n.current=d,Yg=d,l==="hidden"))for(const h of s.current)h();l=u};return c(),document.addEventListener("visibilitychange",c),()=>document.removeEventListener("visibilitychange",c)},[]);const a=i.useCallback(()=>typeof document<"u"&&document.visibilityState==="hidden",[]),r=i.useCallback((l=5e3)=>{const c=e.current;if(c===null)return!1;const d=Date.now();if(a())return d-c<=l;const u=n.current;return u===null||u<c?!1:d-u<=l},[a]),o=i.useCallback(l=>(s.current.add(l),()=>{s.current.delete(l)}),[]);return i.useMemo(()=>({isHiddenNow:a,wasRecentlyHidden:r,onBecameVisible:o}),[a,o,r])}const _r="__fn_agent__";function Ry(e,n){const s=typeof e=="string"?e.trim():"",a=typeof n=="string"?n.trim():"";return!s||!a?{}:{modelProvider:s,modelId:a}}function Wl(e,n,s){const a=typeof e=="string"?e.trim():"",r=Ry(n,s),o=a||(r.modelProvider&&r.modelId?_r:"");return o?{agentId:o,...r}:null}function Gl(e,n,s){const a=Ry(n,s),r=a.modelProvider??"",o=a.modelId??"";return`${e}::${r}/${o}`}function Qg(e){const n=typeof e=="string"?e.trim():"",s=n.indexOf("/");return!n||s<=0||s>=n.length-1?{}:{modelProvider:n.slice(0,s),modelId:n.slice(s+1)}}function Mz(e){const n=e?.toolCalls;if(!Array.isArray(n))return;const s=n.map(a=>{if(!a||typeof a!="object")return null;const r=a,o=typeof r.toolName=="string"?r.toolName:"";if(!o)return null;const l=r.args;return{toolName:o,...l&&typeof l=="object"?{args:l}:{},isError:!!r.isError,result:r.result,status:"completed"}}).filter(a=>a!==null);return s.length>0?s:void 0}function Az(e){const n=e?.fallback;if(!n||typeof n!="object")return;const s=n,a=typeof s.primaryModel=="string"?s.primaryModel:"",r=typeof s.fallbackModel=="string"?s.fallbackModel:"",o=s.triggerPoint;if(!(!a||!r||o!=="session-creation"&&o!=="prompt-time"))return{primaryModel:a,fallbackModel:r,triggerPoint:o}}function jr(e){return{id:e.id,sessionId:e.sessionId,role:e.role,content:e.content,thinkingOutput:e.thinkingOutput,toolCalls:Mz(e.metadata),fallbackInfo:Az(e.metadata),createdAt:e.createdAt}}function Rz(e,n){const[s,a]=i.useState(null),[r,o]=i.useState([]),[l,c]=i.useState(!1),[d,u]=i.useState([]),[h,m]=i.useState(!1),[f,p]=i.useState(!1),[g,w]=i.useState(""),[v,b]=i.useState(""),[y,N]=i.useState([]),[S,C]=i.useState(""),x=i.useRef(null),k=i.useRef(!1),R=i.useRef(null),z=i.useRef(""),_=i.useRef(f);_.current=f;const A=i.useRef(null),Q=i.useRef(""),H=i.useRef(null),M=i.useRef(s);M.current=s;const T=i.useRef(0),F=3,W=i.useRef(!1);i.useEffect(()=>{z.current=S},[S]);const oe=i.useCallback(async()=>{c(!0);try{const Y=await Th(e);o(Y.sessions)}catch(Y){console.error("[useQuickChat] Failed to refresh sessions:",Y)}finally{c(!1)}},[e]),D=i.useCallback(async Y=>{const me={agentId:Y.agentId};return Y.modelProvider&&Y.modelId&&(me.modelProvider=Y.modelProvider,me.modelId=Y.modelId),(await YC(me,e)).session},[e]),E=i.useCallback(()=>{z.current="",C("")},[]),P=i.useCallback(()=>{const Y=z.current.trim();Y&&(z.current="",C(""),ie.current(Y))},[]),$=i.useCallback((Y,me,B)=>{if(x.current||!Y)return!0;k.current=!1,me&&(w(me.streamingText),b(me.streamingThinking),N(me.toolCalls)),p(!0);const{handlers:xe}=Kg({sessionId:Y,tempUserMessageId:"",setStreamingText:w,setStreamingThinking:b,setStreamingToolCalls:N,cancelStreamingFlushesRef:R,addToast:B?.silent?void 0:n,onFallbackSession:(Ne,te)=>{const Be=Qg(Ne.fallbackModel);o($e=>$e.map(ct=>ct.id===te?{...ct,...Be}:ct)),a($e=>$e&&$e.id===te?{...$e,...Be}:$e)},onDone:()=>{w(""),b(""),N([]),p(!1),_.current=!1,x.current=null,oo(Y,{limit:50},e).then(Ne=>{u(Ne.messages.map(jr))}).catch(()=>{}),P()},onError:Ne=>{w(""),b(""),N([]),p(!1),_.current=!1,x.current=null;const te=typeof Ne=="string"&&Ne.trim()?Ne:"Failed to get response";B?.silent||n?.(te,"error"),oo(Y,{limit:50},e).then(Be=>{u(Be.messages.map(jr))}).catch(()=>{}),P()}});return x.current=eE(Y,xe,e,{...typeof me?.replayFromEventId=="number"?{lastEventId:me.replayFromEventId}:{}}),!0},[n,e,P]),j=i.useCallback(async(Y,me,B)=>{const xe=Wl(Y,me,B);if(!xe)return;const Ne=Gl(xe.agentId,xe.modelProvider,xe.modelId);c(!0);try{const{session:te}=await JC({agentId:xe.agentId,modelProvider:xe.modelProvider,modelId:xe.modelId},e);if(te)a(te),Q.current=Ne,te.isGenerating&&$(te.id,te.inFlightGeneration);else{const Be=await D(xe);a(Be),Q.current=Ne}T.current=0}catch(te){console.error("[useQuickChat] Failed to initialize session:",te),T.current+=1,T.current<=F&&n?.("Failed to initialize chat","error")}finally{c(!1)}},[$,e,n,D]),q=i.useCallback(async()=>{if(s){m(!0);try{const Y=await oo(s.id,{limit:50},e);u(Y.messages.map(jr))}catch(Y){console.error("[useQuickChat] Failed to load messages:",Y)}finally{m(!1)}}},[s,e]);i.useEffect(()=>{s?q():u([])},[s,q]),i.useEffect(()=>{if(!s?.isGenerating||(x.current||$(s.id,s.inFlightGeneration),!_.current||x.current||!s))return;const Y=setInterval(async()=>{if(!_.current||x.current||!s){clearInterval(Y);return}try{if(!(await nd(s.id,e)).session.isGenerating){clearInterval(Y);const B=await oo(s.id,{limit:50},e);u(B.messages.map(jr)),w(""),b(""),N([]),p(!1),_.current=!1,P()}}catch{}},3e3);return()=>clearInterval(Y)},[s,$,e,P]);const de=i.useCallback(async()=>{if(s){m(!0);try{const Y=await oo(s.id,{limit:50},e);u(Y.messages.map(jr))}catch(Y){console.error("[useQuickChat] Failed to reload messages:",Y)}finally{m(!1)}}},[s,e]),be=i.useCallback(()=>{R.current?.(),R.current=null,z.current="",C(""),w(""),b(""),N([]),p(!1)},[]),Ce=i.useCallback(async(Y,me,B)=>{const xe=Wl(Y,me,B);if(!xe)return;const Ne=Gl(xe.agentId,xe.modelProvider,xe.modelId);H.current=xe;const te=Ne===Q.current&&M.current;if(te||(x.current&&(x.current.close(),x.current=null),be()),te){await de();return}a(null),u([]),Q.current=Ne,await j(xe.agentId,xe.modelProvider,xe.modelId)},[j,de,be]),Ae=i.useCallback(async Y=>{const me=Wl(Y.agentId,Y.modelProvider??void 0,Y.modelId??void 0);me&&(H.current=me,Q.current=Gl(me.agentId,me.modelProvider,me.modelId),x.current&&(x.current.close(),x.current=null),be(),a(Y),Y.isGenerating&&$(Y.id,Y.inFlightGeneration))},[$,be]),ae=i.useCallback(async(Y,me)=>{await Ce(_r,Y,me)},[Ce]),X=i.useCallback(async(Y,me,B)=>{const Ne=Wl(Y??"",me,B)??H.current;if(!Ne)return;H.current=Ne;const te=Gl(Ne.agentId,Ne.modelProvider,Ne.modelId);W.current=!0,T.current=0,x.current&&(x.current.close(),x.current=null),be(),u([]),a(null),c(!0);try{const Be=await D(Ne);a(Be),Q.current=te;const $e=await Th(e);o($e.sessions)}catch(Be){console.error("[useQuickChat] Failed to start a fresh session:",Be),n?.("Failed to start a new chat","error")}finally{W.current=!1,c(!1)}},[n,D,e,be]),pe=i.useCallback(()=>{s&&(k.current=!0,R.current?.(),R.current=null,x.current?.close(),x.current=null,QC(s.id,e).catch(()=>{}),p(!1),w(""),b(""),N([]))},[s,e]),ie=i.useRef(()=>Promise.resolve()),ye=_z(),ee=i.useCallback(async Y=>{try{await oe();const B=(await nd(Y,e)).session;M.current?.id===Y&&a(xe=>!xe||xe.id!==Y?xe:{...xe,...B}),B.isGenerating?(w(""),b(""),N([]),p(!0),_.current=!0,$(Y,B.inFlightGeneration,{silent:!0})):(w(""),b(""),N([]),p(!1),_.current=!1,await de())}catch{}},[$,e,oe,de]),L=i.useCallback((Y,me)=>{if(!s||!Y.trim()&&(!me||me.length===0))return Promise.resolve();if(_.current)return me&&me.length>0?Promise.reject(new Error("Cannot send attachments while a response is streaming")):(z.current=Y,C(Y),Promise.resolve());const B=new Promise((xe,Ne)=>{A.current={resolve:xe,reject:Ne},k.current=!1,x.current&&(x.current.close(),x.current=null);const te=`temp-${Date.now()}`,Be={id:te,sessionId:s.id,role:"user",content:Y,createdAt:new Date().toISOString()};u(ct=>[...ct,Be]),w(""),b(""),N([]),p(!0);const{handlers:$e}=Kg({sessionId:s.id,tempUserMessageId:te,setStreamingText:w,setStreamingThinking:b,setStreamingToolCalls:N,cancelStreamingFlushesRef:R,addToast:n,onFallbackSession:(ct,De)=>{const le=Qg(ct.fallbackModel);o(_e=>_e.map(Le=>Le.id===De?{...Le,...le}:Le)),a(_e=>_e&&_e.id===De?{..._e,...le}:_e)},onDone:({messageId:ct,message:De,accumulated:le})=>{const _e=De?jr(De):{id:ct||`msg-${Date.now()}`,sessionId:s.id,role:"assistant",content:le.text,thinkingOutput:le.thinking||void 0,toolCalls:le.toolCalls.length>0?le.toolCalls:void 0,fallbackInfo:le.fallbackInfo,createdAt:new Date().toISOString()};u(Le=>[...Le,_e]),w(""),b(""),N([]),p(!1),_.current=!1,x.current=null,A.current?.resolve(),A.current=null,P()},onError:ct=>{w(""),b(""),N([]),p(!1),_.current=!1,x.current=null,console.error("[useQuickChat] Stream error:",ct);const De=typeof ct=="string"&&ct.trim()?ct:"Failed to get response",le=Ez(De);le?(console.info("[useQuickChat] Suppressed tab-suspension stream error:",ct),s?.id&&(w(""),b(""),N([]),p(!0),_.current=!0,ee(s.id)),A.current?.resolve()):(n?.(De,"error"),A.current?.reject(new Error(De))),A.current=null,k.current||P(),le||de()}});x.current=ZC(s.id,Y,$e,me,e)});return B.catch(()=>{}),B},[s,e,n,de,ee,P]);return ie.current=L,i.useEffect(()=>ye.onBecameVisible(()=>{if(W.current)return;const me=M.current;!me||x.current||Promise.resolve(nd(me.id,e)).then(B=>{if(!(x.current||M.current?.id!==me.id)){if(B.session.isGenerating){w(""),b(""),N([]),p(!0),_.current=!0,$(me.id,B.session.inFlightGeneration,{silent:!0});return}_.current&&(w(""),b(""),N([]),p(!1),_.current=!1,P(),de())}}).catch(()=>{})}),[$,e,de,ye,P]),i.useEffect(()=>()=>{x.current&&(x.current.close(),x.current=null)},[]),i.useMemo(()=>({activeSession:s,sessions:r,sessionsLoading:l,messages:d,messagesLoading:h,isStreaming:f,streamingText:g,streamingThinking:v,streamingToolCalls:y,pendingMessage:S,sendMessage:L,stopStreaming:pe,clearPendingMessage:E,switchSession:Ce,selectSession:Ae,startModelChat:ae,startFreshSession:X,refreshSessions:oe,loadMessages:q,reloadMessages:de,skipNextSessionInitRef:W}),[s,r,l,d,h,f,g,v,y,S,L,pe,E,Ce,Ae,ae,X,oe,q,de])}function Iy(e,n){const[s,a]=i.useState([]),[r,o]=i.useState(null),[l,c]=i.useState(!1),d=i.useCallback(async p=>{c(!0);try{const g=n?.filterState,w=g&&g!=="all"?{state:g}:void 0,v=n?.showSystemAgents??!1,b=await Yr({...w,...p,includeEphemeral:p?.includeEphemeral??v},e),y=Array.from(new Map(b.map(N=>[N.id,N])).values());a(y)}catch(g){console.error("Failed to load agents:",g)}finally{c(!1)}},[e,n?.filterState,n?.showSystemAgents]),u=i.useCallback(async()=>{try{const p=await u1(e);o(p)}catch(p){console.error("Failed to load agent stats:",p)}},[e]);i.useEffect(()=>{d(),u()},[d,u]),i.useEffect(()=>{const p=e?`?projectId=${encodeURIComponent(e)}`:"",g=()=>{d(),u()};return pi(`/api/events${p}`,{events:{"agent:created":g,"agent:updated":g,"agent:deleted":g,"agent:stateChanged":g,"approval:requested":g,"approval:updated":g,"approval:decided":g}})},[e,d,u]);const h=i.useCallback(async()=>{await Promise.all([d(),u()])},[d,u]),m=n?.showSystemAgents??!1,f=s.filter(p=>p.state!=="active"&&p.state!=="running"?!1:m||!_N(p));return{agents:s,activeAgents:f,stats:r,isLoading:l,loadAgents:d,loadStats:u,refreshAgents:h}}function Iz({visible:e,position:n,files:s,selectedIndex:a,onSelect:r,loading:o}){return e?t.jsxs("div",{className:"file-mention-popup",style:{top:n.top,left:n.left},"data-testid":"file-mention-popup",onMouseDown:l=>{l.preventDefault()},children:[o&&t.jsx("div",{className:"file-mention-popup-loading","data-testid":"file-mention-loading",children:t.jsx("span",{className:"spinner"})}),!o&&s.length===0&&t.jsx("div",{className:"file-mention-popup-empty","data-testid":"file-mention-empty",children:"No files found"}),!o&&s.length>0&&t.jsx("ul",{className:"file-mention-popup-list",role:"listbox",children:s.map((l,c)=>{const d=_E(l.path),u=l.name;return t.jsxs("li",{className:`file-mention-popup-item${c===a?" file-mention-popup-item--selected":""}`,onClick:()=>r(l),onMouseEnter:()=>{},role:"option","aria-selected":c===a,"data-testid":`file-mention-item-${c}`,children:[t.jsx("span",{className:"file-mention-popup-icon",children:t.jsx(Rb,{size:14})}),t.jsxs("div",{className:"file-mention-popup-info",children:[t.jsx("span",{className:"file-mention-popup-item-name",children:u}),d&&t.jsx("span",{className:"file-mention-popup-item-path",children:d})]})]},l.path)})})]}):null}const Tz=200;function Pz(e={}){const{projectId:n,workspace:s="project"}=e,[a,r]=i.useState(!1),[o,l]=i.useState(""),[c,d]=i.useState(-1),[u,h]=i.useState([]),[m,f]=i.useState(!1),[p,g]=i.useState(0),w=i.useRef(null),v=i.useRef(null);i.useEffect(()=>()=>{w.current&&clearTimeout(w.current),v.current?.abort()},[]);const b=i.useCallback((x,k)=>{if(k<0||k>x.length){r(!1);return}const R=z=>/[a-zA-Z0-9/_.-]/.test(z);for(let z=k-1;z>=0;z--){if(x[z]==="#")if(z===0){const _=x.slice(z+1,k);d(z),l(_),g(0),r(!0);return}else{const _=x[z-1];if(/[\s,.;:!?'"()[\]{}]/.test(_)){const A=x.slice(z+1,k);d(z),l(A),g(0),r(!0);return}r(!1);return}if(!R(x[z])){r(!1);return}}r(!1)},[]),y=i.useCallback(()=>{r(!1),l(""),d(-1),h([]),g(0),f(!1)},[]),N=i.useCallback(async x=>{if(!x.trim()){h([]),f(!1);return}v.current?.abort(),v.current=new AbortController;try{f(!0);const k=await g0(x,s,n);h(k.files),g(0)}catch(k){k.name!=="AbortError"&&h([])}finally{f(!1)}},[s,n]);i.useEffect(()=>{if(a)return w.current&&clearTimeout(w.current),w.current=setTimeout(()=>{N(o)},Tz),()=>{w.current&&clearTimeout(w.current)}},[o,a,N]);const S=i.useCallback((x,k)=>{if(!a||c<0)return k;const R=k.slice(0,c),z=k.slice(c+1),_=z.match(/[\s]|$/),A=_?_.index:z.length,Q=z.slice(A);return`${R}#${x.path}${Q}`},[a,c]),C=i.useCallback((x,k)=>{if(!a||u.length===0)return!1;switch(x.key){case"ArrowDown":return x.preventDefault(),g(R=>Math.min(R+1,u.length-1)),!0;case"ArrowUp":return x.preventDefault(),g(R=>Math.max(R-1,0)),!0;case"Enter":case"Tab":return u[p]?(x.preventDefault(),!0):!1;case"Escape":return x.preventDefault(),y(),!0;default:return!1}},[a,u,p,y]);return{mentionActive:a,files:u,loading:m,mentionQuery:o,selectedIndex:p,setSelectedIndex:g,detectMention:b,selectFile:S,dismissMention:y,handleKeyDown:C}}function $z(e){return`${e.name?.trim()||e.id} (${e.role})`}function So(e){const n=e.trim(),s=n.indexOf("/");return!n||s<=0||s>=n.length-1?null:{modelProvider:n.slice(0,s),modelId:n.slice(s+1)}}function Dz(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 Lz(e){return Math.max(40,Math.min(e,320))}function Xl(e,n){return e.length<=n?e:`${e.slice(0,n)}…`}function Oz(e){if(!e)return null;const n=Object.entries(e);return n.length===0?null:n.map(([s,a])=>{const r=typeof a=="string"?a:(()=>{try{return JSON.stringify(a)}catch{return String(a)}})();return`${s}=${Xl(r,50)}`}).join(", ")}function Fz(e){if(e===void 0)return null;if(typeof e=="string")return Xl(e,200);try{return Xl(JSON.stringify(e),200)}catch{return Xl(String(e),200)}}function Ty(e,n=!1){if(!e||e.length===0)return null;const s=(f,p)=>{const g=f.status==="running",w=f.status==="completed"&&f.isError,v=Oz(f.args),b=Fz(f.result),y=g?v:b?`result: ${b}`:v?`args: ${v}`:null,N=n?null:y,S=g?"running":w?"error":"completed";return t.jsxs("details",{className:`chat-tool-call${g?" chat-tool-call--running":""}${w?" chat-tool-call--error":""}`,open:g,children:[t.jsxs("summary",{children:[t.jsx("span",{className:"chat-tool-call-status-dot","aria-hidden":"true"}),t.jsx("span",{className:"chat-tool-call-name",title:f.toolName,children:f.toolName}),N&&t.jsx("span",{className:"chat-tool-call-preview",title:N,children:N}),t.jsx("span",{className:"chat-tool-call-status-text",children:S})]}),t.jsxs("div",{className:"chat-tool-call-content",children:[v&&t.jsxs("div",{className:"chat-tool-call-row",children:[t.jsx("span",{className:"chat-tool-call-label",children:"args"}),t.jsx("span",{className:"chat-tool-call-value",children:v})]}),b&&t.jsxs("div",{className:`chat-tool-call-row${w?" chat-tool-call-row--error":""}`,children:[t.jsx("span",{className:"chat-tool-call-label",children:"result"}),t.jsx("span",{className:"chat-tool-call-value",children:b})]})]})]},`${f.toolName}-${p}`)},a=`chat-tool-calls${n?" chat-tool-calls--compact":""}`;if(e.length===1)return t.jsxs("div",{className:a,"data-testid":"chat-tool-calls",children:[t.jsxs("div",{className:"chat-tool-calls-header",children:[t.jsx(rh,{size:12,"aria-hidden":"true"}),t.jsx("span",{children:"Tool calls"})]}),s(e[0],0)]});const r=e.filter(f=>f.status==="running").length,o=e.filter(f=>f.status==="completed"&&f.isError).length,l=r>0,c=Array.from(new Set(e.map(f=>f.toolName))),d=c.slice(0,5),u=Math.max(0,c.length-d.length),h=u>0?`${d.join(", ")}, +${u} more`:d.join(", "),m=l?`(${r} running)`:o>0?`(${o} ${o===1?"error":"errors"})`:null;return t.jsx("div",{className:a,"data-testid":"chat-tool-calls",children:t.jsxs("details",{className:`chat-tool-calls-group${n?" chat-tool-calls-group--compact":""}`,"data-testid":"chat-tool-calls-group",open:l,children:[t.jsxs("summary",{className:"chat-tool-calls-group-summary",children:[t.jsx(rh,{size:12,"aria-hidden":"true"}),t.jsxs("span",{className:"chat-tool-calls-count",children:[e.length," tool calls"]}),t.jsx("span",{className:"chat-tool-calls-names",title:h,children:h}),m&&t.jsx("span",{className:"chat-tool-calls-group-status",children:m})]}),e.map((f,p)=>s(f,p))]})})}const Py={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 Xg(e){const n=/(^|[\s])\/([^\s]*)$/.exec(e);if(!n)return null;const s=n[1]??"",a=n[2]??"",r=n.index+s.length;return{filter:a,start:r,end:e.length}}function zz(e,n){const s=e.slice(0,n),a=/(^|[\s])@([\w-]*)$/.exec(s);if(!a)return null;const r=a[2]??"",o=s.length-r.length-1;return{filter:r,start:o,end:n}}const Kl={width:320,height:400},Bz=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"]),Uz=[".png",".jpg",".jpeg",".gif",".webp",".txt",".json",".yaml",".yml",".log",".csv",".xml",".md"];function Hz(e){return e.type.startsWith("image/")}function qz(e){if(Bz.has(e.type))return!0;const n=e.name.toLowerCase();return Uz.some(s=>n.endsWith(s))}const Nr={width:280,height:260},Is=768,Sr=8;function Vz(e,n){const s=i.useCallback(()=>{if(typeof window>"u")return 0;const S=getComputedStyle(document.documentElement).getPropertyValue("--executor-footer-height").trim();return S&&parseFloat(S)||0},[]),a=i.useCallback(()=>typeof window<"u"&&window.innerWidth<=768?{x:4,y:4+s()}:{x:24,y:24+s()},[s]),[r,o]=i.useState(()=>{if(typeof window>"u")return a();const S=`fusion-quick-chat-position-${e||"default"}`;try{const C=localStorage.getItem(S);if(C){const x=JSON.parse(C);if(typeof x.x=="number"&&typeof x.y=="number"&&!isNaN(x.x)&&!isNaN(x.y))return x}}catch{}return a()}),[l,c]=i.useState(!1),d=i.useRef(null),u=i.useRef(r),h=i.useRef(null),m=i.useRef(null),f=n??i.useRef(!1);i.useEffect(()=>{u.current=r},[r]);const p=i.useCallback(S=>{if(typeof window>"u")return S;const C=48,x=window.innerWidth<=768?4:8,k=window.innerWidth<=768?44:0,R=window.innerWidth>768?s():0,z=window.innerWidth-C-x,_=window.innerHeight-C-x-k-R;return{x:Math.max(x,Math.min(z,S.x)),y:Math.max(x,Math.min(_,S.y))}},[s]),g=i.useCallback(S=>{if(typeof window>"u")return;const C=`fusion-quick-chat-position-${e||"default"}`;try{localStorage.setItem(C,JSON.stringify(S))}catch{}},[e]),w=i.useCallback(()=>{if(!d.current)return;const S=m.current,C=h.current;S&&C!==null&&typeof S.releasePointerCapture=="function"&&S.releasePointerCapture(C),d.current=null,h.current=null,m.current=null,c(!1),document.body.style.userSelect="",f.current&&g(u.current),document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",b),document.removeEventListener("pointercancel",y)},[g]),v=i.useCallback(S=>{if(!d.current||h.current!==null&&S.pointerId!==h.current)return;const C=S.clientX-d.current.pointerX,x=S.clientY-d.current.pointerY;if((Math.abs(C)>=5||Math.abs(x)>=5)&&(f.current=!0),!f.current)return;const k=d.current.x-C,R=d.current.y-x,z=p({x:k,y:R});u.current=z,o(z)},[p]),b=i.useCallback(S=>{h.current!==null&&S.pointerId!==h.current||w()},[w]),y=i.useCallback(S=>{h.current!==null&&S.pointerId!==h.current||w()},[w]),N=i.useCallback(S=>{if(S.button!==0&&S.pointerType==="mouse")return;const C=S.currentTarget;S.preventDefault(),typeof C.setPointerCapture=="function"&&C.setPointerCapture(S.pointerId);const x=u.current;d.current={x:x.x,y:x.y,pointerX:S.clientX,pointerY:S.clientY},h.current=S.pointerId,m.current=C,f.current=!1,c(!0),document.body.style.userSelect="none",document.addEventListener("pointermove",v,{passive:!0}),document.addEventListener("pointerup",b),document.addEventListener("pointercancel",y)},[y,v,b]);return i.useEffect(()=>()=>{document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",b),document.removeEventListener("pointercancel",y),document.body.style.userSelect=""},[y,v,b]),{position:r,isDragging:l,handlePointerDown:N}}function Wz(e,n,s){const a=`fusion:quick-chat-size-${e||"default"}`,r=i.useCallback(()=>typeof window<"u"&&window.innerWidth>Is,[]),o=i.useCallback((f,p,g)=>{if(typeof window>"u")return f;const w=Math.max(Nr.width,window.innerWidth-p-Sr),v=Math.max(Nr.height,window.innerHeight-g-Sr);return{width:Math.max(Nr.width,Math.min(w,f.width)),height:Math.max(Nr.height,Math.min(v,f.height))}},[]),l=i.useCallback(()=>{if(typeof window>"u"||window.innerWidth<=Is)return Kl;try{const f=localStorage.getItem(a);if(!f)return Kl;const p=JSON.parse(f);return typeof p.width!="number"||typeof p.height!="number"?Kl:{width:p.width,height:p.height}}catch{return Kl}},[a]),[c,d]=i.useState(l),[u,h]=i.useState({right:0,bottom:0});i.useEffect(()=>{if(!r())return;const f={right:n+u.right,bottom:s+u.bottom};d(p=>o(p,f.right,f.bottom))},[o,r,n,s,u]),i.useEffect(()=>{if(r())try{localStorage.setItem(a,JSON.stringify(c))}catch{}},[r,c,a]);const m=i.useCallback(f=>{if(!r())return;const p=f.currentTarget.dataset.resizeDirection;if(!p)return;f.preventDefault(),f.stopPropagation();const g=f.currentTarget;typeof g.setPointerCapture=="function"&&g.setPointerCapture(f.pointerId);const w={pointerX:f.clientX,pointerY:f.clientY,width:c.width,height:c.height,anchorRight:u.right,anchorBottom:u.bottom};document.body.style.userSelect="none";const v=y=>{const N=y.clientX-w.pointerX,S=y.clientY-w.pointerY;let C=w.width,x=w.height,k=w.anchorRight,R=w.anchorBottom;if(p.includes("w")&&(C=w.width-N),p.includes("e")){const M=N;C=w.width+M,k=w.anchorRight-M}if(p.includes("n")&&(x=w.height-S),p.includes("s")){const M=S;x=w.height+M,R=w.anchorBottom-M}const z=n+k,_=s+R,A=o({width:C,height:x},z,_),Q=Math.max(Sr-n,Math.min(window.innerWidth-n-Nr.width-Sr,k)),H=Math.max(Sr-s,Math.min(window.innerHeight-s-Nr.height-Sr,R));d(A),h({right:Q,bottom:H})},b=y=>{typeof g.releasePointerCapture=="function"&&g.releasePointerCapture(y.pointerId),document.body.style.userSelect="",document.removeEventListener("pointermove",v),document.removeEventListener("pointerup",b);try{localStorage.setItem(a,JSON.stringify({width:c.width,height:c.height}))}catch{}};document.addEventListener("pointermove",v),document.addEventListener("pointerup",b)},[u.bottom,u.right,o,s,n,r,c.height,c.width,a]);return{panelSize:c,anchorOffset:u,handleResizeStart:m}}const Zg=i.memo(function({message:n,forcePlain:s,mentionAgentsByName:a,roomContext:r,onToggleRender:o}){const l=n.role==="user",c=i.useMemo(()=>{if(!l)return null;const u=n.content,h=/@([\w-]+)/g,m=[];let f=0,p=h.exec(u);for(;p;){const[g,w=""]=p,v=p.index;v>f&&m.push(u.slice(f,v));const b=w.replace(/_/g," ").toLowerCase(),y=a.get(b);if(y){const N=!!(r&&!r.memberIds.has(y.id)),S=N?`Not a member of ${r?.roomName}`:void 0;m.push(t.jsxs("span",{className:`chat-mention-chip${N?" chat-mention-chip--non-member":""}`,title:S,"aria-label":S,children:["@",y.name.replace(/\s+/g,"_")]},`${y.id}-${v}`))}else m.push(g);f=v+g.length,p=h.exec(u)}return f<u.length&&m.push(u.slice(f)),m.length===0?u:m},[l,n.content,a,r]),d=i.useMemo(()=>l?null:s?t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--plain",children:n.content}):t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--markdown",children:t.jsx(ei,{remarkPlugins:[ti],components:Py,children:n.content})}),[l,s,n.content]);return t.jsxs("div",{className:`quick-chat-panel-message ${l?"quick-chat-panel-message--sent":"quick-chat-panel-message--received"}`,"data-testid":`quick-chat-message-${n.id}`,children:[l?t.jsx("p",{children:c}):t.jsxs(t.Fragment,{children:[d,t.jsx("button",{type:"button",className:`quick-chat-message-render-toggle${s?" quick-chat-message-render-toggle--plain":""}`,"data-testid":"quick-chat-message-render-toggle","aria-label":s?"Show rendered markdown":"Show plain text",onClick:()=>o(n.id),children:s?t.jsx(Zu,{size:14}):t.jsx(Gr,{size:14})})]}),Ty(n.toolCalls,!0)]})});function Gz({projectId:e,addToast:n,showFAB:s=!0,open:a,onOpenChange:r,favoriteProviders:o=[],favoriteModels:l=[],onToggleFavorite:c,onToggleModelFavorite:d,roomContext:u=null}){const{agents:h}=Iy(e),[m,f]=i.useState(!1),p=a!==void 0,g=p?a:m,w=p?ne=>{r?.(typeof ne=="function"?ne(g):ne)}:f,{keyboardOpen:v}=oa({enabled:g}),b=si(),y=b==="mobile",[N,S]=i.useState("agent"),[C,x]=i.useState(""),[k,R]=i.useState(!1),[z,_]=i.useState("model"),[A,Q]=i.useState(""),[H,M]=i.useState(""),[T,F]=i.useState([]),[W,oe]=i.useState(!1),[D,E]=i.useState(""),[P,$]=i.useState(""),[j,q]=i.useState(""),[de,be]=i.useState([]),[Ce,Ae]=i.useState(!1),[ae,X]=i.useState(!1),[pe,ie]=i.useState(""),[ye,ee]=i.useState(0),[L,Y]=i.useState(""),[me,B]=i.useState(!1),[xe,Ne]=i.useState(0),[te,Be]=i.useState(-1),[$e,ct]=i.useState(()=>new Set),[De,le]=i.useState(!1),[_e,Le]=i.useState([]),[mt,Ve]=i.useState(!1),[ge,he]=i.useState(!1),[,Pe]=i.useState(!1),[dt,jt]=i.useState({top:0,left:0}),nt=Pz({projectId:e}),xt=i.useCallback(ne=>{if(!ne||!nt.mentionActive)return;const Fe=ne.getBoundingClientRect();jt({top:Fe.top-260,left:Fe.left+8})},[nt.mentionActive]),Ie=i.useRef(!1),Qe=i.useRef(!1),ot=i.useRef(!1),Tt=i.useRef(""),Mt=i.useRef(!1),We=i.useRef(!1),J=i.useRef(C),ke=i.useRef(D),lt=i.useRef(0),ve=i.useRef(null),st=i.useRef(null),Ue=i.useRef(0),{position:fe,isDragging:Xe,handlePointerDown:vt}=Vz(e,Ie),St=fe.y+60,{panelSize:Et,anchorOffset:Pt,handleResizeStart:Jt}=Wz(e,fe.x,St),dn=typeof window<"u"&&window.innerWidth>Is,{activeSession:Vt,messages:ln,isStreaming:fn,streamingText:_n,streamingThinking:an,streamingToolCalls:Dn,sessions:vn,sessionsLoading:Ut,messagesLoading:rn,sendMessage:bn,stopStreaming:en,pendingMessage:Yt,clearPendingMessage:tn,switchSession:Qt,selectSession:Kt,startModelChat:xn,startFreshSession:un,refreshSessions:pn,skipNextSessionInitRef:$t}=Rz(e,n),ue=i.useRef(null),Re=i.useRef(null),et=i.useRef(null),at=i.useRef(null),Je=i.useRef(null),Nt=i.useRef([]),bt=i.useRef(!1),At=i.useRef(!1),se=i.useRef(!1),re=i.useRef(null),Ge=i.useRef(!1),Ct=i.useRef(!1),Gt=i.useRef({isOpen:!1,sessionId:null});i.useEffect(()=>{if(!g||typeof window>"u"||typeof document>"u"||window.innerWidth>Is)return;const ne=window.scrollY,Fe=document.documentElement,qe=document.body,Bt={htmlOverflow:Fe.style.overflow,bodyOverflow:qe.style.overflow};return window.scrollTo(0,0),Fe.style.overflow="hidden",qe.style.overflow="hidden",()=>{Fe.style.overflow=Bt.htmlOverflow,qe.style.overflow=Bt.bodyOverflow,window.scrollTo(0,ne)}},[g]),i.useLayoutEffect(()=>{if(!g||typeof window>"u"||!window.visualViewport)return;const ne=ue.current;if(!ne)return;const Fe=window.visualViewport,qe=()=>{Ge.current||(ne.style.setProperty("--vv-height",`${Fe.height}px`),ne.style.setProperty("--vv-offset-top",`${Fe.offsetTop||0}px`))};return qe(),Fe.addEventListener("resize",qe),Fe.addEventListener("scroll",qe),()=>{Fe.removeEventListener("resize",qe),Fe.removeEventListener("scroll",qe)}},[g]);const cn=D||P,jn=i.useMemo(()=>So(cn),[cn]),Ln=i.useMemo(()=>N==="model"&&Vt?.modelProvider&&Vt?.modelId?`${Vt.modelProvider}/${Vt.modelId}`:cn,[Vt?.modelId,Vt?.modelProvider,N,cn]),mn=i.useMemo(()=>So(Ln),[Ln]),Un=i.useMemo(()=>T.find(ne=>`${ne.provider}/${ne.id}`===Ln)??null,[Ln,T]),ce=i.useMemo(()=>Dz(Un,mn),[Un,mn]),it=i.useMemo(()=>N==="model"?jn?`${_r}::${jn.modelProvider}/${jn.modelId}`:"":C?`${C}::`:"",[N,C,jn]),wt=!(N==="agent"?!!C:!!jn)||!Vt,G=i.useMemo(()=>!!C&&vn.some(ne=>!ne.modelProvider&&!ne.modelId&&ne.agentId===C),[C,vn]);i.useEffect(()=>{J.current=C},[C]),i.useEffect(()=>{ke.current=D},[D]),i.useEffect(()=>{if(h.length===0){x(""),S("model");return}if(Mt.current&&G)return;h.some(Fe=>Fe.id===C)||x(h[0]?.id??"")},[h,G,C]),i.useEffect(()=>{!g||Qe.current||(Qe.current=!0,ot.current=!1,oe(!0),Hs().then(ne=>{const Fe=ne.models??[];if(F(Fe),ke.current||Fe.length===0)return;const qe=ne.defaultProvider,Bt=ne.defaultModelId;if(qe&&Bt){const An=`${qe}/${Bt}`;if(Fe.some(Hn=>`${Hn.provider}/${Hn.id}`===An)){$(An),ke.current||E(An),Mt.current||S("model");return}}$("");const nn=Fe[0];nn&&!ke.current&&E(`${nn.provider}/${nn.id}`)}).catch(ne=>{console.error("[QuickChatFAB] Failed to load models:",ne),F([]),$("")}).finally(()=>{ot.current=!0,oe(!1)}))},[g,h.length,D]),i.useEffect(()=>{!g||!e||(Ae(!0),KC(e).then(ne=>{be(ne)}).catch(()=>{be([])}).finally(()=>{Ae(!1)}))},[g,e]),i.useEffect(()=>{g&&pn()},[g,pn]),i.useEffect(()=>{if(!g||Ut||Mt.current||vn.length===0)return;const ne=vn.filter(Bt=>Bt.status!=="archived"),Fe=Bt=>{if(!Bt)return 0;const nn=Date.parse(Bt);return Number.isFinite(nn)?nn:0},qe=[...ne].sort((Bt,nn)=>{const An=Math.max(Fe(Bt.lastMessageAt),Fe(Bt.updatedAt));return Math.max(Fe(nn.lastMessageAt),Fe(nn.updatedAt))-An})[0];qe?(qe.modelProvider&&qe.modelId?(S("model"),E(`${qe.modelProvider}/${qe.modelId}`)):(S("agent"),x(qe.agentId)),We.current=!0,Kt(qe)):We.current=!1,Mt.current=!0},[g,Kt,vn,Ut]),i.useEffect(()=>{if(!g){Tt.current="";return}if(!Mt.current&&vn.length===0&&Qe.current&&!ot.current)return;if(!it){Tt.current="";return}if($t.current){Tt.current=it;return}const Fe=it===Tt.current&&!Vt&&!Ut;if(We.current){We.current=!1,Tt.current=it;return}if(!(it===Tt.current&&!Fe)){if(Tt.current=it,N==="model"&&jn){xn(jn.modelProvider,jn.modelId);return}N==="agent"&&C&&Qt(C)}},[g,N,jn,C,it,Vt,Ut,xn,Qt,$t]),i.useEffect(()=>{g||(Mt.current=!1,We.current=!1,B(!1),Y(""),Be(-1),X(!1),ie(""),ee(0),Nt.current.forEach(ne=>{ne.previewUrl&&URL.revokeObjectURL(ne.previewUrl)}),Le([]))},[g]),i.useEffect(()=>{Nt.current=_e},[_e]),i.useEffect(()=>{if(!g){bt.current=!1;return}typeof window>"u"||(bt.current=window.innerWidth<=Is)},[g]),i.useEffect(()=>{if(!g||wt||!bt.current)return;const ne=at.current;if(!ne)return;const Fe=document.activeElement,qe=Fe?ue.current?.contains(Fe):!1,Bt=Fe===document.body,nn=Fe===re.current;if(!qe&&!Bt&&!nn){bt.current=!1;return}if(nn){ne.focus({preventScroll:!0}),bt.current=!1;return}const An=requestAnimationFrame(()=>{ne.focus(),bt.current=!1});return()=>cancelAnimationFrame(An)},[g,wt]),i.useEffect(()=>()=>{Nt.current.forEach(ne=>{ne.previewUrl&&URL.revokeObjectURL(ne.previewUrl)})},[]);const ze=i.useCallback(()=>{R(!0),_("model"),Q(h[0]?.id??""),M(D||P||"")},[h,P,D]),Ht=i.useMemo(()=>h.find(ne=>ne.id===C)??null,[h,C]),gn=i.useMemo(()=>{const ne=pe.trim().toLowerCase();return(ne?de.filter(qe=>qe.name.toLowerCase().includes(ne)):de).slice(0,10)},[de,pe]),Mn=i.useMemo(()=>{const ne=h.filter(Bt=>Ay(Bt.name,L));if(!u)return ne;const Fe=ne.filter(Bt=>u.memberIds.has(Bt.id));if(L.trim().length===0)return Fe;const qe=ne.filter(Bt=>!u.memberIds.has(Bt.id));return[...Fe,...qe]},[h,L,u]),je=i.useMemo(()=>{const ne=new Map;for(const Fe of h)ne.set(Fe.name.toLowerCase(),Fe);return ne},[h]);i.useEffect(()=>{ee(0)},[gn]),i.useEffect(()=>{Ne(0)},[L,me]),i.useEffect(()=>()=>{ve.current!==null&&(window.clearTimeout(ve.current),ve.current=null),st.current!==null&&(window.clearTimeout(st.current),st.current=null)},[]),i.useEffect(()=>{if(!g)return;const ne=qe=>{const Bt=qe.target;ue.current?.contains(Bt)||Re.current?.contains(Bt)||Bt.closest(".model-combobox-dropdown--portal")||w(!1)},Fe=qe=>{qe.key==="Escape"&&w(!1)};return document.addEventListener("mousedown",ne),document.addEventListener("keydown",Fe),()=>{document.removeEventListener("mousedown",ne),document.removeEventListener("keydown",Fe)}},[g,w]);const pt=i.useCallback(()=>{const ne=et.current;if(!ne)return;const qe=ne.scrollTop+ne.clientHeight>=ne.scrollHeight-50;he(!qe),Ct.current=!qe},[]),Dt=i.useCallback(ne=>{if(!ne.isConnected)return;let Fe=0,qe=0,Bt=-1;const nn=6,An=()=>{if(ne.isConnected){if(ne.scrollTop=ne.scrollHeight,ne.scrollHeight===Bt?qe+=1:(qe=0,Bt=ne.scrollHeight),Fe+=1,Fe>=nn||qe>=2){he(!1),Ct.current=!1;return}window.requestAnimationFrame(An)}};An()},[]),Zt=i.useCallback(()=>{const ne=et.current;ne&&Dt(ne)},[Dt]);i.useLayoutEffect(()=>{const ne=Vt?.id??null,Fe=Gt.current;if(Gt.current={isOpen:g,sessionId:ne},!g||!ne)return;const qe=!Fe.isOpen&&g,Bt=Fe.isOpen&&Fe.sessionId!==ne;if(!qe&&!Bt)return;const nn=et.current;nn&&Dt(nn)},[g,Vt?.id,Dt]),i.useEffect(()=>{if(!y||!g||!Vt)return;const ne=()=>{const qe=et.current;qe&&Dt(qe)},Fe=()=>{document.visibilityState==="visible"&&ne()};return document.addEventListener("visibilitychange",Fe),window.addEventListener("pageshow",ne),()=>{document.removeEventListener("visibilitychange",Fe),window.removeEventListener("pageshow",ne)}},[y,g,Vt,Dt]),i.useEffect(()=>{g&&(Ct.current||Zt())},[ln,_n,an,fn,g,Zt]);const Nn=i.useMemo(()=>{const ne=new Map(h.map(qe=>[qe.id,qe.name?.trim()||qe.id])),Fe=new Map(T.map(qe=>[`${qe.provider}/${qe.id}`,qe.name?.trim()||""]));return vn.map((qe,Bt)=>{const nn=qe.title?.trim()||`Session ${Bt+1}`;let An=null;if(qe.agentId&&qe.agentId!==_r)An=ne.get(qe.agentId)||qe.agentId;else if(qe.modelProvider&&qe.modelId){const es=`${qe.modelProvider}/${qe.modelId}`,Hn=Fe.get(es);An=Hn?`${Hn} [${es}]`:es}return{id:qe.id,label:An?`${nn} — ${An}`:nn}})},[h,T,vn]),Xt=i.useMemo(()=>N==="agent"?Ht?`Message ${Ht.name||Ht.id}`:"Select an agent to start chatting":ce?`Message ${ce}`:"Select a model to start chatting",[N,Ht,ce]),qt=i.useCallback(ne=>{const Fe=vn.find(qe=>qe.id===ne);Fe&&(Mt.current=!0,Fe.modelProvider&&Fe.modelId?(S("model"),E(`${Fe.modelProvider}/${Fe.modelId}`)):(S("agent"),x(Fe.agentId)),Kt(Fe))},[Kt,vn]),Ot=i.useCallback(async()=>{if(!Ut){if(Mt.current=!0,z==="agent"){if(!A)return;S("agent"),x(A),await un(A)}else{const ne=So(H||D||P);if(!ne)return;S("model"),E(`${ne.modelProvider}/${ne.modelId}`),await un(_r,ne.modelProvider,ne.modelId)}await pn(),R(!1),_("model")}},[P,A,z,H,pn,D,Ut,un]),qn=Yt.length>50?`${Yt.slice(0,50)}…`:Yt,On=i.useCallback(ne=>{if(!ne||ne.length===0)return;const Fe=[];for(let qe=0;qe<ne.length;qe+=1){const Bt=ne[qe];qz(Bt)&&Fe.push({file:Bt,previewUrl:Hz(Bt)?URL.createObjectURL(Bt):""})}Fe.length>0&&Le(qe=>[...qe,...Fe])},[]),os=i.useCallback(ne=>{Le(Fe=>{const qe=Fe[ne];return qe?.previewUrl&&URL.revokeObjectURL(qe.previewUrl),Fe.filter((Bt,nn)=>nn!==ne)})},[]),xs=i.useCallback(ne=>{On(ne.clipboardData?.files)},[On]),ms=i.useCallback(()=>{if(typeof window>"u"||window.innerWidth>Is)return;const ne=at.current;!ne||ne.disabled||ne.focus({preventScroll:!0})},[]),vs=i.useCallback(()=>{typeof window>"u"||window.innerWidth>Is||(se.current=!0)},[]),as=i.useCallback(async()=>{const ne=j.trim(),Fe=Nt.current;if(!(!ne&&Fe.length===0)&&!wt){if(q(""),B(!1),Y(""),Be(-1),ne==="/help"){le(!0),ms(),se.current=!1;return}if(ne==="/clear"||ne==="/new"){en(),tn(),Fe.forEach(qe=>{qe.previewUrl&&URL.revokeObjectURL(qe.previewUrl)}),Le(qe=>qe.filter(Bt=>!Fe.includes(Bt)));try{if(N==="model"){const qe=So(cn);if(!qe)return;await un(_r,qe.modelProvider,qe.modelId)}else C&&await un(C)}catch{n("Failed to clear conversation","error")}finally{ms(),se.current=!1}return}try{le(!1),await bn(ne,Fe.map(qe=>qe.file)),Fe.forEach(qe=>{qe.previewUrl&&URL.revokeObjectURL(qe.previewUrl)}),Le(qe=>qe.filter(Bt=>!Fe.includes(Bt)))}catch{}finally{ms(),se.current=!1}}},[n,N,tn,ms,wt,j,cn,C,bn,un,en]),Tn=i.useCallback(ne=>{ne.preventDefault(),Ue.current+=1,Ve(!0)},[]),ys=i.useCallback(ne=>{ne.preventDefault(),ne.dataTransfer.dropEffect="copy",Ve(!0)},[]),Ls=i.useCallback(ne=>{ne.preventDefault(),Ue.current=Math.max(0,Ue.current-1),Ue.current===0&&Ve(!1)},[]),_s=i.useCallback(ne=>{ne.preventDefault(),Ue.current=0,Ve(!1),On(ne.dataTransfer?.files)},[On]),Z=i.useCallback((ne,Fe)=>{const qe=zz(ne,Fe);if(qe){B(!0),Y(qe.filter),Be(qe.start);return}B(!1),Y(""),Be(-1)},[]),Ee=i.useCallback((ne=at.current)=>{ne&&(ne.style.height="auto",ne.style.height=`${Lz(ne.scrollHeight)}px`)},[]),gt=i.useCallback(ne=>{q(Fe=>{const qe=Xg(Fe);if(!qe)return Fe;const Bt=`/skill:${ne.name} `,nn=Fe.slice(0,qe.start)+Bt+Fe.slice(qe.end);return window.requestAnimationFrame(()=>{at.current&&(Ee(at.current),at.current.focus())}),nn}),X(!1),ie(""),ee(0)},[Ee]),zt=i.useCallback(ne=>{const Fe=at.current;if(!Fe||te<0)return;const qe=Fe.selectionStart??lt.current,Bt=Fe.selectionEnd??qe,nn=Math.max(qe,Bt),An=Math.min(te,nn),Hn=`${`@${ne.name.replace(/\s+/g,"_")}`} `,Zn=j.slice(0,An)+Hn+j.slice(nn),ls=An+Hn.length;q(Zn),B(!1),Y(""),Ne(0),Be(-1),window.requestAnimationFrame(()=>{at.current&&(Ee(at.current),at.current.focus(),at.current.setSelectionRange(ls,ls))})},[te,j,Ee]),O=i.useCallback(ne=>{const Fe=ne.target.value,qe=ne.target.selectionStart??Fe.length;Ee(ne.target),lt.current=qe,q(Fe),De&&Fe.trim().length>0&&le(!1),Z(Fe,qe);const Bt=Xg(Fe);Bt?(X(!0),ie(Bt.filter)):(X(!1),ie("")),nt.detectMention(Fe,qe),Pe(nt.mentionActive),nt.mentionActive&&xt(ne.target)},[nt,De,Ee,xt,Z]);i.useLayoutEffect(()=>{Ee()},[j,Ee]);const He=i.useCallback(()=>{if(se.current){window.requestAnimationFrame(()=>{ms()});return}typeof window<"u"&&window.innerWidth<=Is&&ue.current&&(Ge.current=!0,ue.current.style.removeProperty("--vv-height"),ue.current.style.removeProperty("--vv-offset-top"),window.setTimeout(()=>{Ge.current=!1},450)),ve.current!==null&&window.clearTimeout(ve.current),ve.current=window.setTimeout(()=>{B(!1),Y(""),Be(-1),Pe(!1),nt.dismissMention(),ve.current=null},120),st.current!==null&&window.clearTimeout(st.current),st.current=window.setTimeout(()=>{X(!1),st.current=null},120)},[nt,ms]),Ze=i.useCallback(()=>{Ge.current=!1,ve.current!==null&&(window.clearTimeout(ve.current),ve.current=null),st.current!==null&&(window.clearTimeout(st.current),st.current=null)},[]),Ye=i.useCallback(ne=>{const Fe=ne.currentTarget,qe=Fe.selectionStart??Fe.value.length;lt.current=qe,Z(Fe.value,qe),nt.detectMention(Fe.value,qe),Pe(nt.mentionActive),nt.mentionActive&&xt(Fe)},[Z,nt,xt]),ft=i.useCallback(ne=>{ne.key!=="Escape"&&Ye(ne)},[Ye]),Rt=i.useCallback(ne=>{ct(Fe=>{const qe=new Set(Fe);return qe.has(ne)?qe.delete(ne):qe.add(ne),qe})},[]),Ft=i.useCallback((ne,Fe=!1)=>Fe?t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--plain",children:ne}):t.jsx("div",{className:"quick-chat-message-content quick-chat-message-content--markdown",children:t.jsx(ei,{remarkPlugins:[ti],components:Py,children:ne})}),[]),on=i.useCallback(ne=>{if(lt.current=ne.currentTarget.selectionStart??lt.current,nt.mentionActive&&nt.files.length>0){if(nt.handleKeyDown(ne,j),ne.key==="Enter"||ne.key==="Tab"){const Fe=nt.files[nt.selectedIndex];if(Fe){const qe=nt.selectFile(Fe,j);q(qe),nt.dismissMention(),Pe(!1)}}return}if(me&&ne.key==="ArrowDown"){ne.preventDefault(),Mn.length>0&&Ne(Fe=>(Fe+1)%Mn.length);return}if(me&&ne.key==="ArrowUp"){ne.preventDefault(),Mn.length>0&&Ne(Fe=>Fe===0?Mn.length-1:Fe-1);return}if(me&&ne.key==="Enter"){ne.preventDefault();const Fe=Mn[xe]??Mn[0];Fe&&zt(Fe);return}if(me&&ne.key==="Escape"){ne.preventDefault(),ne.stopPropagation(),B(!1),Y(""),Be(-1);return}if(ae&&gn.length>0&&ne.key==="ArrowDown"){ne.preventDefault(),ee(Fe=>(Fe+1)%gn.length);return}if(ae&&gn.length>0&&ne.key==="ArrowUp"){ne.preventDefault(),ee(Fe=>Fe===0?gn.length-1:Fe-1);return}if(ae&&(ne.key==="Enter"||ne.key==="Tab")){ne.preventDefault();const Fe=gn[ye]??gn[0];Fe&&gt(Fe);return}if(ae&&ne.key==="Escape"){ne.preventDefault(),X(!1),ie("");return}ne.key!=="Enter"||ne.shiftKey||(ne.preventDefault(),as())},[me,Mn,xe,zt,as,nt,j,ae,gn,ye,gt]),yn=i.useCallback(()=>{if(Ie.current){Ie.current=!1;return}if(g){w(!1);return}typeof window<"u"&&window.innerWidth<=Is&&re.current?.focus({preventScroll:!0}),w(!0)},[g,w]);return t.jsxs(t.Fragment,{children:[t.jsx("input",{ref:re,type:"text",className:"quick-chat-stealth-input","aria-hidden":"true",tabIndex:-1}),s&&t.jsx("button",{ref:Re,type:"button",className:"quick-chat-fab","aria-label":"Open quick chat","data-testid":"quick-chat-fab","data-dragging":Xe?"true":"false",style:{right:fe.x,bottom:fe.y},onPointerDown:vt,onClick:yn,children:t.jsx(ta,{size:24})}),g&&t.jsxs("div",{className:`quick-chat-panel${y&&v?" quick-chat-panel--keyboard-open":""}`,ref:ue,"data-testid":"quick-chat-panel",style:{...dn?{right:fe.x+Pt.right,bottom:St+Pt.bottom,width:Et.width,height:Et.height}:{}},children:[dn&&t.jsxs(t.Fragment,{children:[t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"n","data-testid":"quick-chat-resize-n",onPointerDown:Jt,role:"separator","aria-orientation":"horizontal","aria-label":"Resize panel from top"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"s","data-testid":"quick-chat-resize-s",onPointerDown:Jt,role:"separator","aria-orientation":"horizontal","aria-label":"Resize panel from bottom"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"e","data-testid":"quick-chat-resize-e",onPointerDown:Jt,role:"separator","aria-orientation":"vertical","aria-label":"Resize panel from right"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"w","data-testid":"quick-chat-resize-w",onPointerDown:Jt,role:"separator","aria-orientation":"vertical","aria-label":"Resize panel from left"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"nw","data-testid":"quick-chat-resize-nw",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from top-left corner"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"ne","data-testid":"quick-chat-resize-ne",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from top-right corner"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"sw","data-testid":"quick-chat-resize-sw",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from bottom-left corner"}),t.jsx("div",{className:"quick-chat-resize-handle","data-resize-direction":"se","data-testid":"quick-chat-resize-se",onPointerDown:Jt,role:"separator","aria-label":"Resize panel from bottom-right corner"})]}),t.jsxs("div",{className:"quick-chat-panel-header",children:[t.jsxs("div",{className:"quick-chat-panel-title-wrap",children:[t.jsx("h3",{children:"Quick Chat"}),N==="model"&&ce&&(()=>{const ne=Un?.provider??mn?.modelProvider??"";return b==="mobile"&&ce.length>12&&ne?t.jsx("span",{className:"quick-chat-model-tag quick-chat-model-tag--icon","data-testid":"quick-chat-model-tag",title:ce,"aria-label":ce,children:t.jsx(Gn,{provider:ne,size:"sm"})}):t.jsx("span",{className:"quick-chat-model-tag","data-testid":"quick-chat-model-tag",title:ce,children:ce})})()]}),t.jsxs("div",{className:"quick-chat-panel-header-actions",children:[t.jsx("button",{type:"button",className:"btn-icon quick-chat-new-chat-btn","data-testid":"quick-chat-new-thread","aria-label":"Start a new chat",onClick:ze,disabled:Ut,children:t.jsx(Bn,{size:16})}),t.jsx("button",{type:"button",className:"btn-icon","aria-label":"Close quick chat","data-testid":"quick-chat-close",onClick:()=>w(!1),children:t.jsx(kn,{size:16})})]})]}),t.jsxs("div",{className:"quick-chat-panel-agent-select","data-testid":"quick-chat-session-select",children:[t.jsx("label",{htmlFor:"quick-chat-session-select",className:"visually-hidden",children:"Select session"}),t.jsxs("select",{id:"quick-chat-session-select",value:Vt?.id??"",onChange:ne=>qt(ne.target.value),"data-testid":"quick-chat-session-dropdown",children:[t.jsx("option",{value:"",disabled:!0,children:Ut?"Loading sessions…":"Select a session"}),Nn.map(ne=>t.jsx("option",{value:ne.id,children:ne.label},ne.id))]})]}),k&&t.jsxs("div",{className:"quick-chat-new-session-chooser","data-testid":"quick-chat-new-session-chooser",children:[t.jsxs("div",{className:"quick-chat-inline-mode-toggle","data-testid":"quick-chat-inline-mode-toggle",children:[t.jsx("button",{type:"button",className:`quick-chat-mode-btn${z==="model"?" quick-chat-mode-btn--active":""}`,"data-testid":"quick-chat-inline-mode-model",onClick:()=>_("model"),children:"Model"}),t.jsx("button",{type:"button",className:`quick-chat-mode-btn${z==="agent"?" quick-chat-mode-btn--active":""}`,"data-testid":"quick-chat-inline-mode-agent",onClick:()=>_("agent"),children:"Agent"})]}),z==="agent"?t.jsxs("div",{className:"quick-chat-panel-agent-select",children:[t.jsx("label",{htmlFor:"quick-chat-new-agent-select",className:"visually-hidden",children:"Select agent for new chat"}),t.jsx("select",{id:"quick-chat-new-agent-select",value:A,onChange:ne=>Q(ne.target.value),"data-testid":"quick-chat-new-agent-select",children:h.map(ne=>t.jsx("option",{value:ne.id,children:$z(ne)},ne.id))})]}):t.jsx("div",{className:"quick-chat-panel-agent-select","data-testid":"quick-chat-new-model-select",children:t.jsx(Cs,{id:"quick-chat-new-model-select",models:T,value:H,onChange:M,label:"Select model override",placeholder:W?"Loading models…":"Select a model",disabled:W||T.length===0,favoriteProviders:o,favoriteModels:l,onToggleFavorite:c,onToggleModelFavorite:d})}),t.jsxs("div",{className:"quick-chat-new-session-actions",children:[t.jsx("button",{type:"button",className:"btn","data-testid":"quick-chat-new-session-cancel",onClick:()=>{R(!1),_("model")},children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-primary","data-testid":"quick-chat-new-session-submit",onClick:()=>void Ot(),disabled:Ut||(z==="agent"?!A:!So(H||D||P)),children:"Create"})]})]}),t.jsx("div",{className:"quick-chat-panel-messages",ref:et,"data-testid":"quick-chat-messages",onScroll:pt,children:Ut?t.jsx("div",{className:"quick-chat-panel-empty",children:"Loading conversation…"}):fn?t.jsxs(t.Fragment,{children:[ln.map(ne=>t.jsx(Zg,{message:ne,forcePlain:ne.role!=="user"&&$e.has(ne.id),mentionAgentsByName:je,roomContext:u,onToggleRender:Rt},ne.id)),De&&t.jsx("div",{className:"quick-chat-panel-message quick-chat-panel-message--received","data-testid":"quick-chat-help-message",children:Ft("Available commands:\n- `/new` or `/clear` — Clear conversation and start fresh\n- `/skill:{name}` — Use a specific skill\n- `/help` — Show this help")}),t.jsxs("div",{className:"quick-chat-panel-message quick-chat-panel-message--received quick-chat-panel-message--streaming","data-testid":"quick-chat-streaming-message",children:[_n?t.jsxs(t.Fragment,{children:[t.jsx("div",{"data-testid":"quick-chat-streaming-text",children:Ft(_n,$e.has("__streaming__"))}),t.jsx("button",{type:"button",className:`quick-chat-message-render-toggle${$e.has("__streaming__")?" quick-chat-message-render-toggle--plain":""}`,"data-testid":"quick-chat-message-render-toggle","aria-label":$e.has("__streaming__")?"Show rendered markdown":"Show plain text",onClick:()=>Rt("__streaming__"),children:$e.has("__streaming__")?t.jsx(Zu,{size:14}):t.jsx(Gr,{size:14})})]}):t.jsx("p",{className:"quick-chat-panel-waiting","data-testid":"quick-chat-waiting",children:an?"Thinking…":"Connecting…"}),Ty(Dn,!0),an&&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:an})]})]})]}):rn?t.jsx("div",{className:"quick-chat-panel-empty",children:"Loading conversation…"}):ln.length===0&&!_n&&!an&&!fn&&!De?t.jsx("div",{className:"quick-chat-panel-empty",children:"No messages yet. Start the conversation!"}):t.jsxs(t.Fragment,{children:[ln.map(ne=>t.jsx(Zg,{message:ne,forcePlain:ne.role!=="user"&&$e.has(ne.id),mentionAgentsByName:je,roomContext:u,onToggleRender:Rt},ne.id)),De&&t.jsx("div",{className:"quick-chat-panel-message quick-chat-panel-message--received","data-testid":"quick-chat-help-message",children:Ft("Available commands:\n- `/new` or `/clear` — Clear conversation and start fresh\n- `/skill:{name}` — Use a specific skill\n- `/help` — Show this help")})]})}),ge&&t.jsxs("button",{type:"button",className:"btn btn-sm quick-chat-jump-to-latest","data-testid":"quick-chat-jump-to-latest",onClick:Zt,children:[t.jsx(Cn,{size:14}),"Latest"]}),_e.length>0&&t.jsx("div",{className:"quick-chat-attachment-previews","data-testid":"quick-chat-attachment-previews",children:_e.map((ne,Fe)=>t.jsxs("div",{className:"quick-chat-attachment-preview","data-testid":`quick-chat-attachment-preview-${Fe}`,children:[ne.previewUrl?t.jsx("img",{src:ne.previewUrl,alt:ne.file.name}):t.jsx("span",{className:"quick-chat-attachment-preview-name",children:ne.file.name}),t.jsx("button",{type:"button",className:"quick-chat-attachment-remove","data-testid":`quick-chat-attachment-remove-${Fe}`,"aria-label":`Remove ${ne.file.name}`,onClick:()=>os(Fe),children:"×"})]},`${ne.file.name}-${Fe}`))}),t.jsx("div",{className:"quick-chat-panel-input",children:t.jsxs("div",{className:`quick-chat-input-wrapper${mt?" quick-chat-input-wrapper--dragover":""}`,onDragEnter:Tn,onDragOver:ys,onDragLeave:Ls,onDrop:_s,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:ne=>{On(ne.target.files),ne.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(Pb,{size:16})}),t.jsx("textarea",{ref:at,rows:1,className:"quick-chat-textarea",value:j,onChange:O,onKeyDown:on,onKeyUp:ft,onClick:Ye,onBlur:He,onFocus:Ze,onPaste:xs,onTouchStart:ne=>{typeof window>"u"||window.innerWidth>Is||document.activeElement!==ne.currentTarget&&(ne.preventDefault(),ne.currentTarget.focus({preventScroll:!0}))},placeholder:Xt,disabled:wt,"data-testid":"quick-chat-input"}),fn?t.jsx("button",{type:"button",className:"chat-input-stop quick-chat-send-btn",onPointerDown:ne=>{typeof window>"u"||window.innerWidth>Is||(ne.preventDefault(),ne.pointerType&&ne.pointerType!=="mouse"&&(At.current=!0,en()))},onTouchStart:ne=>{typeof window>"u"||window.innerWidth>Is||(ne.preventDefault(),At.current=!0,en())},onMouseDown:ne=>{typeof window>"u"||window.innerWidth>Is||ne.preventDefault()},onClick:()=>{if(At.current){At.current=!1;return}en()},"aria-label":"Stop generation","data-testid":"quick-chat-stop",children:t.jsx(Oi,{size:14})}):t.jsx("button",{type:"button",className:"quick-chat-send-btn",onPointerDown:ne=>{typeof window>"u"||window.innerWidth>Is||(ne.preventDefault(),ne.pointerType&&ne.pointerType!=="mouse"&&(At.current=!0,vs(),ms(),as()))},onTouchStart:ne=>{typeof window>"u"||window.innerWidth>Is||(ne.preventDefault(),At.current=!0,vs(),ms(),as())},onMouseDown:ne=>{typeof window>"u"||window.innerWidth>Is||ne.preventDefault()},onClick:()=>{if(At.current){At.current=!1;return}as()},disabled:wt||j.trim().length===0&&_e.length===0,"data-testid":"quick-chat-send",children:t.jsx(Ua,{size:16})})]}),t.jsx(Sz,{agents:h,filter:L,highlightedIndex:xe,visible:me,onSelect:zt,position:"above",roomMemberIds:u?.memberIds,roomName:u?.roomName}),t.jsx(Iz,{visible:nt.mentionActive&&!me,position:dt,files:nt.files,selectedIndex:nt.selectedIndex,onSelect:ne=>{const Fe=nt.selectFile(ne,j);q(Fe),nt.dismissMention(),Pe(!1),at.current?.focus()},loading:nt.loading}),ae&&t.jsx("div",{className:"chat-skill-menu","data-testid":"quick-chat-skill-menu",role:"listbox","aria-label":"Skill suggestions",children:Ce?t.jsx("div",{className:"chat-skill-menu-empty",children:"Loading skills…"}):gn.length===0?t.jsx("div",{className:"chat-skill-menu-empty",children:pe?"No skills found":"No skills available"}):gn.map((ne,Fe)=>t.jsxs("button",{type:"button",role:"option","aria-selected":Fe===ye,className:`chat-skill-menu-item${Fe===ye?" chat-skill-menu-item--highlighted":""}`,onMouseDown:qe=>qe.preventDefault(),onMouseEnter:()=>ee(Fe),onClick:()=>gt(ne),children:[t.jsx("span",{className:"chat-skill-menu-item-name",children:ne.name}),t.jsx("span",{className:"chat-skill-menu-item-description",title:ne.relativePath,children:ne.relativePath})]},ne.id))}),Yt&&t.jsxs("div",{className:"chat-pending-message","data-testid":"chat-pending-indicator",children:[t.jsx("span",{children:`Queued: ${qn}`}),t.jsx("button",{type:"button",className:"chat-pending-message-dismiss","aria-label":"Dismiss queued message","data-testid":"chat-pending-dismiss",onClick:tn,children:"×"})]})]})})]})]})}function Co(e){if(!e)return 0;const n=Date.parse(e);return Number.isFinite(n)?n:0}function eb(e){return e.status==="generating"||e.status==="awaiting_input"}function Eo(e){return e==="complete"||e==="error"}function Kz(e){const[n,s]=i.useState([]),a=i.useRef(new Map),r=i.useRef(new Map),{sessions:o,broadcastUpdate:l,broadcastCompleted:c,requestSync:d}=eo(),u=i.useCallback(()=>{lm(e).then(p=>{const g=p.filter(v=>{const b=Co(v.updatedAt),y=r.current.get(v.id);return y===void 0?!0:b<=y?!1:(r.current.delete(v.id),!0)}),w=new Map;for(const v of g)w.set(v.id,Co(v.updatedAt));a.current=w,s(g)}).catch(p=>{console.warn("[useBackgroundSessions] Failed to fetch AI sessions:",p)})},[e]);i.useEffect(()=>{d(),u()},[u,d]),i.useEffect(()=>{s(p=>{if(o.size===0)return p;let g=!1;const w=new Map(p.map(v=>[v.id,v]));for(const v of o.values()){if(e&&v.projectId&&v.projectId!==e)continue;const b=v.lastEventTimestamp,y=a.current.get(v.sessionId)??0;if(b<y)continue;const N=r.current.get(v.sessionId);if(N!==void 0&&b<=N)continue;if(N!==void 0&&b>N&&!Eo(v.status)&&r.current.delete(v.sessionId),Eo(v.status)){w.delete(v.sessionId)&&(g=!0),a.current.set(v.sessionId,b);continue}const S=w.get(v.sessionId),C=v.type??S?.type,x=v.title??S?.title;if(!S&&(!C||!x))continue;const k={id:v.sessionId,type:C??"planning",status:v.status,title:x??"AI Session",projectId:v.projectId??S?.projectId??e??null,lockedByTab:v.owningTabId??S?.lockedByTab??null,updatedAt:v.updatedAt??S?.updatedAt??new Date(b).toISOString()},R=w.get(v.sessionId);(!R||R.status!==k.status||R.title!==k.title||R.type!==k.type||R.projectId!==k.projectId||R.lockedByTab!==k.lockedByTab||R.updatedAt!==k.updatedAt)&&(w.set(v.sessionId,k),a.current.set(v.sessionId,b),g=!0)}return g?[...w.values()].sort((v,b)=>Co(b.updatedAt)-Co(v.updatedAt)):p})},[e,o]),i.useEffect(()=>{const p=e?`?projectId=${encodeURIComponent(e)}`:"",g=v=>{try{const b=JSON.parse(v.data),y=Co(b.updatedAt)||Date.now();s(N=>{const S=a.current.get(b.id)??0;if(y<S)return N;const C=r.current.get(b.id);if(C!==void 0&&y<=C)return N;if(C!==void 0&&y>C&&!Eo(b.status)&&r.current.delete(b.id),a.current.set(b.id,y),Eo(b.status))return N.filter(k=>k.id!==b.id);const x=N.findIndex(k=>k.id===b.id);if(x>=0){const k=[...N];return k[x]=b,k}return eb(b)?[b,...N]:N}),l({sessionId:b.id,status:b.status,needsInput:b.status==="awaiting_input",type:b.type,title:b.title,projectId:b.projectId,owningTabId:b.lockedByTab,updatedAt:b.updatedAt,timestamp:y}),Eo(b.status)&&c({sessionId:b.id,status:b.status,timestamp:y})}catch{}},w=v=>{try{const b=JSON.parse(v.data),y=Date.now();r.current.set(b,y),a.current.set(b,Math.max(a.current.get(b)??0,y)),c({sessionId:b,status:"complete",timestamp:y}),s(N=>N.filter(S=>S.id!==b))}catch{}};return pi(`/api/events${p}`,{events:{"ai_session:updated":g,"ai_session:deleted":w},onReconnect:()=>{u()}})},[c,l,e,u]);const h=i.useCallback(async p=>{const w=n.find(N=>N.id===p)?.type,v=nr();let b=!1;if(w==="planning")try{await Jb(p,e,v)}catch(N){b=!0,N instanceof Error&&N.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of planning session ${p} despite lock by another tab`)}else if(w==="subtask")try{await Xb(p,e,v)}catch(N){b=!0,N instanceof Error&&N.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of subtask session ${p} despite lock by another tab`)}else if(w==="mission_interview")try{await sx(p,e,v)}catch(N){b=!0,N instanceof Error&&N.message.includes("locked")&&console.warn(`[useBackgroundSessions] Forcing dismiss of mission interview session ${p} despite lock by another tab`)}b&&console.warn(`[useBackgroundSessions] Cancellation failed for session ${p}, attempting delete anyway`);const y=Date.now();r.current.set(p,y),a.current.set(p,Math.max(a.current.get(p)??0,y)),c({sessionId:p,status:"complete",timestamp:y});try{await ix(p)}catch{}s(N=>N.filter(S=>S.id!==p))},[c,e,n]),m=i.useMemo(()=>n.filter(p=>eb(p)),[n]),f=i.useMemo(()=>m.filter(p=>p.type==="planning"),[m]);return{sessions:m,generating:m.filter(p=>p.status==="generating").length,needsInput:m.filter(p=>p.status==="awaiting_input").length,planningSessions:f,dismissSession:h,refresh:u}}const vc="fusion:hide-session-banners",Yu="fusion:session-banner-pref-changed";function Jz(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(vc)==="1"}catch{return!1}}function Yz(e){if(typeof window>"u")return()=>{};const n=a=>{a.key===vc&&e()},s=()=>e();return window.addEventListener("storage",n),window.addEventListener(Yu,s),()=>{window.removeEventListener("storage",n),window.removeEventListener(Yu,s)}}function GB(e){if(!(typeof window>"u"))try{e?window.localStorage.setItem(vc,"1"):window.localStorage.removeItem(vc),window.dispatchEvent(new Event(Yu))}catch{}}function Qz(){return i.useSyncExternalStore(Yz,Jz,()=>!1)}function ws(e){return{...e,column:Bb(e.column),dependencies:Array.isArray(e.dependencies)?e.dependencies:[],steps:Array.isArray(e.steps)?e.steps:[],log:Array.isArray(e.log)?e.log:[]}}function tb(e,n){return!e&&!n?0:e?n?e.localeCompare(n):1:-1}function Xz(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 cu(e,n){if(tb(n.updatedAt,e.updatedAt)<0)return e;if(e.column===n.column)return Xz(e,n);const a=tb(e.columnMovedAt,n.columnMovedAt);return e.columnMovedAt&&!n.columnMovedAt?{...n,column:e.column,columnMovedAt:e.columnMovedAt}:a>=0?{...n,column:e.column,columnMovedAt:e.columnMovedAt}:n}function Zz(e){const n=e?.projectId,s=e?.searchQuery,a=e?.sseEnabled??!0,[r,o]=i.useState([]),[l,c]=i.useState(!1),d=i.useRef(l);d.current=l;const u=i.useRef(r),h=i.useRef(0),m=i.useRef(0),f=i.useRef(s),p=i.useRef(null),g=i.useRef(void 0),w=i.useRef(0),v=i.useRef(n);u.current=r,f.current=s,v.current!==n&&(v.current=n,w.current++);const b=1e3,y=i.useCallback(async D=>{const E=++h.current,P=n,$=D?.searchQueryOverride??f.current,j=D?.includeArchivedOverride??d.current;try{const q=await qN(void 0,void 0,P,$,j);if(h.current!==E||n!==P)return;o(q.map(ws)),g.current=Date.now()}catch{if(h.current!==E||n!==P)return;if(D?.clearOnError){o([]);return}o(q=>q)}},[n]);p.current=y;const N=i.useCallback(async()=>{d.current||(c(!0),d.current=!0,await p.current({includeArchivedOverride:!0}))},[]),S=i.useRef(s);i.useEffect(()=>{if(s===void 0&&S.current===void 0)return;S.current=s;const D=setTimeout(()=>{y({searchQueryOverride:s})},300);return()=>clearTimeout(D)},[s]),i.useEffect(()=>{y({clearOnError:!0});const D=()=>{if(document.visibilityState!=="visible")return;const E=Date.now();E-m.current<b||(m.current=E,y())};return document.addEventListener("visibilitychange",D),()=>{document.removeEventListener("visibilitychange",D)}},[y]),i.useEffect(()=>{if(a===!1)return;const D=w.current,E=n?`?projectId=${encodeURIComponent(n)}`:"",P=()=>w.current!==D;let $=!0;const j=ae=>{if(P())return;const X=ws(JSON.parse(ae.data));if(f.current){p.current({searchQueryOverride:f.current});return}o(pe=>{const ie=pe.findIndex(Y=>Y.id===X.id);if(ie===-1)return[...pe,X];const ye=pe[ie],ee=cu(ye,X);if(ee===ye)return pe;const L=[...pe];return L[ie]=ee,L}),g.current=Date.now()},q=ae=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const{task:X,to:pe}=JSON.parse(ae.data),ie=ws(X),ye={...ie,column:Bb(pe,ie.column)};o(ee=>{const L=ee.findIndex(me=>me.id===ye.id);if(L===-1)return[...ee,ye];const Y=[...ee];return Y[L]=ye,Y}),g.current=Date.now()},de=ae=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const X=ws(JSON.parse(ae.data));o(pe=>{const ie=pe.findIndex(Y=>Y.id===X.id);if(ie===-1)return[...pe,X];const ye=pe[ie],ee=cu(ye,X);if(ee===ye)return pe;const L=[...pe];return L[ie]=ee,L}),g.current=Date.now()},be=ae=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const X=ws(JSON.parse(ae.data));o(pe=>pe.filter(ie=>ie.id!==X.id))},Ce=ae=>{if(P())return;if(f.current){p.current({searchQueryOverride:f.current});return}const{task:X}=JSON.parse(ae.data),ie={...ws(X),column:"done"};o(ye=>{const ee=ye.findIndex(Y=>Y.id===ie.id);if(ee===-1)return[...ye,ie];const L=[...ye];return L[ee]=ie,L})},Ae=pi(`/api/events${E}`,{events:{"task:created":j,"task:moved":q,"task:updated":de,"task:deleted":be,"task:merged":Ce},onReconnect:()=>{$&&(P()||p.current())}});return()=>{$=!1,Ae()}},[n,a]);const C=i.useCallback(async D=>{const E=ws(await qb(D,n));return o(P=>P.some($=>$.id===E.id)?P:[...P,E]),E},[n]),x=i.useCallback(async(D,E,P)=>ws(await WN(D,E,n,P)),[n]),k=i.useCallback(async D=>ws(await Vb(D,n)),[n]),R=i.useCallback(async D=>ws(await Wb(D,n)),[n]),z=i.useCallback(async(D,E)=>ws(await GN(D,n,E)),[n]),_=i.useCallback(async D=>KN(D,n),[n]),A=i.useCallback(async D=>ws(await JN(D,n)),[n]),Q=i.useCallback(async D=>ws(await YN(D,n)),[n]),H=i.useCallback(async D=>{const E=ws(await QN(D,n));return o(P=>P.some($=>$.id===E.id)?P:[...P,E]),E},[n]),M=i.useCallback(async(D,E)=>{const P=u.current.find(j=>j.id===D),$=P?{...P,...E,updatedAt:new Date().toISOString()}:void 0;$&&o(j=>j.map(q=>q.id===D?$:q));try{const j=ws(await Ts(D,E,n));return o(q=>q.map(de=>de.id===D?j:de)),j}catch(j){throw P&&o(q=>q.map(de=>de.id===D?P:de)),j}},[n]),T=i.useCallback(async D=>{const E=ws(await XN(D,n));return o(P=>P.map($=>$.id===D?E:$)),E},[n]),F=i.useCallback(async D=>{const E=ws(await ZN(D,n));return o(P=>P.map($=>$.id===D?E:$)),E},[n]),W=i.useCallback(async()=>{const E=(await eS(n)).map(ws);return o(P=>P.map($=>E.find(q=>q.id===$.id)||$)),E},[n]),oe=i.useCallback(D=>{if(D.length===0)return;if(f.current){p.current({searchQueryOverride:f.current});return}const E=D.map(ws);o(P=>{let $=P;for(const j of E){const q=$.findIndex(Ce=>Ce.id===j.id);if(q===-1){$===P&&($=[...P]),$.push(j);continue}const de=$[q],be=cu(de,j);be!==de&&($===P&&($=[...P]),$[q]=be)}return $}),g.current=Date.now()},[]);return{tasks:r,createTask:C,moveTask:x,pauseTask:k,unpauseTask:R,deleteTask:z,mergeTask:_,retryTask:A,resetTask:Q,duplicateTask:H,updateTask:M,archiveTask:T,unarchiveTask:F,archiveAllDone:W,loadArchivedTasks:N,includeArchived:l,ingestCreatedTasks:oe,lastFetchTimeMs:g.current}}const e6=5e3,t6=1e3;function n6(e){const s=(f1(e)?e.nodeMappings??e.projectNodeMappings??e.pathMappings??[]:[]).filter(a=>!!a?.nodeId&&!!a?.path).map(a=>({nodeId:a.nodeId,nodeName:a.nodeName,path:a.path,available:a.available!==!1}));return s.length>0?s:e.nodeId&&e.path?[{nodeId:e.nodeId,nodeName:e._sourceNodeName,path:e.path,available:!0}]:[]}function nb(e){return e.map(n=>({...n,nodeMappings:n6(n)}))}function s6(){const[e,n]=i.useState([]),[s,a]=i.useState(!0),[r,o]=i.useState(null),l=i.useRef(null),c=i.useRef(0),d=i.useCallback(async()=>{try{o(null);const f=await Ch();n(nb(f))}catch(f){o(f instanceof Error?f.message:"Failed to fetch projects")}},[]);i.useEffect(()=>{let f=!1;async function p(){a(!0);const w=performance.now();try{const v=await Ch(),b=nb(v),y=Math.round(performance.now()-w);console.log(`[useProjects] initial fetchProjectsAcrossNodes took ${y}ms (${b.length} projects)`),f||(n(b),o(null))}catch(v){const b=Math.round(performance.now()-w);console.warn(`[useProjects] initial fetch failed after ${b}ms: ${v instanceof Error?v.message:String(v)}`),f||o(v instanceof Error?v.message:"Failed to fetch projects")}finally{f||a(!1)}}p();const g=()=>{if(document.visibilityState!=="visible")return;const w=Date.now();w-c.current<t6||(c.current=w,d())};return document.addEventListener("visibilitychange",g),()=>{f=!0,document.removeEventListener("visibilitychange",g)}},[d]),i.useEffect(()=>{if(!s)return l.current=setInterval(()=>{d()},e6),()=>{l.current&&(clearInterval(l.current),l.current=null)}},[s,d]);const u=i.useCallback(async f=>{const p=await j1(f);return n(g=>[...g,p]),p},[]),h=i.useCallback(async(f,p)=>{const g=await A1(f,p);return n(w=>w.map(v=>v.id===f?g:v)),g},[]),m=i.useCallback(async f=>{await ex(f),n(p=>p.filter(g=>g.id!==f))},[]);return{projects:e,loading:s,error:r,refresh:d,register:u,update:h,unregister:m}}const i6="kb-dashboard-current-project";function a6(e){return e??"local"}function r6(e,n={}){const{nodeId:s=null}=n,[a,r]=i.useState(null),[o,l]=i.useState(!0),c=i.useRef(!1),d=i.useRef(!1),u=i.useRef(null),h=a6(s);i.useEffect(()=>{let p=!1;async function g(){try{const w=await ia();if(p)return;u.current=w.dashboardCurrentProjectIdByNode??{};const v=u.current[h];if(v){const b=e.find(y=>y.id===v);b&&(r(b),c.current=!0)}if(!v)try{const b=localStorage.getItem(i6);if(b){const y=JSON.parse(b);y?.id&&e.some(S=>S.id===y.id)&&(r(y),c.current=!0,u.current={...u.current,[h]:y.id},await Kn({dashboardCurrentProjectIdByNode:u.current}).catch(()=>{}))}}catch{}}catch{}finally{p||l(!1)}}return g(),()=>{p=!0}},[h,e]),i.useEffect(()=>{if(!o){if(a){if(!e.some(w=>w.id===a.id)&&e.length>0){const w=e.find(v=>v.status==="active");r(w||e[0]||null);return}const g={...u.current,[h]:a.id};u.current=g,Kn({dashboardCurrentProjectIdByNode:g}).catch(()=>{})}else if(e.length>0&&!d.current){const p=e.find(g=>g.status==="active");p&&r(p)}}},[a,e,o,h]);const m=i.useCallback(p=>{if(d.current=!1,r(p),p){const g={...u.current,[h]:p.id};u.current=g,Kn({dashboardCurrentProjectIdByNode:g}).catch(()=>{})}},[h]),f=i.useCallback(()=>{d.current=!0,r(null);const p={...u.current};delete p[h],u.current=p,Kn({dashboardCurrentProjectIdByNode:p}).catch(()=>{})},[h]);return{currentProject:a,setCurrentProject:m,clearCurrentProject:f,loading:o}}const $y=i.createContext(null);function o6({children:e}){const[n,s]=i.useState([]),a=i.useRef(0),r=i.useRef(new Map),o=i.useCallback(c=>{const d=r.current.get(c);d!==void 0&&(clearTimeout(d),r.current.delete(c)),s(u=>u.filter(h=>h.id!==c))},[]),l=i.useCallback((c,d="info")=>{const u=a.current++;s(m=>[...m,{id:u,message:c,type:d}]);const h=setTimeout(()=>o(u),4e3);r.current.set(u,h)},[o]);return i.useEffect(()=>()=>{r.current.forEach(c=>clearTimeout(c)),r.current.clear()},[]),wa.createElement($y.Provider,{value:{toasts:n,addToast:l,removeToast:o}},e)}function l6(){const e=i.useContext($y);if(!e)throw new Error("useToast must be used within ToastProvider");return e}const Dy="kb-dashboard-theme-mode",Ly="kb-dashboard-color-theme",Oy="kb-dashboard-font-scale-pct",Qu=100,c6=85,d6=125,Fy=[...CN],Xu="theme-data",_o="theme-data.css";function u6(){const e=document.baseURI||(typeof document.location<"u"?document.location.href:"");return e?e.startsWith("http://")||e.startsWith("https://")?new URL(`/${_o}`,e).toString():e.startsWith("file://")?e.endsWith("/")?e.slice(0,-1)+`/${_o}`:e.replace(/\/[^/]+$/,`/${_o}`):`/${_o}`:`/${_o}`}const Ks=typeof window<"u",m6=Ks?i.useLayoutEffect:i.useEffect;function zy(e){return e==="dark"||e==="light"||e==="system"}function sb(){if(!Ks)return"dark";try{const e=localStorage.getItem(Dy);if(zy(e))return e}catch{}return"dark"}function ib(){if(!Ks)return"default";try{const e=localStorage.getItem(Ly);if(e&&Fy.includes(e))return e}catch{}return"default"}function ab(e){if(Ks)try{localStorage.setItem(Dy,e)}catch{}}function rb(e){if(Ks)try{localStorage.setItem(Ly,e)}catch{}}function Jo(e){return typeof e!="number"||!Number.isFinite(e)?Qu:Math.min(d6,Math.max(c6,Math.round(e)))}function ob(){if(!Ks)return Qu;try{const e=Number(localStorage.getItem(Oy));return Jo(e)}catch{return Qu}}function lb(e){if(Ks)try{localStorage.setItem(Oy,String(Jo(e)))}catch{}}function h6(e,n){return e==="system"?n?"dark":"light":e}function p6(e,n,s,a){if(!Ks)return;const r=h6(e,a);document.documentElement.setAttribute("data-theme",r),document.documentElement.setAttribute("data-color-theme",n),document.documentElement.style.fontSize=`${Jo(s)}%`}function cb(){if(!Ks)return;const e=u6(),n=document.getElementById(Xu);if(n){n.href!==e&&(n.href=e),n.parentNode===document.head&&document.head.lastChild!==n&&document.head.appendChild(n);return}const s=document.createElement("link");s.rel="stylesheet",s.href=e,s.id=Xu,document.head.appendChild(s)}function db(){if(!Ks)return;const e=document.getElementById(Xu);e&&e.remove()}function f6(){const[e,n]=i.useState(()=>sb()),[s,a]=i.useState(()=>ib()),[r,o]=i.useState(()=>ob()),[l,c]=i.useState(!0),[d,u]=i.useState(()=>Ks?window.matchMedia("(prefers-color-scheme: dark)").matches:!0),h=i.useRef(e),m=i.useRef(s),f=i.useRef(r),p=i.useRef(!1),g=i.useRef(!1),w=i.useRef(!1);i.useEffect(()=>{h.current=e},[e]),i.useEffect(()=>{m.current=s},[s]),i.useEffect(()=>{f.current=r},[r]),i.useEffect(()=>{if(!Ks||!l)return;let N=!1;return ia().then(S=>{if(!N&&(zy(S.themeMode)&&!p.current&&(h.current!==S.themeMode&&(h.current=S.themeMode,n(S.themeMode)),sb()!==S.themeMode&&ab(S.themeMode)),S.colorTheme&&Fy.includes(S.colorTheme)&&!g.current&&(m.current!==S.colorTheme&&(m.current=S.colorTheme,a(S.colorTheme)),ib()!==S.colorTheme&&rb(S.colorTheme)),!w.current)){const C=Jo(S.dashboardFontScalePct);f.current!==C&&(f.current=C,o(C)),ob()!==C&&lb(C)}}).catch(S=>{console.warn("[useTheme] Failed to hydrate theme from global settings",S)}).finally(()=>{N||c(!1)}),()=>{N=!0}},[l]),i.useEffect(()=>{if(!Ks)return;const N=window.matchMedia("(prefers-color-scheme: dark)"),S=C=>{u(C.matches)};return N.addEventListener("change",S),()=>N.removeEventListener("change",S)},[]),m6(()=>{p6(e,s,r,d)},[e,s,r,d]),i.useEffect(()=>{!Ks||l||(s!=="default"?cb():db())},[s,l]);const v=i.useCallback(N=>{p.current=!0,h.current=N,n(N),ab(N),Kn({themeMode:N}).catch(S=>{console.warn("[useTheme] Failed to persist themeMode to global settings",S)})},[]),b=i.useCallback(N=>{g.current=!0,m.current=N,a(N),rb(N),N!=="default"?cb():db(),Kn({colorTheme:N}).catch(S=>{console.warn("[useTheme] Failed to persist colorTheme to global settings",S)})},[]),y=i.useCallback(N=>{const S=Jo(N);w.current=!0,f.current=S,o(S),lb(S),Kn({dashboardFontScalePct:S}).catch(C=>{console.warn("[useTheme] Failed to persist dashboardFontScalePct to global settings",C)})},[]);return{themeMode:e,colorTheme:s,dashboardFontScalePct:r,setThemeMode:v,setColorTheme:b,setDashboardFontScalePct:y,isSystemDark:d}}function g6(e){const{planningSessions:n}=e,[s,a]=i.useState(!1),[r,o]=i.useState(!1),[l,c]=i.useState(null),[d,u]=i.useState(void 0),[h,m]=i.useState(!1),[f,p]=i.useState(null),[g,w]=i.useState(void 0),[v,b]=i.useState(null),[y,N]=i.useState("definition"),[S,C]=i.useState(null),[x,k]=i.useState(!1),[R,z]=i.useState(void 0),[_,A]=i.useState(!1),[Q,H]=i.useState(!1),[M,T]=i.useState(!1),[F,W]=i.useState(null),[oe,D]=i.useState(!1),[E,P]=i.useState(!1),[$,j]=i.useState(void 0),[q,de]=i.useState(!1),[be,Ce]=i.useState(!1),[Ae,ae]=i.useState("project"),[X,pe]=i.useState(null),[ie,ye]=i.useState(!1),[ee,L]=i.useState(!1),[Y,me]=i.useState(!1),[B,xe]=i.useState(!1),[Ne,te]=i.useState(!1),[Be,$e]=i.useState(!1),[ct,De]=i.useState(!1),le=!!(v||x||s||r||h||E||q||be||ie||ee||Y||Ne||B||M||oe||_||Q||Be||ct),_e=i.useCallback(()=>a(!0),[]),Le=i.useCallback(()=>a(!1),[]),mt=i.useCallback(()=>o(!0),[]),Ve=i.useCallback($t=>{c($t),o(!0)},[]),ge=i.useCallback(()=>{const $t=n[0];$t&&(u($t.id),o(!0))},[n]),he=i.useCallback($t=>{u($t),o(!0)},[]),Pe=i.useCallback(()=>{o(!1),c(null),u(void 0)},[]),dt=i.useCallback($t=>{p($t),m(!0)},[]),jt=i.useCallback($t=>{w($t),m(!0)},[]),nt=i.useCallback(()=>{m(!1),p(null),w(void 0)},[]),xt=i.useCallback(($t,ue="definition",Re)=>{b($t),N(ue),C(Re?.origin??null)},[]),Ie=i.useCallback($t=>{b($t),N("changes"),C(null)},[]),Qe=i.useCallback($t=>{b(ue=>ue&&{...ue,...$t})},[]),ot=i.useCallback(()=>{b(null),C(null)},[]),Tt=i.useCallback($t=>{z($t),k(!0)},[]),Mt=i.useCallback(()=>{k(!1),z(void 0)},[]),We=i.useCallback(()=>A(!0),[]),J=i.useCallback(()=>A(!1),[]),ke=i.useCallback(()=>H(!0),[]),lt=i.useCallback(()=>H(!1),[]),ve=i.useCallback($t=>{W($t??null),T(!0)},[]),st=i.useCallback(()=>{T(!1),W(null)},[]),Ue=i.useCallback(()=>D(!0),[]),fe=i.useCallback(()=>D(!1),[]),Xe=i.useCallback(()=>{P($t=>!$t)},[]),vt=i.useCallback(()=>{P(!1),j(void 0)},[]),St=i.useCallback(($t,ue)=>{typeof $t=="string"&&$t&&ae($t),pe(typeof ue=="string"||ue===null?ue:null),de(!0)},[]),Et=i.useCallback(()=>{de(!1),pe(null)},[]),Pt=i.useCallback(()=>Ce(!0),[]),Jt=i.useCallback(()=>Ce(!1),[]),dn=i.useCallback($t=>{typeof $t=="string"&&$t&&ae($t)},[]),Vt=i.useCallback(()=>ye(!0),[]),ln=i.useCallback(()=>ye(!1),[]),fn=i.useCallback(()=>L(!0),[]),_n=i.useCallback(()=>L(!1),[]),an=i.useCallback(()=>me(!0),[]),Dn=i.useCallback(()=>me(!1),[]),vn=i.useCallback(()=>xe(!0),[]),Ut=i.useCallback(()=>xe(!1),[]),rn=i.useCallback(()=>te(!0),[]),bn=i.useCallback(()=>te(!1),[]),en=i.useCallback(async($t,ue)=>{te(!1),j(ue),P(!0)},[]),Yt=i.useCallback(()=>$e(!0),[]),tn=i.useCallback(()=>$e(!1),[]),Qt=i.useCallback(()=>De(!0),[]),Kt=i.useCallback(()=>De(!1),[]),xn=i.useCallback(($t,ue)=>{ue(`Created ${$t.id} from planning mode`,"success"),o(!1),c(null)},[]),un=i.useCallback(($t,ue)=>{const Re=$t.map(et=>et.id).join(", ");ue(`Created ${Re} from planning mode`,"success"),o(!1),c(null)},[]),pn=i.useCallback(($t,ue)=>{const Re=$t.map(et=>et.id).join(", ");ue(`Created ${Re} from subtask breakdown`,"success"),m(!1),p(null)},[]);return{newTaskModalOpen:s,isPlanningOpen:r,planningInitialPlan:l,planningResumeSessionId:d,isSubtaskOpen:h,subtaskInitialDescription:f,subtaskResumeSessionId:g,detailTask:v,detailTaskInitialTab:y,detailTaskOrigin:S,settingsOpen:x,settingsInitialSection:R,schedulesOpen:_,githubImportOpen:Q,usageOpen:M,usageAnchorRect:F,systemStatsOpen:oe,terminalOpen:E,terminalInitialCommand:$,filesOpen:q,todosOpen:be,fileBrowserWorkspace:Ae,fileBrowserInitialFile:X,activityLogOpen:ie,gitManagerOpen:ee,workflowStepsOpen:Y,agentsOpen:B,scriptsOpen:Ne,setupWizardOpen:Be,modelOnboardingOpen:ct,anyModalOpen:le,openNewTask:_e,closeNewTask:Le,openPlanning:mt,openPlanningWithInitialPlan:Ve,resumePlanning:ge,openPlanningWithSession:he,closePlanning:Pe,openSubtaskBreakdown:dt,openSubtaskWithSession:jt,closeSubtask:nt,openDetailTask:xt,openDetailWithChangesTab:Ie,updateDetailTask:Qe,closeDetailTask:ot,openSettings:Tt,closeSettings:Mt,openSchedules:We,closeSchedules:J,openGitHubImport:ke,closeGitHubImport:lt,openUsage:ve,closeUsage:st,openSystemStats:Ue,closeSystemStats:fe,toggleTerminal:Xe,closeTerminal:vt,openFiles:St,closeFiles:Et,openTodos:Pt,closeTodos:Jt,setFileWorkspace:dn,openActivityLog:Vt,closeActivityLog:ln,openGitManager:fn,closeGitManager:_n,openWorkflowSteps:an,closeWorkflowSteps:Dn,openAgents:vn,closeAgents:Ut,openScripts:rn,closeScripts:bn,runScript:en,openSetupWizard:Yt,closeSetupWizard:tn,openModelOnboarding:Qt,closeModelOnboarding:Kt,onPlanningTaskCreated:xn,onPlanningTasksCreated:un,onSubtaskTasksCreated:pn}}function b6(e){const[n,s]=i.useState(2),[a,r]=i.useState("."),[o,l]=i.useState(!0),[c,d]=i.useState(!1),[u,h]=i.useState(!1),[m,f]=i.useState(void 0),[p,g]=i.useState(7200*1e3),[w,v]=i.useState(!1),[b,y]=i.useState(20),[N,S]=i.useState(!1),[C,x]=i.useState(25),[k,R]=i.useState(!1),[z,_]=i.useState(!1),[A,Q]=i.useState({}),[H,M]=i.useState(!1),[T,F]=i.useState(!1),[W,oe]=i.useState(!1),[D,E]=i.useState(!1),[P,$]=i.useState(!0),j=i.useCallback(async()=>{const[ae,X]=await Promise.allSettled([sS(e),Rc(e)]);if(ae.status==="fulfilled"&&(s(ae.value.maxConcurrent),r(ae.value.rootDir)),X.status==="fulfilled"){const pe=X.value;l(!!pe.autoMerge),d(!!pe.globalPause),h(!!pe.enginePaused),R(!!pe.prAuthAvailable),f(pe.taskStuckTimeoutMs),g(pe.staleHighFanoutBlockerAgeThresholdMs??7200*1e3),S(pe.showQuickChatFAB===!0),x(pe.maxTotalRetriesBeforeFail??25),v(pe.capacityRiskBannerEnabled===!0),y(pe.capacityRiskTodoThreshold??20),Q(pe.experimentalFeatures??{});const ie=pe.experimentalFeatures??{};M(ie.insights===!0),F(ie.memoryView===!0),oe(ie.devServerView===!0||ie.devServer===!0),E(ie.todoView===!0);const ye=pe.autoReloadOnVersionChange!==!1;$(ye),Qc(ye)}_(!0)},[e]);i.useEffect(()=>{_(!1),Q({}),M(!1),F(!1),oe(!1),E(!1),j()},[j]);const q=i.useCallback(async()=>{const ae=!o;l(ae);try{await pl({autoMerge:ae},e)}catch{l(!ae)}},[o,e]),de=i.useCallback(async()=>{const ae=!c;d(ae);try{await pl({globalPause:ae,globalPauseReason:ae?"manual":void 0},e)}catch{d(!ae)}},[c,e]),be=i.useCallback(async()=>{const ae=!u;h(ae);try{await pl({enginePaused:ae},e)}catch{h(!ae)}},[u,e]),Ce=i.useCallback(async()=>{const ae=!N;S(ae);try{await pl({showQuickChatFAB:ae},e)}catch{S(!ae)}},[N,e]),Ae=i.useCallback(async()=>{const ae=!P;$(ae),Qc(ae);try{await Kn({autoReloadOnVersionChange:ae})}catch{$(!ae),Qc(!ae)}},[P]);return{maxConcurrent:n,rootDir:a,autoMerge:o,globalPaused:c,enginePaused:u,taskStuckTimeoutMs:m,staleHighFanoutBlockerAgeThresholdMs:p,capacityRiskBannerEnabled:w,capacityRiskTodoThreshold:b,showQuickChatFAB:N,maxTotalRetriesBeforeFail:C,prAuthAvailable:k,settingsLoaded:z,experimentalFeatures:A,insightsEnabled:H,memoryEnabled:T,devServerEnabled:W,todosEnabled:D,autoReloadOnVersionChange:P,toggleAutoMerge:q,toggleGlobalPause:de,toggleEnginePause:be,toggleShowQuickChatFAB:Ce,toggleAutoReloadOnVersionChange:Ae,refresh:j}}function x6(e){const{projectId:n,projects:s,projectsLoading:a,currentProject:r,setCurrentProject:o,addToast:l,openTaskDetail:c,closeTaskDetail:d}=e,u=i.useRef(!1),h=i.useRef(!1),m=i.useRef(null);return i.useEffect(()=>{if(!h.current){const b=window.location.pathname.match(/^\/tasks\/([A-Z]+-\d+)\/?$/);if(b){const y=b[1];if(/^[A-Z]+-\d+$/.test(y)){const N=new URLSearchParams(window.location.search);N.set("task",y);const S=N.toString(),C=window.history.state??{};window.history.replaceState(C,"",S?`/?${S}`:"/"),h.current=!0}}}const p=new URLSearchParams(window.location.search),g=p.get("project"),w=p.get("task");if(!w||a)return;if(g){const b=s.find(y=>y.id===g);if(!b){l(`Project '${g}' not found`,"error");return}r?.id!==b.id&&o(b)}if(u.current)return;u.current=!0,Ga(w,g??n).then(b=>{c(b),m.current=w}).catch(()=>{l(`Task ${w} not found`,"error")})},[n,s,a,r,o,l,c]),{handleDetailClose:i.useCallback(()=>{if(m.current){const p=new URLSearchParams(window.location.search);p.delete("task");const g=p.toString(),w=window.history.state??{};window.history.replaceState(w,"",g?`${window.location.pathname}?${g}`:window.location.pathname),m.current=null}d()},[d])}}function v6(){const[e,n]=i.useState([]),[s,a]=i.useState([]),[r,o]=i.useState([]),l=i.useRef(s),c=i.useRef(r);i.useEffect(()=>{Hs().then(h=>{n(h.models),l.current=h.favoriteProviders,c.current=h.favoriteModels,a(h.favoriteProviders),o(h.favoriteModels)}).catch(()=>{})},[]),i.useEffect(()=>{l.current=s},[s]),i.useEffect(()=>{c.current=r},[r]);const d=i.useCallback(async h=>{const m=l.current,p=m.includes(h)?m.filter(g=>g!==h):[h,...m];l.current=p,a(()=>p);try{await Kn({favoriteProviders:p,favoriteModels:c.current})}catch(g){throw l.current=m,a(()=>m),g}},[]),u=i.useCallback(async h=>{const m=c.current,p=m.includes(h)?m.filter(g=>g!==h):[h,...m];c.current=p,o(()=>p);try{await Kn({favoriteProviders:l.current,favoriteModels:p})}catch(g){throw c.current=m,o(()=>m),g}},[]);return{availableModels:e,favoriteProviders:s,favoriteModels:r,toggleFavoriteProvider:d,toggleFavoriteModel:u}}function y6({projectId:e,setupWizardOpen:n,openModelOnboarding:s,openSettings:a}){const r=i.useRef(!1),o=i.useRef(n);o.current=n,i.useEffect(()=>{if(n||!e||r.current)return;r.current=!0;let l=!1,c=!1;qo().then(({providers:d})=>{const u=d.some(m=>m.authenticated);if(d.length>0&&!u||d.length>0&&u)return ia().then(m=>{const f=!!(m.defaultProvider&&m.defaultModelId);(m.modelOnboardingComplete===!1||m.modelOnboardingComplete===void 0)&&(!u||!f)&&!qr()?l=!0:!u&&!qr()&&(c=!0)})}).then(()=>{if(o.current){r.current=!1;return}l?(li("onboarding:auto-triggered",{trigger:"first-run"}),s()):c&&(li("onboarding:auto-triggered",{trigger:"missing-provider"}),a("authentication"))}).catch(()=>{})},[e,n,s,a])}const ub="kb-update-banner-dismissed";function w6(){const[e,n]=i.useState(!0),[s,a]=i.useState(!1),[r,o]=i.useState(null),[l,c]=i.useState(null),[d,u]=i.useState(!1);i.useEffect(()=>{const m=sessionStorage.getItem(ub)==="true";u(m);let f=!1;return iS().then(p=>{f||p.disabled||(a(p.updateAvailable===!0),o(typeof p.latestVersion=="string"?p.latestVersion:null),c(typeof p.currentVersion=="string"?p.currentVersion:null))}).catch(()=>{}).finally(()=>{f||n(!1)}),()=>{f=!0}},[]);const h=i.useCallback(()=>{u(!0),sessionStorage.setItem(ub,"true")},[]);return{updateAvailable:s,latestVersion:r,currentVersion:l,loading:e,dismissed:d,dismiss:h}}const k6=["board","list","graph","agents","missions","chat","documents","research","evals","skills","mailbox","insights","memory","reliability","devserver","dev-server","stash-recovery"];function j6(e){return e!==null&&k6.includes(e)}function du(e){return e!==null&&(j6(e)||Mr(e))}const N6=ol("fusion-plugin-roadmap","roadmaps");function mb(e){return e==="devserver"?"dev-server":e}function hb(e){return e!=="roadmaps"?"board":mx("fusion-plugin-roadmap","roadmaps")?N6:"board"}function S6(e){const{projectsLoading:n,projectsError:s,currentProjectLoading:a,currentProject:r,projectsLength:o,setupWizardOpen:l,openSetupWizard:c,themeMode:d,setThemeMode:u}=e,[h,m]=i.useState(()=>{if(typeof window<"u"){const b=window.localStorage.getItem("kb-dashboard-view-mode");if(b==="overview"||b==="project")return b}return"overview"}),[f,p]=i.useState(()=>{const b=Wn("kb-dashboard-task-view");return b==="roadmaps"?hb(b):du(b)?b:"board"}),g=i.useRef(!1);i.useEffect(()=>{window.localStorage.setItem("kb-dashboard-view-mode",h)},[h]),i.useEffect(()=>{const b=Wn("kb-dashboard-task-view",r?.id);if(b==="roadmaps")p(hb(b));else if(du(b)){const y=!g.current&&b==="devserver";p(y?"devserver":mb(b))}else p("board");r?.id&&(g.current=!0)},[r?.id]),i.useEffect(()=>{ss("kb-dashboard-task-view",f,r?.id)},[r?.id,f]),i.useEffect(()=>{if(typeof window>"u")return;const b=new URLSearchParams(window.location.search).get("view");b&&du(b)&&p(mb(b))},[]),i.useEffect(()=>{n||a||r&&h==="overview"&&m("project")},[n,a,r,h]),i.useEffect(()=>{if(n||a||l||s||o>0||r)return;const b=window.setTimeout(()=>{c()},500);return()=>window.clearTimeout(b)},[n,s,o,a,r,l,c]);const w=i.useCallback(b=>{p(b)},[]),v=i.useCallback(()=>{const b=["dark","light","system"],y=b.indexOf(d),N=b[(y+1)%b.length];u(N)},[d,u]);return{viewMode:h,setViewMode:m,taskView:f,setTaskView:p,handleChangeTaskView:w,handleToggleTheme:v}}const uu=new Map,C6=6e4;function E6(e){const[n,s]=i.useState([]),[a,r]=i.useState(!0),[o,l]=i.useState(null),[c,d]=i.useState(0),u=i.useRef(!1),h=i.useCallback(()=>{const m=e??"default";uu.delete(m),d(f=>f+1)},[e]);return i.useEffect(()=>{const m=e??"default";let f=!1;async function p(){const g=uu.get(m);if(g&&Date.now()<g.expiresAt){if(f)return;s(g.views),r(!1);return}u.current||r(!0),l(null);try{const w=await GC(e);if(f)return;uu.set(m,{views:w,expiresAt:Date.now()+C6}),s(w)}catch(w){if(f)return;l(w instanceof Error?w.message:"Failed to fetch plugin dashboard views")}finally{f||(r(!1),u.current=!0)}}return p(),()=>{f=!0}},[e,c]),i.useMemo(()=>({views:n,loading:a,error:o,refetch:h}),[n,a,o,h])}function _6({taskView:e,context:n}){return t.jsx(IE,{viewId:e,context:n})}let pb=!1;function Vr(e,n){return function(){return i.createElement("span",null,`Bundled plugin view unavailable: ${e}#${n}`)}}async function M6(){const e="@fusion-plugin-examples/dependency-graph/dashboard-view",n="DependencyGraphDashboardView",a=(await Rn(()=>import("./dashboard-view-VNPB3ca0.js"),__vite__mapDeps([26,1,27,6,7,8,28])))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}async function A6(){const e="@fusion-plugin-examples/roadmap/dashboard-view",n="RoadmapDashboardView",a=(await Rn(()=>import("./dashboard-view-BWGH_fAq.js"),__vite__mapDeps([29,1,27,30])))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}async function R6(){const e="@fusion-plugin-examples/cli-printing-press/dashboard-view",n="CliPrintingPressWizardView";try{const a=(await import(e))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}catch{return{default:Vr(e,n)}}}async function I6(){const e="@fusion-plugin-examples/cli-printing-press/manage-view",n="CliPrintingPressManageView";try{const a=(await import(e))[n];return a?{default:a}:(console.warn(`[plugin-views] Missing export ${n} from ${e}`),{default:Vr(e,n)})}catch{return{default:Vr(e,n)}}}function By(){pb||(pb=!0,vl("fusion-plugin-dependency-graph","graph",i.lazy(M6)),vl("fusion-plugin-roadmap","roadmaps",i.lazy(A6)),vl("fusion-plugin-cli-printing-press","wizard",i.lazy(R6)),vl("fusion-plugin-cli-printing-press","manage",i.lazy(I6)))}function T6(e){const{setCurrentProject:n,clearCurrentProject:s,setViewMode:a,currentProject:r,refreshProjects:o,toggleFavoriteProvider:l,toggleFavoriteModel:c,addToast:d,openSettings:u,openSetupWizard:h,closeSetupWizard:m,closeModelOnboarding:f}=e,p=i.useCallback(R=>{n(R),a("project")},[n,a]),g=i.useCallback(()=>{s(),a("overview")},[s,a]),w=i.useCallback(()=>{u()},[u]),v=i.useCallback(()=>{h()},[h]),b=i.useCallback(R=>{m(),n(R),a("project"),d(`Project ${R.name} registered successfully`,"success"),o()},[m,n,a,d,o]),y=i.useCallback(()=>{f()},[f]),N=i.useCallback(async R=>{try{await _1(R.id),d(`Project ${R.name} paused`,"success"),await o()}catch{d(`Failed to pause project ${R.name}`,"error")}},[d,o]),S=i.useCallback(async R=>{try{await M1(R.id),d(`Project ${R.name} resumed`,"success"),await o()}catch{d(`Failed to resume project ${R.name}`,"error")}},[d,o]),C=i.useCallback(async R=>{try{await ex(R.id),d(`Project ${R.name} removed`,"success"),r?.id===R.id&&(s(),a("overview")),await o()}catch{d(`Failed to remove project ${R.name}`,"error")}},[r,s,a,d,o]),x=i.useCallback(async R=>{try{await l(R)}catch{d("Failed to update favorites","error")}},[l,d]),k=i.useCallback(async R=>{try{await c(R)}catch{d("Failed to update model favorites","error")}},[c,d]);return{handleSelectProject:p,handleViewAllProjects:g,handleOpenSettings:w,handleAddProject:v,handleSetupComplete:b,handleModelOnboardingComplete:y,handlePauseProject:N,handleResumeProject:S,handleRemoveProject:C,handleToggleFavorite:x,handleToggleModelFavorite:k}}function P6(e){const{createTask:n,ingestCreatedTasks:s,onPlanningTaskCreated:a,onPlanningTasksCreated:r,onSubtaskTasksCreated:o,addToast:l}=e,c=i.useCallback(async p=>n({...p,column:"triage",source:{sourceType:"dashboard_ui"}}),[n]),d=i.useCallback(async p=>await n({...p,column:"triage",source:{sourceType:"dashboard_ui"}}),[n]),u=i.useCallback(p=>{s([p]),a(p,l)},[l,s,a]),h=i.useCallback(p=>{s(p),r(p,l)},[l,s,r]),m=i.useCallback(p=>{s(p),o(p,l)},[l,s,o]),f=i.useCallback(p=>{l(`Imported ${p.id} from GitHub`,"success")},[l]);return{handleBoardQuickCreate:c,handleModalCreate:d,handlePlanningTaskCreated:u,handlePlanningTasksCreated:h,handleSubtaskTasksCreated:m,handleGitHubImport:f}}function $6(e,n){const{projectId:s,searchQuery:a}=n??{},[r,o]=i.useState([]),[l,c]=i.useState([]),[d,u]=i.useState(null),[h,m]=i.useState(!1),[f,p]=i.useState(null),g=i.useRef(null),w=i.useCallback(async()=>{if(!e){o([]),c([]),u(null),m(!1),p(null);return}g.current?.abort();const b=new AbortController;g.current=b,m(!0),p(null);try{const y=[tE(e),nE(e)];s&&(y.push(sE(e,s,a)),y.push(iE(e,s)));const N=await Promise.allSettled(y);if(b.signal.aborted)return;const S=N[0],C=N[1];if(S.status==="rejected"){p(`Failed to fetch node health: ${S.reason}`),m(!1);return}if(u(S.value),C.status==="rejected"){p(`Failed to fetch projects: ${C.reason}`),m(!1);return}if(o(C.value),s&&N[2]){const x=N[2];if(x.status==="rejected"){p(`Failed to fetch tasks: ${x.reason}`),m(!1);return}x.status==="fulfilled"&&c(x.value)}m(!1)}catch(y){b.signal.aborted||(p(y instanceof Error?y.message:"Unknown error"),m(!1))}},[e,s,a]);i.useEffect(()=>(w(),()=>{g.current?.abort()}),[w]);const v=i.useCallback(()=>{w()},[w]);return{projects:r,tasks:l,health:d,loading:h,error:f,refresh:v}}function D6(e){const[n,s]=i.useState(!1),[a,r]=i.useState(null);return i.useEffect(()=>{if(!e){s(!1),r(null);return}const o=`/api/proxy/${encodeURIComponent(e)}/events`;return pi(o,{events:{"task:created":l=>{r({type:"task:created",data:l.data})},"task:moved":l=>{r({type:"task:moved",data:l.data})},"task:updated":l=>{r({type:"task:updated",data:l.data})},"task:deleted":l=>{r({type:"task:deleted",data:l.data})},"task:merged":l=>{r({type:"task:merged",data:l.data})}},onOpen:()=>s(!0),onError:()=>s(!1)})},[e]),{isConnected:n,lastEvent:a}}const L6="fusion-dashboard-current-node",Uy=i.createContext(null);function O6({children:e}){const[n,s]=i.useState(null),[a,r]=i.useState(!0),o=i.useRef(!1),l=i.useRef(void 0);i.useEffect(()=>{let h=!1;async function m(){try{const f=await ia();if(h)return;l.current=f.dashboardCurrentNodeId;const p=f.dashboardCurrentNodeId;if(p&&(o.current=!0),!p)try{const g=localStorage.getItem(L6);if(g){const w=JSON.parse(g);w?.id&&w?.type==="remote"&&(l.current=w.id,await Kn({dashboardCurrentNodeId:w.id}).catch(()=>{}))}}catch{}}catch{}finally{h||r(!1)}}return m(),()=>{h=!0}},[]),i.useEffect(()=>{if(!a)if(n&&n.type==="remote"&&n.id){const h=n.id;l.current!==h&&(l.current=h,Kn({dashboardCurrentNodeId:h}).catch(()=>{}))}else n===null&&l.current!==void 0&&(l.current=void 0,Kn({dashboardCurrentNodeId:void 0}).catch(()=>{}))},[n,a]);const c=i.useCallback(h=>{s(h)},[]),d=i.useCallback(()=>{s(null),l.current=void 0,Kn({dashboardCurrentNodeId:void 0}).catch(()=>{})},[]),u={currentNode:n,currentNodeId:n?.id??null,isRemote:n!==null&&n.type==="remote",setCurrentNode:c,clearCurrentNode:d};return t.jsx(Uy.Provider,{value:u,children:e})}function F6(){const e=i.useContext(Uy);if(e===null)throw new Error("useNodeContext must be used within a NodeProvider");return e}const z6=["shellKind","shellMode","profileId","serverBaseUrl","serverLabel","shellCanOpenConnectionManager","hostKind","mode","connectionId","serverUrl","canOpenConnectionManager"],B6=["__FUSION_SHELL_HOST_CONTEXT__","__fusionShellHostContext","__FUSION_SHELL_CONTEXT__"];let yc=null,fb=!1;function U6(e){if(typeof e=="boolean")return e;if(typeof e=="string"){if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1}}function H6(e){if(!(typeof e!="string"||e.trim().length===0))try{const n=new URL(e);return n.protocol!=="http:"&&n.protocol!=="https:"?void 0:n.toString().replace(/\/$/,"")}catch{return}}function Hy(e){if(e==="browser"||e==="desktop-shell"||e==="mobile-shell")return e;if(e==="desktop")return"desktop-shell";if(e==="mobile")return"mobile-shell"}function q6(e){return e==="local"||e==="remote"?e:void 0}function qy(e){const n=q6(e.mode),s=typeof e.connectionId=="string"&&e.connectionId.trim()?e.connectionId:void 0,a=H6(e.serverUrl),r=U6(e.canOpenConnectionManager);return{kind:e.kind,...n?{mode:n}:{},...s?{connectionId:s}:{},...a?{serverUrl:a}:{},...r!==void 0?{canOpenConnectionManager:r}:{}}}function V6(e){for(const n of B6){const s=e[n];if(!s||typeof s!="object")continue;const a=s,r=Hy(a.kind??a.shellKind??a.hostKind);if(r)return r==="browser"?{kind:r}:qy({kind:r,mode:a.mode??a.shellMode,connectionId:a.connectionId??a.profileId,serverUrl:a.serverUrl??a.serverBaseUrl,canOpenConnectionManager:a.canOpenConnectionManager??a.shellCanOpenConnectionManager})}return null}function W6(e){let n;try{n=new URL(e.location.href)}catch{return null}const s=n.searchParams,a=Hy(s.get("hostKind")??s.get("kind")??s.get("shellKind"));return a?a==="browser"?{kind:a}:qy({kind:a,mode:s.get("mode")??s.get("shellMode"),connectionId:s.get("connectionId")??s.get("profileId"),serverUrl:s.get("serverUrl")??s.get("serverBaseUrl"),canOpenConnectionManager:s.get("canOpenConnectionManager")??s.get("shellCanOpenConnectionManager")}):null}function G6(e){try{const n=new URL(e.location.href);let s=!1;for(const r of z6)n.searchParams.has(r)&&(n.searchParams.delete(r),s=!0);if(!s)return;const a=n.pathname+(n.search?n.search:"")+n.hash;e.history.replaceState(e.history.state,"",a)}catch{}}function K6(e=window){const n=V6(e);if(n)return n;const s=W6(e);return s||(typeof e.fusionAPI<"u"?{kind:"desktop-shell"}:{kind:"browser"})}function Vy(e=window){return!fb&&typeof window<"u"&&(yc=K6(e),G6(e),fb=!0),yc??{kind:"browser"}}function J6(){return yc||(typeof window>"u"?{kind:"browser"}:Vy(window))}const Y6={kind:"browser"},Wy=i.createContext({host:Y6,isNativeShell:!1,kind:"browser"});function Q6(e){const n=e.kind!=="browser";return{host:e,isNativeShell:n,kind:e.kind,...n?{mode:e.mode,connectionId:e.connectionId,serverUrl:e.serverUrl,canOpenConnectionManager:e.canOpenConnectionManager}:{}}}function X6({children:e}){const n=i.useMemo(()=>Q6(J6()),[]);return t.jsx(Wy.Provider,{value:n,children:e})}function Z6(){return i.useContext(Wy)}function e3(e,n){const s=new URL(e);return n&&s.searchParams.set("rt",n),s.toString()}function t3({open:e,shellApi:n,shellState:s,onComplete:a}){const[r,o]=i.useState(s.desktopMode??"remote"),[l,c]=i.useState("Remote Server"),[d,u]=i.useState(""),[h,m]=i.useState(""),[f,p]=i.useState(null),[g,w]=i.useState(!1),[v,b]=i.useState(!1),y=s.host==="desktop-shell";i.useEffect(()=>{y&&o(s.desktopMode??"remote")},[y,s.desktopMode]);const N=i.useMemo(()=>y&&r==="local"?!0:d.trim().length>0,[y,r,d]);return e?t.jsx("div",{className:"modal-overlay open",children:t.jsxs("div",{className:"modal native-shell-onboarding-modal",children:[t.jsx("div",{className:"modal-header",children:t.jsx("h2",{children:"Welcome to Fusion"})}),t.jsxs("div",{className:"native-shell-onboarding-body",children:[t.jsx("p",{children:"Fusion helps you plan, run, and review AI-assisted engineering work."}),y&&t.jsxs("div",{className:"native-shell-onboarding-mode-row",children:[t.jsx("button",{type:"button",className:`btn ${r==="local"?"btn-primary":""}`,onClick:()=>o("local"),children:"Local Fusion"}),t.jsx("button",{type:"button",className:`btn ${r==="remote"?"btn-primary":""}`,onClick:()=>o("remote"),children:"Remote Server"})]}),(!y||r==="remote")&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"btn",onClick:async()=>{p(null),w(!0);try{const S=await n.startQrScan();u(S.serverUrl),m(S.authToken??"")}catch(S){p(S.message)}finally{w(!1)}},disabled:g,children:g?"Scanning…":"Scan QR"}),t.jsx("label",{className:"native-shell-onboarding-label",htmlFor:"native-shell-onboarding-profile-name",children:"Profile name"}),t.jsx("input",{id:"native-shell-onboarding-profile-name",className:"input",value:l,onChange:S=>c(S.target.value)}),t.jsx("label",{className:"native-shell-onboarding-label",htmlFor:"native-shell-onboarding-server-url",children:"Server URL"}),t.jsx("input",{id:"native-shell-onboarding-server-url",className:"input",value:d,onChange:S=>u(S.target.value),placeholder:"https://your-fusion-host"}),t.jsx("label",{className:"native-shell-onboarding-label",htmlFor:"native-shell-onboarding-auth-token",children:"Auth token (optional)"}),t.jsx("input",{id:"native-shell-onboarding-auth-token",className:"input",type:"password",value:h,onChange:S=>m(S.target.value)})]}),f&&t.jsx("p",{className:"form-error",role:"alert",children:f})]}),t.jsx("div",{className:"modal-actions",children:t.jsx("button",{type:"button",className:"btn btn-primary",disabled:!N||v,onClick:async()=>{p(null),b(!0);try{if(y&&r==="local"){await n.setDesktopMode("local"),a();return}const S=await n.saveProfile({name:l.trim()||"Remote Server",serverUrl:d,authToken:h||null});if(y&&await n.setDesktopMode("remote"),await n.setActiveProfile(S.id),typeof window<"u"&&s.host!=="web"){window.location.href=e3(S.serverUrl,S.authToken??null);return}a()}catch(S){p(S.message)}finally{b(!1)}},children:v?"Saving…":"Continue"})})]})}):null}function n3({open:e,shellApi:n,shellState:s,onClose:a}){const r=i.useMemo(()=>s.profiles.find(x=>x.id===s.activeProfileId)??null,[s.activeProfileId,s.profiles]),[o,l]=i.useState(null),[c,d]=i.useState({}),[u,h]=i.useState(null),[m,f]=i.useState(null);if(!e)return null;const p=o==="__new__",g=p?null:s.profiles.find(x=>x.id===o)??r,w=c.name??g?.name??"",v=c.serverUrl??g?.serverUrl??"",b=c.authToken??g?.authToken??"",y=()=>{l(null),d({}),f(null)},N=async()=>{f(null);try{const x=new URL(v.trim());if(!/^https?:$/.test(x.protocol))throw new Error("Server URL must use http or https");const k=await n.saveProfile({id:p?void 0:o??g?.id,name:w||"Remote Server",serverUrl:v,authToken:b||null});await n.setActiveProfile(k.id),l(k.id),d({})}catch(x){f(x.message)}},S=async()=>{f(null);try{const x=await n.startQrScan();l("__new__"),d({name:"",serverUrl:x.serverUrl,authToken:x.authToken??""})}catch(x){f(x.message)}},C=async()=>{u&&(await n.deleteProfile(u.id),h(null),y())};return t.jsx("div",{className:"modal-overlay open",children:t.jsxs("div",{className:"modal native-shell-connection-manager",role:"dialog","aria-label":"Connection Manager",children:[t.jsxs("div",{className:"modal-header",children:[t.jsx("h2",{children:"Connection Manager"}),t.jsx("button",{type:"button",className:"modal-close",onClick:a,"aria-label":"Close",children:"×"})]}),s.host==="desktop-shell"&&t.jsxs("div",{className:"native-shell-connection-manager__mode-row",children:[t.jsx("button",{type:"button",className:`btn ${s.desktopMode==="local"?"btn-primary":""}`,onClick:()=>void n.setDesktopMode("local"),children:"Local"}),t.jsx("button",{type:"button",className:`btn ${s.desktopMode!=="local"?"btn-primary":""}`,onClick:()=>void n.setDesktopMode("remote"),children:"Remote"})]}),t.jsx("div",{className:"native-shell-connection-manager__profiles",children:s.profiles.length===0?t.jsxs("div",{className:"card native-shell-connection-manager__empty-state",children:[t.jsx("p",{className:"settings-muted",children:"No remote servers saved yet."}),t.jsxs("div",{className:"native-shell-connection-manager__profile-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>{l("__new__"),d({name:"",serverUrl:"",authToken:""}),f(null)},children:"Add server"}),s.host==="mobile-shell"&&t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>void S(),children:"Scan QR"})]})]}):s.profiles.map(x=>t.jsxs("div",{className:"card native-shell-connection-manager__profile",children:[t.jsxs("div",{children:[t.jsx("strong",{children:x.name}),t.jsx("div",{className:"settings-muted",children:x.serverUrl}),x.id===s.activeProfileId&&t.jsx("span",{className:"native-shell-connection-manager__active-pill",children:"Active"})]}),t.jsxs("div",{className:"native-shell-connection-manager__profile-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm","aria-label":`Edit ${x.name}`,onClick:()=>{l(x.id),d(x)},children:"Edit"}),t.jsx("button",{type:"button",className:"btn btn-sm","aria-label":`Use ${x.name}`,onClick:()=>void n.setActiveProfile(x.id),children:"Use"}),t.jsx("button",{type:"button",className:"btn btn-sm btn-danger","aria-label":`Delete ${x.name}`,onClick:()=>h(x),children:"Delete"})]})]},x.id))}),t.jsxs("div",{className:"native-shell-connection-manager__mode-row",children:[t.jsx("button",{type:"button",className:"btn",onClick:()=>{l("__new__"),d({name:"",serverUrl:"",authToken:""}),f(null)},children:"Add connection"}),s.host==="mobile-shell"&&t.jsx("button",{type:"button",className:"btn",onClick:()=>void S(),children:"Scan QR"})]}),t.jsxs("div",{className:"form-group native-shell-connection-manager__editor",children:[t.jsx("label",{htmlFor:"native-shell-connection-manager-name",children:"Name"}),t.jsx("input",{id:"native-shell-connection-manager-name",className:"input",value:w,onChange:x=>d(k=>({...k,name:x.target.value}))}),t.jsx("label",{htmlFor:"native-shell-connection-manager-url",children:"Server URL"}),t.jsx("input",{id:"native-shell-connection-manager-url",className:"input",value:v,onChange:x=>d(k=>({...k,serverUrl:x.target.value}))}),t.jsx("label",{htmlFor:"native-shell-connection-manager-token",children:"Auth token (optional)"}),t.jsx("input",{id:"native-shell-connection-manager-token",className:"input",type:"password",value:b??"",onChange:x=>d(k=>({...k,authToken:x.target.value}))}),m&&t.jsx("p",{className:"form-error",role:"alert",children:m})]}),u&&t.jsxs("div",{className:"native-shell-connection-manager__delete-confirm",role:"alertdialog","aria-label":"Delete server confirmation",children:[t.jsxs("p",{children:["Delete ",t.jsx("strong",{children:u.name}),"? This removes the saved profile."]}),t.jsxs("div",{className:"native-shell-connection-manager__profile-actions",children:[t.jsx("button",{type:"button",className:"btn btn-sm",onClick:()=>h(null),children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-sm btn-danger",onClick:()=>void C(),children:"Delete"})]})]}),t.jsxs("div",{className:"modal-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:a,children:"Close"}),t.jsx("button",{type:"button",className:"btn",onClick:y,children:"Cancel"}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:()=>void N(),disabled:!v.trim(),children:"Save"})]})]})})}function s3(e){if(e.hostKind==="desktop-shell"&&e.mode==="local")return{title:"Desktop local mode",actionLabel:"Switch server",dotClassName:"status-dot status-dot--online"};const n=e.profileLabel??e.profileId,s=e.serverOrigin,a=n&&s?`${n} · ${s}`:n??s;return e.mode==="remote"?{title:a??"Connection info unavailable",actionLabel:e.hostKind==="desktop-shell"?"Switch server":"Manage connections",dotClassName:a?"status-dot status-dot--online":"status-dot status-dot--pending"}:{title:a??"Connection info unavailable",actionLabel:"Manage connections",dotClassName:a?"status-dot status-dot--online":"status-dot status-dot--pending"}}function gb({status:e,onError:n}){if(e.hostKind==="browser"||!e.available)return null;const s=s3(e),a=i.useCallback(async()=>{const r=await e.openConnectionManager();!r.ok&&r.reason==="failed"&&n?.(r.error??"Failed to open connection manager")},[n,e]);return t.jsxs("button",{type:"button",className:"btn shell-connection-status",onClick:()=>void a(),"data-testid":"shell-connection-status-button",children:[t.jsx("span",{className:s.dotClassName,"aria-hidden":"true"}),t.jsx("span",{className:"shell-connection-status__kind",children:e.hostKind==="desktop-shell"?"Desktop":"Mobile"}),t.jsx("span",{className:"shell-connection-status__summary",title:s.title,children:s.title}),t.jsx("span",{className:"shell-connection-status__action",children:s.actionLabel})]})}function i3(e){if(e)try{return new URL(e).origin}catch{return}}function a3(e,n){const s=e.profiles.find(a=>a.id===e.activeProfileId)??null;return s||(n.kind==="browser"||!n.connectionId?null:e.profiles.find(a=>a.id===n.connectionId)??null)}async function r3(e){if(!e?.getState)return null;try{return await e.getState()}catch{return null}}async function o3(e,n=window){const s=n.fusionAPI,a=n.fusionShell,r=await r3(a),o=r?a3(r,e):null,l=e.kind==="browser"?void 0:e.mode??r?.desktopMode,c=o?.id??(e.kind==="browser"?void 0:e.connectionId),d=o?.name,u=i3(o?.serverUrl??(e.kind==="browser"?void 0:e.serverUrl)),h=e.kind==="desktop-shell"&&typeof s?.openConnectionManager=="function",m=e.kind==="mobile-shell"&&typeof a?.openConnectionManager=="function",f=h||m;return{hostKind:e.kind,available:f,...l?{mode:l}:{},...c?{profileId:c}:{},...d?{profileLabel:d}:{},...u?{serverOrigin:u}:{},openConnectionManager:async()=>{try{return h?(await s.openConnectionManager?.(),{ok:!0}):m?(await a.openConnectionManager(),{ok:!0}):{ok:!1,reason:"unsupported"}}catch(p){return{ok:!1,reason:"failed",error:p instanceof Error?p.message:String(p)}}}}}function l3({open:e}){const[n,s]=i.useState(""),a=i.useRef(null);i.useEffect(()=>{e&&a.current?.focus()},[e]);const r=i.useCallback(()=>{const l=n.trim();l&&(IN(l),window.location.reload())},[n]),o=i.useCallback(()=>{TN(),window.location.reload()},[]);return e?t.jsx("div",{className:"modal-overlay open auth-token-recovery-overlay",role:"presentation",onKeyDownCapture:l=>{l.key==="Escape"&&(l.preventDefault(),l.stopPropagation())},children:t.jsxs("div",{className:"modal modal-md",role:"dialog","aria-modal":"true","aria-labelledby":"auth-token-recovery-title","aria-describedby":"auth-token-recovery-description",children:[t.jsx("div",{className:"modal-header auth-token-recovery-header",children:t.jsx("h3",{id:"auth-token-recovery-title",children:"Authentication token required"})}),t.jsxs("div",{className:"auth-token-recovery-content",children:[t.jsx("p",{id:"auth-token-recovery-description",children:"This dashboard session can't authenticate with the daemon. Set a replacement token or clear the current token and retry."}),t.jsxs("div",{className:"auth-token-recovery-field",children:[t.jsx("label",{htmlFor:"auth-token-recovery-input",children:"Replacement token"}),t.jsx("input",{ref:a,id:"auth-token-recovery-input",className:"input",type:"password",value:n,onChange:l=>s(l.target.value),placeholder:"Paste token",autoComplete:"off",spellCheck:!1})]})]}),t.jsxs("div",{className:"modal-actions auth-token-recovery-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:o,children:"Clear token and retry"}),t.jsx("button",{type:"button",className:"btn btn-primary",onClick:r,disabled:n.trim().length===0,children:"Set token and reload"})]})]})}):null}const c3=200,d3=i.lazy(()=>Rn(()=>import("./AgentsView-CIH4Acck.js"),__vite__mapDeps([31,1,4,5,32,17,6,7,8,33])).then(e=>({default:e.AgentsView}))),u3=i.lazy(()=>Rn(()=>import("./DocumentsView-B-ELcw4o.js"),__vite__mapDeps([34,1,6,7,8,35])).then(e=>({default:e.DocumentsView}))),m3=i.lazy(()=>Rn(()=>import("./InsightsView-DLF49bzu.js"),__vite__mapDeps([36,1,24,6,7,8,37])).then(e=>({default:e.InsightsView}))),h3=i.lazy(()=>Rn(()=>import("./ResearchView-C14Zh7c9.js"),__vite__mapDeps([38,1,6,7,8,39])).then(e=>({default:e.ResearchView}))),p3=i.lazy(()=>Rn(()=>import("./EvalsView-Ccl9QBYN.js"),__vite__mapDeps([40,1,6,7,8,41])).then(e=>({default:e.EvalsView}))),f3=i.lazy(()=>Rn(()=>import("./NodesView-Zxusnhxu.js"),__vite__mapDeps([42,1,19,32,6,7,8,43])).then(e=>({default:e.NodesView}))),g3=i.lazy(()=>Rn(()=>import("./ChatView-DqJoFquZ.js"),__vite__mapDeps([44,1,6,7,8,45])).then(e=>({default:e.ChatView}))),b3=i.lazy(()=>Rn(()=>import("./SkillsView-DWVtT2-8.js"),__vite__mapDeps([46,1,6,7,8,47])).then(e=>({default:e.SkillsView}))),x3=i.lazy(()=>Rn(()=>import("./MemoryView-CE1D9euM.js"),__vite__mapDeps([48,1,22,23,6,7,8,49])).then(e=>({default:e.MemoryView}))),v3=i.lazy(()=>Rn(()=>import("./ReliabilityView-KmH60I_5.js"),__vite__mapDeps([50,1,51])).then(e=>({default:e.ReliabilityView}))),y3=i.lazy(()=>Rn(()=>import("./DevServerView-Bd8JZ-3C.js"),__vite__mapDeps([52,1,6,7,8,53])).then(e=>({default:e.DevServerView})));i.lazy(()=>Rn(()=>import("./TodoView-hbD0NOCY.js"),__vite__mapDeps([13,1,6,7,8,14])).then(e=>({default:e.TodoView})));const w3=i.lazy(()=>Rn(()=>import("./StashRecoveryView-CKkaWzzc.js"),__vite__mapDeps([54,1,6,7,8,55])).then(e=>({default:e.StashRecoveryView})));function k3(){(typeof window<"u"&&window.requestIdleCallback||(n=>setTimeout(n,200)))(()=>{Rn(()=>import("./AgentsView-CIH4Acck.js"),__vite__mapDeps([31,1,4,5,32,17,6,7,8,33])),Rn(()=>import("./DocumentsView-B-ELcw4o.js"),__vite__mapDeps([34,1,6,7,8,35])),Rn(()=>import("./InsightsView-DLF49bzu.js"),__vite__mapDeps([36,1,24,6,7,8,37])),Rn(()=>import("./ResearchView-C14Zh7c9.js"),__vite__mapDeps([38,1,6,7,8,39])),Rn(()=>import("./EvalsView-Ccl9QBYN.js"),__vite__mapDeps([40,1,6,7,8,41])),Rn(()=>import("./NodesView-Zxusnhxu.js"),__vite__mapDeps([42,1,19,32,6,7,8,43])),Rn(()=>import("./ChatView-DqJoFquZ.js"),__vite__mapDeps([44,1,6,7,8,45])),Rn(()=>import("./SkillsView-DWVtT2-8.js"),__vite__mapDeps([46,1,6,7,8,47])),Rn(()=>import("./MemoryView-CE1D9euM.js"),__vite__mapDeps([48,1,22,23,6,7,8,49])),Rn(()=>import("./ReliabilityView-KmH60I_5.js"),__vite__mapDeps([50,1,51])),Rn(()=>import("./DevServerView-Bd8JZ-3C.js"),__vite__mapDeps([52,1,6,7,8,53])),Rn(()=>import("./TodoView-hbD0NOCY.js"),__vite__mapDeps([13,1,6,7,8,14])),Rn(()=>import("./StashRecoveryView-CKkaWzzc.js"),__vite__mapDeps([54,1,6,7,8,55]))})}By();const mu="kb-setup-warning-dismissed",bb="kb-dashboard-working-branch-filter",xb="kb-dashboard-base-branch-filter",vb="__fusion:no-branch__",Gy="fusion:approval-banner-dismissed",Jl="kb-capacity-risk-banner-dismissed",j3=.8;function N3(e,n){return e==="awaiting-approval"&&n!=="awaiting-approval"}function yb(e){if(!e)return 0;const n=Date.parse(e);return Number.isFinite(n)?n:0}function S3(){if(typeof window>"u")return new Map;try{const e=window.localStorage.getItem(Gy);if(!e)return new Map;const n=JSON.parse(e),s=new Map;for(const[a,r]of Object.entries(n))typeof r=="number"&&Number.isFinite(r)&&s.set(a,r);return s}catch{return new Map}}function wb(e){if(!(typeof window>"u"))try{const n={};for(const[s,a]of e)n[s]=a;window.localStorage.setItem(Gy,JSON.stringify(n))}catch{}}function C3(e,n){const s=new URL(e);return n&&s.searchParams.set("rt",n),s.toString()}function E3(e,n,s){return!n||s||e.host==="web"?!1:e.host==="mobile-shell"?!e.activeProfileId:e.desktopMode==="local"?!1:!e.activeProfileId}function _3(){const{toasts:e,addToast:n,removeToast:s}=l6(),{shellApi:a,state:r,ready:o,openConnectionManagerSignal:l}=ky(),c=Z6();i.useEffect(()=>{k3()},[]);const{projects:d,loading:u,error:h,refresh:m}=s6(),{nodes:f}=Pc(),{currentNode:p,currentNodeId:g,isRemote:w,setCurrentNode:v,clearCurrentNode:b}=F6(),{currentProject:y,setCurrentProject:N,clearCurrentProject:S,loading:C}=r6(d,{nodeId:g}),{hasAiProvider:x,hasGithub:k,loading:R,hasWarnings:z}=xy(y?.id),{updateAvailable:_,latestVersion:A,currentVersion:Q,dismissed:H,dismiss:M}=w6();i.useEffect(()=>{if(g&&!p&&f.length>0){const we=f.find(ht=>ht.id===g);if(we){v(we);return}}g&&f.length>0&&(f.some(ht=>ht.id===g)||b())},[g,p,f,v,b]);const[T,F]=i.useState(""),[W,oe]=i.useState(""),[D,E]=i.useState("");i.useEffect(()=>{oe(Wn(bb,y?.id)??""),E(Wn(xb,y?.id)??"")},[y?.id]);const P=i.useCallback(we=>{oe(we),ss(bb,we,y?.id)},[y?.id]),$=i.useCallback(we=>{E(we),ss(xb,we,y?.id)},[y?.id]),j=$6(g,{projectId:y?.id,searchQuery:T||void 0});D6(g);const q=w&&j.projects.length>0?j.projects:d,{themeMode:de,colorTheme:be,dashboardFontScalePct:Ce,setThemeMode:Ae,setColorTheme:ae,setDashboardFontScalePct:X}=f6(),{sessions:pe,generating:ie,needsInput:ye,planningSessions:ee,dismissSession:L}=Kz(y?.id),Y=pe.filter(we=>we.status==="awaiting_input"||we.status==="error"),me=Qz(),B=g6({projectId:y?.id,planningSessions:ee}),Ne=si()==="mobile",{pushNav:te,replaceCurrent:Be}=k4({enabled:!0}),{viewMode:$e,setViewMode:ct,taskView:De,handleChangeTaskView:le}=S6({projectsLoading:u,projectsError:h,currentProjectLoading:C,currentProject:y,projectsLength:d.length,setupWizardOpen:B.setupWizardOpen,openSetupWizard:B.openSetupWizard,themeMode:de,setThemeMode:Ae}),{views:_e}=E6(y?.id),Le=i.useMemo(()=>{const we=_e.find(ht=>ht.pluginId==="fusion-plugin-dependency-graph"&&ht.view.viewId==="graph");return we?`plugin:${we.pluginId}:${we.view.viewId}`:mx("fusion-plugin-dependency-graph","graph")?"plugin:fusion-plugin-dependency-graph:graph":null},[_e]),mt=i.useCallback(we=>{we==="missions"&&(Je(void 0),bt(void 0),se(void 0));const ht=De;le(we),ht!==we&&te({type:"view",revert:()=>le(ht)})},[le,De,te]),Ve=De==="board"||De==="list",{tasks:ge,createTask:he,moveTask:Pe,pauseTask:dt,unpauseTask:jt,deleteTask:nt,mergeTask:xt,retryTask:Ie,resetTask:Qe,updateTask:ot,duplicateTask:Tt,archiveTask:Mt,unarchiveTask:We,archiveAllDone:J,loadArchivedTasks:ke,ingestCreatedTasks:lt,lastFetchTimeMs:ve}=Zz({...y?{projectId:y.id}:{},searchQuery:T||void 0,sseEnabled:Ve}),st=w&&j.tasks.length>0?j.tasks:ge,[Ue,fe]=i.useState(!1),[Xe,vt]=i.useState(0),St=i.useRef(performance.now()),Et=i.useRef(!1),Pt=i.useRef(!1),Jt=i.useMemo(()=>u?"projects":C?"project":"tasks",[u,C]);i.useEffect(()=>{if(!u&&!Et.current){Et.current=!0;const we=`projects loaded at ${Math.round(performance.now()-St.current)}ms from mount`;console.log(`[App] ${we}`)}if(!C&&!Pt.current){Pt.current=!0;const we=`current-project resolved at ${Math.round(performance.now()-St.current)}ms from mount`;console.log(`[App] ${we}`)}},[u,C]),i.useEffect(()=>{if(Ue||u||C)return;const we=performance.now(),ht=window.setTimeout(()=>{const Oe=`dashboard ready at ${Math.round(performance.now()-St.current)}ms from mount (settle delay=${Math.round(performance.now()-we)}ms)`;console.log(`[App] ${Oe}`),fe(!0)},c3);return()=>{window.clearTimeout(ht)}},[Ue,u,C]);const{keyboardOpen:dn}=oa({enabled:Ne}),Vt=Ne&&dn&&!B.anyModalOpen;_i(Vt);const[ln,fn]=i.useState(0),[_n,an]=i.useState(0),[Dn,vn]=i.useState(!1),[Ut,rn]=i.useState(0),[bn,en]=i.useState(null),Yt=i.useRef(new Map),tn=i.useRef(new Set),Qt=i.useRef(S3()),Kt=i.useCallback(()=>{ax(y?.id).then(we=>{fn(we.unreadCount),an(we.pendingApprovalCount??0)}).catch(we=>{console.warn("[App] Failed to fetch mailbox unread count:",we)})},[y?.id]);i.useEffect(()=>{const we=new Map,ht=new Set;for(const Oe of ge)we.set(Oe.id,Oe.status),Oe.status==="awaiting-approval"&&ht.add(`task:${Oe.id}`);Yt.current=we,tn.current=ht},[ge]),i.useEffect(()=>{Kt();const we=new URLSearchParams;y?.id&&we.set("projectId",y.id);const ht=we.size>0?`?${we.toString()}`:"",Oe=tt=>{const Lt=Qt.current.get(tt.dedupeKey);Lt!==void 0&&tt.updatedAtMs<=Lt||en(tt)};return pi(`/api/events${ht}`,{onReconnect:Kt,events:{"message:sent":Kt,"message:received":Kt,"message:read":Kt,"message:deleted":Kt,"approval:requested":tt=>{Kt();try{const Lt=JSON.parse(tt.data),Sn=Lt.id?`approval:${Lt.id}`:Lt.taskId?`task:${Lt.taskId}`:void 0;if(!Sn||tn.current.has(Sn))return;tn.current.add(Sn),Oe({dedupeKey:Sn,updatedAtMs:yb(Lt.updatedAt??Lt.createdAt)})}catch{}},"approval:updated":Kt,"approval:decided":Kt,"task:updated":tt=>{try{const Lt=JSON.parse(tt.data);if(!Lt?.id)return;const Sn=`task:${Lt.id}`,qs=Yt.current.get(Lt.id);if(Yt.current.set(Lt.id,Lt.status),Lt.status!=="awaiting-approval"){tn.current.delete(Sn),Qt.current.delete(Sn),wb(Qt.current);return}if(tn.current.has(Sn))return;N3(Lt.status,qs)&&(tn.current.add(Sn),Oe({dedupeKey:Sn,updatedAtMs:yb(Lt.updatedAt)}),Kt())}catch{}}}})},[y?.id,Kt]),i.useEffect(()=>{De==="chat"&&vn(!1)},[De]),i.useEffect(()=>{let we=!1;const ht=async()=>{try{const tt=await I("/stash-recovery/orphans");we||rn(tt.count??0)}catch{we||rn(0)}};ht();const Oe=window.setInterval(()=>void ht(),3e4);return()=>{we=!0,window.clearInterval(Oe)}},[y?.id]),i.useEffect(()=>{const we=new URLSearchParams;y?.id&&we.set("projectId",y.id);const ht=we.size>0?`?${we.toString()}`:"";return pi(`/api/events${ht}`,{events:{"chat:message:added":Oe=>{try{const tt=JSON.parse(Oe.data);if(tt.role!=="assistant"||De==="chat"||tt.projectId&&y?.id&&tt.projectId!==y.id)return;vn(!0)}catch{}},"chat:room:message:added":Oe=>{try{const tt=JSON.parse(Oe.data);if(tt.role==="user"||De==="chat"||tt.projectId&&y?.id&&tt.projectId!==y.id)return;vn(!0)}catch{}}}})},[y?.id,De]);const xn=i.useMemo(()=>Array.from(new Set(st.map(we=>we.branch?.trim()).filter(we=>!!(we&&we.length>0)))).sort((we,ht)=>we.localeCompare(ht)),[st]),un=i.useMemo(()=>Array.from(new Set(st.map(we=>we.baseBranch?.trim()).filter(we=>!!(we&&we.length>0)))).sort((we,ht)=>we.localeCompare(ht)),[st]),pn=i.useMemo(()=>st.filter(we=>{const ht=we.branch?.trim()??"",Oe=we.baseBranch?.trim()??"";if(W===vb){if(ht.length>0)return!1}else if(W.length>0&&ht!==W)return!1;if(D===vb){if(Oe.length>0)return!1}else if(D.length>0&&Oe!==D)return!1;return!0}),[st,W,D]),[$t,ue]=i.useState(!1),[Re,et]=i.useState(!1),[at,Je]=i.useState(void 0),[Nt,bt]=i.useState(void 0),[At,se]=i.useState(void 0),[re,Ge]=i.useState(!1),[Ct,Gt]=i.useState(!1),[cn,jn]=i.useState(null),[Ln,mn]=i.useState(()=>Wn(mu,y?.id)==="true"),[Un,ce]=i.useState(()=>Wn(Jl,y?.id)==="true");i.useEffect(()=>{mn(Wn(mu,y?.id)==="true")},[y?.id]),i.useEffect(()=>{ce(Wn(Jl,y?.id)==="true")},[y?.id]),i.useEffect(()=>{let we=!1;return UN().then(ht=>{we||jn(ht)}).catch(()=>{we||jn(null)}),()=>{we=!0}},[]),i.useEffect(()=>{const we=()=>{Gt(!0)};return window.addEventListener(ju,we),()=>{window.removeEventListener(ju,we)}},[]);const it=i.useCallback(()=>{ss(mu,"true",y?.id),mn(!0)},[y?.id]),ut=i.useCallback(()=>{ss(Jl,"true",y?.id),ce(!0)},[y?.id]),{maxConcurrent:wt,autoMerge:G,globalPaused:ze,enginePaused:Ht,taskStuckTimeoutMs:gn,staleHighFanoutBlockerAgeThresholdMs:Mn,capacityRiskBannerEnabled:je,capacityRiskTodoThreshold:pt,showQuickChatFAB:Dt,maxTotalRetriesBeforeFail:Zt,prAuthAvailable:Nn,settingsLoaded:Xt,experimentalFeatures:qt,insightsEnabled:Ot,memoryEnabled:qn,devServerEnabled:On,todosEnabled:os,toggleAutoMerge:xs,toggleGlobalPause:ms,toggleEnginePause:vs,refresh:as}=b6(y?.id),{stats:Tn}=Iy(y?.id),ys=i.useMemo(()=>st.filter(we=>we.column==="in-progress").length,[st]),Ls=i.useMemo(()=>st.filter(we=>we.column==="in-review").length,[st]),_s=i.useMemo(()=>bN({todoCount:Tn?.todoTaskCount??0,inProgressCount:ys,inReviewCount:Ls,idleNonEphemeralAgentCount:Tn?.idleNonEphemeralCount??0,threshold:pt??gN}),[Tn?.todoTaskCount,Tn?.idleNonEphemeralCount,ys,Ls,pt]),Z=i.useRef(je),Ee=i.useRef(pt),gt=i.useRef(y?.id);i.useEffect(()=>{if(gt.current!==y?.id){gt.current=y?.id,Z.current=je,Ee.current=pt;return}const we=Z.current,ht=Ee.current;(!we&&je||ht!==pt)&&(Ya(Jl,y?.id),ce(!1)),gt.current=y?.id,Z.current=je,Ee.current=pt},[je,pt,y?.id]);const zt=qt.skillsView===!0,O=qt.nodesView===!0,He=qt.researchView===!0,Ze=qt.evalsView===!0,Ye=qt.agentOnboarding===!0,ft=!0,Rt=i.useCallback(()=>{B.closeSettings(),vt(we=>we+1),as()},[B,as]);i.useEffect(()=>{if(Xt&&!Mr(De)){if(De==="graph"&&!Le){le("board");return}De==="skills"&&!zt&&le("board"),De==="insights"&&!Ot&&le("board"),De==="memory"&&!qn&&le("board"),(De==="devserver"||De==="dev-server")&&!On&&le("board"),De==="research"&&!He&&le("board"),De==="evals"&&!Ze&&le("board")}},[De,Xt,zt,Ot,le,ft,qn,On,He,Ze,Le]),i.useEffect(()=>{$t&&!O&&ue(!1)},[$t,O]);const{availableModels:Ft,favoriteProviders:on,favoriteModels:yn,toggleFavoriteProvider:ne,toggleFavoriteModel:Fe}=v6();y6({projectId:y?.id,setupWizardOpen:B.setupWizardOpen,openModelOnboarding:B.openModelOnboarding,openSettings:B.openSettings});const{handleSelectProject:qe,handleViewAllProjects:Bt,handleAddProject:nn,handleSetupComplete:An,handleModelOnboardingComplete:es,handlePauseProject:Hn,handleResumeProject:Zn,handleRemoveProject:ls,handleToggleFavorite:hs,handleToggleModelFavorite:qi}=T6({setCurrentProject:N,clearCurrentProject:S,setViewMode:ct,currentProject:y,refreshProjects:m,toggleFavoriteProvider:ne,toggleFavoriteModel:Fe,addToast:n,openSettings:B.openSettings,openSetupWizard:B.openSetupWizard,closeSetupWizard:B.closeSetupWizard,closeModelOnboarding:B.closeModelOnboarding}),{handleDetailClose:_a}=x6({projectId:y?.id,projects:d,projectsLoading:u,currentProject:y,setCurrentProject:N,addToast:n,openTaskDetail:B.openDetailTask,closeTaskDetail:B.closeDetailTask}),Mi=i.useCallback(async({insightId:we,title:ht,description:Oe})=>{await he({title:ht,description:Oe,column:"triage",source:{sourceType:"dashboard_ui",sourceMetadata:{origin:"insights",insightId:we}}})},[he]),{handleBoardQuickCreate:Vi,handleModalCreate:Ms,handlePlanningTaskCreated:Wi,handlePlanningTasksCreated:Ma,handleSubtaskTasksCreated:Ai,handleGitHubImport:to}=P6({createTask:he,ingestCreatedTasks:lt,onPlanningTaskCreated:B.onPlanningTaskCreated,onPlanningTasksCreated:B.onPlanningTasksCreated,onSubtaskTasksCreated:B.onSubtaskTasksCreated,addToast:n}),Aa=i.useCallback((we,ht)=>{ht==="changes"?B.openDetailWithChangesTab(we):B.openDetailTask(we,ht),te({type:"modal",close:B.closeDetailTask})},[B,te]),fi=i.useCallback(async we=>{try{const ht=await Ga(we,y?.id);B.openDetailTask(ht,"logs"),te({type:"modal",close:B.closeDetailTask})}catch(ht){n(`Failed to open task logs: ${ht.message}`,"error")}},[B,y?.id,n,te]),[ai,Gi]=i.useState([]);i.useEffect(()=>{let we=!1;return sl(y?.id).then(ht=>{we||Gi(ht)}).catch(()=>{we||Gi([])}),()=>{we=!0}},[y?.id]);const la=i.useMemo(()=>new Map(ai.map(we=>[we.id,we.name])),[ai]);i.useCallback(()=>{O&&ue(we=>!we)},[O]);const Ki=i.useCallback(()=>{O&&($t?ue(!1):(ue(!0),te({type:"view",revert:()=>ue(!1)})))},[O,$t,te]),gi=i.useCallback((we,ht,Oe)=>{B.openDetailTask(we,ht,Oe),te({type:"modal",close:B.closeDetailTask})},[B,te]),ts=i.useCallback(we=>{B.openSettings(we),te({type:"modal",close:Rt})},[B,te,Rt]),Ra=i.useCallback(()=>{B.openNewTask(),te({type:"modal",close:B.closeNewTask})},[B,te]),Ri=i.useCallback(()=>{B.openPlanning(),te({type:"modal",close:B.closePlanning})},[B,te]),sr=i.useCallback(we=>{B.openPlanningWithInitialPlan(we),te({type:"modal",close:B.closePlanning})},[B,te]),Ji=i.useCallback(()=>{B.resumePlanning(),te({type:"modal",close:B.closePlanning})},[B,te]),ca=i.useCallback(we=>{B.openSubtaskBreakdown(we),te({type:"modal",close:B.closeSubtask})},[B,te]),da=i.useCallback(()=>{B.openGitHubImport(),te({type:"modal",close:B.closeGitHubImport})},[B,te]),bi=i.useCallback(()=>{B.terminalOpen?B.toggleTerminal():(B.toggleTerminal(),te({type:"modal",close:B.closeTerminal}))},[B,te]),Pn=i.useCallback((we,ht)=>{B.openFiles(we,ht),te({type:"modal",close:B.closeFiles})},[B,te]),ir=i.useCallback((we,ht)=>{B.openFiles(ht?.workspace,we),te({type:"modal",close:B.closeFiles})},[B,te]),ua=i.useCallback(()=>{B.openTodos(),te({type:"modal",close:B.closeTodos})},[B,te]),Ii=i.useCallback(()=>{B.openActivityLog(),te({type:"modal",close:B.closeActivityLog})},[B,te]),ar=i.useCallback(()=>{B.openGitManager(),te({type:"modal",close:B.closeGitManager})},[B,te]),rr=i.useCallback(()=>{B.openSystemStats(),te({type:"modal",close:B.closeSystemStats})},[B,te]),or=i.useCallback(()=>{B.openSchedules(),te({type:"modal",close:B.closeSchedules})},[B,te]),ma=i.useCallback(()=>{B.openScripts(),te({type:"modal",close:B.closeScripts})},[B,te]),Ia=i.useCallback(()=>{B.openWorkflowSteps(),te({type:"modal",close:B.closeWorkflowSteps})},[B,te]),Ta=i.useCallback(we=>{B.openUsage(we),te({type:"modal",close:B.closeUsage})},[B,te]),Pa=i.useCallback(async(we,ht)=>{await B.runScript(we,ht),Be({type:"modal",close:B.closeTerminal})},[B,Be]),no=i.useCallback(()=>{B.closeSettings(),B.openModelOnboarding(),Be({type:"modal",close:B.closeModelOnboarding})},[B,Be]),xi=i.useCallback(()=>{B.setFileWorkspace("project"),B.openFiles()},[B]),ri=i.useCallback(async()=>{et(!0);try{await m()}finally{et(!1)}},[m]),vi=i.useCallback(we=>{bt(we),Je(void 0),le("missions")},[le]),lr=i.useCallback(we=>{we.type==="planning"?B.openPlanningWithSession(we.id):we.type==="subtask"?B.openSubtaskWithSession(we.id):we.type==="mission_interview"?(bt(void 0),Je(we.id),se(void 0),le("missions")):(we.type==="milestone_interview"||we.type==="slice_interview")&&(Je(void 0),bt(void 0),se(we.id),le("missions"))},[le,B]),$a=i.useCallback(()=>{},[]),cr=i.useCallback(()=>{},[]),[yi,dr]=i.useState(!1),[ur,Da]=i.useState(!1),[Yi,mr]=i.useState(null),U=E3(r,o,yi);i.useEffect(()=>{!a||l===0||Da(!0)},[a,l]),i.useEffect(()=>{let we=!1;return o3(c.host).then(ht=>{we||mr(ht)}),()=>{we=!0}},[c.host,r.activeProfileId,r.desktopMode,r.host,r.profiles]),i.useEffect(()=>{r.host==="desktop-shell"&&r.desktopMode==="local"&&(r.localServer?.status!=="ready"||!r.localServer.port||window.location.port!==String(r.localServer.port)&&(window.location.href=`http://localhost:${r.localServer.port}`))},[r]),i.useEffect(()=>{if(r.host!=="desktop-shell"||r.desktopMode!=="remote")return;const we=r.profiles.find(Oe=>Oe.id===r.activeProfileId);if(!we||typeof window>"u")return;const ht=C3(we.serverUrl,we.authToken??null);window.location.href!==ht&&(window.location.href=ht)},[r]);const Te=!u&&!C&&d.length===0&&!y&&!!h,Ke=()=>{if(Te)return t.jsx(KF,{errorMessage:h??"Failed to fetch projects",isRetrying:Re,onRetry:ri,onManageConnection:a?()=>{a.openConnectionManager()}:void 0});if($t)return t.jsx("div",{className:"nodes-management-overlay",children:t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(f3,{addToast:n,onClose:()=>ue(!1)})})})});if($e==="overview")return t.jsx(js,{children:t.jsx(y4,{projects:d,loading:u,onSelectProject:qe,onAddProject:nn,onPauseProject:Hn,onResumeProject:Zn,onRemoveProject:ls,nodes:f})});const we=De==="graph"?Le:Mr(De)?De:null;return we?t.jsx(js,{children:t.jsx(_6,{taskView:we,context:{projectId:y?.id,tasks:w&&j.tasks.length>0?j.tasks:ge,workflowSteps:ai,openTaskDetail:(ht,Oe)=>gi(ht,Oe),renderTaskCard:ht=>t.jsx(Wo,{task:ht,projectId:y?.id,onOpenDetail:Oe=>gi(Oe),addToast:n,workflowStepNameLookup:la,disableDrag:!0}),addToast:n}})}):De==="skills"?!Xt||!zt?null:t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(b3,{addToast:n,projectId:y?.id,onClose:()=>le("board")})})}):De==="chat"?t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(g3,{addToast:n,projectId:y?.id,experimentalFeatures:qt})})}):De==="mailbox"?t.jsx(js,{children:t.jsx(gD,{projectId:y?.id,addToast:n,onUnreadCountChange:fn})}):De==="missions"?t.jsx(js,{children:t.jsx(uD,{isInline:!0,isOpen:!0,onClose:()=>{bt(void 0),Je(void 0),se(void 0),le("board")},addToast:n,projectId:y?.id,onSelectTask:ht=>{const Oe=ge.find(tt=>tt.id===ht);Oe&&gi(Oe)},availableTasks:ge.map(ht=>({id:ht.id,title:ht.title})),resumeSessionId:at,targetMissionId:Nt,milestoneSliceResumeSessionId:At,onMilestoneSliceResumeFetchError:()=>se(void 0)})}):De==="agents"&&ft?t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(d3,{addToast:n,projectId:y?.id,onOpenTaskLogs:fi,agentOnboardingEnabled:Ye})})}):De==="documents"?t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(u3,{projectId:y?.id,addToast:n,onOpenDetail:gi})})}):De==="stash-recovery"?t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(w3,{})})}):De==="insights"?!Xt||!Ot?null:t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(m3,{projectId:y?.id,addToast:n,onClose:()=>le("board"),onCreateTask:Mi})})}):De==="research"?!Xt||!He?null:t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(h3,{projectId:y?.id,addToast:n,onOpenSettings:ht=>B.openSettings(ht),readinessVersion:Xe})})}):De==="evals"?!Xt||!Ze?null:t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(p3,{projectId:y?.id,onOpenSettings:ht=>B.openSettings(ht),onOpenTaskDetail:ht=>{Ga(ht,y?.id).then(Oe=>gi(Oe)).catch(Oe=>n(Oe instanceof Error?Oe.message:"Failed to open task detail","error"))}})})}):De==="memory"?!Xt||!qn?null:t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(x3,{addToast:n,projectId:y?.id})})}):De==="reliability"?t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(v3,{})})}):De==="devserver"||De==="dev-server"?!Xt||!On?null:t.jsx(js,{children:t.jsx(i.Suspense,{fallback:null,children:t.jsx(y3,{addToast:n,projectId:y?.id})})}):De==="board"?t.jsxs(js,{children:[je&&!Un?t.jsx(fz,{signal:_s,onDismiss:ut}):null,t.jsx(sM,{tasks:pn,projectId:y?.id,maxConcurrent:wt,onMoveTask:Pe,onPauseTask:dt,onOpenDetail:gi,addToast:n,onQuickCreate:Vi,onNewTask:Ra,onPlanningMode:sr,onSubtaskBreakdown:ca,autoMerge:G,onToggleAutoMerge:xs,globalPaused:ze,onUpdateTask:ot,onRetryTask:Ie,onArchiveTask:Mt,onUnarchiveTask:We,onDeleteTask:nt,onArchiveAllDone:J,onLoadArchivedTasks:ke,searchQuery:T,availableModels:Ft,onOpenDetailWithTab:Aa,favoriteProviders:on,favoriteModels:yn,onToggleFavorite:hs,onToggleModelFavorite:qi,taskStuckTimeoutMs:gn,staleHighFanoutBlockerAgeThresholdMs:Mn,onOpenMission:vi,lastFetchTimeMs:ve})]}):t.jsx(js,{children:t.jsx(l4,{tasks:w&&j.tasks.length>0?j.tasks:ge,projectId:y?.id,onMoveTask:Pe,onRetryTask:Ie,onDeleteTask:nt,onPauseTask:dt,onUnpauseTask:jt,onArchiveTask:Mt,onMergeTask:xt,onResetTask:Qe,onDuplicateTask:Tt,onOpenDetail:(ht,Oe)=>gi(ht,void 0,Oe),addToast:n,globalPaused:ze,onNewTask:Ra,onQuickCreate:Vi,onPlanningMode:sr,onSubtaskBreakdown:ca,availableModels:Ft,favoriteProviders:on,favoriteModels:yn,onToggleFavorite:hs,onToggleModelFavorite:qi,taskStuckTimeoutMs:gn,searchQuery:T,lastFetchTimeMs:ve,prAuthAvailable:Nn})})},kt=!B.modelOnboardingOpen&&bF(),wn=!B.modelOnboardingOpen&&!kt&&qr()&&!jy();return t.jsx(w4,{value:{pushNav:te,replaceCurrent:Be},children:t.jsx(LP,{openFile:ir,children:t.jsx(g_,{value:Zt*j3,children:Ue?t.jsxs(t.Fragment,{children:[t.jsx(DE,{shellHost:c.host,onOpenSettings:ts,onOpenGitHubImport:da,onOpenPlanning:Ri,onResumePlanning:Ji,activePlanningSessionCount:ee.length,onOpenUsage:Ta,onOpenActivityLog:Ii,onOpenSystemStats:rr,onOpenMailbox:()=>mt("mailbox"),mailboxUnreadCount:ln,mailboxPendingApprovalCount:_n,chatHasUnreadResponse:Dn,stashOrphanCount:Ut,onOpenSchedules:or,onOpenGitManager:ar,onOpenNodes:Ki,showNodesButton:O,onOpenWorkflowSteps:Ia,onOpenScripts:ma,onRunScript:Pa,onToggleTerminal:bi,onOpenFiles:Pn,filesOpen:B.filesOpen,onOpenTodos:ua,todosOpen:B.todosOpen,todosEnabled:os,globalPaused:ze,enginePaused:Ht,onToggleGlobalPause:ms,onToggleEnginePause:vs,view:De,onChangeView:$e==="project"&&y?mt:void 0,showSkillsTab:zt,showAgentsTab:ft,searchQuery:T,onSearchChange:F,branchFilter:W,baseBranchFilter:D,branchOptions:xn,baseBranchOptions:un,onBranchFilterChange:P,onBaseBranchFilterChange:$,projects:q,currentProject:y,onSelectProject:qe,onViewAllProjects:Bt,projectId:y?.id,mobileNavEnabled:Ne,availableNodes:f,currentNode:p,onSelectNode:we=>{we===null?b():v(we)},isRemote:w,experimentalFeatures:{insights:Ot,memoryView:qn,devServer:On,devServerView:On,researchView:He,evalsView:Ze},pluginDashboardViews:_e,shellConnectionControl:!Ne&&Yi?t.jsx(gb,{status:Yi,onError:we=>n(we,"error")}):void 0}),$e==="project"&&y&&!$t&&De!=="missions"&&!B.isPlanningOpen&&!me&&t.jsx(uz,{sessions:Y,onResumeSession:lr,onDismissSession:$a,onDismissAll:cr}),$e==="project"&&y&&t.jsx(pz,{onOpenSettings:()=>B.openSettings("general")}),$e==="project"&&y&&kt&&t.jsx(wz,{onResume:B.openModelOnboarding}),$e==="project"&&y&&wn&&t.jsx(kz,{onOpenModelOnboarding:B.openModelOnboarding,onOpenSettings:we=>B.openSettings(we)}),$e==="project"&&y&&_&&A&&Q&&!H&&t.jsx(vz,{latestVersion:A,currentVersion:Q,onDismiss:M}),$e==="project"&&y&&cn?.taskIdIntegrity?.status==="anomaly"&&cn.taskIdIntegrity.recommendedAction&&t.jsx(xz,{report:cn.taskIdIntegrity,recommendedAction:cn.taskIdIntegrity.recommendedAction,onRefresh:(we,ht)=>{jn(Oe=>Oe?{...Oe,status:we.status==="anomaly"||!Oe.database.healthy?"degraded":"ok",taskIdIntegrity:{...we,recommendedAction:ht}}:null)}}),$e==="project"&&y&&!R&&z&&!Ln&&t.jsx(vy,{hasAiProvider:x,hasGithub:k,onDismiss:it}),$e==="project"&&y&&bn&&t.jsx(yz,{pendingCount:Math.max(_n,1),onOpenMailbox:()=>mt("mailbox"),onDismiss:()=>{Qt.current.set(bn.dedupeKey,Math.max(Date.now(),bn.updatedAtMs)),wb(Qt.current),en(null)}}),t.jsx("div",{className:`project-content${$e==="project"&&y&&(!Ne||!Vt)?" project-content--with-footer":""}${Ne&&!Vt?" project-content--with-mobile-nav":""}`,children:Ke()}),$e==="project"&&y&&!$t&&t.jsx(rz,{tasks:w&&j.tasks.length>0?j.tasks:ge,projectId:y.id,taskStuckTimeoutMs:gn,staleHighFanoutBlockerAgeThresholdMs:Mn,backgroundSessions:pe,backgroundGenerating:ie,backgroundNeedsInput:ye,onOpenBackgroundSession:lr,onDismissBackgroundSession:L,lastFetchTimeMs:ve,currentProjectPath:y.path,onOpenProjectDirectory:xi,keyboardOpen:Vt}),t.jsx(Nz,{view:De,onChangeView:$e==="project"&&y?mt:()=>{},footerVisible:$e==="project"&&!!y,modalOpen:B.anyModalOpen,keyboardOpen:Vt,onOpenSettings:ts,onOpenActivityLog:Ii,onOpenSystemStats:rr,onOpenMailbox:()=>mt("mailbox"),onOpenNodes:Ki,mailboxUnreadCount:ln,mailboxPendingApprovalCount:_n,chatHasUnreadResponse:Dn,stashOrphanCount:Ut,onOpenGitManager:ar,onOpenWorkflowSteps:Ia,onOpenSchedules:or,onOpenScripts:ma,onToggleTerminal:bi,onOpenFiles:Pn,onOpenTodos:ua,todosOpen:B.todosOpen,onOpenGitHubImport:da,onOpenPlanning:Ri,onResumePlanning:Ji,activePlanningSessionCount:ee.length,onOpenUsage:()=>Ta(null),onViewAllProjects:Bt,onRunScript:Pa,projectId:y?.id,showSkillsTab:zt,experimentalFeatures:{insights:Ot,memoryView:qn,devServer:On,devServerView:On,todoView:os,researchView:He,evalsView:Ze,nodesView:O},pluginDashboardViews:_e,shellConnectionControl:Ne&&Yi?t.jsx(gb,{status:Yi,onError:we=>n(we,"error")}):void 0}),$e==="project"&&y&&De!=="chat"&&De!=="mailbox"&&De!=="insights"&&De!=="evals"&&De!=="devserver"&&De!=="dev-server"&&De!=="graph"&&!Mr(De)&&t.jsx(Gz,{projectId:y.id,addToast:n,showFAB:Dt,open:re,onOpenChange:Ge,favoriteProviders:on,favoriteModels:yn,onToggleFavorite:hs,onToggleModelFavorite:qi}),t.jsx(GF,{projectId:y?.id,tasks:ge,projects:d,currentProject:y,addToast:n,toasts:e,removeToast:s,modalManager:B,projectActions:{handleAddProject:nn,handleSetupComplete:An,handleModelOnboardingComplete:es},taskHandlers:{handleModalCreate:Ms,handlePlanningTaskCreated:Wi,handlePlanningTasksCreated:Ma,handleSubtaskTasksCreated:Ai,handleGitHubImport:to},taskOperations:{moveTask:Pe,deleteTask:nt,mergeTask:xt,retryTask:Ie,resetTask:Qe,duplicateTask:Tt},deepLink:{handleDetailClose:_a},settings:{prAuthAvailable:Nn,themeMode:de,colorTheme:be,dashboardFontScalePct:Ce,setThemeMode:Ae,setColorTheme:ae,setDashboardFontScalePct:X},onSettingsClose:Rt,onReopenOnboarding:no}),t.jsx(l3,{open:Ct}),a&&t.jsxs(t.Fragment,{children:[t.jsx(t3,{open:U,shellApi:a,shellState:r,onComplete:()=>dr(!0)}),t.jsx(n3,{open:ur,shellApi:a,shellState:r,onClose:()=>Da(!1)})]})]}):t.jsxs(t.Fragment,{children:[t.jsx(YF,{stage:Jt}),t.jsx(Ey,{toasts:e,onRemove:s})]})})})})}function M3(){return t.jsx(o6,{children:t.jsx(X6,{children:t.jsx(aF,{children:t.jsx(O6,{children:t.jsx(FE,{children:t.jsx(_3,{})})})})})})}function Ky(e){e.postMessage({type:"SKIP_WAITING"})}function kb(e){e.addEventListener("statechange",()=>{e.state==="installed"&&navigator.serviceWorker.controller&&Ky(e)})}function A3(){if(!("serviceWorker"in navigator))return;const e=!!navigator.serviceWorker.controller;let n=!1;navigator.serviceWorker.addEventListener("controllerchange",()=>{n||!e||(n=!0,sm("service worker activated new version"))}),navigator.serviceWorker.register("/sw.js").then(s=>{console.log("SW registered:",s.scope),s.waiting&&navigator.serviceWorker.controller&&Ky(s.waiting),s.installing&&kb(s.installing),s.addEventListener("updatefound",()=>{const a=s.installing;a&&kb(a)})}).catch(s=>{console.log("SW registration failed:",s)})}zN();mN();Vy();By();aw.createRoot(document.getElementById("root")).render(t.jsx(i.StrictMode,{children:t.jsx(hN,{children:t.jsx(M3,{})})}));A3();export{UO as $,Bs as A,Qn as B,Xn as C,_N as D,p8 as E,ja as F,jc as G,fj as H,xu as I,Bn as J,Zl as K,_t as L,Zo as M,bj as N,WB as O,Gn as P,WO as Q,us as R,Fi as S,Kr as T,ru as U,is as V,ui as W,kn as X,zn as Y,rs as Z,Rn as _,Cn as a,S8 as a$,l1 as a0,PO as a1,$O as a2,c1 as a3,u8 as a4,d1 as a5,j5 as a6,N5 as a7,p0 as a8,Zu as a9,LB as aA,DB as aB,$B as aC,PB as aD,IB as aE,qN as aF,qo as aG,_B as aH,AB as aI,MB as aJ,BB as aK,FB as aL,zB as aM,UB as aN,M8 as aO,VB as aP,Ho as aQ,hu as aR,zj as aS,Oi as aT,ih as aU,tk as aV,Ns as aW,g4 as aX,Fs as aY,Db as aZ,Aj as a_,Gr as aa,er as ab,ei as ac,ti as ad,hi as ae,yB as af,SB as ag,NB as ah,sc as ai,CB as aj,wB as ak,EB as al,kB as am,jB as an,cs as ao,Wr as ap,Do as aq,Us as ar,Qj as as,Bi as at,Mb as au,sa as av,ww as aw,RB as ax,TB as ay,OB as az,Vn as b,W5 as b$,C8 as b0,E8 as b1,_8 as b2,Pc as b3,s6 as b4,Th as b5,oo as b6,Kg as b7,eE as b8,Ya as b9,Gs as bA,Rb as bB,rh as bC,ta as bD,dB as bE,cB as bF,uB as bG,s5 as bH,n5 as bI,t5 as bJ,i5 as bK,h5 as bL,p5 as bM,d5 as bN,o5 as bO,l5 as bP,c5 as bQ,r5 as bR,a5 as bS,e5 as bT,u5 as bU,yL as bV,q5 as bW,H5 as bX,Y5 as bY,U5 as bZ,V5 as b_,YC as ba,mB as bb,hB as bc,QC as bd,_z as be,nd as bf,ZC as bg,Ez as bh,bB as bi,xB as bj,pB as bk,fB as bl,gB as bm,vB as bn,ny as bo,Pz as bp,oa as bq,Ay as br,KC as bs,bs as bt,ka as bu,wc as bv,Sz as bw,Ua as bx,Pb as by,Iz as bz,rt as c,Z3 as c$,G5 as c0,K5 as c1,O0 as c2,J5 as c3,om as c4,$0 as c5,D0 as c6,L0 as c7,P0 as c8,B5 as c9,E5 as cA,$5 as cB,I5 as cC,_5 as cD,T5 as cE,M5 as cF,P5 as cG,A5 as cH,R5 as cI,Mw as cJ,CS as cK,MS as cL,D5 as cM,ES as cN,L5 as cO,ci as cP,Ui as cQ,Qz as cR,aL as cS,f5 as cT,R8 as cU,UN as cV,U3 as cW,zg as cX,w8 as cY,H3 as cZ,V3 as c_,_c as ca,Oj as cb,Pr as cc,P8 as cd,$8 as ce,D8 as cf,L8 as cg,O8 as ch,F8 as ci,z8 as cj,T8 as ck,qb as cl,Kk as cm,I as cn,oc as co,Wo as cp,$r as cq,j1 as cr,IN as cs,TN as ct,bS as cu,xS as cv,tB as cw,C5 as cx,S5 as cy,nB as cz,y8 as d,Xo as d$,X3 as d0,BS as d1,AS as d2,Ci as d3,RS as d4,TS as d5,IS as d6,PS as d7,$S as d8,x5 as d9,NN as dA,Mc as dB,F3 as dC,kf as dD,z3 as dE,O3 as dF,B3 as dG,qB as dH,m5 as dI,B8 as dJ,H8 as dK,W8 as dL,q8 as dM,U8 as dN,V8 as dO,G8 as dP,Su as dQ,mh as dR,o8 as dS,c8 as dT,HC as dU,sk as dV,Wa as dW,Ps as dX,Lk as dY,K8 as dZ,h8 as d_,k8 as da,j8 as db,N8 as dc,aa as dd,D3 as de,L3 as df,I8 as dg,W3 as dh,pu as di,ks as dj,bL as dk,KO as dl,YO as dm,QO as dn,va as dp,ou as dq,ZO as dr,K3 as ds,q3 as dt,J3 as du,G3 as dv,Y3 as dw,Q3 as dx,Ka as dy,GB as dz,x8 as e,QP as e0,ba as e1,d8 as e2,l8 as e3,g8 as e4,f8 as e5,Ab as e6,a8 as e7,i8 as e8,X5 as e9,Q8 as eA,iB as eB,A8 as eC,HB as eD,v5 as eE,g5 as eF,b5 as eG,Sj as eH,w5 as eI,k5 as eJ,y5 as eK,Z5 as ea,TO as eb,La as ec,m8 as ed,n8 as ee,t8 as ef,f0 as eg,s8 as eh,r8 as ei,J8 as ej,FC as ek,e8 as el,Q5 as em,mi as en,z5 as eo,O5 as ep,F5 as eq,Y8 as er,sB as es,vu as et,rB as eu,oB as ev,aB as ew,Z8 as ex,X8 as ey,eB as ez,Ga as f,v8 as g,Hs as h,Yr as i,Kn as j,gc as k,lB as l,Cs as m,o1 as n,b8 as o,si as p,Iy as q,DO as r,pi as s,Wn as t,_i as u,ii as v,ss as w,Rc as x,pl as y,Me as z};