@openrig/cli 0.1.12 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/daemon/assets/openrig-activity-hook-relay.cjs +104 -0
  2. package/daemon/dist/adapters/claude-code-adapter.d.ts +14 -6
  3. package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
  4. package/daemon/dist/adapters/claude-code-adapter.js +183 -65
  5. package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
  6. package/daemon/dist/adapters/claude-resume.d.ts +5 -0
  7. package/daemon/dist/adapters/claude-resume.d.ts.map +1 -1
  8. package/daemon/dist/adapters/claude-resume.js +13 -0
  9. package/daemon/dist/adapters/claude-resume.js.map +1 -1
  10. package/daemon/dist/adapters/codex-resume.d.ts +8 -1
  11. package/daemon/dist/adapters/codex-resume.d.ts.map +1 -1
  12. package/daemon/dist/adapters/codex-resume.js +74 -5
  13. package/daemon/dist/adapters/codex-resume.js.map +1 -1
  14. package/daemon/dist/adapters/codex-runtime-adapter.d.ts +9 -5
  15. package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
  16. package/daemon/dist/adapters/codex-runtime-adapter.js +255 -28
  17. package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
  18. package/daemon/dist/adapters/terminal-adapter.d.ts +2 -1
  19. package/daemon/dist/adapters/terminal-adapter.d.ts.map +1 -1
  20. package/daemon/dist/adapters/terminal-adapter.js +7 -1
  21. package/daemon/dist/adapters/terminal-adapter.js.map +1 -1
  22. package/daemon/dist/adapters/tmux.d.ts.map +1 -1
  23. package/daemon/dist/adapters/tmux.js +53 -5
  24. package/daemon/dist/adapters/tmux.js.map +1 -1
  25. package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts +3 -0
  26. package/daemon/dist/db/migrations/021_seat_handover_observability.d.ts.map +1 -0
  27. package/daemon/dist/db/migrations/021_seat_handover_observability.js +11 -0
  28. package/daemon/dist/db/migrations/021_seat_handover_observability.js.map +1 -0
  29. package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts +3 -0
  30. package/daemon/dist/db/migrations/022_node_codex_config_profile.d.ts.map +1 -0
  31. package/daemon/dist/db/migrations/022_node_codex_config_profile.js +7 -0
  32. package/daemon/dist/db/migrations/022_node_codex_config_profile.js.map +1 -0
  33. package/daemon/dist/db/migrations/023_stream_items.d.ts +16 -0
  34. package/daemon/dist/db/migrations/023_stream_items.d.ts.map +1 -0
  35. package/daemon/dist/db/migrations/023_stream_items.js +37 -0
  36. package/daemon/dist/db/migrations/023_stream_items.js.map +1 -0
  37. package/daemon/dist/db/migrations/024_queue_items.d.ts +19 -0
  38. package/daemon/dist/db/migrations/024_queue_items.d.ts.map +1 -0
  39. package/daemon/dist/db/migrations/024_queue_items.js +52 -0
  40. package/daemon/dist/db/migrations/024_queue_items.js.map +1 -0
  41. package/daemon/dist/db/migrations/025_queue_transitions.d.ts +13 -0
  42. package/daemon/dist/db/migrations/025_queue_transitions.d.ts.map +1 -0
  43. package/daemon/dist/db/migrations/025_queue_transitions.js +28 -0
  44. package/daemon/dist/db/migrations/025_queue_transitions.js.map +1 -0
  45. package/daemon/dist/db/migrations/026_inbox_entries.d.ts +14 -0
  46. package/daemon/dist/db/migrations/026_inbox_entries.d.ts.map +1 -0
  47. package/daemon/dist/db/migrations/026_inbox_entries.js +35 -0
  48. package/daemon/dist/db/migrations/026_inbox_entries.js.map +1 -0
  49. package/daemon/dist/db/migrations/027_outbox_entries.d.ts +12 -0
  50. package/daemon/dist/db/migrations/027_outbox_entries.d.ts.map +1 -0
  51. package/daemon/dist/db/migrations/027_outbox_entries.js +30 -0
  52. package/daemon/dist/db/migrations/027_outbox_entries.js.map +1 -0
  53. package/daemon/dist/db/migrations/028_project_classifications.d.ts +26 -0
  54. package/daemon/dist/db/migrations/028_project_classifications.d.ts.map +1 -0
  55. package/daemon/dist/db/migrations/028_project_classifications.js +44 -0
  56. package/daemon/dist/db/migrations/028_project_classifications.js.map +1 -0
  57. package/daemon/dist/db/migrations/029_classifier_leases.d.ts +22 -0
  58. package/daemon/dist/db/migrations/029_classifier_leases.d.ts.map +1 -0
  59. package/daemon/dist/db/migrations/029_classifier_leases.js +41 -0
  60. package/daemon/dist/db/migrations/029_classifier_leases.js.map +1 -0
  61. package/daemon/dist/db/migrations/030_views_custom.d.ts +15 -0
  62. package/daemon/dist/db/migrations/030_views_custom.d.ts.map +1 -0
  63. package/daemon/dist/db/migrations/030_views_custom.js +27 -0
  64. package/daemon/dist/db/migrations/030_views_custom.js.map +1 -0
  65. package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts +34 -0
  66. package/daemon/dist/db/migrations/031_watchdog_jobs.d.ts.map +1 -0
  67. package/daemon/dist/db/migrations/031_watchdog_jobs.js +59 -0
  68. package/daemon/dist/db/migrations/031_watchdog_jobs.js.map +1 -0
  69. package/daemon/dist/db/migrations/032_watchdog_history.d.ts +28 -0
  70. package/daemon/dist/db/migrations/032_watchdog_history.d.ts.map +1 -0
  71. package/daemon/dist/db/migrations/032_watchdog_history.js +46 -0
  72. package/daemon/dist/db/migrations/032_watchdog_history.js.map +1 -0
  73. package/daemon/dist/db/migrations/033_workflow_specs.d.ts +30 -0
  74. package/daemon/dist/db/migrations/033_workflow_specs.d.ts.map +1 -0
  75. package/daemon/dist/db/migrations/033_workflow_specs.js +50 -0
  76. package/daemon/dist/db/migrations/033_workflow_specs.js.map +1 -0
  77. package/daemon/dist/db/migrations/034_workflow_instances.d.ts +42 -0
  78. package/daemon/dist/db/migrations/034_workflow_instances.d.ts.map +1 -0
  79. package/daemon/dist/db/migrations/034_workflow_instances.js +63 -0
  80. package/daemon/dist/db/migrations/034_workflow_instances.js.map +1 -0
  81. package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts +29 -0
  82. package/daemon/dist/db/migrations/035_workflow_step_trails.d.ts.map +1 -0
  83. package/daemon/dist/db/migrations/035_workflow_step_trails.js +48 -0
  84. package/daemon/dist/db/migrations/035_workflow_step_trails.js.map +1 -0
  85. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts +35 -0
  86. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.d.ts.map +1 -0
  87. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js +43 -0
  88. package/daemon/dist/db/migrations/036_watchdog_policy_enum_extension.js.map +1 -0
  89. package/daemon/dist/domain/agent-activity-store.d.ts +42 -0
  90. package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -0
  91. package/daemon/dist/domain/agent-activity-store.js +177 -0
  92. package/daemon/dist/domain/agent-activity-store.js.map +1 -0
  93. package/daemon/dist/domain/agent-manifest.d.ts.map +1 -1
  94. package/daemon/dist/domain/agent-manifest.js +3 -0
  95. package/daemon/dist/domain/agent-manifest.js.map +1 -1
  96. package/daemon/dist/domain/agent-starter-resolver.d.ts +100 -0
  97. package/daemon/dist/domain/agent-starter-resolver.d.ts.map +1 -0
  98. package/daemon/dist/domain/agent-starter-resolver.js +200 -0
  99. package/daemon/dist/domain/agent-starter-resolver.js.map +1 -0
  100. package/daemon/dist/domain/classifier-lease-manager.d.ts +130 -0
  101. package/daemon/dist/domain/classifier-lease-manager.d.ts.map +1 -0
  102. package/daemon/dist/domain/classifier-lease-manager.js +285 -0
  103. package/daemon/dist/domain/classifier-lease-manager.js.map +1 -0
  104. package/daemon/dist/domain/context-usage-store.d.ts +1 -1
  105. package/daemon/dist/domain/context-usage-store.js +1 -1
  106. package/daemon/dist/domain/context-usage-store.js.map +1 -1
  107. package/daemon/dist/domain/hot-potato-enforcer.d.ts +45 -0
  108. package/daemon/dist/domain/hot-potato-enforcer.d.ts.map +1 -0
  109. package/daemon/dist/domain/hot-potato-enforcer.js +94 -0
  110. package/daemon/dist/domain/hot-potato-enforcer.js.map +1 -0
  111. package/daemon/dist/domain/inbox-handler.d.ts +68 -0
  112. package/daemon/dist/domain/inbox-handler.d.ts.map +1 -0
  113. package/daemon/dist/domain/inbox-handler.js +177 -0
  114. package/daemon/dist/domain/inbox-handler.js.map +1 -0
  115. package/daemon/dist/domain/native-resume-probe.d.ts +1 -1
  116. package/daemon/dist/domain/native-resume-probe.d.ts.map +1 -1
  117. package/daemon/dist/domain/native-resume-probe.js +67 -0
  118. package/daemon/dist/domain/native-resume-probe.js.map +1 -1
  119. package/daemon/dist/domain/node-inventory.d.ts +29 -1
  120. package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
  121. package/daemon/dist/domain/node-inventory.js +160 -38
  122. package/daemon/dist/domain/node-inventory.js.map +1 -1
  123. package/daemon/dist/domain/node-launcher.d.ts +2 -0
  124. package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
  125. package/daemon/dist/domain/node-launcher.js +14 -2
  126. package/daemon/dist/domain/node-launcher.js.map +1 -1
  127. package/daemon/dist/domain/outbox-handler.d.ts +48 -0
  128. package/daemon/dist/domain/outbox-handler.d.ts.map +1 -0
  129. package/daemon/dist/domain/outbox-handler.js +106 -0
  130. package/daemon/dist/domain/outbox-handler.js.map +1 -0
  131. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts +64 -0
  132. package/daemon/dist/domain/policies/artifact-pool-helpers.d.ts.map +1 -0
  133. package/daemon/dist/domain/policies/artifact-pool-helpers.js +226 -0
  134. package/daemon/dist/domain/policies/artifact-pool-helpers.js.map +1 -0
  135. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts +3 -0
  136. package/daemon/dist/domain/policies/artifact-pool-ready.d.ts.map +1 -0
  137. package/daemon/dist/domain/policies/artifact-pool-ready.js +41 -0
  138. package/daemon/dist/domain/policies/artifact-pool-ready.js.map +1 -0
  139. package/daemon/dist/domain/policies/edge-artifact-required.d.ts +3 -0
  140. package/daemon/dist/domain/policies/edge-artifact-required.d.ts.map +1 -0
  141. package/daemon/dist/domain/policies/edge-artifact-required.js +90 -0
  142. package/daemon/dist/domain/policies/edge-artifact-required.js.map +1 -0
  143. package/daemon/dist/domain/policies/periodic-reminder.d.ts +3 -0
  144. package/daemon/dist/domain/policies/periodic-reminder.d.ts.map +1 -0
  145. package/daemon/dist/domain/policies/periodic-reminder.js +30 -0
  146. package/daemon/dist/domain/policies/periodic-reminder.js.map +1 -0
  147. package/daemon/dist/domain/policies/types.d.ts +51 -0
  148. package/daemon/dist/domain/policies/types.d.ts.map +1 -0
  149. package/daemon/dist/domain/policies/types.js +9 -0
  150. package/daemon/dist/domain/policies/types.js.map +1 -0
  151. package/daemon/dist/domain/policies/workflow-keepalive.d.ts +7 -0
  152. package/daemon/dist/domain/policies/workflow-keepalive.d.ts.map +1 -0
  153. package/daemon/dist/domain/policies/workflow-keepalive.js +123 -0
  154. package/daemon/dist/domain/policies/workflow-keepalive.js.map +1 -0
  155. package/daemon/dist/domain/project-classifier.d.ts +75 -0
  156. package/daemon/dist/domain/project-classifier.d.ts.map +1 -0
  157. package/daemon/dist/domain/project-classifier.js +132 -0
  158. package/daemon/dist/domain/project-classifier.js.map +1 -0
  159. package/daemon/dist/domain/projection-planner.d.ts +1 -0
  160. package/daemon/dist/domain/projection-planner.d.ts.map +1 -1
  161. package/daemon/dist/domain/projection-planner.js +3 -0
  162. package/daemon/dist/domain/projection-planner.js.map +1 -1
  163. package/daemon/dist/domain/ps-projection.d.ts +31 -0
  164. package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
  165. package/daemon/dist/domain/ps-projection.js +38 -0
  166. package/daemon/dist/domain/ps-projection.js.map +1 -1
  167. package/daemon/dist/domain/queue-repository.d.ts +322 -0
  168. package/daemon/dist/domain/queue-repository.d.ts.map +1 -0
  169. package/daemon/dist/domain/queue-repository.js +686 -0
  170. package/daemon/dist/domain/queue-repository.js.map +1 -0
  171. package/daemon/dist/domain/queue-transition-log.d.ts +38 -0
  172. package/daemon/dist/domain/queue-transition-log.d.ts.map +1 -0
  173. package/daemon/dist/domain/queue-transition-log.js +52 -0
  174. package/daemon/dist/domain/queue-transition-log.js.map +1 -0
  175. package/daemon/dist/domain/restore-check-service.d.ts +203 -0
  176. package/daemon/dist/domain/restore-check-service.d.ts.map +1 -0
  177. package/daemon/dist/domain/restore-check-service.js +1047 -0
  178. package/daemon/dist/domain/restore-check-service.js.map +1 -0
  179. package/daemon/dist/domain/restore-orchestrator.d.ts +49 -3
  180. package/daemon/dist/domain/restore-orchestrator.d.ts.map +1 -1
  181. package/daemon/dist/domain/restore-orchestrator.js +460 -62
  182. package/daemon/dist/domain/restore-orchestrator.js.map +1 -1
  183. package/daemon/dist/domain/rig-expansion-service.d.ts.map +1 -1
  184. package/daemon/dist/domain/rig-expansion-service.js +13 -0
  185. package/daemon/dist/domain/rig-expansion-service.js.map +1 -1
  186. package/daemon/dist/domain/rig-repository.d.ts +17 -1
  187. package/daemon/dist/domain/rig-repository.d.ts.map +1 -1
  188. package/daemon/dist/domain/rig-repository.js +63 -5
  189. package/daemon/dist/domain/rig-repository.js.map +1 -1
  190. package/daemon/dist/domain/rigspec-codec.d.ts.map +1 -1
  191. package/daemon/dist/domain/rigspec-codec.js +13 -0
  192. package/daemon/dist/domain/rigspec-codec.js.map +1 -1
  193. package/daemon/dist/domain/rigspec-exporter.d.ts.map +1 -1
  194. package/daemon/dist/domain/rigspec-exporter.js +2 -0
  195. package/daemon/dist/domain/rigspec-exporter.js.map +1 -1
  196. package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
  197. package/daemon/dist/domain/rigspec-instantiator.js +61 -1
  198. package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
  199. package/daemon/dist/domain/rigspec-schema.d.ts.map +1 -1
  200. package/daemon/dist/domain/rigspec-schema.js +196 -0
  201. package/daemon/dist/domain/rigspec-schema.js.map +1 -1
  202. package/daemon/dist/domain/runtime-adapter.d.ts +27 -2
  203. package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
  204. package/daemon/dist/domain/runtime-adapter.js +5 -0
  205. package/daemon/dist/domain/runtime-adapter.js.map +1 -1
  206. package/daemon/dist/domain/seat-handover-planner.d.ts +84 -0
  207. package/daemon/dist/domain/seat-handover-planner.d.ts.map +1 -0
  208. package/daemon/dist/domain/seat-handover-planner.js +188 -0
  209. package/daemon/dist/domain/seat-handover-planner.js.map +1 -0
  210. package/daemon/dist/domain/seat-handover-service.d.ts +104 -0
  211. package/daemon/dist/domain/seat-handover-service.d.ts.map +1 -0
  212. package/daemon/dist/domain/seat-handover-service.js +343 -0
  213. package/daemon/dist/domain/seat-handover-service.js.map +1 -0
  214. package/daemon/dist/domain/seat-status-service.d.ts +50 -0
  215. package/daemon/dist/domain/seat-status-service.d.ts.map +1 -0
  216. package/daemon/dist/domain/seat-status-service.js +66 -0
  217. package/daemon/dist/domain/seat-status-service.js.map +1 -0
  218. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts +53 -0
  219. package/daemon/dist/domain/session-source-rebuild-resolver.d.ts.map +1 -0
  220. package/daemon/dist/domain/session-source-rebuild-resolver.js +59 -0
  221. package/daemon/dist/domain/session-source-rebuild-resolver.js.map +1 -0
  222. package/daemon/dist/domain/session-transport.d.ts +30 -0
  223. package/daemon/dist/domain/session-transport.d.ts.map +1 -1
  224. package/daemon/dist/domain/session-transport.js +322 -12
  225. package/daemon/dist/domain/session-transport.js.map +1 -1
  226. package/daemon/dist/domain/snapshot-repository.d.ts +18 -0
  227. package/daemon/dist/domain/snapshot-repository.d.ts.map +1 -1
  228. package/daemon/dist/domain/snapshot-repository.js +77 -0
  229. package/daemon/dist/domain/snapshot-repository.js.map +1 -1
  230. package/daemon/dist/domain/startup-orchestrator.d.ts +22 -3
  231. package/daemon/dist/domain/startup-orchestrator.d.ts.map +1 -1
  232. package/daemon/dist/domain/startup-orchestrator.js +31 -5
  233. package/daemon/dist/domain/startup-orchestrator.js.map +1 -1
  234. package/daemon/dist/domain/stream-store.d.ts +56 -0
  235. package/daemon/dist/domain/stream-store.d.ts.map +1 -0
  236. package/daemon/dist/domain/stream-store.js +108 -0
  237. package/daemon/dist/domain/stream-store.js.map +1 -0
  238. package/daemon/dist/domain/transcript-redaction.d.ts +13 -0
  239. package/daemon/dist/domain/transcript-redaction.d.ts.map +1 -0
  240. package/daemon/dist/domain/transcript-redaction.js +34 -0
  241. package/daemon/dist/domain/transcript-redaction.js.map +1 -0
  242. package/daemon/dist/domain/transcript-store.d.ts +15 -0
  243. package/daemon/dist/domain/transcript-store.d.ts.map +1 -1
  244. package/daemon/dist/domain/transcript-store.js +57 -1
  245. package/daemon/dist/domain/transcript-store.js.map +1 -1
  246. package/daemon/dist/domain/types.d.ts +316 -3
  247. package/daemon/dist/domain/types.d.ts.map +1 -1
  248. package/daemon/dist/domain/view-event-bridge.d.ts +12 -0
  249. package/daemon/dist/domain/view-event-bridge.d.ts.map +1 -0
  250. package/daemon/dist/domain/view-event-bridge.js +92 -0
  251. package/daemon/dist/domain/view-event-bridge.js.map +1 -0
  252. package/daemon/dist/domain/view-projector.d.ts +83 -0
  253. package/daemon/dist/domain/view-projector.d.ts.map +1 -0
  254. package/daemon/dist/domain/view-projector.js +296 -0
  255. package/daemon/dist/domain/view-projector.js.map +1 -0
  256. package/daemon/dist/domain/watchdog-history-log.d.ts +49 -0
  257. package/daemon/dist/domain/watchdog-history-log.d.ts.map +1 -0
  258. package/daemon/dist/domain/watchdog-history-log.js +67 -0
  259. package/daemon/dist/domain/watchdog-history-log.js.map +1 -0
  260. package/daemon/dist/domain/watchdog-jobs-repository.d.ts +81 -0
  261. package/daemon/dist/domain/watchdog-jobs-repository.d.ts.map +1 -0
  262. package/daemon/dist/domain/watchdog-jobs-repository.js +164 -0
  263. package/daemon/dist/domain/watchdog-jobs-repository.js.map +1 -0
  264. package/daemon/dist/domain/watchdog-policy-engine.d.ts +92 -0
  265. package/daemon/dist/domain/watchdog-policy-engine.d.ts.map +1 -0
  266. package/daemon/dist/domain/watchdog-policy-engine.js +442 -0
  267. package/daemon/dist/domain/watchdog-policy-engine.js.map +1 -0
  268. package/daemon/dist/domain/watchdog-scheduler.d.ts +76 -0
  269. package/daemon/dist/domain/watchdog-scheduler.d.ts.map +1 -0
  270. package/daemon/dist/domain/watchdog-scheduler.js +112 -0
  271. package/daemon/dist/domain/watchdog-scheduler.js.map +1 -0
  272. package/daemon/dist/domain/workflow-instance-store.d.ts +46 -0
  273. package/daemon/dist/domain/workflow-instance-store.d.ts.map +1 -0
  274. package/daemon/dist/domain/workflow-instance-store.js +116 -0
  275. package/daemon/dist/domain/workflow-instance-store.js.map +1 -0
  276. package/daemon/dist/domain/workflow-projector.d.ts +64 -0
  277. package/daemon/dist/domain/workflow-projector.d.ts.map +1 -0
  278. package/daemon/dist/domain/workflow-projector.js +424 -0
  279. package/daemon/dist/domain/workflow-projector.js.map +1 -0
  280. package/daemon/dist/domain/workflow-runtime.d.ts +63 -0
  281. package/daemon/dist/domain/workflow-runtime.d.ts.map +1 -0
  282. package/daemon/dist/domain/workflow-runtime.js +150 -0
  283. package/daemon/dist/domain/workflow-runtime.js.map +1 -0
  284. package/daemon/dist/domain/workflow-spec-cache.d.ts +35 -0
  285. package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -0
  286. package/daemon/dist/domain/workflow-spec-cache.js +171 -0
  287. package/daemon/dist/domain/workflow-spec-cache.js.map +1 -0
  288. package/daemon/dist/domain/workflow-step-trail-log.d.ts +27 -0
  289. package/daemon/dist/domain/workflow-step-trail-log.d.ts.map +1 -0
  290. package/daemon/dist/domain/workflow-step-trail-log.js +73 -0
  291. package/daemon/dist/domain/workflow-step-trail-log.js.map +1 -0
  292. package/daemon/dist/domain/workflow-types.d.ts +108 -0
  293. package/daemon/dist/domain/workflow-types.d.ts.map +1 -0
  294. package/daemon/dist/domain/workflow-types.js +11 -0
  295. package/daemon/dist/domain/workflow-types.js.map +1 -0
  296. package/daemon/dist/domain/workflow-validator.d.ts +31 -0
  297. package/daemon/dist/domain/workflow-validator.d.ts.map +1 -0
  298. package/daemon/dist/domain/workflow-validator.js +115 -0
  299. package/daemon/dist/domain/workflow-validator.js.map +1 -0
  300. package/daemon/dist/index.d.ts.map +1 -1
  301. package/daemon/dist/index.js +21 -2
  302. package/daemon/dist/index.js.map +1 -1
  303. package/daemon/dist/routes/activity.d.ts +3 -0
  304. package/daemon/dist/routes/activity.d.ts.map +1 -0
  305. package/daemon/dist/routes/activity.js +47 -0
  306. package/daemon/dist/routes/activity.js.map +1 -0
  307. package/daemon/dist/routes/projects.d.ts +12 -0
  308. package/daemon/dist/routes/projects.d.ts.map +1 -0
  309. package/daemon/dist/routes/projects.js +178 -0
  310. package/daemon/dist/routes/projects.js.map +1 -0
  311. package/daemon/dist/routes/queue.d.ts +10 -0
  312. package/daemon/dist/routes/queue.d.ts.map +1 -0
  313. package/daemon/dist/routes/queue.js +374 -0
  314. package/daemon/dist/routes/queue.js.map +1 -0
  315. package/daemon/dist/routes/restore-check.d.ts +3 -0
  316. package/daemon/dist/routes/restore-check.d.ts.map +1 -0
  317. package/daemon/dist/routes/restore-check.js +200 -0
  318. package/daemon/dist/routes/restore-check.js.map +1 -0
  319. package/daemon/dist/routes/rigs.d.ts.map +1 -1
  320. package/daemon/dist/routes/rigs.js +60 -4
  321. package/daemon/dist/routes/rigs.js.map +1 -1
  322. package/daemon/dist/routes/seat.d.ts +3 -0
  323. package/daemon/dist/routes/seat.d.ts.map +1 -0
  324. package/daemon/dist/routes/seat.js +69 -0
  325. package/daemon/dist/routes/seat.js.map +1 -0
  326. package/daemon/dist/routes/sessions.d.ts.map +1 -1
  327. package/daemon/dist/routes/sessions.js +25 -4
  328. package/daemon/dist/routes/sessions.js.map +1 -1
  329. package/daemon/dist/routes/snapshots.js +66 -29
  330. package/daemon/dist/routes/snapshots.js.map +1 -1
  331. package/daemon/dist/routes/stream.d.ts +9 -0
  332. package/daemon/dist/routes/stream.d.ts.map +1 -0
  333. package/daemon/dist/routes/stream.js +119 -0
  334. package/daemon/dist/routes/stream.js.map +1 -0
  335. package/daemon/dist/routes/transcripts.d.ts.map +1 -1
  336. package/daemon/dist/routes/transcripts.js +38 -0
  337. package/daemon/dist/routes/transcripts.js.map +1 -1
  338. package/daemon/dist/routes/transport.d.ts.map +1 -1
  339. package/daemon/dist/routes/transport.js +21 -0
  340. package/daemon/dist/routes/transport.js.map +1 -1
  341. package/daemon/dist/routes/up.js +24 -3
  342. package/daemon/dist/routes/up.js.map +1 -1
  343. package/daemon/dist/routes/views.d.ts +13 -0
  344. package/daemon/dist/routes/views.d.ts.map +1 -0
  345. package/daemon/dist/routes/views.js +120 -0
  346. package/daemon/dist/routes/views.js.map +1 -0
  347. package/daemon/dist/routes/watchdog.d.ts +18 -0
  348. package/daemon/dist/routes/watchdog.d.ts.map +1 -0
  349. package/daemon/dist/routes/watchdog.js +148 -0
  350. package/daemon/dist/routes/watchdog.js.map +1 -0
  351. package/daemon/dist/routes/workflow.d.ts +20 -0
  352. package/daemon/dist/routes/workflow.d.ts.map +1 -0
  353. package/daemon/dist/routes/workflow.js +184 -0
  354. package/daemon/dist/routes/workflow.js.map +1 -0
  355. package/daemon/dist/server.d.ts +30 -0
  356. package/daemon/dist/server.d.ts.map +1 -1
  357. package/daemon/dist/server.js +33 -0
  358. package/daemon/dist/server.js.map +1 -1
  359. package/daemon/dist/startup.d.ts.map +1 -1
  360. package/daemon/dist/startup.js +202 -8
  361. package/daemon/dist/startup.js.map +1 -1
  362. package/daemon/docs/reference/agent-spec.md +12 -5
  363. package/daemon/docs/reference/agent-startup-guide.md +9 -9
  364. package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
  365. package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
  366. package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
  367. package/daemon/specs/agents/development/qa/agent.yaml +1 -1
  368. package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
  369. package/daemon/specs/agents/product-management/pm/agent.yaml +4 -0
  370. package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
  371. package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
  372. package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
  373. package/daemon/specs/agents/shared/agent.yaml +17 -0
  374. package/daemon/specs/agents/shared/runtime/claude-mcp.fragment.json +12 -0
  375. package/daemon/specs/agents/shared/runtime/claude-settings.fragment.json +16 -0
  376. package/daemon/specs/agents/shared/runtime/codex-config.fragment.toml +5 -0
  377. package/daemon/specs/agents/shared/skills/claude-compact-in-place/SKILL.md +100 -0
  378. package/daemon/specs/agents/shared/skills/core/openrig-operator/SKILL.md +110 -0
  379. package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +44 -1
  380. package/daemon/specs/agents/shared/skills/mental-model-ha/SKILL.md +3 -0
  381. package/daemon/specs/agents/shared/skills/pods/orchestration-team/SKILL.md +3 -0
  382. package/daemon/specs/agents/shared/skills/rig-architect/SKILL.md +11 -1
  383. package/dist/bin-wrapper.js +0 -0
  384. package/dist/commands/capture.d.ts +7 -1
  385. package/dist/commands/capture.d.ts.map +1 -1
  386. package/dist/commands/capture.js +59 -1
  387. package/dist/commands/capture.js.map +1 -1
  388. package/dist/commands/compact-plan.d.ts +9 -0
  389. package/dist/commands/compact-plan.d.ts.map +1 -0
  390. package/dist/commands/compact-plan.js +354 -0
  391. package/dist/commands/compact-plan.js.map +1 -0
  392. package/dist/commands/context.d.ts +9 -0
  393. package/dist/commands/context.d.ts.map +1 -0
  394. package/dist/commands/context.js +220 -0
  395. package/dist/commands/context.js.map +1 -0
  396. package/dist/commands/expand.d.ts.map +1 -1
  397. package/dist/commands/expand.js +15 -4
  398. package/dist/commands/expand.js.map +1 -1
  399. package/dist/commands/heartbeat.d.ts +99 -0
  400. package/dist/commands/heartbeat.d.ts.map +1 -0
  401. package/dist/commands/heartbeat.js +393 -0
  402. package/dist/commands/heartbeat.js.map +1 -0
  403. package/dist/commands/project.d.ts +14 -0
  404. package/dist/commands/project.d.ts.map +1 -0
  405. package/dist/commands/project.js +157 -0
  406. package/dist/commands/project.js.map +1 -0
  407. package/dist/commands/ps.d.ts +20 -3
  408. package/dist/commands/ps.d.ts.map +1 -1
  409. package/dist/commands/ps.js +455 -33
  410. package/dist/commands/ps.js.map +1 -1
  411. package/dist/commands/queue.d.ts +16 -0
  412. package/dist/commands/queue.d.ts.map +1 -0
  413. package/dist/commands/queue.js +401 -0
  414. package/dist/commands/queue.js.map +1 -0
  415. package/dist/commands/restore-check.d.ts +9 -0
  416. package/dist/commands/restore-check.d.ts.map +1 -0
  417. package/dist/commands/restore-check.js +234 -0
  418. package/dist/commands/restore-check.js.map +1 -0
  419. package/dist/commands/restore-packet.d.ts +9 -0
  420. package/dist/commands/restore-packet.d.ts.map +1 -0
  421. package/dist/commands/restore-packet.js +383 -0
  422. package/dist/commands/restore-packet.js.map +1 -0
  423. package/dist/commands/restore.d.ts.map +1 -1
  424. package/dist/commands/restore.js +44 -1
  425. package/dist/commands/restore.js.map +1 -1
  426. package/dist/commands/seat.d.ts +5 -0
  427. package/dist/commands/seat.d.ts.map +1 -0
  428. package/dist/commands/seat.js +170 -0
  429. package/dist/commands/seat.js.map +1 -0
  430. package/dist/commands/send.d.ts +12 -1
  431. package/dist/commands/send.d.ts.map +1 -1
  432. package/dist/commands/send.js +93 -5
  433. package/dist/commands/send.js.map +1 -1
  434. package/dist/commands/setup.js +3 -3
  435. package/dist/commands/setup.js.map +1 -1
  436. package/dist/commands/specs.d.ts.map +1 -1
  437. package/dist/commands/specs.js +99 -16
  438. package/dist/commands/specs.js.map +1 -1
  439. package/dist/commands/stream.d.ts +12 -0
  440. package/dist/commands/stream.d.ts.map +1 -0
  441. package/dist/commands/stream.js +111 -0
  442. package/dist/commands/stream.js.map +1 -0
  443. package/dist/commands/up.d.ts.map +1 -1
  444. package/dist/commands/up.js +63 -3
  445. package/dist/commands/up.js.map +1 -1
  446. package/dist/commands/view.d.ts +12 -0
  447. package/dist/commands/view.d.ts.map +1 -0
  448. package/dist/commands/view.js +82 -0
  449. package/dist/commands/view.js.map +1 -0
  450. package/dist/commands/watchdog.d.ts +15 -0
  451. package/dist/commands/watchdog.d.ts.map +1 -0
  452. package/dist/commands/watchdog.js +120 -0
  453. package/dist/commands/watchdog.js.map +1 -0
  454. package/dist/commands/whoami.d.ts +8 -1
  455. package/dist/commands/whoami.d.ts.map +1 -1
  456. package/dist/commands/whoami.js +60 -1
  457. package/dist/commands/whoami.js.map +1 -1
  458. package/dist/commands/workflow.d.ts +17 -0
  459. package/dist/commands/workflow.d.ts.map +1 -0
  460. package/dist/commands/workflow.js +138 -0
  461. package/dist/commands/workflow.js.map +1 -0
  462. package/dist/cross-host-cli-helpers.d.ts +12 -0
  463. package/dist/cross-host-cli-helpers.d.ts.map +1 -0
  464. package/dist/cross-host-cli-helpers.js +48 -0
  465. package/dist/cross-host-cli-helpers.js.map +1 -0
  466. package/dist/cross-host-executor.d.ts +84 -0
  467. package/dist/cross-host-executor.d.ts.map +1 -0
  468. package/dist/cross-host-executor.js +138 -0
  469. package/dist/cross-host-executor.js.map +1 -0
  470. package/dist/host-registry.d.ts +50 -0
  471. package/dist/host-registry.d.ts.map +1 -0
  472. package/dist/host-registry.js +116 -0
  473. package/dist/host-registry.js.map +1 -0
  474. package/dist/index.d.ts +20 -0
  475. package/dist/index.d.ts.map +1 -1
  476. package/dist/index.js +24 -0
  477. package/dist/index.js.map +1 -1
  478. package/dist/mcp-server.d.ts.map +1 -1
  479. package/dist/mcp-server.js +22 -2
  480. package/dist/mcp-server.js.map +1 -1
  481. package/dist/restore-packet/claude-transcript-parser.d.ts +12 -0
  482. package/dist/restore-packet/claude-transcript-parser.d.ts.map +1 -0
  483. package/dist/restore-packet/claude-transcript-parser.js +221 -0
  484. package/dist/restore-packet/claude-transcript-parser.js.map +1 -0
  485. package/dist/restore-packet/codex-jsonl-parser.d.ts +11 -0
  486. package/dist/restore-packet/codex-jsonl-parser.d.ts.map +1 -0
  487. package/dist/restore-packet/codex-jsonl-parser.js +159 -0
  488. package/dist/restore-packet/codex-jsonl-parser.js.map +1 -0
  489. package/dist/restore-packet/omitted-records.d.ts +60 -0
  490. package/dist/restore-packet/omitted-records.d.ts.map +1 -0
  491. package/dist/restore-packet/omitted-records.js +116 -0
  492. package/dist/restore-packet/omitted-records.js.map +1 -0
  493. package/dist/restore-packet/packet-writer.d.ts +59 -0
  494. package/dist/restore-packet/packet-writer.d.ts.map +1 -0
  495. package/dist/restore-packet/packet-writer.js +224 -0
  496. package/dist/restore-packet/packet-writer.js.map +1 -0
  497. package/dist/restore-packet/redaction.d.ts +30 -0
  498. package/dist/restore-packet/redaction.d.ts.map +1 -0
  499. package/dist/restore-packet/redaction.js +71 -0
  500. package/dist/restore-packet/redaction.js.map +1 -0
  501. package/dist/restore-packet/runtime-detect.d.ts +19 -0
  502. package/dist/restore-packet/runtime-detect.d.ts.map +1 -0
  503. package/dist/restore-packet/runtime-detect.js +81 -0
  504. package/dist/restore-packet/runtime-detect.js.map +1 -0
  505. package/dist/restore-packet/schema-validator.d.ts +13 -0
  506. package/dist/restore-packet/schema-validator.d.ts.map +1 -0
  507. package/dist/restore-packet/schema-validator.js +245 -0
  508. package/dist/restore-packet/schema-validator.js.map +1 -0
  509. package/dist/restore-packet/types.d.ts +76 -0
  510. package/dist/restore-packet/types.d.ts.map +1 -0
  511. package/dist/restore-packet/types.js +15 -0
  512. package/dist/restore-packet/types.js.map +1 -0
  513. package/dist/schemas/restore-summary.schema.json +98 -0
  514. package/package.json +10 -3
  515. package/scripts/check-abi.mjs +123 -0
  516. package/ui/dist/assets/{index-DlMH-REm.css → index-Dec25siz.css} +1 -1
  517. package/ui/dist/assets/{index-Ccd-jwRN.js → index-GNYaWmBj.js} +2 -2
  518. package/ui/dist/index.html +2 -2
@@ -162,7 +162,7 @@ Error generating stack: `+u.message+`
162
162
  *
163
163
  * This source code is licensed under the ISC license.
164
164
  * See the LICENSE file in the root directory of this source tree.
165
- */const xA=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],yA=En("x",xA);async function vA(){const e=await fetch("/api/rigs/summary");if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}function vc(){return Rt({queryKey:["rigs","summary"],queryFn:vA})}async function bA(){const e=await fetch("/api/ps");if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}function Bg(){return Rt({queryKey:["ps"],queryFn:bA})}async function SA(e){const t=await fetch(`/api/rigs/${encodeURIComponent(e)}/nodes`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}function Tw(e){return Rt({queryKey:["rig",e,"nodes"],queryFn:()=>SA(e),enabled:!!e})}function Aw(e){var t,s,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(s=Aw(e[t]))&&(r&&(r+=" "),r+=s)}else for(s in e)e[s]&&(r&&(r+=" "),r+=s);return r}function Mw(){for(var e,t,s=0,r="",i=arguments.length;s<i;s++)(e=arguments[s])&&(t=Aw(e))&&(r&&(r+=" "),r+=t);return r}const wA=(e,t)=>{const s=new Array(e.length+t.length);for(let r=0;r<e.length;r++)s[r]=e[r];for(let r=0;r<t.length;r++)s[e.length+r]=t[r];return s},NA=(e,t)=>({classGroupId:e,validator:t}),kw=(e=new Map,t=null,s)=>({nextPart:e,validators:t,classGroupId:s}),Vd="-",Jb=[],jA="arbitrary..",EA=e=>{const t=_A(e),{conflictingClassGroups:s,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:d=>{if(d.startsWith("[")&&d.endsWith("]"))return CA(d);const f=d.split(Vd),m=f[0]===""&&f.length>1?1:0;return Ow(f,m,t)},getConflictingClassGroupIds:(d,f)=>{if(f){const m=r[d],h=s[d];return m?h?wA(h,m):m:h||Jb}return s[d]||Jb}}},Ow=(e,t,s)=>{if(e.length-t===0)return s.classGroupId;const i=e[t],l=s.nextPart.get(i);if(l){const h=Ow(e,t+1,l);if(h)return h}const d=s.validators;if(d===null)return;const f=t===0?e.join(Vd):e.slice(t).join(Vd),m=d.length;for(let h=0;h<m;h++){const v=d[h];if(v.validator(f))return v.classGroupId}},CA=e=>e.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),s=t.indexOf(":"),r=t.slice(0,s);return r?jA+r:void 0})(),_A=e=>{const{theme:t,classGroups:s}=e;return RA(s,t)},RA=(e,t)=>{const s=kw();for(const r in e){const i=e[r];Hg(i,s,r,t)}return s},Hg=(e,t,s,r)=>{const i=e.length;for(let l=0;l<i;l++){const d=e[l];TA(d,t,s,r)}},TA=(e,t,s,r)=>{if(typeof e=="string"){AA(e,t,s);return}if(typeof e=="function"){MA(e,t,s,r);return}kA(e,t,s,r)},AA=(e,t,s)=>{const r=e===""?t:Dw(t,e);r.classGroupId=s},MA=(e,t,s,r)=>{if(OA(e)){Hg(e(r),t,s,r);return}t.validators===null&&(t.validators=[]),t.validators.push(NA(s,e))},kA=(e,t,s,r)=>{const i=Object.entries(e),l=i.length;for(let d=0;d<l;d++){const[f,m]=i[d];Hg(m,Dw(t,f),s,r)}},Dw=(e,t)=>{let s=e;const r=t.split(Vd),i=r.length;for(let l=0;l<i;l++){const d=r[l];let f=s.nextPart.get(d);f||(f=kw(),s.nextPart.set(d,f)),s=f}return s},OA=e=>"isThemeGetter"in e&&e.isThemeGetter===!0,DA=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,s=Object.create(null),r=Object.create(null);const i=(l,d)=>{s[l]=d,t++,t>e&&(t=0,r=s,s=Object.create(null))};return{get(l){let d=s[l];if(d!==void 0)return d;if((d=r[l])!==void 0)return i(l,d),d},set(l,d){l in s?s[l]=d:i(l,d)}}},Wp="!",e1=":",LA=[],t1=(e,t,s,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:s,maybePostfixModifierPosition:r,isExternal:i}),zA=e=>{const{prefix:t,experimentalParseClassName:s}=e;let r=i=>{const l=[];let d=0,f=0,m=0,h;const v=i.length;for(let w=0;w<v;w++){const N=i[w];if(d===0&&f===0){if(N===e1){l.push(i.slice(m,w)),m=w+1;continue}if(N==="/"){h=w;continue}}N==="["?d++:N==="]"?d--:N==="("?f++:N===")"&&f--}const g=l.length===0?i:i.slice(m);let y=g,b=!1;g.endsWith(Wp)?(y=g.slice(0,-1),b=!0):g.startsWith(Wp)&&(y=g.slice(1),b=!0);const S=h&&h>m?h-m:void 0;return t1(l,b,y,S)};if(t){const i=t+e1,l=r;r=d=>d.startsWith(i)?l(d.slice(i.length)):t1(LA,!1,d,void 0,!0)}if(s){const i=r;r=l=>s({className:l,parseClassName:i})}return r},PA=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((s,r)=>{t.set(s,1e6+r)}),s=>{const r=[];let i=[];for(let l=0;l<s.length;l++){const d=s[l],f=d[0]==="[",m=t.has(d);f||m?(i.length>0&&(i.sort(),r.push(...i),i=[]),r.push(d)):i.push(d)}return i.length>0&&(i.sort(),r.push(...i)),r}},IA=e=>({cache:DA(e.cacheSize),parseClassName:zA(e),sortModifiers:PA(e),...EA(e)}),BA=/\s+/,HA=(e,t)=>{const{parseClassName:s,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:l}=t,d=[],f=e.trim().split(BA);let m="";for(let h=f.length-1;h>=0;h-=1){const v=f[h],{isExternal:g,modifiers:y,hasImportantModifier:b,baseClassName:S,maybePostfixModifierPosition:w}=s(v);if(g){m=v+(m.length>0?" "+m:m);continue}let N=!!w,E=r(N?S.substring(0,w):S);if(!E){if(!N){m=v+(m.length>0?" "+m:m);continue}if(E=r(S),!E){m=v+(m.length>0?" "+m:m);continue}N=!1}const T=y.length===0?"":y.length===1?y[0]:l(y).join(":"),_=b?T+Wp:T,R=_+E;if(d.indexOf(R)>-1)continue;d.push(R);const L=i(E,N);for(let I=0;I<L.length;++I){const P=L[I];d.push(_+P)}m=v+(m.length>0?" "+m:m)}return m},UA=(...e)=>{let t=0,s,r,i="";for(;t<e.length;)(s=e[t++])&&(r=Lw(s))&&(i&&(i+=" "),i+=r);return i},Lw=e=>{if(typeof e=="string")return e;let t,s="";for(let r=0;r<e.length;r++)e[r]&&(t=Lw(e[r]))&&(s&&(s+=" "),s+=t);return s},$A=(e,...t)=>{let s,r,i,l;const d=m=>{const h=t.reduce((v,g)=>g(v),e());return s=IA(h),r=s.cache.get,i=s.cache.set,l=f,f(m)},f=m=>{const h=r(m);if(h)return h;const v=HA(m,s);return i(m,v),v};return l=d,(...m)=>l(UA(...m))},qA=[],Ct=e=>{const t=s=>s[e]||qA;return t.isThemeGetter=!0,t},zw=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Pw=/^\((?:(\w[\w-]*):)?(.+)\)$/i,VA=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,GA=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,YA=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,QA=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,FA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,KA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,_a=e=>VA.test(e),ze=e=>!!e&&!Number.isNaN(Number(e)),Ra=e=>!!e&&Number.isInteger(Number(e)),hp=e=>e.endsWith("%")&&ze(e.slice(0,-1)),Ps=e=>GA.test(e),Iw=()=>!0,XA=e=>YA.test(e)&&!QA.test(e),Ug=()=>!1,ZA=e=>FA.test(e),WA=e=>KA.test(e),JA=e=>!ge(e)&&!ye(e),eM=e=>er(e,Uw,Ug),ge=e=>zw.test(e),_r=e=>er(e,$w,XA),n1=e=>er(e,lM,ze),tM=e=>er(e,Vw,Iw),nM=e=>er(e,qw,Ug),s1=e=>er(e,Bw,Ug),sM=e=>er(e,Hw,WA),ed=e=>er(e,Gw,ZA),ye=e=>Pw.test(e),_l=e=>si(e,$w),aM=e=>si(e,qw),a1=e=>si(e,Bw),rM=e=>si(e,Uw),iM=e=>si(e,Hw),td=e=>si(e,Gw,!0),oM=e=>si(e,Vw,!0),er=(e,t,s)=>{const r=zw.exec(e);return r?r[1]?t(r[1]):s(r[2]):!1},si=(e,t,s=!1)=>{const r=Pw.exec(e);return r?r[1]?t(r[1]):s:!1},Bw=e=>e==="position"||e==="percentage",Hw=e=>e==="image"||e==="url",Uw=e=>e==="length"||e==="size"||e==="bg-size",$w=e=>e==="length",lM=e=>e==="number",qw=e=>e==="family-name",Vw=e=>e==="number"||e==="weight",Gw=e=>e==="shadow",cM=()=>{const e=Ct("color"),t=Ct("font"),s=Ct("text"),r=Ct("font-weight"),i=Ct("tracking"),l=Ct("leading"),d=Ct("breakpoint"),f=Ct("container"),m=Ct("spacing"),h=Ct("radius"),v=Ct("shadow"),g=Ct("inset-shadow"),y=Ct("text-shadow"),b=Ct("drop-shadow"),S=Ct("blur"),w=Ct("perspective"),N=Ct("aspect"),E=Ct("ease"),T=Ct("animate"),_=()=>["auto","avoid","all","avoid-page","page","left","right","column"],R=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],L=()=>[...R(),ye,ge],I=()=>["auto","hidden","clip","visible","scroll"],P=()=>["auto","contain","none"],A=()=>[ye,ge,m],M=()=>[_a,"full","auto",...A()],q=()=>[Ra,"none","subgrid",ye,ge],z=()=>["auto",{span:["full",Ra,ye,ge]},Ra,ye,ge],Q=()=>[Ra,"auto",ye,ge],Y=()=>["auto","min","max","fr",ye,ge],B=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],V=()=>["start","end","center","stretch","center-safe","end-safe"],k=()=>["auto",...A()],U=()=>[_a,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...A()],$=()=>[_a,"screen","full","dvw","lvw","svw","min","max","fit",...A()],F=()=>[_a,"screen","full","lh","dvh","lvh","svh","min","max","fit",...A()],H=()=>[e,ye,ge],D=()=>[...R(),a1,s1,{position:[ye,ge]}],G=()=>["no-repeat",{repeat:["","x","y","space","round"]}],J=()=>["auto","cover","contain",rM,eM,{size:[ye,ge]}],se=()=>[hp,_l,_r],oe=()=>["","none","full",h,ye,ge],ce=()=>["",ze,_l,_r],de=()=>["solid","dashed","dotted","double"],ue=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],fe=()=>[ze,hp,a1,s1],Ce=()=>["","none",S,ye,ge],be=()=>["none",ze,ye,ge],xe=()=>["none",ze,ye,ge],ve=()=>[ze,ye,ge],Te=()=>[_a,"full",...A()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Ps],breakpoint:[Ps],color:[Iw],container:[Ps],"drop-shadow":[Ps],ease:["in","out","in-out"],font:[JA],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Ps],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Ps],shadow:[Ps],spacing:["px",ze],text:[Ps],"text-shadow":[Ps],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",_a,ge,ye,N]}],container:["container"],columns:[{columns:[ze,ge,ye,f]}],"break-after":[{"break-after":_()}],"break-before":[{"break-before":_()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:L()}],overflow:[{overflow:I()}],"overflow-x":[{"overflow-x":I()}],"overflow-y":[{"overflow-y":I()}],overscroll:[{overscroll:P()}],"overscroll-x":[{"overscroll-x":P()}],"overscroll-y":[{"overscroll-y":P()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:M()}],"inset-x":[{"inset-x":M()}],"inset-y":[{"inset-y":M()}],start:[{"inset-s":M(),start:M()}],end:[{"inset-e":M(),end:M()}],"inset-bs":[{"inset-bs":M()}],"inset-be":[{"inset-be":M()}],top:[{top:M()}],right:[{right:M()}],bottom:[{bottom:M()}],left:[{left:M()}],visibility:["visible","invisible","collapse"],z:[{z:[Ra,"auto",ye,ge]}],basis:[{basis:[_a,"full","auto",f,...A()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[ze,_a,"auto","initial","none",ge]}],grow:[{grow:["",ze,ye,ge]}],shrink:[{shrink:["",ze,ye,ge]}],order:[{order:[Ra,"first","last","none",ye,ge]}],"grid-cols":[{"grid-cols":q()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":Q()}],"col-end":[{"col-end":Q()}],"grid-rows":[{"grid-rows":q()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":Q()}],"row-end":[{"row-end":Q()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Y()}],"auto-rows":[{"auto-rows":Y()}],gap:[{gap:A()}],"gap-x":[{"gap-x":A()}],"gap-y":[{"gap-y":A()}],"justify-content":[{justify:[...B(),"normal"]}],"justify-items":[{"justify-items":[...V(),"normal"]}],"justify-self":[{"justify-self":["auto",...V()]}],"align-content":[{content:["normal",...B()]}],"align-items":[{items:[...V(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...V(),{baseline:["","last"]}]}],"place-content":[{"place-content":B()}],"place-items":[{"place-items":[...V(),"baseline"]}],"place-self":[{"place-self":["auto",...V()]}],p:[{p:A()}],px:[{px:A()}],py:[{py:A()}],ps:[{ps:A()}],pe:[{pe:A()}],pbs:[{pbs:A()}],pbe:[{pbe:A()}],pt:[{pt:A()}],pr:[{pr:A()}],pb:[{pb:A()}],pl:[{pl:A()}],m:[{m:k()}],mx:[{mx:k()}],my:[{my:k()}],ms:[{ms:k()}],me:[{me:k()}],mbs:[{mbs:k()}],mbe:[{mbe:k()}],mt:[{mt:k()}],mr:[{mr:k()}],mb:[{mb:k()}],ml:[{ml:k()}],"space-x":[{"space-x":A()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":A()}],"space-y-reverse":["space-y-reverse"],size:[{size:U()}],"inline-size":[{inline:["auto",...$()]}],"min-inline-size":[{"min-inline":["auto",...$()]}],"max-inline-size":[{"max-inline":["none",...$()]}],"block-size":[{block:["auto",...F()]}],"min-block-size":[{"min-block":["auto",...F()]}],"max-block-size":[{"max-block":["none",...F()]}],w:[{w:[f,"screen",...U()]}],"min-w":[{"min-w":[f,"screen","none",...U()]}],"max-w":[{"max-w":[f,"screen","none","prose",{screen:[d]},...U()]}],h:[{h:["screen","lh",...U()]}],"min-h":[{"min-h":["screen","lh","none",...U()]}],"max-h":[{"max-h":["screen","lh",...U()]}],"font-size":[{text:["base",s,_l,_r]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,oM,tM]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",hp,ge]}],"font-family":[{font:[aM,nM,t]}],"font-features":[{"font-features":[ge]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[i,ye,ge]}],"line-clamp":[{"line-clamp":[ze,"none",ye,n1]}],leading:[{leading:[l,...A()]}],"list-image":[{"list-image":["none",ye,ge]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ye,ge]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:H()}],"text-color":[{text:H()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...de(),"wavy"]}],"text-decoration-thickness":[{decoration:[ze,"from-font","auto",ye,_r]}],"text-decoration-color":[{decoration:H()}],"underline-offset":[{"underline-offset":[ze,"auto",ye,ge]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:A()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ye,ge]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ye,ge]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:D()}],"bg-repeat":[{bg:G()}],"bg-size":[{bg:J()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ra,ye,ge],radial:["",ye,ge],conic:[Ra,ye,ge]},iM,sM]}],"bg-color":[{bg:H()}],"gradient-from-pos":[{from:se()}],"gradient-via-pos":[{via:se()}],"gradient-to-pos":[{to:se()}],"gradient-from":[{from:H()}],"gradient-via":[{via:H()}],"gradient-to":[{to:H()}],rounded:[{rounded:oe()}],"rounded-s":[{"rounded-s":oe()}],"rounded-e":[{"rounded-e":oe()}],"rounded-t":[{"rounded-t":oe()}],"rounded-r":[{"rounded-r":oe()}],"rounded-b":[{"rounded-b":oe()}],"rounded-l":[{"rounded-l":oe()}],"rounded-ss":[{"rounded-ss":oe()}],"rounded-se":[{"rounded-se":oe()}],"rounded-ee":[{"rounded-ee":oe()}],"rounded-es":[{"rounded-es":oe()}],"rounded-tl":[{"rounded-tl":oe()}],"rounded-tr":[{"rounded-tr":oe()}],"rounded-br":[{"rounded-br":oe()}],"rounded-bl":[{"rounded-bl":oe()}],"border-w":[{border:ce()}],"border-w-x":[{"border-x":ce()}],"border-w-y":[{"border-y":ce()}],"border-w-s":[{"border-s":ce()}],"border-w-e":[{"border-e":ce()}],"border-w-bs":[{"border-bs":ce()}],"border-w-be":[{"border-be":ce()}],"border-w-t":[{"border-t":ce()}],"border-w-r":[{"border-r":ce()}],"border-w-b":[{"border-b":ce()}],"border-w-l":[{"border-l":ce()}],"divide-x":[{"divide-x":ce()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ce()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...de(),"hidden","none"]}],"divide-style":[{divide:[...de(),"hidden","none"]}],"border-color":[{border:H()}],"border-color-x":[{"border-x":H()}],"border-color-y":[{"border-y":H()}],"border-color-s":[{"border-s":H()}],"border-color-e":[{"border-e":H()}],"border-color-bs":[{"border-bs":H()}],"border-color-be":[{"border-be":H()}],"border-color-t":[{"border-t":H()}],"border-color-r":[{"border-r":H()}],"border-color-b":[{"border-b":H()}],"border-color-l":[{"border-l":H()}],"divide-color":[{divide:H()}],"outline-style":[{outline:[...de(),"none","hidden"]}],"outline-offset":[{"outline-offset":[ze,ye,ge]}],"outline-w":[{outline:["",ze,_l,_r]}],"outline-color":[{outline:H()}],shadow:[{shadow:["","none",v,td,ed]}],"shadow-color":[{shadow:H()}],"inset-shadow":[{"inset-shadow":["none",g,td,ed]}],"inset-shadow-color":[{"inset-shadow":H()}],"ring-w":[{ring:ce()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:H()}],"ring-offset-w":[{"ring-offset":[ze,_r]}],"ring-offset-color":[{"ring-offset":H()}],"inset-ring-w":[{"inset-ring":ce()}],"inset-ring-color":[{"inset-ring":H()}],"text-shadow":[{"text-shadow":["none",y,td,ed]}],"text-shadow-color":[{"text-shadow":H()}],opacity:[{opacity:[ze,ye,ge]}],"mix-blend":[{"mix-blend":[...ue(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ue()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[ze]}],"mask-image-linear-from-pos":[{"mask-linear-from":fe()}],"mask-image-linear-to-pos":[{"mask-linear-to":fe()}],"mask-image-linear-from-color":[{"mask-linear-from":H()}],"mask-image-linear-to-color":[{"mask-linear-to":H()}],"mask-image-t-from-pos":[{"mask-t-from":fe()}],"mask-image-t-to-pos":[{"mask-t-to":fe()}],"mask-image-t-from-color":[{"mask-t-from":H()}],"mask-image-t-to-color":[{"mask-t-to":H()}],"mask-image-r-from-pos":[{"mask-r-from":fe()}],"mask-image-r-to-pos":[{"mask-r-to":fe()}],"mask-image-r-from-color":[{"mask-r-from":H()}],"mask-image-r-to-color":[{"mask-r-to":H()}],"mask-image-b-from-pos":[{"mask-b-from":fe()}],"mask-image-b-to-pos":[{"mask-b-to":fe()}],"mask-image-b-from-color":[{"mask-b-from":H()}],"mask-image-b-to-color":[{"mask-b-to":H()}],"mask-image-l-from-pos":[{"mask-l-from":fe()}],"mask-image-l-to-pos":[{"mask-l-to":fe()}],"mask-image-l-from-color":[{"mask-l-from":H()}],"mask-image-l-to-color":[{"mask-l-to":H()}],"mask-image-x-from-pos":[{"mask-x-from":fe()}],"mask-image-x-to-pos":[{"mask-x-to":fe()}],"mask-image-x-from-color":[{"mask-x-from":H()}],"mask-image-x-to-color":[{"mask-x-to":H()}],"mask-image-y-from-pos":[{"mask-y-from":fe()}],"mask-image-y-to-pos":[{"mask-y-to":fe()}],"mask-image-y-from-color":[{"mask-y-from":H()}],"mask-image-y-to-color":[{"mask-y-to":H()}],"mask-image-radial":[{"mask-radial":[ye,ge]}],"mask-image-radial-from-pos":[{"mask-radial-from":fe()}],"mask-image-radial-to-pos":[{"mask-radial-to":fe()}],"mask-image-radial-from-color":[{"mask-radial-from":H()}],"mask-image-radial-to-color":[{"mask-radial-to":H()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":R()}],"mask-image-conic-pos":[{"mask-conic":[ze]}],"mask-image-conic-from-pos":[{"mask-conic-from":fe()}],"mask-image-conic-to-pos":[{"mask-conic-to":fe()}],"mask-image-conic-from-color":[{"mask-conic-from":H()}],"mask-image-conic-to-color":[{"mask-conic-to":H()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:D()}],"mask-repeat":[{mask:G()}],"mask-size":[{mask:J()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",ye,ge]}],filter:[{filter:["","none",ye,ge]}],blur:[{blur:Ce()}],brightness:[{brightness:[ze,ye,ge]}],contrast:[{contrast:[ze,ye,ge]}],"drop-shadow":[{"drop-shadow":["","none",b,td,ed]}],"drop-shadow-color":[{"drop-shadow":H()}],grayscale:[{grayscale:["",ze,ye,ge]}],"hue-rotate":[{"hue-rotate":[ze,ye,ge]}],invert:[{invert:["",ze,ye,ge]}],saturate:[{saturate:[ze,ye,ge]}],sepia:[{sepia:["",ze,ye,ge]}],"backdrop-filter":[{"backdrop-filter":["","none",ye,ge]}],"backdrop-blur":[{"backdrop-blur":Ce()}],"backdrop-brightness":[{"backdrop-brightness":[ze,ye,ge]}],"backdrop-contrast":[{"backdrop-contrast":[ze,ye,ge]}],"backdrop-grayscale":[{"backdrop-grayscale":["",ze,ye,ge]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[ze,ye,ge]}],"backdrop-invert":[{"backdrop-invert":["",ze,ye,ge]}],"backdrop-opacity":[{"backdrop-opacity":[ze,ye,ge]}],"backdrop-saturate":[{"backdrop-saturate":[ze,ye,ge]}],"backdrop-sepia":[{"backdrop-sepia":["",ze,ye,ge]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":A()}],"border-spacing-x":[{"border-spacing-x":A()}],"border-spacing-y":[{"border-spacing-y":A()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",ye,ge]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[ze,"initial",ye,ge]}],ease:[{ease:["linear","initial",E,ye,ge]}],delay:[{delay:[ze,ye,ge]}],animate:[{animate:["none",T,ye,ge]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[w,ye,ge]}],"perspective-origin":[{"perspective-origin":L()}],rotate:[{rotate:be()}],"rotate-x":[{"rotate-x":be()}],"rotate-y":[{"rotate-y":be()}],"rotate-z":[{"rotate-z":be()}],scale:[{scale:xe()}],"scale-x":[{"scale-x":xe()}],"scale-y":[{"scale-y":xe()}],"scale-z":[{"scale-z":xe()}],"scale-3d":["scale-3d"],skew:[{skew:ve()}],"skew-x":[{"skew-x":ve()}],"skew-y":[{"skew-y":ve()}],transform:[{transform:[ye,ge,"","none","gpu","cpu"]}],"transform-origin":[{origin:L()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Te()}],"translate-x":[{"translate-x":Te()}],"translate-y":[{"translate-y":Te()}],"translate-z":[{"translate-z":Te()}],"translate-none":["translate-none"],accent:[{accent:H()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:H()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ye,ge]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":A()}],"scroll-mx":[{"scroll-mx":A()}],"scroll-my":[{"scroll-my":A()}],"scroll-ms":[{"scroll-ms":A()}],"scroll-me":[{"scroll-me":A()}],"scroll-mbs":[{"scroll-mbs":A()}],"scroll-mbe":[{"scroll-mbe":A()}],"scroll-mt":[{"scroll-mt":A()}],"scroll-mr":[{"scroll-mr":A()}],"scroll-mb":[{"scroll-mb":A()}],"scroll-ml":[{"scroll-ml":A()}],"scroll-p":[{"scroll-p":A()}],"scroll-px":[{"scroll-px":A()}],"scroll-py":[{"scroll-py":A()}],"scroll-ps":[{"scroll-ps":A()}],"scroll-pe":[{"scroll-pe":A()}],"scroll-pbs":[{"scroll-pbs":A()}],"scroll-pbe":[{"scroll-pbe":A()}],"scroll-pt":[{"scroll-pt":A()}],"scroll-pr":[{"scroll-pr":A()}],"scroll-pb":[{"scroll-pb":A()}],"scroll-pl":[{"scroll-pl":A()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ye,ge]}],fill:[{fill:["none",...H()]}],"stroke-w":[{stroke:[ze,_l,_r,n1]}],stroke:[{stroke:["none",...H()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},uM=$A(cM);function Re(...e){return uM(Mw(e))}function Gs(e,t=6){return e.length<=t?e:e.slice(-t)}function ds(e){if(!e)return null;const t=e.split(".");return t.length<=1?e:t[0]??e}function fs(e){return e&&e.length>0?Gs(e):"ungrouped"}function Qr(e){if(!e)return"unknown";const t=e.split(".");return t.length<=1?e:t.at(-1)??e}function Jp(e){switch(e){case"ready":return"text-green-600";case"pending":return"text-amber-500";case"attention_required":return"text-orange-500";case"failed":return"text-red-600";default:return"text-stone-400"}}function dM(e){switch(e){case"running":return"text-green-600";case"partial":return"text-amber-500";case"stopped":return"text-stone-400";default:return"text-stone-400"}}function fM(e){return e.some(t=>t.startupStatus==="failed")?"failed":e.some(t=>t.startupStatus==="attention_required")?"attention_required":e.some(t=>t.startupStatus==="pending")?"pending":e.some(t=>t.startupStatus==="ready")?"ready":null}function hM(e){const t=e.match(/^\/rigs\/([^/]+)/);return(t==null?void 0:t[1])??null}function $g({expanded:e,label:t,onClick:s}){return c.jsx("button",{type:"button",onClick:r=>{r.stopPropagation(),s()},"aria-label":`${e?"Collapse":"Expand"} ${t}`,className:"inline-flex h-5 w-5 items-center justify-center text-stone-500 transition-colors hover:text-stone-900",children:c.jsx(Rw,{className:Re("h-4 w-4 transition-transform duration-150",e&&"rotate-90")})})}function Ql({kind:e,statusClass:t,testId:s}){const i={"data-testid":s,className:Re(e==="rig"?"h-3.5 w-3.5":"h-2.5 w-2.5","shrink-0",t),strokeWidth:1.8};switch(e){case"environment":return c.jsx(iA,{...i});case"rig":return c.jsx(KT,{...i});case"pod":return c.jsx(lA,{...i});case"infrastructure":return c.jsx(mA,{...i});default:return c.jsx(eA,{...i})}}function mM({podId:e,nodes:t,selection:s,onSelect:r,autoExpand:i}){var v;const[l,d]=j.useState(i),f=ds((v=t[0])==null?void 0:v.logicalId)??fs(e),m=fM(t);j.useEffect(()=>{i&&d(!0)},[i]);const h=[...t].sort((g,y)=>Qr(g.logicalId).localeCompare(Qr(y.logicalId)));return c.jsxs("div",{"data-testid":`pod-branch-${f}`,children:[c.jsxs("div",{className:"flex cursor-pointer items-center gap-2 rounded-sm px-4 py-1.5 hover:bg-stone-100",onClick:()=>d(g=>!g),children:[c.jsx($g,{expanded:l,label:`pod ${f}`,onClick:()=>d(g=>!g)}),c.jsx(Ql,{kind:"pod",statusClass:Jp(m),testId:`pod-icon-${f}`}),c.jsx("span",{className:"font-mono text-[10px] font-semibold uppercase tracking-[0.12em] text-stone-600",children:f})]}),l&&c.jsx("div",{className:"ml-4 border-l border-stone-200",children:h.map(g=>{const y=(s==null?void 0:s.type)==="node"&&s.rigId===g.rigId&&s.logicalId===g.logicalId,b=Qr(g.logicalId);return c.jsxs("button",{type:"button",onClick:()=>r({type:"node",rigId:g.rigId,logicalId:g.logicalId}),"data-testid":`node-${g.logicalId}`,className:Re("flex w-full items-center gap-2 rounded-sm px-4 py-1.5 text-left transition-colors hover:bg-stone-100",y&&"bg-stone-200/80"),children:[c.jsx(Ql,{kind:g.nodeKind==="infrastructure"?"infrastructure":"agent",statusClass:Jp(g.startupStatus),testId:`node-icon-${g.logicalId}`}),c.jsx("span",{className:"font-mono text-[10px] text-stone-700 truncate",children:b}),c.jsx("span",{className:"ml-auto shrink-0 font-mono text-[8px] uppercase text-stone-400",children:g.nodeKind==="infrastructure"?"INFRA":(g.runtime??"").replace("claude-code","claude")})]},g.logicalId)})})]})}function pM({rig:e,ps:t,selection:s,onSelect:r,onClose:i,autoExpand:l}){const[d,f]=j.useState(l),m=(t==null?void 0:t.status)??"stopped",{data:h,isLoading:v}=Tw(d?e.id:null),g=(s==null?void 0:s.type)==="rig"&&s.rigId===e.id;j.useEffect(()=>{l&&f(!0)},[l]);const y=j.useMemo(()=>{if(!h||h.length===0)return[];const b=new Map;for(const S of h){const w=S.podId??"__ungrouped__";b.has(w)||b.set(w,[]),b.get(w).push(S)}return[...b.entries()].sort(([S,w],[N,E])=>{var R,L;const T=S==="__ungrouped__"?"ungrouped":ds((R=w[0])==null?void 0:R.logicalId)??fs(S),_=N==="__ungrouped__"?"ungrouped":ds((L=E[0])==null?void 0:L.logicalId)??fs(N);return T.localeCompare(_)})},[h]);return c.jsxs("div",{"data-testid":`rig-tree-${e.name}`,children:[c.jsxs("div",{className:Re("flex cursor-pointer items-center gap-2 rounded-sm px-4 py-1.5 hover:bg-stone-100",g&&"bg-stone-200/70"),onClick:()=>f(b=>!b),children:[c.jsx($g,{expanded:d,label:`rig ${e.name}`,onClick:()=>f(b=>!b)}),c.jsx(Ql,{kind:"rig",statusClass:dM(m),testId:`rig-icon-${e.name}`}),c.jsx(yc,{to:"/rigs/$rigId",params:{rigId:e.id},onClick:()=>{(s==null?void 0:s.type)!=="discovery"&&r({type:"rig",rigId:e.id}),i()},className:Re("flex-1 truncate font-mono text-[11px] font-semibold text-stone-900",g&&"underline underline-offset-2"),children:e.name})]}),d&&c.jsxs("div",{className:"ml-4 border-l border-stone-200",children:[v&&c.jsx("div",{className:"px-4 py-1.5 font-mono text-[9px] text-stone-400",children:"Loading..."}),!v&&y.length===0&&c.jsx("div",{className:"px-4 py-1.5 font-mono text-[9px] text-stone-400",children:"No nodes"}),y.map(([b,S])=>b==="__ungrouped__"?c.jsx("div",{children:S.map(w=>{const N=(s==null?void 0:s.type)==="node"&&s.rigId===w.rigId&&s.logicalId===w.logicalId,E=Qr(w.logicalId);return c.jsxs("button",{type:"button",onClick:()=>r({type:"node",rigId:w.rigId,logicalId:w.logicalId}),"data-testid":`node-${w.logicalId}`,className:Re("flex w-full items-center gap-2 rounded-sm px-4 py-1.5 text-left transition-colors hover:bg-stone-100",N&&"bg-stone-200/80"),children:[c.jsx(Ql,{kind:w.nodeKind==="infrastructure"?"infrastructure":"agent",statusClass:Jp(w.startupStatus),testId:`node-icon-${w.logicalId}`}),c.jsx("span",{className:"font-mono text-[10px] text-stone-700 truncate",children:E})]},w.logicalId)})},b):c.jsx(mM,{podId:b,nodes:S,selection:s,onSelect:r,autoExpand:d||(s==null?void 0:s.type)==="node"&&s.rigId===e.id&&S.some(w=>w.logicalId===s.logicalId)},b))]})]})}function gM({rigs:e,psMap:t,selection:s,onSelect:r,onClose:i,currentRigId:l}){const[d,f]=j.useState(!0);return c.jsxs("div",{"data-testid":"environment-branch-local",children:[c.jsxs("div",{className:"flex cursor-pointer items-center gap-2 rounded-sm px-3 py-1.5 hover:bg-stone-100",onClick:()=>f(m=>!m),children:[c.jsx($g,{expanded:d,label:"environment Local",onClick:()=>f(m=>!m)}),c.jsx(Ql,{kind:"environment",statusClass:"text-stone-500",testId:"environment-icon-local"}),c.jsx("span",{className:"font-mono text-[11px] font-semibold uppercase tracking-[0.12em] text-stone-700",children:"env: local"})]}),d&&c.jsx("div",{className:"ml-4 border-l border-stone-200",children:!e||e.length===0?c.jsx("div",{className:"px-4 py-3 font-mono text-[10px] text-stone-400",children:"No rigs"}):e.map((m,h)=>c.jsx(pM,{rig:m,ps:t.get(m.id),selection:s,onSelect:r,onClose:i,autoExpand:m.id===l},m.id))})]})}function xM({rigs:e,psMap:t,selection:s,onSelect:r,onClose:i,currentRigId:l}){return c.jsx(c.Fragment,{children:c.jsx("div",{className:"flex-1 overflow-y-auto py-2",children:c.jsx(gM,{rigs:e,psMap:t,selection:s,onSelect:r,onClose:i,currentRigId:l})})})}function yM({open:e,onClose:t,selection:s,onSelect:r,desktopMode:i="full",onDesktopToggle:l=()=>{}}){const f=df().location.pathname,m=hM(f),{data:h}=vc(),{data:v}=Bg(),g=new Map((v??[]).map(y=>[y.rigId,y]));return c.jsx("aside",{"data-testid":"explorer",className:Re("border-r border-stone-300/25 flex z-20 overflow-hidden","bg-[rgba(250,249,245,0.035)] supports-[backdrop-filter]:bg-[rgba(250,249,245,0.018)] backdrop-blur-[14px] backdrop-saturate-75 shadow-[6px_0_14px_rgba(46,52,46,0.04)]","fixed top-14 bottom-0 left-0 transition-transform duration-200 ease-tactical w-72 max-w-[80vw]",e?"translate-x-0":"-translate-x-full",i==="full"&&"lg:absolute lg:top-0 lg:bottom-0 lg:left-0 lg:w-72 lg:max-w-none lg:translate-x-0",i==="hidden"&&"lg:absolute lg:top-0 lg:bottom-0 lg:left-0 lg:w-12 lg:max-w-none lg:translate-x-0"),children:c.jsxs("div",{className:"relative flex h-full w-full flex-col",children:[c.jsx("button",{type:"button","data-testid":"explorer-edge-toggle","aria-label":i==="full"?"Collapse explorer":"Expand explorer",onClick:l,className:Re("hidden lg:flex absolute z-10 h-8 w-8 items-center justify-center rounded-full border border-stone-300 bg-background/90 text-stone-700","shadow-[0_2px_8px_rgba(41,37,36,0.08)] backdrop-blur-sm transition-colors hover:bg-stone-100 hover:text-stone-900",i==="full"?"right-2 top-3":"left-1/2 top-3 -translate-x-1/2"),children:i==="full"?c.jsx(ZT,{className:"h-4 w-4"}):c.jsx(Rw,{className:"h-4 w-4"})}),i==="full"?c.jsx(xM,{rigs:h,psMap:g,selection:s,onSelect:r,onClose:t,currentRigId:m}):c.jsx("div",{className:"hidden h-full w-full lg:block"})]})})}const vM="modulepreload",bM=function(e){return"/"+e},r1={},SM=function(t,s,r){let i=Promise.resolve();if(s&&s.length>0){let d=function(h){return Promise.all(h.map(v=>Promise.resolve(v).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),m=(f==null?void 0:f.nonce)||(f==null?void 0:f.getAttribute("nonce"));i=d(s.map(h=>{if(h=bM(h),h in r1)return;r1[h]=!0;const v=h.endsWith(".css"),g=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${g}`))return;const y=document.createElement("link");if(y.rel=v?"stylesheet":vM,v||(y.as="script"),y.crossOrigin="",y.href=h,m&&y.setAttribute("nonce",m),document.head.appendChild(y),v)return new Promise((b,S)=>{y.addEventListener("load",b),y.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${h}`)))})}))}function l(d){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=d,window.dispatchEvent(f),!f.defaultPrevented)throw d}return i.then(d=>{for(const f of d||[])f.status==="rejected"&&l(f.reason);return t().catch(l)})};async function wM(e){const t=await fetch(`/api/rigs/${encodeURIComponent(e)}/snapshots`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}function NM(e){return Rt({queryKey:["rig",e,"snapshots"],queryFn:()=>wM(e),enabled:!!e})}class eg extends Error{constructor(s){var i;const r=((i=s.errors)==null?void 0:i.join(", "))??s.message??"Import failed";super(r);bl(this,"errors");bl(this,"warnings");bl(this,"code");this.name="ImportError",this.code=s.code??"unknown",this.errors=s.errors??(s.message?[s.message]:["Import failed"]),this.warnings=s.warnings??[]}}class Yw extends Error{constructor(s,r){super(s.error??`HTTP ${r}`);bl(this,"code");this.name="RestoreError",this.code=s.code??"unknown"}}function jM(e){const t=Tt();return Ht({mutationFn:async()=>{const s=await fetch(`/api/rigs/${encodeURIComponent(e)}/snapshots`,{method:"POST"});if(!s.ok){const r=await s.json().catch(()=>({}));throw new Error(r.error??`Snapshot failed (HTTP ${s.status})`)}return s.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["rig",e,"snapshots"]}),t.invalidateQueries({queryKey:["rigs","summary"]})}})}function EM(e){const t=Tt();return Ht({mutationFn:async s=>{const r=await fetch(`/api/rigs/${encodeURIComponent(e)}/restore/${encodeURIComponent(s)}`,{method:"POST"});if(!r.ok){const i=await r.json().catch(()=>({}));throw new Yw(i,r.status)}return r.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["rig",e]})}})}function CM(e){const t=Tt();return Ht({mutationFn:async()=>{const s=await fetch("/api/down",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rigId:e})}),r=await s.json().catch(()=>({}));if(!s.ok)throw new Error(r.error??`Teardown failed (HTTP ${s.status})`);if(Array.isArray(r.errors)&&r.errors.length>0)throw new Error(r.errors.join("; "));return r},onSuccess:()=>{t.invalidateQueries({queryKey:["rigs","summary"]}),t.invalidateQueries({queryKey:["ps"]})}})}function _M(e){const t=Tt();return Ht({mutationFn:async()=>{const s=await fetch(`/api/rigs/${encodeURIComponent(e)}/up`,{method:"POST"}),r=await s.json().catch(()=>({}));if(!s.ok)throw new Error(r.error??`Start failed (HTTP ${s.status})`);return r},onSuccess:()=>{t.invalidateQueries({queryKey:["rigs","summary"]}),t.invalidateQueries({queryKey:["ps"]}),t.invalidateQueries({queryKey:["rig",e]})}})}function RM(){const e=Tt();return Ht({mutationFn:async({yaml:t,rigRoot:s})=>{const r={"Content-Type":"text/yaml"};s&&(r["X-Rig-Root"]=s);const i=await fetch("/api/rigs/import",{method:"POST",headers:r,body:t});if(!i.ok){const l=await i.json().catch(()=>({}));throw l.code==="cycle_error"?new eg({...l,errors:l.errors??["Cycle detected in rig topology"]}):new eg(l)}return i.json()},onSuccess:()=>{e.invalidateQueries({queryKey:["rigs","summary"]})}})}function Qw(){const e=Tt();return Ht({mutationFn:async({rigId:t,pod:s,crossPodEdges:r})=>{const i=await fetch(`/api/rigs/${encodeURIComponent(t)}/expand`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pod:s,crossPodEdges:r})}),l=await i.json();if(i.status>=400||!l.ok)throw new Error(l.error??`Expansion failed (HTTP ${i.status})`);return l},onSuccess:(t,s)=>{e.invalidateQueries({queryKey:["rigs","summary"]}),e.invalidateQueries({queryKey:["ps"]}),e.invalidateQueries({queryKey:["rig",s.rigId,"nodes"]}),e.invalidateQueries({queryKey:["rig",s.rigId,"graph"]})}})}function TM(){const e=Tt();return Ht({mutationFn:async t=>{const s=await fetch(`/api/specs/library/${encodeURIComponent(t)}`,{method:"DELETE"}),r=await s.json().catch(()=>({}));if(!s.ok)throw new Error(r.error??`Remove failed (HTTP ${s.status})`);return r},onSuccess:()=>{e.invalidateQueries({queryKey:["spec-library"]})}})}function AM(){const e=Tt();return Ht({mutationFn:async({entryId:t,name:s})=>{const r=await fetch(`/api/specs/library/${encodeURIComponent(t)}/rename`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:s})}),i=await r.json().catch(()=>({}));if(!r.ok)throw new Error(i.error??`Rename failed (HTTP ${r.status})`);return i},onSuccess:()=>{e.invalidateQueries({queryKey:["spec-library"]})}})}function Fw(e){switch(e){case"resumed":return"text-success";case"rebuilt":return"text-success";case"fresh":return"text-foreground-muted";case"failed":return"text-destructive";case"checkpoint_written":return"text-success";case"fresh_no_checkpoint":return"text-foreground-muted";default:return"text-foreground-muted"}}function i1(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function ff(...e){return t=>{let s=!1;const r=e.map(i=>{const l=i1(i,t);return!s&&typeof l=="function"&&(s=!0),l});if(s)return()=>{for(let i=0;i<r.length;i++){const l=r[i];typeof l=="function"?l():i1(e[i],null)}}}}function ai(...e){return j.useCallback(ff(...e),e)}var MM=Symbol.for("react.lazy"),Gd=bg[" use ".trim().toString()];function kM(e){return typeof e=="object"&&e!==null&&"then"in e}function Kw(e){return e!=null&&typeof e=="object"&&"$$typeof"in e&&e.$$typeof===MM&&"_payload"in e&&kM(e._payload)}function OM(e){const t=LM(e),s=j.forwardRef((r,i)=>{let{children:l,...d}=r;Kw(l)&&typeof Gd=="function"&&(l=Gd(l._payload));const f=j.Children.toArray(l),m=f.find(PM);if(m){const h=m.props.children,v=f.map(g=>g===m?j.Children.count(h)>1?j.Children.only(null):j.isValidElement(h)?h.props.children:null:g);return c.jsx(t,{...d,ref:i,children:j.isValidElement(h)?j.cloneElement(h,void 0,v):null})}return c.jsx(t,{...d,ref:i,children:l})});return s.displayName=`${e}.Slot`,s}var DM=OM("Slot");function LM(e){const t=j.forwardRef((s,r)=>{let{children:i,...l}=s;if(Kw(i)&&typeof Gd=="function"&&(i=Gd(i._payload)),j.isValidElement(i)){const d=BM(i),f=IM(l,i.props);return i.type!==j.Fragment&&(f.ref=r?ff(r,d):d),j.cloneElement(i,f)}return j.Children.count(i)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var zM=Symbol("radix.slottable");function PM(e){return j.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===zM}function IM(e,t){const s={...t};for(const r in t){const i=e[r],l=t[r];/^on[A-Z]/.test(r)?i&&l?s[r]=(...f)=>{const m=l(...f);return i(...f),m}:i&&(s[r]=i):r==="style"?s[r]={...i,...l}:r==="className"&&(s[r]=[i,l].filter(Boolean).join(" "))}return{...e,...s}}function BM(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,s=t&&"isReactWarning"in t&&t.isReactWarning;return s?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,s=t&&"isReactWarning"in t&&t.isReactWarning,s?e.props.ref:e.props.ref||e.ref)}const o1=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,l1=Mw,Xw=(e,t)=>s=>{var r;if((t==null?void 0:t.variants)==null)return l1(e,s==null?void 0:s.class,s==null?void 0:s.className);const{variants:i,defaultVariants:l}=t,d=Object.keys(i).map(h=>{const v=s==null?void 0:s[h],g=l==null?void 0:l[h];if(v===null)return null;const y=o1(v)||o1(g);return i[h][y]}),f=s&&Object.entries(s).reduce((h,v)=>{let[g,y]=v;return y===void 0||(h[g]=y),h},{}),m=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((h,v)=>{let{class:g,className:y,...b}=v;return Object.entries(b).every(S=>{let[w,N]=S;return Array.isArray(N)?N.includes({...l,...f}[w]):{...l,...f}[w]===N})?[...h,g,y]:h},[]);return l1(e,d,m,s==null?void 0:s.class,s==null?void 0:s.className)},HM=Xw("inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-colors duration-150 ease-tactical focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-stone-900 text-white font-headline font-bold uppercase tracking-widest hover:bg-stone-800",destructive:"bg-tertiary text-white font-bold hover:bg-tertiary/90",outline:"border border-outline bg-transparent hover:bg-stone-100 text-on-surface",secondary:"border border-stone-900 bg-transparent text-stone-900 font-mono text-[10px] uppercase hover:bg-stone-900 hover:text-white",ghost:"text-on-surface-variant hover:bg-stone-100 hover:text-on-surface",link:"text-secondary underline-offset-4 hover:underline",tactical:"border border-outline font-mono text-[10px] text-secondary uppercase tracking-widest hover:border-stone-900 hover:text-stone-900"},size:{default:"h-10 px-4 py-2",sm:"h-9 px-3",lg:"h-11 px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),we=j.forwardRef(({className:e,variant:t,size:s,asChild:r=!1,children:i,...l},d)=>{const f=r?DM:"button";return c.jsx(f,{className:Re(HM({variant:t,size:s,className:e})),ref:d,...l,children:i})});we.displayName="Button";function Xa(e,t,{checkForDefaultPrevented:s=!0}={}){return function(i){if(e==null||e(i),s===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}function UM(e,t){const s=j.createContext(t),r=l=>{const{children:d,...f}=l,m=j.useMemo(()=>f,Object.values(f));return c.jsx(s.Provider,{value:m,children:d})};r.displayName=e+"Provider";function i(l){const d=j.useContext(s);if(d)return d;if(t!==void 0)return t;throw new Error(`\`${l}\` must be used within \`${e}\``)}return[r,i]}function $M(e,t=[]){let s=[];function r(l,d){const f=j.createContext(d),m=s.length;s=[...s,d];const h=g=>{var E;const{scope:y,children:b,...S}=g,w=((E=y==null?void 0:y[e])==null?void 0:E[m])||f,N=j.useMemo(()=>S,Object.values(S));return c.jsx(w.Provider,{value:N,children:b})};h.displayName=l+"Provider";function v(g,y){var w;const b=((w=y==null?void 0:y[e])==null?void 0:w[m])||f,S=j.useContext(b);if(S)return S;if(d!==void 0)return d;throw new Error(`\`${g}\` must be used within \`${l}\``)}return[h,v]}const i=()=>{const l=s.map(d=>j.createContext(d));return function(f){const m=(f==null?void 0:f[e])||l;return j.useMemo(()=>({[`__scope${e}`]:{...f,[e]:m}}),[f,m])}};return i.scopeName=e,[r,qM(i,...t)]}function qM(...e){const t=e[0];if(e.length===1)return t;const s=()=>{const r=e.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(l){const d=r.reduce((f,{useScope:m,scopeName:h})=>{const g=m(l)[`__scope${h}`];return{...f,...g}},{});return j.useMemo(()=>({[`__scope${t.scopeName}`]:d}),[d])}};return s.scopeName=t.scopeName,s}var Fl=globalThis!=null&&globalThis.document?j.useLayoutEffect:()=>{},VM=bg[" useId ".trim().toString()]||(()=>{}),GM=0;function mp(e){const[t,s]=j.useState(VM());return Fl(()=>{s(r=>r??String(GM++))},[e]),e||(t?`radix-${t}`:"")}var YM=bg[" useInsertionEffect ".trim().toString()]||Fl;function QM({prop:e,defaultProp:t,onChange:s=()=>{},caller:r}){const[i,l,d]=FM({defaultProp:t,onChange:s}),f=e!==void 0,m=f?e:i;{const v=j.useRef(e!==void 0);j.useEffect(()=>{const g=v.current;g!==f&&console.warn(`${r} is changing from ${g?"controlled":"uncontrolled"} to ${f?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),v.current=f},[f,r])}const h=j.useCallback(v=>{var g;if(f){const y=KM(v)?v(e):v;y!==e&&((g=d.current)==null||g.call(d,y))}else l(v)},[f,e,l,d]);return[m,h]}function FM({defaultProp:e,onChange:t}){const[s,r]=j.useState(e),i=j.useRef(s),l=j.useRef(t);return YM(()=>{l.current=t},[t]),j.useEffect(()=>{var d;i.current!==s&&((d=l.current)==null||d.call(l,s),i.current=s)},[s,i]),[s,r,l]}function KM(e){return typeof e=="function"}function XM(e){const t=ZM(e),s=j.forwardRef((r,i)=>{const{children:l,...d}=r,f=j.Children.toArray(l),m=f.find(JM);if(m){const h=m.props.children,v=f.map(g=>g===m?j.Children.count(h)>1?j.Children.only(null):j.isValidElement(h)?h.props.children:null:g);return c.jsx(t,{...d,ref:i,children:j.isValidElement(h)?j.cloneElement(h,void 0,v):null})}return c.jsx(t,{...d,ref:i,children:l})});return s.displayName=`${e}.Slot`,s}function ZM(e){const t=j.forwardRef((s,r)=>{const{children:i,...l}=s;if(j.isValidElement(i)){const d=tk(i),f=ek(l,i.props);return i.type!==j.Fragment&&(f.ref=r?ff(r,d):d),j.cloneElement(i,f)}return j.Children.count(i)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var WM=Symbol("radix.slottable");function JM(e){return j.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===WM}function ek(e,t){const s={...t};for(const r in t){const i=e[r],l=t[r];/^on[A-Z]/.test(r)?i&&l?s[r]=(...f)=>{const m=l(...f);return i(...f),m}:i&&(s[r]=i):r==="style"?s[r]={...i,...l}:r==="className"&&(s[r]=[i,l].filter(Boolean).join(" "))}return{...e,...s}}function tk(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,s=t&&"isReactWarning"in t&&t.isReactWarning;return s?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,s=t&&"isReactWarning"in t&&t.isReactWarning,s?e.props.ref:e.props.ref||e.ref)}var nk=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Xs=nk.reduce((e,t)=>{const s=XM(`Primitive.${t}`),r=j.forwardRef((i,l)=>{const{asChild:d,...f}=i,m=d?s:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),c.jsx(m,{...f,ref:l})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function sk(e,t){e&&Og.flushSync(()=>e.dispatchEvent(t))}function Kl(e){const t=j.useRef(e);return j.useEffect(()=>{t.current=e}),j.useMemo(()=>(...s)=>{var r;return(r=t.current)==null?void 0:r.call(t,...s)},[])}function ak(e,t=globalThis==null?void 0:globalThis.document){const s=Kl(e);j.useEffect(()=>{const r=i=>{i.key==="Escape"&&s(i)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[s,t])}var rk="DismissableLayer",tg="dismissableLayer.update",ik="dismissableLayer.pointerDownOutside",ok="dismissableLayer.focusOutside",c1,Zw=j.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Ww=j.forwardRef((e,t)=>{const{disableOutsidePointerEvents:s=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:l,onInteractOutside:d,onDismiss:f,...m}=e,h=j.useContext(Zw),[v,g]=j.useState(null),y=(v==null?void 0:v.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,b]=j.useState({}),S=ai(t,P=>g(P)),w=Array.from(h.layers),[N]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),E=w.indexOf(N),T=v?w.indexOf(v):-1,_=h.layersWithOutsidePointerEventsDisabled.size>0,R=T>=E,L=uk(P=>{const A=P.target,M=[...h.branches].some(q=>q.contains(A));!R||M||(i==null||i(P),d==null||d(P),P.defaultPrevented||f==null||f())},y),I=dk(P=>{const A=P.target;[...h.branches].some(q=>q.contains(A))||(l==null||l(P),d==null||d(P),P.defaultPrevented||f==null||f())},y);return ak(P=>{T===h.layers.size-1&&(r==null||r(P),!P.defaultPrevented&&f&&(P.preventDefault(),f()))},y),j.useEffect(()=>{if(v)return s&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(c1=y.body.style.pointerEvents,y.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(v)),h.layers.add(v),u1(),()=>{s&&h.layersWithOutsidePointerEventsDisabled.size===1&&(y.body.style.pointerEvents=c1)}},[v,y,s,h]),j.useEffect(()=>()=>{v&&(h.layers.delete(v),h.layersWithOutsidePointerEventsDisabled.delete(v),u1())},[v,h]),j.useEffect(()=>{const P=()=>b({});return document.addEventListener(tg,P),()=>document.removeEventListener(tg,P)},[]),c.jsx(Xs.div,{...m,ref:S,style:{pointerEvents:_?R?"auto":"none":void 0,...e.style},onFocusCapture:Xa(e.onFocusCapture,I.onFocusCapture),onBlurCapture:Xa(e.onBlurCapture,I.onBlurCapture),onPointerDownCapture:Xa(e.onPointerDownCapture,L.onPointerDownCapture)})});Ww.displayName=rk;var lk="DismissableLayerBranch",ck=j.forwardRef((e,t)=>{const s=j.useContext(Zw),r=j.useRef(null),i=ai(t,r);return j.useEffect(()=>{const l=r.current;if(l)return s.branches.add(l),()=>{s.branches.delete(l)}},[s.branches]),c.jsx(Xs.div,{...e,ref:i})});ck.displayName=lk;function uk(e,t=globalThis==null?void 0:globalThis.document){const s=Kl(e),r=j.useRef(!1),i=j.useRef(()=>{});return j.useEffect(()=>{const l=f=>{if(f.target&&!r.current){let m=function(){Jw(ik,s,h,{discrete:!0})};const h={originalEvent:f};f.pointerType==="touch"?(t.removeEventListener("click",i.current),i.current=m,t.addEventListener("click",i.current,{once:!0})):m()}else t.removeEventListener("click",i.current);r.current=!1},d=window.setTimeout(()=>{t.addEventListener("pointerdown",l)},0);return()=>{window.clearTimeout(d),t.removeEventListener("pointerdown",l),t.removeEventListener("click",i.current)}},[t,s]),{onPointerDownCapture:()=>r.current=!0}}function dk(e,t=globalThis==null?void 0:globalThis.document){const s=Kl(e),r=j.useRef(!1);return j.useEffect(()=>{const i=l=>{l.target&&!r.current&&Jw(ok,s,{originalEvent:l},{discrete:!1})};return t.addEventListener("focusin",i),()=>t.removeEventListener("focusin",i)},[t,s]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function u1(){const e=new CustomEvent(tg);document.dispatchEvent(e)}function Jw(e,t,s,{discrete:r}){const i=s.originalEvent.target,l=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:s});t&&i.addEventListener(e,t,{once:!0}),r?sk(i,l):i.dispatchEvent(l)}var pp="focusScope.autoFocusOnMount",gp="focusScope.autoFocusOnUnmount",d1={bubbles:!1,cancelable:!0},fk="FocusScope",eN=j.forwardRef((e,t)=>{const{loop:s=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:l,...d}=e,[f,m]=j.useState(null),h=Kl(i),v=Kl(l),g=j.useRef(null),y=ai(t,w=>m(w)),b=j.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;j.useEffect(()=>{if(r){let w=function(_){if(b.paused||!f)return;const R=_.target;f.contains(R)?g.current=R:ka(g.current,{select:!0})},N=function(_){if(b.paused||!f)return;const R=_.relatedTarget;R!==null&&(f.contains(R)||ka(g.current,{select:!0}))},E=function(_){if(document.activeElement===document.body)for(const L of _)L.removedNodes.length>0&&ka(f)};document.addEventListener("focusin",w),document.addEventListener("focusout",N);const T=new MutationObserver(E);return f&&T.observe(f,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",w),document.removeEventListener("focusout",N),T.disconnect()}}},[r,f,b.paused]),j.useEffect(()=>{if(f){h1.add(b);const w=document.activeElement;if(!f.contains(w)){const E=new CustomEvent(pp,d1);f.addEventListener(pp,h),f.dispatchEvent(E),E.defaultPrevented||(hk(yk(tN(f)),{select:!0}),document.activeElement===w&&ka(f))}return()=>{f.removeEventListener(pp,h),setTimeout(()=>{const E=new CustomEvent(gp,d1);f.addEventListener(gp,v),f.dispatchEvent(E),E.defaultPrevented||ka(w??document.body,{select:!0}),f.removeEventListener(gp,v),h1.remove(b)},0)}}},[f,h,v,b]);const S=j.useCallback(w=>{if(!s&&!r||b.paused)return;const N=w.key==="Tab"&&!w.altKey&&!w.ctrlKey&&!w.metaKey,E=document.activeElement;if(N&&E){const T=w.currentTarget,[_,R]=mk(T);_&&R?!w.shiftKey&&E===R?(w.preventDefault(),s&&ka(_,{select:!0})):w.shiftKey&&E===_&&(w.preventDefault(),s&&ka(R,{select:!0})):E===T&&w.preventDefault()}},[s,r,b.paused]);return c.jsx(Xs.div,{tabIndex:-1,...d,ref:y,onKeyDown:S})});eN.displayName=fk;function hk(e,{select:t=!1}={}){const s=document.activeElement;for(const r of e)if(ka(r,{select:t}),document.activeElement!==s)return}function mk(e){const t=tN(e),s=f1(t,e),r=f1(t.reverse(),e);return[s,r]}function tN(e){const t=[],s=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const i=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||i?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;s.nextNode();)t.push(s.currentNode);return t}function f1(e,t){for(const s of e)if(!pk(s,{upTo:t}))return s}function pk(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function gk(e){return e instanceof HTMLInputElement&&"select"in e}function ka(e,{select:t=!1}={}){if(e&&e.focus){const s=document.activeElement;e.focus({preventScroll:!0}),e!==s&&gk(e)&&t&&e.select()}}var h1=xk();function xk(){let e=[];return{add(t){const s=e[0];t!==s&&(s==null||s.pause()),e=m1(e,t),e.unshift(t)},remove(t){var s;e=m1(e,t),(s=e[0])==null||s.resume()}}}function m1(e,t){const s=[...e],r=s.indexOf(t);return r!==-1&&s.splice(r,1),s}function yk(e){return e.filter(t=>t.tagName!=="A")}var vk="Portal",nN=j.forwardRef((e,t)=>{var f;const{container:s,...r}=e,[i,l]=j.useState(!1);Fl(()=>l(!0),[]);const d=s||i&&((f=globalThis==null?void 0:globalThis.document)==null?void 0:f.body);return d?kR.createPortal(c.jsx(Xs.div,{...r,ref:t}),d):null});nN.displayName=vk;function bk(e,t){return j.useReducer((s,r)=>t[s][r]??s,e)}var hf=e=>{const{present:t,children:s}=e,r=Sk(t),i=typeof s=="function"?s({present:r.isPresent}):j.Children.only(s),l=ai(r.ref,wk(i));return typeof s=="function"||r.isPresent?j.cloneElement(i,{ref:l}):null};hf.displayName="Presence";function Sk(e){const[t,s]=j.useState(),r=j.useRef(null),i=j.useRef(e),l=j.useRef("none"),d=e?"mounted":"unmounted",[f,m]=bk(d,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return j.useEffect(()=>{const h=nd(r.current);l.current=f==="mounted"?h:"none"},[f]),Fl(()=>{const h=r.current,v=i.current;if(v!==e){const y=l.current,b=nd(h);e?m("MOUNT"):b==="none"||(h==null?void 0:h.display)==="none"?m("UNMOUNT"):m(v&&y!==b?"ANIMATION_OUT":"UNMOUNT"),i.current=e}},[e,m]),Fl(()=>{if(t){let h;const v=t.ownerDocument.defaultView??window,g=b=>{const w=nd(r.current).includes(CSS.escape(b.animationName));if(b.target===t&&w&&(m("ANIMATION_END"),!i.current)){const N=t.style.animationFillMode;t.style.animationFillMode="forwards",h=v.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=N)})}},y=b=>{b.target===t&&(l.current=nd(r.current))};return t.addEventListener("animationstart",y),t.addEventListener("animationcancel",g),t.addEventListener("animationend",g),()=>{v.clearTimeout(h),t.removeEventListener("animationstart",y),t.removeEventListener("animationcancel",g),t.removeEventListener("animationend",g)}}else m("ANIMATION_END")},[t,m]),{isPresent:["mounted","unmountSuspended"].includes(f),ref:j.useCallback(h=>{r.current=h?getComputedStyle(h):null,s(h)},[])}}function nd(e){return(e==null?void 0:e.animationName)||"none"}function wk(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,s=t&&"isReactWarning"in t&&t.isReactWarning;return s?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,s=t&&"isReactWarning"in t&&t.isReactWarning,s?e.props.ref:e.props.ref||e.ref)}var xp=0;function Nk(){j.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??p1()),document.body.insertAdjacentElement("beforeend",e[1]??p1()),xp++,()=>{xp===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),xp--}},[])}function p1(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var us=function(){return us=Object.assign||function(t){for(var s,r=1,i=arguments.length;r<i;r++){s=arguments[r];for(var l in s)Object.prototype.hasOwnProperty.call(s,l)&&(t[l]=s[l])}return t},us.apply(this,arguments)};function sN(e,t){var s={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(s[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(s[r[i]]=e[r[i]]);return s}function jk(e,t,s){if(s||arguments.length===2)for(var r=0,i=t.length,l;r<i;r++)(l||!(r in t))&&(l||(l=Array.prototype.slice.call(t,0,r)),l[r]=t[r]);return e.concat(l||Array.prototype.slice.call(t))}var Rd="right-scroll-bar-position",Td="width-before-scroll-bar",Ek="with-scroll-bars-hidden",Ck="--removed-body-scroll-bar-size";function yp(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function _k(e,t){var s=j.useState(function(){return{value:e,callback:t,facade:{get current(){return s.value},set current(r){var i=s.value;i!==r&&(s.value=r,s.callback(r,i))}}}})[0];return s.callback=t,s.facade}var Rk=typeof window<"u"?j.useLayoutEffect:j.useEffect,g1=new WeakMap;function Tk(e,t){var s=_k(null,function(r){return e.forEach(function(i){return yp(i,r)})});return Rk(function(){var r=g1.get(s);if(r){var i=new Set(r),l=new Set(e),d=s.current;i.forEach(function(f){l.has(f)||yp(f,null)}),l.forEach(function(f){i.has(f)||yp(f,d)})}g1.set(s,e)},[e]),s}function Ak(e){return e}function Mk(e,t){t===void 0&&(t=Ak);var s=[],r=!1,i={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return s.length?s[s.length-1]:e},useMedium:function(l){var d=t(l,r);return s.push(d),function(){s=s.filter(function(f){return f!==d})}},assignSyncMedium:function(l){for(r=!0;s.length;){var d=s;s=[],d.forEach(l)}s={push:function(f){return l(f)},filter:function(){return s}}},assignMedium:function(l){r=!0;var d=[];if(s.length){var f=s;s=[],f.forEach(l),d=s}var m=function(){var v=d;d=[],v.forEach(l)},h=function(){return Promise.resolve().then(m)};h(),s={push:function(v){d.push(v),h()},filter:function(v){return d=d.filter(v),s}}}};return i}function kk(e){e===void 0&&(e={});var t=Mk(null);return t.options=us({async:!0,ssr:!1},e),t}var aN=function(e){var t=e.sideCar,s=sN(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return j.createElement(r,us({},s))};aN.isSideCarExport=!0;function Ok(e,t){return e.useMedium(t),aN}var rN=kk(),vp=function(){},mf=j.forwardRef(function(e,t){var s=j.useRef(null),r=j.useState({onScrollCapture:vp,onWheelCapture:vp,onTouchMoveCapture:vp}),i=r[0],l=r[1],d=e.forwardProps,f=e.children,m=e.className,h=e.removeScrollBar,v=e.enabled,g=e.shards,y=e.sideCar,b=e.noRelative,S=e.noIsolation,w=e.inert,N=e.allowPinchZoom,E=e.as,T=E===void 0?"div":E,_=e.gapMode,R=sN(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),L=y,I=Tk([s,t]),P=us(us({},R),i);return j.createElement(j.Fragment,null,v&&j.createElement(L,{sideCar:rN,removeScrollBar:h,shards:g,noRelative:b,noIsolation:S,inert:w,setCallbacks:l,allowPinchZoom:!!N,lockRef:s,gapMode:_}),d?j.cloneElement(j.Children.only(f),us(us({},P),{ref:I})):j.createElement(T,us({},P,{className:m,ref:I}),f))});mf.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};mf.classNames={fullWidth:Td,zeroRight:Rd};var Dk=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Lk(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=Dk();return t&&e.setAttribute("nonce",t),e}function zk(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Pk(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var Ik=function(){var e=0,t=null;return{add:function(s){e==0&&(t=Lk())&&(zk(t,s),Pk(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Bk=function(){var e=Ik();return function(t,s){j.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&s])}},iN=function(){var e=Bk(),t=function(s){var r=s.styles,i=s.dynamic;return e(r,i),null};return t},Hk={left:0,top:0,right:0,gap:0},bp=function(e){return parseInt(e||"",10)||0},Uk=function(e){var t=window.getComputedStyle(document.body),s=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],i=t[e==="padding"?"paddingRight":"marginRight"];return[bp(s),bp(r),bp(i)]},$k=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Hk;var t=Uk(e),s=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-s+t[2]-t[0])}},qk=iN(),to="data-scroll-locked",Vk=function(e,t,s,r){var i=e.left,l=e.top,d=e.right,f=e.gap;return s===void 0&&(s="margin"),`
165
+ */const xA=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],yA=En("x",xA);async function vA(){const e=await fetch("/api/rigs/summary");if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}function vc(){return Rt({queryKey:["rigs","summary"],queryFn:vA})}async function bA(){const e=await fetch("/api/ps");if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}function Bg(){return Rt({queryKey:["ps"],queryFn:bA})}async function SA(e){const t=await fetch(`/api/rigs/${encodeURIComponent(e)}/nodes`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}function Tw(e){return Rt({queryKey:["rig",e,"nodes"],queryFn:()=>SA(e),enabled:!!e})}function Aw(e){var t,s,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t<i;t++)e[t]&&(s=Aw(e[t]))&&(r&&(r+=" "),r+=s)}else for(s in e)e[s]&&(r&&(r+=" "),r+=s);return r}function Mw(){for(var e,t,s=0,r="",i=arguments.length;s<i;s++)(e=arguments[s])&&(t=Aw(e))&&(r&&(r+=" "),r+=t);return r}const wA=(e,t)=>{const s=new Array(e.length+t.length);for(let r=0;r<e.length;r++)s[r]=e[r];for(let r=0;r<t.length;r++)s[e.length+r]=t[r];return s},NA=(e,t)=>({classGroupId:e,validator:t}),kw=(e=new Map,t=null,s)=>({nextPart:e,validators:t,classGroupId:s}),Vd="-",Jb=[],jA="arbitrary..",EA=e=>{const t=_A(e),{conflictingClassGroups:s,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:d=>{if(d.startsWith("[")&&d.endsWith("]"))return CA(d);const f=d.split(Vd),m=f[0]===""&&f.length>1?1:0;return Ow(f,m,t)},getConflictingClassGroupIds:(d,f)=>{if(f){const m=r[d],h=s[d];return m?h?wA(h,m):m:h||Jb}return s[d]||Jb}}},Ow=(e,t,s)=>{if(e.length-t===0)return s.classGroupId;const i=e[t],l=s.nextPart.get(i);if(l){const h=Ow(e,t+1,l);if(h)return h}const d=s.validators;if(d===null)return;const f=t===0?e.join(Vd):e.slice(t).join(Vd),m=d.length;for(let h=0;h<m;h++){const v=d[h];if(v.validator(f))return v.classGroupId}},CA=e=>e.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),s=t.indexOf(":"),r=t.slice(0,s);return r?jA+r:void 0})(),_A=e=>{const{theme:t,classGroups:s}=e;return RA(s,t)},RA=(e,t)=>{const s=kw();for(const r in e){const i=e[r];Hg(i,s,r,t)}return s},Hg=(e,t,s,r)=>{const i=e.length;for(let l=0;l<i;l++){const d=e[l];TA(d,t,s,r)}},TA=(e,t,s,r)=>{if(typeof e=="string"){AA(e,t,s);return}if(typeof e=="function"){MA(e,t,s,r);return}kA(e,t,s,r)},AA=(e,t,s)=>{const r=e===""?t:Dw(t,e);r.classGroupId=s},MA=(e,t,s,r)=>{if(OA(e)){Hg(e(r),t,s,r);return}t.validators===null&&(t.validators=[]),t.validators.push(NA(s,e))},kA=(e,t,s,r)=>{const i=Object.entries(e),l=i.length;for(let d=0;d<l;d++){const[f,m]=i[d];Hg(m,Dw(t,f),s,r)}},Dw=(e,t)=>{let s=e;const r=t.split(Vd),i=r.length;for(let l=0;l<i;l++){const d=r[l];let f=s.nextPart.get(d);f||(f=kw(),s.nextPart.set(d,f)),s=f}return s},OA=e=>"isThemeGetter"in e&&e.isThemeGetter===!0,DA=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,s=Object.create(null),r=Object.create(null);const i=(l,d)=>{s[l]=d,t++,t>e&&(t=0,r=s,s=Object.create(null))};return{get(l){let d=s[l];if(d!==void 0)return d;if((d=r[l])!==void 0)return i(l,d),d},set(l,d){l in s?s[l]=d:i(l,d)}}},Wp="!",e1=":",LA=[],t1=(e,t,s,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:s,maybePostfixModifierPosition:r,isExternal:i}),zA=e=>{const{prefix:t,experimentalParseClassName:s}=e;let r=i=>{const l=[];let d=0,f=0,m=0,h;const v=i.length;for(let w=0;w<v;w++){const N=i[w];if(d===0&&f===0){if(N===e1){l.push(i.slice(m,w)),m=w+1;continue}if(N==="/"){h=w;continue}}N==="["?d++:N==="]"?d--:N==="("?f++:N===")"&&f--}const g=l.length===0?i:i.slice(m);let y=g,b=!1;g.endsWith(Wp)?(y=g.slice(0,-1),b=!0):g.startsWith(Wp)&&(y=g.slice(1),b=!0);const S=h&&h>m?h-m:void 0;return t1(l,b,y,S)};if(t){const i=t+e1,l=r;r=d=>d.startsWith(i)?l(d.slice(i.length)):t1(LA,!1,d,void 0,!0)}if(s){const i=r;r=l=>s({className:l,parseClassName:i})}return r},PA=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((s,r)=>{t.set(s,1e6+r)}),s=>{const r=[];let i=[];for(let l=0;l<s.length;l++){const d=s[l],f=d[0]==="[",m=t.has(d);f||m?(i.length>0&&(i.sort(),r.push(...i),i=[]),r.push(d)):i.push(d)}return i.length>0&&(i.sort(),r.push(...i)),r}},IA=e=>({cache:DA(e.cacheSize),parseClassName:zA(e),sortModifiers:PA(e),...EA(e)}),BA=/\s+/,HA=(e,t)=>{const{parseClassName:s,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:l}=t,d=[],f=e.trim().split(BA);let m="";for(let h=f.length-1;h>=0;h-=1){const v=f[h],{isExternal:g,modifiers:y,hasImportantModifier:b,baseClassName:S,maybePostfixModifierPosition:w}=s(v);if(g){m=v+(m.length>0?" "+m:m);continue}let N=!!w,E=r(N?S.substring(0,w):S);if(!E){if(!N){m=v+(m.length>0?" "+m:m);continue}if(E=r(S),!E){m=v+(m.length>0?" "+m:m);continue}N=!1}const T=y.length===0?"":y.length===1?y[0]:l(y).join(":"),_=b?T+Wp:T,R=_+E;if(d.indexOf(R)>-1)continue;d.push(R);const L=i(E,N);for(let I=0;I<L.length;++I){const P=L[I];d.push(_+P)}m=v+(m.length>0?" "+m:m)}return m},UA=(...e)=>{let t=0,s,r,i="";for(;t<e.length;)(s=e[t++])&&(r=Lw(s))&&(i&&(i+=" "),i+=r);return i},Lw=e=>{if(typeof e=="string")return e;let t,s="";for(let r=0;r<e.length;r++)e[r]&&(t=Lw(e[r]))&&(s&&(s+=" "),s+=t);return s},$A=(e,...t)=>{let s,r,i,l;const d=m=>{const h=t.reduce((v,g)=>g(v),e());return s=IA(h),r=s.cache.get,i=s.cache.set,l=f,f(m)},f=m=>{const h=r(m);if(h)return h;const v=HA(m,s);return i(m,v),v};return l=d,(...m)=>l(UA(...m))},qA=[],Ct=e=>{const t=s=>s[e]||qA;return t.isThemeGetter=!0,t},zw=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Pw=/^\((?:(\w[\w-]*):)?(.+)\)$/i,VA=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,GA=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,YA=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,QA=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,FA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,KA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,_a=e=>VA.test(e),ze=e=>!!e&&!Number.isNaN(Number(e)),Ra=e=>!!e&&Number.isInteger(Number(e)),hp=e=>e.endsWith("%")&&ze(e.slice(0,-1)),Ps=e=>GA.test(e),Iw=()=>!0,XA=e=>YA.test(e)&&!QA.test(e),Ug=()=>!1,ZA=e=>FA.test(e),WA=e=>KA.test(e),JA=e=>!ge(e)&&!ye(e),eM=e=>er(e,Uw,Ug),ge=e=>zw.test(e),_r=e=>er(e,$w,XA),n1=e=>er(e,lM,ze),tM=e=>er(e,Vw,Iw),nM=e=>er(e,qw,Ug),s1=e=>er(e,Bw,Ug),sM=e=>er(e,Hw,WA),ed=e=>er(e,Gw,ZA),ye=e=>Pw.test(e),_l=e=>si(e,$w),aM=e=>si(e,qw),a1=e=>si(e,Bw),rM=e=>si(e,Uw),iM=e=>si(e,Hw),td=e=>si(e,Gw,!0),oM=e=>si(e,Vw,!0),er=(e,t,s)=>{const r=zw.exec(e);return r?r[1]?t(r[1]):s(r[2]):!1},si=(e,t,s=!1)=>{const r=Pw.exec(e);return r?r[1]?t(r[1]):s:!1},Bw=e=>e==="position"||e==="percentage",Hw=e=>e==="image"||e==="url",Uw=e=>e==="length"||e==="size"||e==="bg-size",$w=e=>e==="length",lM=e=>e==="number",qw=e=>e==="family-name",Vw=e=>e==="number"||e==="weight",Gw=e=>e==="shadow",cM=()=>{const e=Ct("color"),t=Ct("font"),s=Ct("text"),r=Ct("font-weight"),i=Ct("tracking"),l=Ct("leading"),d=Ct("breakpoint"),f=Ct("container"),m=Ct("spacing"),h=Ct("radius"),v=Ct("shadow"),g=Ct("inset-shadow"),y=Ct("text-shadow"),b=Ct("drop-shadow"),S=Ct("blur"),w=Ct("perspective"),N=Ct("aspect"),E=Ct("ease"),T=Ct("animate"),_=()=>["auto","avoid","all","avoid-page","page","left","right","column"],R=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],L=()=>[...R(),ye,ge],I=()=>["auto","hidden","clip","visible","scroll"],P=()=>["auto","contain","none"],A=()=>[ye,ge,m],M=()=>[_a,"full","auto",...A()],q=()=>[Ra,"none","subgrid",ye,ge],z=()=>["auto",{span:["full",Ra,ye,ge]},Ra,ye,ge],Q=()=>[Ra,"auto",ye,ge],Y=()=>["auto","min","max","fr",ye,ge],B=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],V=()=>["start","end","center","stretch","center-safe","end-safe"],k=()=>["auto",...A()],U=()=>[_a,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...A()],$=()=>[_a,"screen","full","dvw","lvw","svw","min","max","fit",...A()],F=()=>[_a,"screen","full","lh","dvh","lvh","svh","min","max","fit",...A()],H=()=>[e,ye,ge],D=()=>[...R(),a1,s1,{position:[ye,ge]}],G=()=>["no-repeat",{repeat:["","x","y","space","round"]}],J=()=>["auto","cover","contain",rM,eM,{size:[ye,ge]}],se=()=>[hp,_l,_r],oe=()=>["","none","full",h,ye,ge],ce=()=>["",ze,_l,_r],de=()=>["solid","dashed","dotted","double"],ue=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],fe=()=>[ze,hp,a1,s1],Ce=()=>["","none",S,ye,ge],be=()=>["none",ze,ye,ge],xe=()=>["none",ze,ye,ge],ve=()=>[ze,ye,ge],Te=()=>[_a,"full",...A()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[Ps],breakpoint:[Ps],color:[Iw],container:[Ps],"drop-shadow":[Ps],ease:["in","out","in-out"],font:[JA],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[Ps],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[Ps],shadow:[Ps],spacing:["px",ze],text:[Ps],"text-shadow":[Ps],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",_a,ge,ye,N]}],container:["container"],columns:[{columns:[ze,ge,ye,f]}],"break-after":[{"break-after":_()}],"break-before":[{"break-before":_()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:L()}],overflow:[{overflow:I()}],"overflow-x":[{"overflow-x":I()}],"overflow-y":[{"overflow-y":I()}],overscroll:[{overscroll:P()}],"overscroll-x":[{"overscroll-x":P()}],"overscroll-y":[{"overscroll-y":P()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:M()}],"inset-x":[{"inset-x":M()}],"inset-y":[{"inset-y":M()}],start:[{"inset-s":M(),start:M()}],end:[{"inset-e":M(),end:M()}],"inset-bs":[{"inset-bs":M()}],"inset-be":[{"inset-be":M()}],top:[{top:M()}],right:[{right:M()}],bottom:[{bottom:M()}],left:[{left:M()}],visibility:["visible","invisible","collapse"],z:[{z:[Ra,"auto",ye,ge]}],basis:[{basis:[_a,"full","auto",f,...A()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[ze,_a,"auto","initial","none",ge]}],grow:[{grow:["",ze,ye,ge]}],shrink:[{shrink:["",ze,ye,ge]}],order:[{order:[Ra,"first","last","none",ye,ge]}],"grid-cols":[{"grid-cols":q()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":Q()}],"col-end":[{"col-end":Q()}],"grid-rows":[{"grid-rows":q()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":Q()}],"row-end":[{"row-end":Q()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":Y()}],"auto-rows":[{"auto-rows":Y()}],gap:[{gap:A()}],"gap-x":[{"gap-x":A()}],"gap-y":[{"gap-y":A()}],"justify-content":[{justify:[...B(),"normal"]}],"justify-items":[{"justify-items":[...V(),"normal"]}],"justify-self":[{"justify-self":["auto",...V()]}],"align-content":[{content:["normal",...B()]}],"align-items":[{items:[...V(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...V(),{baseline:["","last"]}]}],"place-content":[{"place-content":B()}],"place-items":[{"place-items":[...V(),"baseline"]}],"place-self":[{"place-self":["auto",...V()]}],p:[{p:A()}],px:[{px:A()}],py:[{py:A()}],ps:[{ps:A()}],pe:[{pe:A()}],pbs:[{pbs:A()}],pbe:[{pbe:A()}],pt:[{pt:A()}],pr:[{pr:A()}],pb:[{pb:A()}],pl:[{pl:A()}],m:[{m:k()}],mx:[{mx:k()}],my:[{my:k()}],ms:[{ms:k()}],me:[{me:k()}],mbs:[{mbs:k()}],mbe:[{mbe:k()}],mt:[{mt:k()}],mr:[{mr:k()}],mb:[{mb:k()}],ml:[{ml:k()}],"space-x":[{"space-x":A()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":A()}],"space-y-reverse":["space-y-reverse"],size:[{size:U()}],"inline-size":[{inline:["auto",...$()]}],"min-inline-size":[{"min-inline":["auto",...$()]}],"max-inline-size":[{"max-inline":["none",...$()]}],"block-size":[{block:["auto",...F()]}],"min-block-size":[{"min-block":["auto",...F()]}],"max-block-size":[{"max-block":["none",...F()]}],w:[{w:[f,"screen",...U()]}],"min-w":[{"min-w":[f,"screen","none",...U()]}],"max-w":[{"max-w":[f,"screen","none","prose",{screen:[d]},...U()]}],h:[{h:["screen","lh",...U()]}],"min-h":[{"min-h":["screen","lh","none",...U()]}],"max-h":[{"max-h":["screen","lh",...U()]}],"font-size":[{text:["base",s,_l,_r]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,oM,tM]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",hp,ge]}],"font-family":[{font:[aM,nM,t]}],"font-features":[{"font-features":[ge]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[i,ye,ge]}],"line-clamp":[{"line-clamp":[ze,"none",ye,n1]}],leading:[{leading:[l,...A()]}],"list-image":[{"list-image":["none",ye,ge]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",ye,ge]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:H()}],"text-color":[{text:H()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...de(),"wavy"]}],"text-decoration-thickness":[{decoration:[ze,"from-font","auto",ye,_r]}],"text-decoration-color":[{decoration:H()}],"underline-offset":[{"underline-offset":[ze,"auto",ye,ge]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:A()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ye,ge]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",ye,ge]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:D()}],"bg-repeat":[{bg:G()}],"bg-size":[{bg:J()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Ra,ye,ge],radial:["",ye,ge],conic:[Ra,ye,ge]},iM,sM]}],"bg-color":[{bg:H()}],"gradient-from-pos":[{from:se()}],"gradient-via-pos":[{via:se()}],"gradient-to-pos":[{to:se()}],"gradient-from":[{from:H()}],"gradient-via":[{via:H()}],"gradient-to":[{to:H()}],rounded:[{rounded:oe()}],"rounded-s":[{"rounded-s":oe()}],"rounded-e":[{"rounded-e":oe()}],"rounded-t":[{"rounded-t":oe()}],"rounded-r":[{"rounded-r":oe()}],"rounded-b":[{"rounded-b":oe()}],"rounded-l":[{"rounded-l":oe()}],"rounded-ss":[{"rounded-ss":oe()}],"rounded-se":[{"rounded-se":oe()}],"rounded-ee":[{"rounded-ee":oe()}],"rounded-es":[{"rounded-es":oe()}],"rounded-tl":[{"rounded-tl":oe()}],"rounded-tr":[{"rounded-tr":oe()}],"rounded-br":[{"rounded-br":oe()}],"rounded-bl":[{"rounded-bl":oe()}],"border-w":[{border:ce()}],"border-w-x":[{"border-x":ce()}],"border-w-y":[{"border-y":ce()}],"border-w-s":[{"border-s":ce()}],"border-w-e":[{"border-e":ce()}],"border-w-bs":[{"border-bs":ce()}],"border-w-be":[{"border-be":ce()}],"border-w-t":[{"border-t":ce()}],"border-w-r":[{"border-r":ce()}],"border-w-b":[{"border-b":ce()}],"border-w-l":[{"border-l":ce()}],"divide-x":[{"divide-x":ce()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":ce()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...de(),"hidden","none"]}],"divide-style":[{divide:[...de(),"hidden","none"]}],"border-color":[{border:H()}],"border-color-x":[{"border-x":H()}],"border-color-y":[{"border-y":H()}],"border-color-s":[{"border-s":H()}],"border-color-e":[{"border-e":H()}],"border-color-bs":[{"border-bs":H()}],"border-color-be":[{"border-be":H()}],"border-color-t":[{"border-t":H()}],"border-color-r":[{"border-r":H()}],"border-color-b":[{"border-b":H()}],"border-color-l":[{"border-l":H()}],"divide-color":[{divide:H()}],"outline-style":[{outline:[...de(),"none","hidden"]}],"outline-offset":[{"outline-offset":[ze,ye,ge]}],"outline-w":[{outline:["",ze,_l,_r]}],"outline-color":[{outline:H()}],shadow:[{shadow:["","none",v,td,ed]}],"shadow-color":[{shadow:H()}],"inset-shadow":[{"inset-shadow":["none",g,td,ed]}],"inset-shadow-color":[{"inset-shadow":H()}],"ring-w":[{ring:ce()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:H()}],"ring-offset-w":[{"ring-offset":[ze,_r]}],"ring-offset-color":[{"ring-offset":H()}],"inset-ring-w":[{"inset-ring":ce()}],"inset-ring-color":[{"inset-ring":H()}],"text-shadow":[{"text-shadow":["none",y,td,ed]}],"text-shadow-color":[{"text-shadow":H()}],opacity:[{opacity:[ze,ye,ge]}],"mix-blend":[{"mix-blend":[...ue(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ue()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[ze]}],"mask-image-linear-from-pos":[{"mask-linear-from":fe()}],"mask-image-linear-to-pos":[{"mask-linear-to":fe()}],"mask-image-linear-from-color":[{"mask-linear-from":H()}],"mask-image-linear-to-color":[{"mask-linear-to":H()}],"mask-image-t-from-pos":[{"mask-t-from":fe()}],"mask-image-t-to-pos":[{"mask-t-to":fe()}],"mask-image-t-from-color":[{"mask-t-from":H()}],"mask-image-t-to-color":[{"mask-t-to":H()}],"mask-image-r-from-pos":[{"mask-r-from":fe()}],"mask-image-r-to-pos":[{"mask-r-to":fe()}],"mask-image-r-from-color":[{"mask-r-from":H()}],"mask-image-r-to-color":[{"mask-r-to":H()}],"mask-image-b-from-pos":[{"mask-b-from":fe()}],"mask-image-b-to-pos":[{"mask-b-to":fe()}],"mask-image-b-from-color":[{"mask-b-from":H()}],"mask-image-b-to-color":[{"mask-b-to":H()}],"mask-image-l-from-pos":[{"mask-l-from":fe()}],"mask-image-l-to-pos":[{"mask-l-to":fe()}],"mask-image-l-from-color":[{"mask-l-from":H()}],"mask-image-l-to-color":[{"mask-l-to":H()}],"mask-image-x-from-pos":[{"mask-x-from":fe()}],"mask-image-x-to-pos":[{"mask-x-to":fe()}],"mask-image-x-from-color":[{"mask-x-from":H()}],"mask-image-x-to-color":[{"mask-x-to":H()}],"mask-image-y-from-pos":[{"mask-y-from":fe()}],"mask-image-y-to-pos":[{"mask-y-to":fe()}],"mask-image-y-from-color":[{"mask-y-from":H()}],"mask-image-y-to-color":[{"mask-y-to":H()}],"mask-image-radial":[{"mask-radial":[ye,ge]}],"mask-image-radial-from-pos":[{"mask-radial-from":fe()}],"mask-image-radial-to-pos":[{"mask-radial-to":fe()}],"mask-image-radial-from-color":[{"mask-radial-from":H()}],"mask-image-radial-to-color":[{"mask-radial-to":H()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":R()}],"mask-image-conic-pos":[{"mask-conic":[ze]}],"mask-image-conic-from-pos":[{"mask-conic-from":fe()}],"mask-image-conic-to-pos":[{"mask-conic-to":fe()}],"mask-image-conic-from-color":[{"mask-conic-from":H()}],"mask-image-conic-to-color":[{"mask-conic-to":H()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:D()}],"mask-repeat":[{mask:G()}],"mask-size":[{mask:J()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",ye,ge]}],filter:[{filter:["","none",ye,ge]}],blur:[{blur:Ce()}],brightness:[{brightness:[ze,ye,ge]}],contrast:[{contrast:[ze,ye,ge]}],"drop-shadow":[{"drop-shadow":["","none",b,td,ed]}],"drop-shadow-color":[{"drop-shadow":H()}],grayscale:[{grayscale:["",ze,ye,ge]}],"hue-rotate":[{"hue-rotate":[ze,ye,ge]}],invert:[{invert:["",ze,ye,ge]}],saturate:[{saturate:[ze,ye,ge]}],sepia:[{sepia:["",ze,ye,ge]}],"backdrop-filter":[{"backdrop-filter":["","none",ye,ge]}],"backdrop-blur":[{"backdrop-blur":Ce()}],"backdrop-brightness":[{"backdrop-brightness":[ze,ye,ge]}],"backdrop-contrast":[{"backdrop-contrast":[ze,ye,ge]}],"backdrop-grayscale":[{"backdrop-grayscale":["",ze,ye,ge]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[ze,ye,ge]}],"backdrop-invert":[{"backdrop-invert":["",ze,ye,ge]}],"backdrop-opacity":[{"backdrop-opacity":[ze,ye,ge]}],"backdrop-saturate":[{"backdrop-saturate":[ze,ye,ge]}],"backdrop-sepia":[{"backdrop-sepia":["",ze,ye,ge]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":A()}],"border-spacing-x":[{"border-spacing-x":A()}],"border-spacing-y":[{"border-spacing-y":A()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",ye,ge]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[ze,"initial",ye,ge]}],ease:[{ease:["linear","initial",E,ye,ge]}],delay:[{delay:[ze,ye,ge]}],animate:[{animate:["none",T,ye,ge]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[w,ye,ge]}],"perspective-origin":[{"perspective-origin":L()}],rotate:[{rotate:be()}],"rotate-x":[{"rotate-x":be()}],"rotate-y":[{"rotate-y":be()}],"rotate-z":[{"rotate-z":be()}],scale:[{scale:xe()}],"scale-x":[{"scale-x":xe()}],"scale-y":[{"scale-y":xe()}],"scale-z":[{"scale-z":xe()}],"scale-3d":["scale-3d"],skew:[{skew:ve()}],"skew-x":[{"skew-x":ve()}],"skew-y":[{"skew-y":ve()}],transform:[{transform:[ye,ge,"","none","gpu","cpu"]}],"transform-origin":[{origin:L()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Te()}],"translate-x":[{"translate-x":Te()}],"translate-y":[{"translate-y":Te()}],"translate-z":[{"translate-z":Te()}],"translate-none":["translate-none"],accent:[{accent:H()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:H()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",ye,ge]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":A()}],"scroll-mx":[{"scroll-mx":A()}],"scroll-my":[{"scroll-my":A()}],"scroll-ms":[{"scroll-ms":A()}],"scroll-me":[{"scroll-me":A()}],"scroll-mbs":[{"scroll-mbs":A()}],"scroll-mbe":[{"scroll-mbe":A()}],"scroll-mt":[{"scroll-mt":A()}],"scroll-mr":[{"scroll-mr":A()}],"scroll-mb":[{"scroll-mb":A()}],"scroll-ml":[{"scroll-ml":A()}],"scroll-p":[{"scroll-p":A()}],"scroll-px":[{"scroll-px":A()}],"scroll-py":[{"scroll-py":A()}],"scroll-ps":[{"scroll-ps":A()}],"scroll-pe":[{"scroll-pe":A()}],"scroll-pbs":[{"scroll-pbs":A()}],"scroll-pbe":[{"scroll-pbe":A()}],"scroll-pt":[{"scroll-pt":A()}],"scroll-pr":[{"scroll-pr":A()}],"scroll-pb":[{"scroll-pb":A()}],"scroll-pl":[{"scroll-pl":A()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",ye,ge]}],fill:[{fill:["none",...H()]}],"stroke-w":[{stroke:[ze,_l,_r,n1]}],stroke:[{stroke:["none",...H()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},uM=$A(cM);function Re(...e){return uM(Mw(e))}function Gs(e,t=6){return e.length<=t?e:e.slice(-t)}function ds(e){if(!e)return null;const t=e.split(".");return t.length<=1?e:t[0]??e}function fs(e){return e&&e.length>0?Gs(e):"ungrouped"}function Qr(e){if(!e)return"unknown";const t=e.split(".");return t.length<=1?e:t.at(-1)??e}function Jp(e){switch(e){case"ready":return"text-green-600";case"pending":return"text-amber-500";case"attention_required":return"text-orange-500";case"failed":return"text-red-600";default:return"text-stone-400"}}function dM(e){switch(e){case"running":return"text-green-600";case"partial":return"text-amber-500";case"stopped":return"text-stone-400";default:return"text-stone-400"}}function fM(e){return e.some(t=>t.startupStatus==="failed")?"failed":e.some(t=>t.startupStatus==="attention_required")?"attention_required":e.some(t=>t.startupStatus==="pending")?"pending":e.some(t=>t.startupStatus==="ready")?"ready":null}function hM(e){const t=e.match(/^\/rigs\/([^/]+)/);return(t==null?void 0:t[1])??null}function $g({expanded:e,label:t,onClick:s}){return c.jsx("button",{type:"button",onClick:r=>{r.stopPropagation(),s()},"aria-label":`${e?"Collapse":"Expand"} ${t}`,className:"inline-flex h-5 w-5 items-center justify-center text-stone-500 transition-colors hover:text-stone-900",children:c.jsx(Rw,{className:Re("h-4 w-4 transition-transform duration-150",e&&"rotate-90")})})}function Ql({kind:e,statusClass:t,testId:s}){const i={"data-testid":s,className:Re(e==="rig"?"h-3.5 w-3.5":"h-2.5 w-2.5","shrink-0",t),strokeWidth:1.8};switch(e){case"environment":return c.jsx(iA,{...i});case"rig":return c.jsx(KT,{...i});case"pod":return c.jsx(lA,{...i});case"infrastructure":return c.jsx(mA,{...i});default:return c.jsx(eA,{...i})}}function mM({podId:e,nodes:t,selection:s,onSelect:r,autoExpand:i}){var v;const[l,d]=j.useState(i),f=ds((v=t[0])==null?void 0:v.logicalId)??fs(e),m=fM(t);j.useEffect(()=>{i&&d(!0)},[i]);const h=[...t].sort((g,y)=>Qr(g.logicalId).localeCompare(Qr(y.logicalId)));return c.jsxs("div",{"data-testid":`pod-branch-${f}`,children:[c.jsxs("div",{className:"flex cursor-pointer items-center gap-2 rounded-sm px-4 py-1.5 hover:bg-stone-100",onClick:()=>d(g=>!g),children:[c.jsx($g,{expanded:l,label:`pod ${f}`,onClick:()=>d(g=>!g)}),c.jsx(Ql,{kind:"pod",statusClass:Jp(m),testId:`pod-icon-${f}`}),c.jsx("span",{className:"font-mono text-[10px] font-semibold uppercase tracking-[0.12em] text-stone-600",children:f})]}),l&&c.jsx("div",{className:"ml-4 border-l border-stone-200",children:h.map(g=>{var S;const y=(s==null?void 0:s.type)==="node"&&s.rigId===g.rigId&&s.logicalId===g.logicalId,b=Qr(g.logicalId);return c.jsxs("button",{type:"button",onClick:()=>r({type:"node",rigId:g.rigId,logicalId:g.logicalId}),"data-testid":`node-${g.logicalId}`,className:Re("flex w-full items-center gap-2 rounded-sm px-4 py-1.5 text-left transition-colors hover:bg-stone-100",y&&"bg-stone-200/80"),children:[c.jsx(Ql,{kind:g.nodeKind==="infrastructure"?"infrastructure":"agent",statusClass:Jp(g.startupStatus),testId:`node-icon-${g.logicalId}`}),c.jsx("span",{className:"font-mono text-[10px] text-stone-700 truncate",children:b}),((S=g.contextUsage)==null?void 0:S.availability)==="known"&&typeof g.contextUsage.usedPercentage=="number"?c.jsxs("span",{className:`ml-auto shrink-0 font-mono text-[10px] font-bold ${g.contextUsage.usedPercentage>=80?"text-red-600":g.contextUsage.usedPercentage>=60?"text-amber-600":"text-green-700"}${g.contextUsage.fresh?"":" opacity-50"}`,"data-testid":`context-indicator-${g.logicalId}`,title:g.contextUsage.fresh?`${g.contextUsage.usedPercentage}% context (fresh)`:`${g.contextUsage.usedPercentage}% context (stale)`,children:[g.contextUsage.usedPercentage,"%"]}):c.jsx("span",{className:"ml-auto shrink-0 font-mono text-[8px] uppercase text-stone-400",children:g.nodeKind==="infrastructure"?"INFRA":(g.runtime??"").replace("claude-code","claude")})]},g.logicalId)})})]})}function pM({rig:e,ps:t,selection:s,onSelect:r,onClose:i,autoExpand:l}){const[d,f]=j.useState(l),m=(t==null?void 0:t.status)??"stopped",{data:h,isLoading:v}=Tw(d?e.id:null),g=(s==null?void 0:s.type)==="rig"&&s.rigId===e.id;j.useEffect(()=>{l&&f(!0)},[l]);const y=j.useMemo(()=>{if(!h||h.length===0)return[];const b=new Map;for(const S of h){const w=S.podId??"__ungrouped__";b.has(w)||b.set(w,[]),b.get(w).push(S)}return[...b.entries()].sort(([S,w],[N,E])=>{var R,L;const T=S==="__ungrouped__"?"ungrouped":ds((R=w[0])==null?void 0:R.logicalId)??fs(S),_=N==="__ungrouped__"?"ungrouped":ds((L=E[0])==null?void 0:L.logicalId)??fs(N);return T.localeCompare(_)})},[h]);return c.jsxs("div",{"data-testid":`rig-tree-${e.name}`,children:[c.jsxs("div",{className:Re("flex cursor-pointer items-center gap-2 rounded-sm px-4 py-1.5 hover:bg-stone-100",g&&"bg-stone-200/70"),onClick:()=>f(b=>!b),children:[c.jsx($g,{expanded:d,label:`rig ${e.name}`,onClick:()=>f(b=>!b)}),c.jsx(Ql,{kind:"rig",statusClass:dM(m),testId:`rig-icon-${e.name}`}),c.jsx(yc,{to:"/rigs/$rigId",params:{rigId:e.id},onClick:()=>{(s==null?void 0:s.type)!=="discovery"&&r({type:"rig",rigId:e.id}),i()},className:Re("flex-1 truncate font-mono text-[11px] font-semibold text-stone-900",g&&"underline underline-offset-2"),children:e.name})]}),d&&c.jsxs("div",{className:"ml-4 border-l border-stone-200",children:[v&&c.jsx("div",{className:"px-4 py-1.5 font-mono text-[9px] text-stone-400",children:"Loading..."}),!v&&y.length===0&&c.jsx("div",{className:"px-4 py-1.5 font-mono text-[9px] text-stone-400",children:"No nodes"}),y.map(([b,S])=>b==="__ungrouped__"?c.jsx("div",{children:S.map(w=>{const N=(s==null?void 0:s.type)==="node"&&s.rigId===w.rigId&&s.logicalId===w.logicalId,E=Qr(w.logicalId);return c.jsxs("button",{type:"button",onClick:()=>r({type:"node",rigId:w.rigId,logicalId:w.logicalId}),"data-testid":`node-${w.logicalId}`,className:Re("flex w-full items-center gap-2 rounded-sm px-4 py-1.5 text-left transition-colors hover:bg-stone-100",N&&"bg-stone-200/80"),children:[c.jsx(Ql,{kind:w.nodeKind==="infrastructure"?"infrastructure":"agent",statusClass:Jp(w.startupStatus),testId:`node-icon-${w.logicalId}`}),c.jsx("span",{className:"font-mono text-[10px] text-stone-700 truncate",children:E})]},w.logicalId)})},b):c.jsx(mM,{podId:b,nodes:S,selection:s,onSelect:r,autoExpand:d||(s==null?void 0:s.type)==="node"&&s.rigId===e.id&&S.some(w=>w.logicalId===s.logicalId)},b))]})]})}function gM({rigs:e,psMap:t,selection:s,onSelect:r,onClose:i,currentRigId:l}){const[d,f]=j.useState(!0);return c.jsxs("div",{"data-testid":"environment-branch-local",children:[c.jsxs("div",{className:"flex cursor-pointer items-center gap-2 rounded-sm px-3 py-1.5 hover:bg-stone-100",onClick:()=>f(m=>!m),children:[c.jsx($g,{expanded:d,label:"environment Local",onClick:()=>f(m=>!m)}),c.jsx(Ql,{kind:"environment",statusClass:"text-stone-500",testId:"environment-icon-local"}),c.jsx("span",{className:"font-mono text-[11px] font-semibold uppercase tracking-[0.12em] text-stone-700",children:"env: local"})]}),d&&c.jsx("div",{className:"ml-4 border-l border-stone-200",children:!e||e.length===0?c.jsx("div",{className:"px-4 py-3 font-mono text-[10px] text-stone-400",children:"No rigs"}):e.map((m,h)=>c.jsx(pM,{rig:m,ps:t.get(m.id),selection:s,onSelect:r,onClose:i,autoExpand:m.id===l},m.id))})]})}function xM({rigs:e,psMap:t,selection:s,onSelect:r,onClose:i,currentRigId:l}){return c.jsx(c.Fragment,{children:c.jsx("div",{className:"flex-1 overflow-y-auto py-2",children:c.jsx(gM,{rigs:e,psMap:t,selection:s,onSelect:r,onClose:i,currentRigId:l})})})}function yM({open:e,onClose:t,selection:s,onSelect:r,desktopMode:i="full",onDesktopToggle:l=()=>{}}){const f=df().location.pathname,m=hM(f),{data:h}=vc(),{data:v}=Bg(),g=new Map((v??[]).map(y=>[y.rigId,y]));return c.jsx("aside",{"data-testid":"explorer",className:Re("border-r border-stone-300/25 flex z-20 overflow-hidden","bg-[rgba(250,249,245,0.035)] supports-[backdrop-filter]:bg-[rgba(250,249,245,0.018)] backdrop-blur-[14px] backdrop-saturate-75 shadow-[6px_0_14px_rgba(46,52,46,0.04)]","fixed top-14 bottom-0 left-0 transition-transform duration-200 ease-tactical w-72 max-w-[80vw]",e?"translate-x-0":"-translate-x-full",i==="full"&&"lg:absolute lg:top-0 lg:bottom-0 lg:left-0 lg:w-72 lg:max-w-none lg:translate-x-0",i==="hidden"&&"lg:absolute lg:top-0 lg:bottom-0 lg:left-0 lg:w-12 lg:max-w-none lg:translate-x-0"),children:c.jsxs("div",{className:"relative flex h-full w-full flex-col",children:[c.jsx("button",{type:"button","data-testid":"explorer-edge-toggle","aria-label":i==="full"?"Collapse explorer":"Expand explorer",onClick:l,className:Re("hidden lg:flex absolute z-10 h-8 w-8 items-center justify-center rounded-full border border-stone-300 bg-background/90 text-stone-700","shadow-[0_2px_8px_rgba(41,37,36,0.08)] backdrop-blur-sm transition-colors hover:bg-stone-100 hover:text-stone-900",i==="full"?"right-2 top-3":"left-1/2 top-3 -translate-x-1/2"),children:i==="full"?c.jsx(ZT,{className:"h-4 w-4"}):c.jsx(Rw,{className:"h-4 w-4"})}),i==="full"?c.jsx(xM,{rigs:h,psMap:g,selection:s,onSelect:r,onClose:t,currentRigId:m}):c.jsx("div",{className:"hidden h-full w-full lg:block"})]})})}const vM="modulepreload",bM=function(e){return"/"+e},r1={},SM=function(t,s,r){let i=Promise.resolve();if(s&&s.length>0){let d=function(h){return Promise.all(h.map(v=>Promise.resolve(v).then(g=>({status:"fulfilled",value:g}),g=>({status:"rejected",reason:g}))))};document.getElementsByTagName("link");const f=document.querySelector("meta[property=csp-nonce]"),m=(f==null?void 0:f.nonce)||(f==null?void 0:f.getAttribute("nonce"));i=d(s.map(h=>{if(h=bM(h),h in r1)return;r1[h]=!0;const v=h.endsWith(".css"),g=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${h}"]${g}`))return;const y=document.createElement("link");if(y.rel=v?"stylesheet":vM,v||(y.as="script"),y.crossOrigin="",y.href=h,m&&y.setAttribute("nonce",m),document.head.appendChild(y),v)return new Promise((b,S)=>{y.addEventListener("load",b),y.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${h}`)))})}))}function l(d){const f=new Event("vite:preloadError",{cancelable:!0});if(f.payload=d,window.dispatchEvent(f),!f.defaultPrevented)throw d}return i.then(d=>{for(const f of d||[])f.status==="rejected"&&l(f.reason);return t().catch(l)})};async function wM(e){const t=await fetch(`/api/rigs/${encodeURIComponent(e)}/snapshots`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}function NM(e){return Rt({queryKey:["rig",e,"snapshots"],queryFn:()=>wM(e),enabled:!!e})}class eg extends Error{constructor(s){var i;const r=((i=s.errors)==null?void 0:i.join(", "))??s.message??"Import failed";super(r);bl(this,"errors");bl(this,"warnings");bl(this,"code");this.name="ImportError",this.code=s.code??"unknown",this.errors=s.errors??(s.message?[s.message]:["Import failed"]),this.warnings=s.warnings??[]}}class Yw extends Error{constructor(s,r){super(s.error??`HTTP ${r}`);bl(this,"code");this.name="RestoreError",this.code=s.code??"unknown"}}function jM(e){const t=Tt();return Ht({mutationFn:async()=>{const s=await fetch(`/api/rigs/${encodeURIComponent(e)}/snapshots`,{method:"POST"});if(!s.ok){const r=await s.json().catch(()=>({}));throw new Error(r.error??`Snapshot failed (HTTP ${s.status})`)}return s.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["rig",e,"snapshots"]}),t.invalidateQueries({queryKey:["rigs","summary"]})}})}function EM(e){const t=Tt();return Ht({mutationFn:async s=>{const r=await fetch(`/api/rigs/${encodeURIComponent(e)}/restore/${encodeURIComponent(s)}`,{method:"POST"});if(!r.ok){const i=await r.json().catch(()=>({}));throw new Yw(i,r.status)}return r.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["rig",e]})}})}function CM(e){const t=Tt();return Ht({mutationFn:async()=>{const s=await fetch("/api/down",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({rigId:e})}),r=await s.json().catch(()=>({}));if(!s.ok)throw new Error(r.error??`Teardown failed (HTTP ${s.status})`);if(Array.isArray(r.errors)&&r.errors.length>0)throw new Error(r.errors.join("; "));return r},onSuccess:()=>{t.invalidateQueries({queryKey:["rigs","summary"]}),t.invalidateQueries({queryKey:["ps"]})}})}function _M(e){const t=Tt();return Ht({mutationFn:async()=>{const s=await fetch(`/api/rigs/${encodeURIComponent(e)}/up`,{method:"POST"}),r=await s.json().catch(()=>({}));if(!s.ok)throw new Error(r.error??`Start failed (HTTP ${s.status})`);return r},onSuccess:()=>{t.invalidateQueries({queryKey:["rigs","summary"]}),t.invalidateQueries({queryKey:["ps"]}),t.invalidateQueries({queryKey:["rig",e]})}})}function RM(){const e=Tt();return Ht({mutationFn:async({yaml:t,rigRoot:s})=>{const r={"Content-Type":"text/yaml"};s&&(r["X-Rig-Root"]=s);const i=await fetch("/api/rigs/import",{method:"POST",headers:r,body:t});if(!i.ok){const l=await i.json().catch(()=>({}));throw l.code==="cycle_error"?new eg({...l,errors:l.errors??["Cycle detected in rig topology"]}):new eg(l)}return i.json()},onSuccess:()=>{e.invalidateQueries({queryKey:["rigs","summary"]})}})}function Qw(){const e=Tt();return Ht({mutationFn:async({rigId:t,pod:s,crossPodEdges:r})=>{const i=await fetch(`/api/rigs/${encodeURIComponent(t)}/expand`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pod:s,crossPodEdges:r})}),l=await i.json();if(i.status>=400||!l.ok)throw new Error(l.error??`Expansion failed (HTTP ${i.status})`);return l},onSuccess:(t,s)=>{e.invalidateQueries({queryKey:["rigs","summary"]}),e.invalidateQueries({queryKey:["ps"]}),e.invalidateQueries({queryKey:["rig",s.rigId,"nodes"]}),e.invalidateQueries({queryKey:["rig",s.rigId,"graph"]})}})}function TM(){const e=Tt();return Ht({mutationFn:async t=>{const s=await fetch(`/api/specs/library/${encodeURIComponent(t)}`,{method:"DELETE"}),r=await s.json().catch(()=>({}));if(!s.ok)throw new Error(r.error??`Remove failed (HTTP ${s.status})`);return r},onSuccess:()=>{e.invalidateQueries({queryKey:["spec-library"]})}})}function AM(){const e=Tt();return Ht({mutationFn:async({entryId:t,name:s})=>{const r=await fetch(`/api/specs/library/${encodeURIComponent(t)}/rename`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:s})}),i=await r.json().catch(()=>({}));if(!r.ok)throw new Error(i.error??`Rename failed (HTTP ${r.status})`);return i},onSuccess:()=>{e.invalidateQueries({queryKey:["spec-library"]})}})}function Fw(e){switch(e){case"resumed":return"text-success";case"rebuilt":return"text-success";case"fresh":return"text-foreground-muted";case"failed":return"text-destructive";case"checkpoint_written":return"text-success";case"fresh_no_checkpoint":return"text-foreground-muted";default:return"text-foreground-muted"}}function i1(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function ff(...e){return t=>{let s=!1;const r=e.map(i=>{const l=i1(i,t);return!s&&typeof l=="function"&&(s=!0),l});if(s)return()=>{for(let i=0;i<r.length;i++){const l=r[i];typeof l=="function"?l():i1(e[i],null)}}}}function ai(...e){return j.useCallback(ff(...e),e)}var MM=Symbol.for("react.lazy"),Gd=bg[" use ".trim().toString()];function kM(e){return typeof e=="object"&&e!==null&&"then"in e}function Kw(e){return e!=null&&typeof e=="object"&&"$$typeof"in e&&e.$$typeof===MM&&"_payload"in e&&kM(e._payload)}function OM(e){const t=LM(e),s=j.forwardRef((r,i)=>{let{children:l,...d}=r;Kw(l)&&typeof Gd=="function"&&(l=Gd(l._payload));const f=j.Children.toArray(l),m=f.find(PM);if(m){const h=m.props.children,v=f.map(g=>g===m?j.Children.count(h)>1?j.Children.only(null):j.isValidElement(h)?h.props.children:null:g);return c.jsx(t,{...d,ref:i,children:j.isValidElement(h)?j.cloneElement(h,void 0,v):null})}return c.jsx(t,{...d,ref:i,children:l})});return s.displayName=`${e}.Slot`,s}var DM=OM("Slot");function LM(e){const t=j.forwardRef((s,r)=>{let{children:i,...l}=s;if(Kw(i)&&typeof Gd=="function"&&(i=Gd(i._payload)),j.isValidElement(i)){const d=BM(i),f=IM(l,i.props);return i.type!==j.Fragment&&(f.ref=r?ff(r,d):d),j.cloneElement(i,f)}return j.Children.count(i)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var zM=Symbol("radix.slottable");function PM(e){return j.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===zM}function IM(e,t){const s={...t};for(const r in t){const i=e[r],l=t[r];/^on[A-Z]/.test(r)?i&&l?s[r]=(...f)=>{const m=l(...f);return i(...f),m}:i&&(s[r]=i):r==="style"?s[r]={...i,...l}:r==="className"&&(s[r]=[i,l].filter(Boolean).join(" "))}return{...e,...s}}function BM(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,s=t&&"isReactWarning"in t&&t.isReactWarning;return s?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,s=t&&"isReactWarning"in t&&t.isReactWarning,s?e.props.ref:e.props.ref||e.ref)}const o1=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,l1=Mw,Xw=(e,t)=>s=>{var r;if((t==null?void 0:t.variants)==null)return l1(e,s==null?void 0:s.class,s==null?void 0:s.className);const{variants:i,defaultVariants:l}=t,d=Object.keys(i).map(h=>{const v=s==null?void 0:s[h],g=l==null?void 0:l[h];if(v===null)return null;const y=o1(v)||o1(g);return i[h][y]}),f=s&&Object.entries(s).reduce((h,v)=>{let[g,y]=v;return y===void 0||(h[g]=y),h},{}),m=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((h,v)=>{let{class:g,className:y,...b}=v;return Object.entries(b).every(S=>{let[w,N]=S;return Array.isArray(N)?N.includes({...l,...f}[w]):{...l,...f}[w]===N})?[...h,g,y]:h},[]);return l1(e,d,m,s==null?void 0:s.class,s==null?void 0:s.className)},HM=Xw("inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium transition-colors duration-150 ease-tactical focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-stone-900 text-white font-headline font-bold uppercase tracking-widest hover:bg-stone-800",destructive:"bg-tertiary text-white font-bold hover:bg-tertiary/90",outline:"border border-outline bg-transparent hover:bg-stone-100 text-on-surface",secondary:"border border-stone-900 bg-transparent text-stone-900 font-mono text-[10px] uppercase hover:bg-stone-900 hover:text-white",ghost:"text-on-surface-variant hover:bg-stone-100 hover:text-on-surface",link:"text-secondary underline-offset-4 hover:underline",tactical:"border border-outline font-mono text-[10px] text-secondary uppercase tracking-widest hover:border-stone-900 hover:text-stone-900"},size:{default:"h-10 px-4 py-2",sm:"h-9 px-3",lg:"h-11 px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),we=j.forwardRef(({className:e,variant:t,size:s,asChild:r=!1,children:i,...l},d)=>{const f=r?DM:"button";return c.jsx(f,{className:Re(HM({variant:t,size:s,className:e})),ref:d,...l,children:i})});we.displayName="Button";function Xa(e,t,{checkForDefaultPrevented:s=!0}={}){return function(i){if(e==null||e(i),s===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}function UM(e,t){const s=j.createContext(t),r=l=>{const{children:d,...f}=l,m=j.useMemo(()=>f,Object.values(f));return c.jsx(s.Provider,{value:m,children:d})};r.displayName=e+"Provider";function i(l){const d=j.useContext(s);if(d)return d;if(t!==void 0)return t;throw new Error(`\`${l}\` must be used within \`${e}\``)}return[r,i]}function $M(e,t=[]){let s=[];function r(l,d){const f=j.createContext(d),m=s.length;s=[...s,d];const h=g=>{var E;const{scope:y,children:b,...S}=g,w=((E=y==null?void 0:y[e])==null?void 0:E[m])||f,N=j.useMemo(()=>S,Object.values(S));return c.jsx(w.Provider,{value:N,children:b})};h.displayName=l+"Provider";function v(g,y){var w;const b=((w=y==null?void 0:y[e])==null?void 0:w[m])||f,S=j.useContext(b);if(S)return S;if(d!==void 0)return d;throw new Error(`\`${g}\` must be used within \`${l}\``)}return[h,v]}const i=()=>{const l=s.map(d=>j.createContext(d));return function(f){const m=(f==null?void 0:f[e])||l;return j.useMemo(()=>({[`__scope${e}`]:{...f,[e]:m}}),[f,m])}};return i.scopeName=e,[r,qM(i,...t)]}function qM(...e){const t=e[0];if(e.length===1)return t;const s=()=>{const r=e.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(l){const d=r.reduce((f,{useScope:m,scopeName:h})=>{const g=m(l)[`__scope${h}`];return{...f,...g}},{});return j.useMemo(()=>({[`__scope${t.scopeName}`]:d}),[d])}};return s.scopeName=t.scopeName,s}var Fl=globalThis!=null&&globalThis.document?j.useLayoutEffect:()=>{},VM=bg[" useId ".trim().toString()]||(()=>{}),GM=0;function mp(e){const[t,s]=j.useState(VM());return Fl(()=>{s(r=>r??String(GM++))},[e]),e||(t?`radix-${t}`:"")}var YM=bg[" useInsertionEffect ".trim().toString()]||Fl;function QM({prop:e,defaultProp:t,onChange:s=()=>{},caller:r}){const[i,l,d]=FM({defaultProp:t,onChange:s}),f=e!==void 0,m=f?e:i;{const v=j.useRef(e!==void 0);j.useEffect(()=>{const g=v.current;g!==f&&console.warn(`${r} is changing from ${g?"controlled":"uncontrolled"} to ${f?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),v.current=f},[f,r])}const h=j.useCallback(v=>{var g;if(f){const y=KM(v)?v(e):v;y!==e&&((g=d.current)==null||g.call(d,y))}else l(v)},[f,e,l,d]);return[m,h]}function FM({defaultProp:e,onChange:t}){const[s,r]=j.useState(e),i=j.useRef(s),l=j.useRef(t);return YM(()=>{l.current=t},[t]),j.useEffect(()=>{var d;i.current!==s&&((d=l.current)==null||d.call(l,s),i.current=s)},[s,i]),[s,r,l]}function KM(e){return typeof e=="function"}function XM(e){const t=ZM(e),s=j.forwardRef((r,i)=>{const{children:l,...d}=r,f=j.Children.toArray(l),m=f.find(JM);if(m){const h=m.props.children,v=f.map(g=>g===m?j.Children.count(h)>1?j.Children.only(null):j.isValidElement(h)?h.props.children:null:g);return c.jsx(t,{...d,ref:i,children:j.isValidElement(h)?j.cloneElement(h,void 0,v):null})}return c.jsx(t,{...d,ref:i,children:l})});return s.displayName=`${e}.Slot`,s}function ZM(e){const t=j.forwardRef((s,r)=>{const{children:i,...l}=s;if(j.isValidElement(i)){const d=tk(i),f=ek(l,i.props);return i.type!==j.Fragment&&(f.ref=r?ff(r,d):d),j.cloneElement(i,f)}return j.Children.count(i)>1?j.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var WM=Symbol("radix.slottable");function JM(e){return j.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===WM}function ek(e,t){const s={...t};for(const r in t){const i=e[r],l=t[r];/^on[A-Z]/.test(r)?i&&l?s[r]=(...f)=>{const m=l(...f);return i(...f),m}:i&&(s[r]=i):r==="style"?s[r]={...i,...l}:r==="className"&&(s[r]=[i,l].filter(Boolean).join(" "))}return{...e,...s}}function tk(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,s=t&&"isReactWarning"in t&&t.isReactWarning;return s?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,s=t&&"isReactWarning"in t&&t.isReactWarning,s?e.props.ref:e.props.ref||e.ref)}var nk=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Xs=nk.reduce((e,t)=>{const s=XM(`Primitive.${t}`),r=j.forwardRef((i,l)=>{const{asChild:d,...f}=i,m=d?s:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),c.jsx(m,{...f,ref:l})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function sk(e,t){e&&Og.flushSync(()=>e.dispatchEvent(t))}function Kl(e){const t=j.useRef(e);return j.useEffect(()=>{t.current=e}),j.useMemo(()=>(...s)=>{var r;return(r=t.current)==null?void 0:r.call(t,...s)},[])}function ak(e,t=globalThis==null?void 0:globalThis.document){const s=Kl(e);j.useEffect(()=>{const r=i=>{i.key==="Escape"&&s(i)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[s,t])}var rk="DismissableLayer",tg="dismissableLayer.update",ik="dismissableLayer.pointerDownOutside",ok="dismissableLayer.focusOutside",c1,Zw=j.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Ww=j.forwardRef((e,t)=>{const{disableOutsidePointerEvents:s=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:l,onInteractOutside:d,onDismiss:f,...m}=e,h=j.useContext(Zw),[v,g]=j.useState(null),y=(v==null?void 0:v.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,b]=j.useState({}),S=ai(t,P=>g(P)),w=Array.from(h.layers),[N]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),E=w.indexOf(N),T=v?w.indexOf(v):-1,_=h.layersWithOutsidePointerEventsDisabled.size>0,R=T>=E,L=uk(P=>{const A=P.target,M=[...h.branches].some(q=>q.contains(A));!R||M||(i==null||i(P),d==null||d(P),P.defaultPrevented||f==null||f())},y),I=dk(P=>{const A=P.target;[...h.branches].some(q=>q.contains(A))||(l==null||l(P),d==null||d(P),P.defaultPrevented||f==null||f())},y);return ak(P=>{T===h.layers.size-1&&(r==null||r(P),!P.defaultPrevented&&f&&(P.preventDefault(),f()))},y),j.useEffect(()=>{if(v)return s&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(c1=y.body.style.pointerEvents,y.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(v)),h.layers.add(v),u1(),()=>{s&&h.layersWithOutsidePointerEventsDisabled.size===1&&(y.body.style.pointerEvents=c1)}},[v,y,s,h]),j.useEffect(()=>()=>{v&&(h.layers.delete(v),h.layersWithOutsidePointerEventsDisabled.delete(v),u1())},[v,h]),j.useEffect(()=>{const P=()=>b({});return document.addEventListener(tg,P),()=>document.removeEventListener(tg,P)},[]),c.jsx(Xs.div,{...m,ref:S,style:{pointerEvents:_?R?"auto":"none":void 0,...e.style},onFocusCapture:Xa(e.onFocusCapture,I.onFocusCapture),onBlurCapture:Xa(e.onBlurCapture,I.onBlurCapture),onPointerDownCapture:Xa(e.onPointerDownCapture,L.onPointerDownCapture)})});Ww.displayName=rk;var lk="DismissableLayerBranch",ck=j.forwardRef((e,t)=>{const s=j.useContext(Zw),r=j.useRef(null),i=ai(t,r);return j.useEffect(()=>{const l=r.current;if(l)return s.branches.add(l),()=>{s.branches.delete(l)}},[s.branches]),c.jsx(Xs.div,{...e,ref:i})});ck.displayName=lk;function uk(e,t=globalThis==null?void 0:globalThis.document){const s=Kl(e),r=j.useRef(!1),i=j.useRef(()=>{});return j.useEffect(()=>{const l=f=>{if(f.target&&!r.current){let m=function(){Jw(ik,s,h,{discrete:!0})};const h={originalEvent:f};f.pointerType==="touch"?(t.removeEventListener("click",i.current),i.current=m,t.addEventListener("click",i.current,{once:!0})):m()}else t.removeEventListener("click",i.current);r.current=!1},d=window.setTimeout(()=>{t.addEventListener("pointerdown",l)},0);return()=>{window.clearTimeout(d),t.removeEventListener("pointerdown",l),t.removeEventListener("click",i.current)}},[t,s]),{onPointerDownCapture:()=>r.current=!0}}function dk(e,t=globalThis==null?void 0:globalThis.document){const s=Kl(e),r=j.useRef(!1);return j.useEffect(()=>{const i=l=>{l.target&&!r.current&&Jw(ok,s,{originalEvent:l},{discrete:!1})};return t.addEventListener("focusin",i),()=>t.removeEventListener("focusin",i)},[t,s]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function u1(){const e=new CustomEvent(tg);document.dispatchEvent(e)}function Jw(e,t,s,{discrete:r}){const i=s.originalEvent.target,l=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:s});t&&i.addEventListener(e,t,{once:!0}),r?sk(i,l):i.dispatchEvent(l)}var pp="focusScope.autoFocusOnMount",gp="focusScope.autoFocusOnUnmount",d1={bubbles:!1,cancelable:!0},fk="FocusScope",eN=j.forwardRef((e,t)=>{const{loop:s=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:l,...d}=e,[f,m]=j.useState(null),h=Kl(i),v=Kl(l),g=j.useRef(null),y=ai(t,w=>m(w)),b=j.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;j.useEffect(()=>{if(r){let w=function(_){if(b.paused||!f)return;const R=_.target;f.contains(R)?g.current=R:ka(g.current,{select:!0})},N=function(_){if(b.paused||!f)return;const R=_.relatedTarget;R!==null&&(f.contains(R)||ka(g.current,{select:!0}))},E=function(_){if(document.activeElement===document.body)for(const L of _)L.removedNodes.length>0&&ka(f)};document.addEventListener("focusin",w),document.addEventListener("focusout",N);const T=new MutationObserver(E);return f&&T.observe(f,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",w),document.removeEventListener("focusout",N),T.disconnect()}}},[r,f,b.paused]),j.useEffect(()=>{if(f){h1.add(b);const w=document.activeElement;if(!f.contains(w)){const E=new CustomEvent(pp,d1);f.addEventListener(pp,h),f.dispatchEvent(E),E.defaultPrevented||(hk(yk(tN(f)),{select:!0}),document.activeElement===w&&ka(f))}return()=>{f.removeEventListener(pp,h),setTimeout(()=>{const E=new CustomEvent(gp,d1);f.addEventListener(gp,v),f.dispatchEvent(E),E.defaultPrevented||ka(w??document.body,{select:!0}),f.removeEventListener(gp,v),h1.remove(b)},0)}}},[f,h,v,b]);const S=j.useCallback(w=>{if(!s&&!r||b.paused)return;const N=w.key==="Tab"&&!w.altKey&&!w.ctrlKey&&!w.metaKey,E=document.activeElement;if(N&&E){const T=w.currentTarget,[_,R]=mk(T);_&&R?!w.shiftKey&&E===R?(w.preventDefault(),s&&ka(_,{select:!0})):w.shiftKey&&E===_&&(w.preventDefault(),s&&ka(R,{select:!0})):E===T&&w.preventDefault()}},[s,r,b.paused]);return c.jsx(Xs.div,{tabIndex:-1,...d,ref:y,onKeyDown:S})});eN.displayName=fk;function hk(e,{select:t=!1}={}){const s=document.activeElement;for(const r of e)if(ka(r,{select:t}),document.activeElement!==s)return}function mk(e){const t=tN(e),s=f1(t,e),r=f1(t.reverse(),e);return[s,r]}function tN(e){const t=[],s=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const i=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||i?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;s.nextNode();)t.push(s.currentNode);return t}function f1(e,t){for(const s of e)if(!pk(s,{upTo:t}))return s}function pk(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function gk(e){return e instanceof HTMLInputElement&&"select"in e}function ka(e,{select:t=!1}={}){if(e&&e.focus){const s=document.activeElement;e.focus({preventScroll:!0}),e!==s&&gk(e)&&t&&e.select()}}var h1=xk();function xk(){let e=[];return{add(t){const s=e[0];t!==s&&(s==null||s.pause()),e=m1(e,t),e.unshift(t)},remove(t){var s;e=m1(e,t),(s=e[0])==null||s.resume()}}}function m1(e,t){const s=[...e],r=s.indexOf(t);return r!==-1&&s.splice(r,1),s}function yk(e){return e.filter(t=>t.tagName!=="A")}var vk="Portal",nN=j.forwardRef((e,t)=>{var f;const{container:s,...r}=e,[i,l]=j.useState(!1);Fl(()=>l(!0),[]);const d=s||i&&((f=globalThis==null?void 0:globalThis.document)==null?void 0:f.body);return d?kR.createPortal(c.jsx(Xs.div,{...r,ref:t}),d):null});nN.displayName=vk;function bk(e,t){return j.useReducer((s,r)=>t[s][r]??s,e)}var hf=e=>{const{present:t,children:s}=e,r=Sk(t),i=typeof s=="function"?s({present:r.isPresent}):j.Children.only(s),l=ai(r.ref,wk(i));return typeof s=="function"||r.isPresent?j.cloneElement(i,{ref:l}):null};hf.displayName="Presence";function Sk(e){const[t,s]=j.useState(),r=j.useRef(null),i=j.useRef(e),l=j.useRef("none"),d=e?"mounted":"unmounted",[f,m]=bk(d,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return j.useEffect(()=>{const h=nd(r.current);l.current=f==="mounted"?h:"none"},[f]),Fl(()=>{const h=r.current,v=i.current;if(v!==e){const y=l.current,b=nd(h);e?m("MOUNT"):b==="none"||(h==null?void 0:h.display)==="none"?m("UNMOUNT"):m(v&&y!==b?"ANIMATION_OUT":"UNMOUNT"),i.current=e}},[e,m]),Fl(()=>{if(t){let h;const v=t.ownerDocument.defaultView??window,g=b=>{const w=nd(r.current).includes(CSS.escape(b.animationName));if(b.target===t&&w&&(m("ANIMATION_END"),!i.current)){const N=t.style.animationFillMode;t.style.animationFillMode="forwards",h=v.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=N)})}},y=b=>{b.target===t&&(l.current=nd(r.current))};return t.addEventListener("animationstart",y),t.addEventListener("animationcancel",g),t.addEventListener("animationend",g),()=>{v.clearTimeout(h),t.removeEventListener("animationstart",y),t.removeEventListener("animationcancel",g),t.removeEventListener("animationend",g)}}else m("ANIMATION_END")},[t,m]),{isPresent:["mounted","unmountSuspended"].includes(f),ref:j.useCallback(h=>{r.current=h?getComputedStyle(h):null,s(h)},[])}}function nd(e){return(e==null?void 0:e.animationName)||"none"}function wk(e){var r,i;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,s=t&&"isReactWarning"in t&&t.isReactWarning;return s?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,s=t&&"isReactWarning"in t&&t.isReactWarning,s?e.props.ref:e.props.ref||e.ref)}var xp=0;function Nk(){j.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??p1()),document.body.insertAdjacentElement("beforeend",e[1]??p1()),xp++,()=>{xp===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),xp--}},[])}function p1(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var us=function(){return us=Object.assign||function(t){for(var s,r=1,i=arguments.length;r<i;r++){s=arguments[r];for(var l in s)Object.prototype.hasOwnProperty.call(s,l)&&(t[l]=s[l])}return t},us.apply(this,arguments)};function sN(e,t){var s={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(s[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(s[r[i]]=e[r[i]]);return s}function jk(e,t,s){if(s||arguments.length===2)for(var r=0,i=t.length,l;r<i;r++)(l||!(r in t))&&(l||(l=Array.prototype.slice.call(t,0,r)),l[r]=t[r]);return e.concat(l||Array.prototype.slice.call(t))}var Rd="right-scroll-bar-position",Td="width-before-scroll-bar",Ek="with-scroll-bars-hidden",Ck="--removed-body-scroll-bar-size";function yp(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function _k(e,t){var s=j.useState(function(){return{value:e,callback:t,facade:{get current(){return s.value},set current(r){var i=s.value;i!==r&&(s.value=r,s.callback(r,i))}}}})[0];return s.callback=t,s.facade}var Rk=typeof window<"u"?j.useLayoutEffect:j.useEffect,g1=new WeakMap;function Tk(e,t){var s=_k(null,function(r){return e.forEach(function(i){return yp(i,r)})});return Rk(function(){var r=g1.get(s);if(r){var i=new Set(r),l=new Set(e),d=s.current;i.forEach(function(f){l.has(f)||yp(f,null)}),l.forEach(function(f){i.has(f)||yp(f,d)})}g1.set(s,e)},[e]),s}function Ak(e){return e}function Mk(e,t){t===void 0&&(t=Ak);var s=[],r=!1,i={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return s.length?s[s.length-1]:e},useMedium:function(l){var d=t(l,r);return s.push(d),function(){s=s.filter(function(f){return f!==d})}},assignSyncMedium:function(l){for(r=!0;s.length;){var d=s;s=[],d.forEach(l)}s={push:function(f){return l(f)},filter:function(){return s}}},assignMedium:function(l){r=!0;var d=[];if(s.length){var f=s;s=[],f.forEach(l),d=s}var m=function(){var v=d;d=[],v.forEach(l)},h=function(){return Promise.resolve().then(m)};h(),s={push:function(v){d.push(v),h()},filter:function(v){return d=d.filter(v),s}}}};return i}function kk(e){e===void 0&&(e={});var t=Mk(null);return t.options=us({async:!0,ssr:!1},e),t}var aN=function(e){var t=e.sideCar,s=sN(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return j.createElement(r,us({},s))};aN.isSideCarExport=!0;function Ok(e,t){return e.useMedium(t),aN}var rN=kk(),vp=function(){},mf=j.forwardRef(function(e,t){var s=j.useRef(null),r=j.useState({onScrollCapture:vp,onWheelCapture:vp,onTouchMoveCapture:vp}),i=r[0],l=r[1],d=e.forwardProps,f=e.children,m=e.className,h=e.removeScrollBar,v=e.enabled,g=e.shards,y=e.sideCar,b=e.noRelative,S=e.noIsolation,w=e.inert,N=e.allowPinchZoom,E=e.as,T=E===void 0?"div":E,_=e.gapMode,R=sN(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),L=y,I=Tk([s,t]),P=us(us({},R),i);return j.createElement(j.Fragment,null,v&&j.createElement(L,{sideCar:rN,removeScrollBar:h,shards:g,noRelative:b,noIsolation:S,inert:w,setCallbacks:l,allowPinchZoom:!!N,lockRef:s,gapMode:_}),d?j.cloneElement(j.Children.only(f),us(us({},P),{ref:I})):j.createElement(T,us({},P,{className:m,ref:I}),f))});mf.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};mf.classNames={fullWidth:Td,zeroRight:Rd};var Dk=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Lk(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=Dk();return t&&e.setAttribute("nonce",t),e}function zk(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Pk(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var Ik=function(){var e=0,t=null;return{add:function(s){e==0&&(t=Lk())&&(zk(t,s),Pk(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Bk=function(){var e=Ik();return function(t,s){j.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&s])}},iN=function(){var e=Bk(),t=function(s){var r=s.styles,i=s.dynamic;return e(r,i),null};return t},Hk={left:0,top:0,right:0,gap:0},bp=function(e){return parseInt(e||"",10)||0},Uk=function(e){var t=window.getComputedStyle(document.body),s=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],i=t[e==="padding"?"paddingRight":"marginRight"];return[bp(s),bp(r),bp(i)]},$k=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Hk;var t=Uk(e),s=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-s+t[2]-t[0])}},qk=iN(),to="data-scroll-locked",Vk=function(e,t,s,r){var i=e.left,l=e.top,d=e.right,f=e.gap;return s===void 0&&(s="margin"),`
166
166
  .`.concat(Ek,` {
167
167
  overflow: hidden `).concat(r,`;
168
168
  padding-right: `).concat(f,"px ").concat(r,`;
@@ -219,7 +219,7 @@ edges: []`}),c.jsx("button",{"data-testid":"add-pod-submit",disabled:H.isPending
219
219
  +`).split(`
220
220
  `)),v=h.reduce((g,y)=>g.concat(...y),[]);return[h,v]}return[[],[]]},[e]);return j.useEffect(()=>{const m=(t==null?void 0:t.target)??fS,h=(t==null?void 0:t.actInsideInputWithModifier)??!0;if(e!==null){const v=b=>{var N,E;if(i.current=b.ctrlKey||b.metaKey||b.shiftKey||b.altKey,(!i.current||i.current&&!h)&&Rj(b))return!1;const w=mS(b.code,f);if(l.current.add(b[w]),hS(d,l.current,!1)){const T=((E=(N=b.composedPath)==null?void 0:N.call(b))==null?void 0:E[0])||b.target,_=(T==null?void 0:T.nodeName)==="BUTTON"||(T==null?void 0:T.nodeName)==="A";t.preventDefault!==!1&&(i.current||!_)&&b.preventDefault(),r(!0)}},g=b=>{const S=mS(b.code,f);hS(d,l.current,!0)?(r(!1),l.current.clear()):l.current.delete(b[S]),b.key==="Meta"&&l.current.clear(),i.current=!1},y=()=>{l.current.clear(),r(!1)};return m==null||m.addEventListener("keydown",v),m==null||m.addEventListener("keyup",g),window.addEventListener("blur",y),window.addEventListener("contextmenu",y),()=>{m==null||m.removeEventListener("keydown",v),m==null||m.removeEventListener("keyup",g),window.removeEventListener("blur",y),window.removeEventListener("contextmenu",y)}}},[e,r]),s}function hS(e,t,s){return e.filter(r=>s||r.length===t.size).some(r=>r.every(i=>t.has(i)))}function mS(e,t){return t.includes(e)?"code":"key"}const kz=()=>{const e=ut();return j.useMemo(()=>({zoomIn:t=>{const{panZoom:s}=e.getState();return s?s.scaleBy(1.2,{duration:t==null?void 0:t.duration}):Promise.resolve(!1)},zoomOut:t=>{const{panZoom:s}=e.getState();return s?s.scaleBy(1/1.2,{duration:t==null?void 0:t.duration}):Promise.resolve(!1)},zoomTo:(t,s)=>{const{panZoom:r}=e.getState();return r?r.scaleTo(t,{duration:s==null?void 0:s.duration}):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(t,s)=>{const{transform:[r,i,l],panZoom:d}=e.getState();return d?(await d.setViewport({x:t.x??r,y:t.y??i,zoom:t.zoom??l},s),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{const[t,s,r]=e.getState().transform;return{x:t,y:s,zoom:r}},setCenter:async(t,s,r)=>e.getState().setCenter(t,s,r),fitBounds:async(t,s)=>{const{width:r,height:i,minZoom:l,maxZoom:d,panZoom:f}=e.getState(),m=a0(t,r,i,l,d,(s==null?void 0:s.padding)??.1);return f?(await f.setViewport(m,{duration:s==null?void 0:s.duration,ease:s==null?void 0:s.ease,interpolate:s==null?void 0:s.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:(t,s={})=>{const{transform:r,snapGrid:i,snapToGrid:l,domNode:d}=e.getState();if(!d)return t;const{x:f,y:m}=d.getBoundingClientRect(),h={x:t.x-f,y:t.y-m},v=s.snapGrid??i,g=s.snapToGrid??l;return Ec(h,r,g,v)},flowToScreenPosition:t=>{const{transform:s,domNode:r}=e.getState();if(!r)return t;const{x:i,y:l}=r.getBoundingClientRect(),d=nf(t,s);return{x:d.x+i,y:d.y+l}}}),[])};function Xj(e,t){const s=[],r=new Map,i=[];for(const l of e)if(l.type==="add"){i.push(l);continue}else if(l.type==="remove"||l.type==="replace")r.set(l.id,[l]);else{const d=r.get(l.id);d?d.push(l):r.set(l.id,[l])}for(const l of t){const d=r.get(l.id);if(!d){s.push(l);continue}if(d[0].type==="remove")continue;if(d[0].type==="replace"){s.push({...d[0].item});continue}const f={...l};for(const m of d)Oz(m,f);s.push(f)}return i.length&&i.forEach(l=>{l.index!==void 0?s.splice(l.index,0,{...l.item}):s.push({...l.item})}),s}function Oz(e,t){switch(e.type){case"select":{t.selected=e.selected;break}case"position":{typeof e.position<"u"&&(t.position=e.position),typeof e.dragging<"u"&&(t.dragging=e.dragging);break}case"dimensions":{typeof e.dimensions<"u"&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes==="width")&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes==="height")&&(t.height=e.dimensions.height))),typeof e.resizing=="boolean"&&(t.resizing=e.resizing);break}}}function Dz(e,t){return Xj(e,t)}function Lz(e,t){return Xj(e,t)}function Rr(e,t){return{id:e,type:"select",selected:t}}function Ji(e,t=new Set,s=!1){const r=[];for(const[i,l]of e){const d=t.has(i);!(l.selected===void 0&&!d)&&l.selected!==d&&(s&&(l.selected=d),r.push(Rr(l.id,d)))}return r}function pS({items:e=[],lookup:t}){var i;const s=[],r=new Map(e.map(l=>[l.id,l]));for(const[l,d]of e.entries()){const f=t.get(d.id),m=((i=f==null?void 0:f.internals)==null?void 0:i.userNode)??f;m!==void 0&&m!==d&&s.push({id:d.id,item:d,type:"replace"}),m===void 0&&s.push({item:d,type:"add",index:l})}for(const[l]of t)r.get(l)===void 0&&s.push({id:l,type:"remove"});return s}function gS(e){return{id:e.id,type:"remove"}}const xS=e=>cL(e),zz=e=>bj(e);function Zj(e){return j.forwardRef(e)}const Pz=typeof window<"u"?j.useLayoutEffect:j.useEffect;function yS(e){const[t,s]=j.useState(BigInt(0)),[r]=j.useState(()=>Iz(()=>s(i=>i+BigInt(1))));return Pz(()=>{const i=r.get();i.length&&(e(i),r.reset())},[t]),r}function Iz(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:s=>{t.push(s),e()}}}const Wj=j.createContext(null);function Bz({children:e}){const t=ut(),s=j.useCallback(f=>{const{nodes:m=[],setNodes:h,hasDefaultNodes:v,onNodesChange:g,nodeLookup:y,fitViewQueued:b,onNodesChangeMiddlewareMap:S}=t.getState();let w=m;for(const E of f)w=typeof E=="function"?E(w):E;let N=pS({items:w,lookup:y});for(const E of S.values())N=E(N);v&&h(w),N.length>0?g==null||g(N):b&&window.requestAnimationFrame(()=>{const{fitViewQueued:E,nodes:T,setNodes:_}=t.getState();E&&_(T)})},[]),r=yS(s),i=j.useCallback(f=>{const{edges:m=[],setEdges:h,hasDefaultEdges:v,onEdgesChange:g,edgeLookup:y}=t.getState();let b=m;for(const S of f)b=typeof S=="function"?S(b):S;v?h(b):g&&g(pS({items:b,lookup:y}))},[]),l=yS(i),d=j.useMemo(()=>({nodeQueue:r,edgeQueue:l}),[]);return c.jsx(Wj.Provider,{value:d,children:e})}function Hz(){const e=j.useContext(Wj);if(!e)throw new Error("useBatchContext must be used within a BatchProvider");return e}const Uz=e=>!!e.panZoom;function d0(){const e=kz(),t=ut(),s=Hz(),r=Ge(Uz),i=j.useMemo(()=>{const l=g=>t.getState().nodeLookup.get(g),d=g=>{s.nodeQueue.push(g)},f=g=>{s.edgeQueue.push(g)},m=g=>{var E,T;const{nodeLookup:y,nodeOrigin:b}=t.getState(),S=xS(g)?g:y.get(g.id),w=S.parentId?Cj(S.position,S.measured,S.parentId,y,b):S.position,N={...S,position:w,width:((E=S.measured)==null?void 0:E.width)??S.width,height:((T=S.measured)==null?void 0:T.height)??S.height};return wo(N)},h=(g,y,b={replace:!1})=>{d(S=>S.map(w=>{if(w.id===g){const N=typeof y=="function"?y(w):y;return b.replace&&xS(N)?N:{...w,...N}}return w}))},v=(g,y,b={replace:!1})=>{f(S=>S.map(w=>{if(w.id===g){const N=typeof y=="function"?y(w):y;return b.replace&&zz(N)?N:{...w,...N}}return w}))};return{getNodes:()=>t.getState().nodes.map(g=>({...g})),getNode:g=>{var y;return(y=l(g))==null?void 0:y.internals.userNode},getInternalNode:l,getEdges:()=>{const{edges:g=[]}=t.getState();return g.map(y=>({...y}))},getEdge:g=>t.getState().edgeLookup.get(g),setNodes:d,setEdges:f,addNodes:g=>{const y=Array.isArray(g)?g:[g];s.nodeQueue.push(b=>[...b,...y])},addEdges:g=>{const y=Array.isArray(g)?g:[g];s.edgeQueue.push(b=>[...b,...y])},toObject:()=>{const{nodes:g=[],edges:y=[],transform:b}=t.getState(),[S,w,N]=b;return{nodes:g.map(E=>({...E})),edges:y.map(E=>({...E})),viewport:{x:S,y:w,zoom:N}}},deleteElements:async({nodes:g=[],edges:y=[]})=>{const{nodes:b,edges:S,onNodesDelete:w,onEdgesDelete:N,triggerNodeChanges:E,triggerEdgeChanges:T,onDelete:_,onBeforeDelete:R}=t.getState(),{nodes:L,edges:I}=await mL({nodesToRemove:g,edgesToRemove:y,nodes:b,edges:S,onBeforeDelete:R}),P=I.length>0,A=L.length>0;if(P){const M=I.map(gS);N==null||N(I),T(M)}if(A){const M=L.map(gS);w==null||w(L),E(M)}return(A||P)&&(_==null||_({nodes:L,edges:I})),{deletedNodes:L,deletedEdges:I}},getIntersectingNodes:(g,y=!0,b)=>{const S=Q1(g),w=S?g:m(g),N=b!==void 0;return w?(b||t.getState().nodes).filter(E=>{const T=t.getState().nodeLookup.get(E.id);if(T&&!S&&(E.id===g.id||!T.internals.positionAbsolute))return!1;const _=wo(N?E:T),R=lc(_,w);return y&&R>0||R>=_.width*_.height||R>=w.width*w.height}):[]},isNodeIntersecting:(g,y,b=!0)=>{const w=Q1(g)?g:m(g);if(!w)return!1;const N=lc(w,y);return b&&N>0||N>=y.width*y.height||N>=w.width*w.height},updateNode:h,updateNodeData:(g,y,b={replace:!1})=>{h(g,S=>{const w=typeof y=="function"?y(S):y;return b.replace?{...S,data:w}:{...S,data:{...S.data,...w}}},b)},updateEdge:v,updateEdgeData:(g,y,b={replace:!1})=>{v(g,S=>{const w=typeof y=="function"?y(S):y;return b.replace?{...S,data:w}:{...S,data:{...S.data,...w}}},b)},getNodesBounds:g=>{const{nodeLookup:y,nodeOrigin:b}=t.getState();return uL(g,{nodeLookup:y,nodeOrigin:b})},getHandleConnections:({type:g,id:y,nodeId:b})=>{var S;return Array.from(((S=t.getState().connectionLookup.get(`${b}-${g}${y?`-${y}`:""}`))==null?void 0:S.values())??[])},getNodeConnections:({type:g,handleId:y,nodeId:b})=>{var S;return Array.from(((S=t.getState().connectionLookup.get(`${b}${g?y?`-${g}-${y}`:`-${g}`:""}`))==null?void 0:S.values())??[])},fitView:async g=>{const y=t.getState().fitViewResolver??yL();return t.setState({fitViewQueued:!0,fitViewOptions:g,fitViewResolver:y}),s.nodeQueue.push(b=>[...b]),y.promise}}},[]);return j.useMemo(()=>({...i,...e,viewportInitialized:r}),[r])}const vS=e=>e.selected,$z=typeof window<"u"?window:void 0;function qz({deleteKeyCode:e,multiSelectionKeyCode:t}){const s=ut(),{deleteElements:r}=d0(),i=uc(e,{actInsideInputWithModifier:!1}),l=uc(t,{target:$z});j.useEffect(()=>{if(i){const{edges:d,nodes:f}=s.getState();r({nodes:f.filter(vS),edges:d.filter(vS)}),s.setState({nodesSelectionActive:!1})}},[i]),j.useEffect(()=>{s.setState({multiSelectionActive:l})},[l])}function Vz(e){const t=ut();j.useEffect(()=>{const s=()=>{var i,l,d,f;if(!e.current||!(((l=(i=e.current).checkVisibility)==null?void 0:l.call(i))??!0))return!1;const r=r0(e.current);(r.height===0||r.width===0)&&((f=(d=t.getState()).onError)==null||f.call(d,"004",ms.error004())),t.setState({width:r.width||500,height:r.height||500})};if(e.current){s(),window.addEventListener("resize",s);const r=new ResizeObserver(()=>s());return r.observe(e.current),()=>{window.removeEventListener("resize",s),r&&e.current&&r.unobserve(e.current)}}},[])}const Cf={position:"absolute",width:"100%",height:"100%",top:0,left:0},Gz=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function Yz({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:s=!0,panOnScroll:r=!1,panOnScrollSpeed:i=.5,panOnScrollMode:l=Kr.Free,zoomOnDoubleClick:d=!0,panOnDrag:f=!0,defaultViewport:m,translateExtent:h,minZoom:v,maxZoom:g,zoomActivationKeyCode:y,preventScrolling:b=!0,children:S,noWheelClassName:w,noPanClassName:N,onViewportChange:E,isControlledViewport:T,paneClickDistance:_,selectionOnDrag:R}){const L=ut(),I=j.useRef(null),{userSelectionActive:P,lib:A,connectionInProgress:M}=Ge(Gz,ct),q=uc(y),z=j.useRef();Vz(I);const Q=j.useCallback(Y=>{E==null||E({x:Y[0],y:Y[1],zoom:Y[2]}),T||L.setState({transform:Y})},[E,T]);return j.useEffect(()=>{if(I.current){z.current=tz({domNode:I.current,minZoom:v,maxZoom:g,translateExtent:h,viewport:m,onDraggingChange:k=>L.setState(U=>U.paneDragging===k?U:{paneDragging:k}),onPanZoomStart:(k,U)=>{const{onViewportChangeStart:$,onMoveStart:F}=L.getState();F==null||F(k,U),$==null||$(U)},onPanZoom:(k,U)=>{const{onViewportChange:$,onMove:F}=L.getState();F==null||F(k,U),$==null||$(U)},onPanZoomEnd:(k,U)=>{const{onViewportChangeEnd:$,onMoveEnd:F}=L.getState();F==null||F(k,U),$==null||$(U)}});const{x:Y,y:B,zoom:V}=z.current.getViewport();return L.setState({panZoom:z.current,transform:[Y,B,V],domNode:I.current.closest(".react-flow")}),()=>{var k;(k=z.current)==null||k.destroy()}}},[]),j.useEffect(()=>{var Y;(Y=z.current)==null||Y.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:s,panOnScroll:r,panOnScrollSpeed:i,panOnScrollMode:l,zoomOnDoubleClick:d,panOnDrag:f,zoomActivationKeyPressed:q,preventScrolling:b,noPanClassName:N,userSelectionActive:P,noWheelClassName:w,lib:A,onTransformChange:Q,connectionInProgress:M,selectionOnDrag:R,paneClickDistance:_})},[e,t,s,r,i,l,d,f,q,b,N,P,w,A,Q,M,R,_]),c.jsx("div",{className:"react-flow__renderer",ref:I,style:Cf,children:S})}const Qz=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Fz(){const{userSelectionActive:e,userSelectionRect:t}=Ge(Qz,ct);return e&&t?c.jsx("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}const Mp=(e,t)=>s=>{s.target===t.current&&(e==null||e(s))},Kz=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function Xz({isSelecting:e,selectionKeyPressed:t,selectionMode:s=ic.Full,panOnDrag:r,paneClickDistance:i,selectionOnDrag:l,onSelectionStart:d,onSelectionEnd:f,onPaneClick:m,onPaneContextMenu:h,onPaneScroll:v,onPaneMouseEnter:g,onPaneMouseMove:y,onPaneMouseLeave:b,children:S}){const w=ut(),{userSelectionActive:N,elementsSelectable:E,dragging:T,connectionInProgress:_}=Ge(Kz,ct),R=E&&(e||N),L=j.useRef(null),I=j.useRef(),P=j.useRef(new Set),A=j.useRef(new Set),M=j.useRef(!1),q=$=>{if(M.current||_){M.current=!1;return}m==null||m($),w.getState().resetSelectedElements(),w.setState({nodesSelectionActive:!1})},z=$=>{if(Array.isArray(r)&&(r!=null&&r.includes(2))){$.preventDefault();return}h==null||h($)},Q=v?$=>v($):void 0,Y=$=>{M.current&&($.stopPropagation(),M.current=!1)},B=$=>{var oe,ce;const{domNode:F}=w.getState();if(I.current=F==null?void 0:F.getBoundingClientRect(),!I.current)return;const H=$.target===L.current;if(!H&&!!$.target.closest(".nokey")||!e||!(l&&H||t)||$.button!==0||!$.isPrimary)return;(ce=(oe=$.target)==null?void 0:oe.setPointerCapture)==null||ce.call(oe,$.pointerId),M.current=!1;const{x:J,y:se}=Yn($.nativeEvent,I.current);w.setState({userSelectionRect:{width:0,height:0,startX:J,startY:se,x:J,y:se}}),H||($.stopPropagation(),$.preventDefault())},V=$=>{const{userSelectionRect:F,transform:H,nodeLookup:D,edgeLookup:G,connectionLookup:J,triggerNodeChanges:se,triggerEdgeChanges:oe,defaultEdgeOptions:ce,resetSelectedElements:de}=w.getState();if(!I.current||!F)return;const{x:ue,y:fe}=Yn($.nativeEvent,I.current),{startX:Ce,startY:be}=F;if(!M.current){const Oe=t?0:i;if(Math.hypot(ue-Ce,fe-be)<=Oe)return;de(),d==null||d($)}M.current=!0;const xe={startX:Ce,startY:be,x:ue<Ce?ue:Ce,y:fe<be?fe:be,width:Math.abs(ue-Ce),height:Math.abs(fe-be)},ve=P.current,Te=A.current;P.current=new Set(s0(D,xe,H,s===ic.Partial,!0).map(Oe=>Oe.id)),A.current=new Set;const Ve=(ce==null?void 0:ce.selectable)??!0;for(const Oe of P.current){const tt=J.get(Oe);if(tt)for(const{edgeId:me}of tt.values()){const Pe=G.get(me);Pe&&(Pe.selectable??Ve)&&A.current.add(me)}}if(!F1(ve,P.current)){const Oe=Ji(D,P.current,!0);se(Oe)}if(!F1(Te,A.current)){const Oe=Ji(G,A.current);oe(Oe)}w.setState({userSelectionRect:xe,userSelectionActive:!0,nodesSelectionActive:!1})},k=$=>{var F,H;$.button===0&&((H=(F=$.target)==null?void 0:F.releasePointerCapture)==null||H.call(F,$.pointerId),!N&&$.target===L.current&&w.getState().userSelectionRect&&(q==null||q($)),w.setState({userSelectionActive:!1,userSelectionRect:null}),M.current&&(f==null||f($),w.setState({nodesSelectionActive:P.current.size>0})))},U=r===!0||Array.isArray(r)&&r.includes(0);return c.jsxs("div",{className:Nt(["react-flow__pane",{draggable:U,dragging:T,selection:e}]),onClick:R?void 0:Mp(q,L),onContextMenu:Mp(z,L),onWheel:Mp(Q,L),onPointerEnter:R?void 0:g,onPointerMove:R?V:y,onPointerUp:R?k:void 0,onPointerDownCapture:R?B:void 0,onClickCapture:R?Y:void 0,onPointerLeave:b,ref:L,style:Cf,children:[S,c.jsx(Fz,{})]})}function xg({id:e,store:t,unselect:s=!1,nodeRef:r}){const{addSelectedNodes:i,unselectNodesAndEdges:l,multiSelectionActive:d,nodeLookup:f,onError:m}=t.getState(),h=f.get(e);if(!h){m==null||m("012",ms.error012(e));return}t.setState({nodesSelectionActive:!1}),h.selected?(s||h.selected&&d)&&(l({nodes:[h],edges:[]}),requestAnimationFrame(()=>{var v;return(v=r==null?void 0:r.current)==null?void 0:v.blur()})):i([e])}function Jj({nodeRef:e,disabled:t=!1,noDragClassName:s,handleSelector:r,nodeId:i,isSelectable:l,nodeClickDistance:d}){const f=ut(),[m,h]=j.useState(!1),v=j.useRef();return j.useEffect(()=>{v.current=UL({getStoreItems:()=>f.getState(),onNodeMouseDown:g=>{xg({id:g,store:f,nodeRef:e})},onDragStart:()=>{h(!0)},onDragStop:()=>{h(!1)}})},[]),j.useEffect(()=>{if(!(t||!e.current||!v.current))return v.current.update({noDragClassName:s,handleSelector:r,domNode:e.current,isSelectable:l,nodeId:i,nodeClickDistance:d}),()=>{var g;(g=v.current)==null||g.destroy()}},[s,r,t,l,e,i,d]),m}const Zz=e=>t=>t.selected&&(t.draggable||e&&typeof t.draggable>"u");function e2(){const e=ut();return j.useCallback(s=>{const{nodeExtent:r,snapToGrid:i,snapGrid:l,nodesDraggable:d,onError:f,updateNodePositions:m,nodeLookup:h,nodeOrigin:v}=e.getState(),g=new Map,y=Zz(d),b=i?l[0]:5,S=i?l[1]:5,w=s.direction.x*b*s.factor,N=s.direction.y*S*s.factor;for(const[,E]of h){if(!y(E))continue;let T={x:E.internals.positionAbsolute.x+w,y:E.internals.positionAbsolute.y+N};i&&(T=jc(T,l));const{position:_,positionAbsolute:R}=Sj({nodeId:E.id,nextPosition:T,nodeLookup:h,nodeExtent:r,nodeOrigin:v,onError:f});E.position=_,E.internals.positionAbsolute=R,g.set(E.id,E)}m(g)},[])}const f0=j.createContext(null),Wz=f0.Provider;f0.Consumer;const t2=()=>j.useContext(f0),Jz=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),e8=(e,t,s)=>r=>{const{connectionClickStartHandle:i,connectionMode:l,connection:d}=r,{fromHandle:f,toHandle:m,isValid:h}=d,v=(m==null?void 0:m.nodeId)===e&&(m==null?void 0:m.id)===t&&(m==null?void 0:m.type)===s;return{connectingFrom:(f==null?void 0:f.nodeId)===e&&(f==null?void 0:f.id)===t&&(f==null?void 0:f.type)===s,connectingTo:v,clickConnecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.id)===t&&(i==null?void 0:i.type)===s,isPossibleEndHandle:l===bo.Strict?(f==null?void 0:f.type)!==s:e!==(f==null?void 0:f.nodeId)||t!==(f==null?void 0:f.id),connectionInProcess:!!f,clickConnectionInProcess:!!i,valid:v&&h}};function t8({type:e="source",position:t=Ne.Top,isValidConnection:s,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:l=!0,id:d,onConnect:f,children:m,className:h,onMouseDown:v,onTouchStart:g,...y},b){var V,k;const S=d||null,w=e==="target",N=ut(),E=t2(),{connectOnClick:T,noPanClassName:_,rfId:R}=Ge(Jz,ct),{connectingFrom:L,connectingTo:I,clickConnecting:P,isPossibleEndHandle:A,connectionInProcess:M,clickConnectionInProcess:q,valid:z}=Ge(e8(E,S,e),ct);E||(k=(V=N.getState()).onError)==null||k.call(V,"010",ms.error010());const Q=U=>{const{defaultEdgeOptions:$,onConnect:F,hasDefaultEdges:H}=N.getState(),D={...$,...U};if(H){const{edges:G,setEdges:J}=N.getState();J(EL(D,G))}F==null||F(D),f==null||f(D)},Y=U=>{if(!E)return;const $=Tj(U.nativeEvent);if(i&&($&&U.button===0||!$)){const F=N.getState();gg.onPointerDown(U.nativeEvent,{handleDomNode:U.currentTarget,autoPanOnConnect:F.autoPanOnConnect,connectionMode:F.connectionMode,connectionRadius:F.connectionRadius,domNode:F.domNode,nodeLookup:F.nodeLookup,lib:F.lib,isTarget:w,handleId:S,nodeId:E,flowId:F.rfId,panBy:F.panBy,cancelConnection:F.cancelConnection,onConnectStart:F.onConnectStart,onConnectEnd:(...H)=>{var D,G;return(G=(D=N.getState()).onConnectEnd)==null?void 0:G.call(D,...H)},updateConnection:F.updateConnection,onConnect:Q,isValidConnection:s||((...H)=>{var D,G;return((G=(D=N.getState()).isValidConnection)==null?void 0:G.call(D,...H))??!0}),getTransform:()=>N.getState().transform,getFromHandle:()=>N.getState().connection.fromHandle,autoPanSpeed:F.autoPanSpeed,dragThreshold:F.connectionDragThreshold})}$?v==null||v(U):g==null||g(U)},B=U=>{const{onClickConnectStart:$,onClickConnectEnd:F,connectionClickStartHandle:H,connectionMode:D,isValidConnection:G,lib:J,rfId:se,nodeLookup:oe,connection:ce}=N.getState();if(!E||!H&&!i)return;if(!H){$==null||$(U.nativeEvent,{nodeId:E,handleId:S,handleType:e}),N.setState({connectionClickStartHandle:{nodeId:E,type:e,id:S}});return}const de=_j(U.target),ue=s||G,{connection:fe,isValid:Ce}=gg.isValid(U.nativeEvent,{handle:{nodeId:E,id:S,type:e},connectionMode:D,fromNodeId:H.nodeId,fromHandleId:H.id||null,fromType:H.type,isValidConnection:ue,flowId:se,doc:de,lib:J,nodeLookup:oe});Ce&&fe&&Q(fe);const be=structuredClone(ce);delete be.inProgress,be.toPosition=be.toHandle?be.toHandle.position:null,F==null||F(U,be),N.setState({connectionClickStartHandle:null})};return c.jsx("div",{"data-handleid":S,"data-nodeid":E,"data-handlepos":t,"data-id":`${R}-${E}-${S}-${e}`,className:Nt(["react-flow__handle",`react-flow__handle-${t}`,"nodrag",_,h,{source:!w,target:w,connectable:r,connectablestart:i,connectableend:l,clickconnecting:P,connectingfrom:L,connectingto:I,valid:z,connectionindicator:r&&(!M||A)&&(M||q?l:i)}]),onMouseDown:Y,onTouchStart:Y,onClick:T?B:void 0,ref:b,...y,children:m})}const Wa=j.memo(Zj(t8));function n8({data:e,isConnectable:t,sourcePosition:s=Ne.Bottom}){return c.jsxs(c.Fragment,{children:[e==null?void 0:e.label,c.jsx(Wa,{type:"source",position:s,isConnectable:t})]})}function s8({data:e,isConnectable:t,targetPosition:s=Ne.Top,sourcePosition:r=Ne.Bottom}){return c.jsxs(c.Fragment,{children:[c.jsx(Wa,{type:"target",position:s,isConnectable:t}),e==null?void 0:e.label,c.jsx(Wa,{type:"source",position:r,isConnectable:t})]})}function a8(){return null}function r8({data:e,isConnectable:t,targetPosition:s=Ne.Top}){return c.jsxs(c.Fragment,{children:[c.jsx(Wa,{type:"target",position:s,isConnectable:t}),e==null?void 0:e.label]})}const sf={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},bS={input:n8,default:s8,output:r8,group:a8};function i8(e){var t,s,r,i;return e.internals.handleBounds===void 0?{width:e.width??e.initialWidth??((t=e.style)==null?void 0:t.width),height:e.height??e.initialHeight??((s=e.style)==null?void 0:s.height)}:{width:e.width??((r=e.style)==null?void 0:r.width),height:e.height??((i=e.style)==null?void 0:i.height)}}const o8=e=>{const{width:t,height:s,x:r,y:i}=Nc(e.nodeLookup,{filter:l=>!!l.selected});return{width:Gn(t)?t:null,height:Gn(s)?s:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${r}px,${i}px)`}};function l8({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:s}){const r=ut(),{width:i,height:l,transformString:d,userSelectionActive:f}=Ge(o8,ct),m=e2(),h=j.useRef(null);j.useEffect(()=>{var b;s||(b=h.current)==null||b.focus({preventScroll:!0})},[s]);const v=!f&&i!==null&&l!==null;if(Jj({nodeRef:h,disabled:!v}),!v)return null;const g=e?b=>{const S=r.getState().nodes.filter(w=>w.selected);e(b,S)}:void 0,y=b=>{Object.prototype.hasOwnProperty.call(sf,b.key)&&(b.preventDefault(),m({direction:sf[b.key],factor:b.shiftKey?4:1}))};return c.jsx("div",{className:Nt(["react-flow__nodesselection","react-flow__container",t]),style:{transform:d},children:c.jsx("div",{ref:h,className:"react-flow__nodesselection-rect",onContextMenu:g,tabIndex:s?void 0:-1,onKeyDown:s?void 0:y,style:{width:i,height:l}})})}const SS=typeof window<"u"?window:void 0,c8=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function n2({children:e,onPaneClick:t,onPaneMouseEnter:s,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:l,onPaneScroll:d,paneClickDistance:f,deleteKeyCode:m,selectionKeyCode:h,selectionOnDrag:v,selectionMode:g,onSelectionStart:y,onSelectionEnd:b,multiSelectionKeyCode:S,panActivationKeyCode:w,zoomActivationKeyCode:N,elementsSelectable:E,zoomOnScroll:T,zoomOnPinch:_,panOnScroll:R,panOnScrollSpeed:L,panOnScrollMode:I,zoomOnDoubleClick:P,panOnDrag:A,defaultViewport:M,translateExtent:q,minZoom:z,maxZoom:Q,preventScrolling:Y,onSelectionContextMenu:B,noWheelClassName:V,noPanClassName:k,disableKeyboardA11y:U,onViewportChange:$,isControlledViewport:F}){const{nodesSelectionActive:H,userSelectionActive:D}=Ge(c8,ct),G=uc(h,{target:SS}),J=uc(w,{target:SS}),se=J||A,oe=J||R,ce=v&&se!==!0,de=G||D||ce;return qz({deleteKeyCode:m,multiSelectionKeyCode:S}),c.jsx(Yz,{onPaneContextMenu:l,elementsSelectable:E,zoomOnScroll:T,zoomOnPinch:_,panOnScroll:oe,panOnScrollSpeed:L,panOnScrollMode:I,zoomOnDoubleClick:P,panOnDrag:!G&&se,defaultViewport:M,translateExtent:q,minZoom:z,maxZoom:Q,zoomActivationKeyCode:N,preventScrolling:Y,noWheelClassName:V,noPanClassName:k,onViewportChange:$,isControlledViewport:F,paneClickDistance:f,selectionOnDrag:ce,children:c.jsxs(Xz,{onSelectionStart:y,onSelectionEnd:b,onPaneClick:t,onPaneMouseEnter:s,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:l,onPaneScroll:d,panOnDrag:se,isSelecting:!!de,selectionMode:g,selectionKeyPressed:G,paneClickDistance:f,selectionOnDrag:ce,children:[e,H&&c.jsx(l8,{onSelectionContextMenu:B,noPanClassName:k,disableKeyboardA11y:U})]})})}n2.displayName="FlowRenderer";const u8=j.memo(n2),d8=e=>t=>e?s0(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(s=>s.id):Array.from(t.nodeLookup.keys());function f8(e){return Ge(j.useCallback(d8(e),[e]),ct)}const h8=e=>e.updateNodeInternals;function m8(){const e=Ge(h8),[t]=j.useState(()=>typeof ResizeObserver>"u"?null:new ResizeObserver(s=>{const r=new Map;s.forEach(i=>{const l=i.target.getAttribute("data-id");r.set(l,{id:l,nodeElement:i.target,force:!0})}),e(r)}));return j.useEffect(()=>()=>{t==null||t.disconnect()},[t]),t}function p8({node:e,nodeType:t,hasDimensions:s,resizeObserver:r}){const i=ut(),l=j.useRef(null),d=j.useRef(null),f=j.useRef(e.sourcePosition),m=j.useRef(e.targetPosition),h=j.useRef(t),v=s&&!!e.internals.handleBounds;return j.useEffect(()=>{l.current&&!e.hidden&&(!v||d.current!==l.current)&&(d.current&&(r==null||r.unobserve(d.current)),r==null||r.observe(l.current),d.current=l.current)},[v,e.hidden]),j.useEffect(()=>()=>{d.current&&(r==null||r.unobserve(d.current),d.current=null)},[]),j.useEffect(()=>{if(l.current){const g=h.current!==t,y=f.current!==e.sourcePosition,b=m.current!==e.targetPosition;(g||y||b)&&(h.current=t,f.current=e.sourcePosition,m.current=e.targetPosition,i.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:l.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),l}function g8({id:e,onClick:t,onMouseEnter:s,onMouseMove:r,onMouseLeave:i,onContextMenu:l,onDoubleClick:d,nodesDraggable:f,elementsSelectable:m,nodesConnectable:h,nodesFocusable:v,resizeObserver:g,noDragClassName:y,noPanClassName:b,disableKeyboardA11y:S,rfId:w,nodeTypes:N,nodeClickDistance:E,onError:T}){const{node:_,internals:R,isParent:L}=Ge(ue=>{const fe=ue.nodeLookup.get(e),Ce=ue.parentLookup.has(e);return{node:fe,internals:fe.internals,isParent:Ce}},ct);let I=_.type||"default",P=(N==null?void 0:N[I])||bS[I];P===void 0&&(T==null||T("003",ms.error003(I)),I="default",P=(N==null?void 0:N.default)||bS.default);const A=!!(_.draggable||f&&typeof _.draggable>"u"),M=!!(_.selectable||m&&typeof _.selectable>"u"),q=!!(_.connectable||h&&typeof _.connectable>"u"),z=!!(_.focusable||v&&typeof _.focusable>"u"),Q=ut(),Y=Ej(_),B=p8({node:_,nodeType:I,hasDimensions:Y,resizeObserver:g}),V=Jj({nodeRef:B,disabled:_.hidden||!A,noDragClassName:y,handleSelector:_.dragHandle,nodeId:e,isSelectable:M,nodeClickDistance:E}),k=e2();if(_.hidden)return null;const U=Zs(_),$=i8(_),F=M||A||t||s||r||i,H=s?ue=>s(ue,{...R.userNode}):void 0,D=r?ue=>r(ue,{...R.userNode}):void 0,G=i?ue=>i(ue,{...R.userNode}):void 0,J=l?ue=>l(ue,{...R.userNode}):void 0,se=d?ue=>d(ue,{...R.userNode}):void 0,oe=ue=>{const{selectNodesOnDrag:fe,nodeDragThreshold:Ce}=Q.getState();M&&(!fe||!A||Ce>0)&&xg({id:e,store:Q,nodeRef:B}),t&&t(ue,{...R.userNode})},ce=ue=>{if(!(Rj(ue.nativeEvent)||S)){if(gj.includes(ue.key)&&M){const fe=ue.key==="Escape";xg({id:e,store:Q,unselect:fe,nodeRef:B})}else if(A&&_.selected&&Object.prototype.hasOwnProperty.call(sf,ue.key)){ue.preventDefault();const{ariaLabelConfig:fe}=Q.getState();Q.setState({ariaLiveMessage:fe["node.a11yDescription.ariaLiveMessage"]({direction:ue.key.replace("Arrow","").toLowerCase(),x:~~R.positionAbsolute.x,y:~~R.positionAbsolute.y})}),k({direction:sf[ue.key],factor:ue.shiftKey?4:1})}}},de=()=>{var Te;if(S||!((Te=B.current)!=null&&Te.matches(":focus-visible")))return;const{transform:ue,width:fe,height:Ce,autoPanOnNodeFocus:be,setCenter:xe}=Q.getState();if(!be)return;s0(new Map([[e,_]]),{x:0,y:0,width:fe,height:Ce},ue,!0).length>0||xe(_.position.x+U.width/2,_.position.y+U.height/2,{zoom:ue[2]})};return c.jsx("div",{className:Nt(["react-flow__node",`react-flow__node-${I}`,{[b]:A},_.className,{selected:_.selected,selectable:M,parent:L,draggable:A,dragging:V}]),ref:B,style:{zIndex:R.z,transform:`translate(${R.positionAbsolute.x}px,${R.positionAbsolute.y}px)`,pointerEvents:F?"all":"none",visibility:Y?"visible":"hidden",..._.style,...$},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:H,onMouseMove:D,onMouseLeave:G,onContextMenu:J,onClick:oe,onDoubleClick:se,onKeyDown:z?ce:void 0,tabIndex:z?0:void 0,onFocus:z?de:void 0,role:_.ariaRole??(z?"group":void 0),"aria-roledescription":"node","aria-describedby":S?void 0:`${Qj}-${w}`,"aria-label":_.ariaLabel,..._.domAttributes,children:c.jsx(Wz,{value:e,children:c.jsx(P,{id:e,data:_.data,type:I,positionAbsoluteX:R.positionAbsolute.x,positionAbsoluteY:R.positionAbsolute.y,selected:_.selected??!1,selectable:M,draggable:A,deletable:_.deletable??!0,isConnectable:q,sourcePosition:_.sourcePosition,targetPosition:_.targetPosition,dragging:V,dragHandle:_.dragHandle,zIndex:R.z,parentId:_.parentId,...U})})})}var x8=j.memo(g8);const y8=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function s2(e){const{nodesDraggable:t,nodesConnectable:s,nodesFocusable:r,elementsSelectable:i,onError:l}=Ge(y8,ct),d=f8(e.onlyRenderVisibleElements),f=m8();return c.jsx("div",{className:"react-flow__nodes",style:Cf,children:d.map(m=>c.jsx(x8,{id:m,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:f,nodesDraggable:t,nodesConnectable:s,nodesFocusable:r,elementsSelectable:i,nodeClickDistance:e.nodeClickDistance,onError:l},m))})}s2.displayName="NodeRenderer";const v8=j.memo(s2);function b8(e){return Ge(j.useCallback(s=>{if(!e)return s.edges.map(i=>i.id);const r=[];if(s.width&&s.height)for(const i of s.edges){const l=s.nodeLookup.get(i.source),d=s.nodeLookup.get(i.target);l&&d&&wL({sourceNode:l,targetNode:d,width:s.width,height:s.height,transform:s.transform})&&r.push(i.id)}return r},[e]),ct)}const S8=({color:e="none",strokeWidth:t=1})=>{const s={strokeWidth:t,...e&&{stroke:e}};return c.jsx("polyline",{className:"arrow",style:s,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},w8=({color:e="none",strokeWidth:t=1})=>{const s={strokeWidth:t,...e&&{stroke:e,fill:e}};return c.jsx("polyline",{className:"arrowclosed",style:s,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})},wS={[oc.Arrow]:S8,[oc.ArrowClosed]:w8};function N8(e){const t=ut();return j.useMemo(()=>{var i,l;return Object.prototype.hasOwnProperty.call(wS,e)?wS[e]:((l=(i=t.getState()).onError)==null||l.call(i,"009",ms.error009(e)),null)},[e])}const j8=({id:e,type:t,color:s,width:r=12.5,height:i=12.5,markerUnits:l="strokeWidth",strokeWidth:d,orient:f="auto-start-reverse"})=>{const m=N8(t);return m?c.jsx("marker",{className:"react-flow__arrowhead",id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:"-10 -10 20 20",markerUnits:l,orient:f,refX:"0",refY:"0",children:c.jsx(m,{color:s,strokeWidth:d})}):null},a2=({defaultColor:e,rfId:t})=>{const s=Ge(l=>l.edges),r=Ge(l=>l.defaultEdgeOptions),i=j.useMemo(()=>AL(s,{id:t,defaultColor:e,defaultMarkerStart:r==null?void 0:r.markerStart,defaultMarkerEnd:r==null?void 0:r.markerEnd}),[s,r,t,e]);return i.length?c.jsx("svg",{className:"react-flow__marker","aria-hidden":"true",children:c.jsx("defs",{children:i.map(l=>c.jsx(j8,{id:l.id,type:l.type,color:l.color,width:l.width,height:l.height,markerUnits:l.markerUnits,strokeWidth:l.strokeWidth,orient:l.orient},l.id))})}):null};a2.displayName="MarkerDefinitions";var E8=j.memo(a2);function r2({x:e,y:t,label:s,labelStyle:r,labelShowBg:i=!0,labelBgStyle:l,labelBgPadding:d=[2,4],labelBgBorderRadius:f=2,children:m,className:h,...v}){const[g,y]=j.useState({x:1,y:0,width:0,height:0}),b=Nt(["react-flow__edge-textwrapper",h]),S=j.useRef(null);return j.useEffect(()=>{if(S.current){const w=S.current.getBBox();y({x:w.x,y:w.y,width:w.width,height:w.height})}},[s]),s?c.jsxs("g",{transform:`translate(${e-g.width/2} ${t-g.height/2})`,className:b,visibility:g.width?"visible":"hidden",...v,children:[i&&c.jsx("rect",{width:g.width+2*d[0],x:-d[0],y:-d[1],height:g.height+2*d[1],className:"react-flow__edge-textbg",style:l,rx:f,ry:f}),c.jsx("text",{className:"react-flow__edge-text",y:g.height/2,dy:"0.3em",ref:S,style:r,children:s}),m]}):null}r2.displayName="EdgeText";const C8=j.memo(r2);function _f({path:e,labelX:t,labelY:s,label:r,labelStyle:i,labelShowBg:l,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:m,interactionWidth:h=20,...v}){return c.jsxs(c.Fragment,{children:[c.jsx("path",{...v,d:e,fill:"none",className:Nt(["react-flow__edge-path",v.className])}),h?c.jsx("path",{d:e,fill:"none",strokeOpacity:0,strokeWidth:h,className:"react-flow__edge-interaction"}):null,r&&Gn(t)&&Gn(s)?c.jsx(C8,{x:t,y:s,label:r,labelStyle:i,labelShowBg:l,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:m}):null]})}function NS({pos:e,x1:t,y1:s,x2:r,y2:i}){return e===Ne.Left||e===Ne.Right?[.5*(t+r),s]:[t,.5*(s+i)]}function i2({sourceX:e,sourceY:t,sourcePosition:s=Ne.Bottom,targetX:r,targetY:i,targetPosition:l=Ne.Top}){const[d,f]=NS({pos:s,x1:e,y1:t,x2:r,y2:i}),[m,h]=NS({pos:l,x1:r,y1:i,x2:e,y2:t}),[v,g,y,b]=Aj({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:d,sourceControlY:f,targetControlX:m,targetControlY:h});return[`M${e},${t} C${d},${f} ${m},${h} ${r},${i}`,v,g,y,b]}function o2(e){return j.memo(({id:t,sourceX:s,sourceY:r,targetX:i,targetY:l,sourcePosition:d,targetPosition:f,label:m,labelStyle:h,labelShowBg:v,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:S,markerEnd:w,markerStart:N,interactionWidth:E})=>{const[T,_,R]=i2({sourceX:s,sourceY:r,sourcePosition:d,targetX:i,targetY:l,targetPosition:f}),L=e.isInternal?void 0:t;return c.jsx(_f,{id:L,path:T,labelX:_,labelY:R,label:m,labelStyle:h,labelShowBg:v,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:S,markerEnd:w,markerStart:N,interactionWidth:E})})}const _8=o2({isInternal:!1}),l2=o2({isInternal:!0});_8.displayName="SimpleBezierEdge";l2.displayName="SimpleBezierEdgeInternal";function c2(e){return j.memo(({id:t,sourceX:s,sourceY:r,targetX:i,targetY:l,label:d,labelStyle:f,labelShowBg:m,labelBgStyle:h,labelBgPadding:v,labelBgBorderRadius:g,style:y,sourcePosition:b=Ne.Bottom,targetPosition:S=Ne.Top,markerEnd:w,markerStart:N,pathOptions:E,interactionWidth:T})=>{const[_,R,L]=hg({sourceX:s,sourceY:r,sourcePosition:b,targetX:i,targetY:l,targetPosition:S,borderRadius:E==null?void 0:E.borderRadius,offset:E==null?void 0:E.offset,stepPosition:E==null?void 0:E.stepPosition}),I=e.isInternal?void 0:t;return c.jsx(_f,{id:I,path:_,labelX:R,labelY:L,label:d,labelStyle:f,labelShowBg:m,labelBgStyle:h,labelBgPadding:v,labelBgBorderRadius:g,style:y,markerEnd:w,markerStart:N,interactionWidth:T})})}const u2=c2({isInternal:!1}),d2=c2({isInternal:!0});u2.displayName="SmoothStepEdge";d2.displayName="SmoothStepEdgeInternal";function f2(e){return j.memo(({id:t,...s})=>{var i;const r=e.isInternal?void 0:t;return c.jsx(u2,{...s,id:r,pathOptions:j.useMemo(()=>{var l;return{borderRadius:0,offset:(l=s.pathOptions)==null?void 0:l.offset}},[(i=s.pathOptions)==null?void 0:i.offset])})})}const R8=f2({isInternal:!1}),h2=f2({isInternal:!0});R8.displayName="StepEdge";h2.displayName="StepEdgeInternal";function m2(e){return j.memo(({id:t,sourceX:s,sourceY:r,targetX:i,targetY:l,label:d,labelStyle:f,labelShowBg:m,labelBgStyle:h,labelBgPadding:v,labelBgBorderRadius:g,style:y,markerEnd:b,markerStart:S,interactionWidth:w})=>{const[N,E,T]=Oj({sourceX:s,sourceY:r,targetX:i,targetY:l}),_=e.isInternal?void 0:t;return c.jsx(_f,{id:_,path:N,labelX:E,labelY:T,label:d,labelStyle:f,labelShowBg:m,labelBgStyle:h,labelBgPadding:v,labelBgBorderRadius:g,style:y,markerEnd:b,markerStart:S,interactionWidth:w})})}const T8=m2({isInternal:!1}),p2=m2({isInternal:!0});T8.displayName="StraightEdge";p2.displayName="StraightEdgeInternal";function g2(e){return j.memo(({id:t,sourceX:s,sourceY:r,targetX:i,targetY:l,sourcePosition:d=Ne.Bottom,targetPosition:f=Ne.Top,label:m,labelStyle:h,labelShowBg:v,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:S,markerEnd:w,markerStart:N,pathOptions:E,interactionWidth:T})=>{const[_,R,L]=Mj({sourceX:s,sourceY:r,sourcePosition:d,targetX:i,targetY:l,targetPosition:f,curvature:E==null?void 0:E.curvature}),I=e.isInternal?void 0:t;return c.jsx(_f,{id:I,path:_,labelX:R,labelY:L,label:m,labelStyle:h,labelShowBg:v,labelBgStyle:g,labelBgPadding:y,labelBgBorderRadius:b,style:S,markerEnd:w,markerStart:N,interactionWidth:T})})}const A8=g2({isInternal:!1}),x2=g2({isInternal:!0});A8.displayName="BezierEdge";x2.displayName="BezierEdgeInternal";const jS={default:x2,straight:p2,step:h2,smoothstep:d2,simplebezier:l2},ES={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},M8=(e,t,s)=>s===Ne.Left?e-t:s===Ne.Right?e+t:e,k8=(e,t,s)=>s===Ne.Top?e-t:s===Ne.Bottom?e+t:e,CS="react-flow__edgeupdater";function _S({position:e,centerX:t,centerY:s,radius:r=10,onMouseDown:i,onMouseEnter:l,onMouseOut:d,type:f}){return c.jsx("circle",{onMouseDown:i,onMouseEnter:l,onMouseOut:d,className:Nt([CS,`${CS}-${f}`]),cx:M8(t,r,e),cy:k8(s,r,e),r,stroke:"transparent",fill:"transparent"})}function O8({isReconnectable:e,reconnectRadius:t,edge:s,sourceX:r,sourceY:i,targetX:l,targetY:d,sourcePosition:f,targetPosition:m,onReconnect:h,onReconnectStart:v,onReconnectEnd:g,setReconnecting:y,setUpdateHover:b}){const S=ut(),w=(R,L)=>{if(R.button!==0)return;const{autoPanOnConnect:I,domNode:P,connectionMode:A,connectionRadius:M,lib:q,onConnectStart:z,cancelConnection:Q,nodeLookup:Y,rfId:B,panBy:V,updateConnection:k}=S.getState(),U=L.type==="target",$=(D,G)=>{y(!1),g==null||g(D,s,L.type,G)},F=D=>h==null?void 0:h(s,D),H=(D,G)=>{y(!0),v==null||v(R,s,L.type),z==null||z(D,G)};gg.onPointerDown(R.nativeEvent,{autoPanOnConnect:I,connectionMode:A,connectionRadius:M,domNode:P,handleId:L.id,nodeId:L.nodeId,nodeLookup:Y,isTarget:U,edgeUpdaterType:L.type,lib:q,flowId:B,cancelConnection:Q,panBy:V,isValidConnection:(...D)=>{var G,J;return((J=(G=S.getState()).isValidConnection)==null?void 0:J.call(G,...D))??!0},onConnect:F,onConnectStart:H,onConnectEnd:(...D)=>{var G,J;return(J=(G=S.getState()).onConnectEnd)==null?void 0:J.call(G,...D)},onReconnectEnd:$,updateConnection:k,getTransform:()=>S.getState().transform,getFromHandle:()=>S.getState().connection.fromHandle,dragThreshold:S.getState().connectionDragThreshold,handleDomNode:R.currentTarget})},N=R=>w(R,{nodeId:s.target,id:s.targetHandle??null,type:"target"}),E=R=>w(R,{nodeId:s.source,id:s.sourceHandle??null,type:"source"}),T=()=>b(!0),_=()=>b(!1);return c.jsxs(c.Fragment,{children:[(e===!0||e==="source")&&c.jsx(_S,{position:f,centerX:r,centerY:i,radius:t,onMouseDown:N,onMouseEnter:T,onMouseOut:_,type:"source"}),(e===!0||e==="target")&&c.jsx(_S,{position:m,centerX:l,centerY:d,radius:t,onMouseDown:E,onMouseEnter:T,onMouseOut:_,type:"target"})]})}function D8({id:e,edgesFocusable:t,edgesReconnectable:s,elementsSelectable:r,onClick:i,onDoubleClick:l,onContextMenu:d,onMouseEnter:f,onMouseMove:m,onMouseLeave:h,reconnectRadius:v,onReconnect:g,onReconnectStart:y,onReconnectEnd:b,rfId:S,edgeTypes:w,noPanClassName:N,onError:E,disableKeyboardA11y:T}){let _=Ge(xe=>xe.edgeLookup.get(e));const R=Ge(xe=>xe.defaultEdgeOptions);_=R?{...R,..._}:_;let L=_.type||"default",I=(w==null?void 0:w[L])||jS[L];I===void 0&&(E==null||E("011",ms.error011(L)),L="default",I=(w==null?void 0:w.default)||jS.default);const P=!!(_.focusable||t&&typeof _.focusable>"u"),A=typeof g<"u"&&(_.reconnectable||s&&typeof _.reconnectable>"u"),M=!!(_.selectable||r&&typeof _.selectable>"u"),q=j.useRef(null),[z,Q]=j.useState(!1),[Y,B]=j.useState(!1),V=ut(),{zIndex:k,sourceX:U,sourceY:$,targetX:F,targetY:H,sourcePosition:D,targetPosition:G}=Ge(j.useCallback(xe=>{const ve=xe.nodeLookup.get(_.source),Te=xe.nodeLookup.get(_.target);if(!ve||!Te)return{zIndex:_.zIndex,...ES};const Ve=TL({id:e,sourceNode:ve,targetNode:Te,sourceHandle:_.sourceHandle||null,targetHandle:_.targetHandle||null,connectionMode:xe.connectionMode,onError:E});return{zIndex:SL({selected:_.selected,zIndex:_.zIndex,sourceNode:ve,targetNode:Te,elevateOnSelect:xe.elevateEdgesOnSelect,zIndexMode:xe.zIndexMode}),...Ve||ES}},[_.source,_.target,_.sourceHandle,_.targetHandle,_.selected,_.zIndex]),ct),J=j.useMemo(()=>_.markerStart?`url('#${mg(_.markerStart,S)}')`:void 0,[_.markerStart,S]),se=j.useMemo(()=>_.markerEnd?`url('#${mg(_.markerEnd,S)}')`:void 0,[_.markerEnd,S]);if(_.hidden||U===null||$===null||F===null||H===null)return null;const oe=xe=>{var Oe;const{addSelectedEdges:ve,unselectNodesAndEdges:Te,multiSelectionActive:Ve}=V.getState();M&&(V.setState({nodesSelectionActive:!1}),_.selected&&Ve?(Te({nodes:[],edges:[_]}),(Oe=q.current)==null||Oe.blur()):ve([e])),i&&i(xe,_)},ce=l?xe=>{l(xe,{..._})}:void 0,de=d?xe=>{d(xe,{..._})}:void 0,ue=f?xe=>{f(xe,{..._})}:void 0,fe=m?xe=>{m(xe,{..._})}:void 0,Ce=h?xe=>{h(xe,{..._})}:void 0,be=xe=>{var ve;if(!T&&gj.includes(xe.key)&&M){const{unselectNodesAndEdges:Te,addSelectedEdges:Ve}=V.getState();xe.key==="Escape"?((ve=q.current)==null||ve.blur(),Te({edges:[_]})):Ve([e])}};return c.jsx("svg",{style:{zIndex:k},children:c.jsxs("g",{className:Nt(["react-flow__edge",`react-flow__edge-${L}`,_.className,N,{selected:_.selected,animated:_.animated,inactive:!M&&!i,updating:z,selectable:M}]),onClick:oe,onDoubleClick:ce,onContextMenu:de,onMouseEnter:ue,onMouseMove:fe,onMouseLeave:Ce,onKeyDown:P?be:void 0,tabIndex:P?0:void 0,role:_.ariaRole??(P?"group":"img"),"aria-roledescription":"edge","data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":_.ariaLabel===null?void 0:_.ariaLabel||`Edge from ${_.source} to ${_.target}`,"aria-describedby":P?`${Fj}-${S}`:void 0,ref:q,..._.domAttributes,children:[!Y&&c.jsx(I,{id:e,source:_.source,target:_.target,type:_.type,selected:_.selected,animated:_.animated,selectable:M,deletable:_.deletable??!0,label:_.label,labelStyle:_.labelStyle,labelShowBg:_.labelShowBg,labelBgStyle:_.labelBgStyle,labelBgPadding:_.labelBgPadding,labelBgBorderRadius:_.labelBgBorderRadius,sourceX:U,sourceY:$,targetX:F,targetY:H,sourcePosition:D,targetPosition:G,data:_.data,style:_.style,sourceHandleId:_.sourceHandle,targetHandleId:_.targetHandle,markerStart:J,markerEnd:se,pathOptions:"pathOptions"in _?_.pathOptions:void 0,interactionWidth:_.interactionWidth}),A&&c.jsx(O8,{edge:_,isReconnectable:A,reconnectRadius:v,onReconnect:g,onReconnectStart:y,onReconnectEnd:b,sourceX:U,sourceY:$,targetX:F,targetY:H,sourcePosition:D,targetPosition:G,setUpdateHover:Q,setReconnecting:B})]})})}var L8=j.memo(D8);const z8=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function y2({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:s,edgeTypes:r,noPanClassName:i,onReconnect:l,onEdgeContextMenu:d,onEdgeMouseEnter:f,onEdgeMouseMove:m,onEdgeMouseLeave:h,onEdgeClick:v,reconnectRadius:g,onEdgeDoubleClick:y,onReconnectStart:b,onReconnectEnd:S,disableKeyboardA11y:w}){const{edgesFocusable:N,edgesReconnectable:E,elementsSelectable:T,onError:_}=Ge(z8,ct),R=b8(t);return c.jsxs("div",{className:"react-flow__edges",children:[c.jsx(E8,{defaultColor:e,rfId:s}),R.map(L=>c.jsx(L8,{id:L,edgesFocusable:N,edgesReconnectable:E,elementsSelectable:T,noPanClassName:i,onReconnect:l,onContextMenu:d,onMouseEnter:f,onMouseMove:m,onMouseLeave:h,onClick:v,reconnectRadius:g,onDoubleClick:y,onReconnectStart:b,onReconnectEnd:S,rfId:s,onError:_,edgeTypes:r,disableKeyboardA11y:w},L))]})}y2.displayName="EdgeRenderer";const P8=j.memo(y2),I8=e=>`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]})`;function B8({children:e}){const t=Ge(I8);return c.jsx("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:t},children:e})}function H8(e){const t=d0(),s=j.useRef(!1);j.useEffect(()=>{!s.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),s.current=!0)},[e,t.viewportInitialized])}const U8=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function $8(e){const t=Ge(U8),s=ut();return j.useEffect(()=>{e&&(t==null||t(e),s.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function q8(e){return e.connection.inProgress?{...e.connection,to:Ec(e.connection.to,e.transform)}:{...e.connection}}function V8(e){return q8}function G8(e){const t=V8();return Ge(t,ct)}const Y8=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function Q8({containerStyle:e,style:t,type:s,component:r}){const{nodesConnectable:i,width:l,height:d,isValid:f,inProgress:m}=Ge(Y8,ct);return!(l&&i&&m)?null:c.jsx("svg",{style:e,width:l,height:d,className:"react-flow__connectionline react-flow__container",children:c.jsx("g",{className:Nt(["react-flow__connection",vj(f)]),children:c.jsx(v2,{style:t,type:s,CustomComponent:r,isValid:f})})})}const v2=({style:e,type:t=Da.Bezier,CustomComponent:s,isValid:r})=>{const{inProgress:i,from:l,fromNode:d,fromHandle:f,fromPosition:m,to:h,toNode:v,toHandle:g,toPosition:y,pointer:b}=G8();if(!i)return;if(s)return c.jsx(s,{connectionLineType:t,connectionLineStyle:e,fromNode:d,fromHandle:f,fromX:l.x,fromY:l.y,toX:h.x,toY:h.y,fromPosition:m,toPosition:y,connectionStatus:vj(r),toNode:v,toHandle:g,pointer:b});let S="";const w={sourceX:l.x,sourceY:l.y,sourcePosition:m,targetX:h.x,targetY:h.y,targetPosition:y};switch(t){case Da.Bezier:[S]=Mj(w);break;case Da.SimpleBezier:[S]=i2(w);break;case Da.Step:[S]=hg({...w,borderRadius:0});break;case Da.SmoothStep:[S]=hg(w);break;default:[S]=Oj(w)}return c.jsx("path",{d:S,fill:"none",className:"react-flow__connection-path",style:e})};v2.displayName="ConnectionLine";const F8={};function RS(e=F8){j.useRef(e),ut(),j.useEffect(()=>{},[e])}function K8(){ut(),j.useRef(!1),j.useEffect(()=>{},[])}function b2({nodeTypes:e,edgeTypes:t,onInit:s,onNodeClick:r,onEdgeClick:i,onNodeDoubleClick:l,onEdgeDoubleClick:d,onNodeMouseEnter:f,onNodeMouseMove:m,onNodeMouseLeave:h,onNodeContextMenu:v,onSelectionContextMenu:g,onSelectionStart:y,onSelectionEnd:b,connectionLineType:S,connectionLineStyle:w,connectionLineComponent:N,connectionLineContainerStyle:E,selectionKeyCode:T,selectionOnDrag:_,selectionMode:R,multiSelectionKeyCode:L,panActivationKeyCode:I,zoomActivationKeyCode:P,deleteKeyCode:A,onlyRenderVisibleElements:M,elementsSelectable:q,defaultViewport:z,translateExtent:Q,minZoom:Y,maxZoom:B,preventScrolling:V,defaultMarkerColor:k,zoomOnScroll:U,zoomOnPinch:$,panOnScroll:F,panOnScrollSpeed:H,panOnScrollMode:D,zoomOnDoubleClick:G,panOnDrag:J,onPaneClick:se,onPaneMouseEnter:oe,onPaneMouseMove:ce,onPaneMouseLeave:de,onPaneScroll:ue,onPaneContextMenu:fe,paneClickDistance:Ce,nodeClickDistance:be,onEdgeContextMenu:xe,onEdgeMouseEnter:ve,onEdgeMouseMove:Te,onEdgeMouseLeave:Ve,reconnectRadius:Oe,onReconnect:tt,onReconnectStart:me,onReconnectEnd:Pe,noDragClassName:rt,noWheelClassName:dt,noPanClassName:mn,disableKeyboardA11y:Zn,nodeExtent:Ae,rfId:pt,viewport:Lt,onViewportChange:Wn}){return RS(e),RS(t),K8(),H8(s),$8(Lt),c.jsx(u8,{onPaneClick:se,onPaneMouseEnter:oe,onPaneMouseMove:ce,onPaneMouseLeave:de,onPaneContextMenu:fe,onPaneScroll:ue,paneClickDistance:Ce,deleteKeyCode:A,selectionKeyCode:T,selectionOnDrag:_,selectionMode:R,onSelectionStart:y,onSelectionEnd:b,multiSelectionKeyCode:L,panActivationKeyCode:I,zoomActivationKeyCode:P,elementsSelectable:q,zoomOnScroll:U,zoomOnPinch:$,zoomOnDoubleClick:G,panOnScroll:F,panOnScrollSpeed:H,panOnScrollMode:D,panOnDrag:J,defaultViewport:z,translateExtent:Q,minZoom:Y,maxZoom:B,onSelectionContextMenu:g,preventScrolling:V,noDragClassName:rt,noWheelClassName:dt,noPanClassName:mn,disableKeyboardA11y:Zn,onViewportChange:Wn,isControlledViewport:!!Lt,children:c.jsxs(B8,{children:[c.jsx(P8,{edgeTypes:t,onEdgeClick:i,onEdgeDoubleClick:d,onReconnect:tt,onReconnectStart:me,onReconnectEnd:Pe,onlyRenderVisibleElements:M,onEdgeContextMenu:xe,onEdgeMouseEnter:ve,onEdgeMouseMove:Te,onEdgeMouseLeave:Ve,reconnectRadius:Oe,defaultMarkerColor:k,noPanClassName:mn,disableKeyboardA11y:Zn,rfId:pt}),c.jsx(Q8,{style:w,type:S,component:N,containerStyle:E}),c.jsx("div",{className:"react-flow__edgelabel-renderer"}),c.jsx(v8,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:l,onNodeMouseEnter:f,onNodeMouseMove:m,onNodeMouseLeave:h,onNodeContextMenu:v,nodeClickDistance:be,onlyRenderVisibleElements:M,noPanClassName:mn,noDragClassName:rt,disableKeyboardA11y:Zn,nodeExtent:Ae,rfId:pt}),c.jsx("div",{className:"react-flow__viewport-portal"})]})})}b2.displayName="GraphView";const X8=j.memo(b2),TS=({nodes:e,edges:t,defaultNodes:s,defaultEdges:r,width:i,height:l,fitView:d,fitViewOptions:f,minZoom:m=.5,maxZoom:h=2,nodeOrigin:v,nodeExtent:g,zIndexMode:y="basic"}={})=>{const b=new Map,S=new Map,w=new Map,N=new Map,E=r??t??[],T=s??e??[],_=v??[0,0],R=g??rc;zj(w,N,E);const L=pg(T,b,S,{nodeOrigin:_,nodeExtent:R,zIndexMode:y});let I=[0,0,1];if(d&&i&&l){const P=Nc(b,{filter:z=>!!((z.width||z.initialWidth)&&(z.height||z.initialHeight))}),{x:A,y:M,zoom:q}=a0(P,i,l,m,h,(f==null?void 0:f.padding)??.1);I=[A,M,q]}return{rfId:"1",width:i??0,height:l??0,transform:I,nodes:T,nodesInitialized:L,nodeLookup:b,parentLookup:S,edges:E,edgeLookup:N,connectionLookup:w,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:s!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:m,maxZoom:h,translateExtent:rc,nodeExtent:R,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:bo.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:_,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:d??!1,fitViewOptions:f,fitViewResolver:null,connection:{...yj},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:pL,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:xj,zIndexMode:y,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}},Z8=({nodes:e,edges:t,defaultNodes:s,defaultEdges:r,width:i,height:l,fitView:d,fitViewOptions:f,minZoom:m,maxZoom:h,nodeOrigin:v,nodeExtent:g,zIndexMode:y})=>hz((b,S)=>{async function w(){const{nodeLookup:N,panZoom:E,fitViewOptions:T,fitViewResolver:_,width:R,height:L,minZoom:I,maxZoom:P}=S();E&&(await hL({nodes:N,width:R,height:L,panZoom:E,minZoom:I,maxZoom:P},T),_==null||_.resolve(!0),b({fitViewResolver:null}))}return{...TS({nodes:e,edges:t,width:i,height:l,fitView:d,fitViewOptions:f,minZoom:m,maxZoom:h,nodeOrigin:v,nodeExtent:g,defaultNodes:s,defaultEdges:r,zIndexMode:y}),setNodes:N=>{const{nodeLookup:E,parentLookup:T,nodeOrigin:_,elevateNodesOnSelect:R,fitViewQueued:L,zIndexMode:I}=S(),P=pg(N,E,T,{nodeOrigin:_,nodeExtent:g,elevateNodesOnSelect:R,checkEquality:!0,zIndexMode:I});L&&P?(w(),b({nodes:N,nodesInitialized:P,fitViewQueued:!1,fitViewOptions:void 0})):b({nodes:N,nodesInitialized:P})},setEdges:N=>{const{connectionLookup:E,edgeLookup:T}=S();zj(E,T,N),b({edges:N})},setDefaultNodesAndEdges:(N,E)=>{if(N){const{setNodes:T}=S();T(N),b({hasDefaultNodes:!0})}if(E){const{setEdges:T}=S();T(E),b({hasDefaultEdges:!0})}},updateNodeInternals:N=>{const{triggerNodeChanges:E,nodeLookup:T,parentLookup:_,domNode:R,nodeOrigin:L,nodeExtent:I,debug:P,fitViewQueued:A,zIndexMode:M}=S(),{changes:q,updatedInternals:z}=PL(N,T,_,R,L,I,M);z&&(OL(T,_,{nodeOrigin:L,nodeExtent:I,zIndexMode:M}),A?(w(),b({fitViewQueued:!1,fitViewOptions:void 0})):b({}),(q==null?void 0:q.length)>0&&(P&&console.log("React Flow: trigger node changes",q),E==null||E(q)))},updateNodePositions:(N,E=!1)=>{const T=[];let _=[];const{nodeLookup:R,triggerNodeChanges:L,connection:I,updateConnection:P,onNodesChangeMiddlewareMap:A}=S();for(const[M,q]of N){const z=R.get(M),Q=!!(z!=null&&z.expandParent&&(z!=null&&z.parentId)&&(q!=null&&q.position)),Y={id:M,type:"position",position:Q?{x:Math.max(0,q.position.x),y:Math.max(0,q.position.y)}:q.position,dragging:E};if(z&&I.inProgress&&I.fromNode.id===z.id){const B=ni(z,I.fromHandle,Ne.Left,!0);P({...I,from:B})}Q&&z.parentId&&T.push({id:M,parentId:z.parentId,rect:{...q.internals.positionAbsolute,width:q.measured.width??0,height:q.measured.height??0}}),_.push(Y)}if(T.length>0){const{parentLookup:M,nodeOrigin:q}=S(),z=u0(T,R,M,q);_.push(...z)}for(const M of A.values())_=M(_);L(_)},triggerNodeChanges:N=>{const{onNodesChange:E,setNodes:T,nodes:_,hasDefaultNodes:R,debug:L}=S();if(N!=null&&N.length){if(R){const I=Dz(N,_);T(I)}L&&console.log("React Flow: trigger node changes",N),E==null||E(N)}},triggerEdgeChanges:N=>{const{onEdgesChange:E,setEdges:T,edges:_,hasDefaultEdges:R,debug:L}=S();if(N!=null&&N.length){if(R){const I=Lz(N,_);T(I)}L&&console.log("React Flow: trigger edge changes",N),E==null||E(N)}},addSelectedNodes:N=>{const{multiSelectionActive:E,edgeLookup:T,nodeLookup:_,triggerNodeChanges:R,triggerEdgeChanges:L}=S();if(E){const I=N.map(P=>Rr(P,!0));R(I);return}R(Ji(_,new Set([...N]),!0)),L(Ji(T))},addSelectedEdges:N=>{const{multiSelectionActive:E,edgeLookup:T,nodeLookup:_,triggerNodeChanges:R,triggerEdgeChanges:L}=S();if(E){const I=N.map(P=>Rr(P,!0));L(I);return}L(Ji(T,new Set([...N]))),R(Ji(_,new Set,!0))},unselectNodesAndEdges:({nodes:N,edges:E}={})=>{const{edges:T,nodes:_,nodeLookup:R,triggerNodeChanges:L,triggerEdgeChanges:I}=S(),P=N||_,A=E||T,M=[];for(const z of P){if(!z.selected)continue;const Q=R.get(z.id);Q&&(Q.selected=!1),M.push(Rr(z.id,!1))}const q=[];for(const z of A)z.selected&&q.push(Rr(z.id,!1));L(M),I(q)},setMinZoom:N=>{const{panZoom:E,maxZoom:T}=S();E==null||E.setScaleExtent([N,T]),b({minZoom:N})},setMaxZoom:N=>{const{panZoom:E,minZoom:T}=S();E==null||E.setScaleExtent([T,N]),b({maxZoom:N})},setTranslateExtent:N=>{var E;(E=S().panZoom)==null||E.setTranslateExtent(N),b({translateExtent:N})},resetSelectedElements:()=>{const{edges:N,nodes:E,triggerNodeChanges:T,triggerEdgeChanges:_,elementsSelectable:R}=S();if(!R)return;const L=E.reduce((P,A)=>A.selected?[...P,Rr(A.id,!1)]:P,[]),I=N.reduce((P,A)=>A.selected?[...P,Rr(A.id,!1)]:P,[]);T(L),_(I)},setNodeExtent:N=>{const{nodes:E,nodeLookup:T,parentLookup:_,nodeOrigin:R,elevateNodesOnSelect:L,nodeExtent:I,zIndexMode:P}=S();N[0][0]===I[0][0]&&N[0][1]===I[0][1]&&N[1][0]===I[1][0]&&N[1][1]===I[1][1]||(pg(E,T,_,{nodeOrigin:R,nodeExtent:N,elevateNodesOnSelect:L,checkEquality:!1,zIndexMode:P}),b({nodeExtent:N}))},panBy:N=>{const{transform:E,width:T,height:_,panZoom:R,translateExtent:L}=S();return IL({delta:N,panZoom:R,transform:E,translateExtent:L,width:T,height:_})},setCenter:async(N,E,T)=>{const{width:_,height:R,maxZoom:L,panZoom:I}=S();if(!I)return Promise.resolve(!1);const P=typeof(T==null?void 0:T.zoom)<"u"?T.zoom:L;return await I.setViewport({x:_/2-N*P,y:R/2-E*P,zoom:P},{duration:T==null?void 0:T.duration,ease:T==null?void 0:T.ease,interpolate:T==null?void 0:T.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{b({connection:{...yj}})},updateConnection:N=>{b({connection:N})},reset:()=>b({...TS()})}},Object.is);function W8({initialNodes:e,initialEdges:t,defaultNodes:s,defaultEdges:r,initialWidth:i,initialHeight:l,initialMinZoom:d,initialMaxZoom:f,initialFitViewOptions:m,fitView:h,nodeOrigin:v,nodeExtent:g,zIndexMode:y,children:b}){const[S]=j.useState(()=>Z8({nodes:e,edges:t,defaultNodes:s,defaultEdges:r,width:i,height:l,fitView:h,minZoom:d,maxZoom:f,fitViewOptions:m,nodeOrigin:v,nodeExtent:g,zIndexMode:y}));return c.jsx(mz,{value:S,children:c.jsx(Bz,{children:b})})}function J8({children:e,nodes:t,edges:s,defaultNodes:r,defaultEdges:i,width:l,height:d,fitView:f,fitViewOptions:m,minZoom:h,maxZoom:v,nodeOrigin:g,nodeExtent:y,zIndexMode:b}){return j.useContext(jf)?c.jsx(c.Fragment,{children:e}):c.jsx(W8,{initialNodes:t,initialEdges:s,defaultNodes:r,defaultEdges:i,initialWidth:l,initialHeight:d,fitView:f,initialFitViewOptions:m,initialMinZoom:h,initialMaxZoom:v,nodeOrigin:g,nodeExtent:y,zIndexMode:b,children:e})}const e6={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};function t6({nodes:e,edges:t,defaultNodes:s,defaultEdges:r,className:i,nodeTypes:l,edgeTypes:d,onNodeClick:f,onEdgeClick:m,onInit:h,onMove:v,onMoveStart:g,onMoveEnd:y,onConnect:b,onConnectStart:S,onConnectEnd:w,onClickConnectStart:N,onClickConnectEnd:E,onNodeMouseEnter:T,onNodeMouseMove:_,onNodeMouseLeave:R,onNodeContextMenu:L,onNodeDoubleClick:I,onNodeDragStart:P,onNodeDrag:A,onNodeDragStop:M,onNodesDelete:q,onEdgesDelete:z,onDelete:Q,onSelectionChange:Y,onSelectionDragStart:B,onSelectionDrag:V,onSelectionDragStop:k,onSelectionContextMenu:U,onSelectionStart:$,onSelectionEnd:F,onBeforeDelete:H,connectionMode:D,connectionLineType:G=Da.Bezier,connectionLineStyle:J,connectionLineComponent:se,connectionLineContainerStyle:oe,deleteKeyCode:ce="Backspace",selectionKeyCode:de="Shift",selectionOnDrag:ue=!1,selectionMode:fe=ic.Full,panActivationKeyCode:Ce="Space",multiSelectionKeyCode:be=cc()?"Meta":"Control",zoomActivationKeyCode:xe=cc()?"Meta":"Control",snapToGrid:ve,snapGrid:Te,onlyRenderVisibleElements:Ve=!1,selectNodesOnDrag:Oe,nodesDraggable:tt,autoPanOnNodeFocus:me,nodesConnectable:Pe,nodesFocusable:rt,nodeOrigin:dt=Kj,edgesFocusable:mn,edgesReconnectable:Zn,elementsSelectable:Ae=!0,defaultViewport:pt=_z,minZoom:Lt=.5,maxZoom:Wn=2,translateExtent:nr=rc,preventScrolling:Tf=!0,nodeExtent:ri,defaultMarkerColor:Af="#b1b1b7",zoomOnScroll:Mf=!0,zoomOnPinch:sr=!0,panOnScroll:Vt=!1,panOnScrollSpeed:Jn=.5,panOnScrollMode:Gt=Kr.Free,zoomOnDoubleClick:kf=!0,panOnDrag:Of=!0,onPaneClick:Df,onPaneMouseEnter:ii,onPaneMouseMove:oi,onPaneMouseLeave:li,onPaneScroll:gs,onPaneContextMenu:ci,paneClickDistance:ar=1,nodeClickDistance:Lf=0,children:Cc,onReconnect:_o,onReconnectStart:rr,onReconnectEnd:zf,onEdgeContextMenu:_c,onEdgeDoubleClick:Rc,onEdgeMouseEnter:Tc,onEdgeMouseMove:Ro,onEdgeMouseLeave:To,reconnectRadius:Ac=10,onNodesChange:Mc,onEdgesChange:es,noDragClassName:jt="nodrag",noWheelClassName:Ut="nowheel",noPanClassName:xs="nopan",fitView:ui,fitViewOptions:kc,connectOnClick:Pf,attributionPosition:Oc,proOptions:ir,defaultEdgeOptions:Ao,elevateNodesOnSelect:Ws=!0,elevateEdgesOnSelect:Js=!1,disableKeyboardA11y:ea=!1,autoPanOnConnect:ta,autoPanOnNodeDrag:yt,autoPanSpeed:Dc,connectionRadius:Lc,isValidConnection:ys,onError:na,style:If,id:Mo,nodeDragThreshold:zc,connectionDragThreshold:Bf,viewport:di,onViewportChange:fi,width:Pn,height:Jt,colorMode:Pc="light",debug:Hf,onScroll:sa,ariaLabelConfig:Ic,zIndexMode:or="basic",...Uf},en){const lr=Mo||"1",Bc=Mz(Pc),ko=j.useCallback(vs=>{vs.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),sa==null||sa(vs)},[sa]);return c.jsx("div",{"data-testid":"rf__wrapper",...Uf,onScroll:ko,style:{...If,...e6},ref:en,className:Nt(["react-flow",i,Bc]),id:Mo,role:"application",children:c.jsxs(J8,{nodes:e,edges:t,width:Pn,height:Jt,fitView:ui,fitViewOptions:kc,minZoom:Lt,maxZoom:Wn,nodeOrigin:dt,nodeExtent:ri,zIndexMode:or,children:[c.jsx(X8,{onInit:h,onNodeClick:f,onEdgeClick:m,onNodeMouseEnter:T,onNodeMouseMove:_,onNodeMouseLeave:R,onNodeContextMenu:L,onNodeDoubleClick:I,nodeTypes:l,edgeTypes:d,connectionLineType:G,connectionLineStyle:J,connectionLineComponent:se,connectionLineContainerStyle:oe,selectionKeyCode:de,selectionOnDrag:ue,selectionMode:fe,deleteKeyCode:ce,multiSelectionKeyCode:be,panActivationKeyCode:Ce,zoomActivationKeyCode:xe,onlyRenderVisibleElements:Ve,defaultViewport:pt,translateExtent:nr,minZoom:Lt,maxZoom:Wn,preventScrolling:Tf,zoomOnScroll:Mf,zoomOnPinch:sr,zoomOnDoubleClick:kf,panOnScroll:Vt,panOnScrollSpeed:Jn,panOnScrollMode:Gt,panOnDrag:Of,onPaneClick:Df,onPaneMouseEnter:ii,onPaneMouseMove:oi,onPaneMouseLeave:li,onPaneScroll:gs,onPaneContextMenu:ci,paneClickDistance:ar,nodeClickDistance:Lf,onSelectionContextMenu:U,onSelectionStart:$,onSelectionEnd:F,onReconnect:_o,onReconnectStart:rr,onReconnectEnd:zf,onEdgeContextMenu:_c,onEdgeDoubleClick:Rc,onEdgeMouseEnter:Tc,onEdgeMouseMove:Ro,onEdgeMouseLeave:To,reconnectRadius:Ac,defaultMarkerColor:Af,noDragClassName:jt,noWheelClassName:Ut,noPanClassName:xs,rfId:lr,disableKeyboardA11y:ea,nodeExtent:ri,viewport:di,onViewportChange:fi}),c.jsx(Az,{nodes:e,edges:t,defaultNodes:s,defaultEdges:r,onConnect:b,onConnectStart:S,onConnectEnd:w,onClickConnectStart:N,onClickConnectEnd:E,nodesDraggable:tt,autoPanOnNodeFocus:me,nodesConnectable:Pe,nodesFocusable:rt,edgesFocusable:mn,edgesReconnectable:Zn,elementsSelectable:Ae,elevateNodesOnSelect:Ws,elevateEdgesOnSelect:Js,minZoom:Lt,maxZoom:Wn,nodeExtent:ri,onNodesChange:Mc,onEdgesChange:es,snapToGrid:ve,snapGrid:Te,connectionMode:D,translateExtent:nr,connectOnClick:Pf,defaultEdgeOptions:Ao,fitView:ui,fitViewOptions:kc,onNodesDelete:q,onEdgesDelete:z,onDelete:Q,onNodeDragStart:P,onNodeDrag:A,onNodeDragStop:M,onSelectionDrag:V,onSelectionDragStart:B,onSelectionDragStop:k,onMove:v,onMoveStart:g,onMoveEnd:y,noPanClassName:xs,nodeOrigin:dt,rfId:lr,autoPanOnConnect:ta,autoPanOnNodeDrag:yt,autoPanSpeed:Dc,onError:na,connectionRadius:Lc,isValidConnection:ys,selectNodesOnDrag:Oe,nodeDragThreshold:zc,connectionDragThreshold:Bf,onBeforeDelete:H,debug:Hf,ariaLabelConfig:Ic,zIndexMode:or}),c.jsx(Cz,{onSelectionChange:Y}),Cc,c.jsx(Sz,{proOptions:ir,position:Oc}),c.jsx(bz,{rfId:lr,disableKeyboardA11y:ea})]})})}var S2=Zj(t6);function n6({dimensions:e,lineWidth:t,variant:s,className:r}){return c.jsx("path",{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:Nt(["react-flow__background-pattern",s,r])})}function s6({radius:e,className:t}){return c.jsx("circle",{cx:e,cy:e,r:e,className:Nt(["react-flow__background-pattern","dots",t])})}var Za;(function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"})(Za||(Za={}));const a6={[Za.Dots]:1,[Za.Lines]:1,[Za.Cross]:6},r6=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function w2({id:e,variant:t=Za.Dots,gap:s=20,size:r,lineWidth:i=1,offset:l=0,color:d,bgColor:f,style:m,className:h,patternClassName:v}){const g=j.useRef(null),{transform:y,patternId:b}=Ge(r6,ct),S=r||a6[t],w=t===Za.Dots,N=t===Za.Cross,E=Array.isArray(s)?s:[s,s],T=[E[0]*y[2]||1,E[1]*y[2]||1],_=S*y[2],R=Array.isArray(l)?l:[l,l],L=N?[_,_]:T,I=[R[0]*y[2]||1+L[0]/2,R[1]*y[2]||1+L[1]/2],P=`${b}${e||""}`;return c.jsxs("svg",{className:Nt(["react-flow__background",h]),style:{...m,...Cf,"--xy-background-color-props":f,"--xy-background-pattern-color-props":d},ref:g,"data-testid":"rf__background",children:[c.jsx("pattern",{id:P,x:y[0]%T[0],y:y[1]%T[1],width:T[0],height:T[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${I[0]},-${I[1]})`,children:w?c.jsx(s6,{radius:_/2,className:v}):c.jsx(n6,{dimensions:L,lineWidth:i,variant:t,className:v})}),c.jsx("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${P})`})]})}w2.displayName="Background";const i6=j.memo(w2);function o6(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:c.jsx("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function l6(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:c.jsx("path",{d:"M0 0h32v4.2H0z"})})}function c6(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:c.jsx("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function u6(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:c.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function d6(){return c.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:c.jsx("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function Sd({children:e,className:t,...s}){return c.jsx("button",{type:"button",className:Nt(["react-flow__controls-button",t]),...s,children:e})}const f6=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function N2({style:e,showZoom:t=!0,showFitView:s=!0,showInteractive:r=!0,fitViewOptions:i,onZoomIn:l,onZoomOut:d,onFitView:f,onInteractiveChange:m,className:h,children:v,position:g="bottom-left",orientation:y="vertical","aria-label":b}){const S=ut(),{isInteractive:w,minZoomReached:N,maxZoomReached:E,ariaLabelConfig:T}=Ge(f6,ct),{zoomIn:_,zoomOut:R,fitView:L}=d0(),I=()=>{_(),l==null||l()},P=()=>{R(),d==null||d()},A=()=>{L(i),f==null||f()},M=()=>{S.setState({nodesDraggable:!w,nodesConnectable:!w,elementsSelectable:!w}),m==null||m(!w)},q=y==="horizontal"?"horizontal":"vertical";return c.jsxs(Ef,{className:Nt(["react-flow__controls",q,h]),position:g,style:e,"data-testid":"rf__controls","aria-label":b??T["controls.ariaLabel"],children:[t&&c.jsxs(c.Fragment,{children:[c.jsx(Sd,{onClick:I,className:"react-flow__controls-zoomin",title:T["controls.zoomIn.ariaLabel"],"aria-label":T["controls.zoomIn.ariaLabel"],disabled:E,children:c.jsx(o6,{})}),c.jsx(Sd,{onClick:P,className:"react-flow__controls-zoomout",title:T["controls.zoomOut.ariaLabel"],"aria-label":T["controls.zoomOut.ariaLabel"],disabled:N,children:c.jsx(l6,{})})]}),s&&c.jsx(Sd,{className:"react-flow__controls-fitview",onClick:A,title:T["controls.fitView.ariaLabel"],"aria-label":T["controls.fitView.ariaLabel"],children:c.jsx(c6,{})}),r&&c.jsx(Sd,{className:"react-flow__controls-interactive",onClick:M,title:T["controls.interactive.ariaLabel"],"aria-label":T["controls.interactive.ariaLabel"],children:w?c.jsx(d6,{}):c.jsx(u6,{})}),v]})}N2.displayName="Controls";const j2=j.memo(N2);function h6({id:e,x:t,y:s,width:r,height:i,style:l,color:d,strokeColor:f,strokeWidth:m,className:h,borderRadius:v,shapeRendering:g,selected:y,onClick:b}){const{background:S,backgroundColor:w}=l||{},N=d||S||w;return c.jsx("rect",{className:Nt(["react-flow__minimap-node",{selected:y},h]),x:t,y:s,rx:v,ry:v,width:r,height:i,style:{fill:N,stroke:f,strokeWidth:m},shapeRendering:g,onClick:b?E=>b(E,e):void 0})}const m6=j.memo(h6),p6=e=>e.nodes.map(t=>t.id),kp=e=>e instanceof Function?e:()=>e;function g6({nodeStrokeColor:e,nodeColor:t,nodeClassName:s="",nodeBorderRadius:r=5,nodeStrokeWidth:i,nodeComponent:l=m6,onClick:d}){const f=Ge(p6,ct),m=kp(t),h=kp(e),v=kp(s),g=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return c.jsx(c.Fragment,{children:f.map(y=>c.jsx(y6,{id:y,nodeColorFunc:m,nodeStrokeColorFunc:h,nodeClassNameFunc:v,nodeBorderRadius:r,nodeStrokeWidth:i,NodeComponent:l,onClick:d,shapeRendering:g},y))})}function x6({id:e,nodeColorFunc:t,nodeStrokeColorFunc:s,nodeClassNameFunc:r,nodeBorderRadius:i,nodeStrokeWidth:l,shapeRendering:d,NodeComponent:f,onClick:m}){const{node:h,x:v,y:g,width:y,height:b}=Ge(S=>{const w=S.nodeLookup.get(e);if(!w)return{node:void 0,x:0,y:0,width:0,height:0};const N=w.internals.userNode,{x:E,y:T}=w.internals.positionAbsolute,{width:_,height:R}=Zs(N);return{node:N,x:E,y:T,width:_,height:R}},ct);return!h||h.hidden||!Ej(h)?null:c.jsx(f,{x:v,y:g,width:y,height:b,style:h.style,selected:!!h.selected,className:r(h),color:t(h),borderRadius:i,strokeColor:s(h),strokeWidth:l,shapeRendering:d,onClick:m,id:h.id})}const y6=j.memo(x6);var v6=j.memo(g6);const b6=200,S6=150,w6=e=>!e.hidden,N6=e=>{const t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]};return{viewBB:t,boundingRect:e.nodeLookup.size>0?jj(Nc(e.nodeLookup,{filter:w6}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},j6="react-flow__minimap-desc";function E2({style:e,className:t,nodeStrokeColor:s,nodeColor:r,nodeClassName:i="",nodeBorderRadius:l=5,nodeStrokeWidth:d,nodeComponent:f,bgColor:m,maskColor:h,maskStrokeColor:v,maskStrokeWidth:g,position:y="bottom-right",onClick:b,onNodeClick:S,pannable:w=!1,zoomable:N=!1,ariaLabel:E,inversePan:T,zoomStep:_=1,offsetScale:R=5}){const L=ut(),I=j.useRef(null),{boundingRect:P,viewBB:A,rfId:M,panZoom:q,translateExtent:z,flowWidth:Q,flowHeight:Y,ariaLabelConfig:B}=Ge(N6,ct),V=(e==null?void 0:e.width)??b6,k=(e==null?void 0:e.height)??S6,U=P.width/V,$=P.height/k,F=Math.max(U,$),H=F*V,D=F*k,G=R*F,J=P.x-(H-P.width)/2-G,se=P.y-(D-P.height)/2-G,oe=H+G*2,ce=D+G*2,de=`${j6}-${M}`,ue=j.useRef(0),fe=j.useRef();ue.current=F,j.useEffect(()=>{if(I.current&&q)return fe.current=QL({domNode:I.current,panZoom:q,getTransform:()=>L.getState().transform,getViewScale:()=>ue.current}),()=>{var ve;(ve=fe.current)==null||ve.destroy()}},[q]),j.useEffect(()=>{var ve;(ve=fe.current)==null||ve.update({translateExtent:z,width:Q,height:Y,inversePan:T,pannable:w,zoomStep:_,zoomable:N})},[w,N,T,_,z,Q,Y]);const Ce=b?ve=>{var Oe;const[Te,Ve]=((Oe=fe.current)==null?void 0:Oe.pointer(ve))||[0,0];b(ve,{x:Te,y:Ve})}:void 0,be=S?j.useCallback((ve,Te)=>{const Ve=L.getState().nodeLookup.get(Te).internals.userNode;S(ve,Ve)},[]):void 0,xe=E??B["minimap.ariaLabel"];return c.jsx(Ef,{position:y,style:{...e,"--xy-minimap-background-color-props":typeof m=="string"?m:void 0,"--xy-minimap-mask-background-color-props":typeof h=="string"?h:void 0,"--xy-minimap-mask-stroke-color-props":typeof v=="string"?v:void 0,"--xy-minimap-mask-stroke-width-props":typeof g=="number"?g*F:void 0,"--xy-minimap-node-background-color-props":typeof r=="string"?r:void 0,"--xy-minimap-node-stroke-color-props":typeof s=="string"?s:void 0,"--xy-minimap-node-stroke-width-props":typeof d=="number"?d:void 0},className:Nt(["react-flow__minimap",t]),"data-testid":"rf__minimap",children:c.jsxs("svg",{width:V,height:k,viewBox:`${J} ${se} ${oe} ${ce}`,className:"react-flow__minimap-svg",role:"img","aria-labelledby":de,ref:I,onClick:Ce,children:[xe&&c.jsx("title",{id:de,children:xe}),c.jsx(v6,{onClick:be,nodeColor:r,nodeStrokeColor:s,nodeBorderRadius:l,nodeClassName:i,nodeStrokeWidth:d,nodeComponent:f}),c.jsx("path",{className:"react-flow__minimap-mask",d:`M${J-G},${se-G}h${oe+G*2}v${ce+G*2}h${-oe-G*2}z
221
221
  M${A.x},${A.y}h${A.width}v${A.height}h${-A.width}z`,fillRule:"evenodd",pointerEvents:"none"})]})})}E2.displayName="MiniMap";j.memo(E2);const E6=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,C6={[jo.Line]:"right",[jo.Handle]:"bottom-right"};function _6({nodeId:e,position:t,variant:s=jo.Handle,className:r,style:i=void 0,children:l,color:d,minWidth:f=10,minHeight:m=10,maxWidth:h=Number.MAX_VALUE,maxHeight:v=Number.MAX_VALUE,keepAspectRatio:g=!1,resizeDirection:y,autoScale:b=!0,shouldResize:S,onResizeStart:w,onResize:N,onResizeEnd:E}){const T=t2(),_=typeof e=="string"?e:T,R=ut(),L=j.useRef(null),I=s===jo.Handle,P=Ge(j.useCallback(E6(I&&b),[I,b]),ct),A=j.useRef(null),M=t??C6[s];j.useEffect(()=>{if(!(!L.current||!_))return A.current||(A.current=oz({domNode:L.current,nodeId:_,getStoreItems:()=>{const{nodeLookup:z,transform:Q,snapGrid:Y,snapToGrid:B,nodeOrigin:V,domNode:k}=R.getState();return{nodeLookup:z,transform:Q,snapGrid:Y,snapToGrid:B,nodeOrigin:V,paneDomNode:k}},onChange:(z,Q)=>{const{triggerNodeChanges:Y,nodeLookup:B,parentLookup:V,nodeOrigin:k}=R.getState(),U=[],$={x:z.x,y:z.y},F=B.get(_);if(F&&F.expandParent&&F.parentId){const H=F.origin??k,D=z.width??F.measured.width??0,G=z.height??F.measured.height??0,J={id:F.id,parentId:F.parentId,rect:{width:D,height:G,...Cj({x:z.x??F.position.x,y:z.y??F.position.y},{width:D,height:G},F.parentId,B,H)}},se=u0([J],B,V,k);U.push(...se),$.x=z.x?Math.max(H[0]*D,z.x):void 0,$.y=z.y?Math.max(H[1]*G,z.y):void 0}if($.x!==void 0&&$.y!==void 0){const H={id:_,type:"position",position:{...$}};U.push(H)}if(z.width!==void 0&&z.height!==void 0){const D={id:_,type:"dimensions",resizing:!0,setAttributes:y?y==="horizontal"?"width":"height":!0,dimensions:{width:z.width,height:z.height}};U.push(D)}for(const H of Q){const D={...H,type:"position"};U.push(D)}Y(U)},onEnd:({width:z,height:Q})=>{const Y={id:_,type:"dimensions",resizing:!1,dimensions:{width:z,height:Q}};R.getState().triggerNodeChanges([Y])}})),A.current.update({controlPosition:M,boundaries:{minWidth:f,minHeight:m,maxWidth:h,maxHeight:v},keepAspectRatio:g,resizeDirection:y,onResizeStart:w,onResize:N,onResizeEnd:E,shouldResize:S}),()=>{var z;(z=A.current)==null||z.destroy()}},[M,f,m,h,v,g,w,N,E,S]);const q=M.split("-");return c.jsx("div",{className:Nt(["react-flow__resize-control","nodrag",...q,s,r]),ref:L,style:{...i,scale:P,...d&&{[I?"backgroundColor":"borderColor"]:d}},children:l})}j.memo(_6);async function R6(e){const t=await fetch(`/api/rigs/${encodeURIComponent(e)}/graph`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()}function T6(e){return Rt({queryKey:["rig",e,"graph"],queryFn:()=>R6(e),enabled:!!e,refetchInterval:3e4})}const A6=100;function M6(e){const t=Tt(),[s,r]=j.useState(!1),[i,l]=j.useState(!1),d=j.useRef(!1),f=j.useRef(null),m=j.useCallback(()=>{e&&(f.current||(f.current=setTimeout(()=>{f.current=null,t.invalidateQueries({queryKey:["rig",e,"graph"]})},A6)))},[e,t]);return j.useEffect(()=>{if(!e){r(!1),l(!1);return}d.current=!1,r(!1),l(!1);const h=new EventSource(`/api/events?rigId=${e}`);return h.addEventListener("open",()=>{r(!0),d.current&&(l(!1),d.current=!1,m())}),h.addEventListener("message",()=>{m()}),h.addEventListener("error",()=>{r(!1),l(!0),d.current=!0}),()=>{h.close(),f.current&&(clearTimeout(f.current),f.current=null)}},[e,m]),{connected:s,reconnecting:i}}const Zi="#546073",kl={type:oc.ArrowClosed,color:Zi,width:12,height:12};function k6(e){switch(e){case"delegates_to":return{style:{stroke:Zi,strokeWidth:1.5},animated:!1,type:"smoothstep",pathOptions:{borderRadius:18,offset:20},markerEnd:kl,label:void 0};case"spawned_by":return{style:{stroke:Zi,strokeWidth:1.5,strokeDasharray:"6 3"},animated:!1,type:"smoothstep",pathOptions:{borderRadius:18,offset:20},markerEnd:kl,label:void 0};case"can_observe":return{style:{stroke:Zi,strokeWidth:1,strokeDasharray:"4 2"},animated:!1,type:"smoothstep",pathOptions:{borderRadius:18,offset:20},markerEnd:kl,label:void 0};case"uses":return{style:{stroke:Zi,strokeWidth:1,strokeDasharray:"2 2"},animated:!1,type:"smoothstep",pathOptions:{borderRadius:18,offset:20},markerEnd:kl,label:void 0};default:return{style:{stroke:Zi,strokeWidth:1},animated:!1,type:"smoothstep",pathOptions:{borderRadius:18,offset:20},markerEnd:kl,label:void 0}}}function AS(e){return e.type==="group"||e.type==="podGroup"}const Bl=240,Hl=160,af=3,C2=36,_2=32,R2=28,T2=44,O6=28,D6=120,L6=0,z6=new Set(["delegates_to","spawned_by"]);function P6(e,t){if(e.length<=1)return e;const s=new Set(e.filter(h=>AS(h)).map(h=>h.id)),r=new Map;for(const h of e)typeof h.parentId!="string"||!s.has(h.parentId)||(r.has(h.parentId)||r.set(h.parentId,[]),r.get(h.parentId).push(h));const i=[],l=new Map;for(const h of e){if(AS(h)){const v=r.get(h.id)??[],{width:g,height:y}=B6(v.length);i.push({id:h.id,kind:"group",node:h,width:g,height:y,members:v}),l.set(h.id,h.id);for(const b of v)l.set(b.id,h.id);continue}typeof h.parentId=="string"&&s.has(h.parentId)||(i.push({id:h.id,kind:"standalone",node:h,width:Bl,height:Hl,members:[]}),l.set(h.id,h.id))}if(i.length===0)return e;const d=I6(t,l),f=$6(i,d),m=new Map;for(const h of e)m.set(h.id,{...h});for(const h of i){const v=f.get(h.id);if(!v)continue;if(h.kind==="standalone"){const y=m.get(h.node.id);y.position={x:v.x,y:v.y},y.initialWidth=Bl,y.initialHeight=Hl;continue}const g=m.get(h.node.id);g.position={x:v.x,y:v.y},g.initialWidth=h.width,g.initialHeight=h.height,g.style={...g.style??{},width:h.width,height:h.height,background:"linear-gradient(180deg, rgba(84, 96, 115, 0.08) 0px, rgba(84, 96, 115, 0.08) 32px, rgba(255, 255, 255, 0.22) 32px, rgba(255, 255, 255, 0.22) 100%)",border:"1px dashed rgba(84, 96, 115, 0.45)",boxShadow:"0 0 0 1px rgba(84, 96, 115, 0.10)"};for(let y=0;y<h.members.length;y+=1){const b=h.members[y],S=m.get(b.id);S.position=H6(y),S.initialWidth=Bl,S.initialHeight=Hl}}return e.map(h=>m.get(h.id)??h)}function I6(e,t){const s=MS(e.filter(r=>z6.has(U6(r))),t);return s.length>0?s:MS(e,t)}function MS(e,t){const s=new Map;for(const r of e){const i=t.get(r.source),l=t.get(r.target);if(!i||!l||i===l)continue;const d=`${i}->${l}`;s.has(d)||s.set(d,{source:i,target:l})}return Array.from(s.values())}function B6(e){const t=Math.max(e,1),s=Math.min(t,af),r=Math.ceil(t/af),i=s*Bl+Math.max(s-1,0)*C2,l=r*Hl+Math.max(r-1,0)*_2;return{width:i+R2*2,height:l+T2+O6}}function H6(e){const t=e%af,s=Math.floor(e/af);return{x:R2+t*(Bl+C2),y:T2+s*(Hl+_2)}}function U6(e){var t;return((t=e.data)==null?void 0:t.kind)??e.label??""}function $6(e,t){const s=new Map(e.map(b=>[b.id,b])),r=new Map,i=new Map,l=[],d=new Set;for(const b of e)r.set(b.id,new Set),i.set(b.id,0);for(const b of t)!s.has(b.source)||!s.has(b.target)||r.get(b.source).has(b.target)||(r.get(b.source).add(b.target),i.set(b.target,(i.get(b.target)??0)+1));const f=e.filter(b=>{var S;return(i.get(b.id)??0)===0&&(((S=r.get(b.id))==null?void 0:S.size)??0)>0}).map(b=>b.id).sort((b,S)=>wd(b,S,r,e)),m=e.filter(b=>{var S;return(i.get(b.id)??0)===0&&(((S=r.get(b.id))==null?void 0:S.size)??0)===0}).map(b=>b.id).sort((b,S)=>wd(b,S,r,e)),h=b=>{const S=new Map(i),w=[...b],N=new Set(w);for(;w.length>0;){const E=w.shift();if(d.has(E))continue;d.add(E),l.push(E);const T=Array.from(r.get(E)??[]).sort((R,L)=>wd(R,L,r,e));for(const R of T)S.set(R,(S.get(R)??1)-1);const _=T.filter(R=>(S.get(R)??0)===0&&!d.has(R)&&!N.has(R));for(const R of _)w.push(R),N.add(R)}};h(f),h(m);const v=e.map(b=>b.id).filter(b=>!d.has(b)).sort((b,S)=>wd(b,S,r,e));l.push(...v);const g=new Map;let y=0;for(const b of l){const S=s.get(b);S&&(g.set(S.id,{x:L6,y}),y+=S.height+D6)}return g}function wd(e,t,s,r){var d,f;const i=((d=s.get(e))==null?void 0:d.size)??0,l=((f=s.get(t))==null?void 0:f.size)??0;return i!==l?l-i:r.findIndex(m=>m.id===e)-r.findIndex(m=>m.id===t)}function q6(e){return e==="architect"||e==="lead"||e==="orchestrator"}function V6(e){switch(e){case"ready":return"ready";case"pending":return"launching";case"attention_required":return"attention";case"failed":return"failed";default:return"stopped"}}function G6(e){switch(e){case"ready":return"bg-green-500";case"pending":return"bg-amber-500";case"attention_required":return"bg-orange-500";case"failed":return"bg-red-500";default:return"bg-stone-400"}}function Y6({data:e}){var L,I,P;const t=j.useRef(e.startupStatus),s=j.useRef(null),[r,i]=j.useState(!1),[l,d]=j.useState(null),f=q6(e.role),m=e.nodeKind==="infrastructure";j.useEffect(()=>{if(t.current!==e.startupStatus&&t.current!==null){i(!0);const A=setTimeout(()=>i(!1),600);return t.current=e.startupStatus,()=>clearTimeout(A)}t.current=e.startupStatus},[e.startupStatus]),j.useEffect(()=>()=>{s.current&&clearTimeout(s.current)},[]);const h=[e.runtime,e.model].filter(Boolean).join(" · "),v=Qr(e.logicalId),g=V6(e.startupStatus),y=G6(e.startupStatus),b=e.placementState==="selected"?"target":e.placementState==="available"?"avail":null,S=[e.canonicalSessionName?`Session: ${e.canonicalSessionName}`:null,h?`Runtime: ${h}`:null,e.resolvedSpecName?`Spec: ${e.resolvedSpecName}`:null,e.profile?`Profile: ${e.profile}`:null,typeof e.edgeCount=="number"?`Edges: ${e.edgeCount}`:null].filter(A=>!!A),w=S.join(`
222
- `),N=A=>{s.current&&clearTimeout(s.current),d(A),s.current=setTimeout(()=>{d(M=>M===A?null:M),s.current=null},900)},E=async A=>{var q;A.stopPropagation();const M=e.canonicalSessionName??((q=e.binding)==null?void 0:q.tmuxSession);M&&(await Qn(`tmux attach -t ${M}`),N("attach"))},T=async A=>{if(A.stopPropagation(),!!e.rigId)try{(await fetch(`/api/rigs/${encodeURIComponent(e.rigId)}/nodes/${encodeURIComponent(e.logicalId)}/open-cmux`,{method:"POST"})).ok&&N("cmux")}catch{}},_=async A=>{A.stopPropagation(),e.resumeToken&&(e.runtime==="claude-code"?(await Qn(`claude --resume ${e.resumeToken}`),N("resume")):e.runtime==="codex"&&(await Qn(`codex resume ${e.resumeToken}`),N("resume")))},R=A=>`px-1.5 py-0.5 border font-mono text-[7px] uppercase transition-colors ${l===A?"bg-stone-900 text-white border-stone-900":"bg-white text-stone-900 border-stone-300 hover:bg-stone-100"}`;return c.jsxs("div",{className:`group bg-white border min-w-[200px] hard-shadow relative ${e.placementState==="selected"?"border-emerald-600 ring-2 ring-emerald-400/70 shadow-[0_0_0_3px_rgba(52,211,153,0.12)]":e.placementState==="available"?"border-emerald-500 ring-1 ring-emerald-300/70":"border-stone-900"}`,"data-testid":"rig-node",title:w||void 0,children:[c.jsx(Wa,{type:"target",position:Ne.Top}),c.jsxs("div",{className:`px-3 py-1 font-mono text-[10px] flex justify-between items-center ${m?"bg-stone-500 text-white border-b border-stone-900":f?"bg-stone-900 text-white":"bg-stone-200 text-stone-900 border-b border-stone-900"}`,children:[c.jsx("span",{className:"font-bold truncate",children:v}),c.jsx("span",{className:`inline-flex h-2.5 w-2.5 rounded-full border border-white/50 ${y} ${r?"status-changed":""}`,"data-testid":`status-dot-${e.logicalId}`,"aria-label":g,title:g})]}),c.jsxs("div",{className:"p-3 space-y-2",children:[h&&c.jsxs("div",{className:"font-mono text-[8px] text-stone-500",children:["RUNTIME: ",h]}),e.resolvedSpecName&&c.jsxs("div",{className:"font-mono text-[8px] text-stone-400","data-testid":"spec-hint",children:[e.resolvedSpecName,e.profile?` · ${e.profile}`:""]}),e.contextAvailability==="known"&&e.contextFresh&&typeof e.contextUsedPercentage=="number"?c.jsxs("div",{className:"font-mono text-[8px] text-stone-500","data-testid":"context-badge",children:["CTX ",e.contextUsedPercentage,"%"]}):c.jsx("div",{className:"font-mono text-[8px] text-stone-300","data-testid":"context-badge-unknown",children:"CTX unknown"}),e.restoreOutcome&&e.restoreOutcome!=="n-a"&&c.jsxs("div",{className:"font-mono text-[8px] text-stone-500",children:["RESTORE: ",e.restoreOutcome]}),e.packageRefs&&e.packageRefs.length>0&&c.jsxs("div",{"data-testid":"package-badge",title:e.packageRefs.join(", "),className:"font-mono text-[8px] text-stone-400",onClick:A=>A.stopPropagation(),onKeyDown:A=>A.stopPropagation(),children:["PKG ",e.packageRefs.length]}),e.startupStatus==="attention_required"&&c.jsxs("div",{className:"stamp-badge",children:[c.jsx("div",{className:"w-2 h-2 rounded-full bg-orange-500"}),c.jsx("span",{className:"text-orange-600",children:"ATTN"})]}),e.startupStatus==="failed"&&c.jsxs("div",{className:"stamp-badge",children:[c.jsx("div",{className:"w-2 h-2 rounded-full bg-red-500"}),c.jsx("span",{className:"text-red-600",children:"FAILED"})]}),(e.canonicalSessionName??((L=e.binding)==null?void 0:L.tmuxSession)??e.resumeToken??e.rigId)&&c.jsxs("div",{"data-testid":"node-toolbar",className:"flex flex-wrap gap-1 pt-1",onClick:A=>A.stopPropagation(),onKeyDown:A=>A.stopPropagation(),children:[(e.canonicalSessionName??((I=e.binding)==null?void 0:I.tmuxSession))&&c.jsx("button",{onClick:E,"data-testid":"toolbar-copy-attach",className:R("attach"),title:`tmux attach -t ${e.canonicalSessionName??((P=e.binding)==null?void 0:P.tmuxSession)??"?"}`,children:l==="attach"?"copied":"tmux"}),e.rigId&&c.jsx("button",{onClick:T,"data-testid":"toolbar-cmux-open",className:R("cmux"),children:l==="cmux"?"opened":"cmux"}),e.resumeToken&&e.runtime&&e.runtime!=="terminal"&&c.jsx("button",{onClick:_,"data-testid":"toolbar-copy-resume",className:R("resume"),children:l==="resume"?"copied":"resume"})]}),b&&c.jsx("div",{className:"pt-1",children:c.jsx("span",{"data-testid":`placement-chip-${e.logicalId}`,className:`inline-flex items-center border px-1.5 py-0.5 font-mono text-[7px] uppercase tracking-[0.12em] ${e.placementState==="selected"?"border-emerald-700 bg-emerald-700 text-white":"border-emerald-300 bg-emerald-50 text-emerald-800"}`,children:b})})]}),S.length>0&&c.jsx("div",{"data-testid":"node-hover-hint",className:"pointer-events-none absolute left-2 top-full z-20 mt-2 hidden min-w-[180px] border border-stone-900 bg-white px-2 py-1 font-mono text-[8px] text-stone-700 shadow-[4px_4px_0_rgba(28,25,23,0.14)] group-hover:block",children:S.map(A=>c.jsx("div",{children:A},A))}),c.jsx(Wa,{type:"source",position:Ne.Bottom})]})}const Q6=Xw("relative w-full p-4 bg-surface-low border-l-2 border-l-stone-900 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-on-surface",{variants:{variant:{default:"bg-background text-foreground",destructive:"text-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),Kt=j.forwardRef(({className:e,variant:t,...s},r)=>c.jsx("div",{ref:r,role:"alert",className:Re(Q6({variant:t}),e),...s}));Kt.displayName="Alert";const F6=j.forwardRef(({className:e,...t},s)=>c.jsx("h5",{ref:s,className:Re("mb-1 font-medium leading-none tracking-tight",e),...t}));F6.displayName="AlertTitle";const Xt=j.forwardRef(({className:e,...t},s)=>c.jsx("div",{ref:s,className:Re("text-sm [&_p]:leading-relaxed",e),...t}));Xt.displayName="AlertDescription";function K6({data:e}){const t=e.podDisplayName??e.podNamespace??ds(e.logicalId)??fs(e.podId??e.logicalId);return c.jsx("div",{"data-testid":"pod-group-node",className:`w-full h-full relative pointer-events-auto ${e.placementState==="selected"?"ring-2 ring-emerald-500/80 shadow-[0_0_0_4px_rgba(52,211,153,0.12)]":e.placementState==="available"?"ring-1 ring-emerald-300/80":""}`,children:c.jsx("div",{className:"absolute left-4 top-3 inline-flex items-center font-mono text-[12px] font-bold leading-none tracking-[0.08em] text-stone-800",children:`${t} pod`})})}function X6({data:e}){const t=e.session;return c.jsxs("div",{"data-testid":"discovered-graph-node",className:"border-dashed border-2 border-foreground/30 bg-surface-low/50 p-spacing-3 min-w-[180px]",children:[c.jsx(Wa,{type:"target",position:Ne.Top,className:"opacity-0"}),c.jsxs("div",{className:"text-label-sm font-mono uppercase mb-spacing-1",children:[t.tmuxSession,":",t.tmuxPane]}),c.jsxs("div",{className:"flex gap-spacing-2 items-center mb-spacing-1",children:[c.jsx("span",{className:"text-label-sm uppercase text-foreground-muted",children:t.runtimeHint}),c.jsx("span",{className:"text-label-sm text-foreground-muted",children:t.confidence})]}),t.cwd&&c.jsx("div",{className:"text-label-sm font-mono text-foreground-muted truncate",children:t.cwd}),c.jsx(Wa,{type:"source",position:Ne.Bottom,className:"opacity-0"})]})}const Z6={rigNode:Y6,discoveredNode:X6,podGroup:K6};function W6(){return c.jsxs("div",{className:"flex flex-col items-center justify-center h-full relative text-foreground-muted","data-testid":"empty-topology",children:[c.jsxs("svg",{className:"absolute inset-0 w-full h-full",viewBox:"0 0 400 300",fill:"none",style:{opacity:.08},children:[c.jsx("rect",{x:"160",y:"60",width:"80",height:"40",stroke:"currentColor",strokeWidth:"1"}),c.jsx("rect",{x:"60",y:"180",width:"80",height:"40",stroke:"currentColor",strokeWidth:"1"}),c.jsx("rect",{x:"260",y:"180",width:"80",height:"40",stroke:"currentColor",strokeWidth:"1"}),c.jsx("line",{x1:"200",y1:"100",x2:"100",y2:"180",stroke:"currentColor",strokeWidth:"1",strokeDasharray:"4 4"}),c.jsx("line",{x1:"200",y1:"100",x2:"300",y2:"180",stroke:"currentColor",strokeWidth:"1",strokeDasharray:"4 4"})]}),c.jsx("div",{className:"relative z-10 text-center",children:c.jsx("h2",{className:"text-headline-md uppercase",children:"EMPTY TOPOLOGY"})})]})}function J6({rigId:e,rigName:t=null,showDiscovered:s=!0}){const{data:r,isPending:i,error:l}=T6(e??""),d=e4(s),f=(r==null?void 0:r.nodes)??[],m=(r==null?void 0:r.edges)??[],h=(l==null?void 0:l.message)??null,{reconnecting:v}=M6(e),[g,y]=j.useState(null),b=j.useRef(null),S=j.useRef(null),w=e!==null&&S.current!==e;j.useEffect(()=>{e&&f.length>0&&S.current!==e&&(S.current=e)},[e,f.length]);const N=j.useCallback(Y=>{b.current&&clearTimeout(b.current),y(Y),b.current=setTimeout(()=>{y(null),b.current=null},3e3)},[]);j.useEffect(()=>()=>{b.current&&clearTimeout(b.current)},[]);const E=j.useMemo(()=>m.map(Y=>{var k;const B=((k=Y.data)==null?void 0:k.kind)??Y.label??"delegates_to",V=k6(B);return{...Y,...V,className:w?"edge-draw-in":void 0,style:{...V.style,animationDelay:w?`${Math.min(f.length*50+100,2e3)}ms`:void 0}}}),[m,w,f.length]),T=j.useMemo(()=>{const Y=new Map;for(const B of f){const V=B.data;if((B.type==="podGroup"||B.type==="group")&&(V!=null&&V.podId)){Y.set(V.podId,{displayName:V.podLabel??V.podNamespace??ds(V.logicalId)??fs(V.podId),namespace:V.podNamespace??V.logicalId??null});continue}const k=(V==null?void 0:V.podId)??null;if(!k)continue;const U=(V==null?void 0:V.podNamespace)??ds(V==null?void 0:V.logicalId)??null,$=(V==null?void 0:V.podLabel)??U??fs(k);Y.has(k)||Y.set(k,{displayName:$,namespace:U})}return Y},[f]),{selection:_,setSelection:R}=tr(),{selectedDiscoveredId:L,placementTarget:I,setPlacementTarget:P}=E4(),A=(_==null?void 0:_.type)==="discovery"&&!!L,M=j.useMemo(()=>{const Y=new Map;for(const $ of f){if(!$.parentId)continue;const F=typeof $.data=="object"&&$.data!==null&&"logicalId"in $.data?$.data.logicalId:null,H=typeof $.data=="object"&&$.data!==null&&"podId"in $.data?$.data.podId:null,D=ds(F)??fs(H);D&&!Y.has($.parentId)&&Y.set($.parentId,D)}const V=P6(f,m).map(($,F)=>({...$,data:(()=>{if($.type==="podGroup"||$.type==="group"){const H=$.data,D=(H==null?void 0:H.podId)??null,G=(I==null?void 0:I.kind)==="pod"&&D!==null&&I.podId===D;return{...$.data??{},podDisplayName:Y.get($.id)??null,placementState:A?G?"selected":"available":null}}if($.type==="rigNode"){const H=$.data,D=!(H!=null&&H.binding)&&!(H!=null&&H.canonicalSessionName),G=(I==null?void 0:I.kind)==="node"&&(H==null?void 0:H.logicalId)!==void 0&&I.logicalId===H.logicalId;return{...$.data??{},placementState:A?G?"selected":D?"available":null:null}}return $.data})(),className:w?"node-enter":void 0,style:{...$.style??{},animationDelay:w?`${Math.min(F*50,2e3)}ms`:void 0}})),k=V.reduce(($,F)=>{var H;return Math.max($,((H=F.position)==null?void 0:H.y)??0)},0),U=d.map(($,F)=>({id:`discovered-${$.id}`,type:"discoveredNode",position:{x:300,y:k+200+F*150},data:{session:$}}));return[...V,...U]},[f,m,w,d,A,I]),{setSelectedNode:q}=C4(),z=t!=null&&t.trim()?t:e?Gs(e):null,Q=j.useCallback(async(Y,B)=>{var k;if(!e)return;if(A){if(B.type==="podGroup"||B.type==="group"){const U=B.data,$=(U==null?void 0:U.podId)??null,F=$?T.get($):null,H=!!($&&(F!=null&&F.namespace));P({kind:"pod",rigId:e,podId:$??"",podNamespace:(F==null?void 0:F.namespace)??null,podLabel:(F==null?void 0:F.displayName)??null,eligible:H,...H?{}:{reason:"This pod cannot receive a new node yet."}});return}if(B.type==="rigNode"){const U=B.data,$=!U.binding&&!U.canonicalSessionName;P({kind:"node",rigId:e,logicalId:U.logicalId,eligible:$,...$?{}:{reason:"This node is already claimed."}});return}}if(B.type==="podGroup"||B.type==="group"){R({type:"rig",rigId:e});return}const V=B.data;if(q({rigId:e,logicalId:V.logicalId}),!((k=V.binding)!=null&&k.cmuxSurface)){N({text:"Not bound to cmux surface",type:"info"});return}try{const U=await fetch(`/api/rigs/${encodeURIComponent(e)}/nodes/${encodeURIComponent(V.logicalId)}/focus`,{method:"POST"});if(!U.ok){N({text:"Focus failed",type:"error"});return}const $=await U.json();$.ok===!1&&$.code==="unavailable"?N({text:"cmux not connected",type:"error"}):$.ok?N({text:"Focused",type:"success"}):N({text:"Focus failed",type:"error"})}catch{N({text:"Focus failed",type:"error"})}},[A,T,e,P,q,R,N]);return e===null?c.jsx("div",{className:"p-spacing-6 text-foreground-muted",children:"No rig selected"}):i?c.jsxs("div",{className:"p-spacing-6","data-testid":"graph-loading",children:[c.jsx("div",{className:"h-8 w-48 animate-pulse-tactical mb-spacing-4"}),c.jsx("div",{className:"h-64 animate-pulse-tactical"})]}):h?c.jsx("div",{className:"p-spacing-6",children:c.jsx(Kt,{"data-testid":"graph-error",children:c.jsxs(Xt,{children:["Error: ",h]})})}):M.length===0?c.jsx(W6,{}):c.jsxs("div",{className:"w-full h-full relative","data-testid":"graph-view","data-animated":w?"true":"false",children:[c.jsx("div",{className:"absolute top-4 left-4 w-3 h-3 reg-mark",children:c.jsx("div",{className:"reg-tl"})}),c.jsx("div",{className:"absolute top-4 right-4 w-3 h-3",children:c.jsx("div",{className:"reg-tr"})}),c.jsx("div",{className:"absolute bottom-4 left-4 w-3 h-3",children:c.jsx("div",{className:"reg-bl"})}),c.jsx("div",{className:"absolute bottom-4 right-4 w-3 h-3",children:c.jsx("div",{className:"reg-br"})}),z&&c.jsx("div",{"data-testid":"rig-stamp-watermark",className:"stamp-watermark text-3xl left-[20%] top-[35%]",children:z}),v&&c.jsx("div",{className:"absolute top-spacing-4 right-spacing-4 z-20",children:c.jsx(Kt,{children:c.jsx(Xt,{className:"text-warning",children:"Live updates disconnected from daemon — reconnecting..."})})}),g&&c.jsx("div",{className:`absolute top-spacing-4 left-spacing-4 z-20 px-spacing-4 py-spacing-2 font-mono text-[10px] border ${g.type==="success"?"bg-white border-stone-900 text-stone-900":g.type==="error"?"bg-tertiary/10 border-tertiary text-tertiary":"bg-white border-stone-300 text-stone-600"}`,children:g.text}),A&&c.jsx("div",{"data-testid":"graph-placement-banner",className:"absolute top-spacing-4 left-1/2 z-20 -translate-x-1/2 border border-emerald-300/90 bg-[rgba(236,253,245,0.92)] px-3.5 py-2 font-mono text-[10px] text-emerald-950 shadow-[0_12px_28px_rgba(34,197,94,0.14)] backdrop-blur-sm",children:"PLACEMENT MODE · click an available node to bind, or click a pod to add a new node."}),c.jsx(S2,{nodes:M,edges:E,nodeTypes:Z6,onNodeClick:Q,nodesDraggable:!1,selectionOnDrag:!1,panOnDrag:!0,fitView:!0,fitViewOptions:{padding:.16,maxZoom:1.15},className:"relative z-10",proOptions:{hideAttribution:!0},minZoom:.3,maxZoom:1.5,children:c.jsx(j2,{})})]})}function h0(){const{openExplorer:e}=j4(),{setSelection:t}=tr();return c.jsx("div",{"data-testid":"workspace-home",className:"flex h-full min-h-[420px] flex-col items-center justify-center bg-[radial-gradient(circle_at_top,rgba(245,244,240,0.85),rgba(244,242,236,0.55)_32%,rgba(243,241,236,0.22)_58%,transparent_72%)] px-8 text-center",children:c.jsxs("div",{className:"max-w-xl space-y-3",children:[c.jsx("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-stone-500",children:"Explorer-Driven Workspace"}),c.jsx("h1",{className:"font-headline text-2xl font-bold uppercase tracking-tight text-stone-900",children:"Select a rig from the explorer to inspect its topology."}),c.jsxs("p",{className:"text-sm text-stone-600",children:["Use ",c.jsx("span",{className:"font-mono text-stone-800",children:"Specs"})," to import a rig spec or run bootstrap, and use the ",c.jsx("span",{className:"font-mono text-stone-800",children:"Discovery"})," drawer to place running sessions."]}),c.jsxs("div",{className:"flex items-center justify-center gap-3 pt-2",children:[c.jsx("button",{type:"button","data-testid":"workspace-open-explorer",onClick:e,className:"border border-stone-300 px-4 py-2 font-mono text-[10px] uppercase tracking-[0.14em] text-stone-700 transition-colors hover:bg-stone-100",children:"Explore"}),c.jsx("button",{type:"button","data-testid":"workspace-open-specs",onClick:()=>t({type:"specs"}),className:"border border-stone-300 px-4 py-2 font-mono text-[10px] uppercase tracking-[0.14em] text-stone-700 transition-colors hover:bg-stone-100",children:"Open Specs"}),c.jsx("button",{type:"button","data-testid":"workspace-open-discovery",onClick:()=>t({type:"discovery"}),className:"border border-stone-300 px-4 py-2 font-mono text-[10px] uppercase tracking-[0.14em] text-stone-700 transition-colors hover:bg-stone-100",children:"Open Discovery"})]})]})})}function eP(e){switch(e){case"launched":return"text-success";case"failed":return"text-destructive";default:return"text-foreground-muted"}}const m0=j.forwardRef(({className:e,type:t,...s},r)=>c.jsx("input",{type:t,className:Re("flex h-11 w-full border border-stone-300/55 bg-white/85 px-4 py-2 text-base text-foreground placeholder:text-foreground-muted/60 transition-colors duration-150 focus-visible:outline-none focus-visible:border-stone-900/35 focus-visible:ring-2 focus-visible:ring-stone-900/10 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...s}));m0.displayName="Input";const p0=j.forwardRef(({className:e,...t},s)=>c.jsx("textarea",{className:Re("flex min-h-[80px] w-full border border-stone-300/55 bg-white/85 px-4 py-3 text-base text-on-surface font-mono placeholder:text-stone-400 transition-all duration-150 focus-visible:outline-none focus-visible:border-stone-900/35 focus-visible:ring-2 focus-visible:ring-stone-900/10 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:s,...t}));p0.displayName="Textarea";function lt({children:e,className:t,innerClassName:s}){return c.jsx("div",{"data-testid":"workspace-page",className:Re("w-full flex-1 overflow-y-auto lg:pl-[var(--workspace-left-offset,0px)] lg:pr-[var(--workspace-right-offset,0px)]",t),children:c.jsx("div",{"data-testid":"workspace-page-inner",className:Re("mx-auto w-full max-w-[960px] px-4 py-6 sm:px-6 sm:py-8 md:px-8 lg:px-10",s),children:e})})}const g0=j.forwardRef(({className:e,...t},s)=>c.jsx("div",{className:"relative w-full overflow-auto",children:c.jsx("table",{ref:s,className:Re("w-full caption-bottom text-sm",e),...t})}));g0.displayName="Table";const x0=j.forwardRef(({className:e,...t},s)=>c.jsx("thead",{ref:s,className:Re("bg-surface-low [&_tr]:border-b [&_tr]:border-stone-300",e),...t}));x0.displayName="TableHeader";const y0=j.forwardRef(({className:e,...t},s)=>c.jsx("tbody",{ref:s,className:Re("[&_tr:last-child]:border-0",e),...t}));y0.displayName="TableBody";const tP=j.forwardRef(({className:e,...t},s)=>c.jsx("tfoot",{ref:s,className:Re("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));tP.displayName="TableFooter";const dc=j.forwardRef(({className:e,...t},s)=>c.jsx("tr",{ref:s,className:Re("border-b border-stone-200 transition-colors duration-150 hover:bg-surface-low data-[state=selected]:bg-surface-mid odd:bg-surface-low/50",e),...t}));dc.displayName="TableRow";const Or=j.forwardRef(({className:e,...t},s)=>c.jsx("th",{ref:s,className:Re("h-12 px-4 text-left align-middle font-medium text-foreground-muted uppercase text-label-md tracking-[0.04em] [&:has([role=checkbox])]:pr-0",e),...t}));Or.displayName="TableHead";const Dr=j.forwardRef(({className:e,...t},s)=>c.jsx("td",{ref:s,className:Re("p-4 align-middle [&:has([role=checkbox])]:pr-0",e),...t}));Dr.displayName="TableCell";const nP=j.forwardRef(({className:e,...t},s)=>c.jsx("caption",{ref:s,className:Re("mt-4 text-sm text-foreground-muted",e),...t}));nP.displayName="TableCaption";function Fn({eyebrow:e,title:t,description:s,actions:r}){return c.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-stone-500",children:e}),c.jsx("h2",{className:"text-2xl font-bold uppercase tracking-[0.04em] text-stone-900 sm:text-3xl",children:t}),s&&c.jsx("p",{className:"max-w-2xl text-base leading-8 text-stone-600",children:s})]}),r?c.jsx("div",{className:"flex flex-wrap gap-2",children:r}):null]})}function A2({steps:e,currentStep:t,errorAtStep:s=0,"data-testid":r}){const i=s||t;return c.jsx("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3","data-testid":r,children:e.map((l,d)=>{const f=i>l.num,m=i===l.num,h=i<l.num,v=f?"done":m?"active":"upcoming";return c.jsxs("div",{className:"flex items-center gap-2 sm:gap-3",children:[c.jsxs("div",{"data-testid":`step-${l.num}`,"data-step-state":v,className:Re("inline-flex min-h-0 items-center gap-2 border-b-2 px-1 py-1 font-mono text-[10px] uppercase tracking-[0.16em] transition-colors",f&&"border-primary/35 text-foreground-muted",m&&"border-stone-900 text-foreground",h&&"border-transparent text-foreground-muted/35"),children:[c.jsxs("span",{className:"text-[9px] tracking-[0.22em]",children:[f?"✓ ":"",String(l.num).padStart(2,"0")]}),c.jsx("span",{className:"text-[10px] leading-none tracking-[0.2em]",children:l.label})]}),d<e.length-1?c.jsx("div",{"aria-hidden":"true",className:Re("h-px w-4 shrink-0 sm:w-6",f?"bg-primary/35":"bg-stone-300/45")}):null]},l.num)})})}function zn({title:e,description:t,children:s,className:r}){return c.jsxs("section",{className:Re("space-y-4 border border-stone-300/45 bg-[rgba(255,255,255,0.62)] p-5 shadow-[0_1px_0_rgba(255,255,255,0.95)_inset,0_10px_26px_rgba(34,34,24,0.035)] sm:p-6",r),children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-stone-500",children:e}),t?c.jsx("p",{className:"text-base leading-8 text-stone-600",children:t}):null]}),s]})}function Rf({children:e}){return c.jsx("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4",children:e})}function kt({label:e,value:t,testId:s}){return c.jsxs("div",{className:"border border-stone-300/35 bg-white/10 px-4 py-4",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:e}),c.jsx("div",{"data-testid":s,className:"mt-2 text-2xl font-semibold uppercase tracking-[0.04em] text-stone-900",children:t})]})}function M2({title:e,testId:t,children:s}){return c.jsx(zn,{title:e,children:c.jsx("pre",{"data-testid":t,className:"overflow-x-auto border border-stone-300/45 bg-white/75 p-4 text-xs leading-6 text-stone-800",children:s})})}const sP=[{num:1,label:"VALIDATE RIGSPEC"},{num:2,label:"PREFLIGHT"},{num:3,label:"INSTANTIATE"}];function aP(e){switch(e){case"input":case"validating":return 1;case"valid":case"preflight":return 2;case"preflight_done":case"instantiating":case"done":return 3;case"error":return 0}}function rP({onBack:e}={}){const t=RM(),{currentRigDraft:s,selectedRigDraft:r,saveRigDraft:i,rememberRigDraft:l,clearSelectedRigDraft:d}=Co(),[f,m]=j.useState(()=>(r==null?void 0:r.yaml)??(s==null?void 0:s.yaml)??""),[h,v]=j.useState(""),[g,y]=j.useState("input"),[b,S]=j.useState(0),[w,N]=j.useState([]),[E,T]=j.useState([]),[_,R]=j.useState(null);j.useEffect(()=>{i(f)},[i,f]),j.useEffect(()=>{r&&(m(r.yaml),d())},[d,r]);const L=async()=>{l(f),y("validating"),N([]);try{const M=await(await fetch("/api/rigs/import/validate",{method:"POST",headers:{"Content-Type":"text/yaml"},body:f})).json();M.valid?y("valid"):(N(M.errors??["Validation failed"]),S(1),y("error"))}catch{N(["Validation request failed"]),S(1),y("error")}},I=async()=>{y("preflight"),N([]),T([]);try{const A={"Content-Type":"text/yaml"};h&&(A["X-Rig-Root"]=h);const q=await(await fetch("/api/rigs/import/preflight",{method:"POST",headers:A,body:f})).json();T(q.warnings??[]),q.errors&&q.errors.length>0?(N(q.errors),S(2),y("error")):y("preflight_done")}catch{N(["Preflight request failed"]),S(2),y("error")}},P=async()=>{y("instantiating"),N([]);try{const A=await t.mutateAsync({yaml:f,rigRoot:h.trim()||void 0});R(A),y("done")}catch(A){A instanceof eg?(A.code==="cycle_error"?N(["Cycle detected in rig topology"]):N(A.errors),T(A.warnings)):N([A instanceof Error?A.message:"Instantiate request failed"]),S(3),y("error")}};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"import-flow",className:"space-y-8",children:[c.jsx(Fn,{eyebrow:"Rig Import",title:"Import Rig",description:"Validate a RigSpec, run preflight checks, then instantiate a topology from YAML."}),c.jsx(A2,{"data-testid":"step-indicator",steps:sP,currentStep:aP(g),errorAtStep:g==="error"?b:0}),g==="input"&&c.jsxs(zn,{title:"Rig YAML",description:"Paste a rig spec and optionally provide a rig root to anchor relative references during import.",children:[c.jsx(p0,{"data-testid":"yaml-input",value:f,onChange:A=>m(A.target.value),placeholder:"Paste YAML rig spec here...",rows:14,className:"font-mono text-body-sm mb-spacing-4"}),c.jsxs("div",{className:"mb-spacing-4",children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"RIG ROOT (OPTIONAL)"}),c.jsx(m0,{"data-testid":"rig-root-input",type:"text",value:h,onChange:A=>v(A.target.value),placeholder:"/path/to/rig/root",className:"font-mono text-body-sm"})]}),c.jsx(we,{variant:"tactical","data-testid":"validate-btn",onClick:L,disabled:!f.trim(),children:"VALIDATE RIGSPEC"})]}),g==="validating"&&c.jsx("div",{className:"text-label-md text-foreground-muted",children:"Validating..."}),g==="valid"&&c.jsxs(zn,{title:"Validation Passed",description:"The RigSpec is valid. Run preflight checks before you instantiate it.",children:[c.jsx(Kt,{className:"mb-spacing-4","data-testid":"valid-message",children:c.jsx(Xt,{className:"text-primary",children:"RigSpec valid. Run preflight checks?"})}),c.jsx(we,{variant:"tactical","data-testid":"preflight-btn",onClick:I,children:"RUN PREFLIGHT"})]}),g==="preflight"&&c.jsx("div",{className:"text-label-md text-foreground-muted",children:"Running preflight..."}),g==="preflight_done"&&c.jsxs(zn,{title:"Preflight Results",description:"Review warnings before you instantiate the rig into live runtime sessions.",children:[E.length>0&&c.jsx(Kt,{className:"mb-spacing-4","data-testid":"preflight-warnings",children:c.jsxs(Xt,{className:"text-warning",children:[c.jsx("div",{className:"text-label-md uppercase mb-spacing-1",children:"WARNINGS"}),E.map((A,M)=>c.jsxs("div",{children:["— ",A]},M))]})}),c.jsx(Kt,{className:"mb-spacing-4","data-testid":"preflight-ready",children:c.jsx(Xt,{className:"text-primary",children:"Preflight passed. Ready to instantiate."})}),c.jsx(we,{variant:"tactical","data-testid":"instantiate-btn",onClick:P,children:"INSTANTIATE"})]}),g==="instantiating"&&c.jsx("div",{className:"text-label-md text-foreground-muted",children:"Instantiating..."}),g==="done"&&_&&c.jsx(zn,{title:"Instantiate Result",description:"The daemon returned per-node launch status for the imported topology.",className:"space-y-4",children:c.jsxs("div",{"data-testid":"import-result",children:[c.jsx(Kt,{className:"mb-spacing-4",children:c.jsxs(Xt,{children:[c.jsx("span",{className:"text-primary font-mono",children:_.specName}),c.jsxs("span",{className:"text-foreground-muted",children:[" (",_.rigId,")"]})]})}),c.jsxs(g0,{children:[c.jsx(x0,{children:c.jsxs(dc,{children:[c.jsx(Or,{children:"NODE"}),c.jsx(Or,{children:"STATUS"})]})}),c.jsx(y0,{children:_.nodes.map(A=>c.jsxs(dc,{children:[c.jsx(Dr,{className:"font-mono",children:A.logicalId}),c.jsx(Dr,{children:c.jsx("span",{className:`font-mono ${eP(A.status)}`,"data-testid":`inst-status-${A.logicalId}`,children:A.status})})]},A.logicalId))})]}),e?c.jsx("div",{className:"mt-spacing-6",children:c.jsx(we,{variant:"ghost",onClick:e,children:"Close"})}):null]})}),g==="error"&&c.jsx(zn,{title:"Import Errors",description:"Fix the reported issues, then retry the import flow.",children:c.jsxs("div",{"data-testid":"import-errors",children:[E.length>0&&c.jsx(Kt,{className:"mb-spacing-2","data-testid":"error-warnings",children:c.jsxs(Xt,{className:"text-warning",children:[c.jsx("div",{className:"text-label-md uppercase mb-spacing-1",children:"WARNINGS"}),E.map((A,M)=>c.jsxs("div",{children:["— ",A]},M))]})}),w.map((A,M)=>c.jsx(Kt,{className:"mb-spacing-2",children:c.jsx(Xt,{className:"text-destructive",children:A})},M)),c.jsx(we,{variant:"tactical",className:"mt-spacing-4",onClick:()=>{y("input"),N([]),T([]),R(null),S(0),v("")},children:"TRY AGAIN"})]})})]})})}async function iP(){const e=await fetch("/api/packages/summary");if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}function oP(){return Rt({queryKey:["packages"],queryFn:iP})}function lP(e){switch(e){case"applied":return"bg-success";case"rolled_back":return"bg-warning";case"failed":return"bg-destructive";default:return"bg-foreground-muted-on-dark"}}function cP(e){switch(e){case"applied":return"APPLIED";case"rolled_back":return"ROLLED BACK";case"failed":return"FAILED";default:return"NONE"}}function uP({pkg:e,onSelect:t}){return c.jsxs("div",{"data-testid":"package-card",role:"link",tabIndex:0,className:"card-dark p-spacing-6 mb-spacing-3 cursor-pointer",onClick:()=>t(e.id),onKeyDown:s=>{s.key==="Enter"&&t(e.id)},children:[c.jsxs("div",{className:"flex items-baseline justify-between mb-spacing-2",children:[c.jsx("h3",{className:"text-headline-md uppercase",children:e.name}),c.jsxs("span",{className:"text-label-md font-mono text-foreground-muted-on-dark",children:["v",e.version]})]}),e.summary&&c.jsx("p",{className:"text-body-sm text-foreground-muted-on-dark mb-spacing-4",children:e.summary}),c.jsx("div",{className:"flex items-center gap-spacing-4 text-label-sm",children:c.jsxs("span",{className:"text-foreground-muted-on-dark",children:["SOURCE ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:e.sourceRef})]})}),c.jsxs("div",{className:"flex items-center gap-spacing-4 mt-spacing-3 text-label-sm",children:[c.jsxs("span",{className:"text-foreground-muted-on-dark",children:["INSTALLS ",c.jsx("span",{className:"font-mono text-foreground-on-dark","data-testid":"install-count",children:e.installCount})]}),c.jsxs("span",{className:"flex items-center gap-spacing-1",children:[c.jsx("span",{className:Re("inline-block w-[6px] h-[6px]",lP(e.latestInstallStatus))}),c.jsx("span",{className:"text-foreground-muted-on-dark","data-testid":"install-status",children:cP(e.latestInstallStatus)})]})]})]})}function dP(){const e=Wt(),{data:t,isPending:s,error:r}=oP(),i=t?[...t].sort((l,d)=>d.createdAt.localeCompare(l.createdAt)):[];return s?c.jsx(lt,{children:c.jsxs("div",{"data-testid":"packages-loading",children:[c.jsxs("div",{className:"flex justify-between mb-spacing-6",children:[c.jsx("div",{className:"h-8 w-32 shimmer"}),c.jsx("div",{className:"h-8 w-28 shimmer"})]}),[1,2].map(l=>c.jsxs("div",{className:"card-dark p-spacing-6 mb-spacing-3",children:[c.jsx("div",{className:"h-6 w-48 shimmer-dark mb-spacing-4"}),c.jsx("div",{className:"h-12 shimmer-dark mb-spacing-4"}),c.jsx("div",{className:"h-4 w-64 shimmer-dark"})]},l))]})}):r?c.jsx(lt,{children:c.jsx("div",{children:c.jsx(Kt,{"data-testid":"packages-error",children:c.jsx(Xt,{children:r.message})})})}):i.length===0?c.jsx(lt,{children:c.jsxs("div",{className:"flex flex-col items-center justify-center min-h-[60vh]","data-testid":"packages-empty",children:[c.jsx("h2",{className:"text-display-lg text-foreground mb-spacing-4",children:"NO LEGACY PACKAGE INSTALLS"}),c.jsx("p",{className:"text-body-md text-foreground-muted mb-spacing-8",children:"Legacy package tools remain available for bootstrap internals while Specs becomes the main authoring surface."}),c.jsxs("div",{className:"flex flex-col items-center gap-spacing-3",children:[c.jsx(we,{variant:"default",size:"lg","data-testid":"empty-import-btn",onClick:()=>e({to:"/import"}),children:"IMPORT RIGSPEC"}),c.jsx(we,{variant:"ghost",size:"lg","data-testid":"empty-bootstrap-btn",onClick:()=>e({to:"/bootstrap"}),children:"BOOTSTRAP"})]})]})}):c.jsx(lt,{children:c.jsxs("div",{children:[c.jsxs("div",{className:"flex justify-between items-baseline mb-spacing-6",children:[c.jsxs("div",{children:[c.jsx("h2",{className:"text-headline-lg uppercase",children:"LEGACY PACKAGE TOOLS"}),c.jsxs("p",{className:"text-label-md text-foreground-muted font-grotesk mt-spacing-1",children:[i.length," legacy package install",i.length!==1?"s":""," retained for bootstrap internals"]})]}),c.jsxs("div",{className:"flex flex-col items-end gap-spacing-2",children:[c.jsx(we,{variant:"default",size:"sm","data-testid":"header-import-btn",onClick:()=>e({to:"/import"}),children:"IMPORT RIGSPEC"}),c.jsx(we,{variant:"ghost",size:"sm","data-testid":"header-bootstrap-btn",onClick:()=>e({to:"/bootstrap"}),children:"BOOTSTRAP"})]})]}),i.map(l=>c.jsx(uP,{pkg:l,onSelect:d=>e({to:"/packages/$packageId",params:{packageId:d}})},l.id))]})})}const fP=[{num:1,label:"ENTER"},{num:2,label:"VALIDATE"},{num:3,label:"CONFIGURE"},{num:4,label:"PLAN"},{num:5,label:"APPLY"}];function hP(e){switch(e){case"enter":return 1;case"validating":case"validated":return 2;case"configure":return 3;case"planning":case"planned":return 4;case"applying":case"done":return 5;case"error":return 0}}function mP({currentStep:e,errorAtStep:t}){const s=e==="error"?t:hP(e);return c.jsx("div",{className:"flex items-center gap-spacing-2 mb-spacing-8 p-spacing-4 inset-light flex-wrap","data-testid":"step-indicator",children:fP.map((r,i)=>{const l=s>r.num,d=s===r.num;return c.jsxs("div",{className:"flex items-center gap-spacing-2",children:[i>0&&c.jsx("div",{className:`w-6 h-px mx-spacing-1 ${l?"bg-primary/40":"bg-foreground-muted/20"}`}),c.jsxs("span",{"data-testid":`step-${r.num}`,className:Re("text-label-sm uppercase tracking-[0.04em] font-mono px-spacing-2 py-spacing-1 transition-colors whitespace-nowrap",l?"text-foreground-muted":d?"text-foreground bg-foreground/10":"text-foreground-muted/30"),children:[l?"✓":""," [ ",r.num," ",r.label," ]"]})]},r.num)})})}function pP(e){switch(e){case"approved":return"text-success";case"rejected":return"text-warning";case"deferred":return"text-foreground-muted";case"conflict":return"text-destructive";case"noop":return"text-foreground-muted/50";default:return""}}function gP(e){switch(e){case"approved":return"bg-success/8";case"rejected":return"bg-warning/8";case"deferred":return"bg-foreground-muted/4";case"conflict":return"bg-destructive/8";default:return""}}function xP(){const e=Wt(),[t,s]=j.useState(""),[r,i]=j.useState("enter"),[l,d]=j.useState(0),[f,m]=j.useState([]),[h,v]=j.useState(null),[g,y]=j.useState("claude-code"),[b,S]=j.useState("."),[w,N]=j.useState(""),[E,T]=j.useState(!1),[_,R]=j.useState(null),[L,I]=j.useState(null),P=async()=>{i("validating"),m([]);try{const Q=await(await fetch("/api/packages/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t})})).json();Q.valid?(v(Q.manifest),i("validated")):(m(Q.errors??[Q.error??"Validation failed"]),d(2),i("error"))}catch{m(["Validation request failed"]),d(2),i("error")}},A=async()=>{i("planning"),m([]);try{const z=await fetch("/api/packages/plan",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t,targetRoot:b,runtime:g,roleName:w||void 0,allowMerge:E})});if(!z.ok){const Y=await z.json();m(Y.errors??[Y.error??"Plan failed"]),d(4),i("error");return}const Q=await z.json();R(Q),i("planned")}catch{m(["Plan request failed"]),d(4),i("error")}},M=async()=>{i("applying"),m([]);try{const z=await fetch("/api/packages/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t,targetRoot:b,runtime:g,roleName:w||void 0,allowMerge:E})}),Q=await z.json();if(z.status>=400){m(Q.errors??[Q.error??"Install failed"]),d(5),i("error");return}I(Q),i("done")}catch{m(["Install request failed"]),d(5),i("error")}},q=((_==null?void 0:_.conflicts)??0)>0;return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"install-flow",children:[c.jsx("div",{className:"mb-spacing-8",children:c.jsxs("div",{children:[c.jsx("h2",{className:"text-headline-lg uppercase tracking-[0.06em]",children:"INSTALL PACKAGE (Legacy)"}),c.jsx("p",{className:"text-label-md text-foreground-muted font-grotesk mt-spacing-1",children:"Validate, configure, and apply an agent package"})]})}),c.jsx(mP,{currentStep:r,errorAtStep:l}),r==="enter"&&c.jsxs("div",{children:[c.jsx("label",{className:"text-label-md text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-2",children:"PACKAGE PATH"}),c.jsx("input",{"data-testid":"source-path-input",type:"text",value:t,onChange:z=>s(z.target.value),placeholder:"/path/to/package",className:"w-full bg-transparent border-b border-foreground/20 focus:border-foreground px-0 py-spacing-2 text-body-md font-mono outline-none transition-colors"}),c.jsx(we,{variant:"tactical","data-testid":"validate-btn",onClick:P,disabled:!t.trim(),className:"mt-spacing-4",children:"VALIDATE"})]}),r==="validating"&&c.jsx("div",{className:"text-label-md text-foreground-muted","data-testid":"validating-indicator",children:"Validating..."}),r==="validated"&&h&&c.jsxs("div",{"data-testid":"manifest-summary",children:[c.jsxs("div",{className:"card-dark p-spacing-4 mb-spacing-4",children:[c.jsxs("div",{className:"flex items-baseline justify-between mb-spacing-2",children:[c.jsx("span",{className:"text-headline-md uppercase",children:h.name}),c.jsxs("span",{className:"font-mono text-foreground-muted-on-dark",children:["v",h.version]})]}),c.jsx("p",{className:"text-body-sm text-foreground-muted-on-dark mb-spacing-3",children:h.summary}),c.jsxs("div",{className:"flex flex-wrap gap-spacing-3 text-label-sm",children:[c.jsxs("span",{children:["Skills: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.skills})]}),c.jsxs("span",{children:["Guidance: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.guidance})]}),c.jsxs("span",{children:["Agents: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.agents})]}),c.jsxs("span",{children:["Hooks: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.hooks})]}),c.jsxs("span",{children:["Runtimes: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.runtimes.join(", ")})]})]})]}),c.jsx(we,{variant:"tactical","data-testid":"configure-btn",onClick:()=>i("configure"),children:"CONFIGURE"})]}),r==="configure"&&h&&c.jsxs("div",{"data-testid":"configure-step",children:[c.jsxs("div",{className:"space-y-spacing-4 mb-spacing-6",children:[c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"RUNTIME"}),c.jsx("select",{"data-testid":"runtime-select",value:g,onChange:z=>y(z.target.value),className:"bg-transparent border-b border-foreground/20 py-spacing-1 text-body-md font-mono outline-none",children:h.runtimes.map(z=>c.jsx("option",{value:z,children:z},z))})]}),c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"TARGET ROOT"}),c.jsx("input",{"data-testid":"target-root-input",type:"text",value:b,onChange:z=>S(z.target.value),className:"w-full bg-transparent border-b border-foreground/20 px-0 py-spacing-1 text-body-md font-mono outline-none"})]}),h.roles.length>0&&c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"ROLE"}),c.jsxs("select",{"data-testid":"role-select",value:w,onChange:z=>N(z.target.value),className:"bg-transparent border-b border-foreground/20 py-spacing-1 text-body-md font-mono outline-none",children:[c.jsx("option",{value:"",children:"All exports"}),h.roles.map(z=>c.jsxs("option",{value:z.name,children:[z.name,z.description?` — ${z.description}`:""]},z.name))]})]}),c.jsxs("div",{className:"flex items-center gap-spacing-2",children:[c.jsx("input",{"data-testid":"allow-merge-toggle",type:"checkbox",checked:E,onChange:z=>T(z.target.checked),className:"accent-primary"}),c.jsx("label",{className:"text-label-sm text-foreground-muted",children:"Allow managed block merges into existing files"})]}),(h.requirements.cliTools.length>0||h.requirements.systemPackages.length>0)&&c.jsxs("div",{"data-testid":"requirements-section",className:"p-spacing-3 bg-foreground/4",children:[c.jsx("span",{className:"text-label-sm text-foreground-muted uppercase block mb-spacing-1",children:"REQUIREMENTS"}),h.requirements.cliTools.map(z=>c.jsxs("div",{className:"text-body-sm font-mono",children:["CLI: ",z.name]},z.name)),h.requirements.systemPackages.map(z=>c.jsxs("div",{className:"text-body-sm font-mono",children:["System: ",z.name]},z.name))]})]}),c.jsx(we,{variant:"tactical","data-testid":"plan-btn",onClick:A,children:"PREVIEW PLAN"})]}),r==="planning"&&c.jsx("div",{className:"text-label-md text-foreground-muted","data-testid":"planning-indicator",children:"Planning..."}),r==="planned"&&_&&c.jsxs("div",{"data-testid":"plan-preview",children:[c.jsxs("div",{className:"flex flex-wrap gap-spacing-4 mb-spacing-4 text-label-sm",children:[c.jsxs("span",{children:["Approved: ",c.jsx("span",{className:"font-mono text-success","data-testid":"plan-actionable",children:_.actionable})]}),c.jsxs("span",{children:["Deferred: ",c.jsx("span",{className:"font-mono text-foreground-muted","data-testid":"plan-deferred",children:_.deferred})]}),c.jsxs("span",{children:["Conflicts: ",c.jsx("span",{className:"font-mono text-destructive","data-testid":"plan-conflicts",children:_.conflicts})]}),c.jsxs("span",{children:["No-ops: ",c.jsx("span",{className:"font-mono","data-testid":"plan-noops",children:_.noOps})]}),_.rejected>0&&c.jsxs("span",{children:["Rejected: ",c.jsx("span",{className:"font-mono text-warning","data-testid":"plan-rejected",children:_.rejected})]})]}),q&&c.jsx(Kt,{className:"mb-spacing-4","data-testid":"conflict-warning",children:c.jsx(Xt,{className:"text-destructive",children:"Conflicts detected — resolve before applying"})}),c.jsxs(g0,{children:[c.jsx(x0,{children:c.jsxs(dc,{children:[c.jsx(Or,{children:"TYPE"}),c.jsx(Or,{children:"NAME"}),c.jsx(Or,{children:"STATUS"}),c.jsx(Or,{children:"TARGET"})]})}),c.jsx(y0,{children:_.entries.map((z,Q)=>c.jsxs(dc,{className:gP(z.policyStatus),"data-testid":"plan-entry","data-policy-status":z.policyStatus,children:[c.jsx(Dr,{className:"font-mono text-label-sm",children:z.exportType}),c.jsx(Dr,{className:"font-mono text-label-sm",children:z.exportName}),c.jsxs(Dr,{className:Re("font-mono text-label-sm uppercase",pP(z.policyStatus)),children:[z.policyStatus,z.deferReason&&c.jsxs("span",{className:"text-foreground-muted normal-case",children:[" — ",z.deferReason]}),z.conflict&&c.jsxs("span",{className:"text-destructive normal-case",children:[" — ",z.conflict.reason]})]}),c.jsx(Dr,{className:"font-mono text-label-sm text-foreground-muted truncate max-w-[200px]",children:z.targetPath||"—"})]},Q))})]}),c.jsx("div",{className:"mt-spacing-4",children:c.jsx(we,{variant:"tactical","data-testid":"apply-btn",onClick:M,disabled:q,title:q?"Resolve conflicts before applying":void 0,children:"APPLY"})})]}),r==="applying"&&c.jsx("div",{className:"text-label-md text-foreground-muted","data-testid":"applying-indicator",children:"Applying..."}),r==="done"&&L&&c.jsxs("div",{"data-testid":"install-result",children:[c.jsx(Kt,{className:"mb-spacing-4",children:c.jsxs(Xt,{children:[c.jsx("span",{className:"text-primary font-mono",children:L.packageName}),c.jsx("span",{className:"text-foreground-muted",children:" installed as "}),c.jsx("span",{className:"font-mono","data-testid":"result-install-id",children:L.installId})]})}),c.jsxs("div",{className:"flex gap-spacing-4 text-label-sm mb-spacing-4",children:[c.jsxs("span",{children:["Applied: ",c.jsx("span",{className:"font-mono text-success","data-testid":"result-applied",children:L.applied.length})]}),c.jsxs("span",{children:["Deferred: ",c.jsx("span",{className:"font-mono text-foreground-muted","data-testid":"result-deferred",children:L.deferred.length})]}),c.jsxs("span",{children:["Verified: ",c.jsx("span",{className:Re("font-mono",L.verification.passed?"text-success":"text-destructive"),"data-testid":"result-verified",children:L.verification.passed?"PASS":"FAIL"})]})]}),c.jsx("div",{className:"flex gap-spacing-3",children:c.jsx(we,{variant:"tactical","data-testid":"detail-link",onClick:()=>e({to:"/packages/$packageId",params:{packageId:L.packageId}}),children:"VIEW INSTALL DETAILS"})})]}),r==="error"&&c.jsxs("div",{"data-testid":"install-errors",children:[f.map((z,Q)=>c.jsx(Kt,{className:"mb-spacing-2",children:c.jsx(Xt,{className:"text-destructive",children:z})},Q)),c.jsx(we,{variant:"tactical",className:"mt-spacing-4","data-testid":"try-again-btn",onClick:()=>{i("enter"),m([]),v(null),R(null),I(null),d(0)},children:"TRY AGAIN"})]})]})})}function yP(e){return Rt({queryKey:["packages",e],queryFn:async()=>{const t=await fetch(`/api/packages/${e}`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()},enabled:!!e})}function vP(e){return Rt({queryKey:["packages",e,"installs"],queryFn:async()=>{const t=await fetch(`/api/packages/${e}/installs`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()},enabled:!!e})}function bP(e){return Rt({queryKey:["installs",e,"journal"],queryFn:async()=>{const t=await fetch(`/api/packages/installs/${e}/journal`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()},enabled:!!e})}function SP(e){const t=Tt();return Ht({mutationFn:async s=>{const r=await fetch(`/api/packages/${s}/rollback`,{method:"POST"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["packages",e,"installs"]}),t.invalidateQueries({queryKey:["installs"]})}})}function wP(e){switch(e){case"applied":return"bg-success";case"rolled_back":return"bg-warning";case"failed":return"bg-destructive";default:return"bg-foreground-muted"}}function NP(e){switch(e){case"applied":return"APPLIED";case"rolled_back":return"ROLLED BACK";case"failed":return"FAILED";default:return e.toUpperCase()}}function jP({installId:e}){const{data:t,isPending:s,isError:r}=bP(e);return s?c.jsx("div",{className:"pl-spacing-6 py-spacing-2 text-label-sm text-foreground-muted",children:"Loading journal..."}):r?c.jsx("div",{className:"pl-spacing-6 py-spacing-2 text-label-sm text-destructive","data-testid":"journal-error",children:"Failed to load journal entries"}):!t||t.length===0?c.jsx("div",{className:"pl-spacing-6 py-spacing-2 text-label-sm text-foreground-muted",children:"No journal entries"}):c.jsx("div",{className:"pl-spacing-6 py-spacing-2 space-y-spacing-1","data-testid":"journal-entries",children:t.map(i=>c.jsxs("div",{"data-testid":"journal-entry",className:"flex items-center gap-spacing-3 text-label-sm font-mono py-spacing-1 border-b border-foreground/6 last:border-0",children:[c.jsx("span",{className:"text-foreground-muted w-6 text-right",children:i.seq}),c.jsx("span",{className:"uppercase",children:i.action}),c.jsx("span",{className:"text-foreground-muted",children:i.exportType}),c.jsx("span",{className:"text-foreground-muted truncate max-w-[200px]",children:i.targetPath}),c.jsx("span",{className:"text-foreground-muted ml-auto",children:i.status})]},i.id))})}function EP({install:e,onRollback:t}){const[s,r]=j.useState(!1);return c.jsxs("div",{"data-testid":"install-row",className:"card-dark p-spacing-4 mb-spacing-2",children:[c.jsxs("div",{className:"flex items-center gap-spacing-4",children:[c.jsxs("div",{className:"flex-1 min-w-0",children:[c.jsxs("div",{className:"flex items-center gap-spacing-3 mb-spacing-1",children:[c.jsx("span",{className:"font-mono text-label-sm text-foreground-muted",children:e.createdAt}),c.jsx("span",{"data-testid":"install-status-badge",className:Re("inline-block px-spacing-2 py-px text-label-sm uppercase",wP(e.status)),children:NP(e.status)})]}),c.jsx("div",{className:"text-label-sm font-mono text-foreground-muted-on-dark",children:e.targetRoot}),c.jsxs("div",{className:"flex items-center gap-spacing-3 mt-spacing-1 text-label-sm",children:[c.jsxs("span",{"data-testid":"applied-count",children:[c.jsx("span",{className:"font-mono",children:e.appliedCount})," applied"]}),c.jsx("span",{"data-testid":"deferred-placeholder",className:"text-foreground-muted",children:"— deferred"})]})]}),c.jsxs("div",{className:"flex items-center gap-spacing-2 shrink-0",children:[c.jsx(we,{variant:"tactical",size:"sm","data-testid":"expand-btn",onClick:()=>r(!s),children:s?"COLLAPSE":"EXPAND"}),e.status==="applied"&&c.jsx(we,{variant:"tactical",size:"sm","data-testid":"rollback-btn",onClick:()=>t(e.id),children:"ROLLBACK"})]})]}),s&&c.jsx(jP,{installId:e.id})]})}function CP(){var w;const{packageId:e}=uf({strict:!1}),{data:t,isPending:s,error:r}=yP(e),{data:i,isPending:l,error:d}=vP(e),f=SP(e),[m,h]=j.useState(null),[v,g]=j.useState(!1),y=N=>{h(N),g(!0)},b=()=>{m&&f.mutate(m,{onSuccess:()=>{g(!1),h(null)}})};if(s||l)return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"detail-loading",children:[c.jsx("div",{className:"h-8 w-48 shimmer mb-spacing-4"}),c.jsxs("div",{className:"card-dark p-spacing-6 mb-spacing-4",children:[c.jsx("div",{className:"h-6 w-64 shimmer-dark mb-spacing-3"}),c.jsx("div",{className:"h-4 w-full shimmer-dark"})]})]})});if(r)return c.jsx(lt,{children:c.jsx("div",{"data-testid":"detail-error",children:c.jsx("p",{className:"text-destructive",children:r.message})})});if(d)return c.jsx(lt,{children:c.jsx("div",{"data-testid":"installs-error",children:c.jsx("p",{className:"text-destructive",children:"Failed to load install history"})})});const S=i??[];return c.jsx(lt,{children:c.jsxs("div",{children:[t&&c.jsxs("div",{className:"card-dark p-spacing-6 mb-spacing-6","data-testid":"package-header",children:[c.jsxs("div",{className:"flex items-baseline justify-between mb-spacing-2",children:[c.jsxs("h2",{className:"text-headline-lg uppercase",children:[t.name," (Legacy)"]}),c.jsxs("span",{className:"text-label-md font-mono text-foreground-muted-on-dark",children:["v",t.version]})]}),c.jsxs("div",{className:"text-label-sm text-foreground-muted-on-dark mb-spacing-2",children:["SOURCE"," ",c.jsx("span",{className:"font-mono text-foreground-on-dark","data-testid":"package-source",children:t.sourceRef})]}),t.summary&&c.jsx("p",{className:"text-body-sm text-foreground-muted-on-dark",children:t.summary})]}),c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-4",children:"INSTALL HISTORY"}),S.length===0?c.jsx("div",{"data-testid":"empty-installs",className:"text-body-md text-foreground-muted",children:"No installs yet"}):c.jsx("div",{"data-testid":"install-list",children:S.map(N=>c.jsx(EP,{install:N,onRollback:y},N.id))}),c.jsx(Qd,{open:v,onOpenChange:N=>{f.isPending||(g(N),N||f.reset())},children:c.jsxs(Xl,{"data-testid":"rollback-dialog",onPointerDownOutside:N=>{f.isPending&&N.preventDefault()},onEscapeKeyDown:N=>{f.isPending&&N.preventDefault()},hideCloseButton:f.isPending,children:[c.jsxs(Zl,{children:[c.jsx(Jl,{className:"text-headline-md uppercase",children:"CONFIRM ROLLBACK"}),c.jsx(ec,{children:"This will roll back the install and restore previous file states. This action cannot be undone."})]}),f.isError&&c.jsxs("p",{className:"text-destructive text-label-sm","data-testid":"rollback-error",children:["Rollback failed: ",((w=f.error)==null?void 0:w.message)??"Unknown error"]}),c.jsxs(Wl,{children:[c.jsx(we,{variant:"ghost",onClick:()=>{f.reset(),g(!1)},"data-testid":"rollback-cancel",disabled:f.isPending,children:"CANCEL"}),c.jsx(we,{variant:"destructive",onClick:b,"data-testid":"rollback-confirm",disabled:f.isPending,children:f.isPending?"ROLLING BACK...":"ROLLBACK"})]})]})})]})})}function _P(e){switch(e){case"installed":return"bg-success";case"missing":return"bg-destructive";case"unsupported":return"bg-warning";case"unknown":return"bg-warning";default:return"bg-foreground-muted"}}function RP(e){switch(e){case"installed":return"OK";case"missing":return"MISSING";case"unsupported":return"MANUAL";case"unknown":return"UNKNOWN";default:return e.toUpperCase()}}function TP({results:e}){return e.length===0?c.jsx("div",{className:"text-body-sm text-foreground-muted","data-testid":"no-requirements",children:"No requirements declared."}):c.jsx("div",{className:"space-y-spacing-1","data-testid":"requirements-panel",children:e.map(t=>c.jsxs("div",{"data-testid":"requirement-row",className:"flex items-center gap-spacing-3 py-spacing-1 text-label-sm font-mono",children:[c.jsx("span",{"data-testid":"requirement-dot",className:Re("w-2 h-2 shrink-0",_P(t.status))}),c.jsx("span",{"data-testid":"requirement-status",className:"w-16 uppercase",children:RP(t.status)}),c.jsx("span",{className:"text-foreground-muted w-24",children:t.kind}),c.jsx("span",{children:t.name}),t.detectedPath&&c.jsx("span",{className:"text-foreground-muted ml-auto truncate max-w-[200px]",children:t.detectedPath})]},`${t.kind}:${t.name}`))})}function k2(e,t){var r,i;const s=((r=e.stages)==null?void 0:r.flatMap(l=>{const d=l.detail;if(!d)return[];const f=[];return Array.isArray(d.errors)&&f.push(...d.errors.filter(m=>typeof m=="string")),typeof d.error=="string"&&f.push(d.error),f}))??[];return((i=e.errors)==null?void 0:i.find(l=>typeof l=="string"))??s[0]??e.error??`HTTP ${t}`}function AP(){return Ht({mutationFn:async({sourceRef:e})=>{const t=await fetch("/api/bootstrap/plan",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:e})});if(!t.ok){const s=await t.json().catch(()=>({})),r=new Error(k2(s,t.status));throw r.data=s,r}return t.json()}})}function MP(){const e=Tt();return Ht({mutationFn:async({sourceRef:t,autoApprove:s,approvedActionKeys:r})=>{const i=await fetch("/api/bootstrap/apply",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t,autoApprove:s,approvedActionKeys:r})}),l=await i.json();if(!i.ok){const d=new Error(k2(l,i.status));throw d.data=l,d}return l},onSuccess:()=>{e.invalidateQueries({queryKey:["rigs","summary"]})}})}const kP=["ENTER","PLAN","REVIEW","APPLY"],OP=kP.map((e,t)=>({num:t+1,label:e}));function DP(e){switch(e){case"enter":return 1;case"planning":return 2;case"planned":return 3;case"applying":return 4;case"done":case"error":return 4;default:return 1}}function LP(){const e=Wt(),{bootstrapSourceRef:t,setBootstrapSourceRef:s}=Co(),[r,i]=j.useState("enter"),[l,d]=j.useState(()=>t),[f,m]=j.useState(null),[h,v]=j.useState(new Set),[g,y]=j.useState(!1),[b,S]=j.useState(null),w=AP(),N=MP();j.useEffect(()=>{s(l)},[s,l]);const E=async()=>{if(l.trim()){i("planning");try{const Y=await w.mutateAsync({sourceRef:l.trim()});m(Y),v(new Set(Y.actionKeys??[])),i("planned")}catch(Y){S(Y.message),i("error")}}},T=async()=>{i("applying");try{const Y=await N.mutateAsync({sourceRef:l.trim(),autoApprove:g,approvedActionKeys:g?void 0:[...h]});m(Y),i("done")}catch(Y){S(Y.message),i("error")}},_=()=>{i("enter"),d(""),m(null),v(new Set),y(!1),S(null),w.reset(),N.reset()},R=f==null?void 0:f.stages.find(Y=>Y.stage==="probe_requirements"),L=R==null?void 0:R.detail,I=(L==null?void 0:L.results)??[],P=f==null?void 0:f.stages.find(Y=>Y.stage==="build_install_plan"),A=P==null?void 0:P.detail,M=(A==null?void 0:A.actions)??[],q=(P==null?void 0:P.status)==="blocked",Q=M.some(Y=>Y.classification!=="manual_only"&&Y.commandPreview)&&h.size===0&&!g;return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"bootstrap-wizard",className:"space-y-8",children:[c.jsx(Fn,{eyebrow:"Bootstrap",title:"Bootstrap",description:"Plan environment requirements, approve install actions, then import the rig into a running topology."}),c.jsx(A2,{"data-testid":"step-indicator",steps:OP,currentStep:DP(r)}),r==="enter"&&c.jsx(zn,{title:"Source",description:"Provide a rig spec or bundle path. Bootstrap will inspect requirements before it imports anything.",children:c.jsxs("div",{"data-testid":"step-enter",children:[c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"SPEC OR BUNDLE PATH"}),c.jsx(m0,{"data-testid":"spec-input",type:"text",value:l,onChange:Y=>d(Y.target.value),placeholder:"/path/to/rig.yaml or /path/to/bundle.rigbundle",className:"font-mono text-body-md"}),c.jsxs("p",{className:"text-label-sm text-foreground-muted mt-spacing-1",children:["Accepts .yaml rig specs or .rigbundle archives."," ",c.jsx("span",{role:"link",tabIndex:0,className:"text-primary cursor-pointer","data-testid":"inspect-link",onClick:()=>e({to:"/bundles/inspect"}),onKeyDown:Y=>{Y.key==="Enter"&&e({to:"/bundles/inspect"})},children:"Inspect a bundle first →"})]}),c.jsx("div",{className:"mt-spacing-4",children:c.jsx(we,{variant:"tactical",onClick:E,disabled:!l.trim(),"data-testid":"plan-btn",children:"PLAN"})})]})}),r==="planning"&&c.jsx("div",{"data-testid":"step-planning",className:"text-body-md text-foreground-muted",children:"Planning..."}),r==="planned"&&f&&c.jsx(zn,{title:"Plan Review",description:"Review requirement probe results and approve the install actions that bootstrap should execute.",children:c.jsxs("div",{"data-testid":"step-planned",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"STAGES"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-6","data-testid":"stage-list",children:f.stages.map(Y=>c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono","data-testid":"stage-row",children:[c.jsx("span",{className:Y.status==="ok"?"text-success":Y.status==="blocked"?"text-warning":"text-foreground-muted",children:Y.status.toUpperCase()}),c.jsx("span",{children:Y.stage})]},Y.stage))}),I.length>0&&c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"REQUIREMENTS"}),c.jsx("div",{className:"mb-spacing-6",children:c.jsx(TP,{results:I})})]}),M.length>0&&c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"ACTIONS"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4",children:M.map(Y=>c.jsxs("label",{className:"flex items-center gap-spacing-3 text-label-sm font-mono cursor-pointer",children:[c.jsx("input",{type:"checkbox",checked:g||h.has(Y.key),disabled:g||Y.classification==="manual_only",onChange:B=>{const V=new Set(h);B.target.checked?V.add(Y.key):V.delete(Y.key),v(V)}}),c.jsx("span",{className:Y.classification==="manual_only"?"text-warning":"",children:Y.requirementName}),Y.commandPreview&&c.jsx("span",{className:"text-foreground-muted",children:Y.commandPreview})]},Y.key))}),c.jsxs("label",{className:"flex items-center gap-spacing-2 text-label-sm mb-spacing-4",children:[c.jsx("input",{type:"checkbox",checked:g,onChange:Y=>y(Y.target.checked)}),"Auto-approve all trusted actions"]})]}),q&&c.jsx("div",{className:"text-warning text-label-sm mb-spacing-4","data-testid":"blocked-warning",children:"Manual requirements must be resolved before bootstrap can proceed."}),f.warnings.length>0&&c.jsx("div",{className:"mb-spacing-4",children:f.warnings.map((Y,B)=>c.jsx("div",{className:"text-warning text-label-sm",children:Y},B))}),c.jsx(we,{variant:"tactical",onClick:T,disabled:q||Q,title:q?"Manual requirements must be resolved":Q?"Select actions to approve":void 0,"data-testid":"apply-btn",children:"APPLY"})]})}),r==="applying"&&f&&c.jsx(zn,{title:"Applying",description:"Bootstrap is executing the approved actions and importing the rig.",children:c.jsxs("div",{"data-testid":"step-applying",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"APPLYING"}),c.jsxs("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"applying-checklist",children:[f.stages.map(Y=>c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:Y.stage})]},Y.stage)),c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:"execute_external_installs"})]}),c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:"install_packages"})]}),c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:"import_rig"})]})]}),c.jsx("p",{className:"text-body-sm text-foreground-muted",children:"Bootstrapping..."})]})}),r==="done"&&f&&c.jsx(zn,{title:"Result",description:"Bootstrap finished and returned the managed rig identity.",children:c.jsxs("div",{"data-testid":"step-done",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:f.status==="completed"?"BOOTSTRAP COMPLETE":"BOOTSTRAP PARTIAL"}),c.jsxs("div",{className:"text-label-sm font-mono space-y-spacing-1 mb-spacing-4",children:[c.jsxs("div",{children:["Status: ",c.jsx("span",{className:f.status==="completed"?"text-success":"text-warning",children:f.status.toUpperCase()})]}),f.rigId&&c.jsxs("div",{"data-testid":"result-rig-id",children:["Rig: ",f.rigId]})]}),f.rigId&&c.jsx(we,{variant:"tactical","data-testid":"view-rig-btn",onClick:()=>e({to:"/rigs/$rigId",params:{rigId:f.rigId}}),children:"VIEW RIG"})]})}),r==="error"&&c.jsx(zn,{title:"Bootstrap Error",description:"Bootstrap could not complete. Fix the issue and retry the plan.",children:c.jsxs("div",{"data-testid":"step-error",children:[c.jsx("p",{className:"text-destructive text-body-md mb-spacing-4",children:b}),c.jsx(we,{variant:"tactical",onClick:_,"data-testid":"try-again-btn",children:"TRY AGAIN"})]})})]})})}function zP(){const{currentAgentDraft:e,selectedAgentDraft:t,saveAgentDraft:s,rememberAgentDraft:r,clearSelectedAgentDraft:i}=Co(),[l,d]=j.useState(()=>(t==null?void 0:t.yaml)??(e==null?void 0:e.yaml)??""),[f,m]=j.useState("idle"),[h,v]=j.useState([]);j.useEffect(()=>{s(l)},[s,l]),j.useEffect(()=>{t&&(d(t.yaml),i())},[i,t]);const g=async()=>{r(l),m("pending"),v([]);try{const y=await fetch("/api/agents/validate",{method:"POST",headers:{"Content-Type":"text/yaml"},body:l}),b=await y.json().catch(()=>({}));if(y.ok&&b.valid){m("valid");return}v(b.errors??["Validation failed"]),m("invalid")}catch{v(["Validation request failed"]),m("error")}};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"agent-spec-validate-flow",className:"space-y-8",children:[c.jsx(Fn,{eyebrow:"Agent Spec Validation",title:"VALIDATE AGENT",description:"Check an AgentSpec before you use it in a rig."}),c.jsxs(zn,{title:"Agent YAML",description:"Paste or refine an AgentSpec draft, then validate it against the daemon contract.",children:[c.jsx(p0,{"data-testid":"agent-spec-yaml-input",value:l,onChange:y=>d(y.target.value),placeholder:"Paste agent.yaml here...",rows:16,className:"bg-background font-mono text-body-sm"}),c.jsx("div",{className:"flex flex-wrap gap-2",children:c.jsx(we,{variant:"tactical","data-testid":"agent-spec-validate-btn",onClick:g,disabled:!l.trim()||f==="pending",children:f==="pending"?"VALIDATING...":"VALIDATE AGENTSPEC"})}),f==="valid"&&c.jsx(Kt,{className:"mt-spacing-1","data-testid":"agent-spec-valid",children:c.jsx(Xt,{className:"text-primary",children:"AgentSpec valid."})}),(f==="invalid"||f==="error")&&c.jsx(Kt,{className:"mt-spacing-1","data-testid":"agent-spec-invalid",children:c.jsx(Xt,{children:c.jsx("ul",{className:"list-disc pl-5",children:h.map(y=>c.jsx("li",{children:y},y))})})})]})]})})}async function PP(e,t="draft"){var r;const s=await fetch("/api/specs/review/rig",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({yaml:e,sourceState:t})});if(!s.ok){const i=await s.json().catch(()=>({}));throw new Error(((r=i.errors)==null?void 0:r.join("; "))??`HTTP ${s.status}`)}return s.json()}async function IP(e,t="draft"){var r;const s=await fetch("/api/specs/review/agent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({yaml:e,sourceState:t})});if(!s.ok){const i=await s.json().catch(()=>({}));throw new Error(((r=i.errors)==null?void 0:r.join("; "))??`HTTP ${s.status}`)}return s.json()}function O2(e){let t=0;for(let s=0;s<e.length;s++)t=(t<<5)-t+e.charCodeAt(s)|0;return t}function BP(e,t="draft"){return Rt({queryKey:["spec-review","rig",e?O2(e):null,t],queryFn:()=>PP(e,t),enabled:!!e})}function HP(e,t="draft"){return Rt({queryKey:["spec-review","agent",e?O2(e):null,t],queryFn:()=>IP(e,t),enabled:!!e})}const UP=160,$P=48,kS=200,qP=100;function VP(e){switch(e){case"claude-code":return"#d4c4a8";case"codex":return"#b8c9d4";case"terminal":return"#c4c4c4";default:return"#e0ddd4"}}function GP(e){const t=new Map,s=[];for(const l of e)l.pod?(t.has(l.pod)||t.set(l.pod,[]),t.get(l.pod).push(l)):s.push(l);const r=[];let i=0;for(const[,l]of t)l.forEach((d,f)=>{r.push({id:d.id,x:f*kS,y:i})}),i+=qP;return s.forEach((l,d)=>{r.push({id:l.id,x:d*kS,y:i})}),r}function YP({graph:e,testId:t}){const s=e??{nodes:[],edges:[]},{nodes:r,edges:i}=j.useMemo(()=>{const l=GP(s.nodes),d=new Map(l.map(h=>[h.id,h])),f=s.nodes.map(h=>{const v=d.get(h.id)??{x:0,y:0};return{id:h.id,type:"default",position:{x:v.x,y:v.y},data:{label:`${h.pod?`${h.pod} / `:""}${h.label}`},style:{backgroundColor:VP(h.runtime),border:"1px solid #8a8577",fontSize:11,fontFamily:"monospace",width:UP,height:$P}}}),m=s.edges.map((h,v)=>({id:`e-${v}`,source:h.source,target:h.target,label:h.kind,labelStyle:{fontSize:9,fontFamily:"monospace"},style:{strokeDasharray:"4 4",stroke:"#8a8577"}}));return{nodes:f,edges:m}},[s]);return c.jsx("div",{"data-testid":t??"spec-topology-preview",className:"w-full h-[400px] bg-stone-50 border border-stone-200",children:c.jsxs(S2,{nodes:r,edges:i,fitView:!0,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,proOptions:{hideAttribution:!0},children:[c.jsx(i6,{gap:20,size:.5,color:"#d4d0c8"}),c.jsx(j2,{showInteractive:!1})]})})}function D2({review:e,yaml:t,testIdPrefix:s="",yamlTestId:r,showEnvironmentTab:i,onMemberClick:l}){var S,w,N;const d=i&&!!(e!=null&&e.services),f=d?["topology","configuration","environment","yaml"]:["topology","configuration","yaml"],[m,h]=j.useState("topology"),v=(e==null?void 0:e.pods)??[],g=(e==null?void 0:e.nodes)??[],y=(e==null?void 0:e.edges)??[],b=s?`${s}-`:"";return c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"flex gap-1 border-b border-stone-200",children:f.map(E=>c.jsx("button",{"data-testid":`${b}tab-${E}`,onClick:()=>h(E),className:`px-3 py-1.5 font-mono text-[10px] uppercase tracking-wider transition-colors ${m===E?"border-b-2 border-stone-900 text-stone-900 font-bold":"text-stone-500 hover:text-stone-700"}`,children:E},E))}),m==="topology"&&e&&c.jsx(YP,{graph:e.graph,testId:`${b}topology-preview`}),m==="configuration"&&e&&c.jsxs("div",{"data-testid":`${b}config-tables`,className:"space-y-4",children:[e.format==="pod_aware"&&v.map(E=>c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:E.label??E.id}),c.jsxs("table",{className:"w-full font-mono text-[10px]",children:[c.jsx("thead",{children:c.jsxs("tr",{className:"border-b border-stone-200 text-stone-500",children:[c.jsx("th",{className:"text-left py-1",children:"Member"}),c.jsx("th",{className:"text-left py-1",children:"Agent Ref"}),c.jsx("th",{className:"text-left py-1",children:"Runtime"}),c.jsx("th",{className:"text-left py-1",children:"Profile"})]})}),c.jsx("tbody",{children:E.members.map(T=>c.jsxs("tr",{className:"border-b border-stone-100",children:[c.jsx("td",{className:"py-1",children:c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("span",{children:T.id}),l&&c.jsx(we,{variant:"outline",size:"sm","data-testid":`${b}member-open-agent-${E.id}-${T.id}`,className:"h-6 px-2 font-mono text-[9px] uppercase tracking-[0.12em]",onClick:()=>l(E.id,T),children:"Agent Spec"})]})}),c.jsx("td",{className:"py-1 text-stone-600",children:T.agentRef}),c.jsx("td",{className:"py-1",children:T.runtime}),c.jsx("td",{className:"py-1 text-stone-500",children:T.profile??"—"})]},T.id))})]})]},E.id)),e.format==="legacy"&&g.length>0&&c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Nodes"}),c.jsxs("table",{className:"w-full font-mono text-[10px]",children:[c.jsx("thead",{children:c.jsxs("tr",{className:"border-b border-stone-200 text-stone-500",children:[c.jsx("th",{className:"text-left py-1",children:"ID"}),c.jsx("th",{className:"text-left py-1",children:"Runtime"}),c.jsx("th",{className:"text-left py-1",children:"Role"})]})}),c.jsx("tbody",{children:g.map(E=>c.jsxs("tr",{className:"border-b border-stone-100",children:[c.jsx("td",{className:"py-1",children:E.id}),c.jsx("td",{className:"py-1",children:E.runtime}),c.jsx("td",{className:"py-1 text-stone-500",children:E.role??"—"})]},E.id))})]})]}),y.length>0&&c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:e.format==="pod_aware"?"Cross-Pod Edges":"Edges"}),c.jsxs("table",{className:"w-full font-mono text-[10px]",children:[c.jsx("thead",{children:c.jsxs("tr",{className:"border-b border-stone-200 text-stone-500",children:[c.jsx("th",{className:"text-left py-1",children:"From"}),c.jsx("th",{className:"text-left py-1",children:"To"}),c.jsx("th",{className:"text-left py-1",children:"Kind"})]})}),c.jsx("tbody",{children:y.map((E,T)=>c.jsxs("tr",{className:"border-b border-stone-100",children:[c.jsx("td",{className:"py-1",children:E.from}),c.jsx("td",{className:"py-1",children:E.to}),c.jsx("td",{className:"py-1 text-stone-500",children:E.kind})]},T))})]})]})]}),m==="environment"&&d&&(e==null?void 0:e.services)&&c.jsxs("div",{className:"space-y-4","data-testid":`${b}env-details`,children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:"Services"}),(S=e.services.composePreview)==null?void 0:S.services.map(E=>c.jsxs("div",{className:"flex items-center justify-between border border-stone-200 px-3 py-2",children:[c.jsx("span",{className:"font-mono text-[11px] text-stone-800",children:E.name}),E.image&&c.jsx("span",{className:"font-mono text-[9px] text-stone-500",children:E.image})]},E.name))]}),e.services.waitFor.length>0&&c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:"Health Gates"}),e.services.waitFor.map((E,T)=>c.jsxs("div",{className:"font-mono text-[10px] text-stone-600 border border-stone-200 px-3 py-2",children:[E.url&&c.jsx("span",{children:E.url}),E.tcp&&c.jsxs("span",{children:["tcp: ",E.tcp]}),E.service&&c.jsxs("span",{children:["service: ",E.service,E.condition?` (${E.condition})`:""]})]},T))]}),e.services.surfaces&&c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:"Surfaces"}),(w=e.services.surfaces.urls)==null?void 0:w.map(E=>c.jsxs("div",{className:"flex items-center justify-between border border-stone-200 px-3 py-2",children:[c.jsx("span",{className:"text-[11px] text-stone-800",children:E.name}),c.jsx("span",{className:"font-mono text-[9px] text-stone-500",children:E.url})]},E.name)),(N=e.services.surfaces.commands)==null?void 0:N.map(E=>c.jsxs("div",{className:"flex items-center justify-between border border-stone-200 px-3 py-2",children:[c.jsx("span",{className:"text-[11px] text-stone-800",children:E.name}),c.jsx("span",{className:"font-mono text-[9px] text-stone-500",children:E.command})]},E.name))]})]}),m==="yaml"&&c.jsx(M2,{title:"YAML Preview",testId:r??`${b}spec-yaml`,children:t})]})}function QP(){const e=Wt(),{selectedRigDraft:t,currentRigDraft:s}=Co(),r=t??s,{data:i,isLoading:l,error:d}=BP((r==null?void 0:r.yaml)??null),f=(i==null?void 0:i.pods)??[],m=(i==null?void 0:i.nodes)??[],h=(i==null?void 0:i.edges)??[];return r?c.jsx(lt,{children:c.jsxs("div",{"data-testid":"rig-spec-review",className:"space-y-6",children:[c.jsx(Fn,{eyebrow:"Rig Spec Review",title:(i==null?void 0:i.name)??r.label,description:(i==null?void 0:i.summary)??"Review the spec structure before import or bootstrap.",actions:c.jsxs(c.Fragment,{children:[c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/import"}),children:"Open In Import"}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/bootstrap"}),children:"Bootstrap"})]})}),i&&c.jsxs(Rf,{children:[c.jsx(kt,{label:"Format",value:i.format==="pod_aware"?"Pod-Aware":"Legacy",testId:"rig-spec-summary-format"}),c.jsx(kt,{label:i.format==="pod_aware"?"Pods":"Nodes",value:i.format==="pod_aware"?f.length:m.length,testId:"rig-spec-summary-pods"}),c.jsx(kt,{label:"Members",value:i.format==="pod_aware"?f.reduce((v,g)=>v+g.members.length,0):m.length,testId:"rig-spec-summary-members"}),c.jsx(kt,{label:"Edges",value:h.length+(i.format==="pod_aware"?f.reduce((v,g)=>{var y;return v+(((y=g.edges)==null?void 0:y.length)??0)},0):0),testId:"rig-spec-summary-edges"})]}),l&&c.jsx("div",{className:"font-mono text-[10px] text-stone-400",children:"Loading review..."}),d&&c.jsx("div",{className:"p-3 bg-red-50 border border-red-200 font-mono text-[10px] text-red-700",children:d.message}),c.jsx(D2,{review:i,yaml:r.yaml,yamlTestId:"rig-spec-yaml"})]})}):c.jsx(lt,{children:c.jsxs("div",{"data-testid":"rig-spec-review-empty",className:"space-y-5",children:[c.jsx(Fn,{eyebrow:"Rig Spec Review",title:"No RigSpec Selected",description:"Choose a current or recent rig draft from the Specs drawer to review it here before you import or bootstrap it."}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/import"}),children:"Open Import"})]})})}function v0({review:e,yaml:t,testIdPrefix:s="agent"}){const r=(e==null?void 0:e.profiles)??[],i=(e==null?void 0:e.resources)??{skills:[],guidance:[],hooks:[]},l=(e==null?void 0:e.startup)??{files:[],actions:[]};return c.jsxs(c.Fragment,{children:[r.length>0&&c.jsxs("div",{"data-testid":`${s}-profiles-section`,className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Profiles"}),c.jsx("div",{className:"space-y-1",children:r.map(d=>c.jsxs("div",{className:"font-mono text-[10px] flex justify-between",children:[c.jsx("span",{className:"font-bold",children:d.name}),d.description&&c.jsx("span",{className:"text-stone-500",children:d.description})]},d.name))})]}),c.jsxs("div",{"data-testid":`${s}-resources-section`,className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Resources"}),c.jsxs("div",{className:"space-y-2 font-mono text-[10px]",children:[i.skills.length>0&&c.jsxs("div",{children:[c.jsx("span",{className:"text-stone-500",children:"Skills:"})," ",i.skills.map((d,f)=>c.jsx("span",{className:"inline-block bg-stone-100 px-1.5 py-0.5 mr-1 mb-0.5",children:d},f))]}),i.guidance.length>0&&c.jsxs("div",{children:[c.jsx("span",{className:"text-stone-500",children:"Guidance:"})," ",i.guidance.map((d,f)=>c.jsx("span",{className:"inline-block bg-stone-100 px-1.5 py-0.5 mr-1 mb-0.5",children:d},f))]}),i.hooks.length>0&&c.jsxs("div",{children:[c.jsx("span",{className:"text-stone-500",children:"Hooks:"})," ",i.hooks.join(", ")]})]})]}),(l.files.length>0||l.actions.length>0)&&c.jsxs("div",{"data-testid":`${s}-startup-section`,className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Startup"}),l.files.length>0&&c.jsxs("div",{className:"mb-2",children:[c.jsx("div",{className:"font-mono text-[9px] text-stone-500 uppercase mb-1",children:"Files"}),l.files.map((d,f)=>c.jsxs("div",{className:"font-mono text-[10px]",children:[d.path," ",d.required&&c.jsx("span",{className:"text-red-500 text-[8px]",children:"REQUIRED"})]},f))]}),l.actions.length>0&&c.jsxs("div",{children:[c.jsx("div",{className:"font-mono text-[9px] text-stone-500 uppercase mb-1",children:"Actions"}),l.actions.map((d,f)=>c.jsxs("div",{className:"font-mono text-[10px]",children:[c.jsxs("span",{className:"text-stone-500",children:[d.type,":"]})," ",d.value]},f))]})]}),c.jsx(M2,{title:"YAML Preview",testId:`${s}-spec-yaml`,children:t})]})}function FP(){const e=Wt(),{selectedAgentDraft:t,currentAgentDraft:s}=Co(),r=t??s,{data:i,isLoading:l,error:d}=HP((r==null?void 0:r.yaml)??null);return r?c.jsx(lt,{children:c.jsxs("div",{"data-testid":"agent-spec-review",className:"space-y-6",children:[c.jsx(Fn,{eyebrow:"Agent Spec Review",title:(i==null?void 0:i.name)??r.label,description:(i==null?void 0:i.description)??"Review the agent spec structure before validation.",actions:c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/agents/validate"}),children:"Open In Validate"})}),i&&c.jsxs(Rf,{children:[c.jsx(kt,{label:"Format",value:"AgentSpec",testId:"agent-spec-summary-format"}),c.jsx(kt,{label:"Version",value:i.version,testId:"agent-spec-summary-version"}),c.jsx(kt,{label:"Profiles",value:(i.profiles??[]).length,testId:"agent-spec-summary-profiles"}),c.jsx(kt,{label:"Skills",value:(i.resources??{skills:[]}).skills.length,testId:"agent-spec-summary-skills"})]}),l&&c.jsx("div",{className:"font-mono text-[10px] text-stone-400",children:"Loading review..."}),d&&c.jsx("div",{className:"p-3 bg-red-50 border border-red-200 font-mono text-[10px] text-red-700",children:d.message}),c.jsx(v0,{review:i,yaml:r.yaml,testIdPrefix:"agent"})]})}):c.jsx(lt,{children:c.jsxs("div",{"data-testid":"agent-spec-review-empty",className:"space-y-5",children:[c.jsx(Fn,{eyebrow:"Agent Spec Review",title:"No AgentSpec Selected",description:"Choose a current or recent agent draft from the Specs drawer to review it here before you validate it."}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/agents/validate"}),children:"Open Validate"})]})})}function KP(){return Ht({mutationFn:async({bundlePath:e})=>{const t=await fetch("/api/bundles/inspect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({bundlePath:e})}),s=await t.json();if(s.error)throw new Error(s.error);if(!t.ok)throw new Error(`HTTP ${t.status}`);return s}})}function XP(){return Ht({mutationFn:async({bundlePath:e,plan:t,autoApprove:s,targetRoot:r})=>{const i=await fetch("/api/bundles/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({bundlePath:e,plan:t,autoApprove:s,targetRoot:r})}),l=await i.json();if(!i.ok)throw new Error(l.error??`HTTP ${i.status}`);return l}})}function ZP(){var l,d;const[e,t]=j.useState(""),s=KP(),r=()=>{e.trim()&&s.mutate({bundlePath:e.trim()})},i=s.data;return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"bundle-inspector",children:[c.jsx("h2",{className:"text-headline-lg uppercase mb-spacing-4",children:"INSPECT BUNDLE"}),c.jsxs("div",{className:"mb-spacing-4",children:[c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"BUNDLE PATH"}),c.jsx("input",{"data-testid":"bundle-path-input",type:"text",value:e,onChange:f=>t(f.target.value),placeholder:"/path/to/my-rig.rigbundle",className:"w-full bg-transparent border-b border-foreground/20 py-spacing-2 text-body-md font-mono focus:outline-none focus:border-primary"}),c.jsx(we,{variant:"tactical",onClick:r,disabled:!e.trim()||s.isPending,className:"mt-spacing-3","data-testid":"inspect-btn",children:s.isPending?"INSPECTING...":"INSPECT"})]}),s.isError&&c.jsx("div",{className:"text-destructive text-body-md mb-spacing-4","data-testid":"inspect-error",children:s.error.message}),i&&c.jsxs("div",{"data-testid":"inspect-result",children:[c.jsxs("div",{className:"card-dark p-spacing-4 mb-spacing-4","data-testid":"manifest-summary",children:[c.jsxs("div",{className:"flex items-center gap-spacing-2 mb-spacing-2",children:[c.jsx("h3",{className:"text-headline-md uppercase",children:i.manifest.name}),c.jsxs("span",{className:"text-label-sm font-mono px-spacing-2 py-px bg-foreground/10","data-testid":"schema-badge",children:["v",i.manifest.schemaVersion??1]})]}),c.jsxs("div",{className:"text-label-sm font-mono text-foreground-muted-on-dark",children:["v",i.manifest.version]}),c.jsxs("div",{className:"text-label-sm font-mono text-foreground-muted-on-dark",children:["Spec: ",i.manifest.rigSpec]}),c.jsxs("div",{className:"mt-spacing-2 flex gap-spacing-3",children:[c.jsxs("span",{className:Re("text-label-sm",i.digestValid?"text-success":"text-destructive"),children:["DIGEST: ",i.digestValid?"VALID":"INVALID"]}),c.jsxs("span",{className:Re("text-label-sm",i.integrityResult.passed?"text-success":"text-destructive"),"data-testid":"integrity-status",children:["INTEGRITY: ",i.integrityResult.passed?"PASS":"FAIL"]})]})]}),i.manifest.schemaVersion===2&&i.manifest.agents?c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"AGENTS"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"agent-list",children:i.manifest.agents.map(f=>c.jsxs("div",{className:"text-label-sm font-mono","data-testid":"agent-entry",children:[f.name," v",f.version," — ",f.path]},f.name))})]}):c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"PACKAGES"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"package-list",children:(i.manifest.packages??[]).map(f=>c.jsxs("div",{className:"text-label-sm font-mono","data-testid":"package-entry",children:[f.name," v",f.version," — ",f.path]},f.name))})]}),i.integrityResult&&c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"FILE INTEGRITY"}),c.jsxs("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"file-integrity",children:[Object.keys((i.manifest.packages??i.manifest.agents??[]).length>0?((d=(l=i.manifest)==null?void 0:l.integrity)==null?void 0:d.files)??{}:{}).map(f=>{const m=i.integrityResult.mismatches.includes(f),h=i.integrityResult.missing.includes(f),v=m?"MISMATCH":h?"MISSING":"OK";return c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono","data-testid":"file-row",children:[c.jsx("span",{className:Re("w-2 h-2",v==="OK"?"bg-success":"bg-destructive"),"data-testid":"file-dot"}),c.jsx("span",{children:f}),c.jsx("span",{className:"text-foreground-muted ml-auto",children:v})]},f)}),i.integrityResult.extra.map(f=>c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono","data-testid":"file-row",children:[c.jsx("span",{className:"w-2 h-2 bg-warning","data-testid":"file-dot"}),c.jsx("span",{children:f}),c.jsx("span",{className:"text-foreground-muted ml-auto",children:"EXTRA"})]},f))]})]}),c.jsx(we,{variant:"tactical","data-testid":"install-btn",onClick:()=>window.location.href=`/bundles/install?bundlePath=${encodeURIComponent(e)}`,children:"INSTALL THIS BUNDLE"})]})]})})}function WP(){const e=Wt(),[t,s]=j.useState("enter"),r=typeof window<"u"?new URLSearchParams(window.location.search):null,[i,l]=j.useState((r==null?void 0:r.get("bundlePath"))??""),[d,f]=j.useState(""),[m,h]=j.useState(null),[v,g]=j.useState(null),y=XP(),b=async()=>{if(i.trim()){s("planning");try{const w=await y.mutateAsync({bundlePath:i.trim(),plan:!0});h(w),s("planned")}catch(w){g(w.message),s("error")}}},S=async()=>{if(d.trim()){s("applying");try{const w=await y.mutateAsync({bundlePath:i.trim(),autoApprove:!0,targetRoot:d.trim()});h(w),s("done")}catch(w){g(w.message),s("error")}}};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"bundle-install-flow",children:[c.jsx("h2",{className:"text-headline-lg uppercase mb-spacing-4",children:"INSTALL BUNDLE"}),t==="enter"&&c.jsxs("div",{"data-testid":"step-enter",children:[c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"BUNDLE PATH"}),c.jsx("input",{"data-testid":"bundle-input",type:"text",value:i,onChange:w=>l(w.target.value),placeholder:"/path/to/my-rig.rigbundle",className:"w-full bg-transparent border-b border-foreground/20 py-spacing-2 text-body-md font-mono focus:outline-none focus:border-primary mb-spacing-4"}),c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"TARGET ROOT"}),c.jsx("input",{"data-testid":"target-input",type:"text",value:d,onChange:w=>f(w.target.value),placeholder:"/path/to/target/project",className:"w-full bg-transparent border-b border-foreground/20 py-spacing-2 text-body-md font-mono focus:outline-none focus:border-primary mb-spacing-4"}),c.jsx(we,{variant:"tactical",onClick:b,disabled:!i.trim(),"data-testid":"plan-btn",children:"PLAN"})]}),t==="planning"&&c.jsx("div",{"data-testid":"step-planning",className:"text-foreground-muted",children:"Planning..."}),t==="planned"&&m&&c.jsxs("div",{"data-testid":"step-planned",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"PLAN"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4",children:m.stages.map(w=>c.jsxs("div",{className:"text-label-sm font-mono",children:[c.jsx("span",{className:w.status==="ok"?"text-success":"text-foreground-muted",children:w.status.toUpperCase()})," ",w.stage]},w.stage))}),c.jsx(we,{variant:"tactical",onClick:S,disabled:!d.trim(),"data-testid":"apply-btn",children:"APPLY"})]}),t==="applying"&&c.jsx("div",{"data-testid":"step-applying",className:"text-foreground-muted",children:"Installing..."}),t==="done"&&m&&c.jsxs("div",{"data-testid":"step-done",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"COMPLETE"}),c.jsxs("div",{className:"text-label-sm font-mono",children:["Status: ",c.jsx("span",{className:"text-success",children:m.status.toUpperCase()}),m.stages.some(w=>{var N;return((N=w.detail)==null?void 0:N.source)==="pod_bundle"})?c.jsx("span",{className:"ml-spacing-2 text-primary","data-testid":"bundle-type-label",children:"Pod-aware bundle"}):c.jsx("span",{className:"ml-spacing-2 text-foreground-muted","data-testid":"bundle-type-label",children:"Legacy bundle"})]}),m.rigId&&c.jsxs("div",{className:"text-label-sm font-mono","data-testid":"result-rig-id",children:["Rig: ",m.rigId]}),m.rigId&&c.jsx(we,{variant:"tactical",className:"mt-spacing-3",onClick:()=>e({to:"/rigs/$rigId",params:{rigId:m.rigId}}),children:"VIEW RIG"})]}),t==="error"&&c.jsxs("div",{"data-testid":"step-error",children:[c.jsx("p",{className:"text-destructive text-body-md mb-spacing-4",children:v}),c.jsx(we,{variant:"tactical",onClick:()=>{s("enter"),g(null),y.reset()},"data-testid":"try-again-btn",children:"TRY AGAIN"})]})]})})}function JP(e){const t=[`Install and launch the "${e.name}" managed app using OpenRig.`,""];return e.summary&&t.push(`About: ${e.summary}`,""),t.push(`Source: ${e.sourcePath}`,"","Steps:",`1. Run: rig up ${e.name}`,"2. Monitor: rig ps --nodes","3. Check env: rig env status <rig-name>"),t.join(`
222
+ `),N=A=>{s.current&&clearTimeout(s.current),d(A),s.current=setTimeout(()=>{d(M=>M===A?null:M),s.current=null},900)},E=async A=>{var q;A.stopPropagation();const M=e.canonicalSessionName??((q=e.binding)==null?void 0:q.tmuxSession);M&&(await Qn(`tmux attach -t ${M}`),N("attach"))},T=async A=>{if(A.stopPropagation(),!!e.rigId)try{(await fetch(`/api/rigs/${encodeURIComponent(e.rigId)}/nodes/${encodeURIComponent(e.logicalId)}/open-cmux`,{method:"POST"})).ok&&N("cmux")}catch{}},_=async A=>{A.stopPropagation(),e.resumeToken&&(e.runtime==="claude-code"?(await Qn(`claude --resume ${e.resumeToken}`),N("resume")):e.runtime==="codex"&&(await Qn(`codex resume ${e.resumeToken}`),N("resume")))},R=A=>`px-1.5 py-0.5 border font-mono text-[7px] uppercase transition-colors ${l===A?"bg-stone-900 text-white border-stone-900":"bg-white text-stone-900 border-stone-300 hover:bg-stone-100"}`;return c.jsxs("div",{className:`group bg-white border min-w-[200px] hard-shadow relative ${e.placementState==="selected"?"border-emerald-600 ring-2 ring-emerald-400/70 shadow-[0_0_0_3px_rgba(52,211,153,0.12)]":e.placementState==="available"?"border-emerald-500 ring-1 ring-emerald-300/70":"border-stone-900"}`,"data-testid":"rig-node",title:w||void 0,children:[c.jsx(Wa,{type:"target",position:Ne.Top}),c.jsxs("div",{className:`px-3 py-1 font-mono text-[10px] flex justify-between items-center ${m?"bg-stone-500 text-white border-b border-stone-900":f?"bg-stone-900 text-white":"bg-stone-200 text-stone-900 border-b border-stone-900"}`,children:[c.jsx("span",{className:"font-bold truncate",children:v}),c.jsx("span",{className:`inline-flex h-2.5 w-2.5 rounded-full border border-white/50 ${y} ${r?"status-changed":""}`,"data-testid":`status-dot-${e.logicalId}`,"aria-label":g,title:g})]}),c.jsxs("div",{className:"p-3 space-y-2",children:[h&&c.jsxs("div",{className:"font-mono text-[8px] text-stone-500",children:["RUNTIME: ",h]}),e.resolvedSpecName&&c.jsxs("div",{className:"font-mono text-[8px] text-stone-400","data-testid":"spec-hint",children:[e.resolvedSpecName,e.profile?` · ${e.profile}`:""]}),e.contextAvailability==="known"&&typeof e.contextUsedPercentage=="number"?c.jsxs("div",{className:`font-mono text-base font-bold leading-tight ${e.contextUsedPercentage>=80?"text-red-600":e.contextUsedPercentage>=60?"text-amber-600":"text-green-700"}${e.contextFresh?"":" opacity-50"}`,"data-testid":"context-badge",title:e.contextFresh?"Context usage (fresh)":"Context usage (stale sample)",children:[e.contextUsedPercentage,"%"]}):c.jsx("div",{className:"font-mono text-xs text-stone-400","data-testid":"context-badge-unknown",children:"?"}),e.restoreOutcome&&e.restoreOutcome!=="n-a"&&c.jsxs("div",{className:"font-mono text-[8px] text-stone-500",children:["RESTORE: ",e.restoreOutcome]}),e.packageRefs&&e.packageRefs.length>0&&c.jsxs("div",{"data-testid":"package-badge",title:e.packageRefs.join(", "),className:"font-mono text-[8px] text-stone-400",onClick:A=>A.stopPropagation(),onKeyDown:A=>A.stopPropagation(),children:["PKG ",e.packageRefs.length]}),e.startupStatus==="attention_required"&&c.jsxs("div",{className:"stamp-badge",children:[c.jsx("div",{className:"w-2 h-2 rounded-full bg-orange-500"}),c.jsx("span",{className:"text-orange-600",children:"ATTN"})]}),e.startupStatus==="failed"&&c.jsxs("div",{className:"stamp-badge",children:[c.jsx("div",{className:"w-2 h-2 rounded-full bg-red-500"}),c.jsx("span",{className:"text-red-600",children:"FAILED"})]}),(e.canonicalSessionName??((L=e.binding)==null?void 0:L.tmuxSession)??e.resumeToken??e.rigId)&&c.jsxs("div",{"data-testid":"node-toolbar",className:"flex flex-wrap gap-1 pt-1",onClick:A=>A.stopPropagation(),onKeyDown:A=>A.stopPropagation(),children:[(e.canonicalSessionName??((I=e.binding)==null?void 0:I.tmuxSession))&&c.jsx("button",{onClick:E,"data-testid":"toolbar-copy-attach",className:R("attach"),title:`tmux attach -t ${e.canonicalSessionName??((P=e.binding)==null?void 0:P.tmuxSession)??"?"}`,children:l==="attach"?"copied":"tmux"}),e.rigId&&c.jsx("button",{onClick:T,"data-testid":"toolbar-cmux-open",className:R("cmux"),children:l==="cmux"?"opened":"cmux"}),e.resumeToken&&e.runtime&&e.runtime!=="terminal"&&c.jsx("button",{onClick:_,"data-testid":"toolbar-copy-resume",className:R("resume"),children:l==="resume"?"copied":"resume"})]}),b&&c.jsx("div",{className:"pt-1",children:c.jsx("span",{"data-testid":`placement-chip-${e.logicalId}`,className:`inline-flex items-center border px-1.5 py-0.5 font-mono text-[7px] uppercase tracking-[0.12em] ${e.placementState==="selected"?"border-emerald-700 bg-emerald-700 text-white":"border-emerald-300 bg-emerald-50 text-emerald-800"}`,children:b})})]}),S.length>0&&c.jsx("div",{"data-testid":"node-hover-hint",className:"pointer-events-none absolute left-2 top-full z-20 mt-2 hidden min-w-[180px] border border-stone-900 bg-white px-2 py-1 font-mono text-[8px] text-stone-700 shadow-[4px_4px_0_rgba(28,25,23,0.14)] group-hover:block",children:S.map(A=>c.jsx("div",{children:A},A))}),c.jsx(Wa,{type:"source",position:Ne.Bottom})]})}const Q6=Xw("relative w-full p-4 bg-surface-low border-l-2 border-l-stone-900 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-on-surface",{variants:{variant:{default:"bg-background text-foreground",destructive:"text-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),Kt=j.forwardRef(({className:e,variant:t,...s},r)=>c.jsx("div",{ref:r,role:"alert",className:Re(Q6({variant:t}),e),...s}));Kt.displayName="Alert";const F6=j.forwardRef(({className:e,...t},s)=>c.jsx("h5",{ref:s,className:Re("mb-1 font-medium leading-none tracking-tight",e),...t}));F6.displayName="AlertTitle";const Xt=j.forwardRef(({className:e,...t},s)=>c.jsx("div",{ref:s,className:Re("text-sm [&_p]:leading-relaxed",e),...t}));Xt.displayName="AlertDescription";function K6({data:e}){const t=e.podDisplayName??e.podNamespace??ds(e.logicalId)??fs(e.podId??e.logicalId);return c.jsx("div",{"data-testid":"pod-group-node",className:`w-full h-full relative pointer-events-auto ${e.placementState==="selected"?"ring-2 ring-emerald-500/80 shadow-[0_0_0_4px_rgba(52,211,153,0.12)]":e.placementState==="available"?"ring-1 ring-emerald-300/80":""}`,children:c.jsx("div",{className:"absolute left-4 top-3 inline-flex items-center font-mono text-[12px] font-bold leading-none tracking-[0.08em] text-stone-800",children:`${t} pod`})})}function X6({data:e}){const t=e.session;return c.jsxs("div",{"data-testid":"discovered-graph-node",className:"border-dashed border-2 border-foreground/30 bg-surface-low/50 p-spacing-3 min-w-[180px]",children:[c.jsx(Wa,{type:"target",position:Ne.Top,className:"opacity-0"}),c.jsxs("div",{className:"text-label-sm font-mono uppercase mb-spacing-1",children:[t.tmuxSession,":",t.tmuxPane]}),c.jsxs("div",{className:"flex gap-spacing-2 items-center mb-spacing-1",children:[c.jsx("span",{className:"text-label-sm uppercase text-foreground-muted",children:t.runtimeHint}),c.jsx("span",{className:"text-label-sm text-foreground-muted",children:t.confidence})]}),t.cwd&&c.jsx("div",{className:"text-label-sm font-mono text-foreground-muted truncate",children:t.cwd}),c.jsx(Wa,{type:"source",position:Ne.Bottom,className:"opacity-0"})]})}const Z6={rigNode:Y6,discoveredNode:X6,podGroup:K6};function W6(){return c.jsxs("div",{className:"flex flex-col items-center justify-center h-full relative text-foreground-muted","data-testid":"empty-topology",children:[c.jsxs("svg",{className:"absolute inset-0 w-full h-full",viewBox:"0 0 400 300",fill:"none",style:{opacity:.08},children:[c.jsx("rect",{x:"160",y:"60",width:"80",height:"40",stroke:"currentColor",strokeWidth:"1"}),c.jsx("rect",{x:"60",y:"180",width:"80",height:"40",stroke:"currentColor",strokeWidth:"1"}),c.jsx("rect",{x:"260",y:"180",width:"80",height:"40",stroke:"currentColor",strokeWidth:"1"}),c.jsx("line",{x1:"200",y1:"100",x2:"100",y2:"180",stroke:"currentColor",strokeWidth:"1",strokeDasharray:"4 4"}),c.jsx("line",{x1:"200",y1:"100",x2:"300",y2:"180",stroke:"currentColor",strokeWidth:"1",strokeDasharray:"4 4"})]}),c.jsx("div",{className:"relative z-10 text-center",children:c.jsx("h2",{className:"text-headline-md uppercase",children:"EMPTY TOPOLOGY"})})]})}function J6({rigId:e,rigName:t=null,showDiscovered:s=!0}){const{data:r,isPending:i,error:l}=T6(e??""),d=e4(s),f=(r==null?void 0:r.nodes)??[],m=(r==null?void 0:r.edges)??[],h=(l==null?void 0:l.message)??null,{reconnecting:v}=M6(e),[g,y]=j.useState(null),b=j.useRef(null),S=j.useRef(null),w=e!==null&&S.current!==e;j.useEffect(()=>{e&&f.length>0&&S.current!==e&&(S.current=e)},[e,f.length]);const N=j.useCallback(Y=>{b.current&&clearTimeout(b.current),y(Y),b.current=setTimeout(()=>{y(null),b.current=null},3e3)},[]);j.useEffect(()=>()=>{b.current&&clearTimeout(b.current)},[]);const E=j.useMemo(()=>m.map(Y=>{var k;const B=((k=Y.data)==null?void 0:k.kind)??Y.label??"delegates_to",V=k6(B);return{...Y,...V,className:w?"edge-draw-in":void 0,style:{...V.style,animationDelay:w?`${Math.min(f.length*50+100,2e3)}ms`:void 0}}}),[m,w,f.length]),T=j.useMemo(()=>{const Y=new Map;for(const B of f){const V=B.data;if((B.type==="podGroup"||B.type==="group")&&(V!=null&&V.podId)){Y.set(V.podId,{displayName:V.podLabel??V.podNamespace??ds(V.logicalId)??fs(V.podId),namespace:V.podNamespace??V.logicalId??null});continue}const k=(V==null?void 0:V.podId)??null;if(!k)continue;const U=(V==null?void 0:V.podNamespace)??ds(V==null?void 0:V.logicalId)??null,$=(V==null?void 0:V.podLabel)??U??fs(k);Y.has(k)||Y.set(k,{displayName:$,namespace:U})}return Y},[f]),{selection:_,setSelection:R}=tr(),{selectedDiscoveredId:L,placementTarget:I,setPlacementTarget:P}=E4(),A=(_==null?void 0:_.type)==="discovery"&&!!L,M=j.useMemo(()=>{const Y=new Map;for(const $ of f){if(!$.parentId)continue;const F=typeof $.data=="object"&&$.data!==null&&"logicalId"in $.data?$.data.logicalId:null,H=typeof $.data=="object"&&$.data!==null&&"podId"in $.data?$.data.podId:null,D=ds(F)??fs(H);D&&!Y.has($.parentId)&&Y.set($.parentId,D)}const V=P6(f,m).map(($,F)=>({...$,data:(()=>{if($.type==="podGroup"||$.type==="group"){const H=$.data,D=(H==null?void 0:H.podId)??null,G=(I==null?void 0:I.kind)==="pod"&&D!==null&&I.podId===D;return{...$.data??{},podDisplayName:Y.get($.id)??null,placementState:A?G?"selected":"available":null}}if($.type==="rigNode"){const H=$.data,D=!(H!=null&&H.binding)&&!(H!=null&&H.canonicalSessionName),G=(I==null?void 0:I.kind)==="node"&&(H==null?void 0:H.logicalId)!==void 0&&I.logicalId===H.logicalId;return{...$.data??{},placementState:A?G?"selected":D?"available":null:null}}return $.data})(),className:w?"node-enter":void 0,style:{...$.style??{},animationDelay:w?`${Math.min(F*50,2e3)}ms`:void 0}})),k=V.reduce(($,F)=>{var H;return Math.max($,((H=F.position)==null?void 0:H.y)??0)},0),U=d.map(($,F)=>({id:`discovered-${$.id}`,type:"discoveredNode",position:{x:300,y:k+200+F*150},data:{session:$}}));return[...V,...U]},[f,m,w,d,A,I]),{setSelectedNode:q}=C4(),z=t!=null&&t.trim()?t:e?Gs(e):null,Q=j.useCallback(async(Y,B)=>{var k;if(!e)return;if(A){if(B.type==="podGroup"||B.type==="group"){const U=B.data,$=(U==null?void 0:U.podId)??null,F=$?T.get($):null,H=!!($&&(F!=null&&F.namespace));P({kind:"pod",rigId:e,podId:$??"",podNamespace:(F==null?void 0:F.namespace)??null,podLabel:(F==null?void 0:F.displayName)??null,eligible:H,...H?{}:{reason:"This pod cannot receive a new node yet."}});return}if(B.type==="rigNode"){const U=B.data,$=!U.binding&&!U.canonicalSessionName;P({kind:"node",rigId:e,logicalId:U.logicalId,eligible:$,...$?{}:{reason:"This node is already claimed."}});return}}if(B.type==="podGroup"||B.type==="group"){R({type:"rig",rigId:e});return}const V=B.data;if(q({rigId:e,logicalId:V.logicalId}),!((k=V.binding)!=null&&k.cmuxSurface)){N({text:"Not bound to cmux surface",type:"info"});return}try{const U=await fetch(`/api/rigs/${encodeURIComponent(e)}/nodes/${encodeURIComponent(V.logicalId)}/focus`,{method:"POST"});if(!U.ok){N({text:"Focus failed",type:"error"});return}const $=await U.json();$.ok===!1&&$.code==="unavailable"?N({text:"cmux not connected",type:"error"}):$.ok?N({text:"Focused",type:"success"}):N({text:"Focus failed",type:"error"})}catch{N({text:"Focus failed",type:"error"})}},[A,T,e,P,q,R,N]);return e===null?c.jsx("div",{className:"p-spacing-6 text-foreground-muted",children:"No rig selected"}):i?c.jsxs("div",{className:"p-spacing-6","data-testid":"graph-loading",children:[c.jsx("div",{className:"h-8 w-48 animate-pulse-tactical mb-spacing-4"}),c.jsx("div",{className:"h-64 animate-pulse-tactical"})]}):h?c.jsx("div",{className:"p-spacing-6",children:c.jsx(Kt,{"data-testid":"graph-error",children:c.jsxs(Xt,{children:["Error: ",h]})})}):M.length===0?c.jsx(W6,{}):c.jsxs("div",{className:"w-full h-full relative","data-testid":"graph-view","data-animated":w?"true":"false",children:[c.jsx("div",{className:"absolute top-4 left-4 w-3 h-3 reg-mark",children:c.jsx("div",{className:"reg-tl"})}),c.jsx("div",{className:"absolute top-4 right-4 w-3 h-3",children:c.jsx("div",{className:"reg-tr"})}),c.jsx("div",{className:"absolute bottom-4 left-4 w-3 h-3",children:c.jsx("div",{className:"reg-bl"})}),c.jsx("div",{className:"absolute bottom-4 right-4 w-3 h-3",children:c.jsx("div",{className:"reg-br"})}),z&&c.jsx("div",{"data-testid":"rig-stamp-watermark",className:"stamp-watermark text-3xl left-[20%] top-[35%]",children:z}),v&&c.jsx("div",{className:"absolute top-spacing-4 right-spacing-4 z-20",children:c.jsx(Kt,{children:c.jsx(Xt,{className:"text-warning",children:"Live updates disconnected from daemon — reconnecting..."})})}),g&&c.jsx("div",{className:`absolute top-spacing-4 left-spacing-4 z-20 px-spacing-4 py-spacing-2 font-mono text-[10px] border ${g.type==="success"?"bg-white border-stone-900 text-stone-900":g.type==="error"?"bg-tertiary/10 border-tertiary text-tertiary":"bg-white border-stone-300 text-stone-600"}`,children:g.text}),A&&c.jsx("div",{"data-testid":"graph-placement-banner",className:"absolute top-spacing-4 left-1/2 z-20 -translate-x-1/2 border border-emerald-300/90 bg-[rgba(236,253,245,0.92)] px-3.5 py-2 font-mono text-[10px] text-emerald-950 shadow-[0_12px_28px_rgba(34,197,94,0.14)] backdrop-blur-sm",children:"PLACEMENT MODE · click an available node to bind, or click a pod to add a new node."}),c.jsx(S2,{nodes:M,edges:E,nodeTypes:Z6,onNodeClick:Q,nodesDraggable:!1,selectionOnDrag:!1,panOnDrag:!0,fitView:!0,fitViewOptions:{padding:.16,maxZoom:1.15},className:"relative z-10",proOptions:{hideAttribution:!0},minZoom:.3,maxZoom:1.5,children:c.jsx(j2,{})})]})}function h0(){const{openExplorer:e}=j4(),{setSelection:t}=tr();return c.jsx("div",{"data-testid":"workspace-home",className:"flex h-full min-h-[420px] flex-col items-center justify-center bg-[radial-gradient(circle_at_top,rgba(245,244,240,0.85),rgba(244,242,236,0.55)_32%,rgba(243,241,236,0.22)_58%,transparent_72%)] px-8 text-center",children:c.jsxs("div",{className:"max-w-xl space-y-3",children:[c.jsx("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-stone-500",children:"Explorer-Driven Workspace"}),c.jsx("h1",{className:"font-headline text-2xl font-bold uppercase tracking-tight text-stone-900",children:"Select a rig from the explorer to inspect its topology."}),c.jsxs("p",{className:"text-sm text-stone-600",children:["Use ",c.jsx("span",{className:"font-mono text-stone-800",children:"Specs"})," to import a rig spec or run bootstrap, and use the ",c.jsx("span",{className:"font-mono text-stone-800",children:"Discovery"})," drawer to place running sessions."]}),c.jsxs("div",{className:"flex items-center justify-center gap-3 pt-2",children:[c.jsx("button",{type:"button","data-testid":"workspace-open-explorer",onClick:e,className:"border border-stone-300 px-4 py-2 font-mono text-[10px] uppercase tracking-[0.14em] text-stone-700 transition-colors hover:bg-stone-100",children:"Explore"}),c.jsx("button",{type:"button","data-testid":"workspace-open-specs",onClick:()=>t({type:"specs"}),className:"border border-stone-300 px-4 py-2 font-mono text-[10px] uppercase tracking-[0.14em] text-stone-700 transition-colors hover:bg-stone-100",children:"Open Specs"}),c.jsx("button",{type:"button","data-testid":"workspace-open-discovery",onClick:()=>t({type:"discovery"}),className:"border border-stone-300 px-4 py-2 font-mono text-[10px] uppercase tracking-[0.14em] text-stone-700 transition-colors hover:bg-stone-100",children:"Open Discovery"})]})]})})}function eP(e){switch(e){case"launched":return"text-success";case"failed":return"text-destructive";default:return"text-foreground-muted"}}const m0=j.forwardRef(({className:e,type:t,...s},r)=>c.jsx("input",{type:t,className:Re("flex h-11 w-full border border-stone-300/55 bg-white/85 px-4 py-2 text-base text-foreground placeholder:text-foreground-muted/60 transition-colors duration-150 focus-visible:outline-none focus-visible:border-stone-900/35 focus-visible:ring-2 focus-visible:ring-stone-900/10 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...s}));m0.displayName="Input";const p0=j.forwardRef(({className:e,...t},s)=>c.jsx("textarea",{className:Re("flex min-h-[80px] w-full border border-stone-300/55 bg-white/85 px-4 py-3 text-base text-on-surface font-mono placeholder:text-stone-400 transition-all duration-150 focus-visible:outline-none focus-visible:border-stone-900/35 focus-visible:ring-2 focus-visible:ring-stone-900/10 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:s,...t}));p0.displayName="Textarea";function lt({children:e,className:t,innerClassName:s}){return c.jsx("div",{"data-testid":"workspace-page",className:Re("w-full flex-1 overflow-y-auto lg:pl-[var(--workspace-left-offset,0px)] lg:pr-[var(--workspace-right-offset,0px)]",t),children:c.jsx("div",{"data-testid":"workspace-page-inner",className:Re("mx-auto w-full max-w-[960px] px-4 py-6 sm:px-6 sm:py-8 md:px-8 lg:px-10",s),children:e})})}const g0=j.forwardRef(({className:e,...t},s)=>c.jsx("div",{className:"relative w-full overflow-auto",children:c.jsx("table",{ref:s,className:Re("w-full caption-bottom text-sm",e),...t})}));g0.displayName="Table";const x0=j.forwardRef(({className:e,...t},s)=>c.jsx("thead",{ref:s,className:Re("bg-surface-low [&_tr]:border-b [&_tr]:border-stone-300",e),...t}));x0.displayName="TableHeader";const y0=j.forwardRef(({className:e,...t},s)=>c.jsx("tbody",{ref:s,className:Re("[&_tr:last-child]:border-0",e),...t}));y0.displayName="TableBody";const tP=j.forwardRef(({className:e,...t},s)=>c.jsx("tfoot",{ref:s,className:Re("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",e),...t}));tP.displayName="TableFooter";const dc=j.forwardRef(({className:e,...t},s)=>c.jsx("tr",{ref:s,className:Re("border-b border-stone-200 transition-colors duration-150 hover:bg-surface-low data-[state=selected]:bg-surface-mid odd:bg-surface-low/50",e),...t}));dc.displayName="TableRow";const Or=j.forwardRef(({className:e,...t},s)=>c.jsx("th",{ref:s,className:Re("h-12 px-4 text-left align-middle font-medium text-foreground-muted uppercase text-label-md tracking-[0.04em] [&:has([role=checkbox])]:pr-0",e),...t}));Or.displayName="TableHead";const Dr=j.forwardRef(({className:e,...t},s)=>c.jsx("td",{ref:s,className:Re("p-4 align-middle [&:has([role=checkbox])]:pr-0",e),...t}));Dr.displayName="TableCell";const nP=j.forwardRef(({className:e,...t},s)=>c.jsx("caption",{ref:s,className:Re("mt-4 text-sm text-foreground-muted",e),...t}));nP.displayName="TableCaption";function Fn({eyebrow:e,title:t,description:s,actions:r}){return c.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row lg:items-end lg:justify-between",children:[c.jsxs("div",{className:"space-y-3",children:[c.jsx("p",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-stone-500",children:e}),c.jsx("h2",{className:"text-2xl font-bold uppercase tracking-[0.04em] text-stone-900 sm:text-3xl",children:t}),s&&c.jsx("p",{className:"max-w-2xl text-base leading-8 text-stone-600",children:s})]}),r?c.jsx("div",{className:"flex flex-wrap gap-2",children:r}):null]})}function A2({steps:e,currentStep:t,errorAtStep:s=0,"data-testid":r}){const i=s||t;return c.jsx("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3","data-testid":r,children:e.map((l,d)=>{const f=i>l.num,m=i===l.num,h=i<l.num,v=f?"done":m?"active":"upcoming";return c.jsxs("div",{className:"flex items-center gap-2 sm:gap-3",children:[c.jsxs("div",{"data-testid":`step-${l.num}`,"data-step-state":v,className:Re("inline-flex min-h-0 items-center gap-2 border-b-2 px-1 py-1 font-mono text-[10px] uppercase tracking-[0.16em] transition-colors",f&&"border-primary/35 text-foreground-muted",m&&"border-stone-900 text-foreground",h&&"border-transparent text-foreground-muted/35"),children:[c.jsxs("span",{className:"text-[9px] tracking-[0.22em]",children:[f?"✓ ":"",String(l.num).padStart(2,"0")]}),c.jsx("span",{className:"text-[10px] leading-none tracking-[0.2em]",children:l.label})]}),d<e.length-1?c.jsx("div",{"aria-hidden":"true",className:Re("h-px w-4 shrink-0 sm:w-6",f?"bg-primary/35":"bg-stone-300/45")}):null]},l.num)})})}function zn({title:e,description:t,children:s,className:r}){return c.jsxs("section",{className:Re("space-y-4 border border-stone-300/45 bg-[rgba(255,255,255,0.62)] p-5 shadow-[0_1px_0_rgba(255,255,255,0.95)_inset,0_10px_26px_rgba(34,34,24,0.035)] sm:p-6",r),children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[10px] uppercase tracking-[0.18em] text-stone-500",children:e}),t?c.jsx("p",{className:"text-base leading-8 text-stone-600",children:t}):null]}),s]})}function Rf({children:e}){return c.jsx("div",{className:"grid gap-3 sm:grid-cols-2 xl:grid-cols-4",children:e})}function kt({label:e,value:t,testId:s}){return c.jsxs("div",{className:"border border-stone-300/35 bg-white/10 px-4 py-4",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:e}),c.jsx("div",{"data-testid":s,className:"mt-2 text-2xl font-semibold uppercase tracking-[0.04em] text-stone-900",children:t})]})}function M2({title:e,testId:t,children:s}){return c.jsx(zn,{title:e,children:c.jsx("pre",{"data-testid":t,className:"overflow-x-auto border border-stone-300/45 bg-white/75 p-4 text-xs leading-6 text-stone-800",children:s})})}const sP=[{num:1,label:"VALIDATE RIGSPEC"},{num:2,label:"PREFLIGHT"},{num:3,label:"INSTANTIATE"}];function aP(e){switch(e){case"input":case"validating":return 1;case"valid":case"preflight":return 2;case"preflight_done":case"instantiating":case"done":return 3;case"error":return 0}}function rP({onBack:e}={}){const t=RM(),{currentRigDraft:s,selectedRigDraft:r,saveRigDraft:i,rememberRigDraft:l,clearSelectedRigDraft:d}=Co(),[f,m]=j.useState(()=>(r==null?void 0:r.yaml)??(s==null?void 0:s.yaml)??""),[h,v]=j.useState(""),[g,y]=j.useState("input"),[b,S]=j.useState(0),[w,N]=j.useState([]),[E,T]=j.useState([]),[_,R]=j.useState(null);j.useEffect(()=>{i(f)},[i,f]),j.useEffect(()=>{r&&(m(r.yaml),d())},[d,r]);const L=async()=>{l(f),y("validating"),N([]);try{const M=await(await fetch("/api/rigs/import/validate",{method:"POST",headers:{"Content-Type":"text/yaml"},body:f})).json();M.valid?y("valid"):(N(M.errors??["Validation failed"]),S(1),y("error"))}catch{N(["Validation request failed"]),S(1),y("error")}},I=async()=>{y("preflight"),N([]),T([]);try{const A={"Content-Type":"text/yaml"};h&&(A["X-Rig-Root"]=h);const q=await(await fetch("/api/rigs/import/preflight",{method:"POST",headers:A,body:f})).json();T(q.warnings??[]),q.errors&&q.errors.length>0?(N(q.errors),S(2),y("error")):y("preflight_done")}catch{N(["Preflight request failed"]),S(2),y("error")}},P=async()=>{y("instantiating"),N([]);try{const A=await t.mutateAsync({yaml:f,rigRoot:h.trim()||void 0});R(A),y("done")}catch(A){A instanceof eg?(A.code==="cycle_error"?N(["Cycle detected in rig topology"]):N(A.errors),T(A.warnings)):N([A instanceof Error?A.message:"Instantiate request failed"]),S(3),y("error")}};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"import-flow",className:"space-y-8",children:[c.jsx(Fn,{eyebrow:"Rig Import",title:"Import Rig",description:"Validate a RigSpec, run preflight checks, then instantiate a topology from YAML."}),c.jsx(A2,{"data-testid":"step-indicator",steps:sP,currentStep:aP(g),errorAtStep:g==="error"?b:0}),g==="input"&&c.jsxs(zn,{title:"Rig YAML",description:"Paste a rig spec and optionally provide a rig root to anchor relative references during import.",children:[c.jsx(p0,{"data-testid":"yaml-input",value:f,onChange:A=>m(A.target.value),placeholder:"Paste YAML rig spec here...",rows:14,className:"font-mono text-body-sm mb-spacing-4"}),c.jsxs("div",{className:"mb-spacing-4",children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"RIG ROOT (OPTIONAL)"}),c.jsx(m0,{"data-testid":"rig-root-input",type:"text",value:h,onChange:A=>v(A.target.value),placeholder:"/path/to/rig/root",className:"font-mono text-body-sm"})]}),c.jsx(we,{variant:"tactical","data-testid":"validate-btn",onClick:L,disabled:!f.trim(),children:"VALIDATE RIGSPEC"})]}),g==="validating"&&c.jsx("div",{className:"text-label-md text-foreground-muted",children:"Validating..."}),g==="valid"&&c.jsxs(zn,{title:"Validation Passed",description:"The RigSpec is valid. Run preflight checks before you instantiate it.",children:[c.jsx(Kt,{className:"mb-spacing-4","data-testid":"valid-message",children:c.jsx(Xt,{className:"text-primary",children:"RigSpec valid. Run preflight checks?"})}),c.jsx(we,{variant:"tactical","data-testid":"preflight-btn",onClick:I,children:"RUN PREFLIGHT"})]}),g==="preflight"&&c.jsx("div",{className:"text-label-md text-foreground-muted",children:"Running preflight..."}),g==="preflight_done"&&c.jsxs(zn,{title:"Preflight Results",description:"Review warnings before you instantiate the rig into live runtime sessions.",children:[E.length>0&&c.jsx(Kt,{className:"mb-spacing-4","data-testid":"preflight-warnings",children:c.jsxs(Xt,{className:"text-warning",children:[c.jsx("div",{className:"text-label-md uppercase mb-spacing-1",children:"WARNINGS"}),E.map((A,M)=>c.jsxs("div",{children:["— ",A]},M))]})}),c.jsx(Kt,{className:"mb-spacing-4","data-testid":"preflight-ready",children:c.jsx(Xt,{className:"text-primary",children:"Preflight passed. Ready to instantiate."})}),c.jsx(we,{variant:"tactical","data-testid":"instantiate-btn",onClick:P,children:"INSTANTIATE"})]}),g==="instantiating"&&c.jsx("div",{className:"text-label-md text-foreground-muted",children:"Instantiating..."}),g==="done"&&_&&c.jsx(zn,{title:"Instantiate Result",description:"The daemon returned per-node launch status for the imported topology.",className:"space-y-4",children:c.jsxs("div",{"data-testid":"import-result",children:[c.jsx(Kt,{className:"mb-spacing-4",children:c.jsxs(Xt,{children:[c.jsx("span",{className:"text-primary font-mono",children:_.specName}),c.jsxs("span",{className:"text-foreground-muted",children:[" (",_.rigId,")"]})]})}),c.jsxs(g0,{children:[c.jsx(x0,{children:c.jsxs(dc,{children:[c.jsx(Or,{children:"NODE"}),c.jsx(Or,{children:"STATUS"})]})}),c.jsx(y0,{children:_.nodes.map(A=>c.jsxs(dc,{children:[c.jsx(Dr,{className:"font-mono",children:A.logicalId}),c.jsx(Dr,{children:c.jsx("span",{className:`font-mono ${eP(A.status)}`,"data-testid":`inst-status-${A.logicalId}`,children:A.status})})]},A.logicalId))})]}),e?c.jsx("div",{className:"mt-spacing-6",children:c.jsx(we,{variant:"ghost",onClick:e,children:"Close"})}):null]})}),g==="error"&&c.jsx(zn,{title:"Import Errors",description:"Fix the reported issues, then retry the import flow.",children:c.jsxs("div",{"data-testid":"import-errors",children:[E.length>0&&c.jsx(Kt,{className:"mb-spacing-2","data-testid":"error-warnings",children:c.jsxs(Xt,{className:"text-warning",children:[c.jsx("div",{className:"text-label-md uppercase mb-spacing-1",children:"WARNINGS"}),E.map((A,M)=>c.jsxs("div",{children:["— ",A]},M))]})}),w.map((A,M)=>c.jsx(Kt,{className:"mb-spacing-2",children:c.jsx(Xt,{className:"text-destructive",children:A})},M)),c.jsx(we,{variant:"tactical",className:"mt-spacing-4",onClick:()=>{y("input"),N([]),T([]),R(null),S(0),v("")},children:"TRY AGAIN"})]})})]})})}async function iP(){const e=await fetch("/api/packages/summary");if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}function oP(){return Rt({queryKey:["packages"],queryFn:iP})}function lP(e){switch(e){case"applied":return"bg-success";case"rolled_back":return"bg-warning";case"failed":return"bg-destructive";default:return"bg-foreground-muted-on-dark"}}function cP(e){switch(e){case"applied":return"APPLIED";case"rolled_back":return"ROLLED BACK";case"failed":return"FAILED";default:return"NONE"}}function uP({pkg:e,onSelect:t}){return c.jsxs("div",{"data-testid":"package-card",role:"link",tabIndex:0,className:"card-dark p-spacing-6 mb-spacing-3 cursor-pointer",onClick:()=>t(e.id),onKeyDown:s=>{s.key==="Enter"&&t(e.id)},children:[c.jsxs("div",{className:"flex items-baseline justify-between mb-spacing-2",children:[c.jsx("h3",{className:"text-headline-md uppercase",children:e.name}),c.jsxs("span",{className:"text-label-md font-mono text-foreground-muted-on-dark",children:["v",e.version]})]}),e.summary&&c.jsx("p",{className:"text-body-sm text-foreground-muted-on-dark mb-spacing-4",children:e.summary}),c.jsx("div",{className:"flex items-center gap-spacing-4 text-label-sm",children:c.jsxs("span",{className:"text-foreground-muted-on-dark",children:["SOURCE ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:e.sourceRef})]})}),c.jsxs("div",{className:"flex items-center gap-spacing-4 mt-spacing-3 text-label-sm",children:[c.jsxs("span",{className:"text-foreground-muted-on-dark",children:["INSTALLS ",c.jsx("span",{className:"font-mono text-foreground-on-dark","data-testid":"install-count",children:e.installCount})]}),c.jsxs("span",{className:"flex items-center gap-spacing-1",children:[c.jsx("span",{className:Re("inline-block w-[6px] h-[6px]",lP(e.latestInstallStatus))}),c.jsx("span",{className:"text-foreground-muted-on-dark","data-testid":"install-status",children:cP(e.latestInstallStatus)})]})]})]})}function dP(){const e=Wt(),{data:t,isPending:s,error:r}=oP(),i=t?[...t].sort((l,d)=>d.createdAt.localeCompare(l.createdAt)):[];return s?c.jsx(lt,{children:c.jsxs("div",{"data-testid":"packages-loading",children:[c.jsxs("div",{className:"flex justify-between mb-spacing-6",children:[c.jsx("div",{className:"h-8 w-32 shimmer"}),c.jsx("div",{className:"h-8 w-28 shimmer"})]}),[1,2].map(l=>c.jsxs("div",{className:"card-dark p-spacing-6 mb-spacing-3",children:[c.jsx("div",{className:"h-6 w-48 shimmer-dark mb-spacing-4"}),c.jsx("div",{className:"h-12 shimmer-dark mb-spacing-4"}),c.jsx("div",{className:"h-4 w-64 shimmer-dark"})]},l))]})}):r?c.jsx(lt,{children:c.jsx("div",{children:c.jsx(Kt,{"data-testid":"packages-error",children:c.jsx(Xt,{children:r.message})})})}):i.length===0?c.jsx(lt,{children:c.jsxs("div",{className:"flex flex-col items-center justify-center min-h-[60vh]","data-testid":"packages-empty",children:[c.jsx("h2",{className:"text-display-lg text-foreground mb-spacing-4",children:"NO LEGACY PACKAGE INSTALLS"}),c.jsx("p",{className:"text-body-md text-foreground-muted mb-spacing-8",children:"Legacy package tools remain available for bootstrap internals while Specs becomes the main authoring surface."}),c.jsxs("div",{className:"flex flex-col items-center gap-spacing-3",children:[c.jsx(we,{variant:"default",size:"lg","data-testid":"empty-import-btn",onClick:()=>e({to:"/import"}),children:"IMPORT RIGSPEC"}),c.jsx(we,{variant:"ghost",size:"lg","data-testid":"empty-bootstrap-btn",onClick:()=>e({to:"/bootstrap"}),children:"BOOTSTRAP"})]})]})}):c.jsx(lt,{children:c.jsxs("div",{children:[c.jsxs("div",{className:"flex justify-between items-baseline mb-spacing-6",children:[c.jsxs("div",{children:[c.jsx("h2",{className:"text-headline-lg uppercase",children:"LEGACY PACKAGE TOOLS"}),c.jsxs("p",{className:"text-label-md text-foreground-muted font-grotesk mt-spacing-1",children:[i.length," legacy package install",i.length!==1?"s":""," retained for bootstrap internals"]})]}),c.jsxs("div",{className:"flex flex-col items-end gap-spacing-2",children:[c.jsx(we,{variant:"default",size:"sm","data-testid":"header-import-btn",onClick:()=>e({to:"/import"}),children:"IMPORT RIGSPEC"}),c.jsx(we,{variant:"ghost",size:"sm","data-testid":"header-bootstrap-btn",onClick:()=>e({to:"/bootstrap"}),children:"BOOTSTRAP"})]})]}),i.map(l=>c.jsx(uP,{pkg:l,onSelect:d=>e({to:"/packages/$packageId",params:{packageId:d}})},l.id))]})})}const fP=[{num:1,label:"ENTER"},{num:2,label:"VALIDATE"},{num:3,label:"CONFIGURE"},{num:4,label:"PLAN"},{num:5,label:"APPLY"}];function hP(e){switch(e){case"enter":return 1;case"validating":case"validated":return 2;case"configure":return 3;case"planning":case"planned":return 4;case"applying":case"done":return 5;case"error":return 0}}function mP({currentStep:e,errorAtStep:t}){const s=e==="error"?t:hP(e);return c.jsx("div",{className:"flex items-center gap-spacing-2 mb-spacing-8 p-spacing-4 inset-light flex-wrap","data-testid":"step-indicator",children:fP.map((r,i)=>{const l=s>r.num,d=s===r.num;return c.jsxs("div",{className:"flex items-center gap-spacing-2",children:[i>0&&c.jsx("div",{className:`w-6 h-px mx-spacing-1 ${l?"bg-primary/40":"bg-foreground-muted/20"}`}),c.jsxs("span",{"data-testid":`step-${r.num}`,className:Re("text-label-sm uppercase tracking-[0.04em] font-mono px-spacing-2 py-spacing-1 transition-colors whitespace-nowrap",l?"text-foreground-muted":d?"text-foreground bg-foreground/10":"text-foreground-muted/30"),children:[l?"✓":""," [ ",r.num," ",r.label," ]"]})]},r.num)})})}function pP(e){switch(e){case"approved":return"text-success";case"rejected":return"text-warning";case"deferred":return"text-foreground-muted";case"conflict":return"text-destructive";case"noop":return"text-foreground-muted/50";default:return""}}function gP(e){switch(e){case"approved":return"bg-success/8";case"rejected":return"bg-warning/8";case"deferred":return"bg-foreground-muted/4";case"conflict":return"bg-destructive/8";default:return""}}function xP(){const e=Wt(),[t,s]=j.useState(""),[r,i]=j.useState("enter"),[l,d]=j.useState(0),[f,m]=j.useState([]),[h,v]=j.useState(null),[g,y]=j.useState("claude-code"),[b,S]=j.useState("."),[w,N]=j.useState(""),[E,T]=j.useState(!1),[_,R]=j.useState(null),[L,I]=j.useState(null),P=async()=>{i("validating"),m([]);try{const Q=await(await fetch("/api/packages/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t})})).json();Q.valid?(v(Q.manifest),i("validated")):(m(Q.errors??[Q.error??"Validation failed"]),d(2),i("error"))}catch{m(["Validation request failed"]),d(2),i("error")}},A=async()=>{i("planning"),m([]);try{const z=await fetch("/api/packages/plan",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t,targetRoot:b,runtime:g,roleName:w||void 0,allowMerge:E})});if(!z.ok){const Y=await z.json();m(Y.errors??[Y.error??"Plan failed"]),d(4),i("error");return}const Q=await z.json();R(Q),i("planned")}catch{m(["Plan request failed"]),d(4),i("error")}},M=async()=>{i("applying"),m([]);try{const z=await fetch("/api/packages/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t,targetRoot:b,runtime:g,roleName:w||void 0,allowMerge:E})}),Q=await z.json();if(z.status>=400){m(Q.errors??[Q.error??"Install failed"]),d(5),i("error");return}I(Q),i("done")}catch{m(["Install request failed"]),d(5),i("error")}},q=((_==null?void 0:_.conflicts)??0)>0;return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"install-flow",children:[c.jsx("div",{className:"mb-spacing-8",children:c.jsxs("div",{children:[c.jsx("h2",{className:"text-headline-lg uppercase tracking-[0.06em]",children:"INSTALL PACKAGE (Legacy)"}),c.jsx("p",{className:"text-label-md text-foreground-muted font-grotesk mt-spacing-1",children:"Validate, configure, and apply an agent package"})]})}),c.jsx(mP,{currentStep:r,errorAtStep:l}),r==="enter"&&c.jsxs("div",{children:[c.jsx("label",{className:"text-label-md text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-2",children:"PACKAGE PATH"}),c.jsx("input",{"data-testid":"source-path-input",type:"text",value:t,onChange:z=>s(z.target.value),placeholder:"/path/to/package",className:"w-full bg-transparent border-b border-foreground/20 focus:border-foreground px-0 py-spacing-2 text-body-md font-mono outline-none transition-colors"}),c.jsx(we,{variant:"tactical","data-testid":"validate-btn",onClick:P,disabled:!t.trim(),className:"mt-spacing-4",children:"VALIDATE"})]}),r==="validating"&&c.jsx("div",{className:"text-label-md text-foreground-muted","data-testid":"validating-indicator",children:"Validating..."}),r==="validated"&&h&&c.jsxs("div",{"data-testid":"manifest-summary",children:[c.jsxs("div",{className:"card-dark p-spacing-4 mb-spacing-4",children:[c.jsxs("div",{className:"flex items-baseline justify-between mb-spacing-2",children:[c.jsx("span",{className:"text-headline-md uppercase",children:h.name}),c.jsxs("span",{className:"font-mono text-foreground-muted-on-dark",children:["v",h.version]})]}),c.jsx("p",{className:"text-body-sm text-foreground-muted-on-dark mb-spacing-3",children:h.summary}),c.jsxs("div",{className:"flex flex-wrap gap-spacing-3 text-label-sm",children:[c.jsxs("span",{children:["Skills: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.skills})]}),c.jsxs("span",{children:["Guidance: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.guidance})]}),c.jsxs("span",{children:["Agents: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.agents})]}),c.jsxs("span",{children:["Hooks: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.exportCounts.hooks})]}),c.jsxs("span",{children:["Runtimes: ",c.jsx("span",{className:"font-mono text-foreground-on-dark",children:h.runtimes.join(", ")})]})]})]}),c.jsx(we,{variant:"tactical","data-testid":"configure-btn",onClick:()=>i("configure"),children:"CONFIGURE"})]}),r==="configure"&&h&&c.jsxs("div",{"data-testid":"configure-step",children:[c.jsxs("div",{className:"space-y-spacing-4 mb-spacing-6",children:[c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"RUNTIME"}),c.jsx("select",{"data-testid":"runtime-select",value:g,onChange:z=>y(z.target.value),className:"bg-transparent border-b border-foreground/20 py-spacing-1 text-body-md font-mono outline-none",children:h.runtimes.map(z=>c.jsx("option",{value:z,children:z},z))})]}),c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"TARGET ROOT"}),c.jsx("input",{"data-testid":"target-root-input",type:"text",value:b,onChange:z=>S(z.target.value),className:"w-full bg-transparent border-b border-foreground/20 px-0 py-spacing-1 text-body-md font-mono outline-none"})]}),h.roles.length>0&&c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm text-foreground-muted uppercase tracking-[0.04em] block mb-spacing-1",children:"ROLE"}),c.jsxs("select",{"data-testid":"role-select",value:w,onChange:z=>N(z.target.value),className:"bg-transparent border-b border-foreground/20 py-spacing-1 text-body-md font-mono outline-none",children:[c.jsx("option",{value:"",children:"All exports"}),h.roles.map(z=>c.jsxs("option",{value:z.name,children:[z.name,z.description?` — ${z.description}`:""]},z.name))]})]}),c.jsxs("div",{className:"flex items-center gap-spacing-2",children:[c.jsx("input",{"data-testid":"allow-merge-toggle",type:"checkbox",checked:E,onChange:z=>T(z.target.checked),className:"accent-primary"}),c.jsx("label",{className:"text-label-sm text-foreground-muted",children:"Allow managed block merges into existing files"})]}),(h.requirements.cliTools.length>0||h.requirements.systemPackages.length>0)&&c.jsxs("div",{"data-testid":"requirements-section",className:"p-spacing-3 bg-foreground/4",children:[c.jsx("span",{className:"text-label-sm text-foreground-muted uppercase block mb-spacing-1",children:"REQUIREMENTS"}),h.requirements.cliTools.map(z=>c.jsxs("div",{className:"text-body-sm font-mono",children:["CLI: ",z.name]},z.name)),h.requirements.systemPackages.map(z=>c.jsxs("div",{className:"text-body-sm font-mono",children:["System: ",z.name]},z.name))]})]}),c.jsx(we,{variant:"tactical","data-testid":"plan-btn",onClick:A,children:"PREVIEW PLAN"})]}),r==="planning"&&c.jsx("div",{className:"text-label-md text-foreground-muted","data-testid":"planning-indicator",children:"Planning..."}),r==="planned"&&_&&c.jsxs("div",{"data-testid":"plan-preview",children:[c.jsxs("div",{className:"flex flex-wrap gap-spacing-4 mb-spacing-4 text-label-sm",children:[c.jsxs("span",{children:["Approved: ",c.jsx("span",{className:"font-mono text-success","data-testid":"plan-actionable",children:_.actionable})]}),c.jsxs("span",{children:["Deferred: ",c.jsx("span",{className:"font-mono text-foreground-muted","data-testid":"plan-deferred",children:_.deferred})]}),c.jsxs("span",{children:["Conflicts: ",c.jsx("span",{className:"font-mono text-destructive","data-testid":"plan-conflicts",children:_.conflicts})]}),c.jsxs("span",{children:["No-ops: ",c.jsx("span",{className:"font-mono","data-testid":"plan-noops",children:_.noOps})]}),_.rejected>0&&c.jsxs("span",{children:["Rejected: ",c.jsx("span",{className:"font-mono text-warning","data-testid":"plan-rejected",children:_.rejected})]})]}),q&&c.jsx(Kt,{className:"mb-spacing-4","data-testid":"conflict-warning",children:c.jsx(Xt,{className:"text-destructive",children:"Conflicts detected — resolve before applying"})}),c.jsxs(g0,{children:[c.jsx(x0,{children:c.jsxs(dc,{children:[c.jsx(Or,{children:"TYPE"}),c.jsx(Or,{children:"NAME"}),c.jsx(Or,{children:"STATUS"}),c.jsx(Or,{children:"TARGET"})]})}),c.jsx(y0,{children:_.entries.map((z,Q)=>c.jsxs(dc,{className:gP(z.policyStatus),"data-testid":"plan-entry","data-policy-status":z.policyStatus,children:[c.jsx(Dr,{className:"font-mono text-label-sm",children:z.exportType}),c.jsx(Dr,{className:"font-mono text-label-sm",children:z.exportName}),c.jsxs(Dr,{className:Re("font-mono text-label-sm uppercase",pP(z.policyStatus)),children:[z.policyStatus,z.deferReason&&c.jsxs("span",{className:"text-foreground-muted normal-case",children:[" — ",z.deferReason]}),z.conflict&&c.jsxs("span",{className:"text-destructive normal-case",children:[" — ",z.conflict.reason]})]}),c.jsx(Dr,{className:"font-mono text-label-sm text-foreground-muted truncate max-w-[200px]",children:z.targetPath||"—"})]},Q))})]}),c.jsx("div",{className:"mt-spacing-4",children:c.jsx(we,{variant:"tactical","data-testid":"apply-btn",onClick:M,disabled:q,title:q?"Resolve conflicts before applying":void 0,children:"APPLY"})})]}),r==="applying"&&c.jsx("div",{className:"text-label-md text-foreground-muted","data-testid":"applying-indicator",children:"Applying..."}),r==="done"&&L&&c.jsxs("div",{"data-testid":"install-result",children:[c.jsx(Kt,{className:"mb-spacing-4",children:c.jsxs(Xt,{children:[c.jsx("span",{className:"text-primary font-mono",children:L.packageName}),c.jsx("span",{className:"text-foreground-muted",children:" installed as "}),c.jsx("span",{className:"font-mono","data-testid":"result-install-id",children:L.installId})]})}),c.jsxs("div",{className:"flex gap-spacing-4 text-label-sm mb-spacing-4",children:[c.jsxs("span",{children:["Applied: ",c.jsx("span",{className:"font-mono text-success","data-testid":"result-applied",children:L.applied.length})]}),c.jsxs("span",{children:["Deferred: ",c.jsx("span",{className:"font-mono text-foreground-muted","data-testid":"result-deferred",children:L.deferred.length})]}),c.jsxs("span",{children:["Verified: ",c.jsx("span",{className:Re("font-mono",L.verification.passed?"text-success":"text-destructive"),"data-testid":"result-verified",children:L.verification.passed?"PASS":"FAIL"})]})]}),c.jsx("div",{className:"flex gap-spacing-3",children:c.jsx(we,{variant:"tactical","data-testid":"detail-link",onClick:()=>e({to:"/packages/$packageId",params:{packageId:L.packageId}}),children:"VIEW INSTALL DETAILS"})})]}),r==="error"&&c.jsxs("div",{"data-testid":"install-errors",children:[f.map((z,Q)=>c.jsx(Kt,{className:"mb-spacing-2",children:c.jsx(Xt,{className:"text-destructive",children:z})},Q)),c.jsx(we,{variant:"tactical",className:"mt-spacing-4","data-testid":"try-again-btn",onClick:()=>{i("enter"),m([]),v(null),R(null),I(null),d(0)},children:"TRY AGAIN"})]})]})})}function yP(e){return Rt({queryKey:["packages",e],queryFn:async()=>{const t=await fetch(`/api/packages/${e}`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()},enabled:!!e})}function vP(e){return Rt({queryKey:["packages",e,"installs"],queryFn:async()=>{const t=await fetch(`/api/packages/${e}/installs`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()},enabled:!!e})}function bP(e){return Rt({queryKey:["installs",e,"journal"],queryFn:async()=>{const t=await fetch(`/api/packages/installs/${e}/journal`);if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()},enabled:!!e})}function SP(e){const t=Tt();return Ht({mutationFn:async s=>{const r=await fetch(`/api/packages/${s}/rollback`,{method:"POST"});if(!r.ok)throw new Error(`HTTP ${r.status}`);return r.json()},onSuccess:()=>{t.invalidateQueries({queryKey:["packages",e,"installs"]}),t.invalidateQueries({queryKey:["installs"]})}})}function wP(e){switch(e){case"applied":return"bg-success";case"rolled_back":return"bg-warning";case"failed":return"bg-destructive";default:return"bg-foreground-muted"}}function NP(e){switch(e){case"applied":return"APPLIED";case"rolled_back":return"ROLLED BACK";case"failed":return"FAILED";default:return e.toUpperCase()}}function jP({installId:e}){const{data:t,isPending:s,isError:r}=bP(e);return s?c.jsx("div",{className:"pl-spacing-6 py-spacing-2 text-label-sm text-foreground-muted",children:"Loading journal..."}):r?c.jsx("div",{className:"pl-spacing-6 py-spacing-2 text-label-sm text-destructive","data-testid":"journal-error",children:"Failed to load journal entries"}):!t||t.length===0?c.jsx("div",{className:"pl-spacing-6 py-spacing-2 text-label-sm text-foreground-muted",children:"No journal entries"}):c.jsx("div",{className:"pl-spacing-6 py-spacing-2 space-y-spacing-1","data-testid":"journal-entries",children:t.map(i=>c.jsxs("div",{"data-testid":"journal-entry",className:"flex items-center gap-spacing-3 text-label-sm font-mono py-spacing-1 border-b border-foreground/6 last:border-0",children:[c.jsx("span",{className:"text-foreground-muted w-6 text-right",children:i.seq}),c.jsx("span",{className:"uppercase",children:i.action}),c.jsx("span",{className:"text-foreground-muted",children:i.exportType}),c.jsx("span",{className:"text-foreground-muted truncate max-w-[200px]",children:i.targetPath}),c.jsx("span",{className:"text-foreground-muted ml-auto",children:i.status})]},i.id))})}function EP({install:e,onRollback:t}){const[s,r]=j.useState(!1);return c.jsxs("div",{"data-testid":"install-row",className:"card-dark p-spacing-4 mb-spacing-2",children:[c.jsxs("div",{className:"flex items-center gap-spacing-4",children:[c.jsxs("div",{className:"flex-1 min-w-0",children:[c.jsxs("div",{className:"flex items-center gap-spacing-3 mb-spacing-1",children:[c.jsx("span",{className:"font-mono text-label-sm text-foreground-muted",children:e.createdAt}),c.jsx("span",{"data-testid":"install-status-badge",className:Re("inline-block px-spacing-2 py-px text-label-sm uppercase",wP(e.status)),children:NP(e.status)})]}),c.jsx("div",{className:"text-label-sm font-mono text-foreground-muted-on-dark",children:e.targetRoot}),c.jsxs("div",{className:"flex items-center gap-spacing-3 mt-spacing-1 text-label-sm",children:[c.jsxs("span",{"data-testid":"applied-count",children:[c.jsx("span",{className:"font-mono",children:e.appliedCount})," applied"]}),c.jsx("span",{"data-testid":"deferred-placeholder",className:"text-foreground-muted",children:"— deferred"})]})]}),c.jsxs("div",{className:"flex items-center gap-spacing-2 shrink-0",children:[c.jsx(we,{variant:"tactical",size:"sm","data-testid":"expand-btn",onClick:()=>r(!s),children:s?"COLLAPSE":"EXPAND"}),e.status==="applied"&&c.jsx(we,{variant:"tactical",size:"sm","data-testid":"rollback-btn",onClick:()=>t(e.id),children:"ROLLBACK"})]})]}),s&&c.jsx(jP,{installId:e.id})]})}function CP(){var w;const{packageId:e}=uf({strict:!1}),{data:t,isPending:s,error:r}=yP(e),{data:i,isPending:l,error:d}=vP(e),f=SP(e),[m,h]=j.useState(null),[v,g]=j.useState(!1),y=N=>{h(N),g(!0)},b=()=>{m&&f.mutate(m,{onSuccess:()=>{g(!1),h(null)}})};if(s||l)return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"detail-loading",children:[c.jsx("div",{className:"h-8 w-48 shimmer mb-spacing-4"}),c.jsxs("div",{className:"card-dark p-spacing-6 mb-spacing-4",children:[c.jsx("div",{className:"h-6 w-64 shimmer-dark mb-spacing-3"}),c.jsx("div",{className:"h-4 w-full shimmer-dark"})]})]})});if(r)return c.jsx(lt,{children:c.jsx("div",{"data-testid":"detail-error",children:c.jsx("p",{className:"text-destructive",children:r.message})})});if(d)return c.jsx(lt,{children:c.jsx("div",{"data-testid":"installs-error",children:c.jsx("p",{className:"text-destructive",children:"Failed to load install history"})})});const S=i??[];return c.jsx(lt,{children:c.jsxs("div",{children:[t&&c.jsxs("div",{className:"card-dark p-spacing-6 mb-spacing-6","data-testid":"package-header",children:[c.jsxs("div",{className:"flex items-baseline justify-between mb-spacing-2",children:[c.jsxs("h2",{className:"text-headline-lg uppercase",children:[t.name," (Legacy)"]}),c.jsxs("span",{className:"text-label-md font-mono text-foreground-muted-on-dark",children:["v",t.version]})]}),c.jsxs("div",{className:"text-label-sm text-foreground-muted-on-dark mb-spacing-2",children:["SOURCE"," ",c.jsx("span",{className:"font-mono text-foreground-on-dark","data-testid":"package-source",children:t.sourceRef})]}),t.summary&&c.jsx("p",{className:"text-body-sm text-foreground-muted-on-dark",children:t.summary})]}),c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-4",children:"INSTALL HISTORY"}),S.length===0?c.jsx("div",{"data-testid":"empty-installs",className:"text-body-md text-foreground-muted",children:"No installs yet"}):c.jsx("div",{"data-testid":"install-list",children:S.map(N=>c.jsx(EP,{install:N,onRollback:y},N.id))}),c.jsx(Qd,{open:v,onOpenChange:N=>{f.isPending||(g(N),N||f.reset())},children:c.jsxs(Xl,{"data-testid":"rollback-dialog",onPointerDownOutside:N=>{f.isPending&&N.preventDefault()},onEscapeKeyDown:N=>{f.isPending&&N.preventDefault()},hideCloseButton:f.isPending,children:[c.jsxs(Zl,{children:[c.jsx(Jl,{className:"text-headline-md uppercase",children:"CONFIRM ROLLBACK"}),c.jsx(ec,{children:"This will roll back the install and restore previous file states. This action cannot be undone."})]}),f.isError&&c.jsxs("p",{className:"text-destructive text-label-sm","data-testid":"rollback-error",children:["Rollback failed: ",((w=f.error)==null?void 0:w.message)??"Unknown error"]}),c.jsxs(Wl,{children:[c.jsx(we,{variant:"ghost",onClick:()=>{f.reset(),g(!1)},"data-testid":"rollback-cancel",disabled:f.isPending,children:"CANCEL"}),c.jsx(we,{variant:"destructive",onClick:b,"data-testid":"rollback-confirm",disabled:f.isPending,children:f.isPending?"ROLLING BACK...":"ROLLBACK"})]})]})})]})})}function _P(e){switch(e){case"installed":return"bg-success";case"missing":return"bg-destructive";case"unsupported":return"bg-warning";case"unknown":return"bg-warning";default:return"bg-foreground-muted"}}function RP(e){switch(e){case"installed":return"OK";case"missing":return"MISSING";case"unsupported":return"MANUAL";case"unknown":return"UNKNOWN";default:return e.toUpperCase()}}function TP({results:e}){return e.length===0?c.jsx("div",{className:"text-body-sm text-foreground-muted","data-testid":"no-requirements",children:"No requirements declared."}):c.jsx("div",{className:"space-y-spacing-1","data-testid":"requirements-panel",children:e.map(t=>c.jsxs("div",{"data-testid":"requirement-row",className:"flex items-center gap-spacing-3 py-spacing-1 text-label-sm font-mono",children:[c.jsx("span",{"data-testid":"requirement-dot",className:Re("w-2 h-2 shrink-0",_P(t.status))}),c.jsx("span",{"data-testid":"requirement-status",className:"w-16 uppercase",children:RP(t.status)}),c.jsx("span",{className:"text-foreground-muted w-24",children:t.kind}),c.jsx("span",{children:t.name}),t.detectedPath&&c.jsx("span",{className:"text-foreground-muted ml-auto truncate max-w-[200px]",children:t.detectedPath})]},`${t.kind}:${t.name}`))})}function k2(e,t){var r,i;const s=((r=e.stages)==null?void 0:r.flatMap(l=>{const d=l.detail;if(!d)return[];const f=[];return Array.isArray(d.errors)&&f.push(...d.errors.filter(m=>typeof m=="string")),typeof d.error=="string"&&f.push(d.error),f}))??[];return((i=e.errors)==null?void 0:i.find(l=>typeof l=="string"))??s[0]??e.error??`HTTP ${t}`}function AP(){return Ht({mutationFn:async({sourceRef:e})=>{const t=await fetch("/api/bootstrap/plan",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:e})});if(!t.ok){const s=await t.json().catch(()=>({})),r=new Error(k2(s,t.status));throw r.data=s,r}return t.json()}})}function MP(){const e=Tt();return Ht({mutationFn:async({sourceRef:t,autoApprove:s,approvedActionKeys:r})=>{const i=await fetch("/api/bootstrap/apply",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourceRef:t,autoApprove:s,approvedActionKeys:r})}),l=await i.json();if(!i.ok){const d=new Error(k2(l,i.status));throw d.data=l,d}return l},onSuccess:()=>{e.invalidateQueries({queryKey:["rigs","summary"]})}})}const kP=["ENTER","PLAN","REVIEW","APPLY"],OP=kP.map((e,t)=>({num:t+1,label:e}));function DP(e){switch(e){case"enter":return 1;case"planning":return 2;case"planned":return 3;case"applying":return 4;case"done":case"error":return 4;default:return 1}}function LP(){const e=Wt(),{bootstrapSourceRef:t,setBootstrapSourceRef:s}=Co(),[r,i]=j.useState("enter"),[l,d]=j.useState(()=>t),[f,m]=j.useState(null),[h,v]=j.useState(new Set),[g,y]=j.useState(!1),[b,S]=j.useState(null),w=AP(),N=MP();j.useEffect(()=>{s(l)},[s,l]);const E=async()=>{if(l.trim()){i("planning");try{const Y=await w.mutateAsync({sourceRef:l.trim()});m(Y),v(new Set(Y.actionKeys??[])),i("planned")}catch(Y){S(Y.message),i("error")}}},T=async()=>{i("applying");try{const Y=await N.mutateAsync({sourceRef:l.trim(),autoApprove:g,approvedActionKeys:g?void 0:[...h]});m(Y),i("done")}catch(Y){S(Y.message),i("error")}},_=()=>{i("enter"),d(""),m(null),v(new Set),y(!1),S(null),w.reset(),N.reset()},R=f==null?void 0:f.stages.find(Y=>Y.stage==="probe_requirements"),L=R==null?void 0:R.detail,I=(L==null?void 0:L.results)??[],P=f==null?void 0:f.stages.find(Y=>Y.stage==="build_install_plan"),A=P==null?void 0:P.detail,M=(A==null?void 0:A.actions)??[],q=(P==null?void 0:P.status)==="blocked",Q=M.some(Y=>Y.classification!=="manual_only"&&Y.commandPreview)&&h.size===0&&!g;return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"bootstrap-wizard",className:"space-y-8",children:[c.jsx(Fn,{eyebrow:"Bootstrap",title:"Bootstrap",description:"Plan environment requirements, approve install actions, then import the rig into a running topology."}),c.jsx(A2,{"data-testid":"step-indicator",steps:OP,currentStep:DP(r)}),r==="enter"&&c.jsx(zn,{title:"Source",description:"Provide a rig spec or bundle path. Bootstrap will inspect requirements before it imports anything.",children:c.jsxs("div",{"data-testid":"step-enter",children:[c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"SPEC OR BUNDLE PATH"}),c.jsx(m0,{"data-testid":"spec-input",type:"text",value:l,onChange:Y=>d(Y.target.value),placeholder:"/path/to/rig.yaml or /path/to/bundle.rigbundle",className:"font-mono text-body-md"}),c.jsxs("p",{className:"text-label-sm text-foreground-muted mt-spacing-1",children:["Accepts .yaml rig specs or .rigbundle archives."," ",c.jsx("span",{role:"link",tabIndex:0,className:"text-primary cursor-pointer","data-testid":"inspect-link",onClick:()=>e({to:"/bundles/inspect"}),onKeyDown:Y=>{Y.key==="Enter"&&e({to:"/bundles/inspect"})},children:"Inspect a bundle first →"})]}),c.jsx("div",{className:"mt-spacing-4",children:c.jsx(we,{variant:"tactical",onClick:E,disabled:!l.trim(),"data-testid":"plan-btn",children:"PLAN"})})]})}),r==="planning"&&c.jsx("div",{"data-testid":"step-planning",className:"text-body-md text-foreground-muted",children:"Planning..."}),r==="planned"&&f&&c.jsx(zn,{title:"Plan Review",description:"Review requirement probe results and approve the install actions that bootstrap should execute.",children:c.jsxs("div",{"data-testid":"step-planned",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"STAGES"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-6","data-testid":"stage-list",children:f.stages.map(Y=>c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono","data-testid":"stage-row",children:[c.jsx("span",{className:Y.status==="ok"?"text-success":Y.status==="blocked"?"text-warning":"text-foreground-muted",children:Y.status.toUpperCase()}),c.jsx("span",{children:Y.stage})]},Y.stage))}),I.length>0&&c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"REQUIREMENTS"}),c.jsx("div",{className:"mb-spacing-6",children:c.jsx(TP,{results:I})})]}),M.length>0&&c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"ACTIONS"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4",children:M.map(Y=>c.jsxs("label",{className:"flex items-center gap-spacing-3 text-label-sm font-mono cursor-pointer",children:[c.jsx("input",{type:"checkbox",checked:g||h.has(Y.key),disabled:g||Y.classification==="manual_only",onChange:B=>{const V=new Set(h);B.target.checked?V.add(Y.key):V.delete(Y.key),v(V)}}),c.jsx("span",{className:Y.classification==="manual_only"?"text-warning":"",children:Y.requirementName}),Y.commandPreview&&c.jsx("span",{className:"text-foreground-muted",children:Y.commandPreview})]},Y.key))}),c.jsxs("label",{className:"flex items-center gap-spacing-2 text-label-sm mb-spacing-4",children:[c.jsx("input",{type:"checkbox",checked:g,onChange:Y=>y(Y.target.checked)}),"Auto-approve all trusted actions"]})]}),q&&c.jsx("div",{className:"text-warning text-label-sm mb-spacing-4","data-testid":"blocked-warning",children:"Manual requirements must be resolved before bootstrap can proceed."}),f.warnings.length>0&&c.jsx("div",{className:"mb-spacing-4",children:f.warnings.map((Y,B)=>c.jsx("div",{className:"text-warning text-label-sm",children:Y},B))}),c.jsx(we,{variant:"tactical",onClick:T,disabled:q||Q,title:q?"Manual requirements must be resolved":Q?"Select actions to approve":void 0,"data-testid":"apply-btn",children:"APPLY"})]})}),r==="applying"&&f&&c.jsx(zn,{title:"Applying",description:"Bootstrap is executing the approved actions and importing the rig.",children:c.jsxs("div",{"data-testid":"step-applying",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"APPLYING"}),c.jsxs("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"applying-checklist",children:[f.stages.map(Y=>c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:Y.stage})]},Y.stage)),c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:"execute_external_installs"})]}),c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:"install_packages"})]}),c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono",children:[c.jsx("span",{className:"text-foreground-muted",children:"○"}),c.jsx("span",{children:"import_rig"})]})]}),c.jsx("p",{className:"text-body-sm text-foreground-muted",children:"Bootstrapping..."})]})}),r==="done"&&f&&c.jsx(zn,{title:"Result",description:"Bootstrap finished and returned the managed rig identity.",children:c.jsxs("div",{"data-testid":"step-done",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:f.status==="completed"?"BOOTSTRAP COMPLETE":"BOOTSTRAP PARTIAL"}),c.jsxs("div",{className:"text-label-sm font-mono space-y-spacing-1 mb-spacing-4",children:[c.jsxs("div",{children:["Status: ",c.jsx("span",{className:f.status==="completed"?"text-success":"text-warning",children:f.status.toUpperCase()})]}),f.rigId&&c.jsxs("div",{"data-testid":"result-rig-id",children:["Rig: ",f.rigId]})]}),f.rigId&&c.jsx(we,{variant:"tactical","data-testid":"view-rig-btn",onClick:()=>e({to:"/rigs/$rigId",params:{rigId:f.rigId}}),children:"VIEW RIG"})]})}),r==="error"&&c.jsx(zn,{title:"Bootstrap Error",description:"Bootstrap could not complete. Fix the issue and retry the plan.",children:c.jsxs("div",{"data-testid":"step-error",children:[c.jsx("p",{className:"text-destructive text-body-md mb-spacing-4",children:b}),c.jsx(we,{variant:"tactical",onClick:_,"data-testid":"try-again-btn",children:"TRY AGAIN"})]})})]})})}function zP(){const{currentAgentDraft:e,selectedAgentDraft:t,saveAgentDraft:s,rememberAgentDraft:r,clearSelectedAgentDraft:i}=Co(),[l,d]=j.useState(()=>(t==null?void 0:t.yaml)??(e==null?void 0:e.yaml)??""),[f,m]=j.useState("idle"),[h,v]=j.useState([]);j.useEffect(()=>{s(l)},[s,l]),j.useEffect(()=>{t&&(d(t.yaml),i())},[i,t]);const g=async()=>{r(l),m("pending"),v([]);try{const y=await fetch("/api/agents/validate",{method:"POST",headers:{"Content-Type":"text/yaml"},body:l}),b=await y.json().catch(()=>({}));if(y.ok&&b.valid){m("valid");return}v(b.errors??["Validation failed"]),m("invalid")}catch{v(["Validation request failed"]),m("error")}};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"agent-spec-validate-flow",className:"space-y-8",children:[c.jsx(Fn,{eyebrow:"Agent Spec Validation",title:"VALIDATE AGENT",description:"Check an AgentSpec before you use it in a rig."}),c.jsxs(zn,{title:"Agent YAML",description:"Paste or refine an AgentSpec draft, then validate it against the daemon contract.",children:[c.jsx(p0,{"data-testid":"agent-spec-yaml-input",value:l,onChange:y=>d(y.target.value),placeholder:"Paste agent.yaml here...",rows:16,className:"bg-background font-mono text-body-sm"}),c.jsx("div",{className:"flex flex-wrap gap-2",children:c.jsx(we,{variant:"tactical","data-testid":"agent-spec-validate-btn",onClick:g,disabled:!l.trim()||f==="pending",children:f==="pending"?"VALIDATING...":"VALIDATE AGENTSPEC"})}),f==="valid"&&c.jsx(Kt,{className:"mt-spacing-1","data-testid":"agent-spec-valid",children:c.jsx(Xt,{className:"text-primary",children:"AgentSpec valid."})}),(f==="invalid"||f==="error")&&c.jsx(Kt,{className:"mt-spacing-1","data-testid":"agent-spec-invalid",children:c.jsx(Xt,{children:c.jsx("ul",{className:"list-disc pl-5",children:h.map(y=>c.jsx("li",{children:y},y))})})})]})]})})}async function PP(e,t="draft"){var r;const s=await fetch("/api/specs/review/rig",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({yaml:e,sourceState:t})});if(!s.ok){const i=await s.json().catch(()=>({}));throw new Error(((r=i.errors)==null?void 0:r.join("; "))??`HTTP ${s.status}`)}return s.json()}async function IP(e,t="draft"){var r;const s=await fetch("/api/specs/review/agent",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({yaml:e,sourceState:t})});if(!s.ok){const i=await s.json().catch(()=>({}));throw new Error(((r=i.errors)==null?void 0:r.join("; "))??`HTTP ${s.status}`)}return s.json()}function O2(e){let t=0;for(let s=0;s<e.length;s++)t=(t<<5)-t+e.charCodeAt(s)|0;return t}function BP(e,t="draft"){return Rt({queryKey:["spec-review","rig",e?O2(e):null,t],queryFn:()=>PP(e,t),enabled:!!e})}function HP(e,t="draft"){return Rt({queryKey:["spec-review","agent",e?O2(e):null,t],queryFn:()=>IP(e,t),enabled:!!e})}const UP=160,$P=48,kS=200,qP=100;function VP(e){switch(e){case"claude-code":return"#d4c4a8";case"codex":return"#b8c9d4";case"terminal":return"#c4c4c4";default:return"#e0ddd4"}}function GP(e){const t=new Map,s=[];for(const l of e)l.pod?(t.has(l.pod)||t.set(l.pod,[]),t.get(l.pod).push(l)):s.push(l);const r=[];let i=0;for(const[,l]of t)l.forEach((d,f)=>{r.push({id:d.id,x:f*kS,y:i})}),i+=qP;return s.forEach((l,d)=>{r.push({id:l.id,x:d*kS,y:i})}),r}function YP({graph:e,testId:t}){const s=e??{nodes:[],edges:[]},{nodes:r,edges:i}=j.useMemo(()=>{const l=GP(s.nodes),d=new Map(l.map(h=>[h.id,h])),f=s.nodes.map(h=>{const v=d.get(h.id)??{x:0,y:0};return{id:h.id,type:"default",position:{x:v.x,y:v.y},data:{label:`${h.pod?`${h.pod} / `:""}${h.label}`},style:{backgroundColor:VP(h.runtime),border:"1px solid #8a8577",fontSize:11,fontFamily:"monospace",width:UP,height:$P}}}),m=s.edges.map((h,v)=>({id:`e-${v}`,source:h.source,target:h.target,label:h.kind,labelStyle:{fontSize:9,fontFamily:"monospace"},style:{strokeDasharray:"4 4",stroke:"#8a8577"}}));return{nodes:f,edges:m}},[s]);return c.jsx("div",{"data-testid":t??"spec-topology-preview",className:"w-full h-[400px] bg-stone-50 border border-stone-200",children:c.jsxs(S2,{nodes:r,edges:i,fitView:!0,nodesDraggable:!1,nodesConnectable:!1,elementsSelectable:!1,proOptions:{hideAttribution:!0},children:[c.jsx(i6,{gap:20,size:.5,color:"#d4d0c8"}),c.jsx(j2,{showInteractive:!1})]})})}function D2({review:e,yaml:t,testIdPrefix:s="",yamlTestId:r,showEnvironmentTab:i,onMemberClick:l}){var S,w,N;const d=i&&!!(e!=null&&e.services),f=d?["topology","configuration","environment","yaml"]:["topology","configuration","yaml"],[m,h]=j.useState("topology"),v=(e==null?void 0:e.pods)??[],g=(e==null?void 0:e.nodes)??[],y=(e==null?void 0:e.edges)??[],b=s?`${s}-`:"";return c.jsxs(c.Fragment,{children:[c.jsx("div",{className:"flex gap-1 border-b border-stone-200",children:f.map(E=>c.jsx("button",{"data-testid":`${b}tab-${E}`,onClick:()=>h(E),className:`px-3 py-1.5 font-mono text-[10px] uppercase tracking-wider transition-colors ${m===E?"border-b-2 border-stone-900 text-stone-900 font-bold":"text-stone-500 hover:text-stone-700"}`,children:E},E))}),m==="topology"&&e&&c.jsx(YP,{graph:e.graph,testId:`${b}topology-preview`}),m==="configuration"&&e&&c.jsxs("div",{"data-testid":`${b}config-tables`,className:"space-y-4",children:[e.format==="pod_aware"&&v.map(E=>c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:E.label??E.id}),c.jsxs("table",{className:"w-full font-mono text-[10px]",children:[c.jsx("thead",{children:c.jsxs("tr",{className:"border-b border-stone-200 text-stone-500",children:[c.jsx("th",{className:"text-left py-1",children:"Member"}),c.jsx("th",{className:"text-left py-1",children:"Agent Ref"}),c.jsx("th",{className:"text-left py-1",children:"Runtime"}),c.jsx("th",{className:"text-left py-1",children:"Profile"})]})}),c.jsx("tbody",{children:E.members.map(T=>c.jsxs("tr",{className:"border-b border-stone-100",children:[c.jsx("td",{className:"py-1",children:c.jsxs("div",{className:"flex items-center gap-2",children:[c.jsx("span",{children:T.id}),l&&c.jsx(we,{variant:"outline",size:"sm","data-testid":`${b}member-open-agent-${E.id}-${T.id}`,className:"h-6 px-2 font-mono text-[9px] uppercase tracking-[0.12em]",onClick:()=>l(E.id,T),children:"Agent Spec"})]})}),c.jsx("td",{className:"py-1 text-stone-600",children:T.agentRef}),c.jsx("td",{className:"py-1",children:T.runtime}),c.jsx("td",{className:"py-1 text-stone-500",children:T.profile??"—"})]},T.id))})]})]},E.id)),e.format==="legacy"&&g.length>0&&c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Nodes"}),c.jsxs("table",{className:"w-full font-mono text-[10px]",children:[c.jsx("thead",{children:c.jsxs("tr",{className:"border-b border-stone-200 text-stone-500",children:[c.jsx("th",{className:"text-left py-1",children:"ID"}),c.jsx("th",{className:"text-left py-1",children:"Runtime"}),c.jsx("th",{className:"text-left py-1",children:"Role"})]})}),c.jsx("tbody",{children:g.map(E=>c.jsxs("tr",{className:"border-b border-stone-100",children:[c.jsx("td",{className:"py-1",children:E.id}),c.jsx("td",{className:"py-1",children:E.runtime}),c.jsx("td",{className:"py-1 text-stone-500",children:E.role??"—"})]},E.id))})]})]}),y.length>0&&c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:e.format==="pod_aware"?"Cross-Pod Edges":"Edges"}),c.jsxs("table",{className:"w-full font-mono text-[10px]",children:[c.jsx("thead",{children:c.jsxs("tr",{className:"border-b border-stone-200 text-stone-500",children:[c.jsx("th",{className:"text-left py-1",children:"From"}),c.jsx("th",{className:"text-left py-1",children:"To"}),c.jsx("th",{className:"text-left py-1",children:"Kind"})]})}),c.jsx("tbody",{children:y.map((E,T)=>c.jsxs("tr",{className:"border-b border-stone-100",children:[c.jsx("td",{className:"py-1",children:E.from}),c.jsx("td",{className:"py-1",children:E.to}),c.jsx("td",{className:"py-1 text-stone-500",children:E.kind})]},T))})]})]})]}),m==="environment"&&d&&(e==null?void 0:e.services)&&c.jsxs("div",{className:"space-y-4","data-testid":`${b}env-details`,children:[c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:"Services"}),(S=e.services.composePreview)==null?void 0:S.services.map(E=>c.jsxs("div",{className:"flex items-center justify-between border border-stone-200 px-3 py-2",children:[c.jsx("span",{className:"font-mono text-[11px] text-stone-800",children:E.name}),E.image&&c.jsx("span",{className:"font-mono text-[9px] text-stone-500",children:E.image})]},E.name))]}),e.services.waitFor.length>0&&c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:"Health Gates"}),e.services.waitFor.map((E,T)=>c.jsxs("div",{className:"font-mono text-[10px] text-stone-600 border border-stone-200 px-3 py-2",children:[E.url&&c.jsx("span",{children:E.url}),E.tcp&&c.jsxs("span",{children:["tcp: ",E.tcp]}),E.service&&c.jsxs("span",{children:["service: ",E.service,E.condition?` (${E.condition})`:""]})]},T))]}),e.services.surfaces&&c.jsxs("div",{className:"space-y-2",children:[c.jsx("div",{className:"font-mono text-[8px] uppercase tracking-[0.16em] text-stone-500",children:"Surfaces"}),(w=e.services.surfaces.urls)==null?void 0:w.map(E=>c.jsxs("div",{className:"flex items-center justify-between border border-stone-200 px-3 py-2",children:[c.jsx("span",{className:"text-[11px] text-stone-800",children:E.name}),c.jsx("span",{className:"font-mono text-[9px] text-stone-500",children:E.url})]},E.name)),(N=e.services.surfaces.commands)==null?void 0:N.map(E=>c.jsxs("div",{className:"flex items-center justify-between border border-stone-200 px-3 py-2",children:[c.jsx("span",{className:"text-[11px] text-stone-800",children:E.name}),c.jsx("span",{className:"font-mono text-[9px] text-stone-500",children:E.command})]},E.name))]})]}),m==="yaml"&&c.jsx(M2,{title:"YAML Preview",testId:r??`${b}spec-yaml`,children:t})]})}function QP(){const e=Wt(),{selectedRigDraft:t,currentRigDraft:s}=Co(),r=t??s,{data:i,isLoading:l,error:d}=BP((r==null?void 0:r.yaml)??null),f=(i==null?void 0:i.pods)??[],m=(i==null?void 0:i.nodes)??[],h=(i==null?void 0:i.edges)??[];return r?c.jsx(lt,{children:c.jsxs("div",{"data-testid":"rig-spec-review",className:"space-y-6",children:[c.jsx(Fn,{eyebrow:"Rig Spec Review",title:(i==null?void 0:i.name)??r.label,description:(i==null?void 0:i.summary)??"Review the spec structure before import or bootstrap.",actions:c.jsxs(c.Fragment,{children:[c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/import"}),children:"Open In Import"}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/bootstrap"}),children:"Bootstrap"})]})}),i&&c.jsxs(Rf,{children:[c.jsx(kt,{label:"Format",value:i.format==="pod_aware"?"Pod-Aware":"Legacy",testId:"rig-spec-summary-format"}),c.jsx(kt,{label:i.format==="pod_aware"?"Pods":"Nodes",value:i.format==="pod_aware"?f.length:m.length,testId:"rig-spec-summary-pods"}),c.jsx(kt,{label:"Members",value:i.format==="pod_aware"?f.reduce((v,g)=>v+g.members.length,0):m.length,testId:"rig-spec-summary-members"}),c.jsx(kt,{label:"Edges",value:h.length+(i.format==="pod_aware"?f.reduce((v,g)=>{var y;return v+(((y=g.edges)==null?void 0:y.length)??0)},0):0),testId:"rig-spec-summary-edges"})]}),l&&c.jsx("div",{className:"font-mono text-[10px] text-stone-400",children:"Loading review..."}),d&&c.jsx("div",{className:"p-3 bg-red-50 border border-red-200 font-mono text-[10px] text-red-700",children:d.message}),c.jsx(D2,{review:i,yaml:r.yaml,yamlTestId:"rig-spec-yaml"})]})}):c.jsx(lt,{children:c.jsxs("div",{"data-testid":"rig-spec-review-empty",className:"space-y-5",children:[c.jsx(Fn,{eyebrow:"Rig Spec Review",title:"No RigSpec Selected",description:"Choose a current or recent rig draft from the Specs drawer to review it here before you import or bootstrap it."}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/import"}),children:"Open Import"})]})})}function v0({review:e,yaml:t,testIdPrefix:s="agent"}){const r=(e==null?void 0:e.profiles)??[],i=(e==null?void 0:e.resources)??{skills:[],guidance:[],hooks:[]},l=(e==null?void 0:e.startup)??{files:[],actions:[]};return c.jsxs(c.Fragment,{children:[r.length>0&&c.jsxs("div",{"data-testid":`${s}-profiles-section`,className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Profiles"}),c.jsx("div",{className:"space-y-1",children:r.map(d=>c.jsxs("div",{className:"font-mono text-[10px] flex justify-between",children:[c.jsx("span",{className:"font-bold",children:d.name}),d.description&&c.jsx("span",{className:"text-stone-500",children:d.description})]},d.name))})]}),c.jsxs("div",{"data-testid":`${s}-resources-section`,className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Resources"}),c.jsxs("div",{className:"space-y-2 font-mono text-[10px]",children:[i.skills.length>0&&c.jsxs("div",{children:[c.jsx("span",{className:"text-stone-500",children:"Skills:"})," ",i.skills.map((d,f)=>c.jsx("span",{className:"inline-block bg-stone-100 px-1.5 py-0.5 mr-1 mb-0.5",children:d},f))]}),i.guidance.length>0&&c.jsxs("div",{children:[c.jsx("span",{className:"text-stone-500",children:"Guidance:"})," ",i.guidance.map((d,f)=>c.jsx("span",{className:"inline-block bg-stone-100 px-1.5 py-0.5 mr-1 mb-0.5",children:d},f))]}),i.hooks.length>0&&c.jsxs("div",{children:[c.jsx("span",{className:"text-stone-500",children:"Hooks:"})," ",i.hooks.join(", ")]})]})]}),(l.files.length>0||l.actions.length>0)&&c.jsxs("div",{"data-testid":`${s}-startup-section`,className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Startup"}),l.files.length>0&&c.jsxs("div",{className:"mb-2",children:[c.jsx("div",{className:"font-mono text-[9px] text-stone-500 uppercase mb-1",children:"Files"}),l.files.map((d,f)=>c.jsxs("div",{className:"font-mono text-[10px]",children:[d.path," ",d.required&&c.jsx("span",{className:"text-red-500 text-[8px]",children:"REQUIRED"})]},f))]}),l.actions.length>0&&c.jsxs("div",{children:[c.jsx("div",{className:"font-mono text-[9px] text-stone-500 uppercase mb-1",children:"Actions"}),l.actions.map((d,f)=>c.jsxs("div",{className:"font-mono text-[10px]",children:[c.jsxs("span",{className:"text-stone-500",children:[d.type,":"]})," ",d.value]},f))]})]}),c.jsx(M2,{title:"YAML Preview",testId:`${s}-spec-yaml`,children:t})]})}function FP(){const e=Wt(),{selectedAgentDraft:t,currentAgentDraft:s}=Co(),r=t??s,{data:i,isLoading:l,error:d}=HP((r==null?void 0:r.yaml)??null);return r?c.jsx(lt,{children:c.jsxs("div",{"data-testid":"agent-spec-review",className:"space-y-6",children:[c.jsx(Fn,{eyebrow:"Agent Spec Review",title:(i==null?void 0:i.name)??r.label,description:(i==null?void 0:i.description)??"Review the agent spec structure before validation.",actions:c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/agents/validate"}),children:"Open In Validate"})}),i&&c.jsxs(Rf,{children:[c.jsx(kt,{label:"Format",value:"AgentSpec",testId:"agent-spec-summary-format"}),c.jsx(kt,{label:"Version",value:i.version,testId:"agent-spec-summary-version"}),c.jsx(kt,{label:"Profiles",value:(i.profiles??[]).length,testId:"agent-spec-summary-profiles"}),c.jsx(kt,{label:"Skills",value:(i.resources??{skills:[]}).skills.length,testId:"agent-spec-summary-skills"})]}),l&&c.jsx("div",{className:"font-mono text-[10px] text-stone-400",children:"Loading review..."}),d&&c.jsx("div",{className:"p-3 bg-red-50 border border-red-200 font-mono text-[10px] text-red-700",children:d.message}),c.jsx(v0,{review:i,yaml:r.yaml,testIdPrefix:"agent"})]})}):c.jsx(lt,{children:c.jsxs("div",{"data-testid":"agent-spec-review-empty",className:"space-y-5",children:[c.jsx(Fn,{eyebrow:"Agent Spec Review",title:"No AgentSpec Selected",description:"Choose a current or recent agent draft from the Specs drawer to review it here before you validate it."}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>e({to:"/agents/validate"}),children:"Open Validate"})]})})}function KP(){return Ht({mutationFn:async({bundlePath:e})=>{const t=await fetch("/api/bundles/inspect",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({bundlePath:e})}),s=await t.json();if(s.error)throw new Error(s.error);if(!t.ok)throw new Error(`HTTP ${t.status}`);return s}})}function XP(){return Ht({mutationFn:async({bundlePath:e,plan:t,autoApprove:s,targetRoot:r})=>{const i=await fetch("/api/bundles/install",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({bundlePath:e,plan:t,autoApprove:s,targetRoot:r})}),l=await i.json();if(!i.ok)throw new Error(l.error??`HTTP ${i.status}`);return l}})}function ZP(){var l,d;const[e,t]=j.useState(""),s=KP(),r=()=>{e.trim()&&s.mutate({bundlePath:e.trim()})},i=s.data;return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"bundle-inspector",children:[c.jsx("h2",{className:"text-headline-lg uppercase mb-spacing-4",children:"INSPECT BUNDLE"}),c.jsxs("div",{className:"mb-spacing-4",children:[c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"BUNDLE PATH"}),c.jsx("input",{"data-testid":"bundle-path-input",type:"text",value:e,onChange:f=>t(f.target.value),placeholder:"/path/to/my-rig.rigbundle",className:"w-full bg-transparent border-b border-foreground/20 py-spacing-2 text-body-md font-mono focus:outline-none focus:border-primary"}),c.jsx(we,{variant:"tactical",onClick:r,disabled:!e.trim()||s.isPending,className:"mt-spacing-3","data-testid":"inspect-btn",children:s.isPending?"INSPECTING...":"INSPECT"})]}),s.isError&&c.jsx("div",{className:"text-destructive text-body-md mb-spacing-4","data-testid":"inspect-error",children:s.error.message}),i&&c.jsxs("div",{"data-testid":"inspect-result",children:[c.jsxs("div",{className:"card-dark p-spacing-4 mb-spacing-4","data-testid":"manifest-summary",children:[c.jsxs("div",{className:"flex items-center gap-spacing-2 mb-spacing-2",children:[c.jsx("h3",{className:"text-headline-md uppercase",children:i.manifest.name}),c.jsxs("span",{className:"text-label-sm font-mono px-spacing-2 py-px bg-foreground/10","data-testid":"schema-badge",children:["v",i.manifest.schemaVersion??1]})]}),c.jsxs("div",{className:"text-label-sm font-mono text-foreground-muted-on-dark",children:["v",i.manifest.version]}),c.jsxs("div",{className:"text-label-sm font-mono text-foreground-muted-on-dark",children:["Spec: ",i.manifest.rigSpec]}),c.jsxs("div",{className:"mt-spacing-2 flex gap-spacing-3",children:[c.jsxs("span",{className:Re("text-label-sm",i.digestValid?"text-success":"text-destructive"),children:["DIGEST: ",i.digestValid?"VALID":"INVALID"]}),c.jsxs("span",{className:Re("text-label-sm",i.integrityResult.passed?"text-success":"text-destructive"),"data-testid":"integrity-status",children:["INTEGRITY: ",i.integrityResult.passed?"PASS":"FAIL"]})]})]}),i.manifest.schemaVersion===2&&i.manifest.agents?c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"AGENTS"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"agent-list",children:i.manifest.agents.map(f=>c.jsxs("div",{className:"text-label-sm font-mono","data-testid":"agent-entry",children:[f.name," v",f.version," — ",f.path]},f.name))})]}):c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"PACKAGES"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"package-list",children:(i.manifest.packages??[]).map(f=>c.jsxs("div",{className:"text-label-sm font-mono","data-testid":"package-entry",children:[f.name," v",f.version," — ",f.path]},f.name))})]}),i.integrityResult&&c.jsxs(c.Fragment,{children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"FILE INTEGRITY"}),c.jsxs("div",{className:"space-y-spacing-1 mb-spacing-4","data-testid":"file-integrity",children:[Object.keys((i.manifest.packages??i.manifest.agents??[]).length>0?((d=(l=i.manifest)==null?void 0:l.integrity)==null?void 0:d.files)??{}:{}).map(f=>{const m=i.integrityResult.mismatches.includes(f),h=i.integrityResult.missing.includes(f),v=m?"MISMATCH":h?"MISSING":"OK";return c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono","data-testid":"file-row",children:[c.jsx("span",{className:Re("w-2 h-2",v==="OK"?"bg-success":"bg-destructive"),"data-testid":"file-dot"}),c.jsx("span",{children:f}),c.jsx("span",{className:"text-foreground-muted ml-auto",children:v})]},f)}),i.integrityResult.extra.map(f=>c.jsxs("div",{className:"flex items-center gap-spacing-3 text-label-sm font-mono","data-testid":"file-row",children:[c.jsx("span",{className:"w-2 h-2 bg-warning","data-testid":"file-dot"}),c.jsx("span",{children:f}),c.jsx("span",{className:"text-foreground-muted ml-auto",children:"EXTRA"})]},f))]})]}),c.jsx(we,{variant:"tactical","data-testid":"install-btn",onClick:()=>window.location.href=`/bundles/install?bundlePath=${encodeURIComponent(e)}`,children:"INSTALL THIS BUNDLE"})]})]})})}function WP(){const e=Wt(),[t,s]=j.useState("enter"),r=typeof window<"u"?new URLSearchParams(window.location.search):null,[i,l]=j.useState((r==null?void 0:r.get("bundlePath"))??""),[d,f]=j.useState(""),[m,h]=j.useState(null),[v,g]=j.useState(null),y=XP(),b=async()=>{if(i.trim()){s("planning");try{const w=await y.mutateAsync({bundlePath:i.trim(),plan:!0});h(w),s("planned")}catch(w){g(w.message),s("error")}}},S=async()=>{if(d.trim()){s("applying");try{const w=await y.mutateAsync({bundlePath:i.trim(),autoApprove:!0,targetRoot:d.trim()});h(w),s("done")}catch(w){g(w.message),s("error")}}};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"bundle-install-flow",children:[c.jsx("h2",{className:"text-headline-lg uppercase mb-spacing-4",children:"INSTALL BUNDLE"}),t==="enter"&&c.jsxs("div",{"data-testid":"step-enter",children:[c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"BUNDLE PATH"}),c.jsx("input",{"data-testid":"bundle-input",type:"text",value:i,onChange:w=>l(w.target.value),placeholder:"/path/to/my-rig.rigbundle",className:"w-full bg-transparent border-b border-foreground/20 py-spacing-2 text-body-md font-mono focus:outline-none focus:border-primary mb-spacing-4"}),c.jsx("label",{className:"text-label-md uppercase block mb-spacing-2",children:"TARGET ROOT"}),c.jsx("input",{"data-testid":"target-input",type:"text",value:d,onChange:w=>f(w.target.value),placeholder:"/path/to/target/project",className:"w-full bg-transparent border-b border-foreground/20 py-spacing-2 text-body-md font-mono focus:outline-none focus:border-primary mb-spacing-4"}),c.jsx(we,{variant:"tactical",onClick:b,disabled:!i.trim(),"data-testid":"plan-btn",children:"PLAN"})]}),t==="planning"&&c.jsx("div",{"data-testid":"step-planning",className:"text-foreground-muted",children:"Planning..."}),t==="planned"&&m&&c.jsxs("div",{"data-testid":"step-planned",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"PLAN"}),c.jsx("div",{className:"space-y-spacing-1 mb-spacing-4",children:m.stages.map(w=>c.jsxs("div",{className:"text-label-sm font-mono",children:[c.jsx("span",{className:w.status==="ok"?"text-success":"text-foreground-muted",children:w.status.toUpperCase()})," ",w.stage]},w.stage))}),c.jsx(we,{variant:"tactical",onClick:S,disabled:!d.trim(),"data-testid":"apply-btn",children:"APPLY"})]}),t==="applying"&&c.jsx("div",{"data-testid":"step-applying",className:"text-foreground-muted",children:"Installing..."}),t==="done"&&m&&c.jsxs("div",{"data-testid":"step-done",children:[c.jsx("h3",{className:"text-headline-md uppercase mb-spacing-3",children:"COMPLETE"}),c.jsxs("div",{className:"text-label-sm font-mono",children:["Status: ",c.jsx("span",{className:"text-success",children:m.status.toUpperCase()}),m.stages.some(w=>{var N;return((N=w.detail)==null?void 0:N.source)==="pod_bundle"})?c.jsx("span",{className:"ml-spacing-2 text-primary","data-testid":"bundle-type-label",children:"Pod-aware bundle"}):c.jsx("span",{className:"ml-spacing-2 text-foreground-muted","data-testid":"bundle-type-label",children:"Legacy bundle"})]}),m.rigId&&c.jsxs("div",{className:"text-label-sm font-mono","data-testid":"result-rig-id",children:["Rig: ",m.rigId]}),m.rigId&&c.jsx(we,{variant:"tactical",className:"mt-spacing-3",onClick:()=>e({to:"/rigs/$rigId",params:{rigId:m.rigId}}),children:"VIEW RIG"})]}),t==="error"&&c.jsxs("div",{"data-testid":"step-error",children:[c.jsx("p",{className:"text-destructive text-body-md mb-spacing-4",children:v}),c.jsx(we,{variant:"tactical",onClick:()=>{s("enter"),g(null),y.reset()},"data-testid":"try-again-btn",children:"TRY AGAIN"})]})]})})}function JP(e){const t=[`Install and launch the "${e.name}" managed app using OpenRig.`,""];return e.summary&&t.push(`About: ${e.summary}`,""),t.push(`Source: ${e.sourcePath}`,"","Steps:",`1. Run: rig up ${e.name}`,"2. Monitor: rig ps --nodes","3. Check env: rig env status <rig-name>"),t.join(`
223
223
  `)}function L2({sourcePath:e,sourceState:t}){return c.jsxs("div",{className:"font-mono text-[9px] text-stone-500","data-testid":"library-provenance",children:["Source: ",e," · ",t]})}function eI({review:e}){const t=Wt(),s=e.profiles??[],r=e.resources??{skills:[]};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"library-review-agent",className:"space-y-6",children:[c.jsx(Fn,{eyebrow:"Library — Agent Spec",title:e.name,description:e.description??"Agent spec from library.",actions:c.jsx(we,{variant:"outline",size:"sm",onClick:()=>t({to:"/agents/validate"}),children:"Validate"})}),c.jsx(L2,{sourcePath:e.sourcePath,sourceState:e.sourceState}),c.jsxs(Rf,{children:[c.jsx(kt,{label:"Format",value:"AgentSpec",testId:"lib-agent-format"}),c.jsx(kt,{label:"Version",value:e.version,testId:"lib-agent-version"}),c.jsx(kt,{label:"Profiles",value:s.length,testId:"lib-agent-profiles"}),c.jsx(kt,{label:"Skills",value:r.skills.length,testId:"lib-agent-skills"})]}),c.jsx(v0,{review:e,yaml:e.raw,testIdPrefix:"lib-agent"})]})})}function tI({review:e}){const t=Wt(),[s,r]=j.useState(!1),{data:i=[]}=Qg("agent");new Map(i.map(h=>[h.name,h]));const l=e.pods??[],d=e.nodes??[],f=e.edges??[],m=h=>{if(!h.startsWith("local:"))return null;const v=h.slice(6),y=`${e.sourcePath.replace(/\/[^/]+$/,"")}/${v}`.split("/"),b=[];for(const w of y)w===".."?b.pop():w!=="."&&w!==""&&b.push(w);const S="/"+b.join("/");return i.find(w=>w.sourcePath.startsWith(S+"/"))??null};return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"library-review-rig",className:"space-y-6",children:[c.jsx(Fn,{eyebrow:e.services?"Library — Managed App":"Library — Rig Spec",title:e.name,description:e.summary??"Rig spec from library.",actions:c.jsxs("div",{className:"flex gap-2",children:[e.services&&c.jsx(we,{variant:"outline",size:"sm","data-testid":"copy-setup-prompt",onClick:()=>void(async()=>{await Qn(JP({name:e.name,summary:e.summary,sourcePath:e.sourcePath}))&&(r(!0),window.setTimeout(()=>r(!1),2e3))})(),children:s?"Copied":"Copy Setup Prompt"}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>t({to:"/import"}),children:"Import"})]})}),c.jsx(L2,{sourcePath:e.sourcePath,sourceState:e.sourceState}),c.jsxs(Rf,{children:[c.jsx(kt,{label:"Format",value:e.format==="pod_aware"?"Pod-Aware":"Legacy",testId:"lib-rig-format"}),e.services&&c.jsx(kt,{label:"Type",value:"Agent-Managed App",testId:"lib-rig-type"}),e.services&&l.length>0&&(()=>{const h=l.find(v=>v.members.some(g=>g.id==="specialist"));return h?c.jsx(kt,{label:"Specialist Agent",value:`${h.id}.specialist`,testId:"lib-rig-specialist"}):null})(),c.jsx(kt,{label:e.format==="pod_aware"?"Pods":"Nodes",value:e.format==="pod_aware"?l.length:d.length,testId:"lib-rig-pods"}),c.jsx(kt,{label:"Members",value:e.format==="pod_aware"?l.reduce((h,v)=>h+v.members.length,0):d.length,testId:"lib-rig-members"}),c.jsx(kt,{label:"Edges",value:f.length+(e.format==="pod_aware"?l.reduce((h,v)=>{var g;return h+(((g=v.edges)==null?void 0:g.length)??0)},0):0),testId:"lib-rig-edges"})]}),c.jsx(D2,{review:e,yaml:e.raw,testIdPrefix:"lib",yamlTestId:"lib-rig-yaml",showEnvironmentTab:!!e.services,onMemberClick:(h,v)=>{const g=m(v.agentRef);g&&t({to:"/specs/library/$entryId",params:{entryId:g.id}})}})]})})}function nI({entryId:e}){const t=Wt(),{data:s,isLoading:r,error:i}=Fg(e);return r?c.jsx(lt,{children:c.jsx("div",{className:"font-mono text-[10px] text-stone-400",children:"Loading spec review..."})}):i||!s?c.jsx(lt,{children:c.jsxs("div",{"data-testid":"library-review-error",className:"space-y-4",children:[c.jsx(Fn,{eyebrow:"Library",title:"Spec Not Found",description:(i==null?void 0:i.message)??"Could not load spec."}),c.jsx(we,{variant:"outline",size:"sm",onClick:()=>t({to:"/specs"}),children:"Back to Specs"})]})}):s.kind==="agent"?c.jsx(eI,{review:s}):c.jsx(tI,{review:s})}function sI(e){if(!e)return null;const t=e.match(/^local:agents\/([^/]+)$/);return(t==null?void 0:t[1])??null}function aI({agentRef:e}){const t=sI(e),{data:s=[],isLoading:r}=Qg("agent"),i=t?s.filter(m=>m.name===t):[],l=i.length===1?i[0].id:null,{data:d,isLoading:f}=Fg(l);return t?r||f?c.jsx("div",{className:"p-4 font-mono text-[10px] text-stone-400",children:"Loading agent spec..."}):i.length===0?c.jsx("div",{"data-testid":"agent-spec-unavailable",className:"p-4 font-mono text-[10px] text-stone-400",children:"No agent spec available"}):i.length>1?c.jsxs("div",{"data-testid":"agent-spec-ambiguous",className:"p-4 font-mono text-[10px] text-amber-600",children:["Agent spec ambiguous (",i.length,' matches for "',t,'")']}):!d||d.kind!=="agent"?c.jsx("div",{"data-testid":"agent-spec-unavailable",className:"p-4 font-mono text-[10px] text-stone-400",children:"No agent spec available"}):c.jsx(v0,{review:d,yaml:d.raw,testIdPrefix:"live-agent"}):c.jsx("div",{"data-testid":"agent-spec-unavailable",className:"p-4 font-mono text-[10px] text-stone-400",children:"No agent spec available"})}function rI({rigId:e,logicalId:t}){const{data:s,isLoading:r,error:i}=ON(e,t),[l,d]=j.useState("identity"),f=s?s.nodeKind!=="infrastructure":!0,m=f?["identity","agent-spec","startup","transcript"]:["identity","startup","transcript"];return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"live-node-details",className:"space-y-6",children:[c.jsx(Fn,{eyebrow:"Live Node Details",title:(s==null?void 0:s.canonicalSessionName)??t,description:`${(s==null?void 0:s.rigName)??e} / ${(s==null?void 0:s.podNamespace)??ds(t)??fs((s==null?void 0:s.podId)??null)} / ${t}`}),r&&c.jsx("div",{className:"font-mono text-[10px] text-stone-400",children:"Loading..."}),i&&c.jsx("div",{className:"p-3 bg-red-50 border border-red-200 font-mono text-[10px] text-red-700",children:i.message}),c.jsx("div",{className:"flex gap-1 border-b border-stone-200",children:m.map(h=>c.jsx("button",{"data-testid":`live-tab-${h}`,onClick:()=>d(h),className:`px-3 py-1.5 font-mono text-[10px] uppercase tracking-wider transition-colors ${l===h?"border-b-2 border-stone-900 text-stone-900 font-bold":"text-stone-500 hover:text-stone-700"}`,children:h.replace("-"," ")},h))}),s&&l==="identity"&&c.jsx(DN,{peers:s.peers,edges:s.edges,transcript:s.transcript,compactSpec:s.compactSpec,contextUsage:s.contextUsage}),s&&l==="agent-spec"&&f&&c.jsx(aI,{agentRef:s.agentRef}),s&&l==="startup"&&c.jsx("div",{"data-testid":"live-startup-section",className:"space-y-4",children:s.startupFiles.length>0&&c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Startup Files"}),s.startupFiles.map((h,v)=>c.jsxs("div",{className:"font-mono text-[10px]",children:[h.path," ",c.jsxs("span",{className:"text-stone-400",children:["(",h.deliveryHint,")"]}),h.required&&c.jsx("span",{className:"text-red-500 text-[8px] ml-1",children:"REQUIRED"})]},v))]})}),s&&l==="transcript"&&c.jsx("div",{"data-testid":"live-transcript-section",className:"space-y-4",children:s.transcript.enabled?c.jsxs("div",{className:"border border-stone-200 p-3",children:[c.jsx("div",{className:"font-mono text-xs font-bold mb-2",children:"Transcript"}),c.jsx("div",{className:"font-mono text-[10px] text-stone-700",children:s.transcript.path}),s.transcript.tailCommand&&c.jsx("code",{className:"block mt-1 font-mono text-[9px] text-stone-500 bg-stone-100 px-2 py-1",children:s.transcript.tailCommand})]}):c.jsx("div",{className:"font-mono text-[10px] text-stone-400 p-4",children:"Transcript capture not enabled"})})]})})}function iI(e){switch(e){case"claude-code":return"text-primary";case"codex":return"text-accent";case"terminal":return"text-foreground";default:return"text-foreground-muted"}}function oI(e){switch(e){case"claude-code":return"Claude Code";case"codex":return"Codex";case"terminal":return"Terminal";default:return"Unknown"}}function lI(e){return`'${e.replace(/'/g,"'\\''")}'`}function cI(e){const t=e.tmuxWindow?`${e.tmuxSession}:${e.tmuxWindow}`:e.tmuxSession;return`tmux attach -t ${lI(t)}`}function OS({label:e,activeLabel:t,onClick:s,testId:r}){const[i,l]=j.useState(!1),d=j.useRef(null);j.useEffect(()=>()=>{d.current&&clearTimeout(d.current)},[]);const f=async()=>{await s()&&(l(!0),d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{l(!1),d.current=null},900))};return c.jsx("button",{type:"button","data-testid":r,onClick:()=>{f()},className:Re("px-spacing-2 py-1 border font-mono text-[10px] uppercase transition-colors duration-150 ease-tactical",i?"bg-stone-900 text-white border-stone-900":"bg-white text-stone-900 border-stone-300 hover:bg-stone-100"),children:i?t:e})}function uI({session:e,onAdopt:t}){return c.jsx("div",{"data-testid":"discovered-node",className:Re("border-dashed border border-foreground/20 bg-[rgba(255,255,255,0.72)] px-spacing-4 py-spacing-3 mb-spacing-2 shadow-[0_10px_28px_rgba(20,20,20,0.04)] backdrop-blur-sm"),children:c.jsxs("div",{className:"flex flex-col gap-spacing-3 lg:flex-row lg:items-center lg:justify-between",children:[c.jsxs("div",{className:"min-w-0 flex-1",children:[c.jsxs("div",{className:"flex flex-wrap items-center gap-x-spacing-3 gap-y-spacing-1",children:[c.jsx("div",{"data-testid":"runtime-badge",className:Re("text-[10px] uppercase tracking-[0.08em]",iI(e.runtimeHint)),children:oI(e.runtimeHint)}),c.jsx("div",{"data-testid":"session-name",className:"font-mono text-[13px] leading-5 text-foreground",title:e.tmuxSession,children:e.tmuxSession}),e.confidence==="medium"?c.jsx("div",{"data-testid":"runtime-inferred-note",className:"text-[10px] uppercase tracking-[0.08em] text-foreground-muted",children:"runtime inferred"}):null]}),e.cwd?c.jsxs("div",{className:"mt-spacing-2 min-w-0",children:[c.jsx("div",{className:"text-[10px] uppercase tracking-[0.08em] text-foreground-muted",children:"cwd"}),c.jsx("div",{className:"font-mono text-[12px] leading-5 text-foreground-muted truncate",title:e.cwd,children:e.cwd})]}):null]}),c.jsxs("div",{className:"flex flex-wrap items-center gap-spacing-2 lg:justify-end",children:[c.jsx(OS,{label:"copy tmux",activeLabel:"copied",testId:"copy-tmux-btn",onClick:async()=>await Qn(cI(e))}),e.cwd?c.jsx(OS,{label:"copy cwd",activeLabel:"copied",testId:"copy-cwd-btn",onClick:async()=>await Qn(e.cwd??"")}):null,c.jsx(we,{variant:"tactical",size:"sm","data-testid":"adopt-btn",onClick:()=>t(e.id),children:"ADOPT"})]})]})})}function dI(){const[e,t]=j.useState(null),[s,r]=j.useState(!1),i=j.useCallback(async()=>{r(!0);try{const l=await fetch("/api/discovery/draft-rig",{method:"POST"});if(!l.ok){t(`# Error: draft generation failed (HTTP ${l.status})`);return}const d=await l.text();t(d)}catch{t("# Error: failed to reach daemon")}finally{r(!1)}},[]);return c.jsxs("div",{className:"mt-spacing-4 border-t border-foreground/10 pt-spacing-4","data-testid":"generate-draft-section",children:[c.jsx(we,{variant:"tactical",onClick:i,disabled:s,"data-testid":"generate-draft-btn",className:"mb-spacing-3",children:s?"GENERATING...":"GENERATE RIG SPEC"}),e&&(()=>{const l=e.split(`
224
224
  `),d=l.filter(m=>m.startsWith("# WARNING:")).map(m=>m.replace(/^# WARNING:\s*/,"")),f=l.filter(m=>!m.startsWith("# WARNING:")).join(`
225
225
  `).trim();return c.jsxs("div",{className:"relative",children:[d.length>0&&c.jsx("div",{className:"mb-spacing-2 p-spacing-2 bg-warning/10 border border-warning/30 text-label-sm","data-testid":"draft-warnings",children:d.map((m,h)=>c.jsx("div",{className:"text-warning font-mono",children:m},h))}),c.jsx("pre",{className:"bg-surface-low p-spacing-3 text-label-sm font-mono overflow-x-auto max-h-64 border border-foreground/10","data-testid":"draft-yaml",children:f}),c.jsx("button",{onClick:()=>{var m;return(m=navigator.clipboard)==null?void 0:m.writeText(e)},className:"absolute top-2 right-2 text-label-sm text-foreground-muted hover:text-foreground","data-testid":"copy-draft-btn",children:"COPY"})]})})()]})}function fI(){var T,_;const{data:e=[]}=Yg({status:"active",runtimeHint:["claude-code","codex"],minConfidence:"medium"}),t=LN(),{data:s=[]}=vc(),r=t4(),i=e,[l,d]=j.useState(null),[f,m]=j.useState(!1),[h,v]=j.useState(""),[g,y]=j.useState(""),b=R=>{d(R),m(!0),v(""),y(""),r.reset()},S=()=>{m(!1),d(null)},w=()=>{!l||!h||!g.trim()||r.mutate({discoveredId:l,rigId:h,logicalId:g.trim()},{onSuccess:S})},N=((T=r.error)==null?void 0:T.message)??null,E=r.isPending;return c.jsx(lt,{children:c.jsxs("div",{"data-testid":"discovery-overlay",children:[c.jsxs("div",{children:[c.jsxs("div",{className:"flex flex-col gap-spacing-4 border-b border-foreground/10 pb-spacing-5 sm:flex-row sm:items-end sm:justify-between",children:[c.jsxs("div",{className:"max-w-[620px]",children:[c.jsx("h2",{className:"text-headline-lg uppercase",children:"DISCOVERY"}),c.jsx("p",{className:"mt-spacing-1 text-body-md text-foreground-muted",children:"Running agent sessions currently visible on this machine. Copy a tmux attach command, review the working directory, or adopt the session into a rig."})]}),c.jsx(we,{variant:"ghost",size:"sm","data-testid":"scan-now-btn",disabled:t.isPending,onClick:()=>t.mutate(),children:t.isPending?"SCANNING...":"SCAN NOW"})]}),t.isError?c.jsxs("div",{className:"mt-spacing-4 text-label-sm text-destructive","data-testid":"scan-error",children:["Discovery scan failed: ",(_=t.error)==null?void 0:_.message]}):null,i.length===0?c.jsx("div",{className:"py-spacing-8","data-testid":"discovery-empty",children:c.jsx("p",{className:"text-body-md text-foreground-muted",children:"No running Claude or Codex sessions are currently visible."})}):c.jsxs("div",{className:"mt-spacing-6 space-y-spacing-3","data-testid":"discovery-active-section",children:[c.jsxs("div",{className:"mb-spacing-2",children:[c.jsx("h3",{className:"text-headline-sm uppercase",children:"Running agents"}),c.jsxs("p",{className:"text-label-md text-foreground-muted",children:[i.length," session",i.length!==1?"s":""," available to inspect or adopt"]})]}),i.map(R=>c.jsx(uI,{session:R,onAdopt:b},R.id))]}),c.jsx(dI,{})]}),c.jsx(Qd,{open:f,onOpenChange:m,children:c.jsxs(Xl,{"data-testid":"adopt-dialog",children:[c.jsxs(Zl,{children:[c.jsx(Jl,{className:"text-headline-md uppercase",children:"ADOPT SESSION"}),c.jsx(ec,{children:"Bind this session to an existing logical node in the rig."})]}),c.jsxs("div",{className:"space-y-spacing-3",children:[c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm uppercase block mb-spacing-1",children:"RIG"}),c.jsxs("select",{"data-testid":"adopt-rig-input",value:h,onChange:R=>v(R.target.value),className:"w-full bg-white border-b border-outline py-spacing-1 text-body-md font-mono focus:outline-none focus:border-stone-900 appearance-none cursor-pointer",children:[c.jsx("option",{value:"",children:"Select a rig..."}),s.map(R=>c.jsxs("option",{value:R.id,children:[R.name," (",R.nodeCount," nodes)"]},R.id))]})]}),c.jsxs("div",{children:[c.jsx("label",{className:"text-label-sm uppercase block mb-spacing-1",children:"LOGICAL ID (required)"}),c.jsx("input",{"data-testid":"adopt-logical-input",type:"text",value:g,onChange:R=>y(R.target.value),className:"w-full bg-transparent border-b border-foreground/20 py-spacing-1 text-body-md font-mono focus:outline-none focus:border-primary"}),c.jsx("p",{className:"mt-spacing-1 text-label-sm text-foreground-muted",children:"Enter the logical ID of an existing node in the target rig. For pod placement, use the Discovery drawer instead."})]})]}),N&&c.jsx("p",{className:"text-destructive text-label-sm","data-testid":"adopt-error",children:N}),c.jsxs(Wl,{children:[c.jsx(we,{variant:"ghost",onClick:()=>m(!1),children:"CANCEL"}),c.jsx(we,{variant:"tactical",onClick:w,disabled:!h||!g.trim()||E,"data-testid":"adopt-confirm",children:E?"ADOPTING...":"ADOPT"})]})]})})]})})}const Dt=VR({component:()=>c.jsx(TT,{client:UT,children:c.jsx(T4,{children:c.jsx(mw,{})})})}),hI=Ot({getParentRoute:()=>Dt,path:"/",component:h0});function mI(){var r;const{rigId:e}=z2.useParams(),{data:t}=vc(),s=(r=t==null?void 0:t.find(i=>i.id===e))==null?void 0:r.name;return c.jsx("div",{className:"flex flex-col flex-1 h-full",children:c.jsx("div",{className:"flex-1 min-h-[400px] relative",children:c.jsx(J6,{rigId:e,rigName:s??null,showDiscovered:!1})})})}const z2=Ot({getParentRoute:()=>Dt,path:"/rigs/$rigId",component:mI}),pI=Ot({getParentRoute:()=>Dt,path:"/import",component:rP}),gI=Ot({getParentRoute:()=>Dt,path:"/packages",component:dP}),xI=Ot({getParentRoute:()=>Dt,path:"/packages/install",component:xP}),yI=Ot({getParentRoute:()=>Dt,path:"/bootstrap",component:LP}),vI=Ot({getParentRoute:()=>Dt,path:"/agents/validate",component:zP});function bI(){const{setSelection:e}=tr();return j.useEffect(()=>{e({type:"discovery"})},[e]),c.jsx(h0,{})}function SI(){const{setSelection:e}=tr();return j.useEffect(()=>{e({type:"specs"})},[e]),c.jsx(h0,{})}function wI(){const{setSelection:e}=tr();return j.useEffect(()=>{e({type:"specs"})},[e]),c.jsx(QP,{})}function NI(){const{setSelection:e}=tr();return j.useEffect(()=>{e({type:"specs"})},[e]),c.jsx(FP,{})}const jI=Ot({getParentRoute:()=>Dt,path:"/discovery",component:bI}),EI=Ot({getParentRoute:()=>Dt,path:"/specs",component:SI}),CI=Ot({getParentRoute:()=>Dt,path:"/specs/rig",component:wI}),_I=Ot({getParentRoute:()=>Dt,path:"/specs/agent",component:NI});function RI(){const{entryId:e}=P2.useParams(),{setSelection:t}=tr();return j.useEffect(()=>{t({type:"specs"})},[t]),c.jsx(nI,{entryId:e})}const P2=Ot({getParentRoute:()=>Dt,path:"/specs/library/$entryId",component:RI}),TI=Ot({getParentRoute:()=>Dt,path:"/discovery/inventory",component:fI}),AI=Ot({getParentRoute:()=>Dt,path:"/bundles/inspect",component:ZP}),MI=Ot({getParentRoute:()=>Dt,path:"/bundles/install",component:WP}),kI=Ot({getParentRoute:()=>Dt,path:"/packages/$packageId",component:CP}),I2=Ot({getParentRoute:()=>Dt,path:"/rigs/$rigId/nodes/$logicalId",component:()=>{const{rigId:e,logicalId:t}=I2.useParams();return c.jsx(rI,{rigId:e,logicalId:decodeURIComponent(t)})}}),OI=Dt.addChildren([hI,z2,pI,gI,xI,kI,yI,vI,EI,CI,_I,P2,jI,TI,AI,MI,I2]),DI=eT({routeTree:OI});function LI(){return c.jsx(sT,{router:DI})}const DS=document.getElementById("root");DS&&t_.createRoot(DS).render(c.jsx(j.StrictMode,{children:c.jsx(LI,{})}));