wind-agent-cli 1.37.2 → 1.38.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 (510) hide show
  1. package/LICENSE +718 -718
  2. package/README.md +17 -2
  3. package/dist/api-docs.html +901 -901
  4. package/dist/assets/{CodeEditor-B2Wf7Fg0.js → CodeEditor-FvgsnJ7J.js} +6 -6
  5. package/dist/assets/FileTree-NLULrBDi.js +1 -0
  6. package/dist/assets/GitPanel-51KUBbEW.js +4 -0
  7. package/dist/assets/{MarkdownPreview-C0tqYnVu.js → MarkdownPreview-PEEWVWeS.js} +17 -27
  8. package/dist/assets/Shell-BEx66cW_.js +76 -0
  9. package/dist/assets/Shell-DrlLKa8f.css +1 -0
  10. package/dist/assets/StandaloneShell-BkuUCPZP.js +1 -0
  11. package/dist/assets/TaskMasterPanel-DfQG80SF.js +2 -0
  12. package/dist/assets/abnfDiagram-N423BO3Z-Cc0ul87U.js +1 -0
  13. package/dist/assets/arc-BAuugHw_.js +1 -0
  14. package/dist/assets/architectureDiagram-T3A2C74G-DA3G7QZD.js +36 -0
  15. package/dist/assets/{blockDiagram-VBNYF7ZC-DpaEf3mv.js → blockDiagram-VBNYF7ZC-tJ12IJs3.js} +4 -4
  16. package/dist/assets/c4Diagram-5PPSVZJV-5BTMCXL4.js +10 -0
  17. package/dist/assets/channel-BGDgNNQz.js +1 -0
  18. package/dist/assets/{chunk-2GRJ4B5K-DoSdNo8u.js → chunk-2GRJ4B5K-BPaI06Ou.js} +1 -1
  19. package/dist/assets/{chunk-2Q5K7J3B-CE7I3uMn.js → chunk-2Q5K7J3B-HV4zmsEe.js} +1 -1
  20. package/dist/assets/chunk-5RXB4S5H-BAwutJoU.js +231 -0
  21. package/dist/assets/{chunk-5VM5RSS4-B55XgqHZ.js → chunk-5VM5RSS4-B9QAJPrv.js} +1 -1
  22. package/dist/assets/{chunk-6Q2QTUOP-BS1KpefW.js → chunk-6Q2QTUOP-BOIW8bzI.js} +1 -1
  23. package/dist/assets/chunk-GF5L2VYU-DD13o00-.js +206 -0
  24. package/dist/assets/{chunk-JWPE2WC7-DOtkNhMm.js → chunk-JWPE2WC7-CFBm23VK.js} +1 -1
  25. package/dist/assets/{chunk-KBJHAD2P-BXLjviqM.js → chunk-KBJHAD2P-C0i0v8Op.js} +1 -1
  26. package/dist/assets/{chunk-RYQCIY6F-C50fjNNz.js → chunk-RYQCIY6F-DfeK0taV.js} +1 -1
  27. package/dist/assets/{chunk-XXDRQBXY-QBYqCkb7.js → chunk-XXDRQBXY-BKWvf-QE.js} +1 -1
  28. package/dist/assets/classDiagram-JCYQIIEL-C2SNM4oy.js +1 -0
  29. package/dist/assets/classDiagram-v2-OCEON4UE-C2SNM4oy.js +1 -0
  30. package/dist/assets/cose-bilkent-JH36ORCC-CBE8oM7L.js +1 -0
  31. package/dist/assets/{cynefin-VYW2F7L2-DnJa_OlQ.js → cynefin-VYW2F7L2-DziGp35A.js} +11 -23
  32. package/dist/assets/cynefinDiagram-MW4NZA55-CNvtHl39.js +62 -0
  33. package/dist/assets/cytoscape.esm-yzknjiTM.js +321 -0
  34. package/dist/assets/dagre-VZM6K2ZE-Bz9lsU7m.js +4 -0
  35. package/dist/assets/{diagram-7IWD3JNH-pFzs9HEu.js → diagram-7IWD3JNH-CV7D3VSd.js} +5 -5
  36. package/dist/assets/{diagram-B4RE2ZJO-CcehQC7x.js → diagram-B4RE2ZJO-Dj4EjDNC.js} +2 -2
  37. package/dist/assets/diagram-LBJQPF4R-wJ6FHvf-.js +24 -0
  38. package/dist/assets/diagram-Q27KOJAE-DMFYMhOB.js +24 -0
  39. package/dist/assets/diagram-UB23O5K3-DeBSbWAI.js +41 -0
  40. package/dist/assets/ebnfDiagram-BXEA7PRR-2NnJSGhT.js +1 -0
  41. package/dist/assets/erDiagram-JOGREHBK-DrSlg8hr.js +85 -0
  42. package/dist/assets/feature-chat-CvOCyaLe.js +88 -0
  43. package/dist/assets/feature-workspace-CAB6bgPy.js +39 -0
  44. package/dist/assets/{flowDiagram-UKHOOZJN-CJV8fQPR.js → flowDiagram-UKHOOZJN-C0pejU6W.js} +4 -4
  45. package/dist/assets/ganttDiagram-PKOTCBZU-BM0VCUUz.js +292 -0
  46. package/dist/assets/gitGraphDiagram-DS77QQ5N-SbLG0c5_.js +106 -0
  47. package/dist/assets/graph-DOmOIIwC.js +1 -0
  48. package/dist/assets/{index-GFhXZyl2.js → index-BflGfU1C.js} +3 -3
  49. package/dist/assets/index-Btkf0_rU.js +1 -0
  50. package/dist/assets/index-Cr5MbHuj.css +1 -0
  51. package/dist/assets/index-Gqazqfs3.js +1 -0
  52. package/dist/assets/index-nyrkoQK6.js +35 -0
  53. package/dist/assets/infoDiagram-6WML65LV-Cf5DSa66.js +2 -0
  54. package/dist/assets/ishikawaDiagram-WSZJBQD7-DwyFutKy.js +70 -0
  55. package/dist/assets/journeyDiagram-NVQOT4AX-Df0FRhLo.js +139 -0
  56. package/dist/assets/{kanban-definition-27J2QSJJ-B3iL0ztJ.js → kanban-definition-27J2QSJJ-HmpbjrZz.js} +6 -6
  57. package/dist/assets/{layout-D6BstSzF.js → layout-D-LzfAck.js} +1 -1
  58. package/dist/assets/{linear-Cwe9dEKA.js → linear-DOM01LBe.js} +1 -1
  59. package/dist/assets/map-DxJ2ADlA.js +1 -0
  60. package/dist/assets/mermaid.core-C2Ma-_S6.js +306 -0
  61. package/dist/assets/{mindmap-definition-FAOFIHXS-BgfBYMzr.js → mindmap-definition-FAOFIHXS-B4GOIn76.js} +4 -4
  62. package/dist/assets/pegDiagram-VL7TDLO6-BHur7aH2.js +1 -0
  63. package/dist/assets/{pieDiagram-7S7Q4E2Y-DeSrxc4I.js → pieDiagram-7S7Q4E2Y-Cw0UELLV.js} +2 -2
  64. package/dist/assets/quadrantDiagram-CIZ2JOQS-CB2BrX3g.js +7 -0
  65. package/dist/assets/railroadDiagram-AXF67PYL-DPYZYmLX.js +1 -0
  66. package/dist/assets/requirementDiagram-LRYGKXZP-DSX4IJ1n.js +84 -0
  67. package/dist/assets/sankeyDiagram-W5VNT64P-TenC3ZQo.js +40 -0
  68. package/dist/assets/sequenceDiagram-SI44F4Z6-DltGsf3F.js +162 -0
  69. package/dist/assets/sizeCapture-X5ZJPWSS-D7llwbJZ.js +1 -0
  70. package/dist/assets/stateDiagram-OKZ733FA-C-hAvbnY.js +1 -0
  71. package/dist/assets/stateDiagram-v2-UEYNNEHI-DaYSFcRQ.js +1 -0
  72. package/dist/assets/swimlanes-SLNWSIFB-DWD30fv6.js +2 -0
  73. package/dist/assets/swimlanesDiagram-ULZ7WXOC-LTkF2T6t.js +8 -0
  74. package/dist/assets/timeline-definition-Z64GVDOM-quWmimSE.js +120 -0
  75. package/dist/assets/vendor-data-DsEZeNPr.js +4 -0
  76. package/dist/assets/vendor-i18n-B6HjLCnN.js +1 -0
  77. package/dist/assets/vendor-markdown-DkITEES2.js +298 -0
  78. package/dist/assets/vendor-react-C2GTiUCy.js +10 -0
  79. package/dist/assets/vendor-ui-CAUHSABu.js +49 -0
  80. package/dist/assets/vennDiagram-T6HMQDX7-aUQcm8h5.js +34 -0
  81. package/dist/assets/{wardleyDiagram-T6FBY63Y-BNCpsFZV.js → wardleyDiagram-T6FBY63Y-BZ0bwsFQ.js} +2 -2
  82. package/dist/assets/workbox-window.prod.es5-BBnX5xw4.js +2 -0
  83. package/dist/assets/xychartDiagram-ELKLHX3M-DOVzAq63.js +7 -0
  84. package/dist/clear-cache.html +85 -85
  85. package/dist/convert-icons.md +52 -52
  86. package/dist/favicon.png +0 -0
  87. package/dist/favicon.svg +8 -8
  88. package/dist/generate-icons.js +48 -48
  89. package/dist/icons/codex-white.svg +3 -3
  90. package/dist/icons/codex.svg +3 -3
  91. package/dist/icons/cursor-white.svg +11 -11
  92. package/dist/icons/icon-128x128.png +0 -0
  93. package/dist/icons/icon-128x128.svg +11 -11
  94. package/dist/icons/icon-144x144.png +0 -0
  95. package/dist/icons/icon-144x144.svg +11 -11
  96. package/dist/icons/icon-152x152.png +0 -0
  97. package/dist/icons/icon-152x152.svg +11 -11
  98. package/dist/icons/icon-180x180.png +0 -0
  99. package/dist/icons/icon-192x192.png +0 -0
  100. package/dist/icons/icon-192x192.svg +11 -11
  101. package/dist/icons/icon-384x384.png +0 -0
  102. package/dist/icons/icon-384x384.svg +11 -11
  103. package/dist/icons/icon-512x512.png +0 -0
  104. package/dist/icons/icon-512x512.svg +11 -11
  105. package/dist/icons/icon-72x72.png +0 -0
  106. package/dist/icons/icon-72x72.svg +11 -11
  107. package/dist/icons/icon-96x96.png +0 -0
  108. package/dist/icons/icon-96x96.svg +11 -11
  109. package/dist/icons/icon-maskable-192x192.png +0 -0
  110. package/dist/icons/icon-maskable-512x512.png +0 -0
  111. package/dist/icons/icon-template.svg +11 -11
  112. package/dist/icons/new-icon.png +0 -0
  113. package/dist/index.html +48 -58
  114. package/dist/logo-128.png +0 -0
  115. package/dist/logo-256.png +0 -0
  116. package/dist/logo.svg +17 -17
  117. package/dist/manifest.webmanifest +1 -0
  118. package/dist/push-sw.js +48 -0
  119. package/dist/screenshots/setup-screen-mobile.png +0 -0
  120. package/dist/screenshots/setup-screen.png +0 -0
  121. package/dist/sw.js +1 -124
  122. package/dist/workbox-ae5c0bb2.js +1 -0
  123. package/dist-server/server/index.js +1 -1
  124. package/dist-server/server/index.js.map +1 -1
  125. package/dist-server/server/load-env.js +4 -2
  126. package/dist-server/server/load-env.js.map +1 -1
  127. package/dist-server/server/modules/agent/agent.routes.js +1 -1
  128. package/dist-server/server/modules/agent/agent.routes.js.map +1 -1
  129. package/dist-server/server/modules/browser-use/browser-use.service.js +1 -1
  130. package/dist-server/server/modules/browser-use/browser-use.service.js.map +1 -1
  131. package/dist-server/server/modules/cli/cli.service.js +37 -37
  132. package/dist-server/server/modules/cli/cli.service.js.map +1 -1
  133. package/dist-server/server/modules/cli/sandbox.service.js +43 -43
  134. package/dist-server/server/modules/cli/sandbox.service.js.map +1 -1
  135. package/dist-server/server/modules/cli/tests/cli-environment-bootstrap.test.js +74 -74
  136. package/dist-server/server/modules/commands/commands.routes.js +25 -25
  137. package/dist-server/server/modules/commands/commands.routes.js.map +1 -1
  138. package/dist-server/server/modules/commands/tests/commands.test.js +1 -1
  139. package/dist-server/server/modules/commands/tests/commands.test.js.map +1 -1
  140. package/dist-server/server/modules/database/connection.js +1 -1
  141. package/dist-server/server/modules/database/connection.js.map +1 -1
  142. package/dist-server/server/modules/database/migrations.js +190 -190
  143. package/dist-server/server/modules/database/repositories/api-keys.js +3 -3
  144. package/dist-server/server/modules/database/repositories/github-tokens.js +2 -2
  145. package/dist-server/server/modules/database/repositories/notification-channel-endpoints.js +28 -28
  146. package/dist-server/server/modules/database/repositories/notification-preferences.js +4 -4
  147. package/dist-server/server/modules/database/repositories/projects.db.js +61 -61
  148. package/dist-server/server/modules/database/repositories/provider-models.js +35 -35
  149. package/dist-server/server/modules/database/repositories/push-subscriptions.js +5 -5
  150. package/dist-server/server/modules/database/repositories/scan-state.db.js +5 -5
  151. package/dist-server/server/modules/database/repositories/sessions.db.js +93 -93
  152. package/dist-server/server/modules/database/schema.js +177 -177
  153. package/dist-server/server/modules/database/tests/projects.db.integration.test.js +3 -2
  154. package/dist-server/server/modules/database/tests/projects.db.integration.test.js.map +1 -1
  155. package/dist-server/server/modules/database/tests/provider-models.db.integration.test.js +6 -6
  156. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js +4 -3
  157. package/dist-server/server/modules/database/tests/sessions-provider-mapping.test.js.map +1 -1
  158. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js +2 -1
  159. package/dist-server/server/modules/database/tests/sessions.db.integration.test.js.map +1 -1
  160. package/dist-server/server/modules/git/git.routes.js +17 -17
  161. package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js +1 -1
  162. package/dist-server/server/modules/notifications/services/notification-orchestrator.service.js.map +1 -1
  163. package/dist-server/server/modules/notifications/vapid-keys.service.js +1 -1
  164. package/dist-server/server/modules/notifications/vapid-keys.service.js.map +1 -1
  165. package/dist-server/server/modules/projects/tests/project-management.service.test.js +2 -1
  166. package/dist-server/server/modules/projects/tests/project-management.service.test.js.map +1 -1
  167. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js +2 -2
  168. package/dist-server/server/modules/providers/list/codex/codex-app-server.client.js.map +1 -1
  169. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js +1 -1
  170. package/dist-server/server/modules/providers/list/codex/codex-models.provider.js.map +1 -1
  171. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js +1 -1
  172. package/dist-server/server/modules/providers/list/cursor/cursor-models.provider.js.map +1 -1
  173. package/dist-server/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.js.map +1 -1
  174. package/dist-server/server/modules/providers/list/opencode/opencode-models.provider.js +13 -13
  175. package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.js +9 -9
  176. package/dist-server/server/modules/providers/list/opencode/opencode-runtime.provider.test.js +17 -17
  177. package/dist-server/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.js +25 -25
  178. package/dist-server/server/modules/providers/list/opencode/opencode-sessions.provider.js +27 -27
  179. package/dist-server/server/modules/providers/services/provider-token-usage.service.js +9 -9
  180. package/dist-server/server/modules/providers/services/sessions.service.js +1 -1
  181. package/dist-server/server/modules/providers/tests/claude-auth.test.js +8 -0
  182. package/dist-server/server/modules/providers/tests/claude-auth.test.js.map +1 -1
  183. package/dist-server/server/modules/providers/tests/codex-sessions.test.js +1 -1
  184. package/dist-server/server/modules/providers/tests/codex-sessions.test.js.map +1 -1
  185. package/dist-server/server/modules/providers/tests/mcp.test.js +3 -3
  186. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js +98 -98
  187. package/dist-server/server/modules/providers/tests/opencode-sessions.test.js.map +1 -1
  188. package/dist-server/server/modules/providers/tests/provider-token-usage.service.test.js +18 -18
  189. package/dist-server/server/modules/providers/tests/provider.routes.test.js +1 -1
  190. package/dist-server/server/modules/providers/tests/provider.routes.test.js.map +1 -1
  191. package/dist-server/server/modules/system/system.service.js +1 -1
  192. package/dist-server/server/modules/system/system.service.js.map +1 -1
  193. package/dist-server/server/modules/system/tests/system.service.test.js +1 -1
  194. package/dist-server/server/modules/system/tests/system.service.test.js.map +1 -1
  195. package/dist-server/server/modules/taskmaster/taskmaster.routes.js +423 -422
  196. package/dist-server/server/modules/taskmaster/taskmaster.routes.js.map +1 -1
  197. package/dist-server/server/modules/websocket/services/shell-websocket.service.js +1 -1
  198. package/dist-server/server/modules/websocket/services/shell-websocket.service.js.map +1 -1
  199. package/dist-server/server/modules/worktrees/services/worktree-list.service.js +1 -1
  200. package/dist-server/server/modules/worktrees/services/worktree-open.service.js +1 -1
  201. package/dist-server/server/modules/worktrees/services/worktree-remove.service.js +1 -1
  202. package/electron/cloud.js +260 -260
  203. package/electron/desktopNotifications.js +378 -378
  204. package/electron/desktopWindow.js +766 -766
  205. package/electron/launcher/index.html +14 -14
  206. package/electron/launcher/launcher.css +801 -801
  207. package/electron/launcher/launcher.js +687 -687
  208. package/electron/localServer.js +549 -549
  209. package/electron/main.js +944 -944
  210. package/electron/preload.cjs +60 -60
  211. package/electron/scripts/generate-macos-icon.js +62 -62
  212. package/electron/serverInstaller.js +277 -277
  213. package/electron/tabs.js +87 -87
  214. package/electron/viewHost.js +331 -331
  215. package/package.json +262 -247
  216. package/public/api-docs.html +901 -901
  217. package/scripts/build-client.mjs +30 -0
  218. package/scripts/fix-node-pty.js +67 -67
  219. package/scripts/generate-pwa-icons.ps1 +33 -0
  220. package/scripts/promote-dist-server.mjs +50 -50
  221. package/scripts/release/build-server-bundle.js +176 -176
  222. package/scripts/release/prepare-desktop-app.js +152 -152
  223. package/scripts/verify-pwa-build.mjs +37 -0
  224. package/server/index.ts +399 -399
  225. package/server/load-env.ts +49 -47
  226. package/server/modules/agent/agent.module.ts +52 -52
  227. package/server/modules/agent/agent.routes.ts +1287 -1287
  228. package/server/modules/agent/index.ts +2 -2
  229. package/server/modules/agent/tests/agent.routes.test.ts +205 -205
  230. package/server/modules/assets/assets.routes.ts +150 -150
  231. package/server/modules/assets/index.ts +3 -3
  232. package/server/modules/assets/services/image-assets.service.ts +127 -127
  233. package/server/modules/assets/tests/image-assets.service.test.ts +74 -74
  234. package/server/modules/auth/auth.middleware.ts +163 -163
  235. package/server/modules/auth/auth.module.ts +38 -38
  236. package/server/modules/auth/auth.routes.ts +57 -57
  237. package/server/modules/auth/auth.service.ts +155 -155
  238. package/server/modules/auth/index.ts +9 -9
  239. package/server/modules/auth/tests/auth.service.test.ts +95 -95
  240. package/server/modules/browser-use/browser-use-mcp.routes.ts +120 -120
  241. package/server/modules/browser-use/browser-use-mcp.ts +386 -386
  242. package/server/modules/browser-use/browser-use-runtime.ts +10 -10
  243. package/server/modules/browser-use/browser-use.routes.ts +96 -96
  244. package/server/modules/browser-use/browser-use.service.ts +836 -836
  245. package/server/modules/browser-use/index.ts +11 -11
  246. package/server/modules/browser-use/tests/browser-use.service.test.ts +10 -10
  247. package/server/modules/cli/cli.module.ts +93 -93
  248. package/server/modules/cli/cli.service.ts +248 -248
  249. package/server/modules/cli/cli.ts +19 -19
  250. package/server/modules/cli/index.ts +2 -2
  251. package/server/modules/cli/sandbox.service.ts +398 -398
  252. package/server/modules/cli/tests/cli-environment-bootstrap.test.ts +186 -186
  253. package/server/modules/cli/tests/cli.service.test.ts +86 -86
  254. package/server/modules/cli/tests/sandbox.service.test.ts +58 -58
  255. package/server/modules/commands/commands.module.ts +22 -22
  256. package/server/modules/commands/commands.routes.ts +587 -587
  257. package/server/modules/commands/index.ts +2 -2
  258. package/server/modules/commands/tests/commands.test.ts +110 -110
  259. package/server/modules/database/connection.ts +144 -143
  260. package/server/modules/database/index.ts +17 -17
  261. package/server/modules/database/init-db.ts +17 -17
  262. package/server/modules/database/migrations.ts +515 -515
  263. package/server/modules/database/repositories/api-keys.ts +119 -119
  264. package/server/modules/database/repositories/app-config.ts +53 -53
  265. package/server/modules/database/repositories/credentials.ts +106 -106
  266. package/server/modules/database/repositories/github-tokens.ts +100 -100
  267. package/server/modules/database/repositories/notification-channel-endpoints.ts +153 -153
  268. package/server/modules/database/repositories/notification-preferences.ts +117 -117
  269. package/server/modules/database/repositories/projects.db.ts +196 -196
  270. package/server/modules/database/repositories/provider-models.ts +168 -168
  271. package/server/modules/database/repositories/push-subscriptions.ts +80 -80
  272. package/server/modules/database/repositories/scan-state.db.ts +42 -42
  273. package/server/modules/database/repositories/sessions.db.ts +524 -524
  274. package/server/modules/database/repositories/users.ts +140 -140
  275. package/server/modules/database/repositories/vapid-keys.ts +57 -57
  276. package/server/modules/database/schema.ts +210 -210
  277. package/server/modules/database/tests/projects.db.integration.test.ts +73 -72
  278. package/server/modules/database/tests/provider-models.db.integration.test.ts +125 -125
  279. package/server/modules/database/tests/sessions-provider-mapping.test.ts +110 -109
  280. package/server/modules/database/tests/sessions.db.integration.test.ts +117 -116
  281. package/server/modules/file-tree/file-tree.module.ts +116 -116
  282. package/server/modules/file-tree/file-tree.routes.ts +258 -258
  283. package/server/modules/file-tree/file-tree.service.ts +675 -675
  284. package/server/modules/file-tree/index.ts +2 -2
  285. package/server/modules/file-tree/tests/file-tree.routes.test.ts +157 -157
  286. package/server/modules/file-tree/tests/file-tree.service.test.ts +371 -371
  287. package/server/modules/git/git-branch.service.ts +43 -43
  288. package/server/modules/git/git-parsing.service.ts +66 -66
  289. package/server/modules/git/git.module.ts +22 -22
  290. package/server/modules/git/git.routes.ts +1596 -1596
  291. package/server/modules/git/index.ts +2 -2
  292. package/server/modules/git/tests/git-branch.service.test.ts +60 -60
  293. package/server/modules/git/tests/git-init.routes.test.ts +132 -132
  294. package/server/modules/git/tests/git.test.ts +106 -106
  295. package/server/modules/notifications/index.ts +24 -24
  296. package/server/modules/notifications/notifications.routes.ts +127 -127
  297. package/server/modules/notifications/services/desktop-notification-clients.service.ts +124 -124
  298. package/server/modules/notifications/services/notification-orchestrator.service.js +310 -310
  299. package/server/modules/notifications/tests/notification-orchestrator.integration.test.ts +55 -55
  300. package/server/modules/notifications/vapid-keys.service.ts +38 -38
  301. package/server/modules/notifications/websocket/desktop-notifications-websocket.service.ts +109 -109
  302. package/server/modules/plugins/index.ts +9 -9
  303. package/server/modules/plugins/plugin-process.service.ts +217 -217
  304. package/server/modules/plugins/plugin-registry.service.ts +459 -459
  305. package/server/modules/plugins/plugins.module.ts +33 -33
  306. package/server/modules/plugins/plugins.routes.ts +66 -66
  307. package/server/modules/plugins/plugins.service.ts +147 -147
  308. package/server/modules/plugins/tests/plugins.service.test.ts +32 -32
  309. package/server/modules/projects/index.ts +11 -11
  310. package/server/modules/projects/projects.routes.ts +273 -273
  311. package/server/modules/projects/services/project-clone.service.ts +323 -323
  312. package/server/modules/projects/services/project-delete.service.ts +90 -90
  313. package/server/modules/projects/services/project-management.service.ts +144 -144
  314. package/server/modules/projects/services/project-star.service.ts +78 -78
  315. package/server/modules/projects/services/projects-has-taskmaster.service.ts +248 -248
  316. package/server/modules/projects/services/projects-with-sessions-fetch.service.ts +314 -314
  317. package/server/modules/projects/tests/project-clone.service.test.ts +183 -183
  318. package/server/modules/projects/tests/project-management.service.test.ts +118 -117
  319. package/server/modules/projects/tests/project-star.service.test.ts +123 -123
  320. package/server/modules/projects/tests/projects-has-taskmaster.service.test.ts +105 -105
  321. package/server/modules/providers/README.md +380 -380
  322. package/server/modules/providers/index.ts +10 -10
  323. package/server/modules/providers/list/claude/claude-auth.provider.ts +160 -160
  324. package/server/modules/providers/list/claude/claude-mcp.provider.ts +135 -135
  325. package/server/modules/providers/list/claude/claude-models.provider.ts +294 -294
  326. package/server/modules/providers/list/claude/claude-runtime.provider.js +1068 -1068
  327. package/server/modules/providers/list/claude/claude-session-synchronizer.provider.ts +203 -203
  328. package/server/modules/providers/list/claude/claude-sessions.provider.ts +684 -684
  329. package/server/modules/providers/list/claude/claude-skills.provider.ts +265 -265
  330. package/server/modules/providers/list/claude/claude.provider.ts +30 -30
  331. package/server/modules/providers/list/codex/codex-app-server.client.ts +2 -2
  332. package/server/modules/providers/list/codex/codex-auth.provider.ts +100 -100
  333. package/server/modules/providers/list/codex/codex-mcp.provider.ts +135 -135
  334. package/server/modules/providers/list/codex/codex-models.provider.ts +123 -123
  335. package/server/modules/providers/list/codex/codex-runtime.provider.js +533 -533
  336. package/server/modules/providers/list/codex/codex-session-synchronizer.provider.ts +203 -203
  337. package/server/modules/providers/list/codex/codex-sessions.provider.ts +938 -938
  338. package/server/modules/providers/list/codex/codex-skills.provider.ts +73 -73
  339. package/server/modules/providers/list/codex/codex.provider.ts +28 -28
  340. package/server/modules/providers/list/cursor/cursor-auth.provider.ts +143 -143
  341. package/server/modules/providers/list/cursor/cursor-mcp.provider.ts +108 -108
  342. package/server/modules/providers/list/cursor/cursor-models.provider.ts +119 -119
  343. package/server/modules/providers/list/cursor/cursor-runtime.provider.js +385 -385
  344. package/server/modules/providers/list/cursor/cursor-session-synchronizer.provider.ts +158 -159
  345. package/server/modules/providers/list/cursor/cursor-sessions.provider.ts +654 -654
  346. package/server/modules/providers/list/cursor/cursor-skills.provider.ts +39 -39
  347. package/server/modules/providers/list/cursor/cursor.provider.ts +30 -30
  348. package/server/modules/providers/list/opencode/opencode-auth.provider.ts +110 -110
  349. package/server/modules/providers/list/opencode/opencode-mcp.provider.ts +228 -228
  350. package/server/modules/providers/list/opencode/opencode-models.provider.ts +203 -203
  351. package/server/modules/providers/list/opencode/opencode-runtime.provider.js +434 -434
  352. package/server/modules/providers/list/opencode/opencode-runtime.provider.test.js +261 -261
  353. package/server/modules/providers/list/opencode/opencode-session-synchronizer.provider.ts +179 -179
  354. package/server/modules/providers/list/opencode/opencode-sessions.provider.ts +500 -500
  355. package/server/modules/providers/list/opencode/opencode-skills.provider.ts +78 -78
  356. package/server/modules/providers/list/opencode/opencode.provider.ts +30 -30
  357. package/server/modules/providers/provider.registry.ts +36 -36
  358. package/server/modules/providers/provider.routes.ts +877 -877
  359. package/server/modules/providers/services/mcp.service.ts +109 -109
  360. package/server/modules/providers/services/provider-auth.service.ts +26 -26
  361. package/server/modules/providers/services/provider-capabilities.service.ts +97 -97
  362. package/server/modules/providers/services/provider-models.service.ts +401 -401
  363. package/server/modules/providers/services/provider-runtime.service.ts +108 -108
  364. package/server/modules/providers/services/provider-token-usage.service.ts +357 -357
  365. package/server/modules/providers/services/session-conversations-search.service.ts +1321 -1321
  366. package/server/modules/providers/services/session-synchronizer.service.ts +74 -74
  367. package/server/modules/providers/services/sessions-watcher.service.ts +247 -247
  368. package/server/modules/providers/services/sessions.service.ts +471 -471
  369. package/server/modules/providers/services/skills.service.ts +39 -39
  370. package/server/modules/providers/shared/base/abstract.provider.ts +32 -32
  371. package/server/modules/providers/shared/mcp/mcp.provider.ts +151 -151
  372. package/server/modules/providers/shared/skills/skills.provider.ts +287 -287
  373. package/server/modules/providers/tests/claude-auth.test.ts +157 -150
  374. package/server/modules/providers/tests/claude-sessions.test.ts +61 -61
  375. package/server/modules/providers/tests/codex-sessions.test.ts +231 -231
  376. package/server/modules/providers/tests/mcp.test.ts +349 -349
  377. package/server/modules/providers/tests/opencode-models.test.ts +41 -41
  378. package/server/modules/providers/tests/opencode-sessions.test.ts +522 -522
  379. package/server/modules/providers/tests/provider-attachment-history.test.ts +247 -247
  380. package/server/modules/providers/tests/provider-models.service.test.ts +353 -353
  381. package/server/modules/providers/tests/provider-runtime.service.test.ts +138 -138
  382. package/server/modules/providers/tests/provider-token-usage.service.test.ts +186 -186
  383. package/server/modules/providers/tests/provider.routes.test.ts +244 -244
  384. package/server/modules/providers/tests/sessions-details.test.ts +73 -73
  385. package/server/modules/providers/tests/sessions.service.test.ts +127 -127
  386. package/server/modules/providers/tests/skills.test.ts +692 -692
  387. package/server/modules/settings/index.ts +2 -2
  388. package/server/modules/settings/settings.module.ts +50 -50
  389. package/server/modules/settings/settings.routes.ts +51 -51
  390. package/server/modules/settings/settings.service.ts +186 -186
  391. package/server/modules/settings/tests/settings.service.test.ts +54 -54
  392. package/server/modules/system/index.ts +2 -2
  393. package/server/modules/system/system.module.ts +62 -62
  394. package/server/modules/system/system.routes.ts +21 -21
  395. package/server/modules/system/system.service.ts +76 -76
  396. package/server/modules/system/tests/system.service.test.ts +118 -118
  397. package/server/modules/taskmaster/index.ts +2 -2
  398. package/server/modules/taskmaster/taskmaster.module.ts +24 -24
  399. package/server/modules/taskmaster/taskmaster.routes.ts +1483 -1482
  400. package/server/modules/taskmaster/taskmaster.service.ts +132 -132
  401. package/server/modules/taskmaster/tests/taskmaster.routes.test.ts +144 -144
  402. package/server/modules/taskmaster/tests/taskmaster.service.test.ts +97 -97
  403. package/server/modules/user/index.ts +2 -2
  404. package/server/modules/user/tests/user.service.test.ts +61 -61
  405. package/server/modules/user/user.module.ts +58 -58
  406. package/server/modules/user/user.routes.ts +50 -50
  407. package/server/modules/user/user.service.ts +85 -85
  408. package/server/modules/voice/index.ts +2 -2
  409. package/server/modules/voice/tests/voice.service.test.ts +98 -98
  410. package/server/modules/voice/voice.module.ts +47 -47
  411. package/server/modules/voice/voice.routes.ts +113 -113
  412. package/server/modules/voice/voice.service.ts +192 -192
  413. package/server/modules/websocket/README.md +273 -273
  414. package/server/modules/websocket/index.ts +3 -3
  415. package/server/modules/websocket/services/chat-run-registry.service.ts +343 -343
  416. package/server/modules/websocket/services/chat-session-writer.service.ts +145 -145
  417. package/server/modules/websocket/services/chat-websocket.service.ts +425 -425
  418. package/server/modules/websocket/services/plugin-websocket-proxy.service.ts +65 -65
  419. package/server/modules/websocket/services/shell-websocket.service.ts +503 -503
  420. package/server/modules/websocket/services/websocket-auth.service.ts +59 -59
  421. package/server/modules/websocket/services/websocket-server.service.ts +124 -124
  422. package/server/modules/websocket/services/websocket-state.service.ts +16 -16
  423. package/server/modules/websocket/services/websocket-writer.service.ts +38 -38
  424. package/server/modules/websocket/tests/chat-attachment-filter.test.ts +59 -59
  425. package/server/modules/websocket/tests/chat-run-registry.test.ts +282 -282
  426. package/server/modules/websocket/tests/shell-websocket.service.test.ts +100 -100
  427. package/server/modules/websocket/tests/websocket-heartbeat.service.test.ts +78 -78
  428. package/server/modules/worktrees/index.ts +2 -2
  429. package/server/modules/worktrees/services/worktree-create-and-open.service.ts +53 -53
  430. package/server/modules/worktrees/services/worktree-create.service.ts +104 -104
  431. package/server/modules/worktrees/services/worktree-git.service.ts +207 -207
  432. package/server/modules/worktrees/services/worktree-list.service.ts +143 -143
  433. package/server/modules/worktrees/services/worktree-merge.service.ts +157 -157
  434. package/server/modules/worktrees/services/worktree-open.service.ts +85 -85
  435. package/server/modules/worktrees/services/worktree-remove.service.ts +88 -88
  436. package/server/modules/worktrees/tests/worktree-create-and-open.service.test.ts +68 -68
  437. package/server/modules/worktrees/tests/worktree-create.service.test.ts +142 -142
  438. package/server/modules/worktrees/tests/worktree-git.service.test.ts +84 -84
  439. package/server/modules/worktrees/tests/worktree-list.service.test.ts +45 -45
  440. package/server/modules/worktrees/tests/worktree-merge.service.test.ts +213 -213
  441. package/server/modules/worktrees/tests/worktree-open.service.test.ts +122 -122
  442. package/server/modules/worktrees/tests/worktree-remove.service.test.ts +227 -227
  443. package/server/modules/worktrees/tests/worktrees.routes.test.ts +199 -199
  444. package/server/modules/worktrees/worktrees.module.ts +113 -113
  445. package/server/modules/worktrees/worktrees.routes.ts +116 -116
  446. package/server/shared/claude-cli-path.ts +139 -139
  447. package/server/shared/frontmatter.ts +18 -18
  448. package/server/shared/image-attachments.ts +435 -435
  449. package/server/shared/interfaces.ts +179 -179
  450. package/server/shared/tests/claude-cli-path.test.ts +61 -61
  451. package/server/shared/tests/image-attachments.test.ts +353 -353
  452. package/server/shared/tests/slice-tail-page.test.ts +42 -42
  453. package/server/shared/types.ts +1228 -1228
  454. package/server/shared/utils.ts +1161 -1161
  455. package/server/tsconfig.json +40 -40
  456. package/shared/networkHosts.js +22 -22
  457. package/dist/assets/FileTree-N2IkkHlv.js +0 -127
  458. package/dist/assets/GitPanel-DZCeuFZ2.js +0 -29
  459. package/dist/assets/PluginTabContent-Bnuf-fb8.js +0 -1
  460. package/dist/assets/Shell-BfFnMZ-f.js +0 -81
  461. package/dist/assets/Shell-qxJ8_QYu.css +0 -32
  462. package/dist/assets/StandaloneShell-QmyYwNAl.js +0 -1
  463. package/dist/assets/TaskMasterPanel-fMsmvN9L.js +0 -32
  464. package/dist/assets/abnfDiagram-N423BO3Z-DjPU7HLs.js +0 -1
  465. package/dist/assets/arc-Pdq6Tvr3.js +0 -1
  466. package/dist/assets/architectureDiagram-T3A2C74G-D0JnT0Vh.js +0 -36
  467. package/dist/assets/c4Diagram-5PPSVZJV-MpqlPGFi.js +0 -10
  468. package/dist/assets/channel-Bm0ZLE4z.js +0 -1
  469. package/dist/assets/chunk-5RXB4S5H-B4UQ8snD.js +0 -231
  470. package/dist/assets/chunk-GF5L2VYU-DkEPedJP.js +0 -206
  471. package/dist/assets/classDiagram-JCYQIIEL-DqEOcNxw.js +0 -1
  472. package/dist/assets/classDiagram-v2-OCEON4UE-DqEOcNxw.js +0 -1
  473. package/dist/assets/code-xml-VK1YfShP.js +0 -6
  474. package/dist/assets/cose-bilkent-JH36ORCC-DrVTo1Nh.js +0 -1
  475. package/dist/assets/cynefinDiagram-MW4NZA55-CCxBjw9E.js +0 -62
  476. package/dist/assets/cytoscape.esm-C10L9Icf.js +0 -331
  477. package/dist/assets/dagre-VZM6K2ZE-C_GvE4lu.js +0 -4
  478. package/dist/assets/diagram-LBJQPF4R-hfKcrrxe.js +0 -24
  479. package/dist/assets/diagram-Q27KOJAE-C1semJfK.js +0 -24
  480. package/dist/assets/diagram-UB23O5K3-57hvXQXO.js +0 -41
  481. package/dist/assets/ebnfDiagram-BXEA7PRR-9KIAlAVw.js +0 -1
  482. package/dist/assets/erDiagram-JOGREHBK-B7OzJ767.js +0 -85
  483. package/dist/assets/ganttDiagram-PKOTCBZU-CbMNWWQu.js +0 -292
  484. package/dist/assets/gitGraphDiagram-DS77QQ5N-I_vZ5waO.js +0 -106
  485. package/dist/assets/graph-Cx-EqisW.js +0 -1
  486. package/dist/assets/index-DFnVoqpx.js +0 -1174
  487. package/dist/assets/index-DlSeAkw_.js +0 -11
  488. package/dist/assets/index-ZHwIojzi.js +0 -1
  489. package/dist/assets/index-t1w8KNxn.css +0 -1
  490. package/dist/assets/infoDiagram-6WML65LV-Dh20Tsbq.js +0 -2
  491. package/dist/assets/ishikawaDiagram-WSZJBQD7-DH2Sm3ko.js +0 -70
  492. package/dist/assets/journeyDiagram-NVQOT4AX-BNFQqlVu.js +0 -139
  493. package/dist/assets/map-CV9uif0g.js +0 -1
  494. package/dist/assets/mermaid.core-BYRQSshi.js +0 -312
  495. package/dist/assets/pegDiagram-VL7TDLO6-CNYpECr8.js +0 -1
  496. package/dist/assets/quadrantDiagram-CIZ2JOQS-BXVVQsa6.js +0 -7
  497. package/dist/assets/railroadDiagram-AXF67PYL-JTroIW8F.js +0 -1
  498. package/dist/assets/requirementDiagram-LRYGKXZP-C1Z_inLz.js +0 -84
  499. package/dist/assets/sankeyDiagram-W5VNT64P-DCJgKFUk.js +0 -40
  500. package/dist/assets/sequenceDiagram-SI44F4Z6-D8Wrx5Vc.js +0 -162
  501. package/dist/assets/sizeCapture-X5ZJPWSS-CXqD68vD.js +0 -1
  502. package/dist/assets/stateDiagram-OKZ733FA-CF0Ekqjo.js +0 -1
  503. package/dist/assets/stateDiagram-v2-UEYNNEHI-DARLpEFJ.js +0 -1
  504. package/dist/assets/swimlanes-SLNWSIFB-DVIax_k4.js +0 -2
  505. package/dist/assets/swimlanesDiagram-ULZ7WXOC-CrgDgaY8.js +0 -8
  506. package/dist/assets/timeline-definition-Z64GVDOM-DSqk3ApG.js +0 -120
  507. package/dist/assets/vendor-react-whEHfigN.js +0 -59
  508. package/dist/assets/vennDiagram-T6HMQDX7-DNbTqyG5.js +0 -34
  509. package/dist/assets/xychartDiagram-ELKLHX3M-XsVZphHr.js +0 -7
  510. package/dist/manifest.json +0 -61
