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,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project registry contracts. The dashboard manages a list of projects the
|
|
3
|
+
* user has registered with tmux-ide; this schema is the wire shape exchanged
|
|
4
|
+
* over `/api/projects` and the `/ws/events` WebSocket channel.
|
|
5
|
+
*
|
|
6
|
+
* The shape is FROZEN — the dashboard imports these via `@tmux-ide/schemas`.
|
|
7
|
+
* Add new fields by appending optional properties; do not rename existing
|
|
8
|
+
* fields without bumping a major.
|
|
9
|
+
*/
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
export const RegisteredProjectSchemaZ = z.object({
|
|
12
|
+
/** Unique registry key. Defaults to `basename(dir)`; collisions resolved by appending `-2`, `-3`, … */
|
|
13
|
+
name: z.string(),
|
|
14
|
+
/** Absolute path to the project directory. */
|
|
15
|
+
dir: z.string(),
|
|
16
|
+
/** Whether `<dir>/ide.yml` exists; refreshed on register and on `probe()`. */
|
|
17
|
+
hasIdeYml: z.boolean(),
|
|
18
|
+
/** Git remote origin URL, or `null` if not a git repo / no origin / probe failed. */
|
|
19
|
+
gitOrigin: z.string().nullable(),
|
|
20
|
+
/** Current git branch, or `null` if not a git repo / detached HEAD / probe failed. */
|
|
21
|
+
gitBranch: z.string().nullable(),
|
|
22
|
+
/** ISO-8601 timestamp the project was first registered. */
|
|
23
|
+
registeredAt: z.string(),
|
|
24
|
+
});
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// REST request bodies
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
export const RegisterProjectRequestSchemaZ = z.object({
|
|
29
|
+
dir: z.string().min(1),
|
|
30
|
+
name: z.string().min(1).optional(),
|
|
31
|
+
});
|
|
32
|
+
export const InitProjectRequestSchemaZ = z.object({
|
|
33
|
+
dir: z.string().min(1),
|
|
34
|
+
template: z.string().min(1).optional(),
|
|
35
|
+
});
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
// Template metadata (returned by GET /api/projects/templates)
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
export const ProjectTemplateSchemaZ = z.object({
|
|
40
|
+
id: z.string(),
|
|
41
|
+
label: z.string(),
|
|
42
|
+
description: z.string(),
|
|
43
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol contracts for the unified `/ws/events` WebSocket channel.
|
|
3
|
+
*
|
|
4
|
+
* Single push channel clients subscribe to for session / pane / workspace
|
|
5
|
+
* changes. One socket replaces a fan of individual SSE streams that hit
|
|
6
|
+
* Chrome's 6-per-origin HTTP/1.1 limit.
|
|
7
|
+
*
|
|
8
|
+
* Add new frame variants by appending to the union; do not rename existing
|
|
9
|
+
* fields.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
export declare const SessionSnapshotSchemaZ: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
13
|
+
export type SessionSnapshot = z.infer<typeof SessionSnapshotSchemaZ>;
|
|
14
|
+
export declare const ClientFrameSchemaZ: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
15
|
+
type: z.ZodLiteral<"subscribe">;
|
|
16
|
+
sessions: z.ZodArray<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
18
|
+
type: z.ZodLiteral<"unsubscribe">;
|
|
19
|
+
sessions: z.ZodArray<z.ZodString>;
|
|
20
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
21
|
+
type: z.ZodLiteral<"ping">;
|
|
22
|
+
}, z.core.$strip>], "type">;
|
|
23
|
+
export type ClientFrame = z.infer<typeof ClientFrameSchemaZ>;
|
|
24
|
+
export declare const ServerFrameSchemaZ: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
25
|
+
type: z.ZodLiteral<"hello">;
|
|
26
|
+
sessions: z.ZodArray<z.ZodObject<{
|
|
27
|
+
name: z.ZodString;
|
|
28
|
+
dir: z.ZodString;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
31
|
+
type: z.ZodLiteral<"snapshot">;
|
|
32
|
+
sessionName: z.ZodString;
|
|
33
|
+
data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
34
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
35
|
+
type: z.ZodLiteral<"sessions.changed">;
|
|
36
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
37
|
+
type: z.ZodLiteral<"projects.changed">;
|
|
38
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
39
|
+
type: z.ZodLiteral<"init.output">;
|
|
40
|
+
jobId: z.ZodString;
|
|
41
|
+
chunk: z.ZodString;
|
|
42
|
+
done: z.ZodOptional<z.ZodBoolean>;
|
|
43
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
44
|
+
type: z.ZodLiteral<"init.error">;
|
|
45
|
+
jobId: z.ZodString;
|
|
46
|
+
message: z.ZodString;
|
|
47
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
48
|
+
type: z.ZodLiteral<"pong">;
|
|
49
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
50
|
+
type: z.ZodLiteral<"action.complete">;
|
|
51
|
+
name: z.ZodString;
|
|
52
|
+
result: z.ZodUnknown;
|
|
53
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
54
|
+
type: z.ZodLiteral<"config.changed">;
|
|
55
|
+
sessionName: z.ZodString;
|
|
56
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
57
|
+
type: z.ZodLiteral<"terminals.changed">;
|
|
58
|
+
sessionName: z.ZodString;
|
|
59
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
60
|
+
type: z.ZodLiteral<"workspace.added">;
|
|
61
|
+
workspace: z.ZodObject<{
|
|
62
|
+
name: z.ZodString;
|
|
63
|
+
sessionName: z.ZodString;
|
|
64
|
+
projectDir: z.ZodString;
|
|
65
|
+
ideConfigPath: z.ZodNullable<z.ZodString>;
|
|
66
|
+
addedAt: z.ZodString;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
69
|
+
type: z.ZodLiteral<"workspace.removed">;
|
|
70
|
+
name: z.ZodString;
|
|
71
|
+
}, z.core.$strip>], "type">;
|
|
72
|
+
export type ServerFrame = z.infer<typeof ServerFrameSchemaZ>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol contracts for the unified `/ws/events` WebSocket channel.
|
|
3
|
+
*
|
|
4
|
+
* Single push channel clients subscribe to for session / pane / workspace
|
|
5
|
+
* changes. One socket replaces a fan of individual SSE streams that hit
|
|
6
|
+
* Chrome's 6-per-origin HTTP/1.1 limit.
|
|
7
|
+
*
|
|
8
|
+
* Add new frame variants by appending to the union; do not rename existing
|
|
9
|
+
* fields.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from "zod";
|
|
12
|
+
import { SessionOverviewSchemaZ } from "./domain.js";
|
|
13
|
+
import { WorkspaceAddedFrameSchemaZ, WorkspaceRemovedFrameSchemaZ } from "@tmux-ide/contracts";
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Snapshot payload — mirrors what `/api/project/<name>/stream` already pushes
|
|
16
|
+
// as its `snapshot` SSE event. Kept loose (passthrough) so that adding fields
|
|
17
|
+
// on the producer side does not require shipping schema updates lock-step
|
|
18
|
+
// with consumers. Consumers should validate fields they actually read.
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
export const SessionSnapshotSchemaZ = z.record(z.string(), z.unknown());
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Client → Server frames
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
const SubscribeFrameZ = z.object({
|
|
25
|
+
type: z.literal("subscribe"),
|
|
26
|
+
sessions: z.array(z.string()),
|
|
27
|
+
});
|
|
28
|
+
const UnsubscribeFrameZ = z.object({
|
|
29
|
+
type: z.literal("unsubscribe"),
|
|
30
|
+
sessions: z.array(z.string()),
|
|
31
|
+
});
|
|
32
|
+
const PingFrameZ = z.object({
|
|
33
|
+
type: z.literal("ping"),
|
|
34
|
+
});
|
|
35
|
+
export const ClientFrameSchemaZ = z.discriminatedUnion("type", [
|
|
36
|
+
SubscribeFrameZ,
|
|
37
|
+
UnsubscribeFrameZ,
|
|
38
|
+
PingFrameZ,
|
|
39
|
+
]);
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Server → Client frames
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
const HelloFrameZ = z.object({
|
|
44
|
+
type: z.literal("hello"),
|
|
45
|
+
sessions: z.array(SessionOverviewSchemaZ),
|
|
46
|
+
});
|
|
47
|
+
const SnapshotFrameZ = z.object({
|
|
48
|
+
type: z.literal("snapshot"),
|
|
49
|
+
sessionName: z.string(),
|
|
50
|
+
data: SessionSnapshotSchemaZ,
|
|
51
|
+
});
|
|
52
|
+
const SessionsChangedFrameZ = z.object({
|
|
53
|
+
type: z.literal("sessions.changed"),
|
|
54
|
+
});
|
|
55
|
+
// Project-registry has changed (register / unregister / re-probe / init success).
|
|
56
|
+
// Clients re-fetch GET /api/projects.
|
|
57
|
+
const ProjectsChangedFrameZ = z.object({
|
|
58
|
+
type: z.literal("projects.changed"),
|
|
59
|
+
});
|
|
60
|
+
// Streaming output from `tmux-ide init` invoked via POST /api/projects/init.
|
|
61
|
+
// `chunk` is a single line of stdout/stderr (newline stripped). `done: true`
|
|
62
|
+
// is set on the final frame for the job; no more `init.output` frames will
|
|
63
|
+
// follow for this jobId.
|
|
64
|
+
const InitOutputFrameZ = z.object({
|
|
65
|
+
type: z.literal("init.output"),
|
|
66
|
+
jobId: z.string(),
|
|
67
|
+
chunk: z.string(),
|
|
68
|
+
done: z.boolean().optional(),
|
|
69
|
+
});
|
|
70
|
+
// Init job failed. Terminal — no `init.output` follow-ups.
|
|
71
|
+
const InitErrorFrameZ = z.object({
|
|
72
|
+
type: z.literal("init.error"),
|
|
73
|
+
jobId: z.string(),
|
|
74
|
+
message: z.string(),
|
|
75
|
+
});
|
|
76
|
+
const PongFrameZ = z.object({
|
|
77
|
+
type: z.literal("pong"),
|
|
78
|
+
});
|
|
79
|
+
// Broadcast after a successful v2 action dispatch. Clients use these frames to
|
|
80
|
+
// invalidate caches without ad-hoc refetches (e.g. invalidate the project list
|
|
81
|
+
// after `project.launch` succeeds). `name` matches the action name in
|
|
82
|
+
// `command-center/actions/contract.ts`. `result` is loose at the schema layer
|
|
83
|
+
// because each action has its own result shape.
|
|
84
|
+
const ActionCompleteFrameZ = z.object({
|
|
85
|
+
type: z.literal("action.complete"),
|
|
86
|
+
name: z.string(),
|
|
87
|
+
result: z.unknown(),
|
|
88
|
+
});
|
|
89
|
+
const ConfigChangedFrameZ = z.object({
|
|
90
|
+
type: z.literal("config.changed"),
|
|
91
|
+
sessionName: z.string(),
|
|
92
|
+
});
|
|
93
|
+
const TerminalsChangedFrameZ = z.object({
|
|
94
|
+
type: z.literal("terminals.changed"),
|
|
95
|
+
sessionName: z.string(),
|
|
96
|
+
});
|
|
97
|
+
export const ServerFrameSchemaZ = z.discriminatedUnion("type", [
|
|
98
|
+
HelloFrameZ,
|
|
99
|
+
SnapshotFrameZ,
|
|
100
|
+
SessionsChangedFrameZ,
|
|
101
|
+
ProjectsChangedFrameZ,
|
|
102
|
+
InitOutputFrameZ,
|
|
103
|
+
InitErrorFrameZ,
|
|
104
|
+
PongFrameZ,
|
|
105
|
+
ActionCompleteFrameZ,
|
|
106
|
+
ConfigChangedFrameZ,
|
|
107
|
+
TerminalsChangedFrameZ,
|
|
108
|
+
WorkspaceAddedFrameSchemaZ,
|
|
109
|
+
WorkspaceRemovedFrameSchemaZ,
|
|
110
|
+
]);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type PaneInfo } from "./widgets/lib/pane-comms.ts";
|
|
2
|
+
export declare const LONG_MESSAGE_THRESHOLD = 150;
|
|
3
|
+
/**
|
|
4
|
+
* Write a long message to a dispatch file and return the short trigger command.
|
|
5
|
+
* Returns null if message is short enough to send directly.
|
|
6
|
+
*/
|
|
7
|
+
export declare function writeDispatchFile(dir: string, paneId: string, message: string): {
|
|
8
|
+
filePath: string;
|
|
9
|
+
triggerCmd: string;
|
|
10
|
+
} | null;
|
|
11
|
+
interface SendOptions {
|
|
12
|
+
json?: boolean;
|
|
13
|
+
to?: string;
|
|
14
|
+
message?: string;
|
|
15
|
+
noEnter?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a target string to a pane. Priority:
|
|
19
|
+
* 1. Exact pane ID (%N)
|
|
20
|
+
* 2. @ide_name match
|
|
21
|
+
* 3. Exact title match
|
|
22
|
+
* 4. Role match (lead, teammate, planner)
|
|
23
|
+
* 5. Case-insensitive partial title match
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolvePane(panes: PaneInfo[], target: string): PaneInfo | null;
|
|
26
|
+
export declare function send(targetDir: string | undefined, opts: SendOptions): Promise<void>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { resolve, join } from "node:path";
|
|
3
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
4
|
+
import { getSessionName } from "./lib/yaml-io.js";
|
|
5
|
+
import { getSessionState } from "@tmux-ide/tmux-bridge";
|
|
6
|
+
import { listSessionPanes, sendCommand, sendText, getPaneBusyStatus, } from "./widgets/lib/pane-comms.js";
|
|
7
|
+
import { IdeError } from "./lib/errors.js";
|
|
8
|
+
export const LONG_MESSAGE_THRESHOLD = 150;
|
|
9
|
+
/**
|
|
10
|
+
* Write a long message to a dispatch file and return the short trigger command.
|
|
11
|
+
* Returns null if message is short enough to send directly.
|
|
12
|
+
*/
|
|
13
|
+
export function writeDispatchFile(dir, paneId, message) {
|
|
14
|
+
if (message.length <= LONG_MESSAGE_THRESHOLD)
|
|
15
|
+
return null;
|
|
16
|
+
const dispatchDir = join(dir, ".tasks", "dispatch");
|
|
17
|
+
if (!existsSync(dispatchDir))
|
|
18
|
+
mkdirSync(dispatchDir, { recursive: true });
|
|
19
|
+
const paneSlug = paneId.replace("%", "");
|
|
20
|
+
const filename = `send-${paneSlug}-${Date.now()}-${randomUUID().slice(0, 8)}.md`;
|
|
21
|
+
const filePath = join(dispatchDir, filename);
|
|
22
|
+
writeFileSync(filePath, message);
|
|
23
|
+
return { filePath, triggerCmd: `Read and execute: .tasks/dispatch/${filename}` };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a target string to a pane. Priority:
|
|
27
|
+
* 1. Exact pane ID (%N)
|
|
28
|
+
* 2. @ide_name match
|
|
29
|
+
* 3. Exact title match
|
|
30
|
+
* 4. Role match (lead, teammate, planner)
|
|
31
|
+
* 5. Case-insensitive partial title match
|
|
32
|
+
*/
|
|
33
|
+
export function resolvePane(panes, target) {
|
|
34
|
+
// 1. Exact pane ID
|
|
35
|
+
if (target.startsWith("%")) {
|
|
36
|
+
return panes.find((p) => p.id === target) ?? null;
|
|
37
|
+
}
|
|
38
|
+
// 2. @ide_name match
|
|
39
|
+
const byName = panes.find((p) => p.name === target);
|
|
40
|
+
if (byName)
|
|
41
|
+
return byName;
|
|
42
|
+
// 3. Exact title match
|
|
43
|
+
const byTitle = panes.find((p) => p.title === target);
|
|
44
|
+
if (byTitle)
|
|
45
|
+
return byTitle;
|
|
46
|
+
// 4. Role match
|
|
47
|
+
const lower = target.toLowerCase();
|
|
48
|
+
if (["lead", "teammate", "planner"].includes(lower)) {
|
|
49
|
+
const byRole = panes.find((p) => p.role === lower);
|
|
50
|
+
if (byRole)
|
|
51
|
+
return byRole;
|
|
52
|
+
}
|
|
53
|
+
// 5. Case-insensitive partial title match
|
|
54
|
+
const byPattern = panes.find((p) => p.title.toLowerCase().includes(lower));
|
|
55
|
+
if (byPattern)
|
|
56
|
+
return byPattern;
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function prepareMessage(message, busyStatus) {
|
|
60
|
+
if (busyStatus === "agent") {
|
|
61
|
+
// Collapse multiline to single line for Claude Code TUI
|
|
62
|
+
// Prevents paste preview that requires manual Enter
|
|
63
|
+
return message.replace(/\n+/g, " ").trim();
|
|
64
|
+
}
|
|
65
|
+
return message;
|
|
66
|
+
}
|
|
67
|
+
export async function send(targetDir, opts) {
|
|
68
|
+
const dir = resolve(targetDir ?? ".");
|
|
69
|
+
const { name: session } = getSessionName(dir);
|
|
70
|
+
const { json, to: target, message: rawMessage, noEnter } = opts;
|
|
71
|
+
if (!target) {
|
|
72
|
+
throw new IdeError("Missing target. Usage: tmux-ide send <target> <message>", {
|
|
73
|
+
code: "USAGE",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (!rawMessage) {
|
|
77
|
+
throw new IdeError("Missing message. Usage: tmux-ide send <target> <message>", {
|
|
78
|
+
code: "USAGE",
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Verify session is running
|
|
82
|
+
const state = getSessionState(session);
|
|
83
|
+
if (!state.running) {
|
|
84
|
+
throw new IdeError(`Session "${session}" is not running`, {
|
|
85
|
+
code: "SESSION_NOT_FOUND",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const panes = listSessionPanes(session);
|
|
89
|
+
const pane = resolvePane(panes, target);
|
|
90
|
+
if (!pane) {
|
|
91
|
+
const available = panes
|
|
92
|
+
.map((p) => {
|
|
93
|
+
const label = p.name ?? p.title;
|
|
94
|
+
return ` ${p.id} ${label}${p.role ? ` (${p.role})` : ""}`;
|
|
95
|
+
})
|
|
96
|
+
.join("\n");
|
|
97
|
+
throw new IdeError(`Pane "${target}" not found.\n\nAvailable panes:\n${available}`, {
|
|
98
|
+
code: "PANE_NOT_FOUND",
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const busyStatus = getPaneBusyStatus(session, pane.id);
|
|
102
|
+
const message = prepareMessage(rawMessage, busyStatus);
|
|
103
|
+
let sentViaFile = false;
|
|
104
|
+
if (noEnter) {
|
|
105
|
+
sendText(session, pane.id, message);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const dispatch = writeDispatchFile(dir, pane.id, message);
|
|
109
|
+
if (dispatch) {
|
|
110
|
+
sendCommand(session, pane.id, dispatch.triggerCmd);
|
|
111
|
+
sentViaFile = true;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
sendCommand(session, pane.id, message);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const result = {
|
|
118
|
+
ok: true,
|
|
119
|
+
session,
|
|
120
|
+
target: {
|
|
121
|
+
paneId: pane.id,
|
|
122
|
+
name: pane.name,
|
|
123
|
+
title: pane.title,
|
|
124
|
+
role: pane.role,
|
|
125
|
+
},
|
|
126
|
+
message,
|
|
127
|
+
busyStatus,
|
|
128
|
+
sentViaFile,
|
|
129
|
+
...(busyStatus === "agent" ? { warning: "agent_busy" } : {}),
|
|
130
|
+
};
|
|
131
|
+
if (json) {
|
|
132
|
+
console.log(JSON.stringify(result, null, 2));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const label = pane.name ?? pane.title;
|
|
136
|
+
const preview = message.length > 60 ? message.slice(0, 60) + "..." : message;
|
|
137
|
+
console.log(`Sent to "${label}" (${pane.id}): ${preview}`);
|
|
138
|
+
if (busyStatus === "agent") {
|
|
139
|
+
console.log("Warning: agent appears busy. Message sent anyway.");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Server } from "node:http";
|
|
2
|
+
import { Hono } from "hono";
|
|
3
|
+
export interface StartedTmuxIdeServer {
|
|
4
|
+
port: number;
|
|
5
|
+
server: Server;
|
|
6
|
+
close(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare function resolvePort(port?: number): number;
|
|
9
|
+
export declare function createApp(): Hono;
|
|
10
|
+
export declare function start(port?: number): Promise<StartedTmuxIdeServer>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
import { parse } from "node:url";
|
|
3
|
+
import { Hono } from "hono";
|
|
4
|
+
import { getRequestListener } from "@hono/node-server";
|
|
5
|
+
import { WebSocketServer } from "ws";
|
|
6
|
+
import { handlePtyWebSocket, shutdownPtyBridges } from "./ws-route.js";
|
|
7
|
+
const DEFAULT_PORT = 6070;
|
|
8
|
+
export function resolvePort(port) {
|
|
9
|
+
const raw = port ?? Number.parseInt(process.env.TMUX_IDE_PORT ?? String(DEFAULT_PORT), 10);
|
|
10
|
+
if (!Number.isInteger(raw) || raw <= 0) {
|
|
11
|
+
throw new Error(`Invalid server port: ${String(port ?? process.env.TMUX_IDE_PORT)}`);
|
|
12
|
+
}
|
|
13
|
+
return raw;
|
|
14
|
+
}
|
|
15
|
+
export function createApp() {
|
|
16
|
+
const app = new Hono();
|
|
17
|
+
app.get("/", (c) => c.text("tmux-ide server"));
|
|
18
|
+
app.get("/health", (c) => c.json({ ok: true }));
|
|
19
|
+
return app;
|
|
20
|
+
}
|
|
21
|
+
export async function start(port) {
|
|
22
|
+
const resolvedPort = resolvePort(port);
|
|
23
|
+
const app = createApp();
|
|
24
|
+
const server = createServer(getRequestListener(app.fetch));
|
|
25
|
+
const ptyWss = new WebSocketServer({ noServer: true });
|
|
26
|
+
server.on("upgrade", (req, socket, head) => {
|
|
27
|
+
const { pathname } = parse(req.url ?? "/", true);
|
|
28
|
+
const match = pathname?.match(/^\/ws\/pty\/([^/]+)$/);
|
|
29
|
+
if (!match) {
|
|
30
|
+
socket.destroy();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const id = decodeURIComponent(match[1] ?? "");
|
|
34
|
+
ptyWss.handleUpgrade(req, socket, head, (ws) => {
|
|
35
|
+
handlePtyWebSocket(ws, id);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
await new Promise((resolve, reject) => {
|
|
39
|
+
server.once("error", reject);
|
|
40
|
+
server.listen(resolvedPort, "0.0.0.0", () => {
|
|
41
|
+
server.off("error", reject);
|
|
42
|
+
resolve();
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
console.log(`tmux-ide server listening on http://0.0.0.0:${resolvedPort}`);
|
|
46
|
+
return {
|
|
47
|
+
port: resolvedPort,
|
|
48
|
+
server,
|
|
49
|
+
close: () => new Promise((resolve, reject) => {
|
|
50
|
+
shutdownPtyBridges();
|
|
51
|
+
ptyWss.close();
|
|
52
|
+
server.close((err) => (err ? reject(err) : resolve()));
|
|
53
|
+
}),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import type { PtyAdapter } from "../terminal/PtyAdapter.ts";
|
|
4
|
+
/**
|
|
5
|
+
* Test-only spawn signature that historic tests injected before T087
|
|
6
|
+
* (see `options.pty?.spawn`). We keep it as a compat shim — anything more
|
|
7
|
+
* intrusive (e.g. a full `pty.IPty` stub) should switch to
|
|
8
|
+
* `options.ptyAdapter` (a `PtyAdapter` from `terminal/MockPtyAdapter.ts`).
|
|
9
|
+
*/
|
|
10
|
+
type LegacyPtySpawn = (shell: string, args: string[], opts: {
|
|
11
|
+
name?: string;
|
|
12
|
+
cols: number;
|
|
13
|
+
rows: number;
|
|
14
|
+
cwd: string;
|
|
15
|
+
env: Record<string, string>;
|
|
16
|
+
encoding: null | "utf8";
|
|
17
|
+
}) => {
|
|
18
|
+
pid: number;
|
|
19
|
+
cols?: number;
|
|
20
|
+
rows?: number;
|
|
21
|
+
onData(cb: (data: unknown) => void): {
|
|
22
|
+
dispose(): void;
|
|
23
|
+
};
|
|
24
|
+
onExit(cb: (evt: {
|
|
25
|
+
exitCode: number;
|
|
26
|
+
signal?: number | null;
|
|
27
|
+
}) => void): {
|
|
28
|
+
dispose(): void;
|
|
29
|
+
};
|
|
30
|
+
write(data: string | Buffer): void;
|
|
31
|
+
resize(cols: number, rows: number): void;
|
|
32
|
+
kill(signal?: NodeJS.Signals | string): void;
|
|
33
|
+
};
|
|
34
|
+
export interface PtyExit {
|
|
35
|
+
code: number;
|
|
36
|
+
signal: number | null;
|
|
37
|
+
}
|
|
38
|
+
export type TerminalCwdErrorReason = "notFound" | "notDirectory" | "statFailed";
|
|
39
|
+
/**
|
|
40
|
+
* Typed error thrown when a requested terminal cwd cannot be used to
|
|
41
|
+
* spawn a PTY. Carries the offending cwd and a discriminator so the
|
|
42
|
+
* WebSocket layer can surface a structured error frame to the client.
|
|
43
|
+
*/
|
|
44
|
+
export declare class TerminalCwdError extends Error {
|
|
45
|
+
readonly cwd: string;
|
|
46
|
+
readonly reason: TerminalCwdErrorReason;
|
|
47
|
+
constructor(args: {
|
|
48
|
+
cwd: string;
|
|
49
|
+
reason: TerminalCwdErrorReason;
|
|
50
|
+
cause?: unknown;
|
|
51
|
+
});
|
|
52
|
+
private static formatMessage;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Typed error thrown when caller-supplied PTY input is structurally
|
|
56
|
+
* invalid (e.g. empty cwd for the project default terminal). Distinct
|
|
57
|
+
* from {@link TerminalCwdError} which describes filesystem state.
|
|
58
|
+
*/
|
|
59
|
+
export declare class TerminalSpawnInputError extends Error {
|
|
60
|
+
readonly field: string;
|
|
61
|
+
constructor(args: {
|
|
62
|
+
field: string;
|
|
63
|
+
message: string;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
export interface PtyBridgeOptions {
|
|
67
|
+
id?: string;
|
|
68
|
+
shell?: string;
|
|
69
|
+
args?: string[];
|
|
70
|
+
cwd?: string;
|
|
71
|
+
env?: Record<string, string | undefined>;
|
|
72
|
+
name?: string;
|
|
73
|
+
coalesceMs?: number;
|
|
74
|
+
ringBufferBytes?: number;
|
|
75
|
+
/**
|
|
76
|
+
* Inject a `PtyAdapter` (T087). When omitted, the bridge uses the
|
|
77
|
+
* `defaultNodePtyAdapter`. Tests should pass a `MockPtyAdapter` from
|
|
78
|
+
* `terminal/__tests__/MockPtyAdapter.ts` so no native PTY is spawned.
|
|
79
|
+
*/
|
|
80
|
+
ptyAdapter?: PtyAdapter;
|
|
81
|
+
/**
|
|
82
|
+
* Legacy injection point retained for back-compat with pre-T087 tests
|
|
83
|
+
* that hand-roll a `pty.spawn` stub. The bridge wraps the supplied
|
|
84
|
+
* function in an internal `NodePtyAdapter` so the rest of the code path
|
|
85
|
+
* stays uniform. New tests should prefer `ptyAdapter`.
|
|
86
|
+
*/
|
|
87
|
+
pty?: {
|
|
88
|
+
spawn: LegacyPtySpawn;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Override for cwd validation. Defaults to a real `fs.statSync` check.
|
|
92
|
+
* Tests inject a stub to exercise the typed-error branches without
|
|
93
|
+
* touching the filesystem.
|
|
94
|
+
*/
|
|
95
|
+
statCwd?: (cwd: string) => fs.Stats;
|
|
96
|
+
}
|
|
97
|
+
export interface PtySpawnOptions {
|
|
98
|
+
cwd?: string;
|
|
99
|
+
cmd?: string[];
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Validate that the supplied cwd exists and is a directory. Throws a
|
|
103
|
+
* {@link TerminalCwdError} with a typed reason on any failure so the
|
|
104
|
+
* caller can surface a structured error frame instead of leaking
|
|
105
|
+
* stringly-typed errno checks.
|
|
106
|
+
*/
|
|
107
|
+
export declare function assertValidCwd(cwd: string, statCwd?: (cwd: string) => fs.Stats): void;
|
|
108
|
+
export declare function cleanEnv(): Record<string, string>;
|
|
109
|
+
export declare class PtyBridge extends EventEmitter {
|
|
110
|
+
private ptyProcess;
|
|
111
|
+
private dataDispose;
|
|
112
|
+
private exitDispose;
|
|
113
|
+
private exitPoll;
|
|
114
|
+
private outputTimer;
|
|
115
|
+
private outputChunks;
|
|
116
|
+
private pausedOutputChunks;
|
|
117
|
+
private outputPaused;
|
|
118
|
+
private replayChunks;
|
|
119
|
+
private replayBytes;
|
|
120
|
+
private lastCwd;
|
|
121
|
+
private readonly options;
|
|
122
|
+
private readonly adapter;
|
|
123
|
+
private readonly ringBufferBytes;
|
|
124
|
+
private readonly statCwd;
|
|
125
|
+
constructor(options?: PtyBridgeOptions);
|
|
126
|
+
/**
|
|
127
|
+
* Returns the cwd used by the most recent spawn (or restart). `null`
|
|
128
|
+
* if the bridge has never been spawned. Used by ws-route to detect
|
|
129
|
+
* stale-cwd reuse and trigger a respawn.
|
|
130
|
+
*/
|
|
131
|
+
getCwd(): string | null;
|
|
132
|
+
get pid(): number | null;
|
|
133
|
+
private lastCols;
|
|
134
|
+
private lastRows;
|
|
135
|
+
get cols(): number | null;
|
|
136
|
+
get rows(): number | null;
|
|
137
|
+
get running(): boolean;
|
|
138
|
+
getReplayBuffer(): Buffer;
|
|
139
|
+
flushReplayBuffer(): void;
|
|
140
|
+
spawn(cols: number, rows: number, spawnOptions?: PtySpawnOptions): void;
|
|
141
|
+
/**
|
|
142
|
+
* Stop the currently-running PTY process synchronously. Drops listeners
|
|
143
|
+
* and clears replay so a follow-up spawn starts from a clean slate.
|
|
144
|
+
* Idempotent — no-op when no process is running.
|
|
145
|
+
*
|
|
146
|
+
* Used by {@link restartWith} to swap out a sticky bridge whose cwd no
|
|
147
|
+
* longer matches the client request.
|
|
148
|
+
*/
|
|
149
|
+
stopProcess(signal?: NodeJS.Signals): void;
|
|
150
|
+
/**
|
|
151
|
+
* Stop the running process (if any) and spawn a new one with the
|
|
152
|
+
* supplied options. Preserves bridge identity (id, registry slot) but
|
|
153
|
+
* resets the replay buffer — the prior process is gone, there is no
|
|
154
|
+
* meaningful output to replay. Used when a reconnect requests a new
|
|
155
|
+
* cwd; modeled on t3code's `stopProcess + spawn` pattern.
|
|
156
|
+
*/
|
|
157
|
+
restartWith(cols: number, rows: number, spawnOptions?: PtySpawnOptions): void;
|
|
158
|
+
pause(): void;
|
|
159
|
+
resume(): void;
|
|
160
|
+
write(bytes: Buffer | Uint8Array | string): void;
|
|
161
|
+
resize(cols: number, rows: number): void;
|
|
162
|
+
kill(signal?: NodeJS.Signals): void;
|
|
163
|
+
dispose(): void;
|
|
164
|
+
private disposeListeners;
|
|
165
|
+
private enqueueOutput;
|
|
166
|
+
private flushCoalescedOutput;
|
|
167
|
+
private deliverOutput;
|
|
168
|
+
private flushPausedOutput;
|
|
169
|
+
private flushAllOutput;
|
|
170
|
+
private appendReplay;
|
|
171
|
+
private startExitPoll;
|
|
172
|
+
private emitExit;
|
|
173
|
+
}
|
|
174
|
+
export {};
|