@mrpatronz/nexusflow 2.9.0 → 2.10.1

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 (744) hide show
  1. package/README.md +177 -113
  2. package/desktop/assets/icon.png +0 -0
  3. package/dist/agent/AcpCliAdapter.d.ts +2 -0
  4. package/dist/agent/AcpCliAdapter.d.ts.map +1 -1
  5. package/dist/agent/AcpCliAdapter.js +50 -4
  6. package/dist/agent/AcpCliAdapter.js.map +1 -1
  7. package/dist/agent/AntigravityCliAdapter.d.ts +44 -2
  8. package/dist/agent/AntigravityCliAdapter.d.ts.map +1 -1
  9. package/dist/agent/AntigravityCliAdapter.js +363 -16
  10. package/dist/agent/AntigravityCliAdapter.js.map +1 -1
  11. package/dist/agent/ClaudeCliAdapter.d.ts +5 -2
  12. package/dist/agent/ClaudeCliAdapter.d.ts.map +1 -1
  13. package/dist/agent/ClaudeCliAdapter.js +43 -14
  14. package/dist/agent/ClaudeCliAdapter.js.map +1 -1
  15. package/dist/agent/ClaudeSdkAdapter.d.ts +1 -0
  16. package/dist/agent/ClaudeSdkAdapter.d.ts.map +1 -1
  17. package/dist/agent/ClaudeSdkAdapter.js +38 -11
  18. package/dist/agent/ClaudeSdkAdapter.js.map +1 -1
  19. package/dist/agent/CliAdapterBase.d.ts +2 -0
  20. package/dist/agent/CliAdapterBase.d.ts.map +1 -1
  21. package/dist/agent/CliAdapterBase.js +12 -1
  22. package/dist/agent/CliAdapterBase.js.map +1 -1
  23. package/dist/agent/CodexCliAdapter.d.ts +1 -1
  24. package/dist/agent/CodexCliAdapter.d.ts.map +1 -1
  25. package/dist/agent/CodexCliAdapter.js +5 -4
  26. package/dist/agent/CodexCliAdapter.js.map +1 -1
  27. package/dist/agent/CodexSdkAdapter.d.ts.map +1 -1
  28. package/dist/agent/CodexSdkAdapter.js +4 -1
  29. package/dist/agent/CodexSdkAdapter.js.map +1 -1
  30. package/dist/agent/CopilotAcpAdapter.d.ts.map +1 -1
  31. package/dist/agent/CopilotAcpAdapter.js +2 -2
  32. package/dist/agent/CopilotAcpAdapter.js.map +1 -1
  33. package/dist/agent/ProviderRegistry.d.ts +8 -1
  34. package/dist/agent/ProviderRegistry.d.ts.map +1 -1
  35. package/dist/agent/ProviderRegistry.js.map +1 -1
  36. package/dist/agent/TurnSessionManager.d.ts +65 -0
  37. package/dist/agent/TurnSessionManager.d.ts.map +1 -0
  38. package/dist/agent/TurnSessionManager.js +330 -0
  39. package/dist/agent/TurnSessionManager.js.map +1 -0
  40. package/dist/agent/adapters.d.ts.map +1 -1
  41. package/dist/agent/adapters.js +23 -6
  42. package/dist/agent/adapters.js.map +1 -1
  43. package/dist/agent/cliAvailability.d.ts +2 -5
  44. package/dist/agent/cliAvailability.d.ts.map +1 -1
  45. package/dist/agent/cliAvailability.js +18 -41
  46. package/dist/agent/cliAvailability.js.map +1 -1
  47. package/dist/agent/mcp-config.d.ts +0 -5
  48. package/dist/agent/mcp-config.d.ts.map +1 -1
  49. package/dist/agent/mcp-config.js +2 -1
  50. package/dist/agent/mcp-config.js.map +1 -1
  51. package/dist/agent/models.d.ts +13 -0
  52. package/dist/agent/models.d.ts.map +1 -1
  53. package/dist/agent/models.js +262 -8
  54. package/dist/agent/models.js.map +1 -1
  55. package/dist/agent/nativeTools.d.ts.map +1 -1
  56. package/dist/agent/nativeTools.js +1 -0
  57. package/dist/agent/nativeTools.js.map +1 -1
  58. package/dist/agent/orchestrator.d.ts.map +1 -1
  59. package/dist/agent/orchestrator.js +3 -2
  60. package/dist/agent/orchestrator.js.map +1 -1
  61. package/dist/agent/session.d.ts +6 -0
  62. package/dist/agent/session.d.ts.map +1 -1
  63. package/dist/agent/session.js +8 -0
  64. package/dist/agent/session.js.map +1 -1
  65. package/dist/analyzers/detect-deps.js +16 -1
  66. package/dist/analyzers/detect-deps.js.map +1 -1
  67. package/dist/analyzers/run-analyzer.d.ts.map +1 -1
  68. package/dist/analyzers/run-analyzer.js.map +1 -1
  69. package/dist/commands/adapter.d.ts.map +1 -1
  70. package/dist/commands/adapter.js +15 -14
  71. package/dist/commands/adapter.js.map +1 -1
  72. package/dist/commands/add-repo.d.ts.map +1 -1
  73. package/dist/commands/add-repo.js +6 -5
  74. package/dist/commands/add-repo.js.map +1 -1
  75. package/dist/commands/commit.js +6 -8
  76. package/dist/commands/commit.js.map +1 -1
  77. package/dist/commands/config.d.ts.map +1 -1
  78. package/dist/commands/config.js +2 -1
  79. package/dist/commands/config.js.map +1 -1
  80. package/dist/commands/create.d.ts +4 -4
  81. package/dist/commands/create.d.ts.map +1 -1
  82. package/dist/commands/create.js +48 -7
  83. package/dist/commands/create.js.map +1 -1
  84. package/dist/commands/desktop.d.ts +46 -3
  85. package/dist/commands/desktop.d.ts.map +1 -1
  86. package/dist/commands/desktop.js +343 -33
  87. package/dist/commands/desktop.js.map +1 -1
  88. package/dist/commands/diff.d.ts.map +1 -1
  89. package/dist/commands/diff.js +3 -2
  90. package/dist/commands/diff.js.map +1 -1
  91. package/dist/commands/doctor.d.ts.map +1 -1
  92. package/dist/commands/doctor.js +3 -2
  93. package/dist/commands/doctor.js.map +1 -1
  94. package/dist/commands/finish.js +2 -1
  95. package/dist/commands/finish.js.map +1 -1
  96. package/dist/commands/handoff.d.ts.map +1 -1
  97. package/dist/commands/handoff.js +12 -12
  98. package/dist/commands/handoff.js.map +1 -1
  99. package/dist/commands/init.d.ts +2 -2
  100. package/dist/commands/init.d.ts.map +1 -1
  101. package/dist/commands/init.js +8 -7
  102. package/dist/commands/init.js.map +1 -1
  103. package/dist/commands/isolate.d.ts.map +1 -1
  104. package/dist/commands/isolate.js +2 -1
  105. package/dist/commands/isolate.js.map +1 -1
  106. package/dist/commands/knowledge.d.ts.map +1 -1
  107. package/dist/commands/knowledge.js +3 -2
  108. package/dist/commands/knowledge.js.map +1 -1
  109. package/dist/commands/list.d.ts.map +1 -1
  110. package/dist/commands/list.js +3 -2
  111. package/dist/commands/list.js.map +1 -1
  112. package/dist/commands/logs.js +3 -3
  113. package/dist/commands/logs.js.map +1 -1
  114. package/dist/commands/mcp.d.ts +1 -2
  115. package/dist/commands/mcp.d.ts.map +1 -1
  116. package/dist/commands/mcp.js +19 -12
  117. package/dist/commands/mcp.js.map +1 -1
  118. package/dist/commands/migrate.d.ts +12 -0
  119. package/dist/commands/migrate.d.ts.map +1 -0
  120. package/dist/commands/migrate.js +128 -0
  121. package/dist/commands/migrate.js.map +1 -0
  122. package/dist/commands/open.d.ts.map +1 -1
  123. package/dist/commands/open.js +2 -1
  124. package/dist/commands/open.js.map +1 -1
  125. package/dist/commands/progress.d.ts.map +1 -1
  126. package/dist/commands/progress.js +2 -1
  127. package/dist/commands/progress.js.map +1 -1
  128. package/dist/commands/project.d.ts.map +1 -1
  129. package/dist/commands/project.js +7 -6
  130. package/dist/commands/project.js.map +1 -1
  131. package/dist/commands/refresh.d.ts.map +1 -1
  132. package/dist/commands/refresh.js +8 -11
  133. package/dist/commands/refresh.js.map +1 -1
  134. package/dist/commands/remove.d.ts.map +1 -1
  135. package/dist/commands/remove.js +2 -1
  136. package/dist/commands/remove.js.map +1 -1
  137. package/dist/commands/schedule.js +16 -18
  138. package/dist/commands/schedule.js.map +1 -1
  139. package/dist/commands/start.d.ts.map +1 -1
  140. package/dist/commands/start.js +9 -8
  141. package/dist/commands/start.js.map +1 -1
  142. package/dist/commands/status.d.ts.map +1 -1
  143. package/dist/commands/status.js +2 -1
  144. package/dist/commands/status.js.map +1 -1
  145. package/dist/commands/stop.d.ts.map +1 -1
  146. package/dist/commands/stop.js +2 -1
  147. package/dist/commands/stop.js.map +1 -1
  148. package/dist/commands/strategy.d.ts.map +1 -1
  149. package/dist/commands/strategy.js +6 -5
  150. package/dist/commands/strategy.js.map +1 -1
  151. package/dist/commands/sync.js +8 -10
  152. package/dist/commands/sync.js.map +1 -1
  153. package/dist/commands/tui.d.ts.map +1 -1
  154. package/dist/commands/tui.js +11 -10
  155. package/dist/commands/tui.js.map +1 -1
  156. package/dist/commands/ui.d.ts.map +1 -1
  157. package/dist/commands/ui.js +4 -3
  158. package/dist/commands/ui.js.map +1 -1
  159. package/dist/core/adapters/local-storage.d.ts +3 -1
  160. package/dist/core/adapters/local-storage.d.ts.map +1 -1
  161. package/dist/core/adapters/local-storage.js +62 -4
  162. package/dist/core/adapters/local-storage.js.map +1 -1
  163. package/dist/core/analysis-cache.d.ts.map +1 -1
  164. package/dist/core/analysis-cache.js +8 -7
  165. package/dist/core/analysis-cache.js.map +1 -1
  166. package/dist/core/brand-config.d.ts +261 -0
  167. package/dist/core/brand-config.d.ts.map +1 -0
  168. package/dist/core/brand-config.js +514 -0
  169. package/dist/core/brand-config.js.map +1 -0
  170. package/dist/core/config.d.ts +1 -1
  171. package/dist/core/config.d.ts.map +1 -1
  172. package/dist/core/config.js +18 -8
  173. package/dist/core/config.js.map +1 -1
  174. package/dist/core/constants.d.ts +88 -0
  175. package/dist/core/constants.d.ts.map +1 -0
  176. package/dist/core/constants.js +103 -0
  177. package/dist/core/constants.js.map +1 -0
  178. package/dist/core/doctor.d.ts.map +1 -1
  179. package/dist/core/doctor.js +11 -3
  180. package/dist/core/doctor.js.map +1 -1
  181. package/dist/core/generation-lock.d.ts +2 -2
  182. package/dist/core/generation-lock.d.ts.map +1 -1
  183. package/dist/core/generation-lock.js +49 -22
  184. package/dist/core/generation-lock.js.map +1 -1
  185. package/dist/core/knowledge.d.ts +19 -0
  186. package/dist/core/knowledge.d.ts.map +1 -1
  187. package/dist/core/knowledge.js +150 -24
  188. package/dist/core/knowledge.js.map +1 -1
  189. package/dist/core/migrate.d.ts +53 -0
  190. package/dist/core/migrate.d.ts.map +1 -0
  191. package/dist/core/migrate.js +607 -0
  192. package/dist/core/migrate.js.map +1 -0
  193. package/dist/core/new-repo.js +1 -1
  194. package/dist/core/new-repo.js.map +1 -1
  195. package/dist/core/projects.d.ts.map +1 -1
  196. package/dist/core/projects.js +13 -4
  197. package/dist/core/projects.js.map +1 -1
  198. package/dist/core/refresh.d.ts.map +1 -1
  199. package/dist/core/refresh.js +6 -4
  200. package/dist/core/refresh.js.map +1 -1
  201. package/dist/core/scheduler.d.ts +1 -1
  202. package/dist/core/scheduler.d.ts.map +1 -1
  203. package/dist/core/scheduler.js +11 -9
  204. package/dist/core/scheduler.js.map +1 -1
  205. package/dist/core/sync.js +1 -1
  206. package/dist/core/sync.js.map +1 -1
  207. package/dist/core/workspace-git.d.ts.map +1 -1
  208. package/dist/core/workspace-git.js +34 -10
  209. package/dist/core/workspace-git.js.map +1 -1
  210. package/dist/core/workspace-state.d.ts +4 -0
  211. package/dist/core/workspace-state.d.ts.map +1 -1
  212. package/dist/core/workspace-state.js +8 -8
  213. package/dist/core/workspace-state.js.map +1 -1
  214. package/dist/core/workspace.d.ts +13 -5
  215. package/dist/core/workspace.d.ts.map +1 -1
  216. package/dist/core/workspace.js +83 -34
  217. package/dist/core/workspace.js.map +1 -1
  218. package/dist/core/worktree.d.ts +10 -4
  219. package/dist/core/worktree.d.ts.map +1 -1
  220. package/dist/core/worktree.js +34 -47
  221. package/dist/core/worktree.js.map +1 -1
  222. package/dist/desktop-server.js +6 -3
  223. package/dist/desktop-server.js.map +1 -1
  224. package/dist/generators/base.d.ts.map +1 -1
  225. package/dist/generators/base.js +6 -5
  226. package/dist/generators/base.js.map +1 -1
  227. package/dist/generators/claude.d.ts.map +1 -1
  228. package/dist/generators/claude.js +2 -1
  229. package/dist/generators/claude.js.map +1 -1
  230. package/dist/generators/cursor.d.ts +1 -1
  231. package/dist/generators/cursor.d.ts.map +1 -1
  232. package/dist/generators/cursor.js +9 -4
  233. package/dist/generators/cursor.js.map +1 -1
  234. package/dist/generators/index.d.ts +4 -8
  235. package/dist/generators/index.d.ts.map +1 -1
  236. package/dist/generators/index.js +34 -69
  237. package/dist/generators/index.js.map +1 -1
  238. package/dist/generators/plan-generator.d.ts.map +1 -1
  239. package/dist/generators/plan-generator.js +20 -11
  240. package/dist/generators/plan-generator.js.map +1 -1
  241. package/dist/generators/skills-generator.d.ts.map +1 -1
  242. package/dist/generators/skills-generator.js +26 -11
  243. package/dist/generators/skills-generator.js.map +1 -1
  244. package/dist/gui/app_logo.png +0 -0
  245. package/dist/gui/assets/AgentsPage-DbivhmK0.js +3 -0
  246. package/dist/gui/assets/DashboardPage-D50Qrm3e.js +1 -0
  247. package/dist/gui/assets/GettingStartedPage-1MOTng3B.js +1 -0
  248. package/dist/gui/assets/NullStore-tdPen1kp.js +1 -0
  249. package/dist/gui/assets/ProjectsPage-srKgf7VN.js +1 -0
  250. package/dist/gui/assets/ScaffoldRepoInline-CP0yn5mw.js +1 -0
  251. package/dist/gui/assets/SettingsPage-DWmrLV8o.js +1 -0
  252. package/dist/gui/assets/SkillsPage-CKjTXdrd.js +6 -0
  253. package/dist/gui/assets/StartWorkPage-BCUnJ9k8.js +1 -0
  254. package/dist/gui/assets/{StrategiesPage-C36TZgDX.js → StrategiesPage-CdCbbIu-.js} +2 -2
  255. package/dist/gui/assets/WorkroomsPage-BcT-mGtT.js +4 -0
  256. package/dist/gui/assets/WorkspacesPage-CYFCm-7_.js +2 -0
  257. package/dist/gui/assets/alert-QnMXzwpU.js +1 -0
  258. package/dist/gui/assets/alert-dialog-u7qgb9Hq.js +1 -0
  259. package/dist/gui/assets/badge-DwXvB44H.js +1 -0
  260. package/dist/gui/assets/brand-hHByyyzq.js +1 -0
  261. package/dist/gui/assets/button-CREn1mup.js +1 -0
  262. package/dist/gui/assets/card-yrg6ov8B.js +1 -0
  263. package/dist/gui/assets/chevron-down-B_Mwbim8.js +1 -0
  264. package/dist/gui/assets/chunk-BV7QT456-DfUBKG-z.js +3 -0
  265. package/dist/gui/assets/{circle-plus-lmU1yNJd.js → circle-plus--zM3-3r3.js} +1 -1
  266. package/dist/gui/assets/{code-xml-jFAa3-TT.js → code-xml-DH-38Tt7.js} +1 -1
  267. package/dist/gui/assets/{git-branch-Cfj9D8yW.js → git-branch-Ce0I2663.js} +1 -1
  268. package/dist/gui/assets/index-3tD_IeyQ.js +55 -0
  269. package/dist/gui/assets/index-CK5YRfPV.css +2 -0
  270. package/dist/gui/assets/label-DC730X8s.js +1 -0
  271. package/dist/gui/assets/layers-j_brOuoa.js +1 -0
  272. package/dist/gui/assets/shield-check-Dd1Yv3l2.js +1 -0
  273. package/dist/gui/assets/square-check-big-BSIiYXPI.js +1 -0
  274. package/dist/gui/assets/tabs-BrHKp5bD.js +1 -0
  275. package/dist/gui/assets/{trash-2-CtR35_eF.js → trash-2-CMdv3eD3.js} +1 -1
  276. package/dist/gui/assets/useAriaLabelledBy-C4zV-1Ra.js +1 -0
  277. package/dist/gui/assets/{vsc-DFh0-53h.js → vsc-D80c4gBT.js} +1 -1
  278. package/dist/gui/favicon-aurora.svg +8 -0
  279. package/dist/gui/favicon.ico +0 -0
  280. package/dist/gui/favicon.svg +8 -1
  281. package/dist/gui/index.html +18 -12
  282. package/dist/harness/claude.d.ts.map +1 -1
  283. package/dist/harness/claude.js +97 -7
  284. package/dist/harness/claude.js.map +1 -1
  285. package/dist/harness/codex.d.ts +1 -0
  286. package/dist/harness/codex.d.ts.map +1 -1
  287. package/dist/harness/codex.js +51 -34
  288. package/dist/harness/codex.js.map +1 -1
  289. package/dist/index.js +57 -27
  290. package/dist/index.js.map +1 -1
  291. package/dist/mcp/server.d.ts +12 -1
  292. package/dist/mcp/server.d.ts.map +1 -1
  293. package/dist/mcp/server.js +24 -6
  294. package/dist/mcp/server.js.map +1 -1
  295. package/dist/mcp/tools.d.ts +4 -2
  296. package/dist/mcp/tools.d.ts.map +1 -1
  297. package/dist/mcp/tools.js +372 -17
  298. package/dist/mcp/tools.js.map +1 -1
  299. package/dist/orchestration/detect.d.ts.map +1 -1
  300. package/dist/orchestration/detect.js +12 -5
  301. package/dist/orchestration/detect.js.map +1 -1
  302. package/dist/orchestration/log-tail.js +17 -17
  303. package/dist/orchestration/log-tail.js.map +1 -1
  304. package/dist/orchestration/runner.d.ts +1 -1
  305. package/dist/orchestration/runner.d.ts.map +1 -1
  306. package/dist/orchestration/runner.js +41 -18
  307. package/dist/orchestration/runner.js.map +1 -1
  308. package/dist/resources/agents-catalog.d.ts +3 -1
  309. package/dist/resources/agents-catalog.d.ts.map +1 -1
  310. package/dist/resources/agents-catalog.js +12 -6
  311. package/dist/resources/agents-catalog.js.map +1 -1
  312. package/dist/resources/contracts.d.ts +7 -0
  313. package/dist/resources/contracts.d.ts.map +1 -1
  314. package/dist/resources/contracts.js +8 -1
  315. package/dist/resources/contracts.js.map +1 -1
  316. package/dist/resources/fs-safety.d.ts +7 -1
  317. package/dist/resources/fs-safety.d.ts.map +1 -1
  318. package/dist/resources/fs-safety.js +44 -1
  319. package/dist/resources/fs-safety.js.map +1 -1
  320. package/dist/resources/materializer.d.ts +1 -0
  321. package/dist/resources/materializer.d.ts.map +1 -1
  322. package/dist/resources/materializer.js +48 -17
  323. package/dist/resources/materializer.js.map +1 -1
  324. package/dist/resources/service.d.ts.map +1 -1
  325. package/dist/resources/service.js +3 -2
  326. package/dist/resources/service.js.map +1 -1
  327. package/dist/server.d.ts +2 -19
  328. package/dist/server.d.ts.map +1 -1
  329. package/dist/server.js +1294 -348
  330. package/dist/server.js.map +1 -1
  331. package/dist/static-resources/workflows/cost-aware-sol-luna.md +95 -0
  332. package/dist/storage/db.d.ts +94 -0
  333. package/dist/storage/db.d.ts.map +1 -0
  334. package/dist/storage/db.js +609 -0
  335. package/dist/storage/db.js.map +1 -0
  336. package/dist/types.d.ts +19 -0
  337. package/dist/types.d.ts.map +1 -1
  338. package/dist/utils/detect-ai.d.ts.map +1 -1
  339. package/dist/utils/detect-ai.js +1 -3
  340. package/dist/utils/detect-ai.js.map +1 -1
  341. package/dist/utils/multi-git.d.ts +0 -8
  342. package/dist/utils/multi-git.d.ts.map +1 -1
  343. package/dist/utils/multi-git.js +12 -4
  344. package/dist/utils/multi-git.js.map +1 -1
  345. package/dist/utils/pr.d.ts.map +1 -1
  346. package/dist/utils/pr.js +10 -5
  347. package/dist/utils/pr.js.map +1 -1
  348. package/dist/utils/repo-freshness.d.ts +106 -0
  349. package/dist/utils/repo-freshness.d.ts.map +1 -0
  350. package/dist/utils/repo-freshness.js +405 -0
  351. package/dist/utils/repo-freshness.js.map +1 -0
  352. package/dist/utils/resolve-workspace.d.ts +1 -1
  353. package/dist/utils/resolve-workspace.d.ts.map +1 -1
  354. package/dist/utils/resolve-workspace.js +10 -3
  355. package/dist/utils/resolve-workspace.js.map +1 -1
  356. package/dist/utils/session-finder.d.ts +12 -1
  357. package/dist/utils/session-finder.d.ts.map +1 -1
  358. package/dist/utils/session-finder.js +206 -8
  359. package/dist/utils/session-finder.js.map +1 -1
  360. package/dist/utils/skills-catalog.d.ts +5 -1
  361. package/dist/utils/skills-catalog.d.ts.map +1 -1
  362. package/dist/utils/skills-catalog.js +131 -75
  363. package/dist/utils/skills-catalog.js.map +1 -1
  364. package/dist/utils/terminal-launch.d.ts +8 -2
  365. package/dist/utils/terminal-launch.d.ts.map +1 -1
  366. package/dist/utils/terminal-launch.js +88 -19
  367. package/dist/utils/terminal-launch.js.map +1 -1
  368. package/dist/utils/update-check.d.ts +4 -1
  369. package/dist/utils/update-check.d.ts.map +1 -1
  370. package/dist/utils/update-check.js +66 -19
  371. package/dist/utils/update-check.js.map +1 -1
  372. package/dist/utils/user-paths.d.ts +23 -0
  373. package/dist/utils/user-paths.d.ts.map +1 -0
  374. package/dist/utils/user-paths.js +126 -0
  375. package/dist/utils/user-paths.js.map +1 -0
  376. package/dist/utils/workflows.d.ts +4 -1
  377. package/dist/utils/workflows.d.ts.map +1 -1
  378. package/dist/utils/workflows.js +51 -21
  379. package/dist/utils/workflows.js.map +1 -1
  380. package/dist/workrooms/client.d.ts +54 -0
  381. package/dist/workrooms/client.d.ts.map +1 -0
  382. package/dist/workrooms/client.js +191 -0
  383. package/dist/workrooms/client.js.map +1 -0
  384. package/dist/workrooms/contracts.d.ts +579 -0
  385. package/dist/workrooms/contracts.d.ts.map +1 -0
  386. package/dist/workrooms/contracts.js +231 -0
  387. package/dist/workrooms/contracts.js.map +1 -0
  388. package/dist/workrooms/crypto.d.ts +30 -0
  389. package/dist/workrooms/crypto.d.ts.map +1 -0
  390. package/dist/workrooms/crypto.js +72 -0
  391. package/dist/workrooms/crypto.js.map +1 -0
  392. package/dist/workrooms/host.d.ts +61 -0
  393. package/dist/workrooms/host.d.ts.map +1 -0
  394. package/dist/workrooms/host.js +747 -0
  395. package/dist/workrooms/host.js.map +1 -0
  396. package/dist/workrooms/local-resources.d.ts +26 -0
  397. package/dist/workrooms/local-resources.d.ts.map +1 -0
  398. package/dist/workrooms/local-resources.js +367 -0
  399. package/dist/workrooms/local-resources.js.map +1 -0
  400. package/dist/workrooms/manager.d.ts +228 -0
  401. package/dist/workrooms/manager.d.ts.map +1 -0
  402. package/dist/workrooms/manager.js +768 -0
  403. package/dist/workrooms/manager.js.map +1 -0
  404. package/dist/workrooms/milestones.d.ts +42 -0
  405. package/dist/workrooms/milestones.d.ts.map +1 -0
  406. package/dist/workrooms/milestones.js +94 -0
  407. package/dist/workrooms/milestones.js.map +1 -0
  408. package/dist/workrooms/portable.d.ts +21 -0
  409. package/dist/workrooms/portable.d.ts.map +1 -0
  410. package/dist/workrooms/portable.js +201 -0
  411. package/dist/workrooms/portable.js.map +1 -0
  412. package/dist/workrooms/resource-package.d.ts +7 -0
  413. package/dist/workrooms/resource-package.d.ts.map +1 -0
  414. package/dist/workrooms/resource-package.js +260 -0
  415. package/dist/workrooms/resource-package.js.map +1 -0
  416. package/dist/workrooms/service.d.ts +92 -0
  417. package/dist/workrooms/service.d.ts.map +1 -0
  418. package/dist/workrooms/service.js +788 -0
  419. package/dist/workrooms/service.js.map +1 -0
  420. package/dist/workrooms/sqlite-store.d.ts +31 -0
  421. package/dist/workrooms/sqlite-store.d.ts.map +1 -0
  422. package/dist/workrooms/sqlite-store.js +511 -0
  423. package/dist/workrooms/sqlite-store.js.map +1 -0
  424. package/dist/workrooms/store.d.ts +542 -0
  425. package/dist/workrooms/store.d.ts.map +1 -0
  426. package/dist/workrooms/store.js +71 -0
  427. package/dist/workrooms/store.js.map +1 -0
  428. package/package.json +21 -11
  429. package/resources/workflows/cost-aware-sol-luna.md +95 -0
  430. package/dist/agent/AcpCliAdapter.test.d.ts +0 -2
  431. package/dist/agent/AcpCliAdapter.test.d.ts.map +0 -1
  432. package/dist/agent/AcpCliAdapter.test.js +0 -235
  433. package/dist/agent/AcpCliAdapter.test.js.map +0 -1
  434. package/dist/agent/AntigravityCliAdapter.test.d.ts +0 -2
  435. package/dist/agent/AntigravityCliAdapter.test.d.ts.map +0 -1
  436. package/dist/agent/AntigravityCliAdapter.test.js +0 -222
  437. package/dist/agent/AntigravityCliAdapter.test.js.map +0 -1
  438. package/dist/agent/ClaudeCliAdapter.test.d.ts +0 -2
  439. package/dist/agent/ClaudeCliAdapter.test.d.ts.map +0 -1
  440. package/dist/agent/ClaudeCliAdapter.test.js +0 -320
  441. package/dist/agent/ClaudeCliAdapter.test.js.map +0 -1
  442. package/dist/agent/ClaudeSdkAdapter.test.d.ts +0 -2
  443. package/dist/agent/ClaudeSdkAdapter.test.d.ts.map +0 -1
  444. package/dist/agent/ClaudeSdkAdapter.test.js +0 -155
  445. package/dist/agent/ClaudeSdkAdapter.test.js.map +0 -1
  446. package/dist/agent/CliAdapterBase.test.d.ts +0 -2
  447. package/dist/agent/CliAdapterBase.test.d.ts.map +0 -1
  448. package/dist/agent/CliAdapterBase.test.js +0 -240
  449. package/dist/agent/CliAdapterBase.test.js.map +0 -1
  450. package/dist/agent/CodexCliAdapter.test.d.ts +0 -2
  451. package/dist/agent/CodexCliAdapter.test.d.ts.map +0 -1
  452. package/dist/agent/CodexCliAdapter.test.js +0 -331
  453. package/dist/agent/CodexCliAdapter.test.js.map +0 -1
  454. package/dist/agent/CodexSdkAdapter.test.d.ts +0 -2
  455. package/dist/agent/CodexSdkAdapter.test.d.ts.map +0 -1
  456. package/dist/agent/CodexSdkAdapter.test.js +0 -76
  457. package/dist/agent/CodexSdkAdapter.test.js.map +0 -1
  458. package/dist/agent/ProviderRegistry.test.d.ts +0 -2
  459. package/dist/agent/ProviderRegistry.test.d.ts.map +0 -1
  460. package/dist/agent/ProviderRegistry.test.js +0 -129
  461. package/dist/agent/ProviderRegistry.test.js.map +0 -1
  462. package/dist/agent/adapters.test.d.ts +0 -2
  463. package/dist/agent/adapters.test.d.ts.map +0 -1
  464. package/dist/agent/adapters.test.js +0 -71
  465. package/dist/agent/adapters.test.js.map +0 -1
  466. package/dist/agent/cliAvailability.test.d.ts +0 -2
  467. package/dist/agent/cliAvailability.test.d.ts.map +0 -1
  468. package/dist/agent/cliAvailability.test.js +0 -217
  469. package/dist/agent/cliAvailability.test.js.map +0 -1
  470. package/dist/agent/mcp-config.test.d.ts +0 -2
  471. package/dist/agent/mcp-config.test.d.ts.map +0 -1
  472. package/dist/agent/mcp-config.test.js +0 -22
  473. package/dist/agent/mcp-config.test.js.map +0 -1
  474. package/dist/agent/models.test.d.ts +0 -2
  475. package/dist/agent/models.test.d.ts.map +0 -1
  476. package/dist/agent/models.test.js +0 -40
  477. package/dist/agent/models.test.js.map +0 -1
  478. package/dist/agent/nativeAgent.test.d.ts +0 -2
  479. package/dist/agent/nativeAgent.test.d.ts.map +0 -1
  480. package/dist/agent/nativeAgent.test.js +0 -35
  481. package/dist/agent/nativeAgent.test.js.map +0 -1
  482. package/dist/agent/nativeTools.test.d.ts +0 -2
  483. package/dist/agent/nativeTools.test.d.ts.map +0 -1
  484. package/dist/agent/nativeTools.test.js +0 -67
  485. package/dist/agent/nativeTools.test.js.map +0 -1
  486. package/dist/agent/orchestrator.test.d.ts +0 -2
  487. package/dist/agent/orchestrator.test.d.ts.map +0 -1
  488. package/dist/agent/orchestrator.test.js +0 -284
  489. package/dist/agent/orchestrator.test.js.map +0 -1
  490. package/dist/agent/session.test.d.ts +0 -2
  491. package/dist/agent/session.test.d.ts.map +0 -1
  492. package/dist/agent/session.test.js +0 -74
  493. package/dist/agent/session.test.js.map +0 -1
  494. package/dist/agent/smoke-chat.test.d.ts +0 -2
  495. package/dist/agent/smoke-chat.test.d.ts.map +0 -1
  496. package/dist/agent/smoke-chat.test.js +0 -166
  497. package/dist/agent/smoke-chat.test.js.map +0 -1
  498. package/dist/commands/add-repo.test.d.ts +0 -2
  499. package/dist/commands/add-repo.test.d.ts.map +0 -1
  500. package/dist/commands/add-repo.test.js +0 -30
  501. package/dist/commands/add-repo.test.js.map +0 -1
  502. package/dist/commands/commands.test.d.ts +0 -2
  503. package/dist/commands/commands.test.d.ts.map +0 -1
  504. package/dist/commands/commands.test.js +0 -156
  505. package/dist/commands/commands.test.js.map +0 -1
  506. package/dist/commands/commit.test.d.ts +0 -2
  507. package/dist/commands/commit.test.d.ts.map +0 -1
  508. package/dist/commands/commit.test.js +0 -54
  509. package/dist/commands/commit.test.js.map +0 -1
  510. package/dist/commands/isolate.test.d.ts +0 -2
  511. package/dist/commands/isolate.test.d.ts.map +0 -1
  512. package/dist/commands/isolate.test.js +0 -59
  513. package/dist/commands/isolate.test.js.map +0 -1
  514. package/dist/commands/knowledge.test.d.ts +0 -2
  515. package/dist/commands/knowledge.test.d.ts.map +0 -1
  516. package/dist/commands/knowledge.test.js +0 -90
  517. package/dist/commands/knowledge.test.js.map +0 -1
  518. package/dist/commands/status.test.d.ts +0 -2
  519. package/dist/commands/status.test.d.ts.map +0 -1
  520. package/dist/commands/status.test.js +0 -31
  521. package/dist/commands/status.test.js.map +0 -1
  522. package/dist/commands/ui.test.d.ts +0 -2
  523. package/dist/commands/ui.test.d.ts.map +0 -1
  524. package/dist/commands/ui.test.js +0 -58
  525. package/dist/commands/ui.test.js.map +0 -1
  526. package/dist/core/adapters/storage.test.d.ts +0 -2
  527. package/dist/core/adapters/storage.test.d.ts.map +0 -1
  528. package/dist/core/adapters/storage.test.js +0 -65
  529. package/dist/core/adapters/storage.test.js.map +0 -1
  530. package/dist/core/analysis-cache.test.d.ts +0 -2
  531. package/dist/core/analysis-cache.test.d.ts.map +0 -1
  532. package/dist/core/analysis-cache.test.js +0 -163
  533. package/dist/core/analysis-cache.test.js.map +0 -1
  534. package/dist/core/config.test.d.ts +0 -2
  535. package/dist/core/config.test.d.ts.map +0 -1
  536. package/dist/core/config.test.js +0 -90
  537. package/dist/core/config.test.js.map +0 -1
  538. package/dist/core/finish.test.d.ts +0 -2
  539. package/dist/core/finish.test.d.ts.map +0 -1
  540. package/dist/core/finish.test.js +0 -110
  541. package/dist/core/finish.test.js.map +0 -1
  542. package/dist/core/generation-lock.test.d.ts +0 -2
  543. package/dist/core/generation-lock.test.d.ts.map +0 -1
  544. package/dist/core/generation-lock.test.js +0 -134
  545. package/dist/core/generation-lock.test.js.map +0 -1
  546. package/dist/core/isolate.test.d.ts +0 -2
  547. package/dist/core/isolate.test.d.ts.map +0 -1
  548. package/dist/core/isolate.test.js +0 -320
  549. package/dist/core/isolate.test.js.map +0 -1
  550. package/dist/core/knowledge.test.d.ts +0 -2
  551. package/dist/core/knowledge.test.d.ts.map +0 -1
  552. package/dist/core/knowledge.test.js +0 -287
  553. package/dist/core/knowledge.test.js.map +0 -1
  554. package/dist/core/locks.test.d.ts +0 -2
  555. package/dist/core/locks.test.d.ts.map +0 -1
  556. package/dist/core/locks.test.js +0 -143
  557. package/dist/core/locks.test.js.map +0 -1
  558. package/dist/core/new-repo.test.d.ts +0 -2
  559. package/dist/core/new-repo.test.d.ts.map +0 -1
  560. package/dist/core/new-repo.test.js +0 -78
  561. package/dist/core/new-repo.test.js.map +0 -1
  562. package/dist/core/progress.test.d.ts +0 -2
  563. package/dist/core/progress.test.d.ts.map +0 -1
  564. package/dist/core/progress.test.js +0 -52
  565. package/dist/core/progress.test.js.map +0 -1
  566. package/dist/core/projects.test.d.ts +0 -2
  567. package/dist/core/projects.test.d.ts.map +0 -1
  568. package/dist/core/projects.test.js +0 -165
  569. package/dist/core/projects.test.js.map +0 -1
  570. package/dist/core/refresh.test.d.ts +0 -2
  571. package/dist/core/refresh.test.d.ts.map +0 -1
  572. package/dist/core/refresh.test.js +0 -93
  573. package/dist/core/refresh.test.js.map +0 -1
  574. package/dist/core/scanner.test.d.ts +0 -2
  575. package/dist/core/scanner.test.d.ts.map +0 -1
  576. package/dist/core/scanner.test.js +0 -53
  577. package/dist/core/scanner.test.js.map +0 -1
  578. package/dist/core/scheduler.test.d.ts +0 -2
  579. package/dist/core/scheduler.test.d.ts.map +0 -1
  580. package/dist/core/scheduler.test.js +0 -169
  581. package/dist/core/scheduler.test.js.map +0 -1
  582. package/dist/core/sync.test.d.ts +0 -2
  583. package/dist/core/sync.test.d.ts.map +0 -1
  584. package/dist/core/sync.test.js +0 -128
  585. package/dist/core/sync.test.js.map +0 -1
  586. package/dist/core/workspace-git.test.d.ts +0 -2
  587. package/dist/core/workspace-git.test.d.ts.map +0 -1
  588. package/dist/core/workspace-git.test.js +0 -52
  589. package/dist/core/workspace-git.test.js.map +0 -1
  590. package/dist/core/workspace-skills-workflow.integration.test.d.ts +0 -2
  591. package/dist/core/workspace-skills-workflow.integration.test.d.ts.map +0 -1
  592. package/dist/core/workspace-skills-workflow.integration.test.js +0 -177
  593. package/dist/core/workspace-skills-workflow.integration.test.js.map +0 -1
  594. package/dist/core/workspace-state.test.d.ts +0 -2
  595. package/dist/core/workspace-state.test.d.ts.map +0 -1
  596. package/dist/core/workspace-state.test.js +0 -84
  597. package/dist/core/workspace-state.test.js.map +0 -1
  598. package/dist/core/workspace.create.test.d.ts +0 -2
  599. package/dist/core/workspace.create.test.d.ts.map +0 -1
  600. package/dist/core/workspace.create.test.js +0 -224
  601. package/dist/core/workspace.create.test.js.map +0 -1
  602. package/dist/core/workspace.test.d.ts +0 -2
  603. package/dist/core/workspace.test.d.ts.map +0 -1
  604. package/dist/core/workspace.test.js +0 -53
  605. package/dist/core/workspace.test.js.map +0 -1
  606. package/dist/core/worktree.test.d.ts +0 -2
  607. package/dist/core/worktree.test.d.ts.map +0 -1
  608. package/dist/core/worktree.test.js +0 -153
  609. package/dist/core/worktree.test.js.map +0 -1
  610. package/dist/generators/base.test.d.ts +0 -2
  611. package/dist/generators/base.test.d.ts.map +0 -1
  612. package/dist/generators/base.test.js +0 -287
  613. package/dist/generators/base.test.js.map +0 -1
  614. package/dist/generators/knowledge-migration.test.d.ts +0 -2
  615. package/dist/generators/knowledge-migration.test.d.ts.map +0 -1
  616. package/dist/generators/knowledge-migration.test.js +0 -22
  617. package/dist/generators/knowledge-migration.test.js.map +0 -1
  618. package/dist/generators/plan-generator.test.d.ts +0 -2
  619. package/dist/generators/plan-generator.test.d.ts.map +0 -1
  620. package/dist/generators/plan-generator.test.js +0 -220
  621. package/dist/generators/plan-generator.test.js.map +0 -1
  622. package/dist/generators/skills-generator.test.d.ts +0 -2
  623. package/dist/generators/skills-generator.test.d.ts.map +0 -1
  624. package/dist/generators/skills-generator.test.js +0 -79
  625. package/dist/generators/skills-generator.test.js.map +0 -1
  626. package/dist/gui/assets/AgentsPage-B4fx43rd.js +0 -3
  627. package/dist/gui/assets/CSPContext-DBUu9tE0.js +0 -1
  628. package/dist/gui/assets/DashboardPage-DH52G8IG.js +0 -1
  629. package/dist/gui/assets/GettingStartedPage-BlTrQhvi.js +0 -1
  630. package/dist/gui/assets/ProjectsPage-BPVSLPXv.js +0 -1
  631. package/dist/gui/assets/ScaffoldRepoInline-ywcpq9PX.js +0 -1
  632. package/dist/gui/assets/SettingsPage-RQr8SalV.js +0 -1
  633. package/dist/gui/assets/SkillsPage-CYoSRrwx.js +0 -6
  634. package/dist/gui/assets/StartWorkPage-DBKK4lFi.js +0 -1
  635. package/dist/gui/assets/WorkspacesPage-DxEONvSq.js +0 -6
  636. package/dist/gui/assets/alert-dialog-CQAX2yRx.js +0 -1
  637. package/dist/gui/assets/badge-CAohJGj6.js +0 -1
  638. package/dist/gui/assets/bot-C2HWrAft.js +0 -1
  639. package/dist/gui/assets/button-BDDZnIHx.js +0 -1
  640. package/dist/gui/assets/card-BKXzd_5L.js +0 -1
  641. package/dist/gui/assets/chevron-down-qTL8HPug.js +0 -1
  642. package/dist/gui/assets/cpu-Cdwd84Jz.js +0 -1
  643. package/dist/gui/assets/empty-BdlgbifD.js +0 -1
  644. package/dist/gui/assets/index-BF6pre6G.css +0 -2
  645. package/dist/gui/assets/index-C_rwnBzF.js +0 -52
  646. package/dist/gui/assets/isElementDisabled-uy_EOitH.js +0 -1
  647. package/dist/gui/assets/label-CG5exjag.js +0 -1
  648. package/dist/gui/assets/square-DlIYnlSq.js +0 -1
  649. package/dist/gui/assets/textarea-ByfoCb54.js +0 -1
  650. package/dist/gui/assets/useAriaLabelledBy-ClesgjMe.js +0 -1
  651. package/dist/gui/assets/useValueChanged-DeYvGnKs.js +0 -1
  652. package/dist/gui/assets/zap-CWG_Lvki.js +0 -1
  653. package/dist/harness/contract.test.d.ts +0 -2
  654. package/dist/harness/contract.test.d.ts.map +0 -1
  655. package/dist/harness/contract.test.js +0 -426
  656. package/dist/harness/contract.test.js.map +0 -1
  657. package/dist/harness/harness.test.d.ts +0 -2
  658. package/dist/harness/harness.test.d.ts.map +0 -1
  659. package/dist/harness/harness.test.js +0 -215
  660. package/dist/harness/harness.test.js.map +0 -1
  661. package/dist/mcp/tools.test.d.ts +0 -2
  662. package/dist/mcp/tools.test.d.ts.map +0 -1
  663. package/dist/mcp/tools.test.js +0 -194
  664. package/dist/mcp/tools.test.js.map +0 -1
  665. package/dist/orchestration/log-tail.test.d.ts +0 -2
  666. package/dist/orchestration/log-tail.test.d.ts.map +0 -1
  667. package/dist/orchestration/log-tail.test.js +0 -72
  668. package/dist/orchestration/log-tail.test.js.map +0 -1
  669. package/dist/orchestration/orchestrator.test.d.ts +0 -2
  670. package/dist/orchestration/orchestrator.test.d.ts.map +0 -1
  671. package/dist/orchestration/orchestrator.test.js +0 -85
  672. package/dist/orchestration/orchestrator.test.js.map +0 -1
  673. package/dist/orchestration/runner.test.d.ts +0 -2
  674. package/dist/orchestration/runner.test.d.ts.map +0 -1
  675. package/dist/orchestration/runner.test.js +0 -233
  676. package/dist/orchestration/runner.test.js.map +0 -1
  677. package/dist/resources/agents-catalog.test.d.ts +0 -2
  678. package/dist/resources/agents-catalog.test.d.ts.map +0 -1
  679. package/dist/resources/agents-catalog.test.js +0 -50
  680. package/dist/resources/agents-catalog.test.js.map +0 -1
  681. package/dist/resources/codex-agent.test.d.ts +0 -2
  682. package/dist/resources/codex-agent.test.d.ts.map +0 -1
  683. package/dist/resources/codex-agent.test.js +0 -27
  684. package/dist/resources/codex-agent.test.js.map +0 -1
  685. package/dist/resources/materializer.test.d.ts +0 -2
  686. package/dist/resources/materializer.test.d.ts.map +0 -1
  687. package/dist/resources/materializer.test.js +0 -149
  688. package/dist/resources/materializer.test.js.map +0 -1
  689. package/dist/resources/service.test.d.ts +0 -2
  690. package/dist/resources/service.test.d.ts.map +0 -1
  691. package/dist/resources/service.test.js +0 -58
  692. package/dist/resources/service.test.js.map +0 -1
  693. package/dist/server.test.d.ts +0 -2
  694. package/dist/server.test.d.ts.map +0 -1
  695. package/dist/server.test.js +0 -1697
  696. package/dist/server.test.js.map +0 -1
  697. package/dist/utils/detect-ai.test.d.ts +0 -2
  698. package/dist/utils/detect-ai.test.d.ts.map +0 -1
  699. package/dist/utils/detect-ai.test.js +0 -70
  700. package/dist/utils/detect-ai.test.js.map +0 -1
  701. package/dist/utils/detect-editors.test.d.ts +0 -2
  702. package/dist/utils/detect-editors.test.d.ts.map +0 -1
  703. package/dist/utils/detect-editors.test.js +0 -85
  704. package/dist/utils/detect-editors.test.js.map +0 -1
  705. package/dist/utils/git.test.d.ts +0 -2
  706. package/dist/utils/git.test.d.ts.map +0 -1
  707. package/dist/utils/git.test.js +0 -125
  708. package/dist/utils/git.test.js.map +0 -1
  709. package/dist/utils/multi-git.test.d.ts +0 -2
  710. package/dist/utils/multi-git.test.d.ts.map +0 -1
  711. package/dist/utils/multi-git.test.js +0 -330
  712. package/dist/utils/multi-git.test.js.map +0 -1
  713. package/dist/utils/pr.test.d.ts +0 -2
  714. package/dist/utils/pr.test.d.ts.map +0 -1
  715. package/dist/utils/pr.test.js +0 -47
  716. package/dist/utils/pr.test.js.map +0 -1
  717. package/dist/utils/session-finder.test.d.ts +0 -2
  718. package/dist/utils/session-finder.test.d.ts.map +0 -1
  719. package/dist/utils/session-finder.test.js +0 -304
  720. package/dist/utils/session-finder.test.js.map +0 -1
  721. package/dist/utils/skills-catalog.test.d.ts +0 -2
  722. package/dist/utils/skills-catalog.test.d.ts.map +0 -1
  723. package/dist/utils/skills-catalog.test.js +0 -281
  724. package/dist/utils/skills-catalog.test.js.map +0 -1
  725. package/dist/utils/system-scanner.test.d.ts +0 -2
  726. package/dist/utils/system-scanner.test.d.ts.map +0 -1
  727. package/dist/utils/system-scanner.test.js +0 -73
  728. package/dist/utils/system-scanner.test.js.map +0 -1
  729. package/dist/utils/terminal-launch.test.d.ts +0 -2
  730. package/dist/utils/terminal-launch.test.d.ts.map +0 -1
  731. package/dist/utils/terminal-launch.test.js +0 -117
  732. package/dist/utils/terminal-launch.test.js.map +0 -1
  733. package/dist/utils/update-check.test.d.ts +0 -2
  734. package/dist/utils/update-check.test.d.ts.map +0 -1
  735. package/dist/utils/update-check.test.js +0 -30
  736. package/dist/utils/update-check.test.js.map +0 -1
  737. package/dist/utils/workflows.test.d.ts +0 -2
  738. package/dist/utils/workflows.test.d.ts.map +0 -1
  739. package/dist/utils/workflows.test.js +0 -86
  740. package/dist/utils/workflows.test.js.map +0 -1
  741. package/dist/utils/workspace-launch.test.d.ts +0 -2
  742. package/dist/utils/workspace-launch.test.d.ts.map +0 -1
  743. package/dist/utils/workspace-launch.test.js +0 -128
  744. package/dist/utils/workspace-launch.test.js.map +0 -1
