tmux-ide 2.1.4 → 2.6.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 (805) hide show
  1. package/README.md +115 -101
  2. package/bin/cli.js +13678 -4
  3. package/bin/cli.ts +1143 -260
  4. package/package.json +27 -17
  5. package/packages/daemon/dist/__tests__/support.d.ts +7 -0
  6. package/packages/daemon/dist/__tests__/support.js +33 -0
  7. package/packages/daemon/dist/agent-explain.d.ts +45 -0
  8. package/packages/daemon/dist/agent-explain.js +210 -0
  9. package/packages/daemon/dist/attach.d.ts +3 -0
  10. package/packages/daemon/dist/attach.js +14 -0
  11. package/packages/daemon/dist/bin.d.ts +2 -0
  12. package/packages/daemon/dist/bin.js +3 -0
  13. package/packages/daemon/dist/canonical.d.ts +2 -0
  14. package/packages/daemon/dist/canonical.js +1 -0
  15. package/packages/daemon/dist/cli.d.ts +1 -0
  16. package/packages/daemon/dist/cli.js +425 -0
  17. package/packages/daemon/dist/command-center/actions/contract.d.ts +1 -0
  18. package/packages/daemon/dist/command-center/actions/contract.js +2 -0
  19. package/packages/daemon/dist/command-center/actions/dispatcher.d.ts +27 -0
  20. package/packages/daemon/dist/command-center/actions/dispatcher.js +109 -0
  21. package/packages/daemon/dist/command-center/actions/errors.d.ts +38 -0
  22. package/packages/daemon/dist/command-center/actions/errors.js +56 -0
  23. package/packages/daemon/dist/command-center/actions/handlers/_project-context.d.ts +12 -0
  24. package/packages/daemon/dist/command-center/actions/handlers/_project-context.js +12 -0
  25. package/packages/daemon/dist/command-center/actions/handlers/_resolve-project.d.ts +42 -0
  26. package/packages/daemon/dist/command-center/actions/handlers/_resolve-project.js +48 -0
  27. package/packages/daemon/dist/command-center/actions/handlers/app-set-remote-access.d.ts +23 -0
  28. package/packages/daemon/dist/command-center/actions/handlers/app-set-remote-access.js +67 -0
  29. package/packages/daemon/dist/command-center/actions/handlers/config-actions.d.ts +12 -0
  30. package/packages/daemon/dist/command-center/actions/handlers/config-actions.js +69 -0
  31. package/packages/daemon/dist/command-center/actions/handlers/daemon-shutdown.d.ts +6 -0
  32. package/packages/daemon/dist/command-center/actions/handlers/daemon-shutdown.js +24 -0
  33. package/packages/daemon/dist/command-center/actions/handlers/project-activate.d.ts +7 -0
  34. package/packages/daemon/dist/command-center/actions/handlers/project-activate.js +19 -0
  35. package/packages/daemon/dist/command-center/actions/handlers/project-launch.d.ts +18 -0
  36. package/packages/daemon/dist/command-center/actions/handlers/project-launch.js +58 -0
  37. package/packages/daemon/dist/command-center/actions/handlers/project-open-terminal.d.ts +32 -0
  38. package/packages/daemon/dist/command-center/actions/handlers/project-open-terminal.js +69 -0
  39. package/packages/daemon/dist/command-center/actions/handlers/project-restart.d.ts +17 -0
  40. package/packages/daemon/dist/command-center/actions/handlers/project-restart.js +27 -0
  41. package/packages/daemon/dist/command-center/actions/handlers/project-stop.d.ts +24 -0
  42. package/packages/daemon/dist/command-center/actions/handlers/project-stop.js +38 -0
  43. package/packages/daemon/dist/command-center/actions/handlers/terminal-respawn.d.ts +24 -0
  44. package/packages/daemon/dist/command-center/actions/handlers/terminal-respawn.js +88 -0
  45. package/packages/daemon/dist/command-center/actions/handlers/terminal-stop.d.ts +14 -0
  46. package/packages/daemon/dist/command-center/actions/handlers/terminal-stop.js +22 -0
  47. package/packages/daemon/dist/command-center/actions/registry.d.ts +35 -0
  48. package/packages/daemon/dist/command-center/actions/registry.js +109 -0
  49. package/packages/daemon/dist/command-center/discovery.d.ts +23 -0
  50. package/packages/daemon/dist/command-center/discovery.js +67 -0
  51. package/packages/daemon/dist/command-center/index.d.ts +10 -0
  52. package/packages/daemon/dist/command-center/index.js +21 -0
  53. package/packages/daemon/dist/command-center/schemas.d.ts +76 -0
  54. package/packages/daemon/dist/command-center/schemas.js +68 -0
  55. package/packages/daemon/dist/command-center/server.d.ts +26 -0
  56. package/packages/daemon/dist/command-center/server.js +1103 -0
  57. package/packages/daemon/dist/command-center/ws-events.d.ts +59 -0
  58. package/packages/daemon/dist/command-center/ws-events.js +277 -0
  59. package/packages/daemon/dist/config.d.ts +19 -0
  60. package/packages/daemon/dist/config.js +494 -0
  61. package/packages/daemon/dist/detect.d.ts +15 -0
  62. package/packages/daemon/dist/detect.js +228 -0
  63. package/packages/daemon/dist/doctor.d.ts +21 -0
  64. package/packages/daemon/dist/doctor.js +154 -0
  65. package/packages/daemon/dist/embed.d.ts +1 -0
  66. package/packages/daemon/dist/embed.js +1 -0
  67. package/packages/daemon/dist/index.d.ts +3 -0
  68. package/packages/daemon/dist/index.js +2 -0
  69. package/packages/daemon/dist/init.d.ts +4 -0
  70. package/packages/daemon/dist/init.js +174 -0
  71. package/packages/daemon/dist/inspect.d.ts +54 -0
  72. package/packages/daemon/dist/inspect.js +118 -0
  73. package/packages/daemon/dist/launch.d.ts +23 -0
  74. package/packages/daemon/dist/launch.js +250 -0
  75. package/packages/daemon/dist/lib/active-projects.d.ts +12 -0
  76. package/packages/daemon/dist/lib/active-projects.js +35 -0
  77. package/packages/daemon/dist/lib/agent-discovery.d.ts +43 -0
  78. package/packages/daemon/dist/lib/agent-discovery.js +85 -0
  79. package/packages/daemon/dist/lib/app-config.d.ts +147 -0
  80. package/packages/daemon/dist/lib/app-config.js +191 -0
  81. package/packages/daemon/dist/lib/app-settings.d.ts +9 -0
  82. package/packages/daemon/dist/lib/app-settings.js +44 -0
  83. package/packages/daemon/dist/lib/auth/auth-service.d.ts +33 -0
  84. package/packages/daemon/dist/lib/auth/auth-service.js +172 -0
  85. package/packages/daemon/dist/lib/auth/middleware.d.ts +16 -0
  86. package/packages/daemon/dist/lib/auth/middleware.js +43 -0
  87. package/packages/daemon/dist/lib/auth/types.d.ts +1 -0
  88. package/packages/daemon/dist/lib/auth/types.js +2 -0
  89. package/packages/daemon/dist/lib/auth-token.d.ts +1 -0
  90. package/packages/daemon/dist/lib/auth-token.js +4 -0
  91. package/packages/daemon/dist/lib/authorship.d.ts +62 -0
  92. package/packages/daemon/dist/lib/authorship.js +209 -0
  93. package/packages/daemon/dist/lib/canonical-daemon.d.ts +21 -0
  94. package/packages/daemon/dist/lib/canonical-daemon.js +111 -0
  95. package/packages/daemon/dist/lib/cli-action-bridge.d.ts +27 -0
  96. package/packages/daemon/dist/lib/cli-action-bridge.js +161 -0
  97. package/packages/daemon/dist/lib/daemon-embed.d.ts +31 -0
  98. package/packages/daemon/dist/lib/daemon-embed.js +643 -0
  99. package/packages/daemon/dist/lib/daemon-watchdog.d.ts +16 -0
  100. package/packages/daemon/dist/lib/daemon-watchdog.js +98 -0
  101. package/packages/daemon/dist/lib/daemon.d.ts +8 -0
  102. package/packages/daemon/dist/lib/daemon.js +79 -0
  103. package/packages/daemon/dist/lib/dot-path.d.ts +2 -0
  104. package/packages/daemon/dist/lib/dot-path.js +17 -0
  105. package/packages/daemon/dist/lib/errors.d.ts +37 -0
  106. package/packages/daemon/dist/lib/errors.js +50 -0
  107. package/packages/daemon/dist/lib/filesystem-browser.d.ts +85 -0
  108. package/packages/daemon/dist/lib/filesystem-browser.js +257 -0
  109. package/packages/daemon/dist/lib/launch-plan.d.ts +6 -0
  110. package/packages/daemon/dist/lib/launch-plan.js +76 -0
  111. package/packages/daemon/dist/lib/log.d.ts +40 -0
  112. package/packages/daemon/dist/lib/log.js +86 -0
  113. package/packages/daemon/dist/lib/output.d.ts +9 -0
  114. package/packages/daemon/dist/lib/output.js +65 -0
  115. package/packages/daemon/dist/lib/project-init-runner.d.ts +46 -0
  116. package/packages/daemon/dist/lib/project-init-runner.js +117 -0
  117. package/packages/daemon/dist/lib/project-inspect.d.ts +28 -0
  118. package/packages/daemon/dist/lib/project-inspect.js +67 -0
  119. package/packages/daemon/dist/lib/project-onboard.d.ts +58 -0
  120. package/packages/daemon/dist/lib/project-onboard.js +108 -0
  121. package/packages/daemon/dist/lib/project-probe.d.ts +35 -0
  122. package/packages/daemon/dist/lib/project-probe.js +61 -0
  123. package/packages/daemon/dist/lib/project-registry.d.ts +76 -0
  124. package/packages/daemon/dist/lib/project-registry.js +230 -0
  125. package/packages/daemon/dist/lib/session-monitor.d.ts +15 -0
  126. package/packages/daemon/dist/lib/session-monitor.js +103 -0
  127. package/packages/daemon/dist/lib/session-options.d.ts +13 -0
  128. package/packages/daemon/dist/lib/session-options.js +85 -0
  129. package/packages/daemon/dist/lib/shell.d.ts +5 -0
  130. package/{src/lib/shell.ts → packages/daemon/dist/lib/shell.js} +3 -3
  131. package/packages/daemon/dist/lib/sizes.d.ts +16 -0
  132. package/packages/daemon/dist/lib/sizes.js +36 -0
  133. package/packages/daemon/dist/lib/skill-sync.d.ts +60 -0
  134. package/packages/daemon/dist/lib/skill-sync.js +128 -0
  135. package/packages/daemon/dist/lib/slugify.d.ts +4 -0
  136. package/packages/daemon/dist/lib/slugify.js +10 -0
  137. package/packages/daemon/dist/lib/terminals-store.d.ts +27 -0
  138. package/packages/daemon/dist/lib/terminals-store.js +111 -0
  139. package/packages/daemon/dist/lib/update-check.d.ts +118 -0
  140. package/packages/daemon/dist/lib/update-check.js +261 -0
  141. package/packages/daemon/dist/lib/update.d.ts +65 -0
  142. package/packages/daemon/dist/lib/update.js +141 -0
  143. package/packages/daemon/dist/lib/workspace-registry.d.ts +84 -0
  144. package/packages/daemon/dist/lib/workspace-registry.js +176 -0
  145. package/packages/daemon/dist/lib/worktree.d.ts +76 -0
  146. package/packages/daemon/dist/lib/worktree.js +207 -0
  147. package/packages/daemon/dist/lib/yaml-io.d.ts +10 -0
  148. package/packages/daemon/dist/lib/yaml-io.js +24 -0
  149. package/packages/daemon/dist/ls.d.ts +3 -0
  150. package/packages/daemon/dist/ls.js +35 -0
  151. package/packages/daemon/dist/restart.d.ts +4 -0
  152. package/packages/daemon/dist/restart.js +16 -0
  153. package/packages/daemon/dist/restore.d.ts +86 -0
  154. package/packages/daemon/dist/restore.js +406 -0
  155. package/packages/daemon/dist/schemas/domain.d.ts +1 -0
  156. package/packages/daemon/dist/schemas/domain.js +2 -0
  157. package/packages/daemon/dist/schemas/filesystem.d.ts +29 -0
  158. package/packages/daemon/dist/schemas/filesystem.js +29 -0
  159. package/packages/daemon/dist/schemas/ide-config.d.ts +1 -0
  160. package/packages/daemon/dist/schemas/ide-config.js +2 -0
  161. package/packages/daemon/dist/schemas/index.d.ts +12 -0
  162. package/packages/daemon/dist/schemas/index.js +6 -0
  163. package/packages/daemon/dist/schemas/inspect.d.ts +53 -0
  164. package/packages/daemon/dist/schemas/inspect.js +57 -0
  165. package/packages/daemon/dist/schemas/registry.d.ts +35 -0
  166. package/packages/daemon/dist/schemas/registry.js +43 -0
  167. package/packages/daemon/dist/schemas/ws-events.d.ts +72 -0
  168. package/packages/daemon/dist/schemas/ws-events.js +110 -0
  169. package/packages/daemon/dist/send.d.ts +27 -0
  170. package/packages/daemon/dist/send.js +141 -0
  171. package/packages/daemon/dist/server/index.d.ts +10 -0
  172. package/packages/daemon/dist/server/index.js +55 -0
  173. package/packages/daemon/dist/server/pty-bridge.d.ts +174 -0
  174. package/packages/daemon/dist/server/pty-bridge.js +422 -0
  175. package/packages/daemon/dist/server/standalone.d.ts +1 -0
  176. package/packages/daemon/dist/server/standalone.js +14 -0
  177. package/packages/daemon/dist/server/ws-route.d.ts +74 -0
  178. package/packages/daemon/dist/server/ws-route.js +379 -0
  179. package/packages/daemon/dist/status.d.ts +3 -0
  180. package/packages/daemon/dist/status.js +46 -0
  181. package/packages/daemon/dist/stop.d.ts +3 -0
  182. package/packages/daemon/dist/stop.js +21 -0
  183. package/packages/daemon/dist/terminal/NodePtyAdapter.d.ts +44 -0
  184. package/packages/daemon/dist/terminal/NodePtyAdapter.js +253 -0
  185. package/packages/daemon/dist/terminal/PtyAdapter.d.ts +124 -0
  186. package/packages/daemon/dist/terminal/PtyAdapter.js +43 -0
  187. package/packages/daemon/dist/terminal/__tests__/MockPtyAdapter.d.ts +77 -0
  188. package/packages/daemon/dist/terminal/__tests__/MockPtyAdapter.js +155 -0
  189. package/packages/daemon/dist/types.d.ts +2 -0
  190. package/packages/daemon/dist/types.js +1 -0
  191. package/packages/daemon/dist/validate.d.ts +4 -0
  192. package/packages/daemon/dist/validate.js +184 -0
  193. package/packages/daemon/dist/widgets/changes/index.d.ts +1 -0
  194. package/packages/daemon/dist/widgets/changes/index.jsx +575 -0
  195. package/packages/daemon/dist/widgets/config/index.d.ts +1 -0
  196. package/packages/daemon/dist/widgets/config/index.jsx +395 -0
  197. package/packages/daemon/dist/widgets/explorer/breadcrumbs.d.ts +10 -0
  198. package/packages/daemon/dist/widgets/explorer/breadcrumbs.jsx +51 -0
  199. package/packages/daemon/dist/widgets/explorer/footer.d.ts +6 -0
  200. package/packages/daemon/dist/widgets/explorer/footer.jsx +11 -0
  201. package/packages/daemon/dist/widgets/explorer/index.d.ts +1 -0
  202. package/packages/daemon/dist/widgets/explorer/index.jsx +393 -0
  203. package/packages/daemon/dist/widgets/explorer/tree-model.d.ts +13 -0
  204. package/packages/daemon/dist/widgets/explorer/tree-model.js +69 -0
  205. package/packages/daemon/dist/widgets/explorer/tree.d.ts +13 -0
  206. package/packages/daemon/dist/widgets/explorer/tree.jsx +108 -0
  207. package/packages/daemon/dist/widgets/lib/config-model.d.ts +22 -0
  208. package/packages/daemon/dist/widgets/lib/config-model.js +99 -0
  209. package/packages/daemon/dist/widgets/lib/files.d.ts +11 -0
  210. package/packages/daemon/dist/widgets/lib/files.js +76 -0
  211. package/packages/daemon/dist/widgets/lib/git.d.ts +11 -0
  212. package/packages/daemon/dist/widgets/lib/git.js +70 -0
  213. package/packages/daemon/dist/widgets/lib/grammar.d.ts +79 -0
  214. package/packages/daemon/dist/widgets/lib/grammar.js +95 -0
  215. package/packages/daemon/dist/widgets/lib/help-overlay.d.ts +19 -0
  216. package/packages/daemon/dist/widgets/lib/help-overlay.jsx +69 -0
  217. package/packages/daemon/dist/widgets/lib/pane-comms.d.ts +28 -0
  218. package/packages/daemon/dist/widgets/lib/pane-comms.js +189 -0
  219. package/packages/daemon/dist/widgets/lib/theme.d.ts +44 -0
  220. package/packages/daemon/dist/widgets/lib/theme.js +153 -0
  221. package/packages/daemon/dist/widgets/lib/watcher.d.ts +9 -0
  222. package/packages/daemon/dist/widgets/lib/watcher.js +92 -0
  223. package/packages/daemon/dist/widgets/preview/index.d.ts +1 -0
  224. package/packages/daemon/dist/widgets/preview/index.jsx +371 -0
  225. package/packages/daemon/dist/widgets/resolve.d.ts +20 -0
  226. package/packages/daemon/dist/widgets/resolve.js +100 -0
  227. package/packages/daemon/dist/widgets/setup/agent-naming.d.ts +9 -0
  228. package/packages/daemon/dist/widgets/setup/agent-naming.jsx +81 -0
  229. package/packages/daemon/dist/widgets/setup/config-tree.d.ts +13 -0
  230. package/packages/daemon/dist/widgets/setup/config-tree.jsx +203 -0
  231. package/packages/daemon/dist/widgets/setup/detect-panel.d.ts +14 -0
  232. package/{src/widgets/setup/detect-panel.tsx → packages/daemon/dist/widgets/setup/detect-panel.jsx} +16 -40
  233. package/packages/daemon/dist/widgets/setup/field-editor.d.ts +12 -0
  234. package/packages/daemon/dist/widgets/setup/field-editor.jsx +163 -0
  235. package/packages/daemon/dist/widgets/setup/footer.d.ts +17 -0
  236. package/packages/daemon/dist/widgets/setup/footer.jsx +64 -0
  237. package/packages/daemon/dist/widgets/setup/index.d.ts +1 -0
  238. package/packages/daemon/dist/widgets/setup/index.jsx +261 -0
  239. package/packages/daemon/dist/widgets/setup/layout-picker.d.ts +9 -0
  240. package/packages/daemon/dist/widgets/setup/layout-picker.jsx +69 -0
  241. package/packages/daemon/dist/widgets/setup/setup-model.d.ts +15 -0
  242. package/packages/daemon/dist/widgets/setup/setup-model.js +157 -0
  243. package/packages/daemon/dist/widgets/sidebar/index.d.ts +1 -0
  244. package/packages/daemon/dist/widgets/sidebar/index.jsx +462 -0
  245. package/scripts/build-cli.mjs +101 -0
  246. package/scripts/build-tui.mjs +58 -0
  247. package/scripts/capture-codex-traffic.mjs +195 -0
  248. package/scripts/check-src-additions.sh +74 -0
  249. package/scripts/coverage-summary.mjs +68 -0
  250. package/scripts/install-git-hooks.js +53 -0
  251. package/scripts/merge-update-manifests.mjs +58 -0
  252. package/scripts/merge-update-manifests.test.mjs +82 -0
  253. package/scripts/pack-check-run.mjs +83 -0
  254. package/scripts/postinstall.js +28 -6
  255. package/scripts/prepublish-check.mjs +44 -0
  256. package/scripts/stress-test.ts +141 -0
  257. package/scripts/verify-endpoints.sh +90 -0
  258. package/skill/SKILL.md +203 -236
  259. package/dashboard/out/404/index.html +0 -1
  260. package/dashboard/out/404.html +0 -1
  261. package/dashboard/out/__next.__PAGE__.txt +0 -9
  262. package/dashboard/out/__next._full.txt +0 -21
  263. package/dashboard/out/__next._head.txt +0 -5
  264. package/dashboard/out/__next._index.txt +0 -7
  265. package/dashboard/out/__next._tree.txt +0 -4
  266. package/dashboard/out/_next/static/Tl1KoIH7mHCyjo5KtXqQ0/_buildManifest.js +0 -11
  267. package/dashboard/out/_next/static/Tl1KoIH7mHCyjo5KtXqQ0/_clientMiddlewareManifest.json +0 -1
  268. package/dashboard/out/_next/static/Tl1KoIH7mHCyjo5KtXqQ0/_ssgManifest.js +0 -1
  269. package/dashboard/out/_next/static/chunks/048e2449530877e2.js +0 -1
  270. package/dashboard/out/_next/static/chunks/053c57bda6abb959.js +0 -1
  271. package/dashboard/out/_next/static/chunks/056760c6c2dd9172.js +0 -1
  272. package/dashboard/out/_next/static/chunks/06ab47357b6d3e35.js +0 -1
  273. package/dashboard/out/_next/static/chunks/0921cbe5dfd6738e.js +0 -1
  274. package/dashboard/out/_next/static/chunks/0b2599bf468cf5ea.js +0 -1
  275. package/dashboard/out/_next/static/chunks/0c012eac08ef2c4f.js +0 -1
  276. package/dashboard/out/_next/static/chunks/0c29e87fcdcffac3.js +0 -1
  277. package/dashboard/out/_next/static/chunks/0e1e98854430c693.js +0 -1
  278. package/dashboard/out/_next/static/chunks/0e24498976a88976.js +0 -1
  279. package/dashboard/out/_next/static/chunks/0e5bf11ff0b9ab90.js +0 -1
  280. package/dashboard/out/_next/static/chunks/0eae0a45ab8416c8.js +0 -1
  281. package/dashboard/out/_next/static/chunks/104797400d9d38ad.js +0 -1
  282. package/dashboard/out/_next/static/chunks/10cfcfce475f9d2d.js +0 -1
  283. package/dashboard/out/_next/static/chunks/11bac38e7cfb4ecc.js +0 -1
  284. package/dashboard/out/_next/static/chunks/120c5f6501ec3529.js +0 -1
  285. package/dashboard/out/_next/static/chunks/121fceb2b1dcd79f.js +0 -1
  286. package/dashboard/out/_next/static/chunks/13726b63e1be6b98.js +0 -1
  287. package/dashboard/out/_next/static/chunks/140c6ce631514660.js +0 -1
  288. package/dashboard/out/_next/static/chunks/1435ee3a51174c97.js +0 -1
  289. package/dashboard/out/_next/static/chunks/14dc927d2e2cca91.js +0 -1
  290. package/dashboard/out/_next/static/chunks/179c3031b292d98e.js +0 -1
  291. package/dashboard/out/_next/static/chunks/181e88957c47e5c1.js +0 -1
  292. package/dashboard/out/_next/static/chunks/18f70ba23873c432.js +0 -1
  293. package/dashboard/out/_next/static/chunks/1b58303b027fd135.js +0 -1
  294. package/dashboard/out/_next/static/chunks/1b5f49a358dcc71e.js +0 -1
  295. package/dashboard/out/_next/static/chunks/1bba44b81585099a.js +0 -1
  296. package/dashboard/out/_next/static/chunks/1bea8dee19a3e9ae.js +0 -1
  297. package/dashboard/out/_next/static/chunks/1cfad21646fc250e.js +0 -1
  298. package/dashboard/out/_next/static/chunks/1d053dc9e1e428ef.js +0 -1
  299. package/dashboard/out/_next/static/chunks/1e7d7639c6f0ee5e.js +0 -1
  300. package/dashboard/out/_next/static/chunks/1f42504ca81463f1.js +0 -1
  301. package/dashboard/out/_next/static/chunks/20c92047399305b4.js +0 -1
  302. package/dashboard/out/_next/static/chunks/214560e9514a9a4d.js +0 -1
  303. package/dashboard/out/_next/static/chunks/21d4ef106914e997.js +0 -1
  304. package/dashboard/out/_next/static/chunks/2586e83fc3dc2588.js +0 -1
  305. package/dashboard/out/_next/static/chunks/267136a09e94f5c2.js +0 -1
  306. package/dashboard/out/_next/static/chunks/271c50b329917c10.js +0 -1
  307. package/dashboard/out/_next/static/chunks/27fccecefffd88b5.js +0 -1
  308. package/dashboard/out/_next/static/chunks/28f058ed331315b6.js +0 -1
  309. package/dashboard/out/_next/static/chunks/28f704f2cc5713eb.js +0 -1
  310. package/dashboard/out/_next/static/chunks/290f67a6cd150a98.js +0 -1
  311. package/dashboard/out/_next/static/chunks/2ad12f4dcc30d30a.js +0 -1
  312. package/dashboard/out/_next/static/chunks/2b650b172078ab92.js +0 -1
  313. package/dashboard/out/_next/static/chunks/2bd91076019a6453.js +0 -1
  314. package/dashboard/out/_next/static/chunks/2e1278563a8e26be.js +0 -1
  315. package/dashboard/out/_next/static/chunks/309eb70780a3d67d.js +0 -1
  316. package/dashboard/out/_next/static/chunks/30f71950992e2307.js +0 -1
  317. package/dashboard/out/_next/static/chunks/31191873c2075784.js +0 -1
  318. package/dashboard/out/_next/static/chunks/31a790921a0c035e.js +0 -1
  319. package/dashboard/out/_next/static/chunks/34f8d7a5a06e8e32.js +0 -1
  320. package/dashboard/out/_next/static/chunks/36b3716436d9bc9d.js +0 -1
  321. package/dashboard/out/_next/static/chunks/3770b7d0ff004de3.js +0 -1
  322. package/dashboard/out/_next/static/chunks/381ab3bd4cffbf4d.js +0 -1
  323. package/dashboard/out/_next/static/chunks/38aa4eada5dcd1a4.js +0 -1
  324. package/dashboard/out/_next/static/chunks/39723132b78cb77e.js +0 -1
  325. package/dashboard/out/_next/static/chunks/399efdcc3fe56e09.js +0 -1
  326. package/dashboard/out/_next/static/chunks/3a8431a9221b0706.js +0 -1
  327. package/dashboard/out/_next/static/chunks/3a9b40810ce88cbf.js +0 -1
  328. package/dashboard/out/_next/static/chunks/3b322e3e9476ecdf.js +0 -1
  329. package/dashboard/out/_next/static/chunks/3bb14befeeb08c28.js +0 -1
  330. package/dashboard/out/_next/static/chunks/3c99637ebd462b20.js +0 -1
  331. package/dashboard/out/_next/static/chunks/3cbb9217d56459d8.js +0 -1
  332. package/dashboard/out/_next/static/chunks/3d438e0929a762f7.js +0 -1
  333. package/dashboard/out/_next/static/chunks/3e6d4834e0752f76.js +0 -2
  334. package/dashboard/out/_next/static/chunks/3e6f8cedaad4e89b.js +0 -1
  335. package/dashboard/out/_next/static/chunks/3e701259ce1b53e3.js +0 -1
  336. package/dashboard/out/_next/static/chunks/41562f7ab7c033eb.js +0 -1
  337. package/dashboard/out/_next/static/chunks/418fadd8a94e2fd7.js +0 -1
  338. package/dashboard/out/_next/static/chunks/42345437bb922e9c.js +0 -1
  339. package/dashboard/out/_next/static/chunks/434b6bd78c97b668.js +0 -1
  340. package/dashboard/out/_next/static/chunks/434febe897d33e2d.js +0 -1
  341. package/dashboard/out/_next/static/chunks/45d28707dd8ce1c1.js +0 -1
  342. package/dashboard/out/_next/static/chunks/4620a640e88cb1b7.js +0 -1
  343. package/dashboard/out/_next/static/chunks/468f8eb604502ea4.js +0 -1
  344. package/dashboard/out/_next/static/chunks/495f5cedf8afe823.js +0 -1
  345. package/dashboard/out/_next/static/chunks/49a89d1704d27740.js +0 -1
  346. package/dashboard/out/_next/static/chunks/49e5c37d15f63def.js +0 -1
  347. package/dashboard/out/_next/static/chunks/4a46ad186a8587ee.css +0 -2
  348. package/dashboard/out/_next/static/chunks/4a5c728574935d50.js +0 -1
  349. package/dashboard/out/_next/static/chunks/4b27ebd4d9304d8f.js +0 -1
  350. package/dashboard/out/_next/static/chunks/4b965aa320a9b358.js +0 -1
  351. package/dashboard/out/_next/static/chunks/4bb2da90bbe5794f.js +0 -1
  352. package/dashboard/out/_next/static/chunks/4d2f1c6f631e4b85.js +0 -1
  353. package/dashboard/out/_next/static/chunks/4d696d5a64dab42e.js +0 -1
  354. package/dashboard/out/_next/static/chunks/4f660dadb3f1e9e2.js +0 -1
  355. package/dashboard/out/_next/static/chunks/507b50d47f949333.js +0 -1
  356. package/dashboard/out/_next/static/chunks/50b1b7063bb044e2.js +0 -1
  357. package/dashboard/out/_next/static/chunks/50c0c2e3c4f02508.js +0 -1
  358. package/dashboard/out/_next/static/chunks/50d7ba9803e65b02.js +0 -1
  359. package/dashboard/out/_next/static/chunks/51535a6d4c98c7a4.js +0 -1
  360. package/dashboard/out/_next/static/chunks/526de6cc16c7dd2f.js +0 -1
  361. package/dashboard/out/_next/static/chunks/5307604f8632b3fd.js +0 -1
  362. package/dashboard/out/_next/static/chunks/5480bd722260f231.js +0 -1
  363. package/dashboard/out/_next/static/chunks/54c61c82e5f1dca5.js +0 -1
  364. package/dashboard/out/_next/static/chunks/555de6ac6bb9034c.js +0 -1
  365. package/dashboard/out/_next/static/chunks/562b89ee76a4b90c.js +0 -1
  366. package/dashboard/out/_next/static/chunks/5747f9a32edff429.js +0 -1
  367. package/dashboard/out/_next/static/chunks/57ee141430b4c05c.js +0 -1
  368. package/dashboard/out/_next/static/chunks/584c066a0837dd9a.js +0 -1
  369. package/dashboard/out/_next/static/chunks/5856aed4670a6253.js +0 -1
  370. package/dashboard/out/_next/static/chunks/58fe563414726511.js +0 -1
  371. package/dashboard/out/_next/static/chunks/5948196b2729b18c.js +0 -1
  372. package/dashboard/out/_next/static/chunks/5ab77c69e7306f97.js +0 -1
  373. package/dashboard/out/_next/static/chunks/5b3fa4c99d61611c.js +0 -1
  374. package/dashboard/out/_next/static/chunks/5cc87abaef616661.js +0 -1
  375. package/dashboard/out/_next/static/chunks/5dfa7913f99bb966.js +0 -1
  376. package/dashboard/out/_next/static/chunks/5e49b008432770f1.js +0 -1
  377. package/dashboard/out/_next/static/chunks/5e5a33dd81c45c47.js +0 -1
  378. package/dashboard/out/_next/static/chunks/5ee61bed638eb8a8.js +0 -1
  379. package/dashboard/out/_next/static/chunks/5eed557b9f45ae4a.js +0 -1
  380. package/dashboard/out/_next/static/chunks/60446823a7d30c1b.js +0 -1
  381. package/dashboard/out/_next/static/chunks/605150c490861442.js +0 -1
  382. package/dashboard/out/_next/static/chunks/609056d51c0bf332.js +0 -1
  383. package/dashboard/out/_next/static/chunks/60ec91dfeb50071b.js +0 -1
  384. package/dashboard/out/_next/static/chunks/61bc7be0bba6a33f.js +0 -1
  385. package/dashboard/out/_next/static/chunks/61f4a5c9ce23e55e.js +0 -1
  386. package/dashboard/out/_next/static/chunks/63aae3585be04e65.js +0 -1
  387. package/dashboard/out/_next/static/chunks/64e0e1ee7ef4f01b.js +0 -1
  388. package/dashboard/out/_next/static/chunks/66e9b4c26ff1aaaf.js +0 -1
  389. package/dashboard/out/_next/static/chunks/67068847aa1b5e98.js +0 -1
  390. package/dashboard/out/_next/static/chunks/68d7de1f2e202c26.js +0 -1
  391. package/dashboard/out/_next/static/chunks/698ca3ea1937ba4f.js +0 -1
  392. package/dashboard/out/_next/static/chunks/69eb97c24b5b6b9d.js +0 -1
  393. package/dashboard/out/_next/static/chunks/6b1ac098c228a479.js +0 -1
  394. package/dashboard/out/_next/static/chunks/6bb8020cb796bcc1.js +0 -1
  395. package/dashboard/out/_next/static/chunks/6cf8b1db17f2a155.js +0 -1
  396. package/dashboard/out/_next/static/chunks/6e7613643906ea88.js +0 -1
  397. package/dashboard/out/_next/static/chunks/6ea27ceb2e6feae5.js +0 -1
  398. package/dashboard/out/_next/static/chunks/6f95a8dbcf23dded.js +0 -1
  399. package/dashboard/out/_next/static/chunks/6fd44e759d82f64e.js +0 -1
  400. package/dashboard/out/_next/static/chunks/716ec29c268c38f6.js +0 -1
  401. package/dashboard/out/_next/static/chunks/717b399dfcf7c02c.js +0 -1
  402. package/dashboard/out/_next/static/chunks/72badd90e1c91348.js +0 -1
  403. package/dashboard/out/_next/static/chunks/72f9296dbb7ae3c4.js +0 -1
  404. package/dashboard/out/_next/static/chunks/73aa31e1144d8191.js +0 -1
  405. package/dashboard/out/_next/static/chunks/73f98ded8fe2e879.js +0 -1
  406. package/dashboard/out/_next/static/chunks/740a2e8ace15e13b.js +0 -1
  407. package/dashboard/out/_next/static/chunks/74e57c16e7304b6b.js +0 -1
  408. package/dashboard/out/_next/static/chunks/7628dead4d113df2.js +0 -1
  409. package/dashboard/out/_next/static/chunks/7717c88c07ed96e6.js +0 -1
  410. package/dashboard/out/_next/static/chunks/775581f7956d9a27.js +0 -1
  411. package/dashboard/out/_next/static/chunks/77d3b6661befdb98.js +0 -1
  412. package/dashboard/out/_next/static/chunks/78435c0e1c77fea7.js +0 -1
  413. package/dashboard/out/_next/static/chunks/791336748b9c9393.js +0 -1
  414. package/dashboard/out/_next/static/chunks/79ea68dfae65ef2f.js +0 -1
  415. package/dashboard/out/_next/static/chunks/7bae777a472eb13c.js +0 -1
  416. package/dashboard/out/_next/static/chunks/7fd847f47237a35c.js +0 -1
  417. package/dashboard/out/_next/static/chunks/804d718be0370058.css +0 -1
  418. package/dashboard/out/_next/static/chunks/807cb3c1923995ab.js +0 -1
  419. package/dashboard/out/_next/static/chunks/8286b39407d94447.js +0 -1
  420. package/dashboard/out/_next/static/chunks/84e4305b8dc830ed.js +0 -1
  421. package/dashboard/out/_next/static/chunks/850f99dbfabb53e0.js +0 -1
  422. package/dashboard/out/_next/static/chunks/85594127e66b6b7f.js +0 -1
  423. package/dashboard/out/_next/static/chunks/858c11169c183c9c.js +0 -1
  424. package/dashboard/out/_next/static/chunks/85e27005dfe4c3e3.js +0 -1
  425. package/dashboard/out/_next/static/chunks/8707bd3d8ddc1f1c.js +0 -1
  426. package/dashboard/out/_next/static/chunks/8851e5d7ef894973.js +0 -1
  427. package/dashboard/out/_next/static/chunks/88ba3782cc614989.js +0 -1
  428. package/dashboard/out/_next/static/chunks/8a0c9a181784c2ef.js +0 -1
  429. package/dashboard/out/_next/static/chunks/8ad01ae355a6e7f6.js +0 -1
  430. package/dashboard/out/_next/static/chunks/8d2ed93b0d0a4b4f.js +0 -1
  431. package/dashboard/out/_next/static/chunks/8dc352ebd5310d3c.js +0 -1
  432. package/dashboard/out/_next/static/chunks/8dd1d722c8c1a22c.js +0 -1
  433. package/dashboard/out/_next/static/chunks/8e60fe307e3e4986.js +0 -1
  434. package/dashboard/out/_next/static/chunks/8eea4dd71e25f32a.js +0 -1
  435. package/dashboard/out/_next/static/chunks/8f468a65bac34eaa.js +0 -1
  436. package/dashboard/out/_next/static/chunks/9057e5382d6a5059.js +0 -1
  437. package/dashboard/out/_next/static/chunks/931d056437805ecb.js +0 -1
  438. package/dashboard/out/_next/static/chunks/954eb11648dd8cff.js +0 -1
  439. package/dashboard/out/_next/static/chunks/955034d876d14bb3.js +0 -1
  440. package/dashboard/out/_next/static/chunks/966c4895773249f6.js +0 -1
  441. package/dashboard/out/_next/static/chunks/96aff410a6ab106c.js +0 -1
  442. package/dashboard/out/_next/static/chunks/99b396c821c1dd2d.js +0 -1
  443. package/dashboard/out/_next/static/chunks/9a255fd2cf4922ae.js +0 -1
  444. package/dashboard/out/_next/static/chunks/9b1f6aa73bc864b2.js +0 -1
  445. package/dashboard/out/_next/static/chunks/9b9ce582c533aa79.js +0 -1
  446. package/dashboard/out/_next/static/chunks/9c19bd3c773c6611.js +0 -1
  447. package/dashboard/out/_next/static/chunks/9ceeaa847eb15ca2.js +0 -1
  448. package/dashboard/out/_next/static/chunks/9d2e6e7b8b65f845.js +0 -1
  449. package/dashboard/out/_next/static/chunks/9de23802066128ff.js +0 -1
  450. package/dashboard/out/_next/static/chunks/9e327f94b3701170.js +0 -1
  451. package/dashboard/out/_next/static/chunks/9e7818421c2d455a.js +0 -1
  452. package/dashboard/out/_next/static/chunks/9e935acbcf2fb519.js +0 -1
  453. package/dashboard/out/_next/static/chunks/9ed9f68340343b51.js +0 -1
  454. package/dashboard/out/_next/static/chunks/9f94a0242455fc20.js +0 -1
  455. package/dashboard/out/_next/static/chunks/9fff46b5aaecf47e.js +0 -1
  456. package/dashboard/out/_next/static/chunks/a06d267a5c557657.js +0 -1
  457. package/dashboard/out/_next/static/chunks/a0eb8c81c54722fe.js +0 -1
  458. package/dashboard/out/_next/static/chunks/a16808e83106427d.js +0 -1
  459. package/dashboard/out/_next/static/chunks/a2215e2bc72739ef.js +0 -1
  460. package/dashboard/out/_next/static/chunks/a2de9e6696eb9c17.js +0 -1
  461. package/dashboard/out/_next/static/chunks/a33420b8c14090d6.js +0 -1
  462. package/dashboard/out/_next/static/chunks/a360bffef39d818b.js +0 -1
  463. package/dashboard/out/_next/static/chunks/a42852fdf5287cf5.js +0 -1
  464. package/dashboard/out/_next/static/chunks/a4efc88488322b67.js +0 -1
  465. package/dashboard/out/_next/static/chunks/a696a91d14101bdb.js +0 -1
  466. package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js +0 -1
  467. package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js.map +0 -1
  468. package/dashboard/out/_next/static/chunks/a705c7261712bd8e.js +0 -1
  469. package/dashboard/out/_next/static/chunks/a7d1e4b067ace180.js +0 -1
  470. package/dashboard/out/_next/static/chunks/a8590c121a7efaa5.js +0 -1
  471. package/dashboard/out/_next/static/chunks/a95953a83a6df6cf.js +0 -1
  472. package/dashboard/out/_next/static/chunks/a9d0a757d3b4afed.js +0 -1
  473. package/dashboard/out/_next/static/chunks/a9dc35514619c872.js +0 -1
  474. package/dashboard/out/_next/static/chunks/aae0253c73fba984.js +0 -193
  475. package/dashboard/out/_next/static/chunks/ab1821552066a74d.js +0 -1
  476. package/dashboard/out/_next/static/chunks/ac96bc0eccebe15a.js +0 -1
  477. package/dashboard/out/_next/static/chunks/acc03cfaaf6bb30f.js +0 -1
  478. package/dashboard/out/_next/static/chunks/acc298ae059b9fe4.js +0 -1
  479. package/dashboard/out/_next/static/chunks/ad076b6e996d250c.js +0 -1
  480. package/dashboard/out/_next/static/chunks/ae53b64af7ba16d5.js +0 -1
  481. package/dashboard/out/_next/static/chunks/ae5da7fa4bc5fa95.js +0 -1
  482. package/dashboard/out/_next/static/chunks/aefcf0eb033a155e.js +0 -1
  483. package/dashboard/out/_next/static/chunks/b12d43100ee10526.js +0 -1
  484. package/dashboard/out/_next/static/chunks/b137952dd5566a41.js +0 -1
  485. package/dashboard/out/_next/static/chunks/b2832d8a2d332a47.js +0 -1
  486. package/dashboard/out/_next/static/chunks/b417aa09c15f63c6.js +0 -1
  487. package/dashboard/out/_next/static/chunks/b48e152ba7bf6caf.js +0 -1
  488. package/dashboard/out/_next/static/chunks/b4cbef8e4714bf92.js +0 -1
  489. package/dashboard/out/_next/static/chunks/b568ff8383a37f53.js +0 -1
  490. package/dashboard/out/_next/static/chunks/b6e1495dd89a39e3.js +0 -1
  491. package/dashboard/out/_next/static/chunks/b73a21bd67528440.js +0 -1
  492. package/dashboard/out/_next/static/chunks/b77ee62bc71dcec7.js +0 -1
  493. package/dashboard/out/_next/static/chunks/b7f454615c11d4eb.js +0 -1
  494. package/dashboard/out/_next/static/chunks/b818ea32a839590f.js +0 -1
  495. package/dashboard/out/_next/static/chunks/b901ce78c1c65d66.js +0 -1
  496. package/dashboard/out/_next/static/chunks/b93d647b803be9fa.js +0 -1
  497. package/dashboard/out/_next/static/chunks/b960b09ff1ecd6bb.js +0 -1
  498. package/dashboard/out/_next/static/chunks/ba717c7779a778fc.js +0 -1
  499. package/dashboard/out/_next/static/chunks/bacb0ae7458d18b6.js +0 -1
  500. package/dashboard/out/_next/static/chunks/bb51f68b27346852.js +0 -1
  501. package/dashboard/out/_next/static/chunks/bb67f22e1ab632ae.js +0 -1
  502. package/dashboard/out/_next/static/chunks/bbae97ec58d1bb9d.js +0 -1
  503. package/dashboard/out/_next/static/chunks/bbaf38ee90307765.js +0 -1
  504. package/dashboard/out/_next/static/chunks/be01598fe1fce5db.js +0 -1
  505. package/dashboard/out/_next/static/chunks/bf4cbbc095987fec.js +0 -1
  506. package/dashboard/out/_next/static/chunks/c18f823797d57446.js +0 -1
  507. package/dashboard/out/_next/static/chunks/c1bcece34ec5b295.js +0 -1
  508. package/dashboard/out/_next/static/chunks/c1ccbc3a51adaf0a.js +0 -1
  509. package/dashboard/out/_next/static/chunks/c1f54a628f27791c.js +0 -1
  510. package/dashboard/out/_next/static/chunks/c21916bf5d232151.js +0 -1
  511. package/dashboard/out/_next/static/chunks/c27e570f0fc2f78b.js +0 -1
  512. package/dashboard/out/_next/static/chunks/c322b8005eebc0d8.js +0 -1
  513. package/dashboard/out/_next/static/chunks/c3900ac2b009b764.js +0 -1
  514. package/dashboard/out/_next/static/chunks/c3c597c8eb77ad6b.js +0 -1
  515. package/dashboard/out/_next/static/chunks/c58d45c1d88e208c.js +0 -1
  516. package/dashboard/out/_next/static/chunks/c63875998d7a655f.js +0 -1
  517. package/dashboard/out/_next/static/chunks/c6eaa7c8e7209c8e.js +0 -1
  518. package/dashboard/out/_next/static/chunks/c6f820f71162a59a.js +0 -1
  519. package/dashboard/out/_next/static/chunks/c7ce0941d1dfe7ed.js +0 -1
  520. package/dashboard/out/_next/static/chunks/c877259f784ec8e5.js +0 -1
  521. package/dashboard/out/_next/static/chunks/cb8057e86aaa1c68.js +0 -1
  522. package/dashboard/out/_next/static/chunks/ccb4e306ee4859b1.js +0 -1
  523. package/dashboard/out/_next/static/chunks/ccde62b0fa8112eb.js +0 -1
  524. package/dashboard/out/_next/static/chunks/cd421f0971c63c31.js +0 -1
  525. package/dashboard/out/_next/static/chunks/cde0317494d4adb7.js +0 -1
  526. package/dashboard/out/_next/static/chunks/cfae64434b92b8b6.js +0 -1
  527. package/dashboard/out/_next/static/chunks/cfc0e19310ec0a36.js +0 -1
  528. package/dashboard/out/_next/static/chunks/d0f344c7d0bcb59a.js +0 -1
  529. package/dashboard/out/_next/static/chunks/d1871c73e74e1f50.js +0 -1
  530. package/dashboard/out/_next/static/chunks/d18f658850711061.js +0 -1
  531. package/dashboard/out/_next/static/chunks/d25d9c48880697f6.js +0 -1
  532. package/dashboard/out/_next/static/chunks/d3f0a72bbc3060b0.js +0 -1
  533. package/dashboard/out/_next/static/chunks/d5fca429bc89060b.js +0 -1
  534. package/dashboard/out/_next/static/chunks/d6a6c75c9a4bef49.js +0 -1
  535. package/dashboard/out/_next/static/chunks/d6a8f93aa8f1e345.js +0 -1
  536. package/dashboard/out/_next/static/chunks/d7deab676b19ba0e.js +0 -1
  537. package/dashboard/out/_next/static/chunks/d80030dde88cec85.js +0 -1
  538. package/dashboard/out/_next/static/chunks/da84f9774c076ff1.js +0 -1
  539. package/dashboard/out/_next/static/chunks/da98ecc6b9b0ceb2.js +0 -1
  540. package/dashboard/out/_next/static/chunks/db550aabce60b912.js +0 -4
  541. package/dashboard/out/_next/static/chunks/dc87f77fcc029482.js +0 -1
  542. package/dashboard/out/_next/static/chunks/dd05f30acdb63a53.js +0 -1
  543. package/dashboard/out/_next/static/chunks/dea150155499b903.js +0 -1
  544. package/dashboard/out/_next/static/chunks/df4358754ff1d5e8.js +0 -1
  545. package/dashboard/out/_next/static/chunks/df8b21ff12d23b0e.js +0 -1
  546. package/dashboard/out/_next/static/chunks/df8fc68d77debf2c.js +0 -1
  547. package/dashboard/out/_next/static/chunks/df9ed1ffec90589f.js +0 -1
  548. package/dashboard/out/_next/static/chunks/dfa65ece1598f934.js +0 -1
  549. package/dashboard/out/_next/static/chunks/dfaab5cdd41a20d9.js +0 -1
  550. package/dashboard/out/_next/static/chunks/e00c03c942b5ae3e.js +0 -1
  551. package/dashboard/out/_next/static/chunks/e02d27cf679bece1.js +0 -1
  552. package/dashboard/out/_next/static/chunks/e0b747585f78513a.js +0 -1
  553. package/dashboard/out/_next/static/chunks/e19b71ca23fd7df0.js +0 -1
  554. package/dashboard/out/_next/static/chunks/e21cbe89d0cda120.js +0 -1
  555. package/dashboard/out/_next/static/chunks/e2a0386930edd34f.js +0 -1
  556. package/dashboard/out/_next/static/chunks/e375de19a36e2f38.js +0 -1
  557. package/dashboard/out/_next/static/chunks/e5241b4a6496a9e0.js +0 -1
  558. package/dashboard/out/_next/static/chunks/e569dd07c96eb4dd.js +0 -1
  559. package/dashboard/out/_next/static/chunks/e61c3ea91233f948.js +0 -1
  560. package/dashboard/out/_next/static/chunks/e73b42c5d34c4c28.js +0 -1
  561. package/dashboard/out/_next/static/chunks/e7c5b2105f651e87.js +0 -1
  562. package/dashboard/out/_next/static/chunks/e878e58a69bb01b6.js +0 -1
  563. package/dashboard/out/_next/static/chunks/e8f090a4dc571062.js +0 -1
  564. package/dashboard/out/_next/static/chunks/e98dc34dac91cdad.js +0 -1
  565. package/dashboard/out/_next/static/chunks/ea67cf7a0c5e7233.js +0 -1
  566. package/dashboard/out/_next/static/chunks/eacc98a1e3512fa9.js +0 -1
  567. package/dashboard/out/_next/static/chunks/eae9cd74d9bbed8b.js +0 -1
  568. package/dashboard/out/_next/static/chunks/eb187fd345852b34.js +0 -1
  569. package/dashboard/out/_next/static/chunks/ecea46df7a40b427.js +0 -1
  570. package/dashboard/out/_next/static/chunks/ecf48b83f4245d9c.js +0 -1
  571. package/dashboard/out/_next/static/chunks/eda41732bf966c6d.js +0 -1
  572. package/dashboard/out/_next/static/chunks/ee174a433049f43a.js +0 -1
  573. package/dashboard/out/_next/static/chunks/ee66b2d3b76de72e.js +0 -1
  574. package/dashboard/out/_next/static/chunks/ef058d3041c3d8ab.js +0 -1
  575. package/dashboard/out/_next/static/chunks/f3544b800b0d4969.js +0 -1
  576. package/dashboard/out/_next/static/chunks/f3b280e604b97509.js +0 -1
  577. package/dashboard/out/_next/static/chunks/f42e1d3693232993.js +0 -1
  578. package/dashboard/out/_next/static/chunks/f5a5fdd80166d304.js +0 -1
  579. package/dashboard/out/_next/static/chunks/f60adc5dd6169316.js +0 -1
  580. package/dashboard/out/_next/static/chunks/f6255bc2e6c68ce8.js +0 -1
  581. package/dashboard/out/_next/static/chunks/f6bb677d2d8840db.js +0 -1
  582. package/dashboard/out/_next/static/chunks/f6f3bf016239c33a.js +0 -1
  583. package/dashboard/out/_next/static/chunks/f6f57a46cd074bfe.js +0 -1
  584. package/dashboard/out/_next/static/chunks/f7feb9c1199e8cf6.js +0 -1
  585. package/dashboard/out/_next/static/chunks/f831087bf964cc3d.js +0 -1
  586. package/dashboard/out/_next/static/chunks/fa5a2f7244935aa2.js +0 -1
  587. package/dashboard/out/_next/static/chunks/fa73f36df4c38fa0.js +0 -1
  588. package/dashboard/out/_next/static/chunks/faa1461722d6a88d.js +0 -1
  589. package/dashboard/out/_next/static/chunks/fbf706b9a0edb7e6.js +0 -1
  590. package/dashboard/out/_next/static/chunks/fc2b8c8b7446bbc2.js +0 -1
  591. package/dashboard/out/_next/static/chunks/fd516f3930c128c1.js +0 -1
  592. package/dashboard/out/_next/static/chunks/fd663e7ff8de4887.js +0 -1
  593. package/dashboard/out/_next/static/chunks/fe5b656cc9bdd60e.js +0 -1
  594. package/dashboard/out/_next/static/chunks/turbopack-2f5dec4a537c0ee7.js +0 -4
  595. package/dashboard/out/_next/static/media/02263ebadd758ea4-s.8da66e7f.woff2 +0 -0
  596. package/dashboard/out/_next/static/media/2fe89d53234c61d4-s.cb53f04b.woff2 +0 -0
  597. package/dashboard/out/_next/static/media/59b15b4bcd7b1eb5-s.afa48be3.woff2 +0 -0
  598. package/dashboard/out/_next/static/media/5e05ae5b48faa55e-s.6b5ea6af.woff2 +0 -0
  599. package/dashboard/out/_next/static/media/68757d6cddeff913-s.e6cd1753.woff2 +0 -0
  600. package/dashboard/out/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2 +0 -0
  601. package/dashboard/out/_next/static/media/a7afbb44bec2bb18-s.1dcddae6.woff2 +0 -0
  602. package/dashboard/out/_next/static/media/e390973e931a41c5-s.a82ecf4e.woff2 +0 -0
  603. package/dashboard/out/_next/static/media/e532fa1b9921e1cd-s.764b43eb.woff2 +0 -0
  604. package/dashboard/out/_next/static/media/effe91970fc4db64-s.p.19510058.woff2 +0 -0
  605. package/dashboard/out/_not-found/__next._full.txt +0 -15
  606. package/dashboard/out/_not-found/__next._head.txt +0 -5
  607. package/dashboard/out/_not-found/__next._index.txt +0 -7
  608. package/dashboard/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
  609. package/dashboard/out/_not-found/__next._not-found.txt +0 -4
  610. package/dashboard/out/_not-found/__next._tree.txt +0 -2
  611. package/dashboard/out/_not-found/index.html +0 -1
  612. package/dashboard/out/_not-found/index.txt +0 -15
  613. package/dashboard/out/index.html +0 -1
  614. package/dashboard/out/index.txt +0 -21
  615. package/dashboard/out/project/__fallback/__next._full.txt +0 -19
  616. package/dashboard/out/project/__fallback/__next._head.txt +0 -5
  617. package/dashboard/out/project/__fallback/__next._index.txt +0 -7
  618. package/dashboard/out/project/__fallback/__next._tree.txt +0 -5
  619. package/dashboard/out/project/__fallback/__next.project.$d$name.__PAGE__.txt +0 -7
  620. package/dashboard/out/project/__fallback/__next.project.$d$name.txt +0 -4
  621. package/dashboard/out/project/__fallback/__next.project.txt +0 -4
  622. package/dashboard/out/project/__fallback/index.html +0 -1
  623. package/dashboard/out/project/__fallback/index.txt +0 -19
  624. package/src/__tests__/support.ts +0 -186
  625. package/src/attach.ts +0 -20
  626. package/src/cli.test.ts +0 -314
  627. package/src/command-center/discovery.test.ts +0 -265
  628. package/src/command-center/discovery.ts +0 -296
  629. package/src/command-center/index.ts +0 -31
  630. package/src/command-center/schemas.ts +0 -57
  631. package/src/command-center/server.test.ts +0 -814
  632. package/src/command-center/server.ts +0 -1427
  633. package/src/command-center/static.test.ts +0 -105
  634. package/src/command-center/static.ts +0 -122
  635. package/src/config-cli.test.ts +0 -86
  636. package/src/config.test.ts +0 -205
  637. package/src/config.ts +0 -313
  638. package/src/detect.test.ts +0 -142
  639. package/src/detect.ts +0 -248
  640. package/src/dispatch.ts +0 -102
  641. package/src/doctor.test.ts +0 -119
  642. package/src/doctor.ts +0 -167
  643. package/src/init.test.ts +0 -101
  644. package/src/init.ts +0 -211
  645. package/src/inspect.test.ts +0 -67
  646. package/src/inspect.ts +0 -212
  647. package/src/integration.test.ts.skip +0 -276
  648. package/src/js-yaml.d.ts +0 -10
  649. package/src/launch.test.ts +0 -149
  650. package/src/launch.ts +0 -583
  651. package/src/lib/auth/auth-service.test.ts +0 -178
  652. package/src/lib/auth/auth-service.ts +0 -227
  653. package/src/lib/auth/middleware.test.ts +0 -119
  654. package/src/lib/auth/middleware.ts +0 -56
  655. package/src/lib/auth/types.ts +0 -13
  656. package/src/lib/authorship.test.ts +0 -242
  657. package/src/lib/authorship.ts +0 -280
  658. package/src/lib/cast/recorder.test.ts +0 -127
  659. package/src/lib/cast/recorder.ts +0 -148
  660. package/src/lib/daemon-watchdog.ts +0 -102
  661. package/src/lib/daemon.ts +0 -431
  662. package/src/lib/dot-path.test.ts +0 -66
  663. package/src/lib/dot-path.ts +0 -17
  664. package/src/lib/errors.ts +0 -44
  665. package/src/lib/event-log.test.ts +0 -189
  666. package/src/lib/event-log.ts +0 -237
  667. package/src/lib/github-pr.ts +0 -182
  668. package/src/lib/hq/client.test.ts +0 -154
  669. package/src/lib/hq/client.ts +0 -142
  670. package/src/lib/hq/mdns.test.ts +0 -54
  671. package/src/lib/hq/mdns.ts +0 -88
  672. package/src/lib/hq/registry.test.ts +0 -237
  673. package/src/lib/hq/registry.ts +0 -145
  674. package/src/lib/hq/types.ts +0 -44
  675. package/src/lib/ipc/socket-protocol.test.ts +0 -126
  676. package/src/lib/ipc/socket-protocol.ts +0 -324
  677. package/src/lib/launch-plan.test.ts +0 -119
  678. package/src/lib/launch-plan.ts +0 -90
  679. package/src/lib/log.test.ts +0 -39
  680. package/src/lib/log.ts +0 -71
  681. package/src/lib/metrics.test.ts +0 -213
  682. package/src/lib/metrics.ts +0 -345
  683. package/src/lib/orchestrator.test.ts +0 -2358
  684. package/src/lib/orchestrator.ts +0 -1799
  685. package/src/lib/output.ts +0 -76
  686. package/src/lib/plan-store.test.ts +0 -148
  687. package/src/lib/plan-store.ts +0 -131
  688. package/src/lib/research.test.ts +0 -208
  689. package/src/lib/research.ts +0 -475
  690. package/src/lib/round-trip.test.ts +0 -341
  691. package/src/lib/session-monitor.test.ts +0 -152
  692. package/src/lib/session-monitor.ts +0 -282
  693. package/src/lib/session-options.test.ts +0 -146
  694. package/src/lib/session-options.ts +0 -100
  695. package/src/lib/shell.test.ts +0 -20
  696. package/src/lib/sizes.test.ts +0 -73
  697. package/src/lib/sizes.ts +0 -36
  698. package/src/lib/skill-registry.test.ts +0 -134
  699. package/src/lib/skill-registry.ts +0 -86
  700. package/src/lib/slugify.test.ts +0 -35
  701. package/src/lib/slugify.ts +0 -10
  702. package/src/lib/task-store.ts +0 -352
  703. package/src/lib/tmux.test.ts +0 -500
  704. package/src/lib/tmux.ts +0 -372
  705. package/src/lib/token-tracker.test.ts +0 -102
  706. package/src/lib/token-tracker.ts +0 -70
  707. package/src/lib/tunnels/cloudflare.test.ts +0 -73
  708. package/src/lib/tunnels/cloudflare.ts +0 -254
  709. package/src/lib/tunnels/manager.test.ts +0 -63
  710. package/src/lib/tunnels/manager.ts +0 -132
  711. package/src/lib/tunnels/ngrok.test.ts +0 -94
  712. package/src/lib/tunnels/ngrok.ts +0 -261
  713. package/src/lib/tunnels/tailscale.test.ts +0 -103
  714. package/src/lib/tunnels/tailscale.ts +0 -1048
  715. package/src/lib/tunnels/types.ts +0 -44
  716. package/src/lib/validation.test.ts +0 -289
  717. package/src/lib/validation.ts +0 -123
  718. package/src/lib/webhook.ts +0 -51
  719. package/src/lib/workflow-store.ts +0 -209
  720. package/src/lib/ws-v3/protocol.test.ts +0 -127
  721. package/src/lib/ws-v3/protocol.ts +0 -160
  722. package/src/lib/yaml-io.test.ts +0 -125
  723. package/src/lib/yaml-io.ts +0 -27
  724. package/src/ls.test.ts +0 -76
  725. package/src/ls.ts +0 -40
  726. package/src/metrics-cli.ts +0 -177
  727. package/src/notify.ts +0 -85
  728. package/src/orchestrator-status.ts +0 -228
  729. package/src/plan.ts +0 -117
  730. package/src/postinstall.test.ts +0 -79
  731. package/src/remote.test.ts +0 -115
  732. package/src/remote.ts +0 -148
  733. package/src/restart.ts +0 -24
  734. package/src/schemas/domain.ts +0 -422
  735. package/src/schemas/ide-config.ts +0 -148
  736. package/src/schemas/index.ts +0 -53
  737. package/src/send.test.ts +0 -70
  738. package/src/send.ts +0 -181
  739. package/src/skill.test.ts +0 -114
  740. package/src/skill.ts +0 -138
  741. package/src/status.ts +0 -66
  742. package/src/stop.test.ts +0 -151
  743. package/src/stop.ts +0 -37
  744. package/src/task.test.ts +0 -1466
  745. package/src/task.ts +0 -1143
  746. package/src/tunnel.test.ts +0 -80
  747. package/src/tunnel.ts +0 -133
  748. package/src/types.ts +0 -15
  749. package/src/ui/index.ts +0 -32
  750. package/src/ui/terminal/index.ts +0 -9
  751. package/src/ui/types.ts +0 -91
  752. package/src/ui/web/base.css +0 -80
  753. package/src/ui/web/components/Box.tsx +0 -59
  754. package/src/ui/web/components/Input.tsx +0 -32
  755. package/src/ui/web/components/ScrollBox.tsx +0 -60
  756. package/src/ui/web/components/Text.tsx +0 -28
  757. package/src/ui/web/hooks.ts +0 -106
  758. package/src/ui/web/index.ts +0 -27
  759. package/src/ui/web/render.ts +0 -77
  760. package/src/ui/web/utils/color.test.ts +0 -93
  761. package/src/ui/web/utils/color.ts +0 -27
  762. package/src/validate.test.ts +0 -385
  763. package/src/validate.ts +0 -217
  764. package/src/widgets/changes/index.tsx +0 -576
  765. package/src/widgets/config/index.tsx +0 -440
  766. package/src/widgets/costs/index.tsx +0 -216
  767. package/src/widgets/explorer/breadcrumbs.tsx +0 -77
  768. package/src/widgets/explorer/footer.tsx +0 -20
  769. package/src/widgets/explorer/header.tsx +0 -23
  770. package/src/widgets/explorer/index.tsx +0 -408
  771. package/src/widgets/explorer/tree-model.test.ts +0 -214
  772. package/src/widgets/explorer/tree-model.ts +0 -103
  773. package/src/widgets/explorer/tree.tsx +0 -156
  774. package/src/widgets/lib/config-model.ts +0 -116
  775. package/src/widgets/lib/files.test.ts +0 -103
  776. package/src/widgets/lib/files.ts +0 -88
  777. package/src/widgets/lib/git.test.ts +0 -151
  778. package/src/widgets/lib/git.ts +0 -88
  779. package/src/widgets/lib/pane-comms.test.ts +0 -178
  780. package/src/widgets/lib/pane-comms.ts +0 -207
  781. package/src/widgets/lib/theme.ts +0 -151
  782. package/src/widgets/lib/watcher.ts +0 -50
  783. package/src/widgets/mission-control/activity-feed.tsx +0 -59
  784. package/src/widgets/mission-control/agent-panel.tsx +0 -132
  785. package/src/widgets/mission-control/command-bar.tsx +0 -63
  786. package/src/widgets/mission-control/index.tsx +0 -751
  787. package/src/widgets/mission-control/task-panel.tsx +0 -238
  788. package/src/widgets/preview/index.tsx +0 -415
  789. package/src/widgets/resolve.ts +0 -40
  790. package/src/widgets/setup/agent-naming.tsx +0 -112
  791. package/src/widgets/setup/config-tree.tsx +0 -238
  792. package/src/widgets/setup/field-editor.tsx +0 -265
  793. package/src/widgets/setup/footer.tsx +0 -107
  794. package/src/widgets/setup/index.tsx +0 -340
  795. package/src/widgets/setup/layout-picker.tsx +0 -96
  796. package/src/widgets/setup/orchestrator-panel.tsx +0 -200
  797. package/src/widgets/setup/review-panel.tsx +0 -140
  798. package/src/widgets/setup/setup-model.test.ts +0 -303
  799. package/src/widgets/setup/setup-model.ts +0 -188
  800. package/src/widgets/tasks/index.tsx +0 -129
  801. package/src/widgets/tasks/task-detail.tsx +0 -309
  802. package/src/widgets/tasks/task-form.tsx +0 -193
  803. package/src/widgets/tasks/task-list.tsx +0 -205
  804. package/src/widgets/tasks/task-model.test.ts +0 -473
  805. package/src/widgets/tasks/task-model.ts +0 -157
