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,406 @@
1
+ /**
2
+ * `tmux-ide restore` — rebuild the fleet from the last snapshot.
3
+ *
4
+ * The chrome updater continuously writes `~/.tmux-ide/snapshot.json`
5
+ * ({@link ./tui/chrome/snapshot.ts}); when the tmux server dies for real, this
6
+ * rebuilds every session it recorded — windows, split layouts, per-pane cwds,
7
+ * and titles — and re-adopts the sessions that were adopted.
8
+ *
9
+ * Safety first: an already-live session is NEVER clobbered (it's skipped), and
10
+ * recorded pane commands are NOT auto-run unless `--run-commands` is passed —
11
+ * a restored agent pane is a plain shell in the right directory with its title
12
+ * restored.
13
+ *
14
+ * `--resume-agents` (or `{ "restore": { "resumeAgents": true } }` in
15
+ * `~/.tmux-ide/config.json`) layers native agent-resume on top: a rebuilt
16
+ * claude pane that carries a recorded `@agent_session_id` relaunches as
17
+ * `claude --resume <id>`, reviving the actual conversation rather than opening
18
+ * a fresh shell. See {@link paneResumeCommand} for the exact decision table.
19
+ *
20
+ * {@link buildRestorePlan} + {@link paneResumeCommand} + {@link restorePrefs}
21
+ * are PURE (unit-tested); {@link restore} is the thin io wrapper that reads the
22
+ * snapshot + registry + live tmux + config, then executes the plan.
23
+ */
24
+ import { runTmux } from "@tmux-ide/tmux-bridge";
25
+ import { appConfigPath, loadAppConfig, parseAppConfig } from "./lib/app-config.js";
26
+ import { IdeError } from "./lib/errors.js";
27
+ import { listProjects } from "./lib/project-registry.js";
28
+ import { adoptSession } from "./tui/chrome/statusline.js";
29
+ import { readSnapshot, } from "./tui/chrome/snapshot.js";
30
+ /**
31
+ * PURE — decide what to do with each snapshot session.
32
+ *
33
+ * Sessions are processed in snapshot order. A name that's already live is
34
+ * skipped. Otherwise, when `ideProjects` maps the name to a directory (a
35
+ * registry project whose dir has an ide.yml), we prefer relaunching from that
36
+ * config; failing that, we raw-rebuild from the recorded windows/panes.
37
+ */
38
+ export function buildRestorePlan(snapshot, liveSessionNames, ideProjects = new Map()) {
39
+ const live = new Set(liveSessionNames);
40
+ const actions = [];
41
+ let paneCount = 0;
42
+ for (const session of snapshot.sessions) {
43
+ if (live.has(session.name)) {
44
+ actions.push({ kind: "skip", session: session.name });
45
+ continue;
46
+ }
47
+ const dir = ideProjects.get(session.name);
48
+ if (dir) {
49
+ actions.push({ kind: "launch", session: session.name, dir });
50
+ continue;
51
+ }
52
+ actions.push({ kind: "rebuild", session });
53
+ for (const window of session.windows)
54
+ paneCount += window.panes.length;
55
+ }
56
+ return { actions, paneCount };
57
+ }
58
+ // ---------------------------------------------------------------------------
59
+ // Pure — agent resume decision
60
+ // ---------------------------------------------------------------------------
61
+ /** A session id is trusted only if it's the uuid alphabet — nothing shell-active. */
62
+ const SAFE_SESSION_ID = /^[A-Za-z0-9-]+$/;
63
+ /**
64
+ * PURE — the command to relaunch a pane so its agent conversation is revived,
65
+ * or `null` for "no resume — leave it a plain shell (or replay `command`)".
66
+ *
67
+ * Decision table (only fires when `resumeAgents` is on):
68
+ * - claude + a recorded `@agent_session_id` → `claude --resume <id>`. The id is
69
+ * a uuid, but we don't trust the snapshot: unless it matches
70
+ * {@link SAFE_SESSION_ID} (`[A-Za-z0-9-]`) we bail to `null` rather than risk
71
+ * feeding shell metacharacters into send-keys.
72
+ * - claude with NO session id → `null`. `claude --continue` would be too
73
+ * magical here (it resumes the most-recent conversation in the cwd, which may
74
+ * belong to a different pane); a fresh shell is the safe, predictable default.
75
+ * - any other agent → `null`. No native resume story yet.
76
+ * - `resumeAgents` off → always `null`.
77
+ */
78
+ export function paneResumeCommand(pane, opts) {
79
+ if (!opts.resumeAgents)
80
+ return null;
81
+ if (pane.agent !== "claude")
82
+ return null;
83
+ const id = pane.agentSessionId;
84
+ if (!id || !SAFE_SESSION_ID.test(id))
85
+ return null;
86
+ return `claude --resume ${id}`;
87
+ }
88
+ /** PURE — how many of a session's panes would resume under `resumeAgents`. */
89
+ export function countResumableAgents(session, resumeAgents) {
90
+ let n = 0;
91
+ for (const window of session.windows) {
92
+ for (const pane of window.panes) {
93
+ if (paneResumeCommand(pane, { resumeAgents }))
94
+ n++;
95
+ }
96
+ }
97
+ return n;
98
+ }
99
+ /** Default: don't resume agents unless asked (flag or config). */
100
+ export const DEFAULT_RESTORE_PREFS = { resumeAgents: false };
101
+ /**
102
+ * PURE — read `{ restore: { resumeAgents } }` out of a parsed config, falling
103
+ * back to {@link DEFAULT_RESTORE_PREFS} for anything missing or mistyped.
104
+ * Delegates to the shared {@link parseAppConfig} so restore parsing can't drift
105
+ * from the rest of the config.
106
+ */
107
+ export function restorePrefs(parsedConfig) {
108
+ return parseAppConfig(parsedConfig).restore;
109
+ }
110
+ /** Absolute path to the shared config (honors `TMUX_IDE_CONFIG`). */
111
+ export function restoreConfigPath() {
112
+ return appConfigPath();
113
+ }
114
+ /** io — resolve restore prefs from the shared app config; missing/invalid → defaults. */
115
+ export function readRestorePrefs() {
116
+ return loadAppConfig().restore;
117
+ }
118
+ // ---------------------------------------------------------------------------
119
+ // io — execute a rebuild action against live tmux
120
+ // ---------------------------------------------------------------------------
121
+ function tmuxCapture(args) {
122
+ return runTmux(args, { encoding: "utf-8" }).toString().trim();
123
+ }
124
+ /**
125
+ * Raw-rebuild one session from its snapshot: create the session + its first
126
+ * window, add the remaining windows, split each window's panes (with their
127
+ * cwds), apply the recorded layout, restore titles, set the active window, and
128
+ * relaunch each pane per {@link RebuildOptions}.
129
+ *
130
+ * Per pane, at most ONE command is ever sent: an agent-resume command (when
131
+ * eligible under {@link paneResumeCommand}) takes precedence and, if it fires,
132
+ * suppresses the `--run-commands` replay for that pane. Returns the titles of
133
+ * the panes that were resumed (for the report).
134
+ */
135
+ function rebuildSession(session, opts) {
136
+ const { runCommands, resumeAgents } = opts;
137
+ const resumedTitles = [];
138
+ const windows = session.windows;
139
+ if (windows.length === 0) {
140
+ runTmux(["new-session", "-d", "-s", session.name, "-c", session.cwd]);
141
+ return resumedTitles;
142
+ }
143
+ windows.forEach((window, w) => {
144
+ const windowCwd = window.panes[0]?.cwd || session.cwd;
145
+ // First window comes from new-session; the rest are added detached.
146
+ const windowId = w === 0
147
+ ? tmuxCapture([
148
+ "new-session",
149
+ "-d",
150
+ "-P",
151
+ "-F",
152
+ "#{window_id}",
153
+ "-s",
154
+ session.name,
155
+ "-c",
156
+ windowCwd,
157
+ ])
158
+ : tmuxCapture([
159
+ "new-window",
160
+ "-d",
161
+ "-P",
162
+ "-F",
163
+ "#{window_id}",
164
+ "-t",
165
+ `${session.name}:`,
166
+ "-c",
167
+ windowCwd,
168
+ ]);
169
+ // The window opens with one pane (snapshot pane 0). Create the rest; the
170
+ // layout string below fixes geometry, so split direction is irrelevant.
171
+ const paneIds = [tmuxCapture(["display-message", "-p", "-t", windowId, "#{pane_id}"])];
172
+ for (let p = 1; p < window.panes.length; p++) {
173
+ const paneCwd = window.panes[p].cwd || windowCwd;
174
+ paneIds.push(tmuxCapture([
175
+ "split-window",
176
+ "-d",
177
+ "-P",
178
+ "-F",
179
+ "#{pane_id}",
180
+ "-t",
181
+ paneIds[p - 1],
182
+ "-c",
183
+ paneCwd,
184
+ ]));
185
+ }
186
+ // Restore geometry from the recorded layout (tmux accepts the checksummed
187
+ // #{window_layout} string verbatim), then name the window.
188
+ if (window.layout)
189
+ runTmux(["select-layout", "-t", windowId, window.layout]);
190
+ if (window.name)
191
+ runTmux(["rename-window", "-t", windowId, window.name]);
192
+ // Restore per-pane titles (and optionally replay commands). Titles are
193
+ // paired by creation order, which matches the snapshot's index order.
194
+ window.panes.forEach((pane, p) => {
195
+ const paneId = paneIds[p];
196
+ if (!paneId)
197
+ return;
198
+ if (pane.title)
199
+ runTmux(["select-pane", "-t", paneId, "-T", pane.title]);
200
+ // Re-stamp agent identity so the next snapshot keeps it and 0037's
201
+ // agent-resume can find the conversation to revive.
202
+ if (pane.agentSessionId) {
203
+ runTmux(["set-option", "-p", "-t", paneId, "@agent_session_id", pane.agentSessionId]);
204
+ }
205
+ if (pane.agent) {
206
+ runTmux(["set-option", "-p", "-t", paneId, "@agent_hint", pane.agent]);
207
+ }
208
+ // Resume the agent conversation if eligible; that takes precedence over
209
+ // the recorded-command replay so a pane is never sent two commands.
210
+ const resumeCmd = paneResumeCommand(pane, { resumeAgents });
211
+ if (resumeCmd) {
212
+ runTmux(["send-keys", "-t", paneId, "-l", "--", resumeCmd]);
213
+ runTmux(["send-keys", "-t", paneId, "Enter"]);
214
+ resumedTitles.push(pane.title || paneId);
215
+ }
216
+ else if (runCommands && pane.command) {
217
+ runTmux(["send-keys", "-t", paneId, "-l", "--", pane.command]);
218
+ runTmux(["send-keys", "-t", paneId, "Enter"]);
219
+ }
220
+ });
221
+ });
222
+ // Set the active window to whatever the snapshot had focused.
223
+ const activeIndex = windows.findIndex((w) => w.active);
224
+ if (activeIndex >= 0) {
225
+ runTmux(["select-window", "-t", `${session.name}:${windows[activeIndex].index}`]);
226
+ }
227
+ return resumedTitles;
228
+ }
229
+ // ---------------------------------------------------------------------------
230
+ // io — the command
231
+ // ---------------------------------------------------------------------------
232
+ /** Registry sessions whose dir has an ide.yml → name -> dir (the launch path). */
233
+ function ideBackedProjects() {
234
+ const map = new Map();
235
+ try {
236
+ for (const project of listProjects()) {
237
+ if (project.hasIdeYml && project.dir)
238
+ map.set(project.name, project.dir);
239
+ }
240
+ }
241
+ catch {
242
+ // no registry → nothing prefers a launch; everything raw-rebuilds
243
+ }
244
+ return map;
245
+ }
246
+ function liveSessions() {
247
+ try {
248
+ const raw = tmuxCapture(["list-sessions", "-F", "#{session_name}"]);
249
+ return raw ? raw.split("\n").filter(Boolean) : [];
250
+ }
251
+ catch {
252
+ // no server / no sessions → nothing is live, rebuild everything
253
+ return [];
254
+ }
255
+ }
256
+ /**
257
+ * Rebuild the fleet from the last snapshot. Missing snapshot → friendly exit 1.
258
+ * `dryRun` prints the plan without touching tmux; `runCommands` opts into
259
+ * replaying recorded pane commands (off by default for safety); `resumeAgents`
260
+ * (flag ORed with the `~/.tmux-ide/config.json` default) revives agent
261
+ * conversations via `claude --resume <id>`.
262
+ */
263
+ export async function restore({ json = false, dryRun = false, runCommands = false, resumeAgents = false, } = {}) {
264
+ const snapshot = readSnapshot();
265
+ if (!snapshot) {
266
+ throw new IdeError("no snapshot yet — the updater writes one every ~30s while any session is adopted", { code: "NO_SNAPSHOT", exitCode: 1 });
267
+ }
268
+ // The flag forces resume on; config makes it the default. No negative flag.
269
+ const resume = resumeAgents || readRestorePrefs().resumeAgents;
270
+ const plan = buildRestorePlan(snapshot, liveSessions(), ideBackedProjects());
271
+ if (dryRun) {
272
+ reportPlan(plan, snapshot, {
273
+ json,
274
+ dryRun: true,
275
+ restored: [],
276
+ launched: [],
277
+ resumed: [],
278
+ resumeAgents: resume,
279
+ });
280
+ return;
281
+ }
282
+ const restored = [];
283
+ const launched = [];
284
+ const resumed = [];
285
+ const recordResumed = (session, panes) => {
286
+ if (panes.length)
287
+ resumed.push({ session, panes });
288
+ };
289
+ for (const action of plan.actions) {
290
+ if (action.kind === "skip")
291
+ continue;
292
+ if (action.kind === "launch") {
293
+ const ok = await launchProject(action.dir, json);
294
+ if (ok)
295
+ launched.push(action.session);
296
+ else {
297
+ // Launch failed — fall back to a raw rebuild from the snapshot so the
298
+ // session still comes back.
299
+ const snap = snapshot.sessions.find((s) => s.name === action.session);
300
+ if (snap) {
301
+ recordResumed(snap.name, rebuildSession(snap, { runCommands, resumeAgents: resume }));
302
+ if (snap.adopted)
303
+ safeAdopt(snap.name);
304
+ restored.push(action.session);
305
+ }
306
+ }
307
+ continue;
308
+ }
309
+ recordResumed(action.session.name, rebuildSession(action.session, { runCommands, resumeAgents: resume }));
310
+ if (action.session.adopted)
311
+ safeAdopt(action.session.name);
312
+ restored.push(action.session.name);
313
+ }
314
+ reportPlan(plan, snapshot, {
315
+ json,
316
+ dryRun: false,
317
+ restored,
318
+ launched,
319
+ resumed,
320
+ resumeAgents: resume,
321
+ });
322
+ }
323
+ /** Adopt a restored session into the chrome; never let a chrome failure abort restore. */
324
+ function safeAdopt(session) {
325
+ try {
326
+ adoptSession(session);
327
+ }
328
+ catch {
329
+ // chrome is optional — the session is already rebuilt
330
+ }
331
+ }
332
+ /**
333
+ * Relaunch a project from its ide.yml (config is the source of truth). Returns
334
+ * false on any failure so the caller can fall back to a raw rebuild. Launch's
335
+ * own stdout is swallowed in `--json` mode so the report stays parseable.
336
+ */
337
+ async function launchProject(dir, json) {
338
+ const restoreLog = console.log;
339
+ if (json)
340
+ console.log = () => { };
341
+ try {
342
+ const { launch } = await import("./launch.js");
343
+ await launch(dir, { attach: false });
344
+ return true;
345
+ }
346
+ catch {
347
+ return false;
348
+ }
349
+ finally {
350
+ console.log = restoreLog;
351
+ }
352
+ }
353
+ function reportPlan(plan, snapshot, { json, dryRun, restored, launched, resumed, resumeAgents }) {
354
+ const skipped = plan.actions.filter((a) => a.kind === "skip").map((a) => a.session);
355
+ const willLaunch = plan.actions.filter((a) => a.kind === "launch").map((a) => a.session);
356
+ const willRebuild = plan.actions.filter((a) => a.kind === "rebuild").map((a) => a.session.name);
357
+ const resumedPanes = resumed.reduce((n, r) => n + r.panes.length, 0);
358
+ if (json) {
359
+ console.log(JSON.stringify({
360
+ dryRun,
361
+ savedAt: snapshot.savedAt,
362
+ skipped,
363
+ launched: dryRun ? willLaunch : launched,
364
+ restored: dryRun ? willRebuild : restored,
365
+ panes: plan.paneCount,
366
+ resumeAgents,
367
+ resumedPanes,
368
+ resumed,
369
+ }, null, 2));
370
+ return;
371
+ }
372
+ if (dryRun) {
373
+ console.log(`Restore plan (snapshot from ${snapshot.savedAt}):`);
374
+ for (const action of plan.actions) {
375
+ if (action.kind === "skip") {
376
+ console.log(` skip ${action.session} (already running)`);
377
+ }
378
+ else if (action.kind === "launch") {
379
+ console.log(` launch ${action.session} (ide.yml at ${action.dir})`);
380
+ }
381
+ else {
382
+ const w = action.session.windows.length;
383
+ const p = action.session.windows.reduce((n, win) => n + win.panes.length, 0);
384
+ const wouldResume = countResumableAgents(action.session, resumeAgents);
385
+ const resumeNote = wouldResume
386
+ ? `, would resume ${wouldResume} agent${wouldResume === 1 ? "" : "s"}`
387
+ : "";
388
+ console.log(` rebuild ${action.session.name} (${w} window${w === 1 ? "" : "s"}, ${p} pane${p === 1 ? "" : "s"}${resumeNote})`);
389
+ }
390
+ }
391
+ return;
392
+ }
393
+ const resumedBySession = new Map(resumed.map((r) => [r.session, r.panes.length]));
394
+ const resumeSuffix = (name) => {
395
+ const n = resumedBySession.get(name) ?? 0;
396
+ return n ? ` (resumed ${n} agent${n === 1 ? "" : "s"})` : "";
397
+ };
398
+ const parts = [];
399
+ if (restored.length)
400
+ parts.push(`rebuilt ${restored.map((s) => `${s}${resumeSuffix(s)}`).join(", ")}`);
401
+ if (launched.length)
402
+ parts.push(`launched ${launched.join(", ")}`);
403
+ if (skipped.length)
404
+ parts.push(`skipped ${skipped.join(", ")} (already running)`);
405
+ console.log(parts.length ? `Restored: ${parts.join("; ")}` : "Nothing to restore.");
406
+ }
@@ -0,0 +1 @@
1
+ export * from "@tmux-ide/contracts";
@@ -0,0 +1,2 @@
1
+ // Schemas extracted to @tmux-ide/contracts (T056). Re-export shim.
2
+ export * from "@tmux-ide/contracts";
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Filesystem browsing contracts. Powers the dashboard's directory picker
3
+ * (used in AddProjectDialog and elsewhere). The shape mirrors t3code's
4
+ * `FilesystemBrowseResult` so the consuming pattern (browse on partial
5
+ * path, render entries, click to navigate) ports straight across.
6
+ *
7
+ * The shape is FROZEN — the dashboard imports these via `@tmux-ide/schemas`.
8
+ * Add new fields by appending optional properties; do not rename existing
9
+ * fields without bumping a major.
10
+ */
11
+ import { z } from "zod";
12
+ export declare const FilesystemEntrySchemaZ: z.ZodObject<{
13
+ name: z.ZodString;
14
+ fullPath: z.ZodString;
15
+ isDir: z.ZodBoolean;
16
+ isSymlink: z.ZodBoolean;
17
+ }, z.core.$strip>;
18
+ export type FilesystemEntry = z.infer<typeof FilesystemEntrySchemaZ>;
19
+ export declare const FilesystemBrowseResultSchemaZ: z.ZodObject<{
20
+ path: z.ZodString;
21
+ parentPath: z.ZodNullable<z.ZodString>;
22
+ entries: z.ZodArray<z.ZodObject<{
23
+ name: z.ZodString;
24
+ fullPath: z.ZodString;
25
+ isDir: z.ZodBoolean;
26
+ isSymlink: z.ZodBoolean;
27
+ }, z.core.$strip>>;
28
+ }, z.core.$strip>;
29
+ export type FilesystemBrowseResult = z.infer<typeof FilesystemBrowseResultSchemaZ>;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Filesystem browsing contracts. Powers the dashboard's directory picker
3
+ * (used in AddProjectDialog and elsewhere). The shape mirrors t3code's
4
+ * `FilesystemBrowseResult` so the consuming pattern (browse on partial
5
+ * path, render entries, click to navigate) ports straight across.
6
+ *
7
+ * The shape is FROZEN — the dashboard imports these via `@tmux-ide/schemas`.
8
+ * Add new fields by appending optional properties; do not rename existing
9
+ * fields without bumping a major.
10
+ */
11
+ import { z } from "zod";
12
+ export const FilesystemEntrySchemaZ = z.object({
13
+ /** Basename only (e.g. "src", "package.json"). Never contains a slash. */
14
+ name: z.string(),
15
+ /** Absolute, canonical path to the entry. */
16
+ fullPath: z.string(),
17
+ /** True if the entry is a directory (or a symlink pointing at one). */
18
+ isDir: z.boolean(),
19
+ /** True if the dirent itself is a symlink (regardless of target type). */
20
+ isSymlink: z.boolean(),
21
+ });
22
+ export const FilesystemBrowseResultSchemaZ = z.object({
23
+ /** Canonical absolute path of the directory listed. */
24
+ path: z.string(),
25
+ /** Parent directory path, or null if at filesystem / sandbox root. */
26
+ parentPath: z.string().nullable(),
27
+ /** Directories first, then files; alphabetical (case-insensitive) within group. */
28
+ entries: z.array(FilesystemEntrySchemaZ),
29
+ });
@@ -0,0 +1 @@
1
+ export * from "@tmux-ide/contracts";
@@ -0,0 +1,2 @@
1
+ // Schemas extracted to @tmux-ide/contracts (T056). Re-export shim.
2
+ export * from "@tmux-ide/contracts";
@@ -0,0 +1,12 @@
1
+ export { PaneSchema, RowSchema, ThemeConfigSchema, OrchestratorYamlConfigSchema, IdeConfigSchema, PaneActionSchema, SessionStateSchema, } from "./ide-config.ts";
2
+ export type { Pane, Row, ThemeConfig, OrchestratorYamlConfig, IdeConfig, PaneAction, SessionState, } from "./ide-config.ts";
3
+ export { SessionOverviewSchemaZ, PaneInfoSchemaZ } from "./domain.ts";
4
+ export type { SessionOverview, PaneInfo } from "./domain.ts";
5
+ export { ClientFrameSchemaZ, ServerFrameSchemaZ, SessionSnapshotSchemaZ } from "./ws-events.ts";
6
+ export type { ClientFrame, ServerFrame, SessionSnapshot } from "./ws-events.ts";
7
+ export { RegisteredProjectSchemaZ, RegisterProjectRequestSchemaZ, InitProjectRequestSchemaZ, ProjectTemplateSchemaZ, } from "./registry.ts";
8
+ export type { RegisteredProject, RegisterProjectRequest, InitProjectRequest, ProjectTemplate, } from "./registry.ts";
9
+ export { FilesystemEntrySchemaZ, FilesystemBrowseResultSchemaZ } from "./filesystem.ts";
10
+ export type { FilesystemEntry, FilesystemBrowseResult } from "./filesystem.ts";
11
+ export { ProjectInspectDetectedSchemaZ, ProjectInspectSchemaZ, InspectFilesystemRequestSchemaZ, OnboardProjectRequestSchemaZ, } from "./inspect.ts";
12
+ export type { ProjectInspectDetected, ProjectInspect, InspectFilesystemRequest, OnboardProjectRequest, } from "./inspect.ts";
@@ -0,0 +1,6 @@
1
+ export { PaneSchema, RowSchema, ThemeConfigSchema, OrchestratorYamlConfigSchema, IdeConfigSchema, PaneActionSchema, SessionStateSchema, } from "./ide-config.js";
2
+ export { SessionOverviewSchemaZ, PaneInfoSchemaZ } from "./domain.js";
3
+ export { ClientFrameSchemaZ, ServerFrameSchemaZ, SessionSnapshotSchemaZ } from "./ws-events.js";
4
+ export { RegisteredProjectSchemaZ, RegisterProjectRequestSchemaZ, InitProjectRequestSchemaZ, ProjectTemplateSchemaZ, } from "./registry.js";
5
+ export { FilesystemEntrySchemaZ, FilesystemBrowseResultSchemaZ } from "./filesystem.js";
6
+ export { ProjectInspectDetectedSchemaZ, ProjectInspectSchemaZ, InspectFilesystemRequestSchemaZ, OnboardProjectRequestSchemaZ, } from "./inspect.js";
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Project inspect + onboard contracts. Used by the dashboard's "Add project"
3
+ * dialog to inspect an arbitrary directory (without registering it) and to
4
+ * onboard a directory that has no `ide.yml` yet (compose, write, register).
5
+ *
6
+ * The shape is FROZEN — the dashboard imports these via `@tmux-ide/schemas`.
7
+ */
8
+ import { z } from "zod";
9
+ export declare const ProjectInspectDetectedSchemaZ: z.ZodObject<{
10
+ packageManager: z.ZodNullable<z.ZodEnum<{
11
+ pnpm: "pnpm";
12
+ bun: "bun";
13
+ yarn: "yarn";
14
+ npm: "npm";
15
+ }>>;
16
+ frameworks: z.ZodArray<z.ZodString>;
17
+ devCommand: z.ZodNullable<z.ZodString>;
18
+ testCommand: z.ZodNullable<z.ZodString>;
19
+ }, z.core.$strip>;
20
+ export type ProjectInspectDetected = z.infer<typeof ProjectInspectDetectedSchemaZ>;
21
+ export declare const ProjectInspectSchemaZ: z.ZodObject<{
22
+ name: z.ZodString;
23
+ dir: z.ZodString;
24
+ hasIdeYml: z.ZodBoolean;
25
+ gitOrigin: z.ZodNullable<z.ZodString>;
26
+ gitBranch: z.ZodNullable<z.ZodString>;
27
+ detected: z.ZodObject<{
28
+ packageManager: z.ZodNullable<z.ZodEnum<{
29
+ pnpm: "pnpm";
30
+ bun: "bun";
31
+ yarn: "yarn";
32
+ npm: "npm";
33
+ }>>;
34
+ frameworks: z.ZodArray<z.ZodString>;
35
+ devCommand: z.ZodNullable<z.ZodString>;
36
+ testCommand: z.ZodNullable<z.ZodString>;
37
+ }, z.core.$strip>;
38
+ }, z.core.$strip>;
39
+ export type ProjectInspect = z.infer<typeof ProjectInspectSchemaZ>;
40
+ export declare const InspectFilesystemRequestSchemaZ: z.ZodObject<{
41
+ dir: z.ZodString;
42
+ }, z.core.$strip>;
43
+ export type InspectFilesystemRequest = z.infer<typeof InspectFilesystemRequestSchemaZ>;
44
+ export declare const OnboardProjectRequestSchemaZ: z.ZodObject<{
45
+ dir: z.ZodString;
46
+ name: z.ZodOptional<z.ZodString>;
47
+ agents: z.ZodNumber;
48
+ agentNames: z.ZodOptional<z.ZodArray<z.ZodString>>;
49
+ devCommand: z.ZodOptional<z.ZodNullable<z.ZodString>>;
50
+ testCommand: z.ZodOptional<z.ZodNullable<z.ZodString>>;
51
+ lintCommand: z.ZodOptional<z.ZodNullable<z.ZodString>>;
52
+ }, z.core.$strip>;
53
+ export type OnboardProjectRequest = z.infer<typeof OnboardProjectRequestSchemaZ>;
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Project inspect + onboard contracts. Used by the dashboard's "Add project"
3
+ * dialog to inspect an arbitrary directory (without registering it) and to
4
+ * onboard a directory that has no `ide.yml` yet (compose, write, register).
5
+ *
6
+ * The shape is FROZEN — the dashboard imports these via `@tmux-ide/schemas`.
7
+ */
8
+ import { z } from "zod";
9
+ export const ProjectInspectDetectedSchemaZ = z.object({
10
+ /** Detected package manager from lockfile, or `null`. */
11
+ packageManager: z.enum(["pnpm", "npm", "yarn", "bun"]).nullable(),
12
+ /** Detected frameworks (e.g. `["next", "convex"]`). Empty array when none. */
13
+ frameworks: z.array(z.string()),
14
+ /** Suggested dev command (e.g. `pnpm dev`). `null` if no dev script found. */
15
+ devCommand: z.string().nullable(),
16
+ /** Suggested test command (e.g. `pnpm test`). `null` if no test script found. */
17
+ testCommand: z.string().nullable(),
18
+ });
19
+ export const ProjectInspectSchemaZ = z.object({
20
+ /** Sanitized basename of the directory — safe to use as a tmux session name. */
21
+ name: z.string(),
22
+ /** Absolute, canonical path to the directory. */
23
+ dir: z.string(),
24
+ /** Whether `<dir>/ide.yml` exists. */
25
+ hasIdeYml: z.boolean(),
26
+ /** Git remote origin URL, or `null` if not a git repo / no origin / probe failed. */
27
+ gitOrigin: z.string().nullable(),
28
+ /** Current git branch, or `null` if not a git repo / detached HEAD / probe failed. */
29
+ gitBranch: z.string().nullable(),
30
+ /** Detected stack signals (reuses `tmux-ide detect` logic). */
31
+ detected: ProjectInspectDetectedSchemaZ,
32
+ });
33
+ // ---------------------------------------------------------------------------
34
+ // REST request bodies
35
+ // ---------------------------------------------------------------------------
36
+ export const InspectFilesystemRequestSchemaZ = z.object({
37
+ dir: z.string().min(1),
38
+ });
39
+ export const OnboardProjectRequestSchemaZ = z.object({
40
+ dir: z.string().min(1),
41
+ /** Optional override for the project name — defaults to inspect.name. */
42
+ name: z.string().min(1).optional(),
43
+ /** 1, 2, or 3 — how many Claude panes to scaffold in the top row. */
44
+ agents: z.number().int().min(1).max(3),
45
+ /**
46
+ * Optional per-agent pane titles. When provided, length must equal
47
+ * `agents`; the server uses these as `title:` for the Claude panes
48
+ * instead of the canonical `Lead`/`Teammate N`/`Claude N` defaults.
49
+ */
50
+ agentNames: z.array(z.string().min(1)).optional(),
51
+ /** Dev server command (e.g. `pnpm dev`). Omit / null to skip the dev pane. */
52
+ devCommand: z.string().min(1).nullable().optional(),
53
+ /** Test command (e.g. `pnpm test`). Currently informational; stored for later. */
54
+ testCommand: z.string().min(1).nullable().optional(),
55
+ /** Lint command (e.g. `pnpm lint`). Currently informational; stored for later. */
56
+ lintCommand: z.string().min(1).nullable().optional(),
57
+ });
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Project registry contracts. The dashboard manages a list of projects the
3
+ * user has registered with tmux-ide; this schema is the wire shape exchanged
4
+ * over `/api/projects` and the `/ws/events` WebSocket channel.
5
+ *
6
+ * The shape is FROZEN — the dashboard imports these via `@tmux-ide/schemas`.
7
+ * Add new fields by appending optional properties; do not rename existing
8
+ * fields without bumping a major.
9
+ */
10
+ import { z } from "zod";
11
+ export declare const RegisteredProjectSchemaZ: z.ZodObject<{
12
+ name: z.ZodString;
13
+ dir: z.ZodString;
14
+ hasIdeYml: z.ZodBoolean;
15
+ gitOrigin: z.ZodNullable<z.ZodString>;
16
+ gitBranch: z.ZodNullable<z.ZodString>;
17
+ registeredAt: z.ZodString;
18
+ }, z.core.$strip>;
19
+ export type RegisteredProject = z.infer<typeof RegisteredProjectSchemaZ>;
20
+ export declare const RegisterProjectRequestSchemaZ: z.ZodObject<{
21
+ dir: z.ZodString;
22
+ name: z.ZodOptional<z.ZodString>;
23
+ }, z.core.$strip>;
24
+ export type RegisterProjectRequest = z.infer<typeof RegisterProjectRequestSchemaZ>;
25
+ export declare const InitProjectRequestSchemaZ: z.ZodObject<{
26
+ dir: z.ZodString;
27
+ template: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strip>;
29
+ export type InitProjectRequest = z.infer<typeof InitProjectRequestSchemaZ>;
30
+ export declare const ProjectTemplateSchemaZ: z.ZodObject<{
31
+ id: z.ZodString;
32
+ label: z.ZodString;
33
+ description: z.ZodString;
34
+ }, z.core.$strip>;
35
+ export type ProjectTemplate = z.infer<typeof ProjectTemplateSchemaZ>;