@@ -1,220 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import * as fs from 'node:fs/promises';
3
- import * as os from 'node:os';
4
- import * as path from 'node:path';
5
- import { generateImplementationPlan } from './plan-generator.js';
6
- function analysisFor(name, repoPath, opts = {}) {
7
- return {
8
- name,
9
- path: repoPath,
10
- techStack: {
11
- languages: opts.languages ?? ['typescript'],
12
- frameworks: [],
13
- buildTools: [],
14
- projectType: 'backend',
15
- },
16
- ports: [],
17
- existingAIConfigs: [],
18
- readmeSummary: '',
19
- produces: opts.produces,
20
- dependencies: opts.dependencies ?? [],
21
- };
22
- }
23
- describe('generateImplementationPlan', () => {
24
- let dir;
25
- beforeEach(async () => {
26
- dir = await fs.mkdtemp(path.join(os.tmpdir(), 'nexusflow-plan-test-'));
27
- });
28
- afterEach(async () => {
29
- await fs.rm(dir, { recursive: true, force: true }).catch(() => { });
30
- });
31
- /** Builds a context over the given repos and returns the written plan. */
32
- async function planFor(repos, analysis) {
33
- const feature = {
34
- id: 'feat',
35
- branchName: 'feat',
36
- description: 'add a discount code to checkout',
37
- repos: repos.map((r) => r.path),
38
- assistants: ['claude'],
39
- workspacePath: dir,
40
- createdAt: '2026-07-30T00:00:00.000Z',
41
- };
42
- const ctx = { feature, repos, analysis };
43
- await generateImplementationPlan(ctx, dir);
44
- return fs.readFile(path.join(dir, 'nexusflow-plan.md'), 'utf-8');
45
- }
46
- /** Two repos with no package relationship between them. */
47
- function unrelated() {
48
- const a = path.join(dir, 'web');
49
- const b = path.join(dir, 'tool');
50
- return [
51
- [
52
- { name: 'web', path: a, defaultBranch: 'main' },
53
- { name: 'tool', path: b, defaultBranch: 'main' },
54
- ],
55
- new Map([
56
- [a, analysisFor('web', a)],
57
- [b, analysisFor('tool', b)],
58
- ]),
59
- ];
60
- }
61
- /** `core` publishes a package `web` depends on. */
62
- function related() {
63
- const core = path.join(dir, 'core');
64
- const web = path.join(dir, 'web');
65
- return [
66
- [
67
- { name: 'core', path: core, defaultBranch: 'main' },
68
- { name: 'web', path: web, defaultBranch: 'main' },
69
- ],
70
- new Map([
71
- [core, analysisFor('core', core, { produces: [{ name: '@acme/core', type: 'npm' }] })],
72
- [web, analysisFor('web', web, { dependencies: [{ name: '@acme/core', type: 'npm', version: '^1.0.0' }] })],
73
- ]),
74
- ];
75
- }
76
- describe('when no repo depends on another', () => {
77
- it('says so once instead of five times', async () => {
78
- const content = await planFor(...unrelated());
79
- expect(content).toContain('No package dependencies were detected');
80
- // Every section below existed only to describe cross-repo structure.
81
- expect(content).not.toContain('```mermaid');
82
- expect(content).not.toContain('Suggested Implementation Order');
83
- expect(content).not.toContain('Dependency Table');
84
- expect(content).not.toContain('Contracts & Clients');
85
- expect(content).not.toContain('Local Package Development Loop');
86
- });
87
- it('never claims other repos depend on them, because none do', async () => {
88
- const content = await planFor(...unrelated());
89
- expect(content).not.toContain('Other repos depend on them');
90
- expect(content).not.toContain('depended on by');
91
- });
92
- it('words itself for the repo count instead of counting into one sentence', async () => {
93
- // "between the single repo" and "from one of these repos to another" both
94
- // read as nonsense for a one-repo workspace.
95
- const [repos, analysis] = unrelated();
96
- const several = await planFor(repos, analysis);
97
- expect(several).toContain('between the 2 repos');
98
- expect(several).toContain('add a dependency from one of these repos');
99
- const [single] = repos;
100
- const one = await planFor([single], new Map([[single.path, analysis.get(single.path)]]));
101
- expect(one).toContain('This workspace has one repo');
102
- expect(one).toContain('nexusflow add-repo');
103
- expect(one).toContain('Runtime and intra-repo contracts are not inferred');
104
- expect(one).toContain('AUTO-GENERATED by NexusFlow from live workspace state');
105
- expect(one).not.toContain('the single repo');
106
- expect(one).not.toContain('one of these repos to another');
107
- });
108
- it('stays short, since it has one fact to convey', async () => {
109
- const content = await planFor(...unrelated());
110
- expect(content.length).toBeLessThan(600);
111
- });
112
- it('says how to get a real plan', async () => {
113
- const content = await planFor(...unrelated());
114
- expect(content).toContain('nexusflow refresh');
115
- });
116
- });
117
- describe('when one repo depends on another', () => {
118
- it('emits the order, the diagram and the table', async () => {
119
- const content = await planFor(...related());
120
- expect(content).toContain('```mermaid');
121
- expect(content).toContain('Suggested Implementation Order');
122
- expect(content).toContain('Dependency Table');
123
- expect(content.indexOf('**Repos:** core')).toBeLessThan(content.indexOf('**Repos:** web'));
124
- });
125
- it('names the actual downstream consumer rather than asserting one exists', async () => {
126
- const content = await planFor(...related());
127
- expect(content).toContain('core is depended on by a later phase');
128
- });
129
- it('lists the shared package with its real consumer', async () => {
130
- const content = await planFor(...related());
131
- expect(content).toContain('Contracts & Clients');
132
- expect(content).toContain('`@acme/core`');
133
- expect(content).toContain('| `@acme/core` | `core` | `web` | `npm` |');
134
- expect(content).not.toContain('^1.0.0');
135
- expect(content).not.toContain('_None_');
136
- });
137
- it('gives the npm dev loop and not the NuGet one', async () => {
138
- const content = await planFor(...related());
139
- expect(content).toContain('Local Package Development Loop');
140
- expect(content).toContain('npm link');
141
- expect(content).not.toContain('dotnet pack');
142
- });
143
- it('omits the Contributing Projects column when nothing has one', async () => {
144
- // It is a .csproj-only concept; an npm workspace rendered it as a dash.
145
- const content = await planFor(...related());
146
- expect(content).not.toContain('Contributing Projects');
147
- });
148
- });
149
- describe('a published package nobody in the workspace consumes', () => {
150
- it('is not reported as a cross-repo contract', async () => {
151
- // This is the single-repo case that produced a three-row table of
152
- // packages with "_None_" consumers and a dev loop that could not apply.
153
- const repo = path.join(dir, 'lib');
154
- const content = await planFor([{ name: 'lib', path: repo, defaultBranch: 'main' }], new Map([[
155
- repo,
156
- analysisFor('lib', repo, {
157
- produces: [
158
- { name: '@acme/lib', type: 'npm' },
159
- { name: '@acme/lib-cli', type: 'npm' },
160
- ],
161
- }),
162
- ]]));
163
- expect(content).not.toContain('@acme/lib');
164
- expect(content).not.toContain('Local Package Development Loop');
165
- expect(content).toContain('This workspace has one repo');
166
- });
167
- });
168
- describe('a dependency cycle', () => {
169
- /** `a` and `b` each publish a package the other consumes. */
170
- function cyclic() {
171
- const a = path.join(dir, 'a');
172
- const b = path.join(dir, 'b');
173
- return [
174
- [
175
- { name: 'a', path: a, defaultBranch: 'main' },
176
- { name: 'b', path: b, defaultBranch: 'main' },
177
- ],
178
- new Map([
179
- [a, analysisFor('a', a, {
180
- produces: [{ name: '@acme/a', type: 'npm' }],
181
- dependencies: [{ name: '@acme/b', type: 'npm', version: '^1.0.0' }],
182
- })],
183
- [b, analysisFor('b', b, {
184
- produces: [{ name: '@acme/b', type: 'npm' }],
185
- dependencies: [{ name: '@acme/a', type: 'npm', version: '^1.0.0' }],
186
- })],
187
- ]),
188
- ];
189
- }
190
- it('never claims a cycle member has no dependencies', async () => {
191
- // topologicalSort falls back to emitting every unresolved repo as one
192
- // phase, which the phase-1 wording then described as dependency-free.
193
- const content = await planFor(...cyclic());
194
- expect(content).not.toContain('No dependencies on other workspace repos');
195
- });
196
- it('names the cycle so the reader knows the order is unresolved', async () => {
197
- const content = await planFor(...cyclic());
198
- expect(content).toContain('**Cycle:**');
199
- expect(content).toContain('depend on each other');
200
- expect(content).toContain('break the cycle');
201
- });
202
- });
203
- describe('robustness', () => {
204
- it('falls back to an alphabetical list when there is no analysis', async () => {
205
- const [repos] = unrelated();
206
- const content = await planFor(repos, new Map());
207
- expect(content).toContain('- tool');
208
- expect(content).toContain('- web');
209
- expect(content.indexOf('- tool')).toBeLessThan(content.indexOf('- web'));
210
- });
211
- it('survives an analysis carrying no dependency array', async () => {
212
- const repo = path.join(dir, 'solo');
213
- const analysis = analysisFor('solo', repo);
214
- delete analysis.dependencies;
215
- const content = await planFor([{ name: 'solo', path: repo, defaultBranch: 'main' }], new Map([[repo, analysis]]));
216
- expect(content).toContain('This workspace has one repo');
217
- });
218
- });
219
- });
220
- //# sourceMappingURL=plan-generator.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plan-generator.test.js","sourceRoot":"","sources":["../../src/generators/plan-generator.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=skills-generator.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-generator.test.d.ts","sourceRoot":"","sources":["../../src/generators/skills-generator.test.ts"],"names":[],"mappings":""}
@@ -1,79 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import * as fs from 'node:fs/promises';
3
- import * as path from 'node:path';
4
- import * as os from 'node:os';
5
- import fse from 'fs-extra';
6
- import { generateSkills } from './skills-generator.js';
7
- import { saveWorkspaceSkillsConfig } from '../utils/skills-catalog.js';
8
- describe('skills-generator', () => {
9
- let tempWorkspace;
10
- let tempHome;
11
- const originalEnv = process.env.NEXUSFLOW_HOME;
12
- beforeEach(async () => {
13
- tempWorkspace = await fs.mkdtemp(path.join(os.tmpdir(), 'nexusflow-gen-skills-ws-'));
14
- tempHome = await fs.mkdtemp(path.join(os.tmpdir(), 'nexusflow-gen-skills-home-'));
15
- process.env.NEXUSFLOW_HOME = tempHome;
16
- });
17
- afterEach(async () => {
18
- if (originalEnv !== undefined) {
19
- process.env.NEXUSFLOW_HOME = originalEnv;
20
- }
21
- else {
22
- delete process.env.NEXUSFLOW_HOME;
23
- }
24
- await fse.remove(tempWorkspace);
25
- await fse.remove(tempHome);
26
- });
27
- it('deploys enabled skills across claude, antigravity, cursor, copilot, and codex', async () => {
28
- // Enable 2 specific skills
29
- await saveWorkspaceSkillsConfig(tempWorkspace, {
30
- enabledSkills: ['pr-review-toolkit', 'verifier-workspace'],
31
- });
32
- const ctx = {
33
- feature: {
34
- id: 'test-feature',
35
- branchName: 'feature-test',
36
- description: 'Testing skills generation',
37
- repos: [],
38
- assistants: ['claude', 'antigravity', 'cursor', 'copilot', 'codex'],
39
- workspacePath: tempWorkspace,
40
- createdAt: new Date().toISOString(),
41
- },
42
- repos: [],
43
- };
44
- const assistants = ['claude', 'antigravity', 'cursor', 'copilot', 'codex'];
45
- await generateSkills(ctx, assistants, tempWorkspace);
46
- // 1. Claude: .claude/skills/<skillName>/SKILL.md
47
- expect(await fse.pathExists(path.join(tempWorkspace, '.claude', 'skills', 'pr-review-toolkit', 'SKILL.md'))).toBe(true);
48
- expect(await fse.pathExists(path.join(tempWorkspace, '.claude', 'skills', 'verifier-workspace', 'SKILL.md'))).toBe(true);
49
- // 2. Antigravity: .agents/skills/<skillName>/SKILL.md
50
- expect(await fse.pathExists(path.join(tempWorkspace, '.agents', 'skills', 'pr-review-toolkit', 'SKILL.md'))).toBe(true);
51
- // Cursor, Copilot, Codex, and Antigravity all discover the portable package
52
- // from the shared Agent Skills location. No lossy rules/instructions copies.
53
- expect(await fse.pathExists(path.join(tempWorkspace, '.cursor', 'rules', 'pr-review-toolkit.mdc'))).toBe(false);
54
- expect(await fse.pathExists(path.join(tempWorkspace, '.github', 'instructions', 'pr-review-toolkit.instructions.md'))).toBe(false);
55
- expect(await fse.pathExists(path.join(tempWorkspace, '.codex', 'skills', 'pr-review-toolkit'))).toBe(false);
56
- expect(await fse.pathExists(path.join(tempWorkspace, '.nexusflow', 'resources.lock.json'))).toBe(true);
57
- });
58
- it('respects empty enabledSkills array and deploys nothing when all are disabled', async () => {
59
- await saveWorkspaceSkillsConfig(tempWorkspace, {
60
- enabledSkills: [],
61
- });
62
- const ctx = {
63
- feature: {
64
- id: 'test-feature',
65
- branchName: 'feature-test',
66
- description: 'Testing empty skills generation',
67
- repos: [],
68
- assistants: ['claude', 'antigravity'],
69
- workspacePath: tempWorkspace,
70
- createdAt: new Date().toISOString(),
71
- },
72
- repos: [],
73
- };
74
- await generateSkills(ctx, ['claude', 'antigravity'], tempWorkspace);
75
- expect(await fse.pathExists(path.join(tempWorkspace, '.claude', 'skills', 'pr-review-toolkit'))).toBe(false);
76
- expect(await fse.pathExists(path.join(tempWorkspace, '.agents', 'skills', 'pr-review-toolkit'))).toBe(false);
77
- });
78
- });
79
- //# sourceMappingURL=skills-generator.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills-generator.test.js","sourceRoot":"","sources":["../../src/generators/skills-generator.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import{_ as e,b as t,g as n,h as r,m as i,t as a}from"./button-BDDZnIHx.js";import{o}from"./CSPContext-DBUu9tE0.js";import{t as s}from"./bot-C2HWrAft.js";import{a as ee,c as te,i as ne,n as c,o as l,r as re,s as ie,t as ae}from"./alert-dialog-CQAX2yRx.js";import{t as oe}from"./trash-2-CtR35_eF.js";import{H as se,Ht as ce,Kt as le,N as ue,Nt as de,R as fe,Wt as u,Xt as pe,Y as me,a as he,c as d,d as f,f as p,j as ge,l as m,o as h,ot as _e,s as g,st as ve}from"./index-C_rwnBzF.js";import{t as _}from"./badge-CAohJGj6.js";import{t as ye}from"./card-BKXzd_5L.js";import{a as v,i as be,n as y,r as b,t as x}from"./empty-BdlgbifD.js";import{t as S}from"./label-CG5exjag.js";import{t as C}from"./textarea-ByfoCb54.js";var xe=r(`file-up`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]),w=t(e(),1),T=n(),E={id:``,name:``,category:`general`,description:``,developerInstructions:``};function D(e){return e.toLowerCase().trim().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)}function O({showToast:e}){let[t,n]=(0,w.useState)(`global`),[r,O]=(0,w.useState)(``),[Se,k]=(0,w.useState)(!1),[A,j]=(0,w.useState)(!1),[M,N]=(0,w.useState)(null),[P,F]=(0,w.useState)(E),[I,L]=(0,w.useState)(``),[R,z]=(0,w.useState)(null),[B,V]=(0,w.useState)(null),{data:H=[],isLoading:Ce,isError:we}=ge(),{data:U=[]}=ve(),W=_e(t===`global`?``:t),G=me(),K=se(),q=fe(),J=ue(),Y=t!==`global`,Te=U.find(e=>e.id===t),X=!Y||Te?.assistants?.includes(`codex`),Z=Y&&X&&!W.isLoading&&!W.isError&&!!W.data;(0,w.useEffect)(()=>{if(!Y){z(null);return}W.data&&z([...W.data.enabledAgents??[]])},[Y,t,W.data]);let Q=(0,w.useMemo)(()=>{let e=r.trim().toLowerCase();return e?H.filter(t=>[t.name,t.description,t.category].some(t=>t.toLowerCase().includes(e))):H},[H,r]),Ee=new Set(R??W.data?.enabledAgents??[]);function $(){N(null),F(E),k(!0)}function De(e){N(e.id),F({id:e.id,name:e.name,category:e.category,description:e.description,developerInstructions:e.developerInstructions,model:e.model,modelReasoningEffort:e.modelReasoningEffort,sandboxMode:e.sandboxMode}),k(!0)}async function Oe(){try{let t=M??D(P.name);await G.mutateAsync({...P,id:t,name:t}),k(!1),e?.(`Codex agent saved`,`success`)}catch(t){e?.(t instanceof Error?t.message:`Failed to save agent`,`error`)}}async function ke(){try{await K.mutateAsync({toml:I,category:`general`}),j(!1),L(``),e?.(`Codex agent imported`,`success`)}catch(t){e?.(t instanceof Error?t.message:`Failed to import agent`,`error`)}}async function Ae(){if(B)try{await q.mutateAsync(B.id),V(null),e?.(`Agent deleted from the personal catalog`,`info`)}catch(t){e?.(t instanceof Error?t.message:`Failed to delete agent`,`error`)}}function je(e){if(!Z||R===null)return;let t=new Set(R);t.has(e)?t.delete(e):t.add(e),z([...t])}async function Me(){if(!(!W.data||R===null))try{await J.mutateAsync({workspaceId:t,expectedRevision:W.data.revision??0,enabledSkills:W.data.enabledSkills,enabledAgents:R,enabledCategories:W.data.enabledCategories??[]}),e?.(`Agent selection saved. Refresh the workspace to apply it.`,`success`)}catch(t){e?.(t instanceof Error?t.message:`Failed to save agent selection`,`error`)}}return(0,T.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,T.jsxs)(`header`,{className:`flex flex-wrap items-center justify-between gap-4 border-b border-border px-6 py-5`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,T.jsx)(`div`,{className:`rounded-lg bg-primary/10 p-2 text-primary`,children:(0,T.jsx)(s,{className:`h-5 w-5`})}),(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`h1`,{className:`text-xl font-bold tracking-tight`,children:`Codex Agent Library`}),(0,T.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Create and reuse project-scoped Codex custom agents.`})]})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,T.jsx)(a,{render:(0,T.jsx)(de,{to:`/skills`}),variant:`outline`,size:`sm`,children:`Skills`}),(0,T.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg border border-border bg-muted/50 px-3 py-1.5`,children:[(0,T.jsx)(le,{className:`h-4 w-4 text-muted-foreground`}),(0,T.jsx)(S,{htmlFor:`agent-scope`,className:`text-xs text-muted-foreground`,children:`Scope`}),(0,T.jsxs)(`select`,{id:`agent-scope`,value:t,onChange:e=>n(e.target.value),className:`cursor-pointer bg-transparent text-xs font-semibold text-foreground focus:outline-none`,children:[(0,T.jsx)(`option`,{value:`global`,children:`Personal catalog`}),U.map(e=>(0,T.jsx)(`option`,{value:e.id,children:e.id},e.id))]})]}),Y?(0,T.jsx)(a,{size:`sm`,onClick:Me,disabled:!Z||J.isPending,children:J.isPending?`Saving…`:`Save selection`}):(0,T.jsxs)(T.Fragment,{children:[(0,T.jsxs)(a,{variant:`outline`,size:`sm`,onClick:()=>j(!0),children:[(0,T.jsx)(xe,{className:`mr-1.5 h-4 w-4`}),`Import TOML`]}),(0,T.jsxs)(a,{size:`sm`,onClick:$,children:[(0,T.jsx)(u,{className:`mr-1.5 h-4 w-4`}),`New agent`]})]})]})]}),(0,T.jsx)(`div`,{className:`border-b border-border/60 bg-muted/20 px-6 py-3`,children:(0,T.jsxs)(`div`,{className:`relative max-w-md`,children:[(0,T.jsx)(ce,{className:`absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,T.jsx)(o,{value:r,onChange:e=>O(e.target.value),placeholder:`Search agents…`,className:`pl-9`})]})}),(0,T.jsx)(`main`,{className:`min-h-0 flex-1 overflow-auto p-6`,children:Ce||Y&&W.isLoading?(0,T.jsx)(`div`,{className:`flex justify-center p-12`,children:(0,T.jsx)(he,{})}):we||Y&&W.isError?(0,T.jsx)(x,{className:`border border-dashed py-12`,children:(0,T.jsxs)(b,{children:[(0,T.jsx)(v,{children:`Resources could not be loaded`}),(0,T.jsx)(y,{children:`Assignment controls remain disabled to protect the saved selection.`})]})}):Y&&!X?(0,T.jsx)(x,{className:`border border-dashed py-12`,children:(0,T.jsxs)(b,{children:[(0,T.jsx)(v,{children:`Codex is not enabled for this workspace`}),(0,T.jsx)(y,{children:`Add Codex to the workspace before assigning Codex-native agents.`})]})}):Q.length===0?(0,T.jsxs)(x,{className:`border border-dashed py-12`,children:[(0,T.jsx)(be,{children:(0,T.jsx)(s,{className:`h-8 w-8 text-muted-foreground`})}),(0,T.jsxs)(b,{children:[(0,T.jsx)(v,{children:`No Codex agents found`}),(0,T.jsx)(y,{children:`Create an agent or import a native TOML definition.`})]}),!Y&&(0,T.jsxs)(a,{size:`sm`,onClick:$,children:[(0,T.jsx)(u,{className:`mr-1.5 h-4 w-4`}),`New agent`]})]}):(0,T.jsx)(`div`,{className:`mx-auto grid max-w-6xl grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3`,children:Q.map(e=>{let t=Ee.has(e.id);return(0,T.jsxs)(ye,{className:i(`flex flex-col gap-4 p-4`,Y&&!t&&`opacity-60`),children:[(0,T.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,T.jsx)(`h2`,{className:`font-semibold`,children:e.name}),(0,T.jsx)(_,{variant:`outline`,children:`Codex`})]}),(0,T.jsx)(`p`,{className:`mt-2 text-sm text-muted-foreground`,children:e.description})]}),Y?(0,T.jsxs)(a,{variant:t?`default`:`outline`,size:`sm`,onClick:()=>je(e.id),disabled:!Z,children:[(0,T.jsx)(pe,{className:i(`mr-1 h-3.5 w-3.5`,!t&&`opacity-0`)}),t?`Enabled`:`Disabled`]}):(0,T.jsxs)(`div`,{className:`flex gap-1`,children:[(0,T.jsx)(a,{variant:`ghost`,size:`icon`,"aria-label":`Edit ${e.name}`,onClick:()=>De(e),children:(0,T.jsx)(te,{className:`h-4 w-4`})}),(0,T.jsx)(a,{variant:`ghost`,size:`icon`,"aria-label":`Delete ${e.name}`,onClick:()=>V(e),children:(0,T.jsx)(oe,{className:`h-4 w-4`})})]})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap gap-2 text-xs text-muted-foreground`,children:[e.sandboxMode&&(0,T.jsx)(_,{variant:`secondary`,children:e.sandboxMode}),e.modelReasoningEffort&&(0,T.jsx)(_,{variant:`secondary`,children:e.modelReasoningEffort}),e.model&&(0,T.jsx)(_,{variant:`secondary`,children:e.model})]})]},e.id)})})}),(0,T.jsx)(h,{open:Se,onOpenChange:k,children:(0,T.jsxs)(f,{className:`max-w-2xl`,children:[(0,T.jsxs)(m,{children:[(0,T.jsx)(p,{children:M?`Edit Codex agent`:`Create Codex agent`}),(0,T.jsx)(g,{children:`Only the current stable native fields are managed. Omitted settings inherit from Codex.`})]}),(0,T.jsxs)(`div`,{className:`grid gap-4 py-2`,children:[(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-name`,children:`Name`}),(0,T.jsx)(o,{id:`agent-name`,value:P.name,disabled:!!M,onChange:e=>F({...P,name:D(e.target.value)}),placeholder:`code-reviewer`})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-description`,children:`Description`}),(0,T.jsx)(o,{id:`agent-description`,value:P.description,onChange:e=>F({...P,description:e.target.value}),placeholder:`Use when reviewing a fixed diff for correctness and security.`})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-instructions`,children:`Developer instructions`}),(0,T.jsx)(C,{id:`agent-instructions`,value:P.developerInstructions,onChange:e=>F({...P,developerInstructions:e.target.value}),className:`min-h-48 font-mono`})]}),(0,T.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-model`,children:`Model override`}),(0,T.jsx)(o,{id:`agent-model`,value:P.model??``,onChange:e=>F({...P,model:e.target.value||void 0}),placeholder:`Inherit`})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-effort`,children:`Reasoning`}),(0,T.jsxs)(`select`,{id:`agent-effort`,value:P.modelReasoningEffort??``,onChange:e=>F({...P,modelReasoningEffort:e.target.value||void 0}),className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,T.jsx)(`option`,{value:``,children:`Inherit`}),(0,T.jsx)(`option`,{value:`low`,children:`Low`}),(0,T.jsx)(`option`,{value:`medium`,children:`Medium`}),(0,T.jsx)(`option`,{value:`high`,children:`High`}),(0,T.jsx)(`option`,{value:`xhigh`,children:`XHigh`}),(0,T.jsx)(`option`,{value:`max`,children:`Max`}),(0,T.jsx)(`option`,{value:`ultra`,children:`Ultra`})]})]}),(0,T.jsxs)(`div`,{className:`grid gap-2`,children:[(0,T.jsx)(S,{htmlFor:`agent-sandbox`,children:`Sandbox`}),(0,T.jsxs)(`select`,{id:`agent-sandbox`,value:P.sandboxMode??``,onChange:e=>F({...P,sandboxMode:e.target.value||void 0}),className:`h-9 rounded-md border border-input bg-background px-3 text-sm`,children:[(0,T.jsx)(`option`,{value:``,children:`Inherit`}),(0,T.jsx)(`option`,{value:`read-only`,children:`Read only`}),(0,T.jsx)(`option`,{value:`workspace-write`,children:`Workspace write`})]})]})]})]}),(0,T.jsxs)(d,{children:[(0,T.jsx)(a,{variant:`outline`,onClick:()=>k(!1),children:`Cancel`}),(0,T.jsx)(a,{onClick:Oe,disabled:G.isPending||!P.name||!P.description||!P.developerInstructions,children:G.isPending?`Saving…`:`Save agent`})]})]})}),(0,T.jsx)(h,{open:A,onOpenChange:j,children:(0,T.jsxs)(f,{className:`max-w-2xl`,children:[(0,T.jsxs)(m,{children:[(0,T.jsx)(p,{children:`Import Codex agent TOML`}),(0,T.jsx)(g,{children:`The import accepts the required native fields and supported model, reasoning, and sandbox overrides.`})]}),(0,T.jsx)(C,{value:I,onChange:e=>L(e.target.value),className:`min-h-72 font-mono`,placeholder:`name = "reviewer"
2
- description = "Use for code review."
3
- developer_instructions = "Review the fixed diff."`}),(0,T.jsxs)(d,{children:[(0,T.jsx)(a,{variant:`outline`,onClick:()=>j(!1),children:`Cancel`}),(0,T.jsx)(a,{onClick:ke,disabled:K.isPending||!I.trim(),children:K.isPending?`Importing…`:`Import agent`})]})]})}),(0,T.jsx)(ae,{open:B!==null,onOpenChange:e=>!e&&V(null),children:(0,T.jsxs)(l,{children:[(0,T.jsxs)(ee,{children:[(0,T.jsxs)(ie,{children:[`Delete “`,B?.name,`”?`]}),(0,T.jsx)(re,{children:`This removes the agent from the personal catalog. Existing workspace copies remain until the workspace is refreshed.`})]}),(0,T.jsxs)(ne,{children:[(0,T.jsx)(c,{render:(0,T.jsx)(a,{variant:`outline`,children:`Cancel`})}),(0,T.jsx)(a,{variant:`destructive`,onClick:Ae,disabled:q.isPending,children:q.isPending?`Deleting…`:`Delete agent`})]})]})})]})}export{O as AgentsPage};
@@ -1 +0,0 @@
1
- import{_ as e,a as t,b as n,c as r,d as i,f as a,g as o,i as s,l as c,m as l,o as u,p as d,u as f,v as p}from"./button-BDDZnIHx.js";var m=p((t=>{var n=e();function r(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function i(){}var a={d:{f:i,r:function(){throw Error(r(522))},D:i,C:i,L:i,m:i,X:i,S:i,M:i},p:0,findDOMNode:null},o=Symbol.for(`react.portal`);function s(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}var c=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function l(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}t.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,t.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(r(299));return s(e,t,null,n)},t.flushSync=function(e){var t=c.T,n=a.p;try{if(c.T=null,a.p=2,e)return e()}finally{c.T=t,a.p=n,a.d.f()}},t.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},t.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},t.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},t.preinitModule=function(e,t){if(typeof e==`string`)if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=l(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0})}}else t??a.d.M(e)},t.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},t.preloadModule=function(e,t){if(typeof e==`string`)if(t){var n=l(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0})}else a.d.m(e)},t.requestFormReset=function(e){a.d.r(e)},t.unstable_batchedUpdates=function(e,t){return e(t)},t.useFormState=function(e,t,n){return c.H.useFormState(e,t,n)},t.useFormStatus=function(){return c.H.useHostTransitionStatus()},t.version=`19.2.7`})),h=p(((e,t)=>{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=function(e){return e.startingStyle=`data-starting-style`,e.endingStyle=`data-ending-style`,e}({}),_={[g.startingStyle]:``},v={[g.endingStyle]:``},y={transitionStatus(e){return e===`starting`?_:e===`ending`?v:null}},b=function(e){return e.open=`data-open`,e.closed=`data-closed`,e[e.startingStyle=g.startingStyle]=`startingStyle`,e[e.endingStyle=g.endingStyle]=`endingStyle`,e.anchorHidden=`data-anchor-hidden`,e.side=`data-side`,e.align=`data-align`,e}({}),x=function(e){return e.popupOpen=`data-popup-open`,e.pressed=`data-pressed`,e}({}),S={[x.popupOpen]:``},C={[x.popupOpen]:``,[x.pressed]:``},w={[b.open]:``},T={[b.closed]:``},E={[b.anchorHidden]:``},D={open(e){return e?S:null}},O={open(e){return e?C:null}},k={open(e){return e?w:T},anchorHidden(e){return e?E:null}},A=`none`,j=`trigger-press`,M=`trigger-hover`,N=`trigger-focus`,ee=`outside-press`,P=`item-press`,F=`close-press`,te=`focus-out`,ne=`escape-key`,I=`list-navigation`,re=`cancel-open`,ie=`sibling-open`,ae=`disabled`,oe=`missing`,L=`initial`,se=`imperative-action`,R=`window-resize`,z=n(h(),1),B=o(),V=n(e(),1);function H({controlled:e,default:t,name:n,state:r=`value`}){let{current:i}=V.useRef(e!==void 0),[a,o]=V.useState(t);return[i?e:a,V.useCallback(e=>{i||o(e)},[])]}function ce(){return typeof window<`u`}function U(e){return ue(e)?(e.nodeName||``).toLowerCase():`#document`}function W(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function le(e){return((ue(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function ue(e){return ce()?e instanceof Node||e instanceof W(e).Node:!1}function G(e){return ce()?e instanceof Element||e instanceof W(e).Element:!1}function K(e){return ce()?e instanceof HTMLElement||e instanceof W(e).HTMLElement:!1}function de(e){return!ce()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof W(e).ShadowRoot}function fe(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Ce(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function pe(e){return/^(table|td|th)$/.test(U(e))}function me(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var he=/transform|translate|scale|rotate|perspective|filter/,ge=/paint|layout|strict|content/,_e=e=>!!e&&e!==`none`,ve;function ye(e){let t=G(e)?Ce(e):e;return _e(t.transform)||_e(t.translate)||_e(t.scale)||_e(t.rotate)||_e(t.perspective)||!xe()&&(_e(t.backdropFilter)||_e(t.filter))||he.test(t.willChange||``)||ge.test(t.contain||``)}function be(e){let t=Te(e);for(;K(t)&&!Se(t);){if(ye(t))return t;if(me(t))return null;t=Te(t)}return null}function xe(){return ve??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),ve}function Se(e){return/^(html|body|#document)$/.test(U(e))}function Ce(e){return W(e).getComputedStyle(e)}function we(e){return G(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Te(e){if(U(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||de(e)&&e.host||le(e);return de(t)?t.host:t}function Ee(e){let t=Te(e);return Se(t)?(e.ownerDocument||e).body:K(t)&&fe(t)?t:Ee(t)}function De(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Ee(e),i=r===e.ownerDocument?.body,a=W(r);if(i){let e=Oe(a);return t.concat(a,a.visualViewport||[],fe(r)?r:[],e&&n?De(e):[])}else return t.concat(r,De(r,[],n))}function Oe(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}var ke={...V},Ae=ke.useInsertionEffect,je=Ae&&Ae!==ke.useLayoutEffect?Ae:e=>e();function q(e){let t=a(Me).current;return t.next=e,je(t.effect),t.trampoline}function Me(){let e={next:void 0,callback:Ne,trampoline:(...t)=>e.callback?.(...t),effect:()=>{e.callback=e.next}};return e}function Ne(){}var J=typeof document<`u`?V.useLayoutEffect:()=>{},Pe=V.createContext(void 0);function Fe(e=!1){let t=V.useContext(Pe);if(t===void 0&&!e)throw Error(d(16));return t}function Ie(e){let{focusableWhenDisabled:t,disabled:n,composite:r=!1,tabIndex:i=0,isNativeButton:a}=e,o=r&&t!==!1,s=r&&t===!1;return{props:V.useMemo(()=>{let e={onKeyDown(e){n&&t&&e.key!==`Tab`&&e.preventDefault()}};return r||(e.tabIndex=i,!a&&n&&(e.tabIndex=t?i:-1)),(a&&(t||o)||!a&&n)&&(e[`aria-disabled`]=n),a&&(!t||s)&&(e.disabled=n),e},[r,n,t,o,s,a,i])}}function Le(e={}){let{disabled:n=!1,focusableWhenDisabled:r,tabIndex:i=0,native:a=!0,composite:o}=e,s=V.useRef(null),c=Fe(!0),l=o??c!==void 0,{props:d}=Ie({focusableWhenDisabled:r,disabled:n,composite:l,tabIndex:i,isNativeButton:a}),f=V.useCallback(()=>{let e=s.current;Re(e)&&l&&n&&d.disabled===void 0&&e.disabled&&(e.disabled=!1)},[n,d.disabled,l]);return J(f,[f]),{getButtonProps:V.useCallback((e={})=>{let{onClick:r,onMouseDown:i,onKeyUp:o,onKeyDown:s,onPointerDown:c,...f}=e;return u({onClick(e){if(n){e.preventDefault();return}r?.(e)},onMouseDown(e){n||i?.(e)},onKeyDown(e){if(n||(t(e),s?.(e),e.baseUIHandlerPrevented))return;let i=e.target===e.currentTarget,o=e.currentTarget,c=Re(o),u=!a&&ze(o),d=i&&(a?c:!u),f=e.key===`Enter`,p=e.key===` `,m=o.getAttribute(`role`),h=m?.startsWith(`menuitem`)||m===`option`||m===`gridcell`;if(i&&l&&p){if(e.defaultPrevented&&h)return;e.preventDefault(),u||a&&c?(o.click(),e.preventBaseUIHandler()):d&&(r?.(e),e.preventBaseUIHandler());return}d&&(!a&&(p||f)&&e.preventDefault(),!a&&f&&r?.(e))},onKeyUp(e){if(!n){if(t(e),o?.(e),e.target===e.currentTarget&&a&&l&&Re(e.currentTarget)&&e.key===` `){e.preventDefault();return}e.baseUIHandlerPrevented||e.target===e.currentTarget&&!a&&!l&&e.key===` `&&r?.(e)}},onPointerDown(e){if(n){e.preventDefault();return}c?.(e)}},a?{type:`button`}:{role:`button`},d,f)},[n,d,l,a]),buttonRef:q(e=>{s.current=e,f()})}}function Re(e){return K(e)&&e.tagName===`BUTTON`}function ze(e){return!!(e?.tagName===`A`&&e?.href)}function Be(){return typeof navigator>`u`?{userAgent:``,platform:``,maxTouchPoints:0}:{userAgent:navigator.userAgent,platform:navigator.platform??``,maxTouchPoints:navigator.maxTouchPoints??0}}var{userAgent:Ve,platform:He,maxTouchPoints:Ue}=Be(),We=Ve.toLowerCase(),Ge=He.toLowerCase(),Ke=/^i(os$|p)/.test(Ge)||Ge===`macintel`&&Ue>1,qe=`android`,Je=Ge===qe||We.includes(qe),Ye=!Ke&&Ge.startsWith(`mac`);Ge.startsWith(`win`),!Je&&/^(linux|chrome os)/.test(Ge);var Xe=Ye||Ke,Ze=typeof CSS<`u`&&!!CSS.supports?.(`-webkit-backdrop-filter:none`);!Ze&&We.includes(`firefox`),!Ze&&We.includes(`chrom`);var Qe=Xe,$e=/jsdom|happydom/.test(We),et=0;function tt(e,t=`mui`){let[n,r]=V.useState(e),i=e||n;return V.useEffect(()=>{n??(et+=1,r(`${t}-${et}`))},[n,t]),i}var nt=ke.useId;function rt(e,t){if(nt!==void 0){let n=nt();return e??(t?`${t}-${n}`:n)}return tt(e,t)}function it(e){return rt(e,`base-ui`)}function at(e,t,n,i){let a=!1,o=!1,s=i??r;return{reason:e,event:t??new Event(`base-ui`),cancel(){a=!0},allowPropagation(){o=!0},get isCanceled(){return a},get isPropagationAllowed(){return o},trigger:n,...s}}var ot=[];function st(e){V.useEffect(e,ot)}var ct=null;globalThis.requestAnimationFrame;var lt=new class{callbacks=[];callbacksCount=0;nextId=1;startId=1;isScheduled=!1;tick=e=>{this.isScheduled=!1;let t=this.callbacks,n=this.callbacksCount;if(this.callbacks=[],this.callbacksCount=0,this.startId=this.nextId,n>0)for(let n=0;n<t.length;n+=1)t[n]?.(e)};request(e){let t=this.nextId;return this.nextId+=1,this.callbacks.push(e),this.callbacksCount+=1,this.isScheduled||=(requestAnimationFrame(this.tick),!0),t}cancel(e){let t=e-this.startId;t<0||t>=this.callbacks.length||(this.callbacks[t]=null,--this.callbacksCount)}},ut=class e{static create(){return new e}static request(e){return lt.request(e)}static cancel(e){return lt.cancel(e)}currentId=ct;request(e){this.cancel(),this.currentId=lt.request(()=>{this.currentId=ct,e()})}cancel=()=>{this.currentId!==ct&&(lt.cancel(this.currentId),this.currentId=ct)};disposeEffect=()=>this.cancel};function dt(){let e=a(ut.create).current;return st(e.disposeEffect),e}function ft(e,t=!1,n=!1){let[r,i]=V.useState(e&&t?`idle`:void 0),[a,o]=V.useState(e);return e&&!a&&(o(!0),i(`starting`)),!e&&a&&r!==`ending`&&!n&&i(`ending`),!e&&!a&&r===`ending`&&i(void 0),J(()=>{if(!e&&a&&r!==`ending`&&n){let e=ut.request(()=>{i(`ending`)});return()=>{ut.cancel(e)}}},[e,a,r,n]),J(()=>{if(!e||t)return;let n=ut.request(()=>{i(void 0)});return()=>{ut.cancel(n)}},[t,e]),J(()=>{if(!e||!t)return;e&&a&&r!==`idle`&&i(`starting`);let n=ut.request(()=>{i(`idle`)});return()=>{ut.cancel(n)}},[t,e,a,r]),{mounted:a,setMounted:o,transitionStatus:r}}function Y(e){return e==null?e:`current`in e?e.current:e}function pt(e,t=!1,n=!0){let r=dt();return q((i,a=null)=>{r.cancel();let o=Y(e);if(o==null)return;let s=o,c=()=>{z.flushSync(i)};if(typeof s.getAnimations!=`function`||globalThis.BASE_UI_ANIMATIONS_DISABLED){i();return}function l(){Promise.all(s.getAnimations().map(e=>e.finished)).then(()=>{a?.aborted||c()}).catch(()=>{if(n){a?.aborted||c();return}let e=s.getAnimations();!a?.aborted&&e.length>0&&e.some(e=>e.pending||e.playState!==`finished`)&&l()})}if(t){let e=g.startingStyle;if(!s.hasAttribute(e)){r.request(l);return}let t=new MutationObserver(()=>{s.hasAttribute(e)||(t.disconnect(),l())});t.observe(s,{attributes:!0,attributeFilter:[e]}),a?.addEventListener(`abort`,()=>t.disconnect(),{once:!0});return}r.request(l)})}function mt(e){let{enabled:t=!0,open:n,ref:r,onComplete:i}=e,a=q(i),o=pt(r,n,!1);V.useEffect(()=>{if(!t)return;let e=new AbortController;return o(a,e.signal),()=>{e.abort()}},[t,n,a,o])}var ht=0,gt=class e{static create(){return new e}currentId=ht;start(e,t){this.clear(),this.currentId=setTimeout(()=>{this.currentId=ht,t()},e)}isStarted(){return this.currentId!==ht}clear=()=>{this.currentId!==ht&&(clearTimeout(this.currentId),this.currentId=ht)};disposeEffect=()=>this.clear};function _t(){let e=a(gt.create).current;return st(e.disposeEffect),e}function vt(e){e.preventDefault(),e.stopPropagation()}function yt(e){return`nativeEvent`in e}function bt(e){return e.pointerType===``&&e.isTrusted?!0:Je&&e.pointerType?e.type===`click`&&e.buttons===1:e.detail===0&&!e.pointerType}function xt(e){return $e?!1:!Je&&e.width===0&&e.height===0||Je&&e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType===`mouse`||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0&&e.pointerType===`touch`}function St(e,t){let n=[`mouse`,`pen`];return t||n.push(``,void 0),n.includes(e)}function Ct(e){let t=e.type;return t===`click`||t===`mousedown`||t===`keydown`||t===`keyup`}var wt=`data-base-ui-focusable`,Tt=`input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])`,Et=`ArrowLeft`,Dt=`ArrowRight`,Ot=`ArrowUp`,kt=`ArrowDown`;function X(e){let t=e.activeElement;for(;t?.shadowRoot?.activeElement!=null;)t=t.shadowRoot.activeElement;return t}function Z(e,t){if(!e||!t)return!1;let n=t.getRootNode?.();if(e.contains(t))return!0;if(n&&de(n)){let n=t;for(;n;){if(e===n)return!0;n=n.parentNode||n.host}}return!1}function At(e){return`composedPath`in e?e.composedPath()[0]:e.target}function jt(e,t){if(!G(e))return!1;let n=e;if(t.hasElement(n))return!n.hasAttribute(`data-trigger-disabled`);for(let[,e]of t.entries())if(Z(e,n))return!e.hasAttribute(`data-trigger-disabled`);return!1}function Mt(e,t){if(t==null)return!1;if(`composedPath`in e)return e.composedPath().includes(t);let n=e;return n.target!=null&&t.contains(n.target)}function Nt(e){return e.matches(`html,body`)}function Pt(e){return K(e)&&e.matches(`input:not([type='hidden']):not([disabled]),[contenteditable]:not([contenteditable='false']),textarea:not([disabled])`)}function Ft(e){return e?.closest(`button,a[href],[role="button"],select,[tabindex]:not([tabindex="-1"]),${Tt}`)!=null}function It(e){return e?e.getAttribute(`role`)===`combobox`&&Pt(e):!1}function Lt(e){if(!e||$e)return!0;try{return e.matches(`:focus-visible`)}catch{return!0}}function Rt(e){return e?e.hasAttribute(`data-base-ui-focusable`)?e:e.querySelector(`[data-base-ui-focusable]`)||e:null}function Q(e,t,n,r){return e.addEventListener(t,n,r),()=>{e.removeEventListener(t,n,r)}}function zt(...e){return()=>{for(let t=0;t<e.length;t+=1){let n=e[t];n&&n()}}}function Bt(e){let t=a(Vt,e).current;return t.next=e,J(t.effect),t}function Vt(e){let t={current:e,next:e,effect:()=>{t.current=t.next}};return t}function $(e){return e?.ownerDocument||document}var Ht={clipPath:`inset(50%)`,overflow:`hidden`,whiteSpace:`nowrap`,border:0,padding:0,width:1,height:1,margin:-1},Ut={...Ht,position:`fixed`,top:0,left:0},Wt={...Ht,position:`absolute`},Gt=V.forwardRef(function(e,t){let[n,r]=V.useState();J(()=>{Qe&&Ze&&r(`button`)},[]);let i={tabIndex:0,role:n};return(0,B.jsx)(`span`,{...e,ref:t,style:Ut,"aria-hidden":!n||void 0,...i,"data-base-ui-focus-guard":``})});function Kt(e,t){return t<0||t>=e.length}function qt(e,t){return Yt(e.current,{disabledIndices:t})}function Jt(e,t){return Yt(e.current,{decrement:!0,startingIndex:e.current.length,disabledIndices:t})}function Yt(e,{startingIndex:t=-1,decrement:n=!1,disabledIndices:r,amount:i=1}={}){let a=t;do a+=n?-i:i;while(a>=0&&a<=e.length-1&&Xt(e,a,r));return a}function Xt(e,t,n){if(typeof n==`function`?n(t):n?.includes(t)??!1)return!0;let r=e[t];return r?!Qt(r)||!n&&(r.hasAttribute(`disabled`)||r.getAttribute(`aria-disabled`)===`true`):!1}function Zt(e){return e.visibility===`hidden`||e.visibility===`collapse`}function Qt(e,t=e?Ce(e):null){return!e||!e.isConnected||!t||Zt(t)?!1:typeof e.checkVisibility==`function`?e.checkVisibility():t.display!==`none`&&t.display!==`contents`}var $t=`a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable="false"]),audio[controls],video[controls]`;function en(e){let t=e.assignedSlot;if(t)return t;if(e.parentElement)return e.parentElement;let n=e.getRootNode();return de(n)?n.host:null}function tn(e){for(let t of Array.from(e.children))if(U(t)===`summary`)return t;return null}function nn(e,t){let n=tn(t);return!!n&&(e===n||Z(n,e))}function rn(e){let t=e?U(e):``;return e!=null&&e.matches($t)&&(t!==`summary`||e.parentElement!=null&&U(e.parentElement)===`details`&&tn(e.parentElement)===e)&&(t!==`details`||tn(e)==null)&&(t!==`input`||e.type!==`hidden`)}function an(e){if(!rn(e)||!e.isConnected||e.matches(`:disabled`))return!1;for(let t=e;t;t=en(t)){let n=t!==e,r=U(t)===`slot`;if(t.hasAttribute(`inert`)||n&&U(t)===`details`&&!t.open&&!nn(e,t)||t.hasAttribute(`hidden`)||!r&&!on(t,n))return!1}return!0}function on(e,t){let n=Ce(e);return t?n.display!==`none`:Qt(e,n)}function sn(e){let t=e.tabIndex;if(t<0){let t=U(e);if(t===`details`||t===`audio`||t===`video`||K(e)&&e.isContentEditable)return 0}return t}function cn(e){if(U(e)!==`input`)return null;let t=e;return t.type===`radio`&&t.name!==``?t:null}function ln(e,t){let n=cn(e);if(!n)return!0;let r=t.find(e=>{let t=cn(e);return t?.name===n.name&&t.form===n.form&&t.checked});return r?r===n:t.find(e=>{let t=cn(e);return t?.name===n.name&&t.form===n.form})===n}function un(e){if(K(e)&&U(e)===`slot`){let t=e.assignedElements({flatten:!0});if(t.length>0)return t}return K(e)&&e.shadowRoot?Array.from(e.shadowRoot.children):Array.from(e.children)}function dn(e,t){un(e).forEach(e=>{rn(e)&&t.push(e),dn(e,t)})}function fn(e,t,n){un(e).forEach(e=>{K(e)&&e.matches(t)&&n.push(e),fn(e,t,n)})}function pn(e){return an(e)&&sn(e)>=0}function mn(e){let t=[];return dn(e,t),t.filter(an)}function hn(e){let t=mn(e);return t.filter(e=>sn(e)>=0&&ln(e,t))}function gn(e,t){let n=hn(e),r=n.length;if(r===0)return;let i=X($(e)),a=n.indexOf(i);return n[a===-1?t===1?0:r-1:a+t]}function _n(e){return gn($(e).body,1)||e}function vn(e){return gn($(e).body,-1)||e}function yn(e,t){if(!e)return null;let n=hn($(e).body),r=n.length;if(r===0)return null;let i=n.indexOf(e);return i===-1?null:n[(i+t+r)%r]}function bn(e){return yn(e,1)}function xn(e){return yn(e,-1)}function Sn(e,t){let n=t||e.currentTarget,r=e.relatedTarget;return!r||!Z(n,r)}function Cn(e){hn(e).forEach(e=>{e.dataset.tabindex=e.getAttribute(`tabindex`)||``,e.setAttribute(`tabindex`,`-1`)})}function wn(e){let t=[];fn(e,`[data-tabindex]`,t),t.forEach(e=>{let t=e.dataset.tabindex;delete e.dataset.tabindex,t?e.setAttribute(`tabindex`,t):e.removeAttribute(`tabindex`)})}function Tn(e,t,n=!0){return e.filter(e=>e.parentId===t).flatMap(t=>[...!n||t.context?.open?[t]:[],...Tn(e,t.id,n)])}function En(e,t){let n=[],r=e.find(e=>e.id===t)?.parentId;for(;r;){let t=e.find(e=>e.id===r);r=t?.parentId,t&&(n=n.concat(t))}return n}function Dn(e){return`data-base-ui-${e}`}var On=0;function kn(e,t={}){let{preventScroll:n=!1,sync:r=!1,shouldFocus:i}=t;cancelAnimationFrame(On);function a(){i&&!i()||e?.focus({preventScroll:n})}if(r)return a(),c;let o=requestAnimationFrame(a);return On=o,()=>{On===o&&(cancelAnimationFrame(o),On=0)}}var An={inert:new WeakMap,"aria-hidden":new WeakMap},jn=`data-base-ui-inert`,Mn={inert:new WeakSet,"aria-hidden":new WeakSet},Nn=new WeakMap,Pn=0;function Fn(e){return Mn[e]}function In(e){return e?de(e)?e.host:In(e.parentNode):null}var Ln=(e,t)=>t.map(t=>{if(e.contains(t))return t;let n=In(t);return e.contains(n)?n:null}).filter(e=>e!=null),Rn=e=>{let t=new Set;return e.forEach(e=>{let n=e;for(;n&&!t.has(n);)t.add(n),n=n.parentNode}),t},zn=(e,t,n)=>{let r=[],i=e=>{!e||n.has(e)||Array.from(e.children).forEach(e=>{U(e)!==`script`&&(t.has(e)?i(e):r.push(e))})};return i(e),r};function Bn(e,t,n,r,{mark:i=!0}){let a=null;r?a=`inert`:n&&(a=`aria-hidden`);let o=null,s=null,c=Ln(t,e),l=i?zn(t,Rn(c),new Set(c)):[],u=[],d=[];if(a){let e=An[a],n=Fn(a);s=n,o=e;let r=Ln(t,Array.from(t.querySelectorAll(`[aria-live]`))),i=c.concat(r);zn(t,Rn(i),new Set(i)).forEach(t=>{let r=t.getAttribute(a),i=r!==null&&r!==`false`,o=(e.get(t)||0)+1;e.set(t,o),u.push(t),o===1&&i&&n.add(t),i||t.setAttribute(a,a===`inert`?``:`true`)})}return i&&l.forEach(e=>{let t=(Nn.get(e)||0)+1;Nn.set(e,t),d.push(e),t===1&&e.setAttribute(jn,``)}),Pn+=1,()=>{o&&u.forEach(e=>{let t=(o.get(e)||0)-1;o.set(e,t),t||(!s?.has(e)&&a&&e.removeAttribute(a),s?.delete(e))}),i&&d.forEach(e=>{let t=(Nn.get(e)||0)-1;Nn.set(e,t),t||e.removeAttribute(jn)}),--Pn,Pn||(An.inert=new WeakMap,An[`aria-hidden`]=new WeakMap,Mn.inert=new WeakSet,Mn[`aria-hidden`]=new WeakSet,Nn=new WeakMap)}}function Vn(e,t={}){let{ariaHidden:n=!1,inert:r=!1,mark:i=!0}=t,a=$(e[0]).body;return Bn(e,a,n,r,{mark:i})}var Hn={style:{transition:`none`}},Un=`data-base-ui-click-trigger`,Wn={fallbackAxisSide:`none`},Gn={fallbackAxisSide:`end`},Kn={clipPath:`inset(50%)`,position:`fixed`,top:0,left:0},qn=V.createContext(null),Jn=()=>V.useContext(qn),Yn=Dn(`portal`);function Xn(e={}){let{ref:t,container:n,componentProps:i=r,elementProps:a}=e,o=rt(),c=Jn()?.portalNode,[l,u]=V.useState(null),[d,f]=V.useState(null),p=q(e=>{e!==null&&f(e)}),m=V.useRef(null);J(()=>{if(n===null){m.current&&(m.current=null,f(null),u(null));return}if(o==null)return;let e=(n&&(ue(n)?n:n.current))??c??document.body;if(e==null){m.current&&(m.current=null,f(null),u(null));return}m.current!==e&&(m.current=e,f(null),u(e))},[n,c,o]);let h=s(`div`,i,{ref:[t,p],props:[{id:o,[Yn]:``},a]});return{portalNode:d,portalSubtree:l&&h?z.createPortal(h,l):null}}var Zn=V.forwardRef(function(e,t){let{render:n,className:r,style:i,children:a,container:o,renderGuards:s,...c}=e,{portalNode:l,portalSubtree:u}=Xn({container:o,ref:t,componentProps:e,elementProps:c}),d=V.useRef(null),f=V.useRef(null),p=V.useRef(null),m=V.useRef(null),[h,g]=V.useState(null),_=V.useRef(!1),v=h?.modal,y=h?.open,b=typeof s==`boolean`?s:!!h&&!h.modal&&h.open&&!!l;V.useEffect(()=>{if(!l||v)return;function e(e){l&&e.relatedTarget&&Sn(e)&&(e.type===`focusin`?_.current&&=(wn(l),!1):(Cn(l),_.current=!0))}return zt(Q(l,`focusin`,e,!0),Q(l,`focusout`,e,!0))},[l,v]),J(()=>{!l||y!==!0||!_.current||(wn(l),_.current=!1)},[y,l]);let x=V.useMemo(()=>({beforeOutsideRef:d,afterOutsideRef:f,beforeInsideRef:p,afterInsideRef:m,portalNode:l,setFocusManagerState:g}),[l]);return(0,B.jsxs)(V.Fragment,{children:[u,(0,B.jsxs)(qn.Provider,{value:x,children:[b&&l&&(0,B.jsx)(Gt,{"data-type":`outside`,ref:d,onFocus:e=>{Sn(e,l)?p.current?.focus():vn(h?h.domReference:null)?.focus()}}),b&&l&&(0,B.jsx)(`span`,{"aria-owns":l.id,style:Kn}),l&&z.createPortal(a,l),b&&l&&(0,B.jsx)(Gt,{"data-type":`outside`,ref:f,onFocus:e=>{Sn(e,l)?m.current?.focus():(_n(h?h.domReference:null)?.focus(),h?.closeOnFocusOut&&h?.onOpenChange(!1,at(`focus-out`,e.nativeEvent)))}})]})]})});function Qn(){let e=new Map;return{emit(t,n){e.get(t)?.forEach(e=>e(n))},on(t,n){e.has(t)||e.set(t,new Set),e.get(t).add(n)},off(t,n){e.get(t)?.delete(n)}}}var $n=class{nodesRef={current:[]};events=Qn();addNode(e){this.nodesRef.current.push(e)}removeNode(e){let t=this.nodesRef.current.findIndex(t=>t===e);t!==-1&&this.nodesRef.current.splice(t,1)}},er=V.createContext(null),tr=V.createContext(null),nr=()=>V.useContext(er)?.id||null,rr=e=>{let t=V.useContext(tr);return e??t};function ir(e){let t=rt(),n=rr(e),r=nr();return J(()=>{if(!t)return;let e={id:t,parentId:r};return n?.addNode(e),()=>{n?.removeNode(e)}},[n,t,r]),t}function ar(e){let{children:t,id:n}=e,r=nr();return(0,B.jsx)(er.Provider,{value:V.useMemo(()=>({id:n,parentId:r}),[n,r]),children:t})}function or(e){let{children:t,externalTree:n}=e,r=a(()=>n??new $n).current;return(0,B.jsx)(tr.Provider,{value:r,children:t})}function sr(e,t){let n=W(At(e));return e instanceof n.KeyboardEvent?`keyboard`:e instanceof n.FocusEvent?t||`keyboard`:`pointerType`in e?e.pointerType||`keyboard`:`touches`in e?`touch`:e instanceof n.MouseEvent?t||(e.detail===0?`keyboard`:`mouse`):``}var cr=20,lr=[];function ur(){lr=lr.filter(e=>e.deref()?.isConnected)}function dr(e){ur(),e&&U(e)!==`body`&&(lr.push(new WeakRef(e)),lr.length>cr&&(lr=lr.slice(-20)))}function fr(){return ur(),lr[lr.length-1]?.deref()}function pr(e){return e?pn(e)?e:hn(e)[0]||e:null}function mr(e){if(e.hasAttribute(`tabindex`)&&!e.hasAttribute(`data-tabindex`)||!e.getAttribute(`role`)?.includes(`dialog`))return;let t=mn(e).filter(e=>{let t=e.getAttribute(`data-tabindex`)||``;return pn(e)||e.hasAttribute(`data-tabindex`)&&!t.startsWith(`-`)}),n=e.getAttribute(`tabindex`);t.length===0?n!==`0`&&(e.setAttribute(`tabindex`,`0`),e.setAttribute(`data-tabindex`,`0`)):(n!==`-1`||e.hasAttribute(`data-tabindex`)&&e.getAttribute(`data-tabindex`)!==`-1`)&&(e.setAttribute(`tabindex`,`-1`),e.setAttribute(`data-tabindex`,`-1`))}function hr(e){let{context:t,children:n,disabled:r=!1,initialFocus:a=!0,returnFocus:o=!0,restoreFocus:s=!1,modal:c=!0,closeOnFocusOut:l=!0,openInteractionType:u=``,nextFocusableElement:d,previousFocusableElement:f,beforeContentFocusGuardRef:p,externalTree:m,getInsideElements:h}=e,g=`rootStore`in t?t.rootStore:t,_=g.useState(`open`),v=g.useState(`domReferenceElement`),y=g.useState(`floatingElement`),{events:b,dataRef:x}=g.context,S=q(()=>x.current.floatingContext?.nodeId),C=a===!1,w=It(v)&&C,T=Bt(a),E=Bt(o),D=Bt(u),O=Bt(_),k=rr(m),A=Jn(),j=V.useRef(!1),M=V.useRef(!1),N=V.useRef(!1),ee=V.useRef(null),P=V.useRef(``),F=V.useRef(``),ne=V.useRef(null),I=V.useRef(null),re=i(ne,p,A?.beforeInsideRef),ie=i(I,A?.afterInsideRef),ae=_t(),oe=_t(),L=dt(),se=A!=null,R=Rt(y),z=q((e=R)=>e?hn(e):[]),H=q(()=>h?.().filter(e=>e!=null)??[]);V.useEffect(()=>{if(r||!c)return;function e(e){e.key===`Tab`&&Z(R,X($(R)))&&z().length===0&&!w&&vt(e)}return Q($(R),`keydown`,e)},[r,R,c,w,z]),V.useEffect(()=>{if(r||!_)return;let e=$(R);function t(){N.current=!1}function n(e){let t=At(e),n=H(),r=Z(y,t)||Z(v,t)||Z(A?.portalNode,t)||n.some(e=>e===t||Z(e,t));N.current=!r,F.current=e.pointerType||`keyboard`,t?.closest(`[data-base-ui-click-trigger]`)&&(M.current=!0,oe.start(0,()=>{M.current=!1}))}function i(){F.current=`keyboard`}return zt(Q(e,`pointerdown`,n,!0),Q(e,`pointerup`,t,!0),Q(e,`pointercancel`,t,!0),Q(e,`keydown`,i,!0),t)},[r,y,v,R,_,A,oe,H]),V.useEffect(()=>{if(r||!l)return;let e=$(R);function t(){M.current=!0,oe.start(0,()=>{M.current=!1})}function n(e){let t=At(e);pn(t)&&(ee.current=t)}function i(t){let n=t.relatedTarget,r=t.currentTarget,i=At(t);c&&n==null&&i!=null&&Z(y,i)&&dr(i),queueMicrotask(()=>{let a=S(),o=g.context.triggerElements,l=H(),u=n?.hasAttribute(Dn(`focus-guard`))&&[ne.current,I.current,A?.beforeInsideRef.current,A?.afterInsideRef.current,A?.beforeOutsideRef.current,A?.afterOutsideRef.current,Y(f),Y(d)].includes(n),p=!(Z(v,n)||Z(y,n)||Z(n,y)||Z(A?.portalNode,n)||l.some(e=>e===n||Z(e,n))||n!=null&&o.hasElement(n)||o.hasMatchingElement(e=>Z(e,n))||u||k&&(Tn(k.nodesRef.current,a).find(e=>Z(e.context?.elements.floating,n)||Z(e.context?.elements.domReference,n))||En(k.nodesRef.current,a).find(e=>[e.context?.elements.floating,Rt(e.context?.elements.floating)].includes(n)||e.context?.elements.domReference===n)));if(r===v&&R&&mr(R),s&&r!==v&&!Qt(i)&&X(e)===e.body){if(K(R)&&(R.focus(),s===`popup`)){L.request(()=>{R.focus()});return}let e=z(),t=ee.current,n=(t&&e.includes(t)?t:null)||e[e.length-1]||R;K(n)&&n.focus()}if(x.current.insideReactTree){x.current.insideReactTree=!1;return}(w||!c)&&n&&p&&!M.current&&(w||n!==fr())&&(j.current=!0,g.setOpen(!1,at(te,t)))})}function a(){N.current||(x.current.insideReactTree=!0,ae.start(0,()=>{x.current.insideReactTree=!1}))}let o=K(v)?v:null;if(!(!y&&!o))return zt(o&&Q(o,`focusout`,i),o&&Q(o,`pointerdown`,t),y&&Q(y,`focusin`,n),y&&Q(y,`focusout`,i),y&&A&&Q(y,`focusout`,a,!0))},[r,v,y,R,c,k,A,g,l,s,z,w,S,x,ae,oe,L,d,f,H]),V.useEffect(()=>{if(r||!y||!_)return;let e=Array.from(A?.portalNode?.querySelectorAll(`[${Dn(`portal`)}]`)||[]),t=(k?En(k.nodesRef.current,S()):[]).find(e=>It(e.context?.elements.domReference||null))?.context?.elements.domReference,n=Vn([y,...e,ne.current,I.current,A?.beforeOutsideRef.current,A?.afterOutsideRef.current,...H(),t,Y(f),Y(d),w?v:null].filter(e=>e!=null),{ariaHidden:c||w,mark:!1}),i=Vn([y,...e].filter(e=>e!=null));return()=>{i(),n()}},[_,r,v,y,c,A,w,k,S,d,f,H]),J(()=>{if(!_||r||!K(R))return;let e=$(R),t=X(e);queueMicrotask(()=>{let n=T.current,r=typeof n==`function`?n(D.current||``):n;if(r===void 0||r===!1||Z(R,t))return;let i=null,a=()=>(i??=z(R),i[0]||R),o;o=r===!0||r===null?a():Y(r),o||=a();let s=Z(R,X(e));kn(o,{preventScroll:o===R,shouldFocus(){if(!O.current)return!1;if(s)return!0;let t=X(e);return!(t!==o&&Z(R,t))}})})},[r,_,R,z,T,D,O]),J(()=>{if(r||!R)return;let e=$(R),t=X(e),n=D.current==null;dr(t);function i(e){if(e.open||(P.current=sr(e.nativeEvent,F.current)),e.reason===`trigger-hover`&&e.nativeEvent.type===`mouseleave`&&(j.current=!0),e.reason===`outside-press`)if(e.nested)j.current=!1;else if(bt(e.nativeEvent)||xt(e.nativeEvent))j.current=!1;else{let e=!1;$(R).createElement(`div`).focus({get preventScroll(){return e=!0,!1}}),e?j.current=!1:j.current=!0}}b.on(`openchange`,i);function a(){let e=E.current,r=typeof e==`function`?e(P.current):e;if(r===void 0||r===!1)return null;r===null&&(r=!0);let i=v?.isConnected?v:null,a=t?.isConnected&&U(t)!==`body`?t:null,o=n?a||i:i||a;return o||=fr()||null,typeof r==`boolean`?o:Y(r)||o||null}return()=>{b.off(`openchange`,i);let t=X(e),n=H(),r=Z(y,t)||n.some(e=>e===t||Z(e,t))||k&&Tn(k.nodesRef.current,S(),!1).some(e=>Z(e.context?.elements.floating,t)),o=E.current,s=a();queueMicrotask(()=>{let n=pr(s),i=typeof o!=`boolean`;o&&!j.current&&K(n)&&(!(!i&&n!==t&&t!==e.body)||r)&&n.focus({preventScroll:!0}),j.current=!1})}},[r,y,R,E,D,b,k,v,S,H]),J(()=>{if(!Ze||_||!y)return;let e=X($(y));!K(e)||!Pt(e)||Z(y,e)&&e.blur()},[_,y]),J(()=>{if(!(r||!A))return A.setFocusManagerState({modal:c,closeOnFocusOut:l,open:_,onOpenChange:g.setOpen,domReference:v}),()=>{A.setFocusManagerState(null)}},[r,A,c,_,g,l,v]),J(()=>{if(!(r||!R))return mr(R),()=>{queueMicrotask(ur)}},[r,R]);let ce=!r&&(!c||!w)&&(se||c);return(0,B.jsxs)(V.Fragment,{children:[ce&&(0,B.jsx)(Gt,{"data-type":`inside`,ref:re,onFocus:e=>{if(c){let e=z();kn(e[e.length-1])}else A?.portalNode&&(j.current=!1,Sn(e,A.portalNode)?_n(v)?.focus():Y(f??A.beforeOutsideRef)?.focus())}}),n,ce&&(0,B.jsx)(Gt,{"data-type":`inside`,ref:ie,onFocus:e=>{c?kn(z()[0]):A?.portalNode&&(l&&(j.current=!0),Sn(e,A.portalNode)?vn(v)?.focus():Y(d??A.afterOutsideRef)?.focus())}})]})}function gr(){return!1}function _r(e){return{escapeKey:typeof e==`boolean`?e:e?.escapeKey??!1,outsidePress:typeof e==`boolean`?e:e?.outsidePress??!0}}function vr(e,t={}){let{enabled:n=!0,escapeKey:r=!0,outsidePress:i=!0,outsidePressEvent:a=`sloppy`,referencePress:o=gr,bubbles:s,externalTree:c}=t,l=`rootStore`in e?e.rootStore:e,u=l.useState(`open`),d=l.useState(`floatingElement`),{dataRef:f}=l.context,p=rr(c),m=q(typeof i==`function`?i:()=>!1),h=typeof i==`function`?m:i,g=h!==!1,_=q(()=>a),{escapeKey:v,outsidePress:y}=_r(s),b=V.useRef(!1),x=V.useRef(!1),S=V.useRef(!1),C=V.useRef(!1),w=V.useRef(``),T=V.useRef(null),E=_t(),D=_t(),O=q(()=>{D.clear(),f.current.insideReactTree=!1}),k=q(e=>{let t=f.current.floatingContext?.nodeId;return(p?Tn(p.nodesRef.current,t):[]).some(t=>t.context?.open&&!t.context.dataRef.current[e])}),A=q(e=>Mt(e,l.select(`floatingElement`))||Mt(e,l.select(`domReferenceElement`))),M=q(e=>{o()&&l.setOpen(!1,at(j,e.nativeEvent))}),N=q(e=>{if(!u||!n||!r||e.key!==`Escape`||C.current||!v&&k(`__escapeKeyBubbles`))return;let t=at(ne,yt(e)?e.nativeEvent:e);l.setOpen(!1,t),t.isCanceled||e.preventDefault(),!v&&!t.isPropagationAllowed&&e.stopPropagation()}),P=q(()=>{f.current.insideReactTree=!0,D.start(0,O)}),F=q(e=>{if(!u||!n||e.button!==0)return;let t=At(e.nativeEvent);Z(l.select(`floatingElement`),t)&&(b.current||(b.current=!0,x.current=!1))}),te=q(e=>{!u||!n||(e.defaultPrevented||e.nativeEvent.defaultPrevented)&&b.current&&(x.current=!0)});V.useEffect(()=>{if(!u||!n)return;f.current.__escapeKeyBubbles=v,f.current.__outsidePressBubbles=y;let e=new gt,t=new gt;function i(){e.clear(),C.current=!0}function a(){e.start(Ze?5:0,()=>{C.current=!1})}function o(){S.current=!0,t.start(0,()=>{S.current=!1})}function s(){b.current=!1,x.current=!1}function c(){let e=w.current,t=e===`pen`||!e?`mouse`:e,n=_(),r=typeof n==`function`?n():n;return typeof r==`string`?r:r[t]}function m(e){let t=c();return t===`intentional`&&e.type!==`click`||t===`sloppy`&&e.type===`click`}function D(e){let t=f.current.floatingContext?.nodeId,n=p&&Tn(p.nodesRef.current,t).some(t=>Mt(e,t.context?.elements.floating));return A(e)||n}function j(e){if(m(e)){e.type!==`click`&&!A(e)&&(t.clear(),S.current=!1),O();return}if(f.current.insideReactTree){O();return}let n=At(e),r=`[${Dn(`inert`)}]`,i=G(n)?n.getRootNode():null,a=Array.from((de(i)?i:$(l.select(`floatingElement`))).querySelectorAll(r)),o=l.context.triggerElements;if(n&&(o.hasElement(n)||o.hasMatchingElement(e=>Z(e,n))))return;let s=G(n)?n:null;for(;s&&!Se(s);){let e=Te(s);if(Se(e)||!G(e))break;s=e}if(!(a.length&&G(n)&&!Nt(n)&&!Z(n,l.select(`floatingElement`))&&a.every(e=>!Z(s,e)))){if(K(n)&&!(`touches`in e)){let t=Se(n),r=Ce(n),i=/auto|scroll/,a=t||i.test(r.overflowX),o=t||i.test(r.overflowY),s=a&&n.clientWidth>0&&n.scrollWidth>n.clientWidth,c=o&&n.clientHeight>0&&n.scrollHeight>n.clientHeight,l=r.direction===`rtl`,u=c&&(l?e.offsetX<=n.offsetWidth-n.clientWidth:e.offsetX>n.clientWidth),d=s&&e.offsetY>n.clientHeight;if(u||d)return}if(!D(e)){if(c()===`intentional`&&S.current){t.clear(),S.current=!1;return}typeof h==`function`&&!h(e)||k(`__outsidePressBubbles`)||(l.setOpen(!1,at(ee,e)),O())}}}function M(e){c()!==`sloppy`||e.pointerType===`touch`||!l.select(`open`)||!n||A(e)||j(e)}function P(e){if(c()!==`sloppy`||!l.select(`open`)||!n||A(e))return;let t=e.touches[0];t&&(T.current={startTime:Date.now(),startX:t.clientX,startY:t.clientY,dismissOnTouchEnd:!1,dismissOnMouseDown:!0},E.start(1e3,()=>{T.current&&(T.current.dismissOnTouchEnd=!1,T.current.dismissOnMouseDown=!1)}))}function F(e,t){let n=At(e);if(!n)return;let r=Q(n,e.type,()=>{t(e),r()})}function te(e){w.current=`touch`,F(e,P)}function ne(e){E.clear(),e.type===`pointerdown`&&(w.current=e.pointerType),!(e.type===`mousedown`&&T.current&&!T.current.dismissOnMouseDown)&&F(e,e=>{e.type===`pointerdown`?M(e):j(e)})}function I(e){if(!b.current)return;let n=x.current;if(s(),c()===`intentional`){if(e.type===`pointercancel`){n&&o();return}if(!D(e)){if(n){o();return}typeof h==`function`&&!h(e)||(t.clear(),S.current=!0,O())}}}function re(e){if(c()!==`sloppy`||!T.current||A(e))return;let t=e.touches[0];if(!t)return;let n=Math.abs(t.clientX-T.current.startX),r=Math.abs(t.clientY-T.current.startY),i=Math.sqrt(n*n+r*r);i>5&&(T.current.dismissOnTouchEnd=!0),i>10&&(j(e),E.clear(),T.current=null)}function ie(e){F(e,re)}function ae(e){c()!==`sloppy`||!T.current||A(e)||(T.current.dismissOnTouchEnd&&j(e),E.clear(),T.current=null)}function oe(e){F(e,ae)}let L=$(d),se=zt(r&&zt(Q(L,`keydown`,N),Q(L,`compositionstart`,i),Q(L,`compositionend`,a)),g&&zt(Q(L,`click`,ne,!0),Q(L,`pointerdown`,ne,!0),Q(L,`pointerup`,I,!0),Q(L,`pointercancel`,I,!0),Q(L,`mousedown`,ne,!0),Q(L,`mouseup`,I,!0),Q(L,`touchstart`,te,!0),Q(L,`touchmove`,ie,!0),Q(L,`touchend`,oe,!0)));return()=>{se(),e.clear(),t.clear(),s(),S.current=!1}},[f,d,r,g,h,u,n,v,y,N,O,_,k,A,p,l,E]),V.useEffect(O,[h,O]);let I=V.useMemo(()=>({onKeyDown:N,onPointerDown:M,onClick:M}),[N,M]),re=V.useMemo(()=>({onKeyDown:N,onPointerDown:te,onMouseDown:te,onClickCapture:P,onMouseDownCapture(e){P(),F(e)},onPointerDownCapture(e){P(),F(e)},onMouseUpCapture:P,onTouchEndCapture:P,onTouchMoveCapture:P}),[N,P,F,te]);return V.useMemo(()=>n?{reference:I,floating:re,trigger:I}:{},[n,I,re])}function yr(e){let t=V.useRef(!0);t.current&&(t.current=!1,e())}var br=(e,t,n,r,i,a,...o)=>{if(o.length>0)throw Error(d(1));let s;if(e&&t&&n&&r&&i&&a)s=(o,s,c,l)=>a(e(o,s,c,l),t(o,s,c,l),n(o,s,c,l),r(o,s,c,l),i(o,s,c,l),s,c,l);else if(e&&t&&n&&r&&i)s=(a,o,s,c)=>i(e(a,o,s,c),t(a,o,s,c),n(a,o,s,c),r(a,o,s,c),o,s,c);else if(e&&t&&n&&r)s=(i,a,o,s)=>r(e(i,a,o,s),t(i,a,o,s),n(i,a,o,s),a,o,s);else if(e&&t&&n)s=(r,i,a,o)=>n(e(r,i,a,o),t(r,i,a,o),i,a,o);else if(e&&t)s=(n,r,i,a)=>t(e(n,r,i,a),r,i,a);else if(e)s=e;else throw Error(`Missing arguments`);return s},xr=p((t=>{var n=e();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useState,o=n.useEffect,s=n.useLayoutEffect,c=n.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;t.useSyncExternalStore=n.useSyncExternalStore===void 0?f:n.useSyncExternalStore})),Sr=p(((e,t)=>{t.exports=xr()})),Cr=p((t=>{var n=e(),r=Sr();function i(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var a=typeof Object.is==`function`?Object.is:i,o=r.useSyncExternalStore,s=n.useRef,c=n.useEffect,l=n.useMemo,u=n.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var d=s(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=l(function(){function e(e){if(!o){if(o=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,a(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var o=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=o(e,d[0],d[1]);return c(function(){f.hasValue=!0,f.value=p},[p]),u(p),p}})),wr=p(((e,t)=>{t.exports=Cr()})),Tr=Sr(),Er=wr(),Dr=[],Or=void 0;function kr(){return Or}function Ar(e){Dr.push(e)}function jr(e){let t=(t,n)=>{let r=a(Nr).current,i;try{Or=r;for(let e of Dr)e.before(r);i=e(t,n);for(let e of Dr)e.after(r);r.didInitialize=!0}finally{Or=void 0}return i};return t.displayName=e.displayName||e.name,t}function Mr(e){return V.forwardRef(jr(e))}function Nr(){return{didInitialize:!1}}var Pr=f(19)?Lr:Rr;function Fr(e,t,n,r,i){return Pr(e,t,n,r,i)}function Ir(e,t,n,r,i){let a=V.useCallback(()=>t(e.getSnapshot(),n,r,i),[e,t,n,r,i]);return(0,Tr.useSyncExternalStore)(e.subscribe,a,a)}Ar({before(e){e.syncIndex=0,e.didInitialize||(e.syncTick=1,e.syncHooks=[],e.didChangeStore=!0,e.getSnapshot=()=>{let t=!1;for(let n=0;n<e.syncHooks.length;n+=1){let r=e.syncHooks[n],i=r.selector(r.store.state,r.a1,r.a2,r.a3);Object.is(r.value,i)||(t=!0,r.value=i)}return t&&(e.syncTick+=1),e.syncTick})},after(e){e.syncHooks.length>0&&(e.didChangeStore&&(e.didChangeStore=!1,e.subscribe=t=>{let n=new Set;for(let t of e.syncHooks)n.add(t.store);let r=[];for(let e of n)r.push(e.subscribe(t));return()=>{for(let e of r)e()}}),(0,Tr.useSyncExternalStore)(e.subscribe,e.getSnapshot,e.getSnapshot))}});function Lr(e,t,n,r,i){let a=kr();if(!a)return Ir(e,t,n,r,i);let o=a.syncIndex;a.syncIndex+=1;let s;return a.didInitialize?(s=a.syncHooks[o],(s.store!==e||s.selector!==t||!Object.is(s.a1,n)||!Object.is(s.a2,r)||!Object.is(s.a3,i))&&(s.store!==e&&(a.didChangeStore=!0),s.store=e,s.selector=t,s.a1=n,s.a2=r,s.a3=i,s.value=t(e.getSnapshot(),n,r,i))):(s={store:e,selector:t,a1:n,a2:r,a3:i,value:t(e.getSnapshot(),n,r,i)},a.syncHooks.push(s)),s.value}function Rr(e,t,n,r,i){return(0,Er.useSyncExternalStoreWithSelector)(e.subscribe,e.getSnapshot,e.getSnapshot,e=>t(e,n,r,i))}var zr=class{constructor(e){this.state=e,this.listeners=new Set,this.updateTick=0}subscribe=e=>(this.listeners.add(e),()=>{this.listeners.delete(e)});getSnapshot=()=>this.state;setState(e){if(this.state===e)return;this.state=e,this.updateTick+=1;let t=this.updateTick;for(let n of this.listeners){if(t!==this.updateTick)return;n(e)}}update(e){for(let t in e)if(!Object.is(this.state[t],e[t])){this.setState({...this.state,...e});return}}set(e,t){Object.is(this.state[e],t)||this.setState({...this.state,[e]:t})}notifyAll(){let e={...this.state};this.setState(e)}use(e,t,n,r){return Fr(this,e,t,n,r)}},Br=class extends zr{constructor(e,t={},n){super(e),this.context=t,this.selectors=n}useSyncedValue(e,t){V.useDebugValue(e);let n=this;J(()=>{n.state[e]!==t&&n.set(e,t)},[n,e,t])}useSyncedValueWithCleanup(e,t){let n=this;J(()=>(n.state[e]!==t&&n.set(e,t),()=>{n.set(e,void 0)}),[n,e,t])}useSyncedValues(e){let t=this;J(()=>{t.update(e)},[t,...Object.values(e)])}useControlledProp(e,t){V.useDebugValue(e);let n=this,r=t!==void 0;J(()=>{r&&!Object.is(n.state[e],t)&&n.setState({...n.state,[e]:t})},[n,e,t,r])}select(e,t,n,r){let i=this.selectors[e];return i(this.state,t,n,r)}useState(e,t,n,r){return V.useDebugValue(e),Fr(this,this.selectors[e],t,n,r)}useContextCallback(e,t){V.useDebugValue(e);let n=q(t??c);this.context[e]=n}useStateSetter(e){let t=V.useRef(void 0);return t.current===void 0&&(t.current=t=>{this.set(e,t)}),t.current}observe(e,t){let n;n=typeof e==`function`?e:this.selectors[e];let r=n(this.state);return t(r,r,this),this.subscribe(e=>{let i=n(e);if(!Object.is(r,i)){let e=r;r=i,t(i,e,this)}})}},Vr={open:br(e=>e.open),transitionStatus:br(e=>e.transitionStatus),domReferenceElement:br(e=>e.domReferenceElement),referenceElement:br(e=>e.positionReference??e.referenceElement),floatingElement:br(e=>e.floatingElement),floatingId:br(e=>e.floatingId)},Hr=class extends Br{constructor(e){let{syncOnly:t,nested:n,onOpenChange:r,triggerElements:i,...a}=e;super({...a,positionReference:a.referenceElement,domReferenceElement:a.referenceElement},{onOpenChange:r,dataRef:{current:{}},events:Qn(),nested:n,triggerElements:i},Vr),this.syncOnly=t}syncOpenEvent=(e,t)=>{(!e||!this.state.open||t!=null&&Ct(t))&&(this.context.dataRef.current.openEvent=e?t:void 0)};dispatchOpenChange=(e,t)=>{this.syncOpenEvent(e,t.event);let n={open:e,reason:t.reason,nativeEvent:t.event,nested:this.context.nested,triggerElement:t.trigger};this.context.events.emit(`openchange`,n)};setOpen=(e,t)=>{if(this.syncOnly){this.context.onOpenChange?.(e,t);return}this.dispatchOpenChange(e,t),this.context.onOpenChange?.(e,t)}};function Ur(e){let{popupStore:t,treatPopupAsFloatingElement:n=!1,floatingRootContext:r,floatingId:i,nested:a,onOpenChange:o}=e,s=t.useState(`open`),c=t.useState(`activeTriggerElement`),l=t.useState(n?`popupElement`:`positionerElement`),u=t.context.triggerElements,d=o,f=V.useRef(null);r===void 0&&f.current===null&&(f.current=new Hr({open:s,transitionStatus:void 0,referenceElement:c,floatingElement:l,triggerElements:u,onOpenChange:d,floatingId:i,syncOnly:!0,nested:a}));let p=r??f.current;return t.useSyncedValue(`floatingId`,i),J(()=>{let e={open:s,floatingId:i,referenceElement:c,floatingElement:l};G(c)&&(e.domReferenceElement=c),p.state.positionReference===p.state.referenceElement&&(e.positionReference=c),p.update(e)},[s,i,c,l,p]),p.context.onOpenChange=d,p.context.nested=a,p}var Wr={tabIndex:-1,[wt]:``};function Gr(e){return t=>t!==`touch`||e.current}function Kr(e,t,n=!1){let r=rt(),i=nr()!=null,a=V.useRef(null);e===void 0&&a.current===null&&(a.current=t(r,i));let o=e??a.current;return Ur({popupStore:o,treatPopupAsFloatingElement:n,floatingRootContext:o.state.floatingRootContext,floatingId:r,nested:i,onOpenChange:o.setOpen}),{store:o,internalStore:a.current}}function qr(e,t){let n=V.useRef(null),r=V.useRef(null);return V.useCallback(i=>{if(e===void 0)return;let a=!1;if(n.current!==null){let e=n.current,i=r.current,o=t.context.triggerElements.getById(e);i&&o===i&&(t.context.triggerElements.delete(e),a=!0),n.current=null,r.current=null}if(i!==null&&(n.current=e,r.current=i,t.context.triggerElements.add(e,i),a=!0),a){let e=t.context.triggerElements.size;t.select(`open`)&&t.state.triggerCount!==e&&t.set(`triggerCount`,e)}},[t,e])}function Jr(e,t,n,r=!1){t?e.preventUnmountingOnClose=!1:r&&(e.preventUnmountingOnClose=!0);let i=n?.id??null;(i||t)&&(e.activeTriggerId=i,e.activeTriggerElement=n??null)}function Yr(e){let t=!1;return e.preventUnmountOnClose=()=>{t=!0},()=>t}function Xr(e,t,n,r){yr(()=>{t===void 0&&e.state.open===!1&&n&&(e.state={...e.state,open:!0,activeTriggerId:r,preventUnmountingOnClose:!1})})}function Zr(e,t,n,r){let i=n.useState(`isMountedByTrigger`,e),a=qr(e,n),o=q(t=>{if(a(t),!t)return;let i=n.select(`open`),o=n.select(`activeTriggerId`);if(o===e){n.update({activeTriggerElement:t,...i?r:null});return}o==null&&i&&n.update({activeTriggerId:e,activeTriggerElement:t,...r})});return J(()=>{i&&n.update({activeTriggerElement:t.current,...r})},[i,n,t,...Object.values(r)]),{registerTrigger:o,isMountedByThisTrigger:i}}function Qr(e,t={}){let{closeOnActiveTriggerUnmount:n=!1}=t,r=e.useState(`open`);J(()=>{if(!r){e.state.triggerCount!==0&&e.set(`triggerCount`,0);return}let t=e.context.triggerElements.size,i={};e.state.triggerCount!==t&&(i.triggerCount=t);let a=e.select(`activeTriggerId`),o=null;if(a){let t=e.context.triggerElements.getById(a);t?t!==e.state.activeTriggerElement&&(i.activeTriggerElement=t):o=a}if(!o&&!a&&t===1){let t=e.context.triggerElements.entries().next();if(!t.done){let[e,n]=t.value;i.activeTriggerId=e,i.activeTriggerElement=n}}(i.triggerCount!==void 0||i.activeTriggerId!==void 0||i.activeTriggerElement!==void 0)&&e.update(i),o&&n&&queueMicrotask(()=>{if(e.select(`open`)&&e.select(`activeTriggerId`)===o&&!e.context.triggerElements.getById(o)){let t=at(A);e.setOpen(!1,t),t.isCanceled||e.update({activeTriggerId:null,activeTriggerElement:null})}})},[r,e,e.useState(`triggerCount`),n])}function $r(e,t,n){let{mounted:r,setMounted:i,transitionStatus:a}=ft(e),o=t.useState(`preventUnmountingOnClose`),s=!e&&o;t.useSyncedValues({mounted:r,transitionStatus:a,preventUnmountingOnClose:s});let c=q(()=>{i(!1),t.update({activeTriggerId:null,activeTriggerElement:null,mounted:!1,preventUnmountingOnClose:!1}),n?.(),t.context.onOpenChangeComplete?.(!1)});return mt({enabled:r&&!e&&!s,open:e,ref:t.context.popupRef,onComplete(){e||c()}}),{forceUnmount:c,transitionStatus:a}}function ei(e,t){e.useSyncedValues(t),J(()=>()=>{e.update({activeTriggerProps:r,inactiveTriggerProps:r,popupProps:r})},[e])}function ti(e,t){J(()=>{!t&&e.state.openMethod!==null&&e.set(`openMethod`,null)},[t,e]),J(()=>()=>{e.state.openMethod!==null&&e.set(`openMethod`,null)},[e])}var ni=class{constructor(){this.elementsSet=new Set,this.idMap=new Map}add(e,t){let n=this.idMap.get(e);n!==t&&(n!==void 0&&this.elementsSet.delete(n),this.elementsSet.add(t),this.idMap.set(e,t))}delete(e){let t=this.idMap.get(e);t&&(this.elementsSet.delete(t),this.idMap.delete(e))}hasElement(e){return this.elementsSet.has(e)}hasMatchingElement(e){for(let t of this.elementsSet)if(e(t))return!0;return!1}getById(e){return this.idMap.get(e)}entries(){return this.idMap.entries()}elements(){return this.elementsSet.values()}get size(){return this.idMap.size}},ri=`ArrowUp`,ii=`ArrowDown`,ai=`ArrowLeft`,oi=`ArrowRight`,si=`Home`,ci=new Set([ai,oi]),li=new Set([ai,oi,si,`End`]),ui=new Set([ri,ii]),di=new Set([ri,ii,si,`End`]),fi=new Set([...ci,...ui]),pi=new Set([...fi,si,`End`]),mi=new Set([`Shift`,`Control`,`Alt`,`Meta`]);function hi(e){return K(e)&&e.tagName===`INPUT`}function gi(e){return!!(hi(e)&&e.selectionStart!=null||K(e)&&e.tagName===`TEXTAREA`)}function _i(e,t,n,r){if(!e||!t||!t.scrollTo)return;let i=e.scrollLeft,a=e.scrollTop,o=e.clientWidth<e.scrollWidth,s=e.clientHeight<e.scrollHeight;if(o&&r!==`vertical`){let r=vi(e,t,`left`),a=yi(e),o=yi(t);n===`ltr`&&(r+t.offsetWidth+o.scrollMarginRight>e.scrollLeft+e.clientWidth-a.scrollPaddingRight?i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight:r-o.scrollMarginLeft<e.scrollLeft+a.scrollPaddingLeft&&(i=r-o.scrollMarginLeft-a.scrollPaddingLeft)),n===`rtl`&&(r-o.scrollMarginRight<e.scrollLeft+a.scrollPaddingLeft?i=r-o.scrollMarginLeft-a.scrollPaddingLeft:r+t.offsetWidth+o.scrollMarginRight>e.scrollLeft+e.clientWidth-a.scrollPaddingRight&&(i=r+t.offsetWidth+o.scrollMarginRight-e.clientWidth+a.scrollPaddingRight))}if(s&&r!==`horizontal`){let n=vi(e,t,`top`),r=yi(e),i=yi(t);n-i.scrollMarginTop<e.scrollTop+r.scrollPaddingTop?a=n-i.scrollMarginTop-r.scrollPaddingTop:n+t.offsetHeight+i.scrollMarginBottom>e.scrollTop+e.clientHeight-r.scrollPaddingBottom&&(a=n+t.offsetHeight+i.scrollMarginBottom-e.clientHeight+r.scrollPaddingBottom)}e.scrollTo({left:i,top:a,behavior:`auto`})}function vi(e,t,n){let r=n===`left`?`offsetLeft`:`offsetTop`,i=0;for(;t.offsetParent&&(i+=t[r],t.offsetParent!==e);)t=t.offsetParent;return i}function yi(e){let t=getComputedStyle(e);return{scrollMarginTop:parseFloat(t.scrollMarginTop)||0,scrollMarginRight:parseFloat(t.scrollMarginRight)||0,scrollMarginBottom:parseFloat(t.scrollMarginBottom)||0,scrollMarginLeft:parseFloat(t.scrollMarginLeft)||0,scrollPaddingTop:parseFloat(t.scrollPaddingTop)||0,scrollPaddingRight:parseFloat(t.scrollPaddingRight)||0,scrollPaddingBottom:parseFloat(t.scrollPaddingBottom)||0,scrollPaddingLeft:parseFloat(t.scrollPaddingLeft)||0}}function bi(e){return f(19)?e:e?`true`:void 0}var xi=V.createContext(void 0);function Si(){return V.useContext(xi)?.direction??`ltr`}var Ci=V.forwardRef(function(e,t){let{cutout:n,...r}=e,i;if(n){let e=n.getBoundingClientRect();i=`polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${e.left}px ${e.top}px,${e.left}px ${e.bottom}px,${e.right}px ${e.bottom}px,${e.right}px ${e.top}px,${e.left}px ${e.top}px)`}return(0,B.jsx)(`div`,{ref:t,role:`presentation`,"data-base-ui-inert":``,...r,style:{position:`fixed`,inset:0,userSelect:`none`,WebkitUserSelect:`none`,clipPath:i}})}),wi={},Ti={},Ei=``;function Di(e){if(typeof document>`u`)return!1;let t=$(e);return W(t).innerWidth-t.documentElement.clientWidth>0}function Oi(e){if(!(typeof CSS<`u`&&CSS.supports&&CSS.supports(`scrollbar-gutter`,`stable`))||typeof document>`u`)return!1;let t=$(e),n=t.documentElement,r=t.body,i=fe(n)?n:r,a=i.style.overflowY,o=n.style.scrollbarGutter;n.style.scrollbarGutter=`stable`,i.style.overflowY=`scroll`;let s=i.offsetWidth;i.style.overflowY=`hidden`;let c=i.offsetWidth;return i.style.overflowY=a,n.style.scrollbarGutter=o,s===c}function ki(e){let t=$(e),n=t.documentElement,r=t.body,i=fe(n)?n:r,a={overflowY:i.style.overflowY,overflowX:i.style.overflowX};return Object.assign(i.style,{overflowY:`hidden`,overflowX:`hidden`}),()=>{Object.assign(i.style,a)}}function Ai(e){let t=$(e),n=t.documentElement,r=t.body,i=W(n),a=0,o=0,s=!1,c=ut.create();if(Ze&&(i.visualViewport?.scale??1)!==1)return()=>{};function l(){let t=i.getComputedStyle(n),c=i.getComputedStyle(r),l=(t.scrollbarGutter||``).includes(`both-edges`)?`stable both-edges`:`stable`;a=n.scrollTop,o=n.scrollLeft,wi={scrollbarGutter:n.style.scrollbarGutter,overflowY:n.style.overflowY,overflowX:n.style.overflowX},Ei=n.style.scrollBehavior,Ti={position:r.style.position,height:r.style.height,width:r.style.width,boxSizing:r.style.boxSizing,overflowY:r.style.overflowY,overflowX:r.style.overflowX,scrollBehavior:r.style.scrollBehavior};let u=n.scrollHeight>n.clientHeight,d=n.scrollWidth>n.clientWidth,f=t.overflowY===`scroll`||c.overflowY===`scroll`,p=t.overflowX===`scroll`||c.overflowX===`scroll`,m=Math.max(0,i.innerWidth-r.clientWidth),h=Math.max(0,i.innerHeight-r.clientHeight),g=parseFloat(c.marginTop)+parseFloat(c.marginBottom),_=parseFloat(c.marginLeft)+parseFloat(c.marginRight),v=fe(n)?n:r;if(s=Oi(e),s){n.style.scrollbarGutter=l,v.style.overflowY=`hidden`,v.style.overflowX=`hidden`;return}Object.assign(n.style,{scrollbarGutter:l,overflowY:`hidden`,overflowX:`hidden`}),(u||f)&&(n.style.overflowY=`scroll`),(d||p)&&(n.style.overflowX=`scroll`),Object.assign(r.style,{position:`relative`,height:g||h?`calc(100dvh - ${g+h}px)`:`100dvh`,width:_||m?`calc(100vw - ${_+m}px)`:`100vw`,boxSizing:`border-box`,overflow:`hidden`,scrollBehavior:`unset`}),r.scrollTop=a,r.scrollLeft=o,n.setAttribute(`data-base-ui-scroll-locked`,``),n.style.scrollBehavior=`unset`}function u(){Object.assign(n.style,wi),Object.assign(r.style,Ti),s||(n.scrollTop=a,n.scrollLeft=o,n.removeAttribute(`data-base-ui-scroll-locked`),n.style.scrollBehavior=Ei)}function d(){u(),c.request(l)}l();let f=Q(i,`resize`,d);return()=>{c.cancel(),u(),typeof i.removeEventListener==`function`&&f()}}var ji=new class{lockCount=0;restore=null;timeoutLock=gt.create();timeoutUnlock=gt.create();acquire(e){return this.lockCount+=1,this.lockCount===1&&this.restore===null&&this.timeoutLock.start(0,()=>this.lock(e)),this.release}release=()=>{--this.lockCount,this.lockCount===0&&this.restore&&this.timeoutUnlock.start(0,this.unlock)};unlock=()=>{this.lockCount===0&&this.restore&&(this.restore?.(),this.restore=null)};lock(e){if(this.lockCount===0||this.restore!==null)return;let t=$(e).documentElement,n=W(t).getComputedStyle(t).overflowY;if(n===`hidden`||n===`clip`){this.restore=c;return}let r=Ke||!Di(e);this.restore=r?ki(e):Ai(e)}};function Mi(e=!0,t=null){J(()=>{if(e)return ji.acquire(t)},[e,t])}var Ni=function(e){return e.disabled=`data-disabled`,e.valid=`data-valid`,e.invalid=`data-invalid`,e.touched=`data-touched`,e.dirty=`data-dirty`,e.filled=`data-filled`,e.focused=`data-focused`,e}({}),Pi={badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:null,valueMissing:!1},Fi={valid:null,touched:!1,dirty:!1,filled:!1,focused:!1},Ii={disabled:!1,...Fi},Li={valid(e){return e===null?null:e?{[Ni.valid]:``}:{[Ni.invalid]:``}}},Ri={invalid:void 0,name:void 0,validityData:{state:Pi,errors:[],error:``,value:``,initialValue:null},setValidityData:c,disabled:void 0,touched:Fi.touched,setTouched:c,dirty:Fi.dirty,setDirty:c,filled:Fi.filled,setFilled:c,focused:Fi.focused,setFocused:c,validate:()=>null,validationMode:`onSubmit`,validationDebounceTime:0,shouldValidateOnChange:()=>!1,state:Ii,markedDirtyRef:{current:!1},registerFieldControl:c,validation:{getValidationProps:(e,t=r)=>t,inputRef:{current:null},registerInput:c,commit:async()=>{},change:c}},zi=V.createContext(Ri);function Bi(e=!0){let t=V.useContext(zi);if(t.setValidityData===c&&!e)throw Error(d(28));return t}var Vi=V.createContext({formRef:{current:{fields:new Map}},errors:{},clearErrors:c,validationMode:`onSubmit`,submitAttemptedRef:{current:!1}});function Hi(){return V.useContext(Vi)}var Ui=V.createContext({controlId:void 0,registerControlId:c,labelId:void 0,setLabelId:c,messageIds:[],setMessageIds:c,getDescriptionProps:e=>e});function Wi(){return V.useContext(Ui)}function Gi(e={}){let{id:t,implicit:n=!1,controlRef:r}=e,{controlId:i,registerControlId:o}=Wi(),s=it(t),l=n?i:void 0,u=a(()=>Symbol(`labelable-control`)),d=V.useRef(!1),f=V.useRef(t!=null),p=q(()=>{!d.current||o===c||(d.current=!1,o(u.current,void 0))});return J(()=>{if(o===c)return;let e;if(n){let n=r?.current;e=G(n)&&n.closest(`label`)!=null?t??null:l??s}else if(t!=null)f.current=!0,e=t;else if(f.current)e=s;else{p();return}if(e===void 0){p();return}d.current=!0,o(u.current,e)},[t,r,l,o,n,s,u,p]),V.useEffect(()=>p,[p]),i??s}function Ki(e,t,n,r,i=!0,a){let{registerFieldControl:o}=Bi(),s=V.useRef(null);s.current||=Symbol(),J(()=>{let c=s.current;if(!(!c||!i))return o(c,{controlRef:e,getValue:r,id:t,name:a,value:n}),()=>{o(c,void 0)}},[e,i,r,t,a,o,n])}var qi=V.forwardRef(function(e,t){let{render:n,className:r,id:i,name:a,value:o,disabled:c=!1,onValueChange:l,defaultValue:u,autoFocus:d=!1,style:f,...p}=e,{state:m,name:h,disabled:g,setTouched:_,setDirty:v,validityData:y,setFocused:b,setFilled:x,validationMode:S,validation:C}=Bi(),{clearErrors:w}=Hi(),T=g||c,E=h??a,D={...m,disabled:T},{labelId:O}=Wi(),k=Gi({id:i});J(()=>{let e=o!=null;C.inputRef.current?.value||e&&o!==``?x(!0):e&&o===``&&x(!1)},[C.inputRef,x,o]);let j=V.useRef(null);J(()=>{d&&j.current===X($(j.current))&&b(!0)},[d,b]);let[M]=H({controlled:o,default:u,name:`FieldControl`,state:`value`}),N=o!==void 0,ee=N?M:void 0,P=q(()=>C.inputRef.current?.value);return Ki(C.inputRef,k,ee,P,!T,a),s(`input`,e,{ref:[t,j],state:D,props:[{id:k,disabled:T,name:E,ref:C.inputRef,"aria-labelledby":O,autoFocus:d,...N?{value:ee}:{defaultValue:u},onChange(e){let t=e.currentTarget.value;l?.(t,at(A,e.nativeEvent)),v(t!==y.initialValue),x(t!==``),e.nativeEvent.defaultPrevented||(w(E),C.change(t))},onFocus(){b(!0)},onBlur(e){_(!0),b(!1),S===`onBlur`&&C.commit(e.currentTarget.value)},onKeyDown(e){e.currentTarget.tagName===`INPUT`&&e.key===`Enter`&&(_(!0),C.commit(e.currentTarget.value))}},p,e=>C.getValidationProps(T,e)],stateAttributesMapping:Li})}),Ji=V.forwardRef(function(e,t){return(0,B.jsx)(qi,{ref:t,...e})});function Yi({className:e,size:t=`default`,unstyled:n=!1,nativeInput:r=!1,...i}){let a=l(`h-8.5 w-full min-w-0 rounded-[inherit] px-[calc(--spacing(3)-1px)] leading-8.5 outline-none placeholder:text-muted-foreground/72 sm:h-7.5 sm:leading-7.5 [transition:background-color_5000000s_ease-in-out_0s]`,t===`sm`&&`h-7.5 px-[calc(--spacing(2.5)-1px)] leading-7.5 sm:h-6.5 sm:leading-6.5`,t===`lg`&&`h-9.5 leading-9.5 sm:h-8.5 sm:leading-8.5`,i.type===`search`&&`[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-webkit-search-results-button]:appearance-none [&::-webkit-search-results-decoration]:appearance-none`,i.type===`file`&&`text-muted-foreground file:me-3 file:bg-transparent file:font-medium file:text-foreground file:text-sm`),o;if(r){let{style:e,onValueChange:n,...r}=i;o=(0,B.jsx)(`input`,{className:a,"data-slot":`input`,size:typeof t==`number`?t:void 0,style:typeof e==`function`?void 0:e,...r})}else o=(0,B.jsx)(Ji,{className:a,"data-slot":`input`,size:typeof t==`number`?t:void 0,...i});return(0,B.jsx)(`span`,{className:l(!n&&`relative inline-flex w-full rounded-lg border border-input bg-background not-dark:bg-clip-padding text-base text-foreground shadow-xs/5 ring-ring/24 transition-shadow before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] not-has-disabled:not-has-focus-visible:not-has-aria-invalid:before:shadow-[0_1px_--theme(--color-black/4%)] has-focus-visible:has-aria-invalid:border-destructive/64 has-focus-visible:has-aria-invalid:ring-destructive/16 has-aria-invalid:border-destructive/36 has-focus-visible:border-ring has-autofill:bg-foreground/4 has-disabled:opacity-64 has-[:disabled,:focus-visible,[aria-invalid]]:shadow-none has-focus-visible:ring-[3px] sm:text-sm dark:bg-input/32 dark:has-autofill:bg-foreground/8 dark:has-aria-invalid:ring-destructive/24 dark:not-has-disabled:not-has-focus-visible:not-has-aria-invalid:before:shadow-[0_-1px_--theme(--color-white/6%)]`,e)||void 0,"data-size":t,"data-slot":`input-control`,children:o})}function Xi(e,t=-(2**53-1),n=2**53-1){return Math.max(t,Math.min(e,n))}function Zi(e,t){return Math.max(0,e-t)}function Qi(e,t){if(t<=0)return 0;let n=Xi(e,0,t),r=n,i=t-n,a=r<=1,o=i<=1;return a&&o?r<=i?0:t:a?0:o?t:n}var $i=`base-ui-disable-scrollbar`,ea={className:$i,getElement(e){return(0,B.jsx)(`style`,{nonce:e,href:$i,precedence:`base-ui:low`,children:`.${$i}{scrollbar-width:none}.${$i}::-webkit-scrollbar{display:none}`})}},ta=V.createContext(void 0),na={disableStyleElements:!1};function ra(){return V.useContext(ta)??na}export{yr as $,D as $n,pt as $t,gi as A,me as An,Bt as At,ei as B,P as Bn,Z as Bt,pi as C,W as Cn,Qt as Ct,mi as D,Se as Dn,Ut as Dt,li as E,K as En,Gt as Et,Gr as F,ae as Fn,jt as Ft,Hr as G,ie as Gn,Ot as Gt,Kr as H,oe as Hn,kt as Ht,Jr as I,ne as In,It,Fr as J,j as Jn,xt as Jt,Br as K,N as Kn,St as Kt,Qr as L,te as Ln,Pt as Lt,ni as M,H as Mn,Q as Mt,Wr as N,re as Nn,Rt as Nt,ui as O,fe as On,Wt as Ot,Yr as P,F as Pn,Ft as Pt,br as Q,O as Qn,mt as Qt,Xr as R,se as Rn,Lt as Rt,ri as S,Te as Sn,qt as St,ci as T,G as Tn,Xt as Tt,Zr as U,A as Un,Et as Ut,ti as V,I as Vn,At as Vt,Ur as W,ee as Wn,Dt as Wt,Mr as X,b as Xn,gt as Xt,jr as Y,R as Yn,vt as Yt,Sr as Z,k as Zn,_t as Zt,bi as _,le as _n,bn as _t,Xi as a,rt as an,nr as at,ai as b,we as bn,Yt as bt,Ki as c,Ke as cn,Zn as ct,Hi as d,Pe as dn,Wn as dt,ft as en,g as er,vr as et,Bi as f,Fe as fn,Gn as ft,Si as g,be as gn,_n as gt,Ci as h,Ce as hn,Tn as ht,Qi as i,it as in,ir as it,_i as j,xe as jn,zt as jt,di as k,pe as kn,$ as kt,Gi as l,Ye as ln,Un as lt,Mi as m,q as mn,Dn as mt,ea as n,st as nn,h as nr,ar as nt,Yi as o,$e as on,rr as ot,Li as p,J as pn,kn as pt,zr as q,M as qn,bt as qt,Zi as r,at as rn,or as rt,qi as s,Ze as sn,$n as st,ra as t,dt as tn,y as tr,hr as tt,Wi as u,Le as un,Hn as ut,ii as v,Oe as vn,xn as vt,si as w,ye as wn,Kt as wt,oi as x,De as xn,Jt as xt,fi as y,U as yn,Sn as yt,$r as z,L as zn,X as zt};
@@ -1 +0,0 @@
1
- import{_ as e,b as t,g as n,m as r,t as i}from"./button-BDDZnIHx.js";import{t as a}from"./code-xml-jFAa3-TT.js";import{t as o}from"./git-branch-Cfj9D8yW.js";import{Bt as s,Gt as c,Kt as l,M as u,St as d,U as f,Wt as p,Zt as m,a as h,ct as g,en as _,i as v,jt as y,n as b,qt as x,r as S,rt as C,wt as w,xt as T,zt as E}from"./index-C_rwnBzF.js";import{t as D}from"./card-BKXzd_5L.js";import{a as O,i as k,n as A,r as j,t as M}from"./empty-BdlgbifD.js";var N=t(e(),1),P=n(),F=[{id:`antigravity`,name:`Google Antigravity`,shortName:`Antigravity`,cliCommand:`agy`,icon:(0,P.jsx)(T,{className:`size-4`}),getOptions:({aiDetected:e,launchTargets:t})=>[{id:`antigravity-cli`,label:`CLI in Terminal`,shortLabel:`CLI`,type:`cli`,command:`agy`,isAvailable:e.antigravity??!0,unavailableReason:`CLI "agy" not found on PATH`,icon:(0,P.jsx)(E,{size:12})},{id:`antigravity-ide`,label:`Antigravity IDE Workspace`,shortLabel:`IDE`,type:`editor`,targetId:`antigravity`,isAvailable:t.find(e=>e.id===`antigravity`)?.available??!1,unavailableReason:`Antigravity IDE not installed`,icon:(0,P.jsx)(a,{size:12})}]},{id:`claude`,name:`Claude Code`,shortName:`Claude`,cliCommand:`claude`,icon:(0,P.jsx)(`span`,{className:`grid size-5 place-items-center rounded bg-[#D97757] text-white shadow-2xs`,children:(0,P.jsx)(d,{className:`size-3`})}),getOptions:({aiDetected:e,launchTargets:t})=>[{id:`claude-cli`,label:`CLI in Terminal`,shortLabel:`CLI`,type:`cli`,command:`claude`,isAvailable:e.claude??!1,unavailableReason:`CLI "claude" not found on PATH`,icon:(0,P.jsx)(E,{size:12})},{id:`claude-desktop`,label:`Claude Desktop App`,shortLabel:`App`,type:`app`,targetId:`claude-desktop`,isAvailable:t.find(e=>e.id===`claude-desktop`)?.available??!1,unavailableReason:`Claude Desktop not detected`,icon:(0,P.jsx)(x,{size:12})}]},{id:`codex`,name:`OpenAI Codex`,shortName:`Codex`,cliCommand:`codex`,icon:(0,P.jsx)(`span`,{className:`grid size-5 place-items-center rounded bg-foreground text-background shadow-2xs`,children:(0,P.jsx)(y,{className:`size-3`})}),getOptions:({aiDetected:e,launchTargets:t})=>[{id:`codex-cli`,label:`CLI in Terminal`,shortLabel:`CLI`,type:`cli`,command:`codex`,isAvailable:e.codex??!1,unavailableReason:`CLI "codex" not found on PATH`,icon:(0,P.jsx)(E,{size:12})},{id:`codex-desktop`,label:`Codex Desktop App`,shortLabel:`App`,type:`app`,targetId:`codex-desktop`,isAvailable:t.find(e=>e.id===`codex-desktop`)?.available??!1,unavailableReason:`Codex Desktop not detected`,icon:(0,P.jsx)(x,{size:12})}]},{id:`copilot`,name:`GitHub Copilot`,shortName:`Copilot`,cliCommand:`copilot`,icon:(0,P.jsx)(`span`,{className:`grid size-5 place-items-center rounded bg-gradient-to-tr from-purple-600 via-indigo-500 to-blue-600 text-white shadow-2xs`,children:(0,P.jsx)(w,{className:`size-3`})}),getOptions:({aiDetected:e,launchTargets:t})=>[{id:`copilot-cli`,label:`Copilot CLI in Terminal`,shortLabel:`CLI`,type:`cli`,command:`copilot`,isAvailable:e.copilot??!0,icon:(0,P.jsx)(E,{size:12})},{id:`copilot-vscode`,label:`VS Code with Copilot`,shortLabel:`VS Code`,type:`editor`,targetId:`vscode`,isAvailable:t.find(e=>e.id===`vscode`)?.available??!1,unavailableReason:`VS Code not detected`,icon:(0,P.jsx)(a,{size:12})}]}];function I({workspaces:e,workspaceStatuses:t,workspacesLoading:n=!1,onOpenWorkspace:a,onNewWorkspace:x,showToast:E}){let I=u(),L=C(),R=f(),[z,B]=(0,N.useState)(null),V=Object.values(t),H=V.reduce((e,t)=>e+(t.changedFiles||0),0),U=V.filter(e=>e.changedFiles>0).length,W=V.reduce((e,t)=>e+(t.runningServices||0),0),G=V.filter(e=>e.runningServices>0).length,K=e.filter(e=>(e.mode??`worktree`)===`worktree`).length,q=e.filter(e=>e.mode===`in-place`).length,J=(0,N.useMemo)(()=>{let t=new Map;return e.forEach(e=>{(e.repos||[]).forEach(e=>{let n=b(e),r=t.get(n);r?r.count+=1:t.set(n,{name:n,path:e,count:1})})}),Array.from(t.values())},[e]),Y=(0,N.useMemo)(()=>{let e={};return(I.data??[]).forEach(t=>{e[t.name]=t.detected}),e},[I.data]),X=(0,N.useMemo)(()=>L.data??[],[L.data]),Z=(0,N.useMemo)(()=>F.map(e=>{let t=e.getOptions({aiDetected:Y,launchTargets:X}),n=t.filter(e=>e.isAvailable),r=n[0]||t[0],i=n.length>0,a=`Not found`,o=`neutral`;return n.length>1?(a=`${n.map(e=>e.shortLabel).join(` & `)} Ready`,o=`success`):n.length===1&&(a=`${n[0].shortLabel} Ready`,o=`success`),{harness:e,allOptions:t,availableOptions:n,primaryOption:r,isAnyAvailable:i,statusLabel:a,statusTone:o}}),[Y,X]),Q=async(t,n)=>{if(z)return;let r=e[0];if(!r){E?.(`No active workspace available to launch harness in.`,`error`);return}let i=`${t.id}:${n.id}`;B(i);try{n.type===`cli`?(await R.mutateAsync({workspaceId:r.branchName,assistant:t.id,command:n.command}),E?.(`Launched ${t.name} (${n.label}) for ${r.branchName}`,`success`)):n.targetId&&(await g(`/api/workspace/${encodeURIComponent(r.branchName)}/launch`,{method:`POST`,body:JSON.stringify({targetId:n.targetId})}),E?.(`Opened ${r.branchName} in ${t.name} (${n.label})`,`success`))}catch(e){E?.(`Failed to launch ${t.name}: ${e instanceof Error?e.message:String(e)}`,`error`)}finally{B(null)}};return(0,P.jsxs)(`div`,{className:`mx-auto max-w-6xl animate-fade-in space-y-5 pb-10`,children:[(0,P.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between border-b border-border/70 pb-4`,children:[(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`h1`,{className:`text-lg sm:text-xl font-bold tracking-tight text-foreground`,children:`Environment Overview`}),(0,P.jsx)(v,{tone:`running`,dot:!0,children:`Live Telemetry`})]}),(0,P.jsx)(`p`,{className:`mt-1 text-xs text-muted-foreground`,children:`Multi-repo health, background services, and AI coding activity across your workspaces.`})]}),(0,P.jsx)(`div`,{className:`flex items-center gap-2 shrink-0`,children:(0,P.jsxs)(i,{size:`sm`,variant:`default`,onClick:x,children:[(0,P.jsx)(p,{size:14}),` Start work`]})})]}),(0,P.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-4`,children:[(0,P.jsxs)(D,{className:`p-4 surface-card flex flex-col justify-between`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground`,children:`Workspaces`}),(0,P.jsx)(`span`,{className:`grid size-7 place-items-center rounded bg-primary/10 text-primary`,children:(0,P.jsx)(l,{size:15})})]}),(0,P.jsxs)(`div`,{className:`mt-2`,children:[(0,P.jsx)(`div`,{className:`font-mono text-2xl font-bold text-foreground`,children:e.length}),(0,P.jsxs)(`div`,{className:`mt-1 flex items-center gap-1.5 font-mono text-[11px] text-muted-foreground`,children:[(0,P.jsxs)(`span`,{children:[K,` worktrees`]}),(0,P.jsx)(`span`,{children:`•`}),(0,P.jsxs)(`span`,{children:[q,` in-place`]})]})]})]}),(0,P.jsxs)(D,{className:`p-4 surface-card flex flex-col justify-between`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground`,children:`Git Activity`}),(0,P.jsx)(`span`,{className:r(`grid size-7 place-items-center rounded`,H>0?`bg-amber-500/15 text-amber-600 dark:text-amber-400`:`bg-emerald-500/15 text-emerald-600 dark:text-emerald-400`),children:(0,P.jsx)(o,{size:15})})]}),(0,P.jsxs)(`div`,{className:`mt-2`,children:[(0,P.jsxs)(`div`,{className:r(`font-mono text-2xl font-bold`,H>0?`text-amber-600 dark:text-amber-400`:`text-emerald-600 dark:text-emerald-400`),children:[H,` `,(0,P.jsx)(`span`,{className:`text-xs font-normal text-muted-foreground`,children:`files`})]}),(0,P.jsx)(`div`,{className:`mt-1 font-mono text-[11px] text-muted-foreground`,children:U>0?`${U} workspace${U===1?``:`s`} with changes`:`All workspaces clean`})]})]}),(0,P.jsxs)(D,{className:`p-4 surface-card flex flex-col justify-between`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground`,children:`Live Services`}),(0,P.jsx)(`span`,{className:r(`grid size-7 place-items-center rounded`,W>0?`bg-emerald-500/15 text-emerald-400`:`bg-muted/60 text-muted-foreground`),children:(0,P.jsx)(c,{size:15})})]}),(0,P.jsxs)(`div`,{className:`mt-2`,children:[(0,P.jsxs)(`div`,{className:r(`font-mono text-2xl font-bold`,W>0?`text-emerald-400`:`text-muted-foreground`),children:[W,` `,(0,P.jsx)(`span`,{className:`text-xs font-normal text-muted-foreground`,children:`active`})]}),(0,P.jsx)(`div`,{className:`mt-1 font-mono text-[11px] text-muted-foreground`,children:G>0?`In ${G} workspace${G===1?``:`s`}`:`No services running`})]})]}),(0,P.jsxs)(D,{className:`p-4 surface-card flex flex-col justify-between`,children:[(0,P.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,P.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wider text-muted-foreground`,children:`AI Harnesses`}),(0,P.jsx)(`span`,{className:`grid size-7 place-items-center rounded bg-primary/10 text-primary`,children:(0,P.jsx)(s,{size:15})})]}),(0,P.jsxs)(`div`,{className:`mt-2`,children:[(0,P.jsxs)(`div`,{className:`font-mono text-2xl font-bold text-foreground`,children:[Z.filter(e=>e.isAnyAvailable).length,` / `,Z.length]}),(0,P.jsxs)(`div`,{className:`mt-1 flex items-center gap-1.5 text-[11px] text-muted-foreground font-mono`,children:[(0,P.jsx)(`span`,{children:`Antigravity`}),(0,P.jsx)(`span`,{children:`•`}),(0,P.jsx)(`span`,{children:`Claude`}),(0,P.jsx)(`span`,{children:`•`}),(0,P.jsx)(`span`,{children:`Codex`})]})]})]})]}),(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`mb-2.5 flex items-center justify-between`,children:[(0,P.jsx)(`h2`,{className:`text-xs font-bold uppercase tracking-wider text-muted-foreground`,children:`AI Coding Assistant Hub`}),(0,P.jsx)(`span`,{className:`text-[11px] text-muted-foreground font-mono`,children:`Direct CLI & Desktop launcher with dynamic environment detection`})]}),(0,P.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-3`,children:Z.map(({harness:e,availableOptions:t,isAnyAvailable:n,statusTone:r})=>{let a=!!(z&&z.startsWith(`${e.id}:`));return(0,P.jsxs)(D,{className:`p-4 surface-card flex flex-col justify-between gap-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2.5 min-w-0`,children:[e.icon,(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`span`,{className:`text-sm font-bold text-foreground block`,children:e.name}),(0,P.jsxs)(`span`,{className:`font-mono text-[10.5px] text-muted-foreground`,children:[`CLI command: `,e.cliCommand]})]})]}),(0,P.jsx)(v,{tone:r,dot:n,children:n?`Ready`:`Not installed`})]}),(0,P.jsx)(`div`,{className:`flex flex-wrap items-center gap-2 pt-1 border-t border-border/50`,children:n?t.map(t=>{let n=z===`${e.id}:${t.id}`;return(0,P.jsxs)(i,{size:`xs`,variant:`outline`,disabled:a,onClick:()=>void Q(e,t),className:`gap-1.5 font-medium`,title:`Launch ${e.name} (${t.label}) in active workspace`,children:[n?(0,P.jsx)(h,{className:`size-3`}):t.icon,(0,P.jsx)(`span`,{children:t.label})]},t.id)}):(0,P.jsx)(i,{size:`xs`,variant:`outline`,disabled:!0,className:`opacity-50 text-muted-foreground cursor-not-allowed`,children:`Not Installed`})})]},e.id)})})]}),(0,P.jsxs)(`div`,{children:[(0,P.jsx)(`div`,{className:`mb-2.5 flex items-center justify-between`,children:(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`h2`,{className:`text-xs font-bold uppercase tracking-wider text-muted-foreground`,children:`Workspace Divergence & Health Matrix`}),(0,P.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.2 font-mono text-[10px] text-foreground`,children:e.length})]})}),n?(0,P.jsx)(D,{className:`p-8 surface-card flex items-center justify-center`,children:(0,P.jsx)(h,{className:`size-5 text-primary`})}):e.length===0?(0,P.jsx)(D,{className:`border-dashed surface-card`,children:(0,P.jsxs)(M,{children:[(0,P.jsxs)(j,{children:[(0,P.jsx)(k,{variant:`icon`,children:(0,P.jsx)(l,{})}),(0,P.jsx)(O,{children:`No active workspaces`}),(0,P.jsx)(A,{children:`Start your first multi-repo workspace to automatically branch worktrees and prepare AI contexts.`})]}),(0,P.jsxs)(i,{onClick:x,children:[(0,P.jsx)(p,{size:15}),` Start work`]})]})}):(0,P.jsxs)(D,{className:`divide-y divide-border/60 overflow-hidden surface-card`,children:[(0,P.jsxs)(`div`,{className:`hidden sm:grid grid-cols-12 gap-3 px-4 py-2 bg-muted/30 text-[10px] font-bold uppercase tracking-wider text-muted-foreground font-mono`,children:[(0,P.jsx)(`span`,{className:`col-span-4`,children:`Workspace / Branch`}),(0,P.jsx)(`span`,{className:`col-span-2`,children:`AI Harness`}),(0,P.jsx)(`span`,{className:`col-span-2`,children:`Git Status`}),(0,P.jsx)(`span`,{className:`col-span-2`,children:`Services`}),(0,P.jsx)(`span`,{className:`col-span-2 text-right`,children:`Action`})]}),e.map(e=>{let n=t[e.branchName],o=!!(n&&n.changedFiles>0),s=!!(n&&n.runningServices>0),c=(e.mode??`worktree`)===`in-place`?null:n?S(n.syncStatus):null;return(0,P.jsxs)(`div`,{onClick:()=>a(e.branchName),className:`grid grid-cols-1 sm:grid-cols-12 gap-2 sm:gap-3 px-4 py-3 items-center hover:bg-accent/40 transition-colors cursor-pointer text-xs`,children:[(0,P.jsxs)(`div`,{className:`sm:col-span-4 min-w-0 flex items-center gap-2`,children:[(0,P.jsx)(`span`,{className:r(`size-2 rounded-full shrink-0`,o?`bg-amber-400`:`bg-emerald-500`)}),(0,P.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,P.jsx)(`span`,{className:`truncate font-mono font-bold text-foreground`,title:e.branchName,children:e.branchName}),(0,P.jsx)(`span`,{className:`text-[9px] font-mono uppercase tracking-wider text-muted-foreground bg-muted px-1 rounded shrink-0`,children:e.mode===`in-place`?`In-place`:`Worktree`})]}),(0,P.jsxs)(`div`,{className:`text-[10px] text-muted-foreground font-mono truncate mt-0.5`,children:[e.repos.length,` `,e.repos.length===1?`repo`:`repos`,` • `,new Date(e.createdAt).toLocaleDateString()]})]})]}),(0,P.jsx)(`div`,{className:`sm:col-span-2 flex items-center gap-1.5 min-w-0`,children:e.assistants&&e.assistants.length>0?e.assistants.map(e=>(0,P.jsx)(`span`,{className:`inline-flex items-center`,title:`Configured AI: ${e}`,children:e===`antigravity`?(0,P.jsx)(T,{className:`size-3.5`}):e===`claude`?(0,P.jsx)(`span`,{className:`grid size-3.5 place-items-center rounded bg-[#D97757] text-white shadow-2xs`,children:(0,P.jsx)(d,{className:`size-2`})}):e===`codex`?(0,P.jsx)(`span`,{className:`grid size-3.5 place-items-center rounded bg-foreground text-background shadow-2xs`,children:(0,P.jsx)(y,{className:`size-2`})}):(0,P.jsx)(`span`,{className:`grid size-3.5 place-items-center rounded bg-blue-600 text-white shadow-2xs`,children:(0,P.jsx)(w,{className:`size-2`})})},e)):(0,P.jsx)(`span`,{className:`text-[11px] text-muted-foreground font-mono`,children:`—`})}),(0,P.jsx)(`div`,{className:`sm:col-span-2 font-mono text-[11px]`,children:o?(0,P.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-amber-600 dark:text-amber-400 font-semibold`,children:[(0,P.jsx)(`span`,{className:`size-1.5 rounded-full bg-amber-500`}),n.changedFiles,` modified`,c&&c.tone!==`idle`&&(0,P.jsxs)(`span`,{className:`text-[10px] text-muted-foreground ml-0.5 font-normal`,children:[`(`,c.label,`)`]})]}):(0,P.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-emerald-600 dark:text-emerald-400`,children:[(0,P.jsx)(`span`,{className:`size-1.5 rounded-full bg-emerald-500`}),`Clean`]})}),(0,P.jsx)(`div`,{className:`sm:col-span-2 font-mono text-[11px]`,children:s?(0,P.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-emerald-600 dark:text-emerald-400`,children:[(0,P.jsx)(`span`,{className:`size-1.5 rounded-full bg-emerald-500 animate-pulse`}),n.runningServices,` active`]}):(0,P.jsx)(`span`,{className:`text-muted-foreground/70`,children:`Offline`})}),(0,P.jsx)(`div`,{className:`sm:col-span-2 flex items-center justify-end gap-1`,onClick:e=>e.stopPropagation(),children:(0,P.jsxs)(i,{size:`xs`,variant:`ghost`,onClick:()=>a(e.branchName),className:`gap-1 text-primary hover:text-primary`,children:[(0,P.jsx)(`span`,{children:`Inspect`}),(0,P.jsx)(_,{size:12})]})})]},e.id)})]})]}),J.length>0&&(0,P.jsxs)(`div`,{children:[(0,P.jsxs)(`div`,{className:`mb-2.5 flex items-center justify-between`,children:[(0,P.jsxs)(`h2`,{className:`text-xs font-bold uppercase tracking-wider text-muted-foreground`,children:[`Repository Worktree Allocations (`,J.length,`)`]}),(0,P.jsx)(`span`,{className:`text-[11px] text-muted-foreground font-mono`,children:`Underlying git repos mapped across features`})]}),(0,P.jsx)(D,{className:`divide-y divide-border/60 overflow-hidden surface-card`,children:J.map(e=>(0,P.jsxs)(`div`,{className:`flex items-center justify-between p-3 text-xs`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2.5 min-w-0 font-mono`,children:[(0,P.jsx)(`span`,{className:`grid size-6 place-items-center rounded bg-muted/60 text-muted-foreground`,children:(0,P.jsx)(m,{size:13})}),(0,P.jsxs)(`div`,{className:`min-w-0`,children:[(0,P.jsx)(`span`,{className:`font-bold text-foreground block truncate`,children:e.name}),(0,P.jsx)(`span`,{className:`text-[10px] text-muted-foreground truncate block`,children:e.path})]})]}),(0,P.jsx)(`div`,{className:`flex items-center gap-2 shrink-0 font-mono text-[11px] text-muted-foreground`,children:(0,P.jsxs)(`span`,{className:`rounded bg-muted px-2 py-0.5 text-foreground font-semibold`,children:[e.count,` `,e.count===1?`workspace worktree`:`workspace worktrees`]})})]},e.name))})]})]})}export{I as DashboardPage};
@@ -1 +0,0 @@
1
- import{g as e,t}from"./button-BDDZnIHx.js";import{t as n}from"./circle-plus-lmU1yNJd.js";import{Vt as r}from"./index-C_rwnBzF.js";var i=e();function a({config:e,onCreateWorkspace:a,onModifySettings:o}){return(0,i.jsxs)(`div`,{className:`max-w-4xl mx-auto animate-fade-in`,children:[(0,i.jsxs)(`header`,{className:`mb-10`,children:[(0,i.jsx)(`div`,{className:`inline-flex items-center gap-1.5 px-3 py-1 rounded-full bg-primary/10 text-primary border border-primary/20 text-xs font-semibold uppercase tracking-wider mb-4`,children:`Getting Started Guide`}),(0,i.jsx)(`h1`,{className:`text-3xl font-bold tracking-tight text-foreground mb-2`,children:`Welcome to NexusFlow`}),(0,i.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`NexusFlow orchestrates multi-repository developer environments. It combines isolated Git worktrees, automatic code analyzer sweeps, and background process running into a single dashboard.`})]}),(0,i.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 gap-8 mb-10`,children:[(0,i.jsxs)(`div`,{className:`bg-card border border-border rounded-xl p-6 shadow-sm space-y-6`,children:[(0,i.jsx)(`h2`,{className:`text-lg font-semibold text-foreground mb-4`,children:`NexusFlow Workflows`}),(0,i.jsxs)(`div`,{className:`flex gap-4`,children:[(0,i.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-primary/10 border border-primary/20 text-primary font-bold text-sm`,children:`1`}),(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:`Configure Folders`}),(0,i.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:[`Specify your Development folder (where repositories live) and Workspaces folder. These are currently set to:`,(0,i.jsx)(`code`,{className:`block mt-1 text-[10px] text-primary break-all`,children:e.devDir||`Not Configured`})]})]})]}),(0,i.jsxs)(`div`,{className:`flex gap-4`,children:[(0,i.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-primary/10 border border-primary/20 text-primary font-bold text-sm`,children:`2`}),(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:`Build Workspaces`}),(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:`Choose repositories and feature branch. NexusFlow checks out dependencies under a unified workspace directory using Git Worktrees, keeping original projects clean.`})]})]}),(0,i.jsxs)(`div`,{className:`flex gap-4`,children:[(0,i.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-full bg-primary/10 border border-primary/20 text-primary font-bold text-sm`,children:`3`}),(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:`Align AI Context`}),(0,i.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:[`NexusFlow writes files like `,(0,i.jsx)(`code`,{children:`CLAUDE.md`}),`, `,(0,i.jsx)(`code`,{children:`.cursorrules`}),`, `,(0,i.jsx)(`code`,{children:`AGENTS.md`}),` prompting the LLM to inspect project relations and list key assumptions and questions before coding.`]})]})]})]}),(0,i.jsxs)(`div`,{className:`bg-card border border-border rounded-xl p-6 shadow-sm flex flex-col justify-between`,children:[(0,i.jsxs)(`div`,{children:[(0,i.jsx)(`h2`,{className:`text-lg font-semibold text-foreground mb-4`,children:`Current Configuration`}),(0,i.jsxs)(`div`,{className:`space-y-3 text-xs`,children:[(0,i.jsxs)(`div`,{className:`flex justify-between py-1.5 border-b border-border`,children:[(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:`Dev Folder:`}),(0,i.jsx)(`span`,{className:`text-foreground font-mono text-[10px] truncate max-w-[200px]`,children:e.devDir})]}),(0,i.jsxs)(`div`,{className:`flex justify-between py-1.5 border-b border-border`,children:[(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:`Workspaces Folder:`}),(0,i.jsx)(`span`,{className:`text-foreground font-mono text-[10px] truncate max-w-[200px]`,children:e.workspacesDir})]}),(0,i.jsxs)(`div`,{className:`flex justify-between py-1.5 border-b border-border`,children:[(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:`Preferred AI:`}),(0,i.jsx)(`span`,{className:`text-primary font-semibold uppercase`,children:e.defaultAssistant||`None`})]}),(0,i.jsxs)(`div`,{className:`flex justify-between py-1.5`,children:[(0,i.jsx)(`span`,{className:`text-muted-foreground`,children:`Scan Depth:`}),(0,i.jsxs)(`span`,{className:`text-foreground font-semibold`,children:[e.scanDepth,` levels`]})]})]})]}),(0,i.jsxs)(`div`,{className:`pt-6 border-t border-border flex flex-col gap-2`,children:[(0,i.jsxs)(t,{className:`w-full gap-2`,onClick:a,children:[(0,i.jsx)(n,{size:14}),` Create a Workspace`]}),(0,i.jsxs)(t,{variant:`outline`,className:`w-full gap-2`,onClick:o,children:[(0,i.jsx)(r,{size:14,className:`text-muted-foreground`}),` Modify Settings`]})]})]})]})]})}export{a as GettingStartedPage};
@@ -1 +0,0 @@
1
- import{_ as e,b as t,g as n,t as r}from"./button-BDDZnIHx.js";import{o as i}from"./CSPContext-DBUu9tE0.js";import{n as a,t as o}from"./ScaffoldRepoInline-ywcpq9PX.js";import{a as s,c,i as l,n as u,o as d,r as f,s as p,t as m}from"./alert-dialog-CQAX2yRx.js";import{t as h}from"./trash-2-CtR35_eF.js";import{F as g,Ft as _,G as v,Gt as ee,J as y,Kt as b,Wt as x,a as S,c as C,d as w,f as T,l as E,o as D,s as O,st as k,tt as A,u as j,z as M}from"./index-C_rwnBzF.js";import{t as N}from"./badge-CAohJGj6.js";import{a as P,i as F,n as I,r as L,t as te}from"./empty-BdlgbifD.js";var R=t(e(),1),z=n(),B={editingId:null,name:``,description:``,repoPaths:[]};function V(){let e=_(),t=v(),n=y(),V=k(),H=g(),U=A(),W=M(),[G,K]=(0,R.useState)(null),[q,J]=(0,R.useState)(null),[Y,X]=(0,R.useState)(null),Z=(0,R.useMemo)(()=>{let e={};for(let t of V.data??[])t.projectId&&(e[t.projectId]=(e[t.projectId]??0)+1);return e},[V.data]),Q=()=>{J(null),K(B)},ne=e=>{J(null),K({editingId:e.id,name:e.name,description:e.description??``,repoPaths:e.repos.map(e=>e.path)})},re=e=>{K(t=>t&&{...t,repoPaths:t.repoPaths.includes(e.path)?t.repoPaths.filter(t=>t!==e.path):[...t.repoPaths,e.path]})},ie=async()=>{if(G){J(null);try{G.editingId?await U.mutateAsync({id:G.editingId,name:G.name,description:G.description||null,repos:G.repoPaths}):await H.mutateAsync({name:G.name,description:G.description||void 0,repos:G.repoPaths}),K(null)}catch(e){J(e instanceof Error?e.message:String(e))}}},ae=async()=>{if(Y)try{await W.mutateAsync(Y.id)}finally{X(null)}},oe=!!(G&&G.name.trim()&&G.repoPaths.length>0),$=H.isPending||U.isPending;return(0,z.jsxs)(`div`,{className:`mx-auto max-w-4xl animate-fade-in`,children:[(0,z.jsxs)(`header`,{className:`mb-6 flex items-center justify-between gap-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-xl font-semibold`,children:`Projects`}),(0,z.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Named groups of repositories you start work from. Registered once, reused for every feature.`})]}),(0,z.jsxs)(r,{onClick:Q,children:[(0,z.jsx)(x,{}),` New project`]})]}),t.isLoading?(0,z.jsx)(`div`,{className:`flex justify-center py-20`,children:(0,z.jsx)(S,{className:`size-6`})}):(t.data??[]).length===0?(0,z.jsxs)(te,{className:`border border-border border-dashed`,children:[(0,z.jsxs)(L,{children:[(0,z.jsx)(F,{variant:`icon`,children:(0,z.jsx)(b,{})}),(0,z.jsx)(P,{children:`No projects yet`}),(0,z.jsx)(I,{children:`Register your first project to start work without re-picking repositories every time.`})]}),(0,z.jsxs)(r,{onClick:Q,children:[(0,z.jsx)(x,{}),` New project`]})]}):(0,z.jsx)(`ul`,{className:`flex flex-col gap-3`,children:(t.data??[]).map(t=>(0,z.jsx)(`li`,{className:`rounded-xl border border-border bg-card p-4 transition-colors hover:border-foreground/15`,children:(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`h2`,{className:`truncate text-sm font-semibold`,children:t.name}),(Z[t.id]??0)>0&&(0,z.jsxs)(N,{variant:`secondary`,children:[Z[t.id],` workspace`,Z[t.id]===1?``:`s`]})]}),t.description&&(0,z.jsx)(`p`,{className:`mt-0.5 truncate text-sm text-muted-foreground`,children:t.description}),(0,z.jsx)(`ul`,{className:`mt-2 flex flex-col gap-0.5`,children:t.repos.map(e=>(0,z.jsxs)(`li`,{className:`truncate font-mono text-xs text-muted-foreground`,children:[e.path,(0,z.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[`[`,e.defaultBranch,`]`]})]},e.path))})]}),(0,z.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[(0,z.jsxs)(r,{size:`sm`,onClick:()=>e(`/new?project=${encodeURIComponent(t.id)}`),children:[(0,z.jsx)(ee,{}),` Start work`]}),(0,z.jsx)(r,{size:`icon-sm`,variant:`ghost`,"aria-label":`Edit ${t.name}`,onClick:()=>ne(t),children:(0,z.jsx)(c,{})}),(0,z.jsx)(r,{size:`icon-sm`,variant:`ghost`,"aria-label":`Remove ${t.name}`,onClick:()=>X(t),children:(0,z.jsx)(h,{})})]})]})},t.id))}),(0,z.jsx)(D,{open:G!==null,onOpenChange:e=>!e&&K(null),children:(0,z.jsxs)(w,{className:`max-w-lg`,children:[(0,z.jsxs)(E,{children:[(0,z.jsx)(T,{children:G?.editingId?`Edit project`:`New project`}),(0,z.jsx)(O,{children:`A project is a reusable group of source repositories. Removing one later never touches disk.`})]}),(0,z.jsxs)(j,{className:`space-y-4`,children:[(0,z.jsxs)(`label`,{className:`block`,children:[(0,z.jsx)(`span`,{className:`mb-1 block text-sm font-medium`,children:`Name`}),(0,z.jsx)(i,{value:G?.name??``,onChange:e=>K(t=>t&&{...t,name:e.target.value}),placeholder:`e.g. Hogia Billing`,autoFocus:!0})]}),(0,z.jsxs)(`label`,{className:`block`,children:[(0,z.jsxs)(`span`,{className:`mb-1 block text-sm font-medium`,children:[`Description `,(0,z.jsx)(`span`,{className:`font-normal text-muted-foreground`,children:`(optional)`})]}),(0,z.jsx)(i,{value:G?.description??``,onChange:e=>K(t=>t&&{...t,description:e.target.value}),placeholder:`What this group of repos is for`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`mb-1 block text-sm font-medium`,children:`Repositories`}),(0,z.jsx)(a,{repos:n.data??[],selectedPaths:G?.repoPaths??[],onToggle:re,loading:n.isLoading,emptyHint:`No repositories found in your dev directory.`}),(0,z.jsx)(o,{onCreated:e=>K(t=>t&&{...t,repoPaths:[...t.repoPaths,e.path]})})]}),q&&(0,z.jsx)(`p`,{className:`text-sm text-destructive-foreground`,children:q})]}),(0,z.jsxs)(C,{children:[(0,z.jsx)(r,{variant:`outline`,onClick:()=>K(null),children:`Cancel`}),(0,z.jsxs)(r,{onClick:ie,disabled:!oe||$,children:[$?(0,z.jsx)(S,{}):null,G?.editingId?`Save changes`:`Create project`]})]})]})}),(0,z.jsx)(m,{open:Y!==null,onOpenChange:e=>!e&&X(null),children:(0,z.jsxs)(d,{children:[(0,z.jsxs)(s,{children:[(0,z.jsxs)(p,{children:[`Remove “`,Y?.name,`”?`]}),(0,z.jsx)(f,{children:`This only removes the project from the registry — repositories and workspaces on disk are not touched.`})]}),(0,z.jsxs)(l,{children:[(0,z.jsx)(u,{render:(0,z.jsx)(r,{variant:`outline`,children:`Cancel`})}),(0,z.jsxs)(r,{variant:`destructive`,onClick:ae,disabled:W.isPending,children:[W.isPending?(0,z.jsx)(S,{}):null,`Remove project`]})]})]})})]})}export{V as ProjectsPage};