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.
- package/README.md +115 -101
- package/bin/cli.js +13678 -4
- package/bin/cli.ts +1143 -260
- package/package.json +27 -17
- package/packages/daemon/dist/__tests__/support.d.ts +7 -0
- package/packages/daemon/dist/__tests__/support.js +33 -0
- package/packages/daemon/dist/agent-explain.d.ts +45 -0
- package/packages/daemon/dist/agent-explain.js +210 -0
- package/packages/daemon/dist/attach.d.ts +3 -0
- package/packages/daemon/dist/attach.js +14 -0
- package/packages/daemon/dist/bin.d.ts +2 -0
- package/packages/daemon/dist/bin.js +3 -0
- package/packages/daemon/dist/canonical.d.ts +2 -0
- package/packages/daemon/dist/canonical.js +1 -0
- package/packages/daemon/dist/cli.d.ts +1 -0
- package/packages/daemon/dist/cli.js +425 -0
- package/packages/daemon/dist/command-center/actions/contract.d.ts +1 -0
- package/packages/daemon/dist/command-center/actions/contract.js +2 -0
- package/packages/daemon/dist/command-center/actions/dispatcher.d.ts +27 -0
- package/packages/daemon/dist/command-center/actions/dispatcher.js +109 -0
- package/packages/daemon/dist/command-center/actions/errors.d.ts +38 -0
- package/packages/daemon/dist/command-center/actions/errors.js +56 -0
- package/packages/daemon/dist/command-center/actions/handlers/_project-context.d.ts +12 -0
- package/packages/daemon/dist/command-center/actions/handlers/_project-context.js +12 -0
- package/packages/daemon/dist/command-center/actions/handlers/_resolve-project.d.ts +42 -0
- package/packages/daemon/dist/command-center/actions/handlers/_resolve-project.js +48 -0
- package/packages/daemon/dist/command-center/actions/handlers/app-set-remote-access.d.ts +23 -0
- package/packages/daemon/dist/command-center/actions/handlers/app-set-remote-access.js +67 -0
- package/packages/daemon/dist/command-center/actions/handlers/config-actions.d.ts +12 -0
- package/packages/daemon/dist/command-center/actions/handlers/config-actions.js +69 -0
- package/packages/daemon/dist/command-center/actions/handlers/daemon-shutdown.d.ts +6 -0
- package/packages/daemon/dist/command-center/actions/handlers/daemon-shutdown.js +24 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-activate.d.ts +7 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-activate.js +19 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-launch.d.ts +18 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-launch.js +58 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-open-terminal.d.ts +32 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-open-terminal.js +69 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-restart.d.ts +17 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-restart.js +27 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-stop.d.ts +24 -0
- package/packages/daemon/dist/command-center/actions/handlers/project-stop.js +38 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-respawn.d.ts +24 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-respawn.js +88 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-stop.d.ts +14 -0
- package/packages/daemon/dist/command-center/actions/handlers/terminal-stop.js +22 -0
- package/packages/daemon/dist/command-center/actions/registry.d.ts +35 -0
- package/packages/daemon/dist/command-center/actions/registry.js +109 -0
- package/packages/daemon/dist/command-center/discovery.d.ts +23 -0
- package/packages/daemon/dist/command-center/discovery.js +67 -0
- package/packages/daemon/dist/command-center/index.d.ts +10 -0
- package/packages/daemon/dist/command-center/index.js +21 -0
- package/packages/daemon/dist/command-center/schemas.d.ts +76 -0
- package/packages/daemon/dist/command-center/schemas.js +68 -0
- package/packages/daemon/dist/command-center/server.d.ts +26 -0
- package/packages/daemon/dist/command-center/server.js +1103 -0
- package/packages/daemon/dist/command-center/ws-events.d.ts +59 -0
- package/packages/daemon/dist/command-center/ws-events.js +277 -0
- package/packages/daemon/dist/config.d.ts +19 -0
- package/packages/daemon/dist/config.js +494 -0
- package/packages/daemon/dist/detect.d.ts +15 -0
- package/packages/daemon/dist/detect.js +228 -0
- package/packages/daemon/dist/doctor.d.ts +21 -0
- package/packages/daemon/dist/doctor.js +154 -0
- package/packages/daemon/dist/embed.d.ts +1 -0
- package/packages/daemon/dist/embed.js +1 -0
- package/packages/daemon/dist/index.d.ts +3 -0
- package/packages/daemon/dist/index.js +2 -0
- package/packages/daemon/dist/init.d.ts +4 -0
- package/packages/daemon/dist/init.js +174 -0
- package/packages/daemon/dist/inspect.d.ts +54 -0
- package/packages/daemon/dist/inspect.js +118 -0
- package/packages/daemon/dist/launch.d.ts +23 -0
- package/packages/daemon/dist/launch.js +250 -0
- package/packages/daemon/dist/lib/active-projects.d.ts +12 -0
- package/packages/daemon/dist/lib/active-projects.js +35 -0
- package/packages/daemon/dist/lib/agent-discovery.d.ts +43 -0
- package/packages/daemon/dist/lib/agent-discovery.js +85 -0
- package/packages/daemon/dist/lib/app-config.d.ts +147 -0
- package/packages/daemon/dist/lib/app-config.js +191 -0
- package/packages/daemon/dist/lib/app-settings.d.ts +9 -0
- package/packages/daemon/dist/lib/app-settings.js +44 -0
- package/packages/daemon/dist/lib/auth/auth-service.d.ts +33 -0
- package/packages/daemon/dist/lib/auth/auth-service.js +172 -0
- package/packages/daemon/dist/lib/auth/middleware.d.ts +16 -0
- package/packages/daemon/dist/lib/auth/middleware.js +43 -0
- package/packages/daemon/dist/lib/auth/types.d.ts +1 -0
- package/packages/daemon/dist/lib/auth/types.js +2 -0
- package/packages/daemon/dist/lib/auth-token.d.ts +1 -0
- package/packages/daemon/dist/lib/auth-token.js +4 -0
- package/packages/daemon/dist/lib/authorship.d.ts +62 -0
- package/packages/daemon/dist/lib/authorship.js +209 -0
- package/packages/daemon/dist/lib/canonical-daemon.d.ts +21 -0
- package/packages/daemon/dist/lib/canonical-daemon.js +111 -0
- package/packages/daemon/dist/lib/cli-action-bridge.d.ts +27 -0
- package/packages/daemon/dist/lib/cli-action-bridge.js +161 -0
- package/packages/daemon/dist/lib/daemon-embed.d.ts +31 -0
- package/packages/daemon/dist/lib/daemon-embed.js +643 -0
- package/packages/daemon/dist/lib/daemon-watchdog.d.ts +16 -0
- package/packages/daemon/dist/lib/daemon-watchdog.js +98 -0
- package/packages/daemon/dist/lib/daemon.d.ts +8 -0
- package/packages/daemon/dist/lib/daemon.js +79 -0
- package/packages/daemon/dist/lib/dot-path.d.ts +2 -0
- package/packages/daemon/dist/lib/dot-path.js +17 -0
- package/packages/daemon/dist/lib/errors.d.ts +37 -0
- package/packages/daemon/dist/lib/errors.js +50 -0
- package/packages/daemon/dist/lib/filesystem-browser.d.ts +85 -0
- package/packages/daemon/dist/lib/filesystem-browser.js +257 -0
- package/packages/daemon/dist/lib/launch-plan.d.ts +6 -0
- package/packages/daemon/dist/lib/launch-plan.js +76 -0
- package/packages/daemon/dist/lib/log.d.ts +40 -0
- package/packages/daemon/dist/lib/log.js +86 -0
- package/packages/daemon/dist/lib/output.d.ts +9 -0
- package/packages/daemon/dist/lib/output.js +65 -0
- package/packages/daemon/dist/lib/project-init-runner.d.ts +46 -0
- package/packages/daemon/dist/lib/project-init-runner.js +117 -0
- package/packages/daemon/dist/lib/project-inspect.d.ts +28 -0
- package/packages/daemon/dist/lib/project-inspect.js +67 -0
- package/packages/daemon/dist/lib/project-onboard.d.ts +58 -0
- package/packages/daemon/dist/lib/project-onboard.js +108 -0
- package/packages/daemon/dist/lib/project-probe.d.ts +35 -0
- package/packages/daemon/dist/lib/project-probe.js +61 -0
- package/packages/daemon/dist/lib/project-registry.d.ts +76 -0
- package/packages/daemon/dist/lib/project-registry.js +230 -0
- package/packages/daemon/dist/lib/session-monitor.d.ts +15 -0
- package/packages/daemon/dist/lib/session-monitor.js +103 -0
- package/packages/daemon/dist/lib/session-options.d.ts +13 -0
- package/packages/daemon/dist/lib/session-options.js +85 -0
- package/packages/daemon/dist/lib/shell.d.ts +5 -0
- package/{src/lib/shell.ts → packages/daemon/dist/lib/shell.js} +3 -3
- package/packages/daemon/dist/lib/sizes.d.ts +16 -0
- package/packages/daemon/dist/lib/sizes.js +36 -0
- package/packages/daemon/dist/lib/skill-sync.d.ts +60 -0
- package/packages/daemon/dist/lib/skill-sync.js +128 -0
- package/packages/daemon/dist/lib/slugify.d.ts +4 -0
- package/packages/daemon/dist/lib/slugify.js +10 -0
- package/packages/daemon/dist/lib/terminals-store.d.ts +27 -0
- package/packages/daemon/dist/lib/terminals-store.js +111 -0
- package/packages/daemon/dist/lib/update-check.d.ts +118 -0
- package/packages/daemon/dist/lib/update-check.js +261 -0
- package/packages/daemon/dist/lib/update.d.ts +65 -0
- package/packages/daemon/dist/lib/update.js +141 -0
- package/packages/daemon/dist/lib/workspace-registry.d.ts +84 -0
- package/packages/daemon/dist/lib/workspace-registry.js +176 -0
- package/packages/daemon/dist/lib/worktree.d.ts +76 -0
- package/packages/daemon/dist/lib/worktree.js +207 -0
- package/packages/daemon/dist/lib/yaml-io.d.ts +10 -0
- package/packages/daemon/dist/lib/yaml-io.js +24 -0
- package/packages/daemon/dist/ls.d.ts +3 -0
- package/packages/daemon/dist/ls.js +35 -0
- package/packages/daemon/dist/restart.d.ts +4 -0
- package/packages/daemon/dist/restart.js +16 -0
- package/packages/daemon/dist/restore.d.ts +86 -0
- package/packages/daemon/dist/restore.js +406 -0
- package/packages/daemon/dist/schemas/domain.d.ts +1 -0
- package/packages/daemon/dist/schemas/domain.js +2 -0
- package/packages/daemon/dist/schemas/filesystem.d.ts +29 -0
- package/packages/daemon/dist/schemas/filesystem.js +29 -0
- package/packages/daemon/dist/schemas/ide-config.d.ts +1 -0
- package/packages/daemon/dist/schemas/ide-config.js +2 -0
- package/packages/daemon/dist/schemas/index.d.ts +12 -0
- package/packages/daemon/dist/schemas/index.js +6 -0
- package/packages/daemon/dist/schemas/inspect.d.ts +53 -0
- package/packages/daemon/dist/schemas/inspect.js +57 -0
- package/packages/daemon/dist/schemas/registry.d.ts +35 -0
- package/packages/daemon/dist/schemas/registry.js +43 -0
- package/packages/daemon/dist/schemas/ws-events.d.ts +72 -0
- package/packages/daemon/dist/schemas/ws-events.js +110 -0
- package/packages/daemon/dist/send.d.ts +27 -0
- package/packages/daemon/dist/send.js +141 -0
- package/packages/daemon/dist/server/index.d.ts +10 -0
- package/packages/daemon/dist/server/index.js +55 -0
- package/packages/daemon/dist/server/pty-bridge.d.ts +174 -0
- package/packages/daemon/dist/server/pty-bridge.js +422 -0
- package/packages/daemon/dist/server/standalone.d.ts +1 -0
- package/packages/daemon/dist/server/standalone.js +14 -0
- package/packages/daemon/dist/server/ws-route.d.ts +74 -0
- package/packages/daemon/dist/server/ws-route.js +379 -0
- package/packages/daemon/dist/status.d.ts +3 -0
- package/packages/daemon/dist/status.js +46 -0
- package/packages/daemon/dist/stop.d.ts +3 -0
- package/packages/daemon/dist/stop.js +21 -0
- package/packages/daemon/dist/terminal/NodePtyAdapter.d.ts +44 -0
- package/packages/daemon/dist/terminal/NodePtyAdapter.js +253 -0
- package/packages/daemon/dist/terminal/PtyAdapter.d.ts +124 -0
- package/packages/daemon/dist/terminal/PtyAdapter.js +43 -0
- package/packages/daemon/dist/terminal/__tests__/MockPtyAdapter.d.ts +77 -0
- package/packages/daemon/dist/terminal/__tests__/MockPtyAdapter.js +155 -0
- package/packages/daemon/dist/types.d.ts +2 -0
- package/packages/daemon/dist/types.js +1 -0
- package/packages/daemon/dist/validate.d.ts +4 -0
- package/packages/daemon/dist/validate.js +184 -0
- package/packages/daemon/dist/widgets/changes/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/changes/index.jsx +575 -0
- package/packages/daemon/dist/widgets/config/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/config/index.jsx +395 -0
- package/packages/daemon/dist/widgets/explorer/breadcrumbs.d.ts +10 -0
- package/packages/daemon/dist/widgets/explorer/breadcrumbs.jsx +51 -0
- package/packages/daemon/dist/widgets/explorer/footer.d.ts +6 -0
- package/packages/daemon/dist/widgets/explorer/footer.jsx +11 -0
- package/packages/daemon/dist/widgets/explorer/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/explorer/index.jsx +393 -0
- package/packages/daemon/dist/widgets/explorer/tree-model.d.ts +13 -0
- package/packages/daemon/dist/widgets/explorer/tree-model.js +69 -0
- package/packages/daemon/dist/widgets/explorer/tree.d.ts +13 -0
- package/packages/daemon/dist/widgets/explorer/tree.jsx +108 -0
- package/packages/daemon/dist/widgets/lib/config-model.d.ts +22 -0
- package/packages/daemon/dist/widgets/lib/config-model.js +99 -0
- package/packages/daemon/dist/widgets/lib/files.d.ts +11 -0
- package/packages/daemon/dist/widgets/lib/files.js +76 -0
- package/packages/daemon/dist/widgets/lib/git.d.ts +11 -0
- package/packages/daemon/dist/widgets/lib/git.js +70 -0
- package/packages/daemon/dist/widgets/lib/grammar.d.ts +79 -0
- package/packages/daemon/dist/widgets/lib/grammar.js +95 -0
- package/packages/daemon/dist/widgets/lib/help-overlay.d.ts +19 -0
- package/packages/daemon/dist/widgets/lib/help-overlay.jsx +69 -0
- package/packages/daemon/dist/widgets/lib/pane-comms.d.ts +28 -0
- package/packages/daemon/dist/widgets/lib/pane-comms.js +189 -0
- package/packages/daemon/dist/widgets/lib/theme.d.ts +44 -0
- package/packages/daemon/dist/widgets/lib/theme.js +153 -0
- package/packages/daemon/dist/widgets/lib/watcher.d.ts +9 -0
- package/packages/daemon/dist/widgets/lib/watcher.js +92 -0
- package/packages/daemon/dist/widgets/preview/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/preview/index.jsx +371 -0
- package/packages/daemon/dist/widgets/resolve.d.ts +20 -0
- package/packages/daemon/dist/widgets/resolve.js +100 -0
- package/packages/daemon/dist/widgets/setup/agent-naming.d.ts +9 -0
- package/packages/daemon/dist/widgets/setup/agent-naming.jsx +81 -0
- package/packages/daemon/dist/widgets/setup/config-tree.d.ts +13 -0
- package/packages/daemon/dist/widgets/setup/config-tree.jsx +203 -0
- package/packages/daemon/dist/widgets/setup/detect-panel.d.ts +14 -0
- package/{src/widgets/setup/detect-panel.tsx → packages/daemon/dist/widgets/setup/detect-panel.jsx} +16 -40
- package/packages/daemon/dist/widgets/setup/field-editor.d.ts +12 -0
- package/packages/daemon/dist/widgets/setup/field-editor.jsx +163 -0
- package/packages/daemon/dist/widgets/setup/footer.d.ts +17 -0
- package/packages/daemon/dist/widgets/setup/footer.jsx +64 -0
- package/packages/daemon/dist/widgets/setup/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/setup/index.jsx +261 -0
- package/packages/daemon/dist/widgets/setup/layout-picker.d.ts +9 -0
- package/packages/daemon/dist/widgets/setup/layout-picker.jsx +69 -0
- package/packages/daemon/dist/widgets/setup/setup-model.d.ts +15 -0
- package/packages/daemon/dist/widgets/setup/setup-model.js +157 -0
- package/packages/daemon/dist/widgets/sidebar/index.d.ts +1 -0
- package/packages/daemon/dist/widgets/sidebar/index.jsx +462 -0
- package/scripts/build-cli.mjs +101 -0
- package/scripts/build-tui.mjs +58 -0
- package/scripts/capture-codex-traffic.mjs +195 -0
- package/scripts/check-src-additions.sh +74 -0
- package/scripts/coverage-summary.mjs +68 -0
- package/scripts/install-git-hooks.js +53 -0
- package/scripts/merge-update-manifests.mjs +58 -0
- package/scripts/merge-update-manifests.test.mjs +82 -0
- package/scripts/pack-check-run.mjs +83 -0
- package/scripts/postinstall.js +28 -6
- package/scripts/prepublish-check.mjs +44 -0
- package/scripts/stress-test.ts +141 -0
- package/scripts/verify-endpoints.sh +90 -0
- package/skill/SKILL.md +203 -236
- package/dashboard/out/404/index.html +0 -1
- package/dashboard/out/404.html +0 -1
- package/dashboard/out/__next.__PAGE__.txt +0 -9
- package/dashboard/out/__next._full.txt +0 -21
- package/dashboard/out/__next._head.txt +0 -5
- package/dashboard/out/__next._index.txt +0 -7
- package/dashboard/out/__next._tree.txt +0 -4
- package/dashboard/out/_next/static/Tl1KoIH7mHCyjo5KtXqQ0/_buildManifest.js +0 -11
- package/dashboard/out/_next/static/Tl1KoIH7mHCyjo5KtXqQ0/_clientMiddlewareManifest.json +0 -1
- package/dashboard/out/_next/static/Tl1KoIH7mHCyjo5KtXqQ0/_ssgManifest.js +0 -1
- package/dashboard/out/_next/static/chunks/048e2449530877e2.js +0 -1
- package/dashboard/out/_next/static/chunks/053c57bda6abb959.js +0 -1
- package/dashboard/out/_next/static/chunks/056760c6c2dd9172.js +0 -1
- package/dashboard/out/_next/static/chunks/06ab47357b6d3e35.js +0 -1
- package/dashboard/out/_next/static/chunks/0921cbe5dfd6738e.js +0 -1
- package/dashboard/out/_next/static/chunks/0b2599bf468cf5ea.js +0 -1
- package/dashboard/out/_next/static/chunks/0c012eac08ef2c4f.js +0 -1
- package/dashboard/out/_next/static/chunks/0c29e87fcdcffac3.js +0 -1
- package/dashboard/out/_next/static/chunks/0e1e98854430c693.js +0 -1
- package/dashboard/out/_next/static/chunks/0e24498976a88976.js +0 -1
- package/dashboard/out/_next/static/chunks/0e5bf11ff0b9ab90.js +0 -1
- package/dashboard/out/_next/static/chunks/0eae0a45ab8416c8.js +0 -1
- package/dashboard/out/_next/static/chunks/104797400d9d38ad.js +0 -1
- package/dashboard/out/_next/static/chunks/10cfcfce475f9d2d.js +0 -1
- package/dashboard/out/_next/static/chunks/11bac38e7cfb4ecc.js +0 -1
- package/dashboard/out/_next/static/chunks/120c5f6501ec3529.js +0 -1
- package/dashboard/out/_next/static/chunks/121fceb2b1dcd79f.js +0 -1
- package/dashboard/out/_next/static/chunks/13726b63e1be6b98.js +0 -1
- package/dashboard/out/_next/static/chunks/140c6ce631514660.js +0 -1
- package/dashboard/out/_next/static/chunks/1435ee3a51174c97.js +0 -1
- package/dashboard/out/_next/static/chunks/14dc927d2e2cca91.js +0 -1
- package/dashboard/out/_next/static/chunks/179c3031b292d98e.js +0 -1
- package/dashboard/out/_next/static/chunks/181e88957c47e5c1.js +0 -1
- package/dashboard/out/_next/static/chunks/18f70ba23873c432.js +0 -1
- package/dashboard/out/_next/static/chunks/1b58303b027fd135.js +0 -1
- package/dashboard/out/_next/static/chunks/1b5f49a358dcc71e.js +0 -1
- package/dashboard/out/_next/static/chunks/1bba44b81585099a.js +0 -1
- package/dashboard/out/_next/static/chunks/1bea8dee19a3e9ae.js +0 -1
- package/dashboard/out/_next/static/chunks/1cfad21646fc250e.js +0 -1
- package/dashboard/out/_next/static/chunks/1d053dc9e1e428ef.js +0 -1
- package/dashboard/out/_next/static/chunks/1e7d7639c6f0ee5e.js +0 -1
- package/dashboard/out/_next/static/chunks/1f42504ca81463f1.js +0 -1
- package/dashboard/out/_next/static/chunks/20c92047399305b4.js +0 -1
- package/dashboard/out/_next/static/chunks/214560e9514a9a4d.js +0 -1
- package/dashboard/out/_next/static/chunks/21d4ef106914e997.js +0 -1
- package/dashboard/out/_next/static/chunks/2586e83fc3dc2588.js +0 -1
- package/dashboard/out/_next/static/chunks/267136a09e94f5c2.js +0 -1
- package/dashboard/out/_next/static/chunks/271c50b329917c10.js +0 -1
- package/dashboard/out/_next/static/chunks/27fccecefffd88b5.js +0 -1
- package/dashboard/out/_next/static/chunks/28f058ed331315b6.js +0 -1
- package/dashboard/out/_next/static/chunks/28f704f2cc5713eb.js +0 -1
- package/dashboard/out/_next/static/chunks/290f67a6cd150a98.js +0 -1
- package/dashboard/out/_next/static/chunks/2ad12f4dcc30d30a.js +0 -1
- package/dashboard/out/_next/static/chunks/2b650b172078ab92.js +0 -1
- package/dashboard/out/_next/static/chunks/2bd91076019a6453.js +0 -1
- package/dashboard/out/_next/static/chunks/2e1278563a8e26be.js +0 -1
- package/dashboard/out/_next/static/chunks/309eb70780a3d67d.js +0 -1
- package/dashboard/out/_next/static/chunks/30f71950992e2307.js +0 -1
- package/dashboard/out/_next/static/chunks/31191873c2075784.js +0 -1
- package/dashboard/out/_next/static/chunks/31a790921a0c035e.js +0 -1
- package/dashboard/out/_next/static/chunks/34f8d7a5a06e8e32.js +0 -1
- package/dashboard/out/_next/static/chunks/36b3716436d9bc9d.js +0 -1
- package/dashboard/out/_next/static/chunks/3770b7d0ff004de3.js +0 -1
- package/dashboard/out/_next/static/chunks/381ab3bd4cffbf4d.js +0 -1
- package/dashboard/out/_next/static/chunks/38aa4eada5dcd1a4.js +0 -1
- package/dashboard/out/_next/static/chunks/39723132b78cb77e.js +0 -1
- package/dashboard/out/_next/static/chunks/399efdcc3fe56e09.js +0 -1
- package/dashboard/out/_next/static/chunks/3a8431a9221b0706.js +0 -1
- package/dashboard/out/_next/static/chunks/3a9b40810ce88cbf.js +0 -1
- package/dashboard/out/_next/static/chunks/3b322e3e9476ecdf.js +0 -1
- package/dashboard/out/_next/static/chunks/3bb14befeeb08c28.js +0 -1
- package/dashboard/out/_next/static/chunks/3c99637ebd462b20.js +0 -1
- package/dashboard/out/_next/static/chunks/3cbb9217d56459d8.js +0 -1
- package/dashboard/out/_next/static/chunks/3d438e0929a762f7.js +0 -1
- package/dashboard/out/_next/static/chunks/3e6d4834e0752f76.js +0 -2
- package/dashboard/out/_next/static/chunks/3e6f8cedaad4e89b.js +0 -1
- package/dashboard/out/_next/static/chunks/3e701259ce1b53e3.js +0 -1
- package/dashboard/out/_next/static/chunks/41562f7ab7c033eb.js +0 -1
- package/dashboard/out/_next/static/chunks/418fadd8a94e2fd7.js +0 -1
- package/dashboard/out/_next/static/chunks/42345437bb922e9c.js +0 -1
- package/dashboard/out/_next/static/chunks/434b6bd78c97b668.js +0 -1
- package/dashboard/out/_next/static/chunks/434febe897d33e2d.js +0 -1
- package/dashboard/out/_next/static/chunks/45d28707dd8ce1c1.js +0 -1
- package/dashboard/out/_next/static/chunks/4620a640e88cb1b7.js +0 -1
- package/dashboard/out/_next/static/chunks/468f8eb604502ea4.js +0 -1
- package/dashboard/out/_next/static/chunks/495f5cedf8afe823.js +0 -1
- package/dashboard/out/_next/static/chunks/49a89d1704d27740.js +0 -1
- package/dashboard/out/_next/static/chunks/49e5c37d15f63def.js +0 -1
- package/dashboard/out/_next/static/chunks/4a46ad186a8587ee.css +0 -2
- package/dashboard/out/_next/static/chunks/4a5c728574935d50.js +0 -1
- package/dashboard/out/_next/static/chunks/4b27ebd4d9304d8f.js +0 -1
- package/dashboard/out/_next/static/chunks/4b965aa320a9b358.js +0 -1
- package/dashboard/out/_next/static/chunks/4bb2da90bbe5794f.js +0 -1
- package/dashboard/out/_next/static/chunks/4d2f1c6f631e4b85.js +0 -1
- package/dashboard/out/_next/static/chunks/4d696d5a64dab42e.js +0 -1
- package/dashboard/out/_next/static/chunks/4f660dadb3f1e9e2.js +0 -1
- package/dashboard/out/_next/static/chunks/507b50d47f949333.js +0 -1
- package/dashboard/out/_next/static/chunks/50b1b7063bb044e2.js +0 -1
- package/dashboard/out/_next/static/chunks/50c0c2e3c4f02508.js +0 -1
- package/dashboard/out/_next/static/chunks/50d7ba9803e65b02.js +0 -1
- package/dashboard/out/_next/static/chunks/51535a6d4c98c7a4.js +0 -1
- package/dashboard/out/_next/static/chunks/526de6cc16c7dd2f.js +0 -1
- package/dashboard/out/_next/static/chunks/5307604f8632b3fd.js +0 -1
- package/dashboard/out/_next/static/chunks/5480bd722260f231.js +0 -1
- package/dashboard/out/_next/static/chunks/54c61c82e5f1dca5.js +0 -1
- package/dashboard/out/_next/static/chunks/555de6ac6bb9034c.js +0 -1
- package/dashboard/out/_next/static/chunks/562b89ee76a4b90c.js +0 -1
- package/dashboard/out/_next/static/chunks/5747f9a32edff429.js +0 -1
- package/dashboard/out/_next/static/chunks/57ee141430b4c05c.js +0 -1
- package/dashboard/out/_next/static/chunks/584c066a0837dd9a.js +0 -1
- package/dashboard/out/_next/static/chunks/5856aed4670a6253.js +0 -1
- package/dashboard/out/_next/static/chunks/58fe563414726511.js +0 -1
- package/dashboard/out/_next/static/chunks/5948196b2729b18c.js +0 -1
- package/dashboard/out/_next/static/chunks/5ab77c69e7306f97.js +0 -1
- package/dashboard/out/_next/static/chunks/5b3fa4c99d61611c.js +0 -1
- package/dashboard/out/_next/static/chunks/5cc87abaef616661.js +0 -1
- package/dashboard/out/_next/static/chunks/5dfa7913f99bb966.js +0 -1
- package/dashboard/out/_next/static/chunks/5e49b008432770f1.js +0 -1
- package/dashboard/out/_next/static/chunks/5e5a33dd81c45c47.js +0 -1
- package/dashboard/out/_next/static/chunks/5ee61bed638eb8a8.js +0 -1
- package/dashboard/out/_next/static/chunks/5eed557b9f45ae4a.js +0 -1
- package/dashboard/out/_next/static/chunks/60446823a7d30c1b.js +0 -1
- package/dashboard/out/_next/static/chunks/605150c490861442.js +0 -1
- package/dashboard/out/_next/static/chunks/609056d51c0bf332.js +0 -1
- package/dashboard/out/_next/static/chunks/60ec91dfeb50071b.js +0 -1
- package/dashboard/out/_next/static/chunks/61bc7be0bba6a33f.js +0 -1
- package/dashboard/out/_next/static/chunks/61f4a5c9ce23e55e.js +0 -1
- package/dashboard/out/_next/static/chunks/63aae3585be04e65.js +0 -1
- package/dashboard/out/_next/static/chunks/64e0e1ee7ef4f01b.js +0 -1
- package/dashboard/out/_next/static/chunks/66e9b4c26ff1aaaf.js +0 -1
- package/dashboard/out/_next/static/chunks/67068847aa1b5e98.js +0 -1
- package/dashboard/out/_next/static/chunks/68d7de1f2e202c26.js +0 -1
- package/dashboard/out/_next/static/chunks/698ca3ea1937ba4f.js +0 -1
- package/dashboard/out/_next/static/chunks/69eb97c24b5b6b9d.js +0 -1
- package/dashboard/out/_next/static/chunks/6b1ac098c228a479.js +0 -1
- package/dashboard/out/_next/static/chunks/6bb8020cb796bcc1.js +0 -1
- package/dashboard/out/_next/static/chunks/6cf8b1db17f2a155.js +0 -1
- package/dashboard/out/_next/static/chunks/6e7613643906ea88.js +0 -1
- package/dashboard/out/_next/static/chunks/6ea27ceb2e6feae5.js +0 -1
- package/dashboard/out/_next/static/chunks/6f95a8dbcf23dded.js +0 -1
- package/dashboard/out/_next/static/chunks/6fd44e759d82f64e.js +0 -1
- package/dashboard/out/_next/static/chunks/716ec29c268c38f6.js +0 -1
- package/dashboard/out/_next/static/chunks/717b399dfcf7c02c.js +0 -1
- package/dashboard/out/_next/static/chunks/72badd90e1c91348.js +0 -1
- package/dashboard/out/_next/static/chunks/72f9296dbb7ae3c4.js +0 -1
- package/dashboard/out/_next/static/chunks/73aa31e1144d8191.js +0 -1
- package/dashboard/out/_next/static/chunks/73f98ded8fe2e879.js +0 -1
- package/dashboard/out/_next/static/chunks/740a2e8ace15e13b.js +0 -1
- package/dashboard/out/_next/static/chunks/74e57c16e7304b6b.js +0 -1
- package/dashboard/out/_next/static/chunks/7628dead4d113df2.js +0 -1
- package/dashboard/out/_next/static/chunks/7717c88c07ed96e6.js +0 -1
- package/dashboard/out/_next/static/chunks/775581f7956d9a27.js +0 -1
- package/dashboard/out/_next/static/chunks/77d3b6661befdb98.js +0 -1
- package/dashboard/out/_next/static/chunks/78435c0e1c77fea7.js +0 -1
- package/dashboard/out/_next/static/chunks/791336748b9c9393.js +0 -1
- package/dashboard/out/_next/static/chunks/79ea68dfae65ef2f.js +0 -1
- package/dashboard/out/_next/static/chunks/7bae777a472eb13c.js +0 -1
- package/dashboard/out/_next/static/chunks/7fd847f47237a35c.js +0 -1
- package/dashboard/out/_next/static/chunks/804d718be0370058.css +0 -1
- package/dashboard/out/_next/static/chunks/807cb3c1923995ab.js +0 -1
- package/dashboard/out/_next/static/chunks/8286b39407d94447.js +0 -1
- package/dashboard/out/_next/static/chunks/84e4305b8dc830ed.js +0 -1
- package/dashboard/out/_next/static/chunks/850f99dbfabb53e0.js +0 -1
- package/dashboard/out/_next/static/chunks/85594127e66b6b7f.js +0 -1
- package/dashboard/out/_next/static/chunks/858c11169c183c9c.js +0 -1
- package/dashboard/out/_next/static/chunks/85e27005dfe4c3e3.js +0 -1
- package/dashboard/out/_next/static/chunks/8707bd3d8ddc1f1c.js +0 -1
- package/dashboard/out/_next/static/chunks/8851e5d7ef894973.js +0 -1
- package/dashboard/out/_next/static/chunks/88ba3782cc614989.js +0 -1
- package/dashboard/out/_next/static/chunks/8a0c9a181784c2ef.js +0 -1
- package/dashboard/out/_next/static/chunks/8ad01ae355a6e7f6.js +0 -1
- package/dashboard/out/_next/static/chunks/8d2ed93b0d0a4b4f.js +0 -1
- package/dashboard/out/_next/static/chunks/8dc352ebd5310d3c.js +0 -1
- package/dashboard/out/_next/static/chunks/8dd1d722c8c1a22c.js +0 -1
- package/dashboard/out/_next/static/chunks/8e60fe307e3e4986.js +0 -1
- package/dashboard/out/_next/static/chunks/8eea4dd71e25f32a.js +0 -1
- package/dashboard/out/_next/static/chunks/8f468a65bac34eaa.js +0 -1
- package/dashboard/out/_next/static/chunks/9057e5382d6a5059.js +0 -1
- package/dashboard/out/_next/static/chunks/931d056437805ecb.js +0 -1
- package/dashboard/out/_next/static/chunks/954eb11648dd8cff.js +0 -1
- package/dashboard/out/_next/static/chunks/955034d876d14bb3.js +0 -1
- package/dashboard/out/_next/static/chunks/966c4895773249f6.js +0 -1
- package/dashboard/out/_next/static/chunks/96aff410a6ab106c.js +0 -1
- package/dashboard/out/_next/static/chunks/99b396c821c1dd2d.js +0 -1
- package/dashboard/out/_next/static/chunks/9a255fd2cf4922ae.js +0 -1
- package/dashboard/out/_next/static/chunks/9b1f6aa73bc864b2.js +0 -1
- package/dashboard/out/_next/static/chunks/9b9ce582c533aa79.js +0 -1
- package/dashboard/out/_next/static/chunks/9c19bd3c773c6611.js +0 -1
- package/dashboard/out/_next/static/chunks/9ceeaa847eb15ca2.js +0 -1
- package/dashboard/out/_next/static/chunks/9d2e6e7b8b65f845.js +0 -1
- package/dashboard/out/_next/static/chunks/9de23802066128ff.js +0 -1
- package/dashboard/out/_next/static/chunks/9e327f94b3701170.js +0 -1
- package/dashboard/out/_next/static/chunks/9e7818421c2d455a.js +0 -1
- package/dashboard/out/_next/static/chunks/9e935acbcf2fb519.js +0 -1
- package/dashboard/out/_next/static/chunks/9ed9f68340343b51.js +0 -1
- package/dashboard/out/_next/static/chunks/9f94a0242455fc20.js +0 -1
- package/dashboard/out/_next/static/chunks/9fff46b5aaecf47e.js +0 -1
- package/dashboard/out/_next/static/chunks/a06d267a5c557657.js +0 -1
- package/dashboard/out/_next/static/chunks/a0eb8c81c54722fe.js +0 -1
- package/dashboard/out/_next/static/chunks/a16808e83106427d.js +0 -1
- package/dashboard/out/_next/static/chunks/a2215e2bc72739ef.js +0 -1
- package/dashboard/out/_next/static/chunks/a2de9e6696eb9c17.js +0 -1
- package/dashboard/out/_next/static/chunks/a33420b8c14090d6.js +0 -1
- package/dashboard/out/_next/static/chunks/a360bffef39d818b.js +0 -1
- package/dashboard/out/_next/static/chunks/a42852fdf5287cf5.js +0 -1
- package/dashboard/out/_next/static/chunks/a4efc88488322b67.js +0 -1
- package/dashboard/out/_next/static/chunks/a696a91d14101bdb.js +0 -1
- package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js +0 -1
- package/dashboard/out/_next/static/chunks/a6dad97d9634a72d.js.map +0 -1
- package/dashboard/out/_next/static/chunks/a705c7261712bd8e.js +0 -1
- package/dashboard/out/_next/static/chunks/a7d1e4b067ace180.js +0 -1
- package/dashboard/out/_next/static/chunks/a8590c121a7efaa5.js +0 -1
- package/dashboard/out/_next/static/chunks/a95953a83a6df6cf.js +0 -1
- package/dashboard/out/_next/static/chunks/a9d0a757d3b4afed.js +0 -1
- package/dashboard/out/_next/static/chunks/a9dc35514619c872.js +0 -1
- package/dashboard/out/_next/static/chunks/aae0253c73fba984.js +0 -193
- package/dashboard/out/_next/static/chunks/ab1821552066a74d.js +0 -1
- package/dashboard/out/_next/static/chunks/ac96bc0eccebe15a.js +0 -1
- package/dashboard/out/_next/static/chunks/acc03cfaaf6bb30f.js +0 -1
- package/dashboard/out/_next/static/chunks/acc298ae059b9fe4.js +0 -1
- package/dashboard/out/_next/static/chunks/ad076b6e996d250c.js +0 -1
- package/dashboard/out/_next/static/chunks/ae53b64af7ba16d5.js +0 -1
- package/dashboard/out/_next/static/chunks/ae5da7fa4bc5fa95.js +0 -1
- package/dashboard/out/_next/static/chunks/aefcf0eb033a155e.js +0 -1
- package/dashboard/out/_next/static/chunks/b12d43100ee10526.js +0 -1
- package/dashboard/out/_next/static/chunks/b137952dd5566a41.js +0 -1
- package/dashboard/out/_next/static/chunks/b2832d8a2d332a47.js +0 -1
- package/dashboard/out/_next/static/chunks/b417aa09c15f63c6.js +0 -1
- package/dashboard/out/_next/static/chunks/b48e152ba7bf6caf.js +0 -1
- package/dashboard/out/_next/static/chunks/b4cbef8e4714bf92.js +0 -1
- package/dashboard/out/_next/static/chunks/b568ff8383a37f53.js +0 -1
- package/dashboard/out/_next/static/chunks/b6e1495dd89a39e3.js +0 -1
- package/dashboard/out/_next/static/chunks/b73a21bd67528440.js +0 -1
- package/dashboard/out/_next/static/chunks/b77ee62bc71dcec7.js +0 -1
- package/dashboard/out/_next/static/chunks/b7f454615c11d4eb.js +0 -1
- package/dashboard/out/_next/static/chunks/b818ea32a839590f.js +0 -1
- package/dashboard/out/_next/static/chunks/b901ce78c1c65d66.js +0 -1
- package/dashboard/out/_next/static/chunks/b93d647b803be9fa.js +0 -1
- package/dashboard/out/_next/static/chunks/b960b09ff1ecd6bb.js +0 -1
- package/dashboard/out/_next/static/chunks/ba717c7779a778fc.js +0 -1
- package/dashboard/out/_next/static/chunks/bacb0ae7458d18b6.js +0 -1
- package/dashboard/out/_next/static/chunks/bb51f68b27346852.js +0 -1
- package/dashboard/out/_next/static/chunks/bb67f22e1ab632ae.js +0 -1
- package/dashboard/out/_next/static/chunks/bbae97ec58d1bb9d.js +0 -1
- package/dashboard/out/_next/static/chunks/bbaf38ee90307765.js +0 -1
- package/dashboard/out/_next/static/chunks/be01598fe1fce5db.js +0 -1
- package/dashboard/out/_next/static/chunks/bf4cbbc095987fec.js +0 -1
- package/dashboard/out/_next/static/chunks/c18f823797d57446.js +0 -1
- package/dashboard/out/_next/static/chunks/c1bcece34ec5b295.js +0 -1
- package/dashboard/out/_next/static/chunks/c1ccbc3a51adaf0a.js +0 -1
- package/dashboard/out/_next/static/chunks/c1f54a628f27791c.js +0 -1
- package/dashboard/out/_next/static/chunks/c21916bf5d232151.js +0 -1
- package/dashboard/out/_next/static/chunks/c27e570f0fc2f78b.js +0 -1
- package/dashboard/out/_next/static/chunks/c322b8005eebc0d8.js +0 -1
- package/dashboard/out/_next/static/chunks/c3900ac2b009b764.js +0 -1
- package/dashboard/out/_next/static/chunks/c3c597c8eb77ad6b.js +0 -1
- package/dashboard/out/_next/static/chunks/c58d45c1d88e208c.js +0 -1
- package/dashboard/out/_next/static/chunks/c63875998d7a655f.js +0 -1
- package/dashboard/out/_next/static/chunks/c6eaa7c8e7209c8e.js +0 -1
- package/dashboard/out/_next/static/chunks/c6f820f71162a59a.js +0 -1
- package/dashboard/out/_next/static/chunks/c7ce0941d1dfe7ed.js +0 -1
- package/dashboard/out/_next/static/chunks/c877259f784ec8e5.js +0 -1
- package/dashboard/out/_next/static/chunks/cb8057e86aaa1c68.js +0 -1
- package/dashboard/out/_next/static/chunks/ccb4e306ee4859b1.js +0 -1
- package/dashboard/out/_next/static/chunks/ccde62b0fa8112eb.js +0 -1
- package/dashboard/out/_next/static/chunks/cd421f0971c63c31.js +0 -1
- package/dashboard/out/_next/static/chunks/cde0317494d4adb7.js +0 -1
- package/dashboard/out/_next/static/chunks/cfae64434b92b8b6.js +0 -1
- package/dashboard/out/_next/static/chunks/cfc0e19310ec0a36.js +0 -1
- package/dashboard/out/_next/static/chunks/d0f344c7d0bcb59a.js +0 -1
- package/dashboard/out/_next/static/chunks/d1871c73e74e1f50.js +0 -1
- package/dashboard/out/_next/static/chunks/d18f658850711061.js +0 -1
- package/dashboard/out/_next/static/chunks/d25d9c48880697f6.js +0 -1
- package/dashboard/out/_next/static/chunks/d3f0a72bbc3060b0.js +0 -1
- package/dashboard/out/_next/static/chunks/d5fca429bc89060b.js +0 -1
- package/dashboard/out/_next/static/chunks/d6a6c75c9a4bef49.js +0 -1
- package/dashboard/out/_next/static/chunks/d6a8f93aa8f1e345.js +0 -1
- package/dashboard/out/_next/static/chunks/d7deab676b19ba0e.js +0 -1
- package/dashboard/out/_next/static/chunks/d80030dde88cec85.js +0 -1
- package/dashboard/out/_next/static/chunks/da84f9774c076ff1.js +0 -1
- package/dashboard/out/_next/static/chunks/da98ecc6b9b0ceb2.js +0 -1
- package/dashboard/out/_next/static/chunks/db550aabce60b912.js +0 -4
- package/dashboard/out/_next/static/chunks/dc87f77fcc029482.js +0 -1
- package/dashboard/out/_next/static/chunks/dd05f30acdb63a53.js +0 -1
- package/dashboard/out/_next/static/chunks/dea150155499b903.js +0 -1
- package/dashboard/out/_next/static/chunks/df4358754ff1d5e8.js +0 -1
- package/dashboard/out/_next/static/chunks/df8b21ff12d23b0e.js +0 -1
- package/dashboard/out/_next/static/chunks/df8fc68d77debf2c.js +0 -1
- package/dashboard/out/_next/static/chunks/df9ed1ffec90589f.js +0 -1
- package/dashboard/out/_next/static/chunks/dfa65ece1598f934.js +0 -1
- package/dashboard/out/_next/static/chunks/dfaab5cdd41a20d9.js +0 -1
- package/dashboard/out/_next/static/chunks/e00c03c942b5ae3e.js +0 -1
- package/dashboard/out/_next/static/chunks/e02d27cf679bece1.js +0 -1
- package/dashboard/out/_next/static/chunks/e0b747585f78513a.js +0 -1
- package/dashboard/out/_next/static/chunks/e19b71ca23fd7df0.js +0 -1
- package/dashboard/out/_next/static/chunks/e21cbe89d0cda120.js +0 -1
- package/dashboard/out/_next/static/chunks/e2a0386930edd34f.js +0 -1
- package/dashboard/out/_next/static/chunks/e375de19a36e2f38.js +0 -1
- package/dashboard/out/_next/static/chunks/e5241b4a6496a9e0.js +0 -1
- package/dashboard/out/_next/static/chunks/e569dd07c96eb4dd.js +0 -1
- package/dashboard/out/_next/static/chunks/e61c3ea91233f948.js +0 -1
- package/dashboard/out/_next/static/chunks/e73b42c5d34c4c28.js +0 -1
- package/dashboard/out/_next/static/chunks/e7c5b2105f651e87.js +0 -1
- package/dashboard/out/_next/static/chunks/e878e58a69bb01b6.js +0 -1
- package/dashboard/out/_next/static/chunks/e8f090a4dc571062.js +0 -1
- package/dashboard/out/_next/static/chunks/e98dc34dac91cdad.js +0 -1
- package/dashboard/out/_next/static/chunks/ea67cf7a0c5e7233.js +0 -1
- package/dashboard/out/_next/static/chunks/eacc98a1e3512fa9.js +0 -1
- package/dashboard/out/_next/static/chunks/eae9cd74d9bbed8b.js +0 -1
- package/dashboard/out/_next/static/chunks/eb187fd345852b34.js +0 -1
- package/dashboard/out/_next/static/chunks/ecea46df7a40b427.js +0 -1
- package/dashboard/out/_next/static/chunks/ecf48b83f4245d9c.js +0 -1
- package/dashboard/out/_next/static/chunks/eda41732bf966c6d.js +0 -1
- package/dashboard/out/_next/static/chunks/ee174a433049f43a.js +0 -1
- package/dashboard/out/_next/static/chunks/ee66b2d3b76de72e.js +0 -1
- package/dashboard/out/_next/static/chunks/ef058d3041c3d8ab.js +0 -1
- package/dashboard/out/_next/static/chunks/f3544b800b0d4969.js +0 -1
- package/dashboard/out/_next/static/chunks/f3b280e604b97509.js +0 -1
- package/dashboard/out/_next/static/chunks/f42e1d3693232993.js +0 -1
- package/dashboard/out/_next/static/chunks/f5a5fdd80166d304.js +0 -1
- package/dashboard/out/_next/static/chunks/f60adc5dd6169316.js +0 -1
- package/dashboard/out/_next/static/chunks/f6255bc2e6c68ce8.js +0 -1
- package/dashboard/out/_next/static/chunks/f6bb677d2d8840db.js +0 -1
- package/dashboard/out/_next/static/chunks/f6f3bf016239c33a.js +0 -1
- package/dashboard/out/_next/static/chunks/f6f57a46cd074bfe.js +0 -1
- package/dashboard/out/_next/static/chunks/f7feb9c1199e8cf6.js +0 -1
- package/dashboard/out/_next/static/chunks/f831087bf964cc3d.js +0 -1
- package/dashboard/out/_next/static/chunks/fa5a2f7244935aa2.js +0 -1
- package/dashboard/out/_next/static/chunks/fa73f36df4c38fa0.js +0 -1
- package/dashboard/out/_next/static/chunks/faa1461722d6a88d.js +0 -1
- package/dashboard/out/_next/static/chunks/fbf706b9a0edb7e6.js +0 -1
- package/dashboard/out/_next/static/chunks/fc2b8c8b7446bbc2.js +0 -1
- package/dashboard/out/_next/static/chunks/fd516f3930c128c1.js +0 -1
- package/dashboard/out/_next/static/chunks/fd663e7ff8de4887.js +0 -1
- package/dashboard/out/_next/static/chunks/fe5b656cc9bdd60e.js +0 -1
- package/dashboard/out/_next/static/chunks/turbopack-2f5dec4a537c0ee7.js +0 -4
- package/dashboard/out/_next/static/media/02263ebadd758ea4-s.8da66e7f.woff2 +0 -0
- package/dashboard/out/_next/static/media/2fe89d53234c61d4-s.cb53f04b.woff2 +0 -0
- package/dashboard/out/_next/static/media/59b15b4bcd7b1eb5-s.afa48be3.woff2 +0 -0
- package/dashboard/out/_next/static/media/5e05ae5b48faa55e-s.6b5ea6af.woff2 +0 -0
- package/dashboard/out/_next/static/media/68757d6cddeff913-s.e6cd1753.woff2 +0 -0
- package/dashboard/out/_next/static/media/99e609270109b47d-s.p.64b9304e.woff2 +0 -0
- package/dashboard/out/_next/static/media/a7afbb44bec2bb18-s.1dcddae6.woff2 +0 -0
- package/dashboard/out/_next/static/media/e390973e931a41c5-s.a82ecf4e.woff2 +0 -0
- package/dashboard/out/_next/static/media/e532fa1b9921e1cd-s.764b43eb.woff2 +0 -0
- package/dashboard/out/_next/static/media/effe91970fc4db64-s.p.19510058.woff2 +0 -0
- package/dashboard/out/_not-found/__next._full.txt +0 -15
- package/dashboard/out/_not-found/__next._head.txt +0 -5
- package/dashboard/out/_not-found/__next._index.txt +0 -7
- package/dashboard/out/_not-found/__next._not-found.__PAGE__.txt +0 -5
- package/dashboard/out/_not-found/__next._not-found.txt +0 -4
- package/dashboard/out/_not-found/__next._tree.txt +0 -2
- package/dashboard/out/_not-found/index.html +0 -1
- package/dashboard/out/_not-found/index.txt +0 -15
- package/dashboard/out/index.html +0 -1
- package/dashboard/out/index.txt +0 -21
- package/dashboard/out/project/__fallback/__next._full.txt +0 -19
- package/dashboard/out/project/__fallback/__next._head.txt +0 -5
- package/dashboard/out/project/__fallback/__next._index.txt +0 -7
- package/dashboard/out/project/__fallback/__next._tree.txt +0 -5
- package/dashboard/out/project/__fallback/__next.project.$d$name.__PAGE__.txt +0 -7
- package/dashboard/out/project/__fallback/__next.project.$d$name.txt +0 -4
- package/dashboard/out/project/__fallback/__next.project.txt +0 -4
- package/dashboard/out/project/__fallback/index.html +0 -1
- package/dashboard/out/project/__fallback/index.txt +0 -19
- package/src/__tests__/support.ts +0 -186
- package/src/attach.ts +0 -20
- package/src/cli.test.ts +0 -314
- package/src/command-center/discovery.test.ts +0 -265
- package/src/command-center/discovery.ts +0 -296
- package/src/command-center/index.ts +0 -31
- package/src/command-center/schemas.ts +0 -57
- package/src/command-center/server.test.ts +0 -814
- package/src/command-center/server.ts +0 -1427
- package/src/command-center/static.test.ts +0 -105
- package/src/command-center/static.ts +0 -122
- package/src/config-cli.test.ts +0 -86
- package/src/config.test.ts +0 -205
- package/src/config.ts +0 -313
- package/src/detect.test.ts +0 -142
- package/src/detect.ts +0 -248
- package/src/dispatch.ts +0 -102
- package/src/doctor.test.ts +0 -119
- package/src/doctor.ts +0 -167
- package/src/init.test.ts +0 -101
- package/src/init.ts +0 -211
- package/src/inspect.test.ts +0 -67
- package/src/inspect.ts +0 -212
- package/src/integration.test.ts.skip +0 -276
- package/src/js-yaml.d.ts +0 -10
- package/src/launch.test.ts +0 -149
- package/src/launch.ts +0 -583
- package/src/lib/auth/auth-service.test.ts +0 -178
- package/src/lib/auth/auth-service.ts +0 -227
- package/src/lib/auth/middleware.test.ts +0 -119
- package/src/lib/auth/middleware.ts +0 -56
- package/src/lib/auth/types.ts +0 -13
- package/src/lib/authorship.test.ts +0 -242
- package/src/lib/authorship.ts +0 -280
- package/src/lib/cast/recorder.test.ts +0 -127
- package/src/lib/cast/recorder.ts +0 -148
- package/src/lib/daemon-watchdog.ts +0 -102
- package/src/lib/daemon.ts +0 -431
- package/src/lib/dot-path.test.ts +0 -66
- package/src/lib/dot-path.ts +0 -17
- package/src/lib/errors.ts +0 -44
- package/src/lib/event-log.test.ts +0 -189
- package/src/lib/event-log.ts +0 -237
- package/src/lib/github-pr.ts +0 -182
- package/src/lib/hq/client.test.ts +0 -154
- package/src/lib/hq/client.ts +0 -142
- package/src/lib/hq/mdns.test.ts +0 -54
- package/src/lib/hq/mdns.ts +0 -88
- package/src/lib/hq/registry.test.ts +0 -237
- package/src/lib/hq/registry.ts +0 -145
- package/src/lib/hq/types.ts +0 -44
- package/src/lib/ipc/socket-protocol.test.ts +0 -126
- package/src/lib/ipc/socket-protocol.ts +0 -324
- package/src/lib/launch-plan.test.ts +0 -119
- package/src/lib/launch-plan.ts +0 -90
- package/src/lib/log.test.ts +0 -39
- package/src/lib/log.ts +0 -71
- package/src/lib/metrics.test.ts +0 -213
- package/src/lib/metrics.ts +0 -345
- package/src/lib/orchestrator.test.ts +0 -2358
- package/src/lib/orchestrator.ts +0 -1799
- package/src/lib/output.ts +0 -76
- package/src/lib/plan-store.test.ts +0 -148
- package/src/lib/plan-store.ts +0 -131
- package/src/lib/research.test.ts +0 -208
- package/src/lib/research.ts +0 -475
- package/src/lib/round-trip.test.ts +0 -341
- package/src/lib/session-monitor.test.ts +0 -152
- package/src/lib/session-monitor.ts +0 -282
- package/src/lib/session-options.test.ts +0 -146
- package/src/lib/session-options.ts +0 -100
- package/src/lib/shell.test.ts +0 -20
- package/src/lib/sizes.test.ts +0 -73
- package/src/lib/sizes.ts +0 -36
- package/src/lib/skill-registry.test.ts +0 -134
- package/src/lib/skill-registry.ts +0 -86
- package/src/lib/slugify.test.ts +0 -35
- package/src/lib/slugify.ts +0 -10
- package/src/lib/task-store.ts +0 -352
- package/src/lib/tmux.test.ts +0 -500
- package/src/lib/tmux.ts +0 -372
- package/src/lib/token-tracker.test.ts +0 -102
- package/src/lib/token-tracker.ts +0 -70
- package/src/lib/tunnels/cloudflare.test.ts +0 -73
- package/src/lib/tunnels/cloudflare.ts +0 -254
- package/src/lib/tunnels/manager.test.ts +0 -63
- package/src/lib/tunnels/manager.ts +0 -132
- package/src/lib/tunnels/ngrok.test.ts +0 -94
- package/src/lib/tunnels/ngrok.ts +0 -261
- package/src/lib/tunnels/tailscale.test.ts +0 -103
- package/src/lib/tunnels/tailscale.ts +0 -1048
- package/src/lib/tunnels/types.ts +0 -44
- package/src/lib/validation.test.ts +0 -289
- package/src/lib/validation.ts +0 -123
- package/src/lib/webhook.ts +0 -51
- package/src/lib/workflow-store.ts +0 -209
- package/src/lib/ws-v3/protocol.test.ts +0 -127
- package/src/lib/ws-v3/protocol.ts +0 -160
- package/src/lib/yaml-io.test.ts +0 -125
- package/src/lib/yaml-io.ts +0 -27
- package/src/ls.test.ts +0 -76
- package/src/ls.ts +0 -40
- package/src/metrics-cli.ts +0 -177
- package/src/notify.ts +0 -85
- package/src/orchestrator-status.ts +0 -228
- package/src/plan.ts +0 -117
- package/src/postinstall.test.ts +0 -79
- package/src/remote.test.ts +0 -115
- package/src/remote.ts +0 -148
- package/src/restart.ts +0 -24
- package/src/schemas/domain.ts +0 -422
- package/src/schemas/ide-config.ts +0 -148
- package/src/schemas/index.ts +0 -53
- package/src/send.test.ts +0 -70
- package/src/send.ts +0 -181
- package/src/skill.test.ts +0 -114
- package/src/skill.ts +0 -138
- package/src/status.ts +0 -66
- package/src/stop.test.ts +0 -151
- package/src/stop.ts +0 -37
- package/src/task.test.ts +0 -1466
- package/src/task.ts +0 -1143
- package/src/tunnel.test.ts +0 -80
- package/src/tunnel.ts +0 -133
- package/src/types.ts +0 -15
- package/src/ui/index.ts +0 -32
- package/src/ui/terminal/index.ts +0 -9
- package/src/ui/types.ts +0 -91
- package/src/ui/web/base.css +0 -80
- package/src/ui/web/components/Box.tsx +0 -59
- package/src/ui/web/components/Input.tsx +0 -32
- package/src/ui/web/components/ScrollBox.tsx +0 -60
- package/src/ui/web/components/Text.tsx +0 -28
- package/src/ui/web/hooks.ts +0 -106
- package/src/ui/web/index.ts +0 -27
- package/src/ui/web/render.ts +0 -77
- package/src/ui/web/utils/color.test.ts +0 -93
- package/src/ui/web/utils/color.ts +0 -27
- package/src/validate.test.ts +0 -385
- package/src/validate.ts +0 -217
- package/src/widgets/changes/index.tsx +0 -576
- package/src/widgets/config/index.tsx +0 -440
- package/src/widgets/costs/index.tsx +0 -216
- package/src/widgets/explorer/breadcrumbs.tsx +0 -77
- package/src/widgets/explorer/footer.tsx +0 -20
- package/src/widgets/explorer/header.tsx +0 -23
- package/src/widgets/explorer/index.tsx +0 -408
- package/src/widgets/explorer/tree-model.test.ts +0 -214
- package/src/widgets/explorer/tree-model.ts +0 -103
- package/src/widgets/explorer/tree.tsx +0 -156
- package/src/widgets/lib/config-model.ts +0 -116
- package/src/widgets/lib/files.test.ts +0 -103
- package/src/widgets/lib/files.ts +0 -88
- package/src/widgets/lib/git.test.ts +0 -151
- package/src/widgets/lib/git.ts +0 -88
- package/src/widgets/lib/pane-comms.test.ts +0 -178
- package/src/widgets/lib/pane-comms.ts +0 -207
- package/src/widgets/lib/theme.ts +0 -151
- package/src/widgets/lib/watcher.ts +0 -50
- package/src/widgets/mission-control/activity-feed.tsx +0 -59
- package/src/widgets/mission-control/agent-panel.tsx +0 -132
- package/src/widgets/mission-control/command-bar.tsx +0 -63
- package/src/widgets/mission-control/index.tsx +0 -751
- package/src/widgets/mission-control/task-panel.tsx +0 -238
- package/src/widgets/preview/index.tsx +0 -415
- package/src/widgets/resolve.ts +0 -40
- package/src/widgets/setup/agent-naming.tsx +0 -112
- package/src/widgets/setup/config-tree.tsx +0 -238
- package/src/widgets/setup/field-editor.tsx +0 -265
- package/src/widgets/setup/footer.tsx +0 -107
- package/src/widgets/setup/index.tsx +0 -340
- package/src/widgets/setup/layout-picker.tsx +0 -96
- package/src/widgets/setup/orchestrator-panel.tsx +0 -200
- package/src/widgets/setup/review-panel.tsx +0 -140
- package/src/widgets/setup/setup-model.test.ts +0 -303
- package/src/widgets/setup/setup-model.ts +0 -188
- package/src/widgets/tasks/index.tsx +0 -129
- package/src/widgets/tasks/task-detail.tsx +0 -309
- package/src/widgets/tasks/task-form.tsx +0 -193
- package/src/widgets/tasks/task-list.tsx +0 -205
- package/src/widgets/tasks/task-model.test.ts +0 -473
- package/src/widgets/tasks/task-model.ts +0 -157
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { shellEscape } from "./shell.js";
|
|
3
|
+
export function buildPaneCommand(pane) {
|
|
4
|
+
if (!pane.command)
|
|
5
|
+
return null;
|
|
6
|
+
return pane.command;
|
|
7
|
+
}
|
|
8
|
+
export function collectPaneStartupPlan(rows, paneMap, firstPanesOfRows, dir) {
|
|
9
|
+
let focusPane = paneMap[0][0];
|
|
10
|
+
const paneActions = [];
|
|
11
|
+
for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {
|
|
12
|
+
const row = rows[rowIdx];
|
|
13
|
+
const panes = row.panes ?? [];
|
|
14
|
+
for (let paneIdx = 0; paneIdx < panes.length; paneIdx++) {
|
|
15
|
+
const pane = panes[paneIdx];
|
|
16
|
+
const tmuxPane = paneMap[rowIdx][paneIdx];
|
|
17
|
+
// Derive @ide_role from pane config
|
|
18
|
+
let paneRole;
|
|
19
|
+
if (pane.role === "lead") {
|
|
20
|
+
paneRole = "lead";
|
|
21
|
+
}
|
|
22
|
+
else if (pane.role === "teammate" || pane.role === "planner") {
|
|
23
|
+
paneRole = "teammate";
|
|
24
|
+
}
|
|
25
|
+
else if (pane.type) {
|
|
26
|
+
paneRole = "widget";
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
paneRole = "shell";
|
|
30
|
+
}
|
|
31
|
+
// Derive @ide_type from pane config
|
|
32
|
+
let paneType;
|
|
33
|
+
if (pane.type) {
|
|
34
|
+
paneType = pane.type;
|
|
35
|
+
}
|
|
36
|
+
else if (pane.command && /claude|codex/i.test(pane.command)) {
|
|
37
|
+
paneType = "agent";
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
paneType = "shell";
|
|
41
|
+
}
|
|
42
|
+
const action = {
|
|
43
|
+
targetPane: tmuxPane,
|
|
44
|
+
title: pane.title ?? null,
|
|
45
|
+
chdir: null,
|
|
46
|
+
exports: [],
|
|
47
|
+
command: null,
|
|
48
|
+
widgetType: pane.type ?? null,
|
|
49
|
+
widgetTarget: pane.target ?? null,
|
|
50
|
+
paneRole,
|
|
51
|
+
paneType,
|
|
52
|
+
};
|
|
53
|
+
if (pane.dir && firstPanesOfRows.has(tmuxPane)) {
|
|
54
|
+
action.chdir = resolve(dir, pane.dir);
|
|
55
|
+
}
|
|
56
|
+
if (pane.env && typeof pane.env === "object") {
|
|
57
|
+
action.exports = Object.entries(pane.env).map(([key, value]) => `export ${shellEscape(key)}=${shellEscape(String(value))}`);
|
|
58
|
+
}
|
|
59
|
+
let command = buildPaneCommand(pane);
|
|
60
|
+
// Inject --name flag into Claude/Codex commands so the agent
|
|
61
|
+
// sets its own pane title to match the configured name.
|
|
62
|
+
// This is agent-agnostic: any CLI that respects --name will work.
|
|
63
|
+
if (command && pane.title && /claude|codex/i.test(command) && !command.includes("--name")) {
|
|
64
|
+
command = `${command} --name ${shellEscape(pane.title)}`;
|
|
65
|
+
}
|
|
66
|
+
if (command) {
|
|
67
|
+
action.command = command;
|
|
68
|
+
}
|
|
69
|
+
if (pane.focus) {
|
|
70
|
+
focusPane = tmuxPane;
|
|
71
|
+
}
|
|
72
|
+
paneActions.push(action);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { focusPane, paneActions };
|
|
76
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Minimal structured logger for tmux-ide daemon processes. */
|
|
2
|
+
type Level = "debug" | "info" | "warn" | "error";
|
|
3
|
+
export declare function setLogLevel(level: Level): void;
|
|
4
|
+
export interface LogEntry {
|
|
5
|
+
ts: string;
|
|
6
|
+
level: Level;
|
|
7
|
+
component: string;
|
|
8
|
+
msg: string;
|
|
9
|
+
data?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
type Subscriber = (entry: LogEntry) => void;
|
|
12
|
+
/** Snapshot the current ring buffer; useful for SSE backfill. */
|
|
13
|
+
export declare function getLogBuffer(): ReadonlyArray<LogEntry>;
|
|
14
|
+
/**
|
|
15
|
+
* Subscribe to live log entries. Returns an unsubscribe function. The
|
|
16
|
+
* handler runs synchronously inside the writer — keep it cheap; throw
|
|
17
|
+
* inside the handler is caught + logged once so one bad subscriber
|
|
18
|
+
* can't stall the daemon.
|
|
19
|
+
*/
|
|
20
|
+
export declare function subscribeLogs(handler: Subscriber): () => void;
|
|
21
|
+
export declare const logger: {
|
|
22
|
+
debug: (component: string, msg: string, data?: Record<string, unknown>) => void;
|
|
23
|
+
info: (component: string, msg: string, data?: Record<string, unknown>) => void;
|
|
24
|
+
warn: (component: string, msg: string, data?: Record<string, unknown>) => void;
|
|
25
|
+
error: (component: string, msg: string, data?: Record<string, unknown>) => void;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Thin logger shim compatible with VibeTunnel's module logger API (`createLogger`-style methods).
|
|
29
|
+
* Wraps `console.*` (distinct from structured JSON `logger` above).
|
|
30
|
+
*/
|
|
31
|
+
export type LogMethod = (...args: unknown[]) => void;
|
|
32
|
+
export declare const log: {
|
|
33
|
+
/** Alias for `info` / console.log (VibeTunnel `createLogger` compatibility). */
|
|
34
|
+
log: (...args: unknown[]) => void;
|
|
35
|
+
info: (...args: unknown[]) => void;
|
|
36
|
+
warn: (...args: unknown[]) => void;
|
|
37
|
+
error: (...args: unknown[]) => void;
|
|
38
|
+
debug: (...args: unknown[]) => void;
|
|
39
|
+
};
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** Minimal structured logger for tmux-ide daemon processes. */
|
|
2
|
+
const LEVEL_RANK = { debug: 0, info: 1, warn: 2, error: 3 };
|
|
3
|
+
let minLevel = process.env.LOG_LEVEL ?? "info";
|
|
4
|
+
export function setLogLevel(level) {
|
|
5
|
+
minLevel = level;
|
|
6
|
+
}
|
|
7
|
+
const LOG_BUFFER_SIZE = 1_000;
|
|
8
|
+
const logBuffer = [];
|
|
9
|
+
const subscribers = new Set();
|
|
10
|
+
/** Snapshot the current ring buffer; useful for SSE backfill. */
|
|
11
|
+
export function getLogBuffer() {
|
|
12
|
+
return logBuffer.slice();
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Subscribe to live log entries. Returns an unsubscribe function. The
|
|
16
|
+
* handler runs synchronously inside the writer — keep it cheap; throw
|
|
17
|
+
* inside the handler is caught + logged once so one bad subscriber
|
|
18
|
+
* can't stall the daemon.
|
|
19
|
+
*/
|
|
20
|
+
export function subscribeLogs(handler) {
|
|
21
|
+
subscribers.add(handler);
|
|
22
|
+
return () => {
|
|
23
|
+
subscribers.delete(handler);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function writeStructuredLog(level, component, message, data) {
|
|
27
|
+
if (LEVEL_RANK[level] < LEVEL_RANK[minLevel])
|
|
28
|
+
return;
|
|
29
|
+
const entry = {
|
|
30
|
+
ts: new Date().toISOString(),
|
|
31
|
+
level,
|
|
32
|
+
component,
|
|
33
|
+
msg: message,
|
|
34
|
+
...(data ? { data } : {}),
|
|
35
|
+
};
|
|
36
|
+
// Push to ring + drop oldest when over budget.
|
|
37
|
+
logBuffer.push(entry);
|
|
38
|
+
if (logBuffer.length > LOG_BUFFER_SIZE)
|
|
39
|
+
logBuffer.shift();
|
|
40
|
+
// Fan out to subscribers; isolate failures.
|
|
41
|
+
for (const sub of subscribers) {
|
|
42
|
+
try {
|
|
43
|
+
sub(entry);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
// Avoid recursion via the logger; write directly to stderr.
|
|
47
|
+
process.stderr.write(`[log.ts] subscriber threw: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// Stream form for humans tailing the process. The data field is
|
|
51
|
+
// serialized inline (matches the previous wire shape).
|
|
52
|
+
const wire = {
|
|
53
|
+
ts: entry.ts,
|
|
54
|
+
level: entry.level,
|
|
55
|
+
component: entry.component,
|
|
56
|
+
msg: entry.msg,
|
|
57
|
+
};
|
|
58
|
+
if (data)
|
|
59
|
+
Object.assign(wire, data);
|
|
60
|
+
const out = level === "error" ? process.stderr : process.stdout;
|
|
61
|
+
out.write(JSON.stringify(wire) + "\n");
|
|
62
|
+
}
|
|
63
|
+
export const logger = {
|
|
64
|
+
debug: (component, msg, data) => writeStructuredLog("debug", component, msg, data),
|
|
65
|
+
info: (component, msg, data) => writeStructuredLog("info", component, msg, data),
|
|
66
|
+
warn: (component, msg, data) => writeStructuredLog("warn", component, msg, data),
|
|
67
|
+
error: (component, msg, data) => writeStructuredLog("error", component, msg, data),
|
|
68
|
+
};
|
|
69
|
+
export const log = {
|
|
70
|
+
/** Alias for `info` / console.log (VibeTunnel `createLogger` compatibility). */
|
|
71
|
+
log: (...args) => {
|
|
72
|
+
console.log(...args);
|
|
73
|
+
},
|
|
74
|
+
info: (...args) => {
|
|
75
|
+
console.log(...args);
|
|
76
|
+
},
|
|
77
|
+
warn: (...args) => {
|
|
78
|
+
console.warn(...args);
|
|
79
|
+
},
|
|
80
|
+
error: (...args) => {
|
|
81
|
+
console.error(...args);
|
|
82
|
+
},
|
|
83
|
+
debug: (...args) => {
|
|
84
|
+
console.debug(...args);
|
|
85
|
+
},
|
|
86
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IdeError, TmuxError } from "./errors.ts";
|
|
2
|
+
import type { IdeConfig } from "../types.ts";
|
|
3
|
+
export declare function printLayout(config: IdeConfig): void;
|
|
4
|
+
export declare function outputError(message: string, code: string, { exitCode }?: {
|
|
5
|
+
exitCode?: number;
|
|
6
|
+
}): never;
|
|
7
|
+
export declare function printCommandError(error: IdeError | TmuxError, { json }?: {
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}): never;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { IdeError } from "./errors.js";
|
|
2
|
+
export function printLayout(config) {
|
|
3
|
+
const INNER = 40;
|
|
4
|
+
const rows = config.rows ?? [];
|
|
5
|
+
if (rows.length === 0)
|
|
6
|
+
return;
|
|
7
|
+
for (let r = 0; r < rows.length; r++) {
|
|
8
|
+
const panes = rows[r].panes ?? [];
|
|
9
|
+
const count = panes.length || 1;
|
|
10
|
+
const widths = [];
|
|
11
|
+
let remaining = INNER;
|
|
12
|
+
for (let i = 0; i < count; i++) {
|
|
13
|
+
const w = i < count - 1 ? Math.floor(INNER / count) : remaining;
|
|
14
|
+
widths.push(w);
|
|
15
|
+
remaining -= w;
|
|
16
|
+
}
|
|
17
|
+
// Top border or mid divider
|
|
18
|
+
if (r === 0) {
|
|
19
|
+
let top = " \u250c";
|
|
20
|
+
for (let i = 0; i < count; i++) {
|
|
21
|
+
top += "\u2500".repeat(widths[i]);
|
|
22
|
+
top += i < count - 1 ? "\u252c" : "\u2510";
|
|
23
|
+
}
|
|
24
|
+
console.log(top);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.log(" \u251c" + "\u2500".repeat(INNER + count - 1) + "\u2524");
|
|
28
|
+
}
|
|
29
|
+
// Content line
|
|
30
|
+
const sizeLabel = rows[r].size ?? "";
|
|
31
|
+
let line = " \u2502";
|
|
32
|
+
for (let i = 0; i < count; i++) {
|
|
33
|
+
const title = panes[i]?.title ?? "";
|
|
34
|
+
const w = widths[i];
|
|
35
|
+
const pad = Math.max(0, w - title.length);
|
|
36
|
+
const left = Math.floor(pad / 2);
|
|
37
|
+
const right = pad - left;
|
|
38
|
+
line += " ".repeat(left) + title + " ".repeat(right) + "\u2502";
|
|
39
|
+
}
|
|
40
|
+
if (sizeLabel)
|
|
41
|
+
line += " " + sizeLabel;
|
|
42
|
+
console.log(line);
|
|
43
|
+
// Bottom border (last row only)
|
|
44
|
+
if (r === rows.length - 1) {
|
|
45
|
+
let bot = " \u2514";
|
|
46
|
+
for (let i = 0; i < count; i++) {
|
|
47
|
+
bot += "\u2500".repeat(widths[i]);
|
|
48
|
+
bot += i < count - 1 ? "\u2534" : "\u2518";
|
|
49
|
+
}
|
|
50
|
+
console.log(bot);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function outputError(message, code, { exitCode = 1 } = {}) {
|
|
55
|
+
throw new IdeError(message, { code, exitCode });
|
|
56
|
+
}
|
|
57
|
+
export function printCommandError(error, { json = false } = {}) {
|
|
58
|
+
if (json) {
|
|
59
|
+
console.error(JSON.stringify(error.toJSON(), null, 2));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
console.error(error.message);
|
|
63
|
+
}
|
|
64
|
+
process.exit(error.exitCode ?? 1);
|
|
65
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run `tmux-ide init [--template <id>]` in a target directory and stream the
|
|
3
|
+
* output line-by-line. Used by `POST /api/projects/init` so the dashboard can
|
|
4
|
+
* scaffold new projects from the UI.
|
|
5
|
+
*
|
|
6
|
+
* The spawn helper is pluggable so tests can drive the runner without
|
|
7
|
+
* actually shelling out.
|
|
8
|
+
*/
|
|
9
|
+
import { type ChildProcessWithoutNullStreams } from "node:child_process";
|
|
10
|
+
/**
|
|
11
|
+
* The minimal contract of `child_process.spawn` we depend on. Tests pass in
|
|
12
|
+
* a synthetic implementation that emits lines deterministically.
|
|
13
|
+
*/
|
|
14
|
+
export type SpawnFn = (command: string, args: string[], options: {
|
|
15
|
+
cwd: string;
|
|
16
|
+
}) => ChildProcessWithoutNullStreams;
|
|
17
|
+
export interface InitRunnerOptions {
|
|
18
|
+
template?: string;
|
|
19
|
+
cwd: string;
|
|
20
|
+
onChunk: (chunk: string) => void;
|
|
21
|
+
/** Override for tests. */
|
|
22
|
+
spawnFn?: SpawnFn;
|
|
23
|
+
/** Defaults to 30s. */
|
|
24
|
+
timeoutMs?: number;
|
|
25
|
+
/** The binary to run. Defaults to `tmux-ide`; tests pin to a no-op. */
|
|
26
|
+
command?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare class ProjectInitTimeoutError extends Error {
|
|
29
|
+
readonly timeoutMs: number;
|
|
30
|
+
constructor(timeoutMs: number);
|
|
31
|
+
}
|
|
32
|
+
export declare class ProjectInitFailedError extends Error {
|
|
33
|
+
readonly exitCode: number | null;
|
|
34
|
+
readonly stderr: string;
|
|
35
|
+
constructor(exitCode: number | null, stderr: string);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Spawn `tmux-ide init` and resolve when it exits. Streams stdout+stderr
|
|
39
|
+
* through `onChunk` line-by-line so callers can fan them out over WebSocket.
|
|
40
|
+
*
|
|
41
|
+
* Resolves with `{ ok: true }` on exit code 0, rejects with
|
|
42
|
+
* `ProjectInitFailedError` (non-zero) or `ProjectInitTimeoutError` (>30s).
|
|
43
|
+
*/
|
|
44
|
+
export declare function runInit(options: InitRunnerOptions): Promise<{
|
|
45
|
+
ok: true;
|
|
46
|
+
}>;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run `tmux-ide init [--template <id>]` in a target directory and stream the
|
|
3
|
+
* output line-by-line. Used by `POST /api/projects/init` so the dashboard can
|
|
4
|
+
* scaffold new projects from the UI.
|
|
5
|
+
*
|
|
6
|
+
* The spawn helper is pluggable so tests can drive the runner without
|
|
7
|
+
* actually shelling out.
|
|
8
|
+
*/
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
11
|
+
export class ProjectInitTimeoutError extends Error {
|
|
12
|
+
timeoutMs;
|
|
13
|
+
constructor(timeoutMs) {
|
|
14
|
+
super(`tmux-ide init timed out after ${timeoutMs}ms`);
|
|
15
|
+
this.name = "ProjectInitTimeoutError";
|
|
16
|
+
this.timeoutMs = timeoutMs;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class ProjectInitFailedError extends Error {
|
|
20
|
+
exitCode;
|
|
21
|
+
stderr;
|
|
22
|
+
constructor(exitCode, stderr) {
|
|
23
|
+
super(`tmux-ide init exited with code ${exitCode ?? "(killed)"}: ${stderr || "no stderr"}`);
|
|
24
|
+
this.name = "ProjectInitFailedError";
|
|
25
|
+
this.exitCode = exitCode;
|
|
26
|
+
this.stderr = stderr;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Buffer stream chunks into newline-delimited lines, emit each line through
|
|
31
|
+
* `onChunk`. Returns a `flush()` to drain any trailing partial line on close.
|
|
32
|
+
*/
|
|
33
|
+
function lineStreamer(onChunk) {
|
|
34
|
+
let pending = "";
|
|
35
|
+
return {
|
|
36
|
+
push(text) {
|
|
37
|
+
pending += text;
|
|
38
|
+
let newline = pending.indexOf("\n");
|
|
39
|
+
while (newline >= 0) {
|
|
40
|
+
const line = pending.slice(0, newline).replace(/\r$/, "");
|
|
41
|
+
pending = pending.slice(newline + 1);
|
|
42
|
+
onChunk(line);
|
|
43
|
+
newline = pending.indexOf("\n");
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
flush() {
|
|
47
|
+
if (pending.length === 0)
|
|
48
|
+
return;
|
|
49
|
+
onChunk(pending.replace(/\r$/, ""));
|
|
50
|
+
pending = "";
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Spawn `tmux-ide init` and resolve when it exits. Streams stdout+stderr
|
|
56
|
+
* through `onChunk` line-by-line so callers can fan them out over WebSocket.
|
|
57
|
+
*
|
|
58
|
+
* Resolves with `{ ok: true }` on exit code 0, rejects with
|
|
59
|
+
* `ProjectInitFailedError` (non-zero) or `ProjectInitTimeoutError` (>30s).
|
|
60
|
+
*/
|
|
61
|
+
export async function runInit(options) {
|
|
62
|
+
const spawnFn = options.spawnFn ?? spawn;
|
|
63
|
+
const command = options.command ?? "tmux-ide";
|
|
64
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
65
|
+
const args = ["init"];
|
|
66
|
+
if (options.template)
|
|
67
|
+
args.push("--template", options.template);
|
|
68
|
+
const child = spawnFn(command, args, { cwd: options.cwd });
|
|
69
|
+
const stderrStreamer = lineStreamer(options.onChunk);
|
|
70
|
+
const stdoutStreamer = lineStreamer(options.onChunk);
|
|
71
|
+
let stderrBuffer = "";
|
|
72
|
+
child.stdout.setEncoding?.("utf-8");
|
|
73
|
+
child.stderr.setEncoding?.("utf-8");
|
|
74
|
+
child.stdout.on("data", (data) => {
|
|
75
|
+
stdoutStreamer.push(typeof data === "string" ? data : data.toString("utf-8"));
|
|
76
|
+
});
|
|
77
|
+
child.stderr.on("data", (data) => {
|
|
78
|
+
const text = typeof data === "string" ? data : data.toString("utf-8");
|
|
79
|
+
stderrBuffer += text;
|
|
80
|
+
stderrStreamer.push(text);
|
|
81
|
+
});
|
|
82
|
+
return new Promise((resolveResult, reject) => {
|
|
83
|
+
let timer = null;
|
|
84
|
+
let settled = false;
|
|
85
|
+
const settle = (fn) => {
|
|
86
|
+
if (settled)
|
|
87
|
+
return;
|
|
88
|
+
settled = true;
|
|
89
|
+
if (timer)
|
|
90
|
+
clearTimeout(timer);
|
|
91
|
+
stdoutStreamer.flush();
|
|
92
|
+
stderrStreamer.flush();
|
|
93
|
+
fn();
|
|
94
|
+
};
|
|
95
|
+
timer = setTimeout(() => {
|
|
96
|
+
try {
|
|
97
|
+
child.kill("SIGKILL");
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// child may already be gone
|
|
101
|
+
}
|
|
102
|
+
settle(() => reject(new ProjectInitTimeoutError(timeoutMs)));
|
|
103
|
+
}, timeoutMs);
|
|
104
|
+
timer.unref?.();
|
|
105
|
+
child.on("error", (err) => {
|
|
106
|
+
settle(() => reject(err));
|
|
107
|
+
});
|
|
108
|
+
child.on("close", (code) => {
|
|
109
|
+
if (code === 0) {
|
|
110
|
+
settle(() => resolveResult({ ok: true }));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
settle(() => reject(new ProjectInitFailedError(code, stderrBuffer.trim())));
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project inspect — looks at an arbitrary directory and reports whether it
|
|
3
|
+
* has an `ide.yml`, basic git identity, and the detected stack signals from
|
|
4
|
+
* `src/detect.ts`. Crucially, this is registry-agnostic: it never touches
|
|
5
|
+
* `~/.tmux-ide/projects.json`, so the dashboard can probe directories the
|
|
6
|
+
* user is just considering before deciding to register them.
|
|
7
|
+
*
|
|
8
|
+
* The git + ide.yml bits delegate to `probeProject` so we don't duplicate
|
|
9
|
+
* the timeout-bounded git invocations. The stack detection delegates to
|
|
10
|
+
* `detectStack` from `src/detect.ts` so the wire format stays in sync with
|
|
11
|
+
* `tmux-ide detect`.
|
|
12
|
+
*/
|
|
13
|
+
import type { ProjectInspect } from "../schemas/inspect.ts";
|
|
14
|
+
import { type ProbeIo } from "./project-probe.ts";
|
|
15
|
+
export declare class InspectDirNotFoundError extends Error {
|
|
16
|
+
readonly code = "DIR_NOT_FOUND";
|
|
17
|
+
constructor(dir: string);
|
|
18
|
+
}
|
|
19
|
+
export interface InspectIo {
|
|
20
|
+
exists?: (path: string) => boolean;
|
|
21
|
+
probeIo?: ProbeIo;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Inspect a directory and return identity + detected stack. Throws
|
|
25
|
+
* `InspectDirNotFoundError` if the directory doesn't exist; otherwise
|
|
26
|
+
* never throws (probe + detect both swallow internal failures).
|
|
27
|
+
*/
|
|
28
|
+
export declare function inspectProject(dir: string, io?: InspectIo): Promise<ProjectInspect>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project inspect — looks at an arbitrary directory and reports whether it
|
|
3
|
+
* has an `ide.yml`, basic git identity, and the detected stack signals from
|
|
4
|
+
* `src/detect.ts`. Crucially, this is registry-agnostic: it never touches
|
|
5
|
+
* `~/.tmux-ide/projects.json`, so the dashboard can probe directories the
|
|
6
|
+
* user is just considering before deciding to register them.
|
|
7
|
+
*
|
|
8
|
+
* The git + ide.yml bits delegate to `probeProject` so we don't duplicate
|
|
9
|
+
* the timeout-bounded git invocations. The stack detection delegates to
|
|
10
|
+
* `detectStack` from `src/detect.ts` so the wire format stays in sync with
|
|
11
|
+
* `tmux-ide detect`.
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync } from "node:fs";
|
|
14
|
+
import { isAbsolute, resolve } from "node:path";
|
|
15
|
+
import { detectStack } from "../detect.js";
|
|
16
|
+
import { probeProject } from "./project-probe.js";
|
|
17
|
+
export class InspectDirNotFoundError extends Error {
|
|
18
|
+
code = "DIR_NOT_FOUND";
|
|
19
|
+
constructor(dir) {
|
|
20
|
+
super(`Directory "${dir}" does not exist`);
|
|
21
|
+
this.name = "InspectDirNotFoundError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const KNOWN_PACKAGE_MANAGERS = new Set(["pnpm", "npm", "yarn", "bun"]);
|
|
25
|
+
function narrowPackageManager(raw) {
|
|
26
|
+
if (!raw)
|
|
27
|
+
return null;
|
|
28
|
+
return KNOWN_PACKAGE_MANAGERS.has(raw) ? raw : null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Compute a sensible test command from the detected stack. We don't have a
|
|
32
|
+
* dedicated test detector in `detectStack`, so we compose one from the
|
|
33
|
+
* package manager — best-effort, can be edited by the user in the wizard.
|
|
34
|
+
*/
|
|
35
|
+
function inferTestCommand(packageManager) {
|
|
36
|
+
if (!packageManager)
|
|
37
|
+
return null;
|
|
38
|
+
return packageManager === "npm" ? "npm test" : `${packageManager} test`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Inspect a directory and return identity + detected stack. Throws
|
|
42
|
+
* `InspectDirNotFoundError` if the directory doesn't exist; otherwise
|
|
43
|
+
* never throws (probe + detect both swallow internal failures).
|
|
44
|
+
*/
|
|
45
|
+
export async function inspectProject(dir, io = {}) {
|
|
46
|
+
const exists = io.exists ?? existsSync;
|
|
47
|
+
const absoluteDir = isAbsolute(dir) ? dir : resolve(dir);
|
|
48
|
+
if (!exists(absoluteDir)) {
|
|
49
|
+
throw new InspectDirNotFoundError(absoluteDir);
|
|
50
|
+
}
|
|
51
|
+
const probe = await probeProject(absoluteDir, io.probeIo);
|
|
52
|
+
const stack = detectStack(absoluteDir);
|
|
53
|
+
const detected = {
|
|
54
|
+
packageManager: narrowPackageManager(stack.packageManager),
|
|
55
|
+
frameworks: stack.frameworks,
|
|
56
|
+
devCommand: stack.devCommand,
|
|
57
|
+
testCommand: inferTestCommand(stack.packageManager),
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
name: probe.name,
|
|
61
|
+
dir: probe.dir,
|
|
62
|
+
hasIdeYml: probe.hasIdeYml,
|
|
63
|
+
gitOrigin: probe.gitOrigin,
|
|
64
|
+
gitBranch: probe.gitBranch,
|
|
65
|
+
detected,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project onboard — composes a sensible `ide.yml` from a small set of
|
|
3
|
+
* inputs (project name, agent count, optional dev/test commands) and
|
|
4
|
+
* writes it to disk so the project can be registered.
|
|
5
|
+
*
|
|
6
|
+
* `composeIdeYml` is the pure-logic bit (string in → string out) so the
|
|
7
|
+
* shape of the generated config is exhaustively unit-tested without
|
|
8
|
+
* touching the filesystem. The wrapper around `writeConfig` lives in the
|
|
9
|
+
* server route, which calls this function and then `registerProject`.
|
|
10
|
+
*/
|
|
11
|
+
import type { IdeConfig } from "../schemas/ide-config.ts";
|
|
12
|
+
export declare class OnboardConflictError extends Error {
|
|
13
|
+
readonly code = "IDE_YML_EXISTS";
|
|
14
|
+
constructor(path: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class OnboardInvalidInputError extends Error {
|
|
17
|
+
readonly code = "INVALID_INPUT";
|
|
18
|
+
constructor(message: string);
|
|
19
|
+
}
|
|
20
|
+
export interface ComposeIdeYmlInput {
|
|
21
|
+
/** Final project name written to the `name:` field. */
|
|
22
|
+
name: string;
|
|
23
|
+
/** 1, 2, or 3 — how many Claude panes to put in the top row. */
|
|
24
|
+
agents: number;
|
|
25
|
+
/**
|
|
26
|
+
* Optional per-agent pane titles. When provided, length must equal
|
|
27
|
+
* `agents`; otherwise it's ignored and the canonical defaults are used
|
|
28
|
+
* (`Lead`/`Teammate N` for team layouts, `Claude N` for solo).
|
|
29
|
+
*/
|
|
30
|
+
agentNames?: string[];
|
|
31
|
+
/** Dev server command. `null` / undefined → no dev pane. */
|
|
32
|
+
devCommand?: string | null;
|
|
33
|
+
/** Test command. Currently unused in the generated layout but kept for future. */
|
|
34
|
+
testCommand?: string | null;
|
|
35
|
+
/** Lint command. Currently unused in the generated layout but kept for future. */
|
|
36
|
+
lintCommand?: string | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Build the `IdeConfig` value the wizard should write. Pure: same input →
|
|
40
|
+
* same output, no io.
|
|
41
|
+
*
|
|
42
|
+
* Layout shape:
|
|
43
|
+
* - Row 0 (70%): N Claude panes, first focused. When `agents > 1`, the
|
|
44
|
+
* `team:` block is added so Claude Code launches with team mode.
|
|
45
|
+
* - Row 1 (30%): Dev pane (if `devCommand` set) + Shell pane.
|
|
46
|
+
*/
|
|
47
|
+
export declare function composeIdeYmlConfig(input: ComposeIdeYmlInput): IdeConfig;
|
|
48
|
+
/**
|
|
49
|
+
* Render a composed `IdeConfig` as YAML. Wrapper over `js-yaml` with the
|
|
50
|
+
* same options used elsewhere so the output shape is identical.
|
|
51
|
+
*/
|
|
52
|
+
export declare function composeIdeYml(input: ComposeIdeYmlInput): string;
|
|
53
|
+
/**
|
|
54
|
+
* Reject onboarding when `ide.yml` already exists. The caller writes the
|
|
55
|
+
* file separately via `writeConfig`; this helper exists so the route can
|
|
56
|
+
* 409 cleanly without ever overwriting user content.
|
|
57
|
+
*/
|
|
58
|
+
export declare function assertNoExistingIdeYml(dir: string, exists?: (path: string) => boolean): void;
|