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,118 @@
|
|
|
1
|
+
import { resolve, basename } from "node:path";
|
|
2
|
+
import { readConfig } from "./lib/yaml-io.js";
|
|
3
|
+
import { validateConfig } from "./validate.js";
|
|
4
|
+
import { outputError } from "./lib/output.js";
|
|
5
|
+
import { getSessionState, listPanes } from "@tmux-ide/tmux-bridge";
|
|
6
|
+
export function buildInspection(dir, { config, configPath, running, panes, }) {
|
|
7
|
+
const errors = validateConfig(config);
|
|
8
|
+
const rows = Array.isArray(config?.rows) ? config.rows : [];
|
|
9
|
+
const resolvedRows = rows.map((row, rowIndex) => ({
|
|
10
|
+
index: rowIndex,
|
|
11
|
+
size: row.size ?? null,
|
|
12
|
+
panes: (Array.isArray(row?.panes) ? row.panes : []).map((pane, paneIndex) => ({
|
|
13
|
+
index: paneIndex,
|
|
14
|
+
title: pane.title ?? null,
|
|
15
|
+
command: pane.command ?? null,
|
|
16
|
+
dir: pane.dir ?? ".",
|
|
17
|
+
size: pane.size ?? null,
|
|
18
|
+
focus: pane.focus === true,
|
|
19
|
+
role: pane.role ?? null,
|
|
20
|
+
task: pane.task ?? null,
|
|
21
|
+
env: pane.env ?? {},
|
|
22
|
+
})),
|
|
23
|
+
}));
|
|
24
|
+
const focusPane = resolvedRows
|
|
25
|
+
.flatMap((row) => row.panes.map((pane) => ({ row: row.index, pane })))
|
|
26
|
+
.find(({ pane }) => pane.focus) ?? null;
|
|
27
|
+
const session = config?.name ?? basename(dir);
|
|
28
|
+
return {
|
|
29
|
+
dir,
|
|
30
|
+
configPath,
|
|
31
|
+
valid: errors.length === 0,
|
|
32
|
+
errors,
|
|
33
|
+
session,
|
|
34
|
+
before: config?.before ?? null,
|
|
35
|
+
summary: {
|
|
36
|
+
rows: resolvedRows.length,
|
|
37
|
+
panes: resolvedRows.reduce((sum, row) => sum + row.panes.length, 0),
|
|
38
|
+
focus: focusPane ? `rows.${focusPane.row}.panes.${focusPane.pane.index}` : null,
|
|
39
|
+
},
|
|
40
|
+
team: config?.team ?? null,
|
|
41
|
+
theme: config?.theme ?? null,
|
|
42
|
+
focus: focusPane
|
|
43
|
+
? {
|
|
44
|
+
row: focusPane.row,
|
|
45
|
+
pane: focusPane.pane.index,
|
|
46
|
+
title: focusPane.pane.title,
|
|
47
|
+
}
|
|
48
|
+
: null,
|
|
49
|
+
rows: resolvedRows,
|
|
50
|
+
rawConfig: config,
|
|
51
|
+
tmux: {
|
|
52
|
+
running,
|
|
53
|
+
panes,
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export async function inspect(targetDir, { json } = {}) {
|
|
58
|
+
const dir = resolve(targetDir ?? ".");
|
|
59
|
+
let config;
|
|
60
|
+
let configPath;
|
|
61
|
+
try {
|
|
62
|
+
({ config, configPath } = readConfig(dir));
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
outputError(`Cannot read ide.yml: ${error.message}`, "READ_ERROR");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const session = config?.name ?? basename(dir);
|
|
69
|
+
const state = getSessionState(session);
|
|
70
|
+
const panes = state.running ? listPanes(session) : [];
|
|
71
|
+
const data = buildInspection(dir, { config, configPath, running: state.running, panes });
|
|
72
|
+
if (json) {
|
|
73
|
+
console.log(JSON.stringify(data, null, 2));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
console.log(`Directory: ${data.dir}`);
|
|
77
|
+
console.log(`Config: ${data.configPath}`);
|
|
78
|
+
console.log(`Valid: ${data.valid ? "yes" : "no"}`);
|
|
79
|
+
console.log(`Session: ${data.session}`);
|
|
80
|
+
console.log(`Running: ${data.tmux.running ? "yes" : "no"}`);
|
|
81
|
+
console.log(`Rows: ${data.summary.rows}`);
|
|
82
|
+
console.log(`Panes: ${data.summary.panes}`);
|
|
83
|
+
console.log(`Team: ${data.team ? data.team.name : "disabled"}`);
|
|
84
|
+
if (data.focus) {
|
|
85
|
+
console.log(`Focus: row ${data.focus.row}, pane ${data.focus.pane}${data.focus.title ? ` (${data.focus.title})` : ""}`);
|
|
86
|
+
}
|
|
87
|
+
if (!data.valid) {
|
|
88
|
+
console.log("\nValidation Errors:");
|
|
89
|
+
for (const error of data.errors) {
|
|
90
|
+
console.log(` - ${error}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
console.log("\nResolved Layout:");
|
|
94
|
+
for (const row of data.rows) {
|
|
95
|
+
console.log(` Row ${row.index}${row.size ? ` (${row.size})` : ""}`);
|
|
96
|
+
for (const pane of row.panes) {
|
|
97
|
+
const parts = [];
|
|
98
|
+
if (pane.title)
|
|
99
|
+
parts.push(pane.title);
|
|
100
|
+
if (pane.command)
|
|
101
|
+
parts.push(`cmd=${pane.command}`);
|
|
102
|
+
if (pane.dir && pane.dir !== ".")
|
|
103
|
+
parts.push(`dir=${pane.dir}`);
|
|
104
|
+
if (pane.role)
|
|
105
|
+
parts.push(`role=${pane.role}`);
|
|
106
|
+
if (pane.focus)
|
|
107
|
+
parts.push("focus");
|
|
108
|
+
console.log(` - pane ${pane.index}: ${parts.join(" | ") || "shell"}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (data.tmux.running && data.tmux.panes.length > 0) {
|
|
112
|
+
console.log("\nLive Panes:");
|
|
113
|
+
for (const pane of data.tmux.panes) {
|
|
114
|
+
const active = pane.active ? " (active)" : "";
|
|
115
|
+
console.log(` ${pane.index}: ${pane.title} [${pane.width}x${pane.height}]${active}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Row } from "./types.ts";
|
|
2
|
+
interface SplitPaneArgs {
|
|
3
|
+
targetPane: string;
|
|
4
|
+
direction: "vertical" | "horizontal";
|
|
5
|
+
cwd: string;
|
|
6
|
+
percent: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function waitForPaneCommand(targetPane: string, expectedCommands: string[], { attempts, delayMs, getCurrentCommand, sleep, }?: {
|
|
9
|
+
attempts?: number;
|
|
10
|
+
delayMs?: number;
|
|
11
|
+
getCurrentCommand?: (pane: string) => string;
|
|
12
|
+
sleep?: (ms: number) => void;
|
|
13
|
+
}): boolean;
|
|
14
|
+
export declare function buildPaneMap(rows: Row[], dir: string, rootPaneId: string, splitPaneFn: (args: SplitPaneArgs) => string): {
|
|
15
|
+
paneMap: string[][];
|
|
16
|
+
firstPanesOfRows: Set<string>;
|
|
17
|
+
};
|
|
18
|
+
export declare function launch(targetDir: string | undefined, { json, attach, sessionName, }?: {
|
|
19
|
+
json?: boolean;
|
|
20
|
+
attach?: boolean;
|
|
21
|
+
sessionName?: string;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { execSync } from "node:child_process";
|
|
3
|
+
import { createHash } from "node:crypto";
|
|
4
|
+
import { readConfig, getSessionName } from "./lib/yaml-io.js";
|
|
5
|
+
import { computeSizes, toSplitPercents } from "./lib/sizes.js";
|
|
6
|
+
import { outputError } from "./lib/output.js";
|
|
7
|
+
import { collectPaneStartupPlan } from "./lib/launch-plan.js";
|
|
8
|
+
import { buildSessionOptions } from "./lib/session-options.js";
|
|
9
|
+
import { attachSession, createDetachedSession, getPaneCurrentCommand, getSessionVariable, hasSession, runSessionCommand, selectPane, sendLiteral, setPaneOption, setPaneTitle, setSessionEnvironment, setSessionVariable, splitPane, } from "@tmux-ide/tmux-bridge";
|
|
10
|
+
import { validateConfig } from "./validate.js";
|
|
11
|
+
import { resolveSidebarConfig } from "./tui/chrome/sidebar.js";
|
|
12
|
+
import { resolveWidgetCommand } from "./widgets/resolve.js";
|
|
13
|
+
import { shellEscape } from "./lib/shell.js";
|
|
14
|
+
function stripWidgetPanes(rows) {
|
|
15
|
+
return rows
|
|
16
|
+
.map((row) => ({
|
|
17
|
+
...row,
|
|
18
|
+
panes: row.panes.filter((p) => !p.type),
|
|
19
|
+
}))
|
|
20
|
+
.filter((row) => row.panes.length > 0);
|
|
21
|
+
}
|
|
22
|
+
function sleepMs(ms) {
|
|
23
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
24
|
+
}
|
|
25
|
+
function configHash(config) {
|
|
26
|
+
return createHash("sha256").update(JSON.stringify(config)).digest("hex").slice(0, 12);
|
|
27
|
+
}
|
|
28
|
+
export function waitForPaneCommand(targetPane, expectedCommands, { attempts = 20, delayMs = 100, getCurrentCommand = getPaneCurrentCommand, sleep = sleepMs, } = {}) {
|
|
29
|
+
const allowed = new Set(expectedCommands.map((command) => command.toLowerCase()));
|
|
30
|
+
for (let attempt = 0; attempt < attempts; attempt++) {
|
|
31
|
+
try {
|
|
32
|
+
const current = getCurrentCommand(targetPane)?.trim().toLowerCase();
|
|
33
|
+
if (current && allowed.has(current))
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Fall through to retry; tmux can briefly report transitional state.
|
|
38
|
+
}
|
|
39
|
+
if (attempt < attempts - 1) {
|
|
40
|
+
sleep(delayMs);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
export function buildPaneMap(rows, dir, rootPaneId, splitPaneFn) {
|
|
46
|
+
const rowSizes = computeSizes(rows);
|
|
47
|
+
const rowSplitPercents = toSplitPercents(rowSizes);
|
|
48
|
+
// Create all rows vertically first so each row spans the full width.
|
|
49
|
+
const rowPaneIds = [rootPaneId];
|
|
50
|
+
for (let rowIdx = 1; rowIdx < rows.length; rowIdx++) {
|
|
51
|
+
const splitFrom = rowPaneIds[rowIdx - 1];
|
|
52
|
+
const newPaneId = splitPaneFn({
|
|
53
|
+
targetPane: splitFrom,
|
|
54
|
+
direction: "vertical",
|
|
55
|
+
cwd: dir,
|
|
56
|
+
percent: rowSplitPercents[rowIdx - 1],
|
|
57
|
+
});
|
|
58
|
+
rowPaneIds.push(newPaneId);
|
|
59
|
+
}
|
|
60
|
+
const paneMap = [];
|
|
61
|
+
const firstPanesOfRows = new Set(rowPaneIds);
|
|
62
|
+
for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) {
|
|
63
|
+
const row = rows[rowIdx];
|
|
64
|
+
const panes = row.panes ?? [];
|
|
65
|
+
const rowPaneId = rowPaneIds[rowIdx];
|
|
66
|
+
const rowPanes = [rowPaneId];
|
|
67
|
+
const paneSizes = computeSizes(panes);
|
|
68
|
+
const paneSplitPercents = toSplitPercents(paneSizes);
|
|
69
|
+
for (let paneIdx = 1; paneIdx < panes.length; paneIdx++) {
|
|
70
|
+
const pane = panes[paneIdx];
|
|
71
|
+
const targetPane = rowPanes[paneIdx - 1];
|
|
72
|
+
const paneDir = pane.dir ? resolve(dir, pane.dir) : dir;
|
|
73
|
+
const newPaneId = splitPaneFn({
|
|
74
|
+
targetPane,
|
|
75
|
+
direction: "horizontal",
|
|
76
|
+
cwd: paneDir,
|
|
77
|
+
percent: paneSplitPercents[paneIdx - 1],
|
|
78
|
+
});
|
|
79
|
+
rowPanes.push(newPaneId);
|
|
80
|
+
}
|
|
81
|
+
paneMap.push(rowPanes);
|
|
82
|
+
}
|
|
83
|
+
return { paneMap, firstPanesOfRows };
|
|
84
|
+
}
|
|
85
|
+
function loadLaunchConfig(dir) {
|
|
86
|
+
let config;
|
|
87
|
+
try {
|
|
88
|
+
({ config } = readConfig(dir));
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
if (error?.code === "ENOENT") {
|
|
92
|
+
outputError(`No ide.yml found in ${dir}. Run "tmux-ide init" or "tmux-ide detect --write" to create one.`, "CONFIG_NOT_FOUND");
|
|
93
|
+
}
|
|
94
|
+
outputError(`Cannot read ide.yml: ${error.message}`, "READ_ERROR");
|
|
95
|
+
}
|
|
96
|
+
const errors = validateConfig(config);
|
|
97
|
+
if (errors.length > 0) {
|
|
98
|
+
outputError(`Invalid ide.yml in ${dir}. Run "tmux-ide validate" for details.`, "INVALID_CONFIG");
|
|
99
|
+
}
|
|
100
|
+
return config;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Best-effort: adopt the session into the native chrome (status bar + switcher
|
|
104
|
+
* popup + the shared background updater). A chrome failure must NEVER break
|
|
105
|
+
* launch, so it's fully swallowed; the import is dynamic to keep the hot path
|
|
106
|
+
* clean and the data-layer graph out of the common launch flow.
|
|
107
|
+
*/
|
|
108
|
+
async function bestEffortAdopt(session) {
|
|
109
|
+
try {
|
|
110
|
+
const { adoptSession } = await import("./tui/chrome/statusline.js");
|
|
111
|
+
adoptSession(session);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// chrome is optional — never let it block the session
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function runBeforeHook(command, dir) {
|
|
118
|
+
if (!command)
|
|
119
|
+
return;
|
|
120
|
+
console.log(`Running: ${command}`);
|
|
121
|
+
try {
|
|
122
|
+
execSync(command, { cwd: dir, stdio: "inherit", timeout: 60_000 });
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
outputError(`The before hook failed: ${command}`, "BEFORE_HOOK_FAILED");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export async function launch(targetDir, { json = false, attach = true, sessionName, } = {}) {
|
|
129
|
+
const dir = resolve(targetDir ?? ".");
|
|
130
|
+
const config = loadLaunchConfig(dir);
|
|
131
|
+
const { name: fallbackName } = getSessionName(dir);
|
|
132
|
+
// A `sessionName` override lets a worktree checkout run under its own session
|
|
133
|
+
// name (e.g. `app@branch`) instead of colliding with the parent repo's
|
|
134
|
+
// `config.name`; the whole flow keys off `session`, so the override threads
|
|
135
|
+
// through session creation, adoption, and drift detection unchanged.
|
|
136
|
+
const session = sessionName ?? config.name ?? fallbackName;
|
|
137
|
+
const headless = config.orchestrator?.widgets === false;
|
|
138
|
+
const rows = headless ? stripWidgetPanes(config.rows) : config.rows;
|
|
139
|
+
const theme = config.theme ?? {};
|
|
140
|
+
const team = config.team ?? null;
|
|
141
|
+
runBeforeHook(config.before, dir);
|
|
142
|
+
// If session already exists, check for config drift and attach
|
|
143
|
+
if (hasSession(session)) {
|
|
144
|
+
const currentHash = configHash(config);
|
|
145
|
+
const storedHash = getSessionVariable(session, "@config_hash");
|
|
146
|
+
const configChanged = Boolean(storedHash && currentHash !== storedHash);
|
|
147
|
+
if (json) {
|
|
148
|
+
console.log(JSON.stringify({ session, running: true, configChanged }));
|
|
149
|
+
}
|
|
150
|
+
else if (configChanged) {
|
|
151
|
+
console.log(`Session "${session}" is running but ide.yml has changed.`);
|
|
152
|
+
console.log(`Run "tmux-ide restart" to apply changes.`);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
console.log(`Session "${session}" is already running. Attaching...`);
|
|
156
|
+
}
|
|
157
|
+
// Keep the chrome in place across re-launches (idempotent).
|
|
158
|
+
await bestEffortAdopt(session);
|
|
159
|
+
if (attach) {
|
|
160
|
+
attachSession(session);
|
|
161
|
+
}
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// Get terminal dimensions
|
|
165
|
+
const cols = process.stdout.columns ?? 200;
|
|
166
|
+
const lines = process.stdout.rows ?? 50;
|
|
167
|
+
// Create session with first pane
|
|
168
|
+
const rootPaneId = createDetachedSession(session, dir, { cols, lines });
|
|
169
|
+
// Set agent teams env var if team config is present
|
|
170
|
+
if (team) {
|
|
171
|
+
setSessionEnvironment(session, "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS", "1");
|
|
172
|
+
}
|
|
173
|
+
const { paneMap, firstPanesOfRows } = buildPaneMap(rows, dir, rootPaneId, ({ targetPane, direction, cwd, percent }) => splitPane(targetPane, direction, cwd, percent));
|
|
174
|
+
const { focusPane, paneActions } = collectPaneStartupPlan(rows, paneMap, firstPanesOfRows, dir);
|
|
175
|
+
for (const action of paneActions) {
|
|
176
|
+
if (action.title) {
|
|
177
|
+
setPaneTitle(action.targetPane, action.title);
|
|
178
|
+
}
|
|
179
|
+
// Set pane identity options for discovery by orchestrator/widgets
|
|
180
|
+
setPaneOption(action.targetPane, "@ide_role", action.paneRole ?? "shell");
|
|
181
|
+
setPaneOption(action.targetPane, "@ide_name", action.title ?? "");
|
|
182
|
+
setPaneOption(action.targetPane, "@ide_type", action.paneType ?? "shell");
|
|
183
|
+
// Lock agent pane titles so Claude Code can't overwrite them
|
|
184
|
+
if (action.paneRole === "lead" || action.paneRole === "teammate") {
|
|
185
|
+
setPaneOption(action.targetPane, "allow-rename", "off");
|
|
186
|
+
}
|
|
187
|
+
if (action.chdir) {
|
|
188
|
+
sendLiteral(action.targetPane, `cd ${shellEscape(action.chdir)}`);
|
|
189
|
+
}
|
|
190
|
+
for (const exportCommand of action.exports) {
|
|
191
|
+
sendLiteral(action.targetPane, exportCommand);
|
|
192
|
+
}
|
|
193
|
+
if (action.widgetType) {
|
|
194
|
+
const widgetCmd = resolveWidgetCommand(action.widgetType, {
|
|
195
|
+
session,
|
|
196
|
+
dir,
|
|
197
|
+
target: action.widgetTarget ?? null,
|
|
198
|
+
theme: config.theme ?? null,
|
|
199
|
+
});
|
|
200
|
+
sendLiteral(action.targetPane, widgetCmd);
|
|
201
|
+
}
|
|
202
|
+
else if (action.command) {
|
|
203
|
+
sendLiteral(action.targetPane, action.command);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
for (const command of buildSessionOptions(session, { theme })) {
|
|
207
|
+
runSessionCommand(command);
|
|
208
|
+
}
|
|
209
|
+
// Store config hash for drift detection on re-launch
|
|
210
|
+
setSessionVariable(session, "@config_hash", configHash(config));
|
|
211
|
+
// Sidebar sugar: `sidebar: true` (or `{ width }`) injects the app nav column
|
|
212
|
+
// as a full-height left split of the whole window (`-h -b -f`), built AFTER
|
|
213
|
+
// the rows so `-f` spans their combined height. Best-effort — the layout must
|
|
214
|
+
// never fail because the chrome column couldn't open.
|
|
215
|
+
const sidebar = resolveSidebarConfig(config.sidebar);
|
|
216
|
+
if (sidebar.enabled) {
|
|
217
|
+
try {
|
|
218
|
+
const { openSidebarPane } = await import("./tui/chrome/sidebar.js");
|
|
219
|
+
openSidebarPane(session, dir, sidebar.width, config.theme ?? null);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
// sidebar is optional chrome — never block launch
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Focus the correct pane (the sidebar split above steals focus to itself).
|
|
226
|
+
selectPane(focusPane);
|
|
227
|
+
// Launch summary
|
|
228
|
+
const totalPanes = rows.reduce((sum, r) => sum + (r.panes?.length ?? 0), 0);
|
|
229
|
+
console.log(`Starting "${session}" (${rows.length} row${rows.length === 1 ? "" : "s"}, ${totalPanes} pane${totalPanes === 1 ? "" : "s"})...`);
|
|
230
|
+
// Surface the command-center URL so users know where the API lives.
|
|
231
|
+
// Read the canonical daemon info file the daemon writes on startup;
|
|
232
|
+
// tolerate its absence (daemon may still be coming up, or running
|
|
233
|
+
// sessionless). Print only when we have a real port to advertise.
|
|
234
|
+
try {
|
|
235
|
+
const { readCanonicalDaemonInfo } = await import("./lib/canonical-daemon.js");
|
|
236
|
+
const info = readCanonicalDaemonInfo();
|
|
237
|
+
if (info) {
|
|
238
|
+
console.log(`Command center: http://${info.bindHostname}:${info.port}/`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
// Non-fatal — the daemon may still be coming up.
|
|
243
|
+
}
|
|
244
|
+
// Adopt into the native chrome so the new session shows the tmux-ide bar.
|
|
245
|
+
await bestEffortAdopt(session);
|
|
246
|
+
// Attach
|
|
247
|
+
if (attach) {
|
|
248
|
+
attachSession(session);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface ProjectActivationOptions {
|
|
2
|
+
orchestrate?: boolean;
|
|
3
|
+
}
|
|
4
|
+
export interface ProjectActivationBackend {
|
|
5
|
+
activateProject(name: string, options?: ProjectActivationOptions): Promise<void>;
|
|
6
|
+
deactivateProject(name: string): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function setActivationBackend(next: ProjectActivationBackend | null): void;
|
|
9
|
+
export declare function isProjectActive(name: string): boolean;
|
|
10
|
+
export declare function activateProject(name: string, options?: ProjectActivationOptions): Promise<void>;
|
|
11
|
+
export declare function deactivateProject(name: string): Promise<void>;
|
|
12
|
+
export declare function listActiveProjects(): string[];
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
let backend = null;
|
|
2
|
+
const active = new Set();
|
|
3
|
+
export function setActivationBackend(next) {
|
|
4
|
+
backend = next;
|
|
5
|
+
active.clear();
|
|
6
|
+
}
|
|
7
|
+
export function isProjectActive(name) {
|
|
8
|
+
return active.has(name);
|
|
9
|
+
}
|
|
10
|
+
export async function activateProject(name, options = {}) {
|
|
11
|
+
if (active.has(name) && !options.orchestrate)
|
|
12
|
+
return;
|
|
13
|
+
if (!backend) {
|
|
14
|
+
throw new Error("No active-project backend is registered");
|
|
15
|
+
}
|
|
16
|
+
await backend.activateProject(name, options);
|
|
17
|
+
active.add(name);
|
|
18
|
+
}
|
|
19
|
+
export async function deactivateProject(name) {
|
|
20
|
+
if (!active.has(name))
|
|
21
|
+
return;
|
|
22
|
+
if (!backend) {
|
|
23
|
+
active.delete(name);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
await backend.deactivateProject(name);
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
active.delete(name);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function listActiveProjects() {
|
|
34
|
+
return Array.from(active);
|
|
35
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** A coding agent tmux-ide knows how to detect. */
|
|
2
|
+
export interface KnownAgent {
|
|
3
|
+
/** Stable id — also the `tmux-ide integration <install|status> <id>` selector. */
|
|
4
|
+
id: string;
|
|
5
|
+
/** The binary we probe for on PATH. */
|
|
6
|
+
bin: string;
|
|
7
|
+
/** True → tmux-ide ships a lifecycle-integration installer for this agent. */
|
|
8
|
+
integration: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The agents tmux-ide recognizes. `integration: true` means we HAVE an installer
|
|
12
|
+
* (a real lifecycle hook → ground-truth pane state); the rest are detected via
|
|
13
|
+
* screen-manifest scraping only, with no lifecycle hook yet.
|
|
14
|
+
*/
|
|
15
|
+
export declare const KNOWN_AGENTS: readonly KnownAgent[];
|
|
16
|
+
/** One probed agent: its registry facts plus what the PATH/integration probe found. */
|
|
17
|
+
export interface DiscoveredAgent {
|
|
18
|
+
id: string;
|
|
19
|
+
bin: string;
|
|
20
|
+
/** Whether tmux-ide ships an installer for this agent (copied from the registry). */
|
|
21
|
+
integration: boolean;
|
|
22
|
+
/** Absolute path to the binary (first `which` hit), or null when absent from PATH. */
|
|
23
|
+
path: string | null;
|
|
24
|
+
/**
|
|
25
|
+
* The INTEGRATION-installed state: true only for an agent we integrate whose
|
|
26
|
+
* integration is actually installed. Always false for agents we don't
|
|
27
|
+
* integrate (there's nothing to install) and for any agent absent from PATH.
|
|
28
|
+
*/
|
|
29
|
+
installed: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** Resolve a binary to its absolute path, or null. Must never throw. */
|
|
32
|
+
export type WhichRunner = (bin: string) => string | null;
|
|
33
|
+
/** Report whether a given agent's integration is installed. Must never throw. */
|
|
34
|
+
export type IntegrationProbe = (agentId: string) => boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Probe the current PATH for every {@link KNOWN_AGENTS} entry. For agents we
|
|
37
|
+
* integrate, `installed` carries the real integration status; for the rest it's
|
|
38
|
+
* always false (nothing to install). Both the PATH probe and the integration
|
|
39
|
+
* check are injectable for tests; this never throws.
|
|
40
|
+
*/
|
|
41
|
+
export declare function discoverAgents(which?: WhichRunner, isInstalled?: IntegrationProbe): DiscoveredAgent[];
|
|
42
|
+
/** The subset of discovered agents actually present on PATH (path resolved). */
|
|
43
|
+
export declare function presentAgents(agents: DiscoveredAgent[]): DiscoveredAgent[];
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent auto-discovery — which coding agents live on THIS machine, and do we
|
|
3
|
+
* have a lifecycle integration for each.
|
|
4
|
+
*
|
|
5
|
+
* The onboarding gap this closes: tmux-ide can hook Claude Code's lifecycle for
|
|
6
|
+
* ground-truth pane state (`tmux-ide integration install claude`), but nothing
|
|
7
|
+
* told the user that agent was even detected. Discovery makes the tool notice —
|
|
8
|
+
* doctor lists what it found, the first adopt offers the integration.
|
|
9
|
+
*
|
|
10
|
+
* {@link KNOWN_AGENTS} is the pure registry: each entry names an agent, the
|
|
11
|
+
* binary we probe for, and whether tmux-ide ships an installer for it
|
|
12
|
+
* (`integration: true` → we can hook its lifecycle; `false` → we only have
|
|
13
|
+
* screen-manifest detection). {@link discoverAgents} probes the current PATH via
|
|
14
|
+
* an injectable which-runner and, for agents we integrate, reports whether that
|
|
15
|
+
* integration is installed. Both the probe and the integration check are
|
|
16
|
+
* injectable so tests never shell out or read the real settings.
|
|
17
|
+
*/
|
|
18
|
+
import { execFileSync } from "node:child_process";
|
|
19
|
+
import { claudeIntegrationStatus } from "../tui/integrations/claude.js";
|
|
20
|
+
/**
|
|
21
|
+
* The agents tmux-ide recognizes. `integration: true` means we HAVE an installer
|
|
22
|
+
* (a real lifecycle hook → ground-truth pane state); the rest are detected via
|
|
23
|
+
* screen-manifest scraping only, with no lifecycle hook yet.
|
|
24
|
+
*/
|
|
25
|
+
export const KNOWN_AGENTS = [
|
|
26
|
+
{ id: "claude", bin: "claude", integration: true },
|
|
27
|
+
{ id: "codex", bin: "codex", integration: false },
|
|
28
|
+
{ id: "opencode", bin: "opencode", integration: false },
|
|
29
|
+
{ id: "gemini", bin: "gemini", integration: false },
|
|
30
|
+
{ id: "aider", bin: "aider", integration: false },
|
|
31
|
+
];
|
|
32
|
+
/**
|
|
33
|
+
* Default which-runner: `which <bin>`, hard-capped at 2s, swallowing every
|
|
34
|
+
* failure (not-found, missing `which`, timeout) into `null`. Returns the FIRST
|
|
35
|
+
* line only — a shell function/alias shadowing plus a real binary can make
|
|
36
|
+
* `which` emit several.
|
|
37
|
+
*/
|
|
38
|
+
const defaultWhich = (bin) => {
|
|
39
|
+
try {
|
|
40
|
+
const out = execFileSync("which", [bin], {
|
|
41
|
+
encoding: "utf-8",
|
|
42
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
43
|
+
timeout: 2000,
|
|
44
|
+
}).trim();
|
|
45
|
+
if (out.length === 0)
|
|
46
|
+
return null;
|
|
47
|
+
return out.split("\n")[0].trim() || null;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Default integration probe: only `claude` has an installer, so only it can be
|
|
55
|
+
* "installed". Reads the real Claude settings; any failure degrades to false so
|
|
56
|
+
* discovery never throws.
|
|
57
|
+
*/
|
|
58
|
+
const defaultIntegrationProbe = (agentId) => {
|
|
59
|
+
if (agentId !== "claude")
|
|
60
|
+
return false;
|
|
61
|
+
try {
|
|
62
|
+
return claudeIntegrationStatus().installed;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Probe the current PATH for every {@link KNOWN_AGENTS} entry. For agents we
|
|
70
|
+
* integrate, `installed` carries the real integration status; for the rest it's
|
|
71
|
+
* always false (nothing to install). Both the PATH probe and the integration
|
|
72
|
+
* check are injectable for tests; this never throws.
|
|
73
|
+
*/
|
|
74
|
+
export function discoverAgents(which = defaultWhich, isInstalled = defaultIntegrationProbe) {
|
|
75
|
+
return KNOWN_AGENTS.map((agent) => {
|
|
76
|
+
const path = which(agent.bin);
|
|
77
|
+
const present = path !== null;
|
|
78
|
+
const installed = present && agent.integration ? isInstalled(agent.id) : false;
|
|
79
|
+
return { id: agent.id, bin: agent.bin, integration: agent.integration, path, installed };
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/** The subset of discovered agents actually present on PATH (path resolved). */
|
|
83
|
+
export function presentAgents(agents) {
|
|
84
|
+
return agents.filter((a) => a.path !== null);
|
|
85
|
+
}
|