@@ -0,0 +1 @@
1
+ var Ze=typeof global=="object"&&global&&global.Object===Object&&global,pt=typeof self=="object"&&self&&self.Object===Object&&self,w=Ze||pt||Function("return this")(),y=w.Symbol,We=Object.prototype,_t=We.hasOwnProperty,bt=We.toString,D=y?y.toStringTag:void 0;function yt(e){var t=_t.call(e,D),r=e[D];try{e[D]=void 0;var n=!0}catch{}var i=bt.call(e);return n&&(t?e[D]=r:delete e[D]),i}var vt=Object.prototype,Ot=vt.toString;function mt(e){return Ot.call(e)}var wt="[object Null]",Tt="[object Undefined]",Oe=y?y.toStringTag:void 0;function M(e){return e==null?e===void 0?Tt:wt:Oe&&Oe in Object(e)?yt(e):mt(e)}function j(e){return e!=null&&typeof e=="object"}var At="[object Symbol]";function he(e){return typeof e=="symbol"||j(e)&&M(e)==At}function Je(e,t){for(var r=-1,n=e==null?0:e.length,i=Array(n);++r<n;)i[r]=t(e[r],r,e);return i}var g=Array.isArray,me=y?y.prototype:void 0,we=me?me.toString:void 0;function Qe(e){if(typeof e=="string")return e;if(g(e))return Je(e,Qe)+"";if(he(e))return we?we.call(e):"";var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}function ce(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}function J(e){return e}var Pt="[object AsyncFunction]",Et="[object Function]",$t="[object GeneratorFunction]",St="[object Proxy]";function Z(e){if(!ce(e))return!1;var t=M(e);return t==Et||t==$t||t==Pt||t==St}var re=w["__core-js_shared__"],Te=(function(){var e=/[^.]+$/.exec(re&&re.keys&&re.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""})();function Ct(e){return!!Te&&Te in e}var jt=Function.prototype,xt=jt.toString;function I(e){if(e!=null){try{return xt.call(e)}catch{}try{return e+""}catch{}}return""}var It=/[\\^$.*+?()[\]{}|]/g,Lt=/^\[object .+?Constructor\]$/,Rt=Function.prototype,Nt=Object.prototype,Mt=Rt.toString,Dt=Nt.hasOwnProperty,Ft=RegExp("^"+Mt.call(Dt).replace(It,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Gt(e){if(!ce(e)||Ct(e))return!1;var t=Z(e)?Ft:Lt;return t.test(I(e))}function Ut(e,t){return e?.[t]}function L(e,t){var r=Ut(e,t);return Gt(r)?r:void 0}var oe=L(w,"WeakMap");function zt(e,t,r){switch(r.length){case 0:return e.call(t);case 1:return e.call(t,r[0]);case 2:return e.call(t,r[0],r[1]);case 3:return e.call(t,r[0],r[1],r[2])}return e.apply(t,r)}function Ht(){}var Bt=800,Kt=16,qt=Date.now;function Xt(e){var t=0,r=0;return function(){var n=qt(),i=Kt-(n-r);if(r=n,i>0){if(++t>=Bt)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function F(e){return function(){return e}}var Ae=(function(){try{var e=L(Object,"defineProperty");return e({},"",{}),e}catch{}})(),Yt=Ae?function(e,t){return Ae(e,"toString",{configurable:!0,enumerable:!1,value:F(t),writable:!0})}:J,Zt=Xt(Yt);function Wt(e,t){for(var r=-1,n=e==null?0:e.length;++r<n&&t(e[r],r,e)!==!1;);return e}function Jt(e,t,r,n){for(var i=e.length,s=r+-1;++s<i;)if(t(e[s],s,e))return s;return-1}function Qt(e){return e!==e}function Vt(e,t,r){for(var n=r-1,i=e.length;++n<i;)if(e[n]===t)return n;return-1}function kt(e,t,r){return t===t?Vt(e,t,r):Jt(e,Qt,r)}function er(e,t){var r=e==null?0:e.length;return!!r&&kt(e,t,0)>-1}var tr=9007199254740991,rr=/^(?:0|[1-9]\d*)$/;function Ve(e,t){var r=typeof e;return t=t??tr,!!t&&(r=="number"||r!="symbol"&&rr.test(e))&&e>-1&&e%1==0&&e<t}function ke(e,t){return e===t||e!==e&&t!==t}var Pe=Math.max;function nr(e,t,r){return t=Pe(t===void 0?e.length-1:t,0),function(){for(var n=arguments,i=-1,s=Pe(n.length-t,0),a=Array(s);++i<s;)a[i]=n[t+i];i=-1;for(var o=Array(t+1);++i<t;)o[i]=n[i];return o[t]=r(a),zt(e,this,o)}}function ir(e,t){return Zt(nr(e,t,J),e+"")}var sr=9007199254740991;function le(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=sr}function Q(e){return e!=null&&le(e.length)&&!Z(e)}var ar=Object.prototype;function et(e){var t=e&&e.constructor,r=typeof t=="function"&&t.prototype||ar;return e===r}function or(e,t){for(var r=-1,n=Array(e);++r<e;)n[r]=t(r);return n}var ur="[object Arguments]";function Ee(e){return j(e)&&M(e)==ur}var tt=Object.prototype,fr=tt.hasOwnProperty,hr=tt.propertyIsEnumerable,V=Ee((function(){return arguments})())?Ee:function(e){return j(e)&&fr.call(e,"callee")&&!hr.call(e,"callee")};function cr(){return!1}var rt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,$e=rt&&typeof module=="object"&&module&&!module.nodeType&&module,lr=$e&&$e.exports===rt,Se=lr?w.Buffer:void 0,dr=Se?Se.isBuffer:void 0,W=dr||cr,gr="[object Arguments]",pr="[object Array]",_r="[object Boolean]",br="[object Date]",yr="[object Error]",vr="[object Function]",Or="[object Map]",mr="[object Number]",wr="[object Object]",Tr="[object RegExp]",Ar="[object Set]",Pr="[object String]",Er="[object WeakMap]",$r="[object ArrayBuffer]",Sr="[object DataView]",Cr="[object Float32Array]",jr="[object Float64Array]",xr="[object Int8Array]",Ir="[object Int16Array]",Lr="[object Int32Array]",Rr="[object Uint8Array]",Nr="[object Uint8ClampedArray]",Mr="[object Uint16Array]",Dr="[object Uint32Array]",h={};h[Cr]=h[jr]=h[xr]=h[Ir]=h[Lr]=h[Rr]=h[Nr]=h[Mr]=h[Dr]=!0;h[gr]=h[pr]=h[$r]=h[_r]=h[Sr]=h[br]=h[yr]=h[vr]=h[Or]=h[mr]=h[wr]=h[Tr]=h[Ar]=h[Pr]=h[Er]=!1;function Fr(e){return j(e)&&le(e.length)&&!!h[M(e)]}function Gr(e){return function(t){return e(t)}}var nt=typeof exports=="object"&&exports&&!exports.nodeType&&exports,U=nt&&typeof module=="object"&&module&&!module.nodeType&&module,Ur=U&&U.exports===nt,ne=Ur&&Ze.process,Ce=(function(){try{var e=U&&U.require&&U.require("util").types;return e||ne&&ne.binding&&ne.binding("util")}catch{}})(),je=Ce&&Ce.isTypedArray,de=je?Gr(je):Fr,zr=Object.prototype,Hr=zr.hasOwnProperty;function Br(e,t){var r=g(e),n=!r&&V(e),i=!r&&!n&&W(e),s=!r&&!n&&!i&&de(e),a=r||n||i||s,o=a?or(e.length,String):[],u=o.length;for(var f in e)(t||Hr.call(e,f))&&!(a&&(f=="length"||i&&(f=="offset"||f=="parent")||s&&(f=="buffer"||f=="byteLength"||f=="byteOffset")||Ve(f,u)))&&o.push(f);return o}function Kr(e,t){return function(r){return e(t(r))}}var qr=Kr(Object.keys,Object),Xr=Object.prototype,Yr=Xr.hasOwnProperty;function it(e){if(!et(e))return qr(e);var t=[];for(var r in Object(e))Yr.call(e,r)&&r!="constructor"&&t.push(r);return t}function b(e){return Q(e)?Br(e):it(e)}var Zr=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Wr=/^\w*$/;function ge(e,t){if(g(e))return!1;var r=typeof e;return r=="number"||r=="symbol"||r=="boolean"||e==null||he(e)?!0:Wr.test(e)||!Zr.test(e)||t!=null&&e in Object(t)}var z=L(Object,"create");function Jr(){this.__data__=z?z(null):{},this.size=0}function Qr(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var Vr="__lodash_hash_undefined__",kr=Object.prototype,en=kr.hasOwnProperty;function tn(e){var t=this.__data__;if(z){var r=t[e];return r===Vr?void 0:r}return en.call(t,e)?t[e]:void 0}var rn=Object.prototype,nn=rn.hasOwnProperty;function sn(e){var t=this.__data__;return z?t[e]!==void 0:nn.call(t,e)}var an="__lodash_hash_undefined__";function on(e,t){var r=this.__data__;return this.size+=this.has(e)?0:1,r[e]=z&&t===void 0?an:t,this}function x(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}x.prototype.clear=Jr;x.prototype.delete=Qr;x.prototype.get=tn;x.prototype.has=sn;x.prototype.set=on;function un(){this.__data__=[],this.size=0}function k(e,t){for(var r=e.length;r--;)if(ke(e[r][0],t))return r;return-1}var fn=Array.prototype,hn=fn.splice;function cn(e){var t=this.__data__,r=k(t,e);if(r<0)return!1;var n=t.length-1;return r==n?t.pop():hn.call(t,r,1),--this.size,!0}function ln(e){var t=this.__data__,r=k(t,e);return r<0?void 0:t[r][1]}function dn(e){return k(this.__data__,e)>-1}function gn(e,t){var r=this.__data__,n=k(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}function T(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}T.prototype.clear=un;T.prototype.delete=cn;T.prototype.get=ln;T.prototype.has=dn;T.prototype.set=gn;var H=L(w,"Map");function pn(){this.size=0,this.__data__={hash:new x,map:new(H||T),string:new x}}function _n(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}function ee(e,t){var r=e.__data__;return _n(t)?r[typeof t=="string"?"string":"hash"]:r.map}function bn(e){var t=ee(this,e).delete(e);return this.size-=t?1:0,t}function yn(e){return ee(this,e).get(e)}function vn(e){return ee(this,e).has(e)}function On(e,t){var r=ee(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this}function A(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}A.prototype.clear=pn;A.prototype.delete=bn;A.prototype.get=yn;A.prototype.has=vn;A.prototype.set=On;var mn="Expected a function";function pe(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(mn);var r=function(){var n=arguments,i=t?t.apply(this,n):n[0],s=r.cache;if(s.has(i))return s.get(i);var a=e.apply(this,n);return r.cache=s.set(i,a)||s,a};return r.cache=new(pe.Cache||A),r}pe.Cache=A;var wn=500;function Tn(e){var t=pe(e,function(n){return r.size===wn&&r.clear(),n}),r=t.cache;return t}var An=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Pn=/\\(\\)?/g,En=Tn(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(An,function(r,n,i,s){t.push(i?s.replace(Pn,"$1"):n||r)}),t});function $n(e){return e==null?"":Qe(e)}function st(e,t){return g(e)?e:ge(e,t)?[e]:En($n(e))}function te(e){if(typeof e=="string"||he(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}function at(e,t){t=st(t,e);for(var r=0,n=t.length;e!=null&&r<n;)e=e[te(t[r++])];return r&&r==n?e:void 0}function Sn(e,t,r){var n=e==null?void 0:at(e,t);return n===void 0?r:n}function ot(e,t){for(var r=-1,n=t.length,i=e.length;++r<n;)e[i+r]=t[r];return e}var xe=y?y.isConcatSpreadable:void 0;function Cn(e){return g(e)||V(e)||!!(xe&&e&&e[xe])}function jn(e,t,r,n,i){var s=-1,a=e.length;for(r||(r=Cn),i||(i=[]);++s<a;){var o=e[s];r(o)?ot(i,o):n||(i[i.length]=o)}return i}function xn(e,t,r,n){var i=-1,s=e==null?0:e.length;for(n&&s&&(r=e[++i]);++i<s;)r=t(r,e[i],i,e);return r}function In(){this.__data__=new T,this.size=0}function Ln(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}function Rn(e){return this.__data__.get(e)}function Nn(e){return this.__data__.has(e)}var Mn=200;function Dn(e,t){var r=this.__data__;if(r instanceof T){var n=r.__data__;if(!H||n.length<Mn-1)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new A(n)}return r.set(e,t),this.size=r.size,this}function m(e){var t=this.__data__=new T(e);this.size=t.size}m.prototype.clear=In;m.prototype.delete=Ln;m.prototype.get=Rn;m.prototype.has=Nn;m.prototype.set=Dn;function ut(e,t){for(var r=-1,n=e==null?0:e.length,i=0,s=[];++r<n;){var a=e[r];t(a,r,e)&&(s[i++]=a)}return s}function Fn(){return[]}var Gn=Object.prototype,Un=Gn.propertyIsEnumerable,Ie=Object.getOwnPropertySymbols,zn=Ie?function(e){return e==null?[]:(e=Object(e),ut(Ie(e),function(t){return Un.call(e,t)}))}:Fn;function Hn(e,t,r){var n=t(e);return g(e)?n:ot(n,r(e))}function Le(e){return Hn(e,b,zn)}var ue=L(w,"DataView"),fe=L(w,"Promise"),N=L(w,"Set"),Re="[object Map]",Bn="[object Object]",Ne="[object Promise]",Me="[object Set]",De="[object WeakMap]",Fe="[object DataView]",Kn=I(ue),qn=I(H),Xn=I(fe),Yn=I(N),Zn=I(oe),O=M;(ue&&O(new ue(new ArrayBuffer(1)))!=Fe||H&&O(new H)!=Re||fe&&O(fe.resolve())!=Ne||N&&O(new N)!=Me||oe&&O(new oe)!=De)&&(O=function(e){var t=M(e),r=t==Bn?e.constructor:void 0,n=r?I(r):"";if(n)switch(n){case Kn:return Fe;case qn:return Re;case Xn:return Ne;case Yn:return Me;case Zn:return De}return t});var Ge=w.Uint8Array,Wn="__lodash_hash_undefined__";function Jn(e){return this.__data__.set(e,Wn),this}function Qn(e){return this.__data__.has(e)}function B(e){var t=-1,r=e==null?0:e.length;for(this.__data__=new A;++t<r;)this.add(e[t])}B.prototype.add=B.prototype.push=Jn;B.prototype.has=Qn;function Vn(e,t){for(var r=-1,n=e==null?0:e.length;++r<n;)if(t(e[r],r,e))return!0;return!1}function ft(e,t){return e.has(t)}var kn=1,ei=2;function ht(e,t,r,n,i,s){var a=r&kn,o=e.length,u=t.length;if(o!=u&&!(a&&u>o))return!1;var f=s.get(e),d=s.get(t);if(f&&d)return f==t&&d==e;var c=-1,l=!0,v=r&ei?new B:void 0;for(s.set(e,t),s.set(t,e);++c<o;){var p=e[c],_=t[c];if(n)var P=a?n(_,p,c,t,e,s):n(p,_,c,e,t,s);if(P!==void 0){if(P)continue;l=!1;break}if(v){if(!Vn(t,function(E,$){if(!ft(v,$)&&(p===E||i(p,E,r,n,s)))return v.push($)})){l=!1;break}}else if(!(p===_||i(p,_,r,n,s))){l=!1;break}}return s.delete(e),s.delete(t),l}function ti(e){var t=-1,r=Array(e.size);return e.forEach(function(n,i){r[++t]=[i,n]}),r}function _e(e){var t=-1,r=Array(e.size);return e.forEach(function(n){r[++t]=n}),r}var ri=1,ni=2,ii="[object Boolean]",si="[object Date]",ai="[object Error]",oi="[object Map]",ui="[object Number]",fi="[object RegExp]",hi="[object Set]",ci="[object String]",li="[object Symbol]",di="[object ArrayBuffer]",gi="[object DataView]",Ue=y?y.prototype:void 0,ie=Ue?Ue.valueOf:void 0;function pi(e,t,r,n,i,s,a){switch(r){case gi:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case di:return!(e.byteLength!=t.byteLength||!s(new Ge(e),new Ge(t)));case ii:case si:case ui:return ke(+e,+t);case ai:return e.name==t.name&&e.message==t.message;case fi:case ci:return e==t+"";case oi:var o=ti;case hi:var u=n&ri;if(o||(o=_e),e.size!=t.size&&!u)return!1;var f=a.get(e);if(f)return f==t;n|=ni,a.set(e,t);var d=ht(o(e),o(t),n,i,s,a);return a.delete(e),d;case li:if(ie)return ie.call(e)==ie.call(t)}return!1}var _i=1,bi=Object.prototype,yi=bi.hasOwnProperty;function vi(e,t,r,n,i,s){var a=r&_i,o=Le(e),u=o.length,f=Le(t),d=f.length;if(u!=d&&!a)return!1;for(var c=u;c--;){var l=o[c];if(!(a?l in t:yi.call(t,l)))return!1}var v=s.get(e),p=s.get(t);if(v&&p)return v==t&&p==e;var _=!0;s.set(e,t),s.set(t,e);for(var P=a;++c<u;){l=o[c];var E=e[l],$=t[l];if(n)var ve=a?n($,E,l,t,e,s):n(E,$,l,e,t,s);if(!(ve===void 0?E===$||i(E,$,r,n,s):ve)){_=!1;break}P||(P=l=="constructor")}if(_&&!P){var K=e.constructor,q=t.constructor;K!=q&&"constructor"in e&&"constructor"in t&&!(typeof K=="function"&&K instanceof K&&typeof q=="function"&&q instanceof q)&&(_=!1)}return s.delete(e),s.delete(t),_}var Oi=1,ze="[object Arguments]",He="[object Array]",X="[object Object]",mi=Object.prototype,Be=mi.hasOwnProperty;function wi(e,t,r,n,i,s){var a=g(e),o=g(t),u=a?He:O(e),f=o?He:O(t);u=u==ze?X:u,f=f==ze?X:f;var d=u==X,c=f==X,l=u==f;if(l&&W(e)){if(!W(t))return!1;a=!0,d=!1}if(l&&!d)return s||(s=new m),a||de(e)?ht(e,t,r,n,i,s):pi(e,t,u,r,n,i,s);if(!(r&Oi)){var v=d&&Be.call(e,"__wrapped__"),p=c&&Be.call(t,"__wrapped__");if(v||p){var _=v?e.value():e,P=p?t.value():t;return s||(s=new m),i(_,P,r,n,s)}}return l?(s||(s=new m),vi(e,t,r,n,i,s)):!1}function be(e,t,r,n,i){return e===t?!0:e==null||t==null||!j(e)&&!j(t)?e!==e&&t!==t:wi(e,t,r,n,be,i)}var Ti=1,Ai=2;function Pi(e,t,r,n){var i=r.length,s=i;if(e==null)return!s;for(e=Object(e);i--;){var a=r[i];if(a[2]?a[1]!==e[a[0]]:!(a[0]in e))return!1}for(;++i<s;){a=r[i];var o=a[0],u=e[o],f=a[1];if(a[2]){if(u===void 0&&!(o in e))return!1}else{var d=new m,c;if(!(c===void 0?be(f,u,Ti|Ai,n,d):c))return!1}}return!0}function ct(e){return e===e&&!ce(e)}function Ei(e){for(var t=b(e),r=t.length;r--;){var n=t[r],i=e[n];t[r]=[n,i,ct(i)]}return t}function lt(e,t){return function(r){return r==null?!1:r[e]===t&&(t!==void 0||e in Object(r))}}function $i(e){var t=Ei(e);return t.length==1&&t[0][2]?lt(t[0][0],t[0][1]):function(r){return r===e||Pi(r,e,t)}}function Si(e,t){return e!=null&&t in Object(e)}function Ci(e,t,r){t=st(t,e);for(var n=-1,i=t.length,s=!1;++n<i;){var a=te(t[n]);if(!(s=e!=null&&r(e,a)))break;e=e[a]}return s||++n!=i?s:(i=e==null?0:e.length,!!i&&le(i)&&Ve(a,i)&&(g(e)||V(e)))}function ji(e,t){return e!=null&&Ci(e,t,Si)}var xi=1,Ii=2;function Li(e,t){return ge(e)&&ct(t)?lt(te(e),t):function(r){var n=Sn(r,e);return n===void 0&&n===t?ji(r,e):be(t,n,xi|Ii)}}function Ri(e){return function(t){return t?.[e]}}function Ni(e){return function(t){return at(t,e)}}function Mi(e){return ge(e)?Ri(te(e)):Ni(e)}function dt(e){return typeof e=="function"?e:e==null?J:typeof e=="object"?g(e)?Li(e[0],e[1]):$i(e):Mi(e)}function Di(e){return function(t,r,n){for(var i=-1,s=Object(t),a=n(t),o=a.length;o--;){var u=a[++i];if(r(s[u],u,s)===!1)break}return t}}var Fi=Di();function Gi(e,t){return e&&Fi(e,t,b)}function Ui(e,t){return function(r,n){if(r==null)return r;if(!Q(r))return e(r,n);for(var i=r.length,s=-1,a=Object(r);++s<i&&n(a[s],s,a)!==!1;);return r}}var ye=Ui(Gi);function zi(e){return j(e)&&Q(e)}function Hi(e){return typeof e=="function"?e:J}function S(e,t){var r=g(e)?Wt:ye;return r(e,Hi(t))}function Bi(e,t){var r=[];return ye(e,function(n,i,s){t(n,i,s)&&r.push(n)}),r}function Y(e,t){var r=g(e)?ut:Bi;return r(e,dt(t))}function Ki(e,t){return Je(t,function(r){return e[r]})}function se(e){return e==null?[]:Ki(e,b(e))}var qi="[object Map]",Xi="[object Set]",Yi=Object.prototype,Zi=Yi.hasOwnProperty;function Ke(e){if(e==null)return!0;if(Q(e)&&(g(e)||typeof e=="string"||typeof e.splice=="function"||W(e)||de(e)||V(e)))return!e.length;var t=O(e);if(t==qi||t==Xi)return!e.size;if(et(e))return!it(e).length;for(var r in e)if(Zi.call(e,r))return!1;return!0}function R(e){return e===void 0}function Wi(e,t,r,n,i){return i(e,function(s,a,o){r=n?(n=!1,s):t(r,s,a,o)}),r}function Ji(e,t,r){var n=g(e)?xn:Wi,i=arguments.length<3;return n(e,dt(t),r,i,ye)}var Qi=1/0,Vi=N&&1/_e(new N([,-0]))[1]==Qi?function(e){return new N(e)}:Ht,ki=200;function es(e,t,r){var n=-1,i=er,s=e.length,a=!0,o=[],u=o;if(s>=ki){var f=Vi(e);if(f)return _e(f);a=!1,i=ft,u=new B}else u=o;e:for(;++n<s;){var d=e[n],c=d;if(d=d!==0?d:0,a&&c===c){for(var l=u.length;l--;)if(u[l]===c)continue e;o.push(d)}else i(u,c,r)||(u!==o&&u.push(c),o.push(d))}return o}var ts=ir(function(e){return es(jn(e,1,zi,!0))}),rs="\0",C="\0",qe="";class gt{constructor(t={}){this._isDirected=Object.prototype.hasOwnProperty.call(t,"directed")?t.directed:!0,this._isMultigraph=Object.prototype.hasOwnProperty.call(t,"multigraph")?t.multigraph:!1,this._isCompound=Object.prototype.hasOwnProperty.call(t,"compound")?t.compound:!1,this._label=void 0,this._defaultNodeLabelFn=F(void 0),this._defaultEdgeLabelFn=F(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[C]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}isDirected(){return this._isDirected}isMultigraph(){return this._isMultigraph}isCompound(){return this._isCompound}setGraph(t){return this._label=t,this}graph(){return this._label}setDefaultNodeLabel(t){return Z(t)||(t=F(t)),this._defaultNodeLabelFn=t,this}nodeCount(){return this._nodeCount}nodes(){return b(this._nodes)}sources(){var t=this;return Y(this.nodes(),function(r){return Ke(t._in[r])})}sinks(){var t=this;return Y(this.nodes(),function(r){return Ke(t._out[r])})}setNodes(t,r){var n=arguments,i=this;return S(t,function(s){n.length>1?i.setNode(s,r):i.setNode(s)}),this}setNode(t,r){return Object.prototype.hasOwnProperty.call(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=r),this):(this._nodes[t]=arguments.length>1?r:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]=C,this._children[t]={},this._children[C][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)}node(t){return this._nodes[t]}hasNode(t){return Object.prototype.hasOwnProperty.call(this._nodes,t)}removeNode(t){if(Object.prototype.hasOwnProperty.call(this._nodes,t)){var r=n=>this.removeEdge(this._edgeObjs[n]);delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],S(this.children(t),n=>{this.setParent(n)}),delete this._children[t]),S(b(this._in[t]),r),delete this._in[t],delete this._preds[t],S(b(this._out[t]),r),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this}setParent(t,r){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(R(r))r=C;else{r+="";for(var n=r;!R(n);n=this.parent(n))if(n===t)throw new Error("Setting "+r+" as parent of "+t+" would create a cycle");this.setNode(r)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=r,this._children[r][t]=!0,this}_removeFromParentsChildList(t){delete this._children[this._parent[t]][t]}parent(t){if(this._isCompound){var r=this._parent[t];if(r!==C)return r}}children(t){if(R(t)&&(t=C),this._isCompound){var r=this._children[t];if(r)return b(r)}else{if(t===C)return this.nodes();if(this.hasNode(t))return[]}}predecessors(t){var r=this._preds[t];if(r)return b(r)}successors(t){var r=this._sucs[t];if(r)return b(r)}neighbors(t){var r=this.predecessors(t);if(r)return ts(r,this.successors(t))}isLeaf(t){var r;return this.isDirected()?r=this.successors(t):r=this.neighbors(t),r.length===0}filterNodes(t){var r=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});r.setGraph(this.graph());var n=this;S(this._nodes,function(a,o){t(o)&&r.setNode(o,a)}),S(this._edgeObjs,function(a){r.hasNode(a.v)&&r.hasNode(a.w)&&r.setEdge(a,n.edge(a))});var i={};function s(a){var o=n.parent(a);return o===void 0||r.hasNode(o)?(i[a]=o,o):o in i?i[o]:s(o)}return this._isCompound&&S(r.nodes(),function(a){r.setParent(a,s(a))}),r}setDefaultEdgeLabel(t){return Z(t)||(t=F(t)),this._defaultEdgeLabelFn=t,this}edgeCount(){return this._edgeCount}edges(){return se(this._edgeObjs)}setPath(t,r){var n=this,i=arguments;return Ji(t,function(s,a){return i.length>1?n.setEdge(s,a,r):n.setEdge(s,a),a}),this}setEdge(){var t,r,n,i,s=!1,a=arguments[0];typeof a=="object"&&a!==null&&"v"in a?(t=a.v,r=a.w,n=a.name,arguments.length===2&&(i=arguments[1],s=!0)):(t=a,r=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],s=!0)),t=""+t,r=""+r,R(n)||(n=""+n);var o=G(this._isDirected,t,r,n);if(Object.prototype.hasOwnProperty.call(this._edgeLabels,o))return s&&(this._edgeLabels[o]=i),this;if(!R(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(r),this._edgeLabels[o]=s?i:this._defaultEdgeLabelFn(t,r,n);var u=ns(this._isDirected,t,r,n);return t=u.v,r=u.w,Object.freeze(u),this._edgeObjs[o]=u,Xe(this._preds[r],t),Xe(this._sucs[t],r),this._in[r][o]=u,this._out[t][o]=u,this._edgeCount++,this}edge(t,r,n){var i=arguments.length===1?ae(this._isDirected,arguments[0]):G(this._isDirected,t,r,n);return this._edgeLabels[i]}hasEdge(t,r,n){var i=arguments.length===1?ae(this._isDirected,arguments[0]):G(this._isDirected,t,r,n);return Object.prototype.hasOwnProperty.call(this._edgeLabels,i)}removeEdge(t,r,n){var i=arguments.length===1?ae(this._isDirected,arguments[0]):G(this._isDirected,t,r,n),s=this._edgeObjs[i];return s&&(t=s.v,r=s.w,delete this._edgeLabels[i],delete this._edgeObjs[i],Ye(this._preds[r],t),Ye(this._sucs[t],r),delete this._in[r][i],delete this._out[t][i],this._edgeCount--),this}inEdges(t,r){var n=this._in[t];if(n){var i=se(n);return r?Y(i,function(s){return s.v===r}):i}}outEdges(t,r){var n=this._out[t];if(n){var i=se(n);return r?Y(i,function(s){return s.w===r}):i}}nodeEdges(t,r){var n=this.inEdges(t,r);if(n)return n.concat(this.outEdges(t,r))}}gt.prototype._nodeCount=0;gt.prototype._edgeCount=0;function Xe(e,t){e[t]?e[t]++:e[t]=1}function Ye(e,t){--e[t]||delete e[t]}function G(e,t,r,n){var i=""+t,s=""+r;if(!e&&i>s){var a=i;i=s,s=a}return i+qe+s+qe+(R(n)?rs:n)}function ns(e,t,r,n){var i=""+t,s=""+r;if(!e&&i>s){var a=i;i=s,s=a}var o={v:i,w:s};return n&&(o.name=n),o}function ae(e,t){return G(e,t.v,t.w,t.name)}export{Y as $,he as A,Ve as B,ir as C,jn as D,Zt as E,nr as F,gt as G,M as H,de as I,zi as J,V as K,Z as L,Fi as M,Jt as N,Hi as O,Gi as P,Ci as Q,J as R,y as S,st as T,Ge as U,te as V,at as W,ji as X,$n as Y,S as Z,F as _,ce as a,se as a0,Ji as a1,et as b,Q as c,Ae as d,ke as e,Br as f,zn as g,ot as h,R as i,Hn as j,b as k,j as l,O as m,Gr as n,Kr as o,Ce as p,W as q,w as r,Fn as s,m as t,Wt as u,g as v,Le as w,ye as x,dt as y,Je as z};
@@ -1,4 +1,4 @@
1
- import{h as F,b as $,j as e,i as B,k as L,l as O,X as I,F as W,m as _,n as q,o as K,D as H,d as E}from"./index-DFnVoqpx.js";import{r as n}from"./vendor-react-whEHfigN.js";import{m as V,E as Q,M as X,R as J,o as Y,a as Z,b as ee}from"./MarkdownPreview-C0tqYnVu.js";const D=`# Product Requirements Document
1
+ import{r as n,j as e}from"./vendor-react-C2GTiUCy.js";import{c as L,a as $,f as E}from"./feature-workspace-CAB6bgPy.js";import{T as B,at as F,a as O,X as I,$ as W,a9 as _,c as q,M as K,aa as H,b2 as V,b3 as Q}from"./vendor-ui-CAUHSABu.js";import{E as X,m as J,M as Y,R as Z,o as ee}from"./MarkdownPreview-PEEWVWeS.js";import"./vendor-i18n-B6HjLCnN.js";import"./vendor-data-DsEZeNPr.js";import"./vendor-markdown-DkITEES2.js";import"./feature-chat-CvOCyaLe.js";const D=`# Product Requirements Document
2
2
 
3
3
  ## 1. Overview
4
4
  - Product Name:
@@ -58,5 +58,5 @@ Describe what problem this product solves and who it serves.
58
58
  ## 10. Open Questions
59
59
  - Question 1
60
60
  - Question 2
61
- `,te="https://github.com/eyaltoledano/claude-task-master/blob/main/docs/examples.md",re=/[<>:"/\\|?*]/g,A=/\.(txt|md)$/i;function se(t){return t.replace(re,"")}function ae(t){return t.replace(A,"")}function M(t){return A.test(t)?t:`${t}.txt`}function ne(t){return`prd-${t.toISOString().split("T")[0]}`}function ie({file:t,isNewFile:s,initialContent:r,projectPath:a}){const[l,o]=n.useState(r||""),[f,h]=n.useState(""),[u,x]=n.useState(!s),[p,d]=n.useState(null),b=n.useCallback(i=>{h(se(i))},[]);return n.useEffect(()=>{let i=!0;return(async()=>{const c=t?.name?ae(t.name):ne(new Date);if(i&&h(c),s){if(!i)return;o(r||D),d(null),x(!1);return}if(t?.content){if(!i)return;o(t.content),d(null),x(!1);return}if(!t?.projectId||!t?.path){if(!i)return;o(r||D),d(null),x(!1);return}try{x(!0);const m=await F.readFile(t.projectId,t.path);if(!m.ok)throw new Error(`Failed to load file: ${m.status} ${m.statusText}`);const g=await m.json();if(!i)return;o(g.content||D),d(null)}catch(m){const g=m instanceof Error?m.message:"Unknown error";if(!i)return;o(r||D),d(`Unable to load file content: ${g}`)}finally{i&&x(!1)}})(),()=>{i=!1}},[t,r,s,a]),{content:l,setContent:o,fileName:f,setFileName:b,loading:u,loadError:p}}function oe({onSave:t,onClose:s}){n.useEffect(()=>{const r=a=>{const l=a.key.toLowerCase();if((a.ctrlKey||a.metaKey)&&l==="s"){a.preventDefault(),t();return}a.key==="Escape"&&(a.preventDefault(),s())};return document.addEventListener("keydown",r),()=>{document.removeEventListener("keydown",r)}},[s,t])}function le(t){return t.prdFiles||t.prds||[]}function de({projectId:t}){const[s,r]=n.useState([]),a=n.useCallback(async()=>{if(!t){r([]);return}try{const l=await F.get(`/taskmaster/prd/${encodeURIComponent(t)}`);if(!l.ok){r([]);return}const o=await l.json();r(le(o))}catch(l){console.error("Failed to fetch existing PRDs:",l),r([])}},[t]);return n.useEffect(()=>{a()},[a]),{existingPrds:s,refreshExistingPrds:a}}function ce({projectId:t,existingPrds:s,isExistingFile:r,onAfterSave:a}){const[l,o]=n.useState(!1),[f,h]=n.useState(!1),u=n.useRef(null);return n.useEffect(()=>()=>{u.current&&clearTimeout(u.current)},[]),{savePrd:n.useCallback(async({content:p,fileName:d,allowOverwrite:b=!1})=>{if(!p.trim())return{status:"failed",message:"Please add content before saving."};if(!d.trim())return{status:"failed",message:"Please provide a filename for the PRD."};if(!t)return{status:"failed",message:"No project selected. Please reopen the editor."};const i=M(d.trim());if(s.some(c=>c.name===i)&&!b&&!r)return{status:"needs-overwrite",fileName:i};o(!0);try{const c=await $(`/api/taskmaster/prd/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify({fileName:i,content:p})});if(!c.ok){const m=`Save failed: ${c.status}`;try{return{status:"failed",message:(await c.json()).message||m}}catch{return{status:"failed",message:m}}}return u.current&&clearTimeout(u.current),h(!0),u.current=setTimeout(()=>{h(!1),u.current=null},2e3),a&&await a(),{status:"saved",fileName:i}}catch(c){return{status:"failed",message:`Error saving PRD: ${c instanceof Error?c.message:"Unknown error"}`}}finally{o(!1)}},[s,r,a,t]),saving:l,saveSuccess:f}}function me({isOpen:t,fileName:s,saving:r,onCancel:a,onConfirm:l}){return t?e.jsxs("div",{className:"fixed inset-0 z-[300] flex items-center justify-center p-4",children:[e.jsx("div",{className:"fixed inset-0 bg-black/50",onClick:a}),e.jsx("div",{className:"relative w-full max-w-md rounded-lg border border-gray-200 bg-white shadow-xl dark:border-gray-700 dark:bg-gray-800",children:e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"mb-4 flex items-center",children:[e.jsx("div",{className:"mr-3 rounded-full bg-yellow-100 p-2 dark:bg-yellow-900",children:e.jsx(B,{className:"h-5 w-5 text-yellow-600 dark:text-yellow-400"})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"File Already Exists"})]}),e.jsxs("p",{className:"mb-6 text-sm text-gray-600 dark:text-gray-400",children:['A PRD named "',s,'" already exists. Do you want to overwrite it?']}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx("button",{onClick:a,disabled:r,className:"rounded-md border border-gray-300 bg-white px-4 py-2 text-sm text-gray-700 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",children:"Cancel"}),e.jsxs("button",{onClick:l,disabled:r,className:"flex items-center gap-2 rounded-md bg-yellow-600 px-4 py-2 text-sm text-white transition-colors hover:bg-yellow-700 disabled:opacity-50",children:[e.jsx(L,{className:"h-4 w-4"}),e.jsx("span",{children:r?"Saving...":"Overwrite"})]})]})]})})]}):null}function ue(){return e.jsx("div",{className:"fixed inset-0 z-[200] md:flex md:items-center md:justify-center md:bg-black/50",children:e.jsx("div",{className:"flex h-full w-full items-center justify-center bg-white p-8 dark:bg-gray-900 md:h-auto md:w-auto md:rounded-lg",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-b-2 border-blue-600"}),e.jsx("span",{className:"text-gray-900 dark:text-white",children:"Loading PRD..."})]})})})}function xe({isOpen:t,fileName:s,onClose:r}){return t?e.jsx("div",{className:"fixed inset-0 z-[300] flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",children:e.jsxs("div",{className:"w-full max-w-md rounded-lg border border-gray-200 bg-white shadow-xl dark:border-gray-700 dark:bg-gray-800",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-gray-200 p-6 dark:border-gray-700",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-purple-100 dark:bg-purple-900/50",children:e.jsx(O,{className:"h-4 w-4 text-purple-600 dark:text-purple-400"})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"Generate Tasks from PRD"})]}),e.jsx("button",{onClick:r,className:"rounded-md p-2 text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",children:e.jsx(I,{className:"h-5 w-5"})})]}),e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-800 dark:bg-purple-900/20",children:[e.jsx("h4",{className:"mb-2 font-semibold text-purple-900 dark:text-purple-100",children:"Ask Claude Code directly"}),e.jsx("p",{className:"mb-3 text-sm text-purple-800 dark:text-purple-200",children:"Save this PRD, then ask Claude Code in chat to parse the file and create your initial tasks."}),e.jsxs("div",{className:"rounded border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800",children:[e.jsx("p",{className:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400",children:"Example prompt"}),e.jsxs("p",{className:"font-mono text-xs text-gray-900 dark:text-white",children:["I have a PRD at .taskmaster/docs/",s,". Parse it and create the initial tasks."]})]})]}),e.jsx("div",{className:"border-t border-gray-200 pt-4 text-center dark:border-gray-700",children:e.jsx("a",{href:te,target:"_blank",rel:"noopener noreferrer",className:"inline-block text-sm font-medium text-purple-600 underline hover:text-purple-700 dark:text-purple-400 dark:hover:text-purple-300",children:"View TaskMaster documentation"})}),e.jsx("button",{onClick:r,className:"w-full rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",children:"Got it"})]})]})}):null}function he({content:t,onContentChange:s,previewMode:r,isDarkMode:a,wordWrap:l}){const o=n.useMemo(()=>[V(),...l?[Q.lineWrapping]:[]],[l]);return r?e.jsx("div",{className:"prose prose-gray h-full max-w-none overflow-y-auto p-6 dark:prose-invert",children:e.jsx(X,{content:t})}):e.jsx(J,{value:t,onChange:s,extensions:o,theme:a?Y:void 0,height:"100%",style:{fontSize:"14px",height:"100%"},basicSetup:{lineNumbers:!0,foldGutter:!0,dropCursor:!1,allowMultipleSelections:!1,indentOnInput:!0,bracketMatching:!0,closeBrackets:!0,autocompletion:!0,highlightSelectionMatches:!0,searchKeymap:!0}})}function pe(t){return{lines:t.split(`
62
- `).length,characters:t.length,words:t.split(/\s+/).filter(Boolean).length}}function ge({content:t}){const s=n.useMemo(()=>pe(t),[t]);return e.jsxs("div",{className:"flex flex-shrink-0 items-center justify-between border-t border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800",children:[e.jsxs("div",{className:"flex items-center gap-4 text-sm text-gray-600 dark:text-gray-400",children:[e.jsxs("span",{children:["Lines: ",s.lines]}),e.jsxs("span",{children:["Characters: ",s.characters]}),e.jsxs("span",{children:["Words: ",s.words]}),e.jsx("span",{children:"Format: Markdown"})]}),e.jsx("div",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Press Ctrl+S to save and Esc to close"})]})}function S({title:t,onClick:s,icon:r,active:a=!1}){return e.jsx("button",{onClick:s,title:t,className:E("p-2 rounded-md min-w-[44px] min-h-[44px] md:min-w-0 md:min-h-0 flex items-center justify-center transition-colors",a?"text-purple-600 dark:text-purple-400 bg-purple-50 dark:bg-purple-900/50":"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-800"),children:r})}function fe({fileName:t,onFileNameChange:s,isNewFile:r,previewMode:a,onTogglePreview:l,wordWrap:o,onToggleWordWrap:f,isDarkMode:h,onToggleTheme:u,onDownload:x,onOpenGenerateTasks:p,canGenerateTasks:d,onSave:b,saving:i,saveSuccess:y,isFullscreen:c,onToggleFullscreen:m,onClose:g}){const j=n.useRef(null);return e.jsxs("div",{className:"flex min-w-0 flex-shrink-0 items-center justify-between border-b border-gray-200 p-4 dark:border-gray-700",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsx("div",{className:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded bg-purple-600",children:e.jsx(W,{className:"h-4 w-4 text-white"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex min-w-0 flex-col gap-2 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-1",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2 focus-within:border-purple-500 focus-within:ring-2 focus-within:ring-purple-500 dark:border-gray-600 dark:bg-gray-700 dark:focus-within:border-purple-400 dark:focus-within:ring-purple-400",children:[e.jsx("input",{ref:j,type:"text",value:t,onChange:v=>s(v.target.value),className:"min-w-0 flex-1 border-none bg-transparent text-base font-medium text-gray-900 placeholder-gray-400 outline-none dark:text-white dark:placeholder-gray-500 sm:text-sm",placeholder:"Enter PRD filename",maxLength:100}),e.jsx("span",{className:"ml-1 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400 sm:text-xs",children:".txt"})]}),e.jsx("button",{onClick:()=>j.current?.focus(),className:"p-1 text-gray-400 transition-colors hover:text-purple-600 dark:hover:text-purple-400",title:"Focus filename input",children:e.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})})})]}),e.jsxs("div",{className:"flex flex-shrink-0 items-center gap-2",children:[e.jsx("span",{className:"whitespace-nowrap rounded bg-purple-100 px-2 py-1 text-xs text-purple-600 dark:bg-purple-900 dark:text-purple-300",children:"PRD"}),r&&e.jsx("span",{className:"whitespace-nowrap rounded bg-green-100 px-2 py-1 text-xs text-green-600 dark:bg-green-900 dark:text-green-300",children:"New"})]})]}),e.jsx("p",{className:"mt-1 truncate text-xs text-gray-500 dark:text-gray-400 sm:text-sm",children:"Product Requirements Document"})]})]}),e.jsxs("div",{className:"flex flex-shrink-0 items-center gap-1 md:gap-2",children:[e.jsx(S,{title:a?"Switch to edit mode":"Preview markdown",onClick:l,icon:e.jsx(_,{className:"h-5 w-5 md:h-4 md:w-4"}),active:a}),e.jsx(S,{title:o?"Disable word wrap":"Enable word wrap",onClick:f,icon:e.jsx("span",{className:"font-mono text-sm font-bold md:text-xs",children:"WRAP"}),active:o}),e.jsx(S,{title:"Toggle theme",onClick:u,icon:h?e.jsx(q,{className:"h-5 w-5 md:h-4 md:w-4"}):e.jsx(K,{className:"h-5 w-5 md:h-4 md:w-4"})}),e.jsx(S,{title:"Download PRD",onClick:x,icon:e.jsx(H,{className:"h-5 w-5 md:h-4 md:w-4"})}),e.jsxs("button",{onClick:p,disabled:!d,className:E("px-3 py-2 rounded-md disabled:opacity-50 flex items-center gap-2 transition-colors text-sm font-medium text-white min-h-[44px] md:min-h-0","bg-purple-600 hover:bg-purple-700"),title:"Generate tasks from PRD content",children:[e.jsx(O,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden md:inline",children:"Generate Tasks"})]}),e.jsx("button",{onClick:b,disabled:i,className:E("px-3 py-2 text-white rounded-md disabled:opacity-50 flex items-center gap-2 transition-colors min-h-[44px] md:min-h-0",y?"bg-green-600 hover:bg-green-700":"bg-purple-600 hover:bg-purple-700"),children:y?e.jsxs(e.Fragment,{children:[e.jsx("svg",{className:"h-5 w-5 md:h-4 md:w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),e.jsx("span",{className:"hidden sm:inline",children:"Saved!"})]}):e.jsxs(e.Fragment,{children:[e.jsx(L,{className:"h-5 w-5 md:h-4 md:w-4"}),e.jsx("span",{className:"hidden sm:inline",children:i?"Saving...":"Save PRD"})]})}),e.jsx("button",{onClick:m,className:"hidden items-center justify-center rounded-md p-2 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white md:flex",title:c?"Exit fullscreen":"Fullscreen",children:c?e.jsx(Z,{className:"h-4 w-4"}):e.jsx(ee,{className:"h-4 w-4"})}),e.jsx(S,{title:"Close",onClick:g,icon:e.jsx(I,{className:"h-6 w-6 md:h-4 md:w-4"})})]})]})}function be({content:t,onContentChange:s,fileName:r,onFileNameChange:a,isNewFile:l,saving:o,saveSuccess:f,onSave:h,onDownload:u,onClose:x,loadError:p}){const[d,b]=n.useState(!1),[i,y]=n.useState(!0),[c,m]=n.useState(!1),[g,j]=n.useState(!0),[v,N]=n.useState(!1),C=()=>{if(!t.trim()){alert("Please add content to the PRD before generating tasks.");return}N(!0)};return e.jsxs("div",{className:E("fixed inset-0 z-[200] md:bg-black/50 md:flex md:items-center md:justify-center",d?"md:p-0":"md:p-4"),children:[e.jsxs("div",{className:E("bg-white dark:bg-gray-900 shadow-2xl flex flex-col","w-full h-full md:rounded-lg md:shadow-2xl",d?"md:w-full md:h-full md:rounded-none":"md:w-full md:max-w-6xl md:h-[85vh] md:max-h-[85vh]"),children:[p&&e.jsx("div",{className:"border-b border-yellow-200 bg-yellow-50 px-4 py-3 text-sm text-yellow-800 dark:border-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-200",children:p}),e.jsx(fe,{fileName:r,onFileNameChange:a,isNewFile:l,previewMode:c,onTogglePreview:()=>m(w=>!w),wordWrap:g,onToggleWordWrap:()=>j(w=>!w),isDarkMode:i,onToggleTheme:()=>y(w=>!w),onDownload:u,onOpenGenerateTasks:C,canGenerateTasks:!!t.trim(),onSave:h,saving:o,saveSuccess:f,isFullscreen:d,onToggleFullscreen:()=>b(w=>!w),onClose:x}),e.jsx("div",{className:"flex-1 overflow-hidden",children:e.jsx(he,{content:t,onContentChange:s,previewMode:c,isDarkMode:i,wordWrap:g})}),e.jsx(ge,{content:t})]}),e.jsx(xe,{isOpen:v,fileName:M(r||"prd"),onClose:()=>N(!1)})]})}function je({file:t,onClose:s,projectPath:r,project:a,initialContent:l="",isNewFile:o=!1,onSave:f}){const[h,u]=n.useState(!1),[x,p]=n.useState(""),{content:d,setContent:b,fileName:i,setFileName:y,loading:c,loadError:m}=ie({file:t,isNewFile:o,initialContent:l,projectPath:r}),{existingPrds:g,refreshExistingPrds:j}=de({projectId:a?.projectId}),v=n.useMemo(()=>!o||!!t?.isExisting,[t?.isExisting,o]),{savePrd:N,saving:C,saveSuccess:w}=ce({projectId:a?.projectId,existingPrds:g,isExistingFile:v,onAfterSave:async()=>{await j(),await f?.()}}),U=n.useCallback(()=>{const T=new Blob([d],{type:"text/markdown"}),k=URL.createObjectURL(T),P=document.createElement("a"),G=M(i||"prd");P.href=k,P.download=G,document.body.appendChild(P),P.click(),document.body.removeChild(P),URL.revokeObjectURL(k)},[d,i]),R=n.useCallback(async(T=!1)=>{const k=await N({content:d,fileName:i,allowOverwrite:T});if(k.status==="needs-overwrite"){p(k.fileName),u(!0);return}k.status==="failed"&&alert(k.message)},[d,i,N]),z=n.useCallback(async()=>{u(!1),await R(!0)},[R]);return oe({onSave:()=>{R()},onClose:s}),c?e.jsx(ue,{}):e.jsxs(e.Fragment,{children:[e.jsx(be,{content:d,onContentChange:b,fileName:i,onFileNameChange:y,isNewFile:o,saving:C,saveSuccess:w,onSave:()=>{R()},onDownload:U,onClose:s,loadError:m}),e.jsx(me,{isOpen:h,fileName:x||M(i||"prd"),saving:C,onCancel:()=>u(!1),onConfirm:()=>{z()}})]})}export{je as default};
61
+ `,te="https://github.com/eyaltoledano/claude-task-master/blob/main/docs/examples.md",re=/[<>:"/\\|?*]/g,A=/\.(txt|md)$/i;function se(t){return t.replace(re,"")}function ae(t){return t.replace(A,"")}function M(t){return A.test(t)?t:`${t}.txt`}function ne(t){return`prd-${t.toISOString().split("T")[0]}`}function ie({file:t,isNewFile:s,initialContent:r,projectPath:a}){const[l,o]=n.useState(r||""),[f,h]=n.useState(""),[u,x]=n.useState(!s),[p,d]=n.useState(null),b=n.useCallback(i=>{h(se(i))},[]);return n.useEffect(()=>{let i=!0;return(async()=>{const c=t?.name?ae(t.name):ne(new Date);if(i&&h(c),s){if(!i)return;o(r||D),d(null),x(!1);return}if(t?.content){if(!i)return;o(t.content),d(null),x(!1);return}if(!t?.projectId||!t?.path){if(!i)return;o(r||D),d(null),x(!1);return}try{x(!0);const m=await L.readFile(t.projectId,t.path);if(!m.ok)throw new Error(`Failed to load file: ${m.status} ${m.statusText}`);const g=await m.json();if(!i)return;o(g.content||D),d(null)}catch(m){const g=m instanceof Error?m.message:"Unknown error";if(!i)return;o(r||D),d(`Unable to load file content: ${g}`)}finally{i&&x(!1)}})(),()=>{i=!1}},[t,r,s,a]),{content:l,setContent:o,fileName:f,setFileName:b,loading:u,loadError:p}}function oe({onSave:t,onClose:s}){n.useEffect(()=>{const r=a=>{const l=a.key.toLowerCase();if((a.ctrlKey||a.metaKey)&&l==="s"){a.preventDefault(),t();return}a.key==="Escape"&&(a.preventDefault(),s())};return document.addEventListener("keydown",r),()=>{document.removeEventListener("keydown",r)}},[s,t])}function le(t){return t.prdFiles||t.prds||[]}function de({projectId:t}){const[s,r]=n.useState([]),a=n.useCallback(async()=>{if(!t){r([]);return}try{const l=await L.get(`/taskmaster/prd/${encodeURIComponent(t)}`);if(!l.ok){r([]);return}const o=await l.json();r(le(o))}catch(l){console.error("Failed to fetch existing PRDs:",l),r([])}},[t]);return n.useEffect(()=>{a()},[a]),{existingPrds:s,refreshExistingPrds:a}}function ce({projectId:t,existingPrds:s,isExistingFile:r,onAfterSave:a}){const[l,o]=n.useState(!1),[f,h]=n.useState(!1),u=n.useRef(null);return n.useEffect(()=>()=>{u.current&&clearTimeout(u.current)},[]),{savePrd:n.useCallback(async({content:p,fileName:d,allowOverwrite:b=!1})=>{if(!p.trim())return{status:"failed",message:"Please add content before saving."};if(!d.trim())return{status:"failed",message:"Please provide a filename for the PRD."};if(!t)return{status:"failed",message:"No project selected. Please reopen the editor."};const i=M(d.trim());if(s.some(c=>c.name===i)&&!b&&!r)return{status:"needs-overwrite",fileName:i};o(!0);try{const c=await $(`/api/taskmaster/prd/${encodeURIComponent(t)}`,{method:"POST",body:JSON.stringify({fileName:i,content:p})});if(!c.ok){const m=`Save failed: ${c.status}`;try{return{status:"failed",message:(await c.json()).message||m}}catch{return{status:"failed",message:m}}}return u.current&&clearTimeout(u.current),h(!0),u.current=setTimeout(()=>{h(!1),u.current=null},2e3),a&&await a(),{status:"saved",fileName:i}}catch(c){return{status:"failed",message:`Error saving PRD: ${c instanceof Error?c.message:"Unknown error"}`}}finally{o(!1)}},[s,r,a,t]),saving:l,saveSuccess:f}}function me({isOpen:t,fileName:s,saving:r,onCancel:a,onConfirm:l}){return t?e.jsxs("div",{className:"fixed inset-0 z-[300] flex items-center justify-center p-4",children:[e.jsx("div",{className:"fixed inset-0 bg-black/50",onClick:a}),e.jsx("div",{className:"relative w-full max-w-md rounded-lg border border-gray-200 bg-white shadow-xl dark:border-gray-700 dark:bg-gray-800",children:e.jsxs("div",{className:"p-6",children:[e.jsxs("div",{className:"mb-4 flex items-center",children:[e.jsx("div",{className:"mr-3 rounded-full bg-yellow-100 p-2 dark:bg-yellow-900",children:e.jsx(B,{className:"h-5 w-5 text-yellow-600 dark:text-yellow-400"})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"File Already Exists"})]}),e.jsxs("p",{className:"mb-6 text-sm text-gray-600 dark:text-gray-400",children:['A PRD named "',s,'" already exists. Do you want to overwrite it?']}),e.jsxs("div",{className:"flex justify-end gap-3",children:[e.jsx("button",{onClick:a,disabled:r,className:"rounded-md border border-gray-300 bg-white px-4 py-2 text-sm text-gray-700 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",children:"Cancel"}),e.jsxs("button",{onClick:l,disabled:r,className:"flex items-center gap-2 rounded-md bg-yellow-600 px-4 py-2 text-sm text-white transition-colors hover:bg-yellow-700 disabled:opacity-50",children:[e.jsx(F,{className:"h-4 w-4"}),e.jsx("span",{children:r?"Saving...":"Overwrite"})]})]})]})})]}):null}function ue(){return e.jsx("div",{className:"fixed inset-0 z-[200] md:flex md:items-center md:justify-center md:bg-black/50",children:e.jsx("div",{className:"flex h-full w-full items-center justify-center bg-white p-8 dark:bg-gray-900 md:h-auto md:w-auto md:rounded-lg",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"h-6 w-6 animate-spin rounded-full border-b-2 border-blue-600"}),e.jsx("span",{className:"text-gray-900 dark:text-white",children:"Loading PRD..."})]})})})}function xe({isOpen:t,fileName:s,onClose:r}){return t?e.jsx("div",{className:"fixed inset-0 z-[300] flex items-center justify-center bg-black/50 p-4 backdrop-blur-sm",children:e.jsxs("div",{className:"w-full max-w-md rounded-lg border border-gray-200 bg-white shadow-xl dark:border-gray-700 dark:bg-gray-800",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-gray-200 p-6 dark:border-gray-700",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"flex h-8 w-8 items-center justify-center rounded-lg bg-purple-100 dark:bg-purple-900/50",children:e.jsx(O,{className:"h-4 w-4 text-purple-600 dark:text-purple-400"})}),e.jsx("h3",{className:"text-lg font-semibold text-gray-900 dark:text-white",children:"Generate Tasks from PRD"})]}),e.jsx("button",{onClick:r,className:"rounded-md p-2 text-gray-400 hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",children:e.jsx(I,{className:"h-5 w-5"})})]}),e.jsxs("div",{className:"space-y-4 p-6",children:[e.jsxs("div",{className:"rounded-lg border border-purple-200 bg-purple-50 p-4 dark:border-purple-800 dark:bg-purple-900/20",children:[e.jsx("h4",{className:"mb-2 font-semibold text-purple-900 dark:text-purple-100",children:"Ask Claude Code directly"}),e.jsx("p",{className:"mb-3 text-sm text-purple-800 dark:text-purple-200",children:"Save this PRD, then ask Claude Code in chat to parse the file and create your initial tasks."}),e.jsxs("div",{className:"rounded border border-purple-200 bg-white p-3 dark:border-purple-700 dark:bg-gray-800",children:[e.jsx("p",{className:"mb-1 text-xs font-medium text-gray-600 dark:text-gray-400",children:"Example prompt"}),e.jsxs("p",{className:"font-mono text-xs text-gray-900 dark:text-white",children:["I have a PRD at .taskmaster/docs/",s,". Parse it and create the initial tasks."]})]})]}),e.jsx("div",{className:"border-t border-gray-200 pt-4 text-center dark:border-gray-700",children:e.jsx("a",{href:te,target:"_blank",rel:"noopener noreferrer",className:"inline-block text-sm font-medium text-purple-600 underline hover:text-purple-700 dark:text-purple-400 dark:hover:text-purple-300",children:"View TaskMaster documentation"})}),e.jsx("button",{onClick:r,className:"w-full rounded-lg border border-gray-300 bg-white px-4 py-2 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",children:"Got it"})]})]})}):null}function he({content:t,onContentChange:s,previewMode:r,isDarkMode:a,wordWrap:l}){const o=n.useMemo(()=>[J(),...l?[X.lineWrapping]:[]],[l]);return r?e.jsx("div",{className:"prose prose-gray h-full max-w-none overflow-y-auto p-6 dark:prose-invert",children:e.jsx(Y,{content:t})}):e.jsx(Z,{value:t,onChange:s,extensions:o,theme:a?ee:void 0,height:"100%",style:{fontSize:"14px",height:"100%"},basicSetup:{lineNumbers:!0,foldGutter:!0,dropCursor:!1,allowMultipleSelections:!1,indentOnInput:!0,bracketMatching:!0,closeBrackets:!0,autocompletion:!0,highlightSelectionMatches:!0,searchKeymap:!0}})}function pe(t){return{lines:t.split(`
62
+ `).length,characters:t.length,words:t.split(/\s+/).filter(Boolean).length}}function ge({content:t}){const s=n.useMemo(()=>pe(t),[t]);return e.jsxs("div",{className:"flex flex-shrink-0 items-center justify-between border-t border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-gray-800",children:[e.jsxs("div",{className:"flex items-center gap-4 text-sm text-gray-600 dark:text-gray-400",children:[e.jsxs("span",{children:["Lines: ",s.lines]}),e.jsxs("span",{children:["Characters: ",s.characters]}),e.jsxs("span",{children:["Words: ",s.words]}),e.jsx("span",{children:"Format: Markdown"})]}),e.jsx("div",{className:"text-sm text-gray-500 dark:text-gray-400",children:"Press Ctrl+S to save and Esc to close"})]})}function S({title:t,onClick:s,icon:r,active:a=!1}){return e.jsx("button",{onClick:s,title:t,className:E("p-2 rounded-md min-w-[44px] min-h-[44px] md:min-w-0 md:min-h-0 flex items-center justify-center transition-colors",a?"text-purple-600 dark:text-purple-400 bg-purple-50 dark:bg-purple-900/50":"text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-100 dark:hover:bg-gray-800"),children:r})}function fe({fileName:t,onFileNameChange:s,isNewFile:r,previewMode:a,onTogglePreview:l,wordWrap:o,onToggleWordWrap:f,isDarkMode:h,onToggleTheme:u,onDownload:x,onOpenGenerateTasks:p,canGenerateTasks:d,onSave:b,saving:i,saveSuccess:y,isFullscreen:c,onToggleFullscreen:m,onClose:g}){const j=n.useRef(null);return e.jsxs("div",{className:"flex min-w-0 flex-shrink-0 items-center justify-between border-b border-gray-200 p-4 dark:border-gray-700",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[e.jsx("div",{className:"flex h-8 w-8 flex-shrink-0 items-center justify-center rounded bg-purple-600",children:e.jsx(W,{className:"h-4 w-4 text-white"})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex min-w-0 flex-col gap-2 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-1",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2 focus-within:border-purple-500 focus-within:ring-2 focus-within:ring-purple-500 dark:border-gray-600 dark:bg-gray-700 dark:focus-within:border-purple-400 dark:focus-within:ring-purple-400",children:[e.jsx("input",{ref:j,type:"text",value:t,onChange:v=>s(v.target.value),className:"min-w-0 flex-1 border-none bg-transparent text-base font-medium text-gray-900 placeholder-gray-400 outline-none dark:text-white dark:placeholder-gray-500 sm:text-sm",placeholder:"Enter PRD filename",maxLength:100}),e.jsx("span",{className:"ml-1 whitespace-nowrap text-sm text-gray-500 dark:text-gray-400 sm:text-xs",children:".txt"})]}),e.jsx("button",{onClick:()=>j.current?.focus(),className:"p-1 text-gray-400 transition-colors hover:text-purple-600 dark:hover:text-purple-400",title:"Focus filename input",children:e.jsx("svg",{className:"h-4 w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"})})})]}),e.jsxs("div",{className:"flex flex-shrink-0 items-center gap-2",children:[e.jsx("span",{className:"whitespace-nowrap rounded bg-purple-100 px-2 py-1 text-xs text-purple-600 dark:bg-purple-900 dark:text-purple-300",children:"PRD"}),r&&e.jsx("span",{className:"whitespace-nowrap rounded bg-green-100 px-2 py-1 text-xs text-green-600 dark:bg-green-900 dark:text-green-300",children:"New"})]})]}),e.jsx("p",{className:"mt-1 truncate text-xs text-gray-500 dark:text-gray-400 sm:text-sm",children:"Product Requirements Document"})]})]}),e.jsxs("div",{className:"flex flex-shrink-0 items-center gap-1 md:gap-2",children:[e.jsx(S,{title:a?"Switch to edit mode":"Preview markdown",onClick:l,icon:e.jsx(_,{className:"h-5 w-5 md:h-4 md:w-4"}),active:a}),e.jsx(S,{title:o?"Disable word wrap":"Enable word wrap",onClick:f,icon:e.jsx("span",{className:"font-mono text-sm font-bold md:text-xs",children:"WRAP"}),active:o}),e.jsx(S,{title:"Toggle theme",onClick:u,icon:h?e.jsx(q,{className:"h-5 w-5 md:h-4 md:w-4"}):e.jsx(K,{className:"h-5 w-5 md:h-4 md:w-4"})}),e.jsx(S,{title:"Download PRD",onClick:x,icon:e.jsx(H,{className:"h-5 w-5 md:h-4 md:w-4"})}),e.jsxs("button",{onClick:p,disabled:!d,className:E("px-3 py-2 rounded-md disabled:opacity-50 flex items-center gap-2 transition-colors text-sm font-medium text-white min-h-[44px] md:min-h-0","bg-purple-600 hover:bg-purple-700"),title:"Generate tasks from PRD content",children:[e.jsx(O,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden md:inline",children:"Generate Tasks"})]}),e.jsx("button",{onClick:b,disabled:i,className:E("px-3 py-2 text-white rounded-md disabled:opacity-50 flex items-center gap-2 transition-colors min-h-[44px] md:min-h-0",y?"bg-green-600 hover:bg-green-700":"bg-purple-600 hover:bg-purple-700"),children:y?e.jsxs(e.Fragment,{children:[e.jsx("svg",{className:"h-5 w-5 md:h-4 md:w-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M5 13l4 4L19 7"})}),e.jsx("span",{className:"hidden sm:inline",children:"Saved!"})]}):e.jsxs(e.Fragment,{children:[e.jsx(F,{className:"h-5 w-5 md:h-4 md:w-4"}),e.jsx("span",{className:"hidden sm:inline",children:i?"Saving...":"Save PRD"})]})}),e.jsx("button",{onClick:m,className:"hidden items-center justify-center rounded-md p-2 text-gray-600 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-white md:flex",title:c?"Exit fullscreen":"Fullscreen",children:c?e.jsx(V,{className:"h-4 w-4"}):e.jsx(Q,{className:"h-4 w-4"})}),e.jsx(S,{title:"Close",onClick:g,icon:e.jsx(I,{className:"h-6 w-6 md:h-4 md:w-4"})})]})]})}function be({content:t,onContentChange:s,fileName:r,onFileNameChange:a,isNewFile:l,saving:o,saveSuccess:f,onSave:h,onDownload:u,onClose:x,loadError:p}){const[d,b]=n.useState(!1),[i,y]=n.useState(!0),[c,m]=n.useState(!1),[g,j]=n.useState(!0),[v,N]=n.useState(!1),C=()=>{if(!t.trim()){alert("Please add content to the PRD before generating tasks.");return}N(!0)};return e.jsxs("div",{className:E("fixed inset-0 z-[200] md:bg-black/50 md:flex md:items-center md:justify-center",d?"md:p-0":"md:p-4"),children:[e.jsxs("div",{className:E("bg-white dark:bg-gray-900 shadow-2xl flex flex-col","w-full h-full md:rounded-lg md:shadow-2xl",d?"md:w-full md:h-full md:rounded-none":"md:w-full md:max-w-6xl md:h-[85vh] md:max-h-[85vh]"),children:[p&&e.jsx("div",{className:"border-b border-yellow-200 bg-yellow-50 px-4 py-3 text-sm text-yellow-800 dark:border-yellow-800 dark:bg-yellow-900/20 dark:text-yellow-200",children:p}),e.jsx(fe,{fileName:r,onFileNameChange:a,isNewFile:l,previewMode:c,onTogglePreview:()=>m(w=>!w),wordWrap:g,onToggleWordWrap:()=>j(w=>!w),isDarkMode:i,onToggleTheme:()=>y(w=>!w),onDownload:u,onOpenGenerateTasks:C,canGenerateTasks:!!t.trim(),onSave:h,saving:o,saveSuccess:f,isFullscreen:d,onToggleFullscreen:()=>b(w=>!w),onClose:x}),e.jsx("div",{className:"flex-1 overflow-hidden",children:e.jsx(he,{content:t,onContentChange:s,previewMode:c,isDarkMode:i,wordWrap:g})}),e.jsx(ge,{content:t})]}),e.jsx(xe,{isOpen:v,fileName:M(r||"prd"),onClose:()=>N(!1)})]})}function Ee({file:t,onClose:s,projectPath:r,project:a,initialContent:l="",isNewFile:o=!1,onSave:f}){const[h,u]=n.useState(!1),[x,p]=n.useState(""),{content:d,setContent:b,fileName:i,setFileName:y,loading:c,loadError:m}=ie({file:t,isNewFile:o,initialContent:l,projectPath:r}),{existingPrds:g,refreshExistingPrds:j}=de({projectId:a?.projectId}),v=n.useMemo(()=>!o||!!t?.isExisting,[t?.isExisting,o]),{savePrd:N,saving:C,saveSuccess:w}=ce({projectId:a?.projectId,existingPrds:g,isExistingFile:v,onAfterSave:async()=>{await j(),await f?.()}}),U=n.useCallback(()=>{const T=new Blob([d],{type:"text/markdown"}),k=URL.createObjectURL(T),P=document.createElement("a"),G=M(i||"prd");P.href=k,P.download=G,document.body.appendChild(P),P.click(),document.body.removeChild(P),URL.revokeObjectURL(k)},[d,i]),R=n.useCallback(async(T=!1)=>{const k=await N({content:d,fileName:i,allowOverwrite:T});if(k.status==="needs-overwrite"){p(k.fileName),u(!0);return}k.status==="failed"&&alert(k.message)},[d,i,N]),z=n.useCallback(async()=>{u(!1),await R(!0)},[R]);return oe({onSave:()=>{R()},onClose:s}),c?e.jsx(ue,{}):e.jsxs(e.Fragment,{children:[e.jsx(be,{content:d,onContentChange:b,fileName:i,onFileNameChange:y,isNewFile:o,saving:C,saveSuccess:w,onSave:()=>{R()},onDownload:U,onClose:s,loadError:m}),e.jsx(me,{isOpen:h,fileName:x||M(i||"prd"),saving:C,onCancel:()=>u(!1),onConfirm:()=>{z()}})]})}export{Ee as default};
@@ -0,0 +1 @@
1
+ import{r as l,j as e}from"./vendor-react-C2GTiUCy.js";import{a as b,x as g,f as o,B as d}from"./feature-workspace-CAB6bgPy.js";import{z as S,S as Z,R as V,a6 as ee,aW as se,d as $,r as F,v as L,X as te,aX as re,L as ae,aa as ne}from"./vendor-ui-CAUHSABu.js";import"./vendor-i18n-B6HjLCnN.js";import"./vendor-data-DsEZeNPr.js";import"./vendor-markdown-DkITEES2.js";async function f(r){const i=await r.json();if(!r.ok||i.success===!1)throw new Error(i.error||i.details||`Request failed (${r.status})`);return i}function O(r){if(!r)return"Never";const i=Date.parse(r);if(!Number.isFinite(i))return"Unknown";const a=Math.max(0,Math.round((Date.now()-i)/1e3));if(a<10)return"Just now";if(a<60)return`${a}s ago`;const x=Math.round(a/60);if(x<60)return`${x}m ago`;const n=Math.round(x/60);return n<24?`${n}h ago`:`${Math.round(n/24)}d ago`}function j(r){if(!r)return"No page loaded";try{return new URL(r).hostname}catch{return r}}function B(r){return r?r.replace(/_/g," ").replace(/:/g,": "):"Waiting"}function ie(r){return r==="ready"?"border-primary/30 bg-primary/5 text-foreground":r==="stopped"?"border-border bg-muted text-muted-foreground":"border-border bg-background text-muted-foreground"}function le(r,i){return r?.enabled?r.available||r.installInProgress||i?"border-primary/30 bg-primary/5 text-foreground":"border-border bg-background text-muted-foreground":"border-border bg-muted text-muted-foreground"}function _(r){return r==="ready"?"bg-primary":r==="stopped"?"bg-muted-foreground/50":"bg-border"}const de=["Use Browser to inspect the checkout flow and report any broken UI states.","Open <url> with Browser, interact with the page, and summarize what changed after each step."];function fe({isVisible:r,onShowSettings:i}){const[a,x]=l.useState(null),[n,q]=l.useState([]),[I,w]=l.useState(null),[C,R]=l.useState(!1),[c,D]=l.useState(!1),[u,E]=l.useState(!1),[W,N]=l.useState(!1),[P,p]=l.useState(null),t=l.useMemo(()=>n.find(s=>s.id===I)||n[0]||null,[I,n]),z=n.filter(s=>s.status==="ready"),J=!!(a?.enabled&&(!a.playwrightInstalled||!a.chromiumInstalled)),X=a?.enabled?a.available?"Ready":a.installInProgress||u?"Installing":"Setup required":"Disabled",A=t?.cursor&&t.viewport?{left:`${t.cursor.x/t.viewport.width*100}%`,top:`${t.cursor.y/t.viewport.height*100}%`}:null,h=l.useCallback(async()=>{R(!0);try{const[s,m]=await Promise.all([b("/api/browser-use/status"),b("/api/browser-use/sessions")]),Q=await f(s),y=(await f(m)).data.sessions;x(Q.data),q(y),w(k=>k&&y.some(Y=>Y.id===k)?k:y[0]?.id||null),p(null)}catch(s){p(s instanceof Error?s.message:"Failed to load Browser")}finally{R(!1)}},[]);l.useEffect(()=>{r&&h()},[r,h]);const v=l.useCallback(async s=>{D(!0),p(null);try{await s(),await h()}catch(m){p(m instanceof Error?m.message:"Browser action failed")}finally{D(!1)}},[h]),M=()=>v(async()=>{if(!t)return;const s=await b(`/api/browser-use/sessions/${t.id}/stop`,{method:"POST"});await f(s)}),T=()=>v(async()=>{if(!t)return;const s=await b(`/api/browser-use/sessions/${t.id}`,{method:"DELETE"});await f(s),N(!1)}),H=()=>v(async()=>{E(!0);try{const s=await b("/api/browser-use/runtime/install",{method:"POST"});await f(s)}finally{E(!1)}}),G=s=>{const m=t?.id===s.id;return e.jsxs("button",{type:"button",onClick:()=>w(s.id),className:o("group w-full rounded-md border px-3 py-2.5 text-left transition-colors",m?"border-primary/50 bg-primary/10 text-foreground":"border-border/60 bg-card/30 text-muted-foreground hover:bg-muted/50"),children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[e.jsx("span",{className:o("h-1.5 w-1.5 shrink-0 rounded-full",_(s.status))}),e.jsx("div",{className:"truncate text-sm font-medium",children:s.title||j(s.url)})]}),e.jsx("div",{className:"mt-1 truncate pl-3.5 text-xs text-muted-foreground",children:j(s.url)})]}),e.jsx(g,{variant:"outline",className:"shrink-0 border-border bg-background text-[10px] text-muted-foreground",children:s.status})]}),e.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-[11px] text-muted-foreground",children:[e.jsx(re,{className:"h-3 w-3"}),e.jsx("span",{children:O(s.updatedAt)}),e.jsxs("span",{className:"truncate",children:["- ",B(s.lastAction)]})]})]},s.id)},K=()=>e.jsx("div",{className:"flex min-h-0 flex-1 items-center justify-center p-6",children:e.jsxs("div",{className:"w-full max-w-2xl rounded-md border border-border bg-card/40 p-5 shadow-sm",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"flex h-10 w-10 shrink-0 items-center justify-center rounded-md border border-border bg-background",children:e.jsx(S,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-semibold text-foreground",children:a?.enabled?"No browser sessions yet":"Browser is disabled"}),e.jsx("p",{className:"mt-1 max-w-xl text-sm leading-6 text-muted-foreground",children:a?.enabled?"Agent browser sessions appear here while an AI task is using Browser.":"Enable Browser in settings to let agents open monitored browser sessions."})]})]}),J&&e.jsxs("div",{className:"mt-4 rounded-md border border-border bg-muted/30 p-3",children:[e.jsx("div",{className:"text-sm font-medium text-foreground",children:"Runtime setup required"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:a?.message}),e.jsxs(d,{type:"button",size:"sm",className:"mt-3",onClick:H,disabled:c||u||a?.installInProgress,children:[u||a?.installInProgress?e.jsx(ae,{className:"h-4 w-4 animate-spin"}):e.jsx(ne,{className:"h-4 w-4"}),u||a?.installInProgress?"Installing...":"Install Runtime"]})]}),e.jsx("div",{className:"mt-5 grid gap-2 sm:grid-cols-2",children:de.map(s=>e.jsxs("div",{className:"rounded-md border border-border/70 bg-background/70 p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:[e.jsx(L,{className:"h-3.5 w-3.5"}),"Prompt"]}),e.jsx("p",{className:"text-sm leading-6 text-foreground",children:s})]},s))})]})}),U=(s=!1)=>e.jsx("div",{className:o("flex flex-1 items-center justify-center bg-neutral-950",s?"min-h-[80vh]":"min-h-[420px]"),children:t?.screenshotDataUrl?e.jsxs("div",{className:"relative inline-block max-h-full",children:[e.jsx("img",{src:t.screenshotDataUrl,alt:"Browser session screenshot",className:s?"block max-h-[80vh] w-auto max-w-full object-contain":"block max-h-[72vh] w-auto max-w-full object-contain"}),A&&e.jsx("div",{className:"pointer-events-none absolute h-5 w-5 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white/90 bg-primary/80 shadow-[0_0_0_6px_hsl(var(--primary)/0.18)]",style:A,children:e.jsx("div",{className:"absolute left-1/2 top-1/2 h-2 w-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-white"})})]}):e.jsxs("div",{className:"px-6 text-center",children:[e.jsx(S,{className:"mx-auto h-9 w-9 text-neutral-500"}),e.jsx("div",{className:"mt-3 text-sm font-medium text-neutral-100",children:t?.message||"Waiting for screenshot"}),e.jsx("p",{className:"mt-1 text-xs text-neutral-400",children:"The next agent browser snapshot will render here."})]})});return e.jsxs("div",{className:"flex h-full min-h-0 flex-col bg-background",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-border/60 px-4 py-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(S,{className:"h-4 w-4 text-primary"}),e.jsx("h3",{className:"text-sm font-semibold text-foreground",children:"Browser"}),e.jsx(g,{variant:"outline",className:o("text-[10px]",le(a,u)),children:X})]}),e.jsx("p",{className:"mt-0.5 text-xs text-muted-foreground",children:"Monitor browser sessions opened by AI agents."})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[i&&e.jsx(d,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:()=>i("browser"),title:"Open Browser settings","aria-label":"Open Browser settings",children:e.jsx(Z,{className:"h-3.5 w-3.5"})}),e.jsx(d,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:()=>{h()},disabled:C||c,title:"Refresh browser sessions","aria-label":"Refresh browser sessions",children:e.jsx(V,{className:o("h-3.5 w-3.5",C&&"animate-spin")})})]})]}),P&&e.jsx("div",{className:"border-b border-destructive/20 bg-destructive/10 px-4 py-2 text-sm text-destructive",children:P}),n.length>0&&e.jsx("div",{className:"border-b border-border/60 bg-muted/20 px-3 py-2 lg:hidden",children:e.jsx("div",{className:"flex gap-2 overflow-x-auto",children:n.map(s=>e.jsxs("button",{type:"button",onClick:()=>w(s.id),className:o("flex min-w-[180px] items-center gap-2 rounded-md border px-2.5 py-2 text-left",t?.id===s.id?"border-primary/40 bg-primary/5":"border-border bg-background"),children:[e.jsx("span",{className:o("h-1.5 w-1.5 shrink-0 rounded-full",_(s.status))}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs font-medium text-foreground",children:s.title||j(s.url)})]},s.id))})}),e.jsxs("div",{className:"grid min-h-0 flex-1 grid-cols-1 lg:grid-cols-[minmax(0,1fr)_320px]",children:[e.jsxs("main",{className:"flex min-h-0 flex-col overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 border-b border-border/60 bg-muted/20 px-4 py-2.5 text-xs text-muted-foreground",children:[e.jsxs("div",{className:"min-w-0 truncate",children:[z.length," active",e.jsx("span",{className:"px-1.5",children:"/"}),n.length," total"]}),e.jsxs("div",{className:"min-w-0 truncate",children:["Updated ",O(t?.updatedAt||null)]})]}),n.length===0?K():e.jsx("div",{className:"min-h-0 flex-1 overflow-auto bg-muted/20 p-4",children:e.jsxs("div",{className:"mx-auto flex min-h-[500px] max-w-7xl flex-col overflow-hidden rounded-md border border-border bg-background shadow-sm",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2 border-b border-border/60 px-3 py-2",children:[e.jsx(g,{variant:"outline",className:t?o("text-[10px]",ie(t.status)):"text-[10px]",children:t?.status||"empty"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-sm font-medium text-foreground",children:t?.title||j(t?.url||null)}),e.jsxs("div",{className:"mt-0.5 flex min-w-0 items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(ee,{className:"h-3.5 w-3.5 shrink-0"}),e.jsx("span",{className:"truncate",children:t?.url||"No page loaded"})]})]}),e.jsx("div",{className:"hidden text-xs text-muted-foreground md:block",children:B(t?.lastAction||null)}),e.jsx(d,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0",onClick:()=>N(!0),disabled:!t?.screenshotDataUrl,title:"Full screen","aria-label":"Full screen",children:e.jsx(se,{className:"h-4 w-4"})}),e.jsx(d,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0 lg:hidden",onClick:M,disabled:c||!t||t.status!=="ready",title:"Stop session","aria-label":"Stop session",children:e.jsx($,{className:"h-4 w-4"})}),e.jsx(d,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0 lg:hidden",onClick:T,disabled:c||!t,title:"Delete session","aria-label":"Delete session",children:e.jsx(F,{className:"h-4 w-4"})})]}),U()]})})]}),e.jsxs("aside",{className:"hidden min-h-0 flex-col border-l border-border/60 bg-background lg:flex",children:[e.jsx("div",{className:"border-b border-border/60 px-4 py-3",children:e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-semibold text-foreground",children:"Sessions"}),e.jsxs("div",{className:"mt-0.5 text-xs text-muted-foreground",children:[n.length," total"]})]}),e.jsxs(g,{variant:"outline",className:"text-[10px]",children:[z.length," active"]})]})}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto p-3",children:n.length>0?e.jsx("div",{className:"space-y-2",children:n.map(G)}):e.jsx("div",{className:"rounded-md border border-dashed border-border/70 px-3 py-8 text-center text-xs text-muted-foreground",children:"No agent browser sessions."})}),e.jsx("div",{className:"border-t border-border/60 p-3",children:e.jsxs("div",{className:"rounded-md border border-border/70 bg-muted/30 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground",children:[e.jsx(L,{className:"h-3.5 w-3.5"}),"Selected"]}),e.jsxs("div",{className:"mt-3 space-y-2 text-xs text-muted-foreground",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{children:"Status"}),e.jsx("span",{className:"font-medium text-foreground",children:t?.status||"None"})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{children:"Last action"}),e.jsx("span",{className:"truncate font-medium text-foreground",children:B(t?.lastAction||null)})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{children:"Profile"}),e.jsx("span",{className:"truncate font-medium text-foreground",children:t?.profileName||"Temporary"})]})]}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 gap-2",children:[e.jsxs(d,{variant:"outline",size:"sm",onClick:M,disabled:c||!t||t.status!=="ready",children:[e.jsx($,{className:"h-4 w-4"}),"Stop"]}),e.jsxs(d,{variant:"outline",size:"sm",onClick:T,disabled:c||!t,children:[e.jsx(F,{className:"h-4 w-4"}),"Delete"]})]})]})})]})]}),W&&t&&e.jsx("div",{className:"fixed inset-0 z-50 bg-black/90 p-6",children:e.jsxs("div",{className:"flex h-full flex-col rounded-md border border-white/10 bg-black",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-white/10 px-4 py-3 text-sm text-white/80",children:[e.jsx("div",{className:"min-w-0 truncate",children:t.title||t.url||"Browser session"}),e.jsxs(d,{variant:"outline",size:"sm",onClick:()=>N(!1),children:[e.jsx(te,{className:"h-4 w-4"}),"Close"]})]}),U(!0)]})})]})}export{fe as BrowserUsePanel};