@@ -0,0 +1,12 @@
1
+ import { basename } from "node:path";
2
+ import { getSessionName } from "../../../lib/yaml-io.js";
3
+ import { resolveProject } from "./_resolve-project.js";
4
+ export function resolveProjectContext(input, deps = {}) {
5
+ if (input.projectName) {
6
+ const project = resolveProject(input.projectName, deps);
7
+ return { dir: project.dir, sessionName: project.sessionName };
8
+ }
9
+ const dir = deps.cwd ?? process.cwd();
10
+ const sessionName = getSessionName(dir).name || basename(dir);
11
+ return { dir, sessionName };
12
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared helper: resolve a registered project by name and project the
3
+ * fields the action handlers actually consume.
4
+ *
5
+ * Lives in handlers/ so the registry stays the only public surface; tests
6
+ * import from here directly.
7
+ */
8
+ import type { RegisteredProject } from "../../../schemas/registry.ts";
9
+ export interface ResolvedProject {
10
+ name: string;
11
+ dir: string;
12
+ sessionName: string;
13
+ /**
14
+ * `true` when the project was resolved from a live tmux session
15
+ * (rather than the registry). Useful for handlers that want to
16
+ * auto-register on first action — out of scope for this slice but
17
+ * makes the intent explicit at the boundary.
18
+ */
19
+ fromLiveSession: boolean;
20
+ }
21
+ export interface ProjectResolverDeps {
22
+ /** Override for tests — must satisfy the same contract as `getProject`. */
23
+ getProject?: (name: string) => RegisteredProject | null;
24
+ /** Override the live-session existence probe. */
25
+ hasSession?: (session: string) => boolean;
26
+ /** Override the live-session cwd lookup. */
27
+ getSessionCwd?: (session: string) => string | null;
28
+ }
29
+ /**
30
+ * Resolve a project by name. The registry is the canonical source of
31
+ * truth, but as a fallback we also accept a live tmux session by the
32
+ * same name — the dashboard merges registered projects + live sessions
33
+ * in its sidebar, so action handlers must accept either. Throws an
34
+ * {@link ActionError} with code `project_not_found` when neither path
35
+ * succeeds.
36
+ *
37
+ * Note: the registry does not currently persist a session name distinct
38
+ * from the project name, so the session name returned here mirrors the
39
+ * project name. If they diverge in the future, this is the only call site
40
+ * that needs to change.
41
+ */
42
+ export declare function resolveProject(name: string, deps?: ProjectResolverDeps): ResolvedProject;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Shared helper: resolve a registered project by name and project the
3
+ * fields the action handlers actually consume.
4
+ *
5
+ * Lives in handlers/ so the registry stays the only public surface; tests
6
+ * import from here directly.
7
+ */
8
+ import { getProject as getRegisteredProject } from "../../../lib/project-registry.js";
9
+ import { getSessionCwd as getSessionCwdDefault, hasSession as hasSessionDefault, } from "@tmux-ide/tmux-bridge";
10
+ import { ActionError } from "../errors.js";
11
+ /**
12
+ * Resolve a project by name. The registry is the canonical source of
13
+ * truth, but as a fallback we also accept a live tmux session by the
14
+ * same name — the dashboard merges registered projects + live sessions
15
+ * in its sidebar, so action handlers must accept either. Throws an
16
+ * {@link ActionError} with code `project_not_found` when neither path
17
+ * succeeds.
18
+ *
19
+ * Note: the registry does not currently persist a session name distinct
20
+ * from the project name, so the session name returned here mirrors the
21
+ * project name. If they diverge in the future, this is the only call site
22
+ * that needs to change.
23
+ */
24
+ export function resolveProject(name, deps = {}) {
25
+ const lookup = deps.getProject ?? getRegisteredProject;
26
+ const project = lookup(name);
27
+ if (project) {
28
+ return {
29
+ name: project.name,
30
+ dir: project.dir,
31
+ sessionName: project.name,
32
+ fromLiveSession: false,
33
+ };
34
+ }
35
+ // Registry miss — fall back to a live tmux session of the same name.
36
+ const hasSession = deps.hasSession ?? hasSessionDefault;
37
+ if (hasSession(name)) {
38
+ const cwd = (deps.getSessionCwd ?? getSessionCwdDefault)(name);
39
+ if (cwd) {
40
+ return { name, dir: cwd, sessionName: name, fromLiveSession: true };
41
+ }
42
+ }
43
+ throw new ActionError({
44
+ code: "project_not_found",
45
+ message: `Project "${name}" not found in registry or as a live tmux session`,
46
+ details: { name },
47
+ });
48
+ }
@@ -0,0 +1,23 @@
1
+ import { type AppSettings } from "../../../lib/app-settings.ts";
2
+ import type { ActionInput, ActionResult } from "../contract.ts";
3
+ export interface RemoteAccessRestartRequest {
4
+ enabled: boolean;
5
+ bindHostname: "0.0.0.0" | "127.0.0.1";
6
+ token: string | null;
7
+ port?: number;
8
+ }
9
+ export interface RemoteAccessRestartResult {
10
+ port?: number;
11
+ host?: string;
12
+ }
13
+ export interface AppSetRemoteAccessDeps {
14
+ readSettings?: () => AppSettings;
15
+ writeSettings?: (next: AppSettings) => void;
16
+ generateToken?: () => string;
17
+ restartDaemon?: (request: RemoteAccessRestartRequest) => Promise<RemoteAccessRestartResult> | RemoteAccessRestartResult;
18
+ deferRestart?: (restart: () => void) => void;
19
+ port?: number;
20
+ host?: string;
21
+ }
22
+ export declare function setRemoteAccessRestartBackend(backend: ((request: RemoteAccessRestartRequest) => Promise<RemoteAccessRestartResult> | RemoteAccessRestartResult) | null): void;
23
+ export declare function appSetRemoteAccessHandler(input: ActionInput<"app.setRemoteAccess">, deps?: AppSetRemoteAccessDeps): Promise<ActionResult<"app.setRemoteAccess">>;
@@ -0,0 +1,67 @@
1
+ import { hostname, networkInterfaces } from "node:os";
2
+ import { generateAuthToken } from "../../../lib/auth-token.js";
3
+ import { readAppSettings, writeAppSettings } from "../../../lib/app-settings.js";
4
+ let remoteAccessRestartBackend = null;
5
+ export function setRemoteAccessRestartBackend(backend) {
6
+ remoteAccessRestartBackend = backend;
7
+ }
8
+ function currentPort(deps) {
9
+ const envPort = Number(process.env.TMUX_IDE_DAEMON_PORT);
10
+ return deps.port ?? (Number.isInteger(envPort) && envPort > 0 ? envPort : 6060);
11
+ }
12
+ function primaryLanHost() {
13
+ const interfaces = networkInterfaces();
14
+ for (const entries of Object.values(interfaces)) {
15
+ for (const entry of entries ?? []) {
16
+ if (entry.family === "IPv4" && !entry.internal)
17
+ return entry.address;
18
+ }
19
+ }
20
+ return hostname();
21
+ }
22
+ function buildUrl(host, port) {
23
+ return `http://${host}:${port}`;
24
+ }
25
+ function defaultDeferRestart(restart) {
26
+ setImmediate(restart);
27
+ }
28
+ export async function appSetRemoteAccessHandler(input, deps = {}) {
29
+ const readSettings = deps.readSettings ?? readAppSettings;
30
+ const writeSettings = deps.writeSettings ?? writeAppSettings;
31
+ const nextEnabled = input.enabled;
32
+ const current = readSettings();
33
+ const token = nextEnabled
34
+ ? (current.remoteAccess.token ?? (deps.generateToken ?? generateAuthToken)())
35
+ : null;
36
+ const next = {
37
+ ...current,
38
+ remoteAccess: { enabled: nextEnabled, token },
39
+ };
40
+ writeSettings(next);
41
+ const port = currentPort(deps);
42
+ const request = {
43
+ enabled: nextEnabled,
44
+ bindHostname: nextEnabled ? "0.0.0.0" : "127.0.0.1",
45
+ token,
46
+ port,
47
+ };
48
+ const restartDaemon = deps.restartDaemon ?? remoteAccessRestartBackend;
49
+ if (restartDaemon) {
50
+ (deps.deferRestart ?? defaultDeferRestart)(() => {
51
+ void Promise.resolve(restartDaemon(request)).catch((err) => {
52
+ console.error(`[actions] Failed to restart daemon for remote access: ${err.message ?? String(err)}`);
53
+ });
54
+ });
55
+ }
56
+ if (!nextEnabled) {
57
+ return { enabled: false, url: null, token: null, qrPayload: null };
58
+ }
59
+ const host = deps.host ?? primaryLanHost();
60
+ const url = buildUrl(host, port);
61
+ return {
62
+ enabled: true,
63
+ url,
64
+ token,
65
+ qrPayload: `${url}?token=${encodeURIComponent(token ?? "")}`,
66
+ };
67
+ }
@@ -0,0 +1,12 @@
1
+ import type { ActionInput, ActionResult } from "../contract.ts";
2
+ import { type ProjectContextDeps } from "./_project-context.ts";
3
+ interface ConfigActionDeps extends ProjectContextDeps {
4
+ broadcastConfigChanged?: (sessionName: string) => void;
5
+ }
6
+ export declare function configSetHandler(input: ActionInput<"config.set">, deps?: ConfigActionDeps): ActionResult<"config.set">;
7
+ export declare function configAddPaneHandler(input: ActionInput<"config.addPane">, deps?: ConfigActionDeps): ActionResult<"config.addPane">;
8
+ export declare function configRemovePaneHandler(input: ActionInput<"config.removePane">, deps?: ConfigActionDeps): ActionResult<"config.removePane">;
9
+ export declare function configAddRowHandler(input: ActionInput<"config.addRow">, deps?: ConfigActionDeps): ActionResult<"config.addRow">;
10
+ export declare function configEnableTeamHandler(input: ActionInput<"config.enableTeam">, deps?: ConfigActionDeps): ActionResult<"config.enableTeam">;
11
+ export declare function configDisableTeamHandler(input: ActionInput<"config.disableTeam">, deps?: ConfigActionDeps): ActionResult<"config.disableTeam">;
12
+ export {};
@@ -0,0 +1,69 @@
1
+ import { existsSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { configAddPane, configAddRow, configDisableTeam, configEnableTeam, configRemovePane, configSetValue, } from "../../../config.js";
4
+ import { broadcastConfigChanged as broadcastConfigChangedDefault } from "../../ws-events.js";
5
+ import { ActionError } from "../errors.js";
6
+ import { resolveProjectContext } from "./_project-context.js";
7
+ function mutateConfigAction(input, deps, fn) {
8
+ const context = resolveProjectContext(input, deps);
9
+ if (!existsSync(join(context.dir, "ide.yml"))) {
10
+ throw new ActionError({
11
+ code: "ide_yml_missing",
12
+ message: "ide.yml was not found",
13
+ details: { dir: context.dir },
14
+ });
15
+ }
16
+ try {
17
+ const result = fn(context.dir);
18
+ (deps.broadcastConfigChanged ?? broadcastConfigChangedDefault)(context.sessionName);
19
+ return result;
20
+ }
21
+ catch (err) {
22
+ const message = err.message ?? String(err);
23
+ throw new ActionError({
24
+ code: message.toLowerCase().includes("path")
25
+ ? "config_path_invalid"
26
+ : "config_validation_failed",
27
+ message,
28
+ cause: err,
29
+ });
30
+ }
31
+ }
32
+ export function configSetHandler(input, deps = {}) {
33
+ const config = mutateConfigAction(input, deps, (dir) => configSetValue(dir, input.path, input.value));
34
+ return { config };
35
+ }
36
+ export function configAddPaneHandler(input, deps = {}) {
37
+ const pane = {
38
+ title: input.title,
39
+ command: input.command,
40
+ type: input.type,
41
+ target: input.target,
42
+ dir: input.dir,
43
+ size: input.size,
44
+ focus: input.focus,
45
+ env: input.env,
46
+ role: input.role,
47
+ task: input.task,
48
+ specialty: input.specialty,
49
+ skill: input.skill,
50
+ };
51
+ const config = mutateConfigAction(input, deps, (dir) => configAddPane(dir, input.rowIndex, pane));
52
+ return { config };
53
+ }
54
+ export function configRemovePaneHandler(input, deps = {}) {
55
+ const config = mutateConfigAction(input, deps, (dir) => configRemovePane(dir, input.rowIndex, input.paneIndex)).config;
56
+ return { config };
57
+ }
58
+ export function configAddRowHandler(input, deps = {}) {
59
+ const config = mutateConfigAction(input, deps, (dir) => configAddRow(dir, input.size));
60
+ return { config };
61
+ }
62
+ export function configEnableTeamHandler(input, deps = {}) {
63
+ const config = mutateConfigAction(input, deps, (dir) => configEnableTeam(dir, input.name));
64
+ return { config };
65
+ }
66
+ export function configDisableTeamHandler(input, deps = {}) {
67
+ const config = mutateConfigAction(input, deps, (dir) => configDisableTeam(dir));
68
+ return { config };
69
+ }
@@ -0,0 +1,6 @@
1
+ import type { ActionInput, ActionResult } from "../contract.ts";
2
+ export interface DaemonShutdownDeps {
3
+ shutdown?: (reason: string | null) => Promise<void> | void;
4
+ }
5
+ export declare function setDaemonShutdownBackend(backend: ((reason: string | null) => Promise<void> | void) | null): void;
6
+ export declare function daemonShutdownHandler(input: ActionInput<"daemon.shutdown">, deps?: DaemonShutdownDeps): ActionResult<"daemon.shutdown">;
@@ -0,0 +1,24 @@
1
+ import { ActionError } from "../errors.js";
2
+ let shutdownBackend = null;
3
+ let shutdownInProgress = false;
4
+ export function setDaemonShutdownBackend(backend) {
5
+ shutdownBackend = backend;
6
+ if (!backend)
7
+ shutdownInProgress = false;
8
+ }
9
+ export function daemonShutdownHandler(input, deps = {}) {
10
+ if (shutdownInProgress) {
11
+ throw new ActionError({
12
+ code: "shutdown_already_in_progress",
13
+ message: "Daemon shutdown is already in progress",
14
+ });
15
+ }
16
+ shutdownInProgress = true;
17
+ const shutdown = deps.shutdown ?? shutdownBackend;
18
+ process.nextTick(() => {
19
+ void Promise.resolve(shutdown?.(input.reason ?? null)).catch((err) => {
20
+ console.error("[daemon] shutdown action failed:", err);
21
+ });
22
+ });
23
+ return { stopping: true };
24
+ }
@@ -0,0 +1,7 @@
1
+ import type { ProjectActivationOptions } from "../../../lib/active-projects.ts";
2
+ import type { ActionInput, ActionResult } from "../contract.ts";
3
+ import { type ProjectResolverDeps } from "./_resolve-project.ts";
4
+ export interface ProjectActivateDeps extends ProjectResolverDeps {
5
+ activateProject?: (name: string, options?: ProjectActivationOptions) => Promise<void>;
6
+ }
7
+ export declare function projectActivateHandler(input: ActionInput<"project.activate">, deps?: ProjectActivateDeps): Promise<ActionResult<"project.activate">>;
@@ -0,0 +1,19 @@
1
+ import { activateProject as activateProjectDefault } from "../../../lib/active-projects.js";
2
+ import { ActionError } from "../errors.js";
3
+ import { resolveProject } from "./_resolve-project.js";
4
+ export async function projectActivateHandler(input, deps = {}) {
5
+ const project = resolveProject(input.name, deps);
6
+ const activateProject = deps.activateProject ?? activateProjectDefault;
7
+ try {
8
+ await activateProject(project.name);
9
+ }
10
+ catch (err) {
11
+ throw new ActionError({
12
+ code: "internal",
13
+ message: `Failed to activate project "${project.name}": ${err.message ?? String(err)}`,
14
+ details: { projectName: project.name },
15
+ cause: err,
16
+ });
17
+ }
18
+ return { active: true, projectName: project.name };
19
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Handler: `project.launch`.
3
+ *
4
+ * Idempotent programmatic launch. Resolves the project from the registry,
5
+ * checks whether a session is already running, and returns
6
+ * `{ started: false }` without invoking the launcher when so. Otherwise
7
+ * delegates to `src/launch.ts` with `attach: false`.
8
+ */
9
+ import { type ActionInput, type ActionResult } from "../contract.ts";
10
+ import { type ProjectResolverDeps } from "./_resolve-project.ts";
11
+ export interface ProjectLaunchDeps extends ProjectResolverDeps {
12
+ hasSession?: (session: string) => boolean;
13
+ launch?: (dir: string, options: {
14
+ json: boolean;
15
+ attach: boolean;
16
+ }) => Promise<void>;
17
+ }
18
+ export declare function projectLaunchHandler(input: ActionInput<"project.launch">, deps?: ProjectLaunchDeps): Promise<ActionResult<"project.launch">>;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Handler: `project.launch`.
3
+ *
4
+ * Idempotent programmatic launch. Resolves the project from the registry,
5
+ * checks whether a session is already running, and returns
6
+ * `{ started: false }` without invoking the launcher when so. Otherwise
7
+ * delegates to `src/launch.ts` with `attach: false`.
8
+ */
9
+ import { hasSession as hasSessionDefault } from "@tmux-ide/tmux-bridge";
10
+ import { launch as launchDefault } from "../../../launch.js";
11
+ import { ActionError } from "../errors.js";
12
+ import { resolveProject } from "./_resolve-project.js";
13
+ import { getDefaultWorkspaceRegistry } from "../../../lib/workspace-registry.js";
14
+ /**
15
+ * Ensure the workspace registry knows about this project. The project
16
+ * registry (`registerProject`) only updates the project-list — but
17
+ * `discoverSessions` / `/api/project/:name` consult the WORKSPACE registry
18
+ * before returning anything. Without this sync, every dashboard fetch
19
+ * 404s for projects that weren't passed as the daemon's primary sessionName.
20
+ */
21
+ function ensureWorkspaceRegistered(name, sessionName, dir) {
22
+ const reg = getDefaultWorkspaceRegistry();
23
+ if (reg.has(name))
24
+ return;
25
+ try {
26
+ reg.add({ name, sessionName, projectDir: dir });
27
+ }
28
+ catch {
29
+ // ALREADY_EXISTS or persistence error — non-fatal; the next discover
30
+ // pass will pick it up if persistence eventually succeeds.
31
+ }
32
+ }
33
+ export async function projectLaunchHandler(input, deps = {}) {
34
+ const project = resolveProject(input.name, deps);
35
+ const hasSession = deps.hasSession ?? hasSessionDefault;
36
+ if (hasSession(project.sessionName)) {
37
+ // Session already running — but the workspace registry may still be
38
+ // stale (e.g. tmux session created via curl, or daemon restarted).
39
+ // Sync before returning so /api/project/:name resolves.
40
+ ensureWorkspaceRegistered(project.name, project.sessionName, project.dir);
41
+ return { sessionName: project.sessionName, started: false };
42
+ }
43
+ const launch = deps.launch ?? launchDefault;
44
+ try {
45
+ await launch(project.dir, { json: false, attach: false });
46
+ }
47
+ catch (err) {
48
+ throw new ActionError({
49
+ code: "launch_failed",
50
+ message: `Failed to launch session "${project.sessionName}": ${err.message ?? String(err)}`,
51
+ details: { sessionName: project.sessionName, dir: project.dir },
52
+ cause: err,
53
+ });
54
+ }
55
+ // Freshly launched — workspace registry definitely needs the entry.
56
+ ensureWorkspaceRegistered(project.name, project.sessionName, project.dir);
57
+ return { sessionName: project.sessionName, started: true };
58
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Handler: `project.openTerminal`.
3
+ *
4
+ * Resolves the project's cwd from the registry, ensures the tmux session is
5
+ * running (launching it if necessary), and asserts the resolved cwd is a
6
+ * real directory. Returns the dashboard's stable terminal tab id together
7
+ * with the resolved cwd so the dashboard does not need to stitch together
8
+ * the registry / session / cwd paths itself.
9
+ *
10
+ * This is the action that swallows the seam where the dashboard previously
11
+ * juggled `/api/projects` + `/api/project/:name` to figure out where to
12
+ * open a terminal.
13
+ */
14
+ import type { Stats } from "node:fs";
15
+ import { type ActionInput, type ActionResult } from "../contract.ts";
16
+ import { type ProjectResolverDeps } from "./_resolve-project.ts";
17
+ /**
18
+ * Build the dashboard-facing terminal tab id for a session's default
19
+ * terminal. Mirrors the layout state convention `terminal:<session>:default`.
20
+ * Centralised here so both this handler and tests share the source of truth.
21
+ */
22
+ export declare function defaultTerminalTabId(sessionName: string): string;
23
+ export interface ProjectOpenTerminalDeps extends ProjectResolverDeps {
24
+ hasSession?: (session: string) => boolean;
25
+ launch?: (dir: string, options: {
26
+ json: boolean;
27
+ attach: boolean;
28
+ }) => Promise<void>;
29
+ statCwd?: (cwd: string) => Stats;
30
+ activateProject?: (name: string) => Promise<void>;
31
+ }
32
+ export declare function projectOpenTerminalHandler(input: ActionInput<"project.openTerminal">, deps?: ProjectOpenTerminalDeps): Promise<ActionResult<"project.openTerminal">>;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Handler: `project.openTerminal`.
3
+ *
4
+ * Resolves the project's cwd from the registry, ensures the tmux session is
5
+ * running (launching it if necessary), and asserts the resolved cwd is a
6
+ * real directory. Returns the dashboard's stable terminal tab id together
7
+ * with the resolved cwd so the dashboard does not need to stitch together
8
+ * the registry / session / cwd paths itself.
9
+ *
10
+ * This is the action that swallows the seam where the dashboard previously
11
+ * juggled `/api/projects` + `/api/project/:name` to figure out where to
12
+ * open a terminal.
13
+ */
14
+ import { hasSession as hasSessionDefault } from "@tmux-ide/tmux-bridge";
15
+ import { launch as launchDefault } from "../../../launch.js";
16
+ import { activateProject as activateProjectDefault } from "../../../lib/active-projects.js";
17
+ import { assertValidCwd, TerminalCwdError } from "../../../server/pty-bridge.js";
18
+ import { ActionError, actionErrorFromCwdError } from "../errors.js";
19
+ import { resolveProject } from "./_resolve-project.js";
20
+ const TERMINAL_TAB_ID_PREFIX = "terminal";
21
+ const TERMINAL_TAB_ID_SUFFIX = "default";
22
+ /**
23
+ * Build the dashboard-facing terminal tab id for a session's default
24
+ * terminal. Mirrors the layout state convention `terminal:<session>:default`.
25
+ * Centralised here so both this handler and tests share the source of truth.
26
+ */
27
+ export function defaultTerminalTabId(sessionName) {
28
+ return `${TERMINAL_TAB_ID_PREFIX}:${sessionName}:${TERMINAL_TAB_ID_SUFFIX}`;
29
+ }
30
+ export async function projectOpenTerminalHandler(input, deps = {}) {
31
+ const project = resolveProject(input.name, deps);
32
+ const activateProject = deps.activateProject ?? activateProjectDefault;
33
+ await activateProject(project.name);
34
+ // Always validate cwd up-front. A missing/broken project dir is the most
35
+ // common cause of the bugs this slice exists to eliminate.
36
+ try {
37
+ assertValidCwd(project.dir, deps.statCwd);
38
+ }
39
+ catch (err) {
40
+ if (err instanceof TerminalCwdError) {
41
+ throw actionErrorFromCwdError(err);
42
+ }
43
+ throw err;
44
+ }
45
+ const hasSession = deps.hasSession ?? hasSessionDefault;
46
+ const launch = deps.launch ?? launchDefault;
47
+ let launched = false;
48
+ if (!hasSession(project.sessionName)) {
49
+ try {
50
+ // attach: false — we run inside the daemon HTTP server, not a TTY.
51
+ await launch(project.dir, { json: false, attach: false });
52
+ launched = true;
53
+ }
54
+ catch (err) {
55
+ throw new ActionError({
56
+ code: "launch_failed",
57
+ message: `Failed to launch session "${project.sessionName}": ${err.message ?? String(err)}`,
58
+ details: { sessionName: project.sessionName, dir: project.dir },
59
+ cause: err,
60
+ });
61
+ }
62
+ }
63
+ return {
64
+ sessionName: project.sessionName,
65
+ cwd: project.dir,
66
+ terminalTabId: defaultTerminalTabId(project.sessionName),
67
+ launched,
68
+ };
69
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Handler: `project.restart`.
3
+ *
4
+ * Programmatic version of `tmux-ide restart`. Stops the session monitor +
5
+ * kills the existing tmux session (when present), then re-launches with
6
+ * `attach: false`. Always reports `restarted: true` on success — the call
7
+ * is meaningful whether or not a session was previously running.
8
+ */
9
+ import { type ActionInput, type ActionResult } from "../contract.ts";
10
+ import { type ProjectResolverDeps } from "./_resolve-project.ts";
11
+ export interface ProjectRestartDeps extends ProjectResolverDeps {
12
+ restart?: (dir: string, options: {
13
+ json?: boolean;
14
+ attach?: boolean;
15
+ }) => Promise<void>;
16
+ }
17
+ export declare function projectRestartHandler(input: ActionInput<"project.restart">, deps?: ProjectRestartDeps): Promise<ActionResult<"project.restart">>;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Handler: `project.restart`.
3
+ *
4
+ * Programmatic version of `tmux-ide restart`. Stops the session monitor +
5
+ * kills the existing tmux session (when present), then re-launches with
6
+ * `attach: false`. Always reports `restarted: true` on success — the call
7
+ * is meaningful whether or not a session was previously running.
8
+ */
9
+ import { restart as restartDefault } from "../../../restart.js";
10
+ import { ActionError } from "../errors.js";
11
+ import { resolveProject } from "./_resolve-project.js";
12
+ export async function projectRestartHandler(input, deps = {}) {
13
+ const project = resolveProject(input.name, deps);
14
+ const restart = deps.restart ?? restartDefault;
15
+ try {
16
+ await restart(project.dir, { json: false, attach: false });
17
+ }
18
+ catch (err) {
19
+ throw new ActionError({
20
+ code: "launch_failed",
21
+ message: `Failed to restart session "${project.sessionName}": ${err.message ?? String(err)}`,
22
+ details: { sessionName: project.sessionName, dir: project.dir },
23
+ cause: err,
24
+ });
25
+ }
26
+ return { sessionName: project.sessionName, restarted: true };
27
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Handler: `project.stop`.
3
+ *
4
+ * Wraps the CLI `tmux-ide stop` flow programmatically: stop the session
5
+ * monitor, then `killSession`. Idempotent —
6
+ * returns `{ stopped: false }` when no session was running rather than
7
+ * throwing, so the dashboard can call this freely.
8
+ */
9
+ import { type ActionInput, type ActionResult } from "../contract.ts";
10
+ import { type ProjectResolverDeps } from "./_resolve-project.ts";
11
+ export interface ProjectStopDeps extends ProjectResolverDeps {
12
+ hasSession?: (session: string) => boolean;
13
+ killSession?: (session: string) => {
14
+ stopped: boolean;
15
+ reason: string | null;
16
+ };
17
+ stopSessionMonitor?: (session: string) => void;
18
+ /**
19
+ * Legacy hook retained for tests. Per-session daemon cleanup is no longer
20
+ * needed because the canonical daemon is app/headless owned.
21
+ */
22
+ killOrphanDaemons?: (session: string) => void;
23
+ }
24
+ export declare function projectStopHandler(input: ActionInput<"project.stop">, deps?: ProjectStopDeps): Promise<ActionResult<"project.stop">>;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Handler: `project.stop`.
3
+ *
4
+ * Wraps the CLI `tmux-ide stop` flow programmatically: stop the session
5
+ * monitor, then `killSession`. Idempotent —
6
+ * returns `{ stopped: false }` when no session was running rather than
7
+ * throwing, so the dashboard can call this freely.
8
+ */
9
+ import { hasSession as hasSessionDefault, killSession as killSessionDefault, stopSessionMonitor as stopSessionMonitorDefault, } from "@tmux-ide/tmux-bridge";
10
+ import { ActionError } from "../errors.js";
11
+ import { resolveProject } from "./_resolve-project.js";
12
+ function defaultKillOrphanDaemons(_session) {
13
+ // No-op: per-session daemons are no longer spawned.
14
+ }
15
+ export async function projectStopHandler(input, deps = {}) {
16
+ const project = resolveProject(input.name, deps);
17
+ const hasSession = deps.hasSession ?? hasSessionDefault;
18
+ if (!hasSession(project.sessionName)) {
19
+ return { sessionName: project.sessionName, stopped: false };
20
+ }
21
+ const stopSessionMonitor = deps.stopSessionMonitor ?? stopSessionMonitorDefault;
22
+ const killSession = deps.killSession ?? killSessionDefault;
23
+ const killOrphanDaemons = deps.killOrphanDaemons ?? defaultKillOrphanDaemons;
24
+ try {
25
+ stopSessionMonitor(project.sessionName);
26
+ killOrphanDaemons(project.sessionName);
27
+ const result = killSession(project.sessionName);
28
+ return { sessionName: project.sessionName, stopped: result.stopped };
29
+ }
30
+ catch (err) {
31
+ throw new ActionError({
32
+ code: "stop_failed",
33
+ message: `Failed to stop session "${project.sessionName}": ${err.message ?? String(err)}`,
34
+ details: { sessionName: project.sessionName },
35
+ cause: err,
36
+ });
37
+ }
38
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Handler: `terminal.respawn`.
3
+ *
4
+ * Server-side equivalent of the dashboard's `bridge.restartWith(...)` call.
5
+ * Looks up the PTY bridge by id; if a cwd is supplied it validates the
6
+ * directory and passes it through; otherwise it respawns at the bridge's
7
+ * recorded `lastCwd`.
8
+ *
9
+ * Why server-side? The dashboard previously had to do the cwd resolution
10
+ * itself before it could ask the bridge to restart. Centralising it here
11
+ * keeps the cwd contract on the server, where it has direct access to the
12
+ * project registry and the bridge's filesystem.
13
+ */
14
+ import { type PtyBridgeRegistry } from "../../../server/ws-route.ts";
15
+ import type { Stats } from "node:fs";
16
+ import { type ActionInput, type ActionResult } from "../contract.ts";
17
+ export interface TerminalRespawnDeps {
18
+ registry?: PtyBridgeRegistry;
19
+ /** Override for the bridge dimensions used on respawn. Tests inject these. */
20
+ cols?: number;
21
+ rows?: number;
22
+ statCwd?: (cwd: string) => Stats;
23
+ }
24
+ export declare function terminalRespawnHandler(input: ActionInput<"terminal.respawn">, deps?: TerminalRespawnDeps): ActionResult<"terminal.respawn">;