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,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composable builders for tmux session configuration.
|
|
3
|
+
* Each returns an array of tmux command arrays.
|
|
4
|
+
*/
|
|
5
|
+
export function buildSessionOptions(session, { theme = {} } = {}) {
|
|
6
|
+
return [
|
|
7
|
+
...themeOptions(session, theme),
|
|
8
|
+
...borderOptions(session, theme),
|
|
9
|
+
...behaviorOptions(session),
|
|
10
|
+
...statusBarOptions(session, theme),
|
|
11
|
+
...keyBindings(),
|
|
12
|
+
];
|
|
13
|
+
}
|
|
14
|
+
export function themeOptions(session, theme) {
|
|
15
|
+
const accent = theme.accent ?? "colour75";
|
|
16
|
+
const border = theme.border ?? "colour238";
|
|
17
|
+
const bg = theme.bg ?? "colour235";
|
|
18
|
+
const fg = theme.fg ?? "colour248";
|
|
19
|
+
return [
|
|
20
|
+
["set-option", "-t", session, "status-style", `bg=${bg},fg=${fg}`],
|
|
21
|
+
["set-option", "-t", session, "pane-border-style", `fg=${border}`],
|
|
22
|
+
["set-option", "-t", session, "pane-active-border-style", `fg=${accent}`],
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
export function borderOptions(session, theme) {
|
|
26
|
+
const accent = theme.accent ?? "colour75";
|
|
27
|
+
const border = theme.border ?? "colour238";
|
|
28
|
+
const fg = theme.fg ?? "colour248";
|
|
29
|
+
return [
|
|
30
|
+
["set-option", "-t", session, "pane-border-status", "top"],
|
|
31
|
+
[
|
|
32
|
+
"set-option",
|
|
33
|
+
"-t",
|
|
34
|
+
session,
|
|
35
|
+
"pane-border-format",
|
|
36
|
+
` #{?pane_active,#[fg=${accent}#,bold]▸ #T #[fg=${fg}]#{pane_current_path},#[fg=${border}]· #T #{pane_current_path}} `,
|
|
37
|
+
],
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
export function behaviorOptions(session) {
|
|
41
|
+
return [
|
|
42
|
+
["set-option", "-t", session, "mouse", "on"],
|
|
43
|
+
["set-option", "-t", session, "escape-time", "0"],
|
|
44
|
+
["set-option", "-t", session, "status-interval", "1"],
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
export function statusBarOptions(session, theme) {
|
|
48
|
+
const accent = theme.accent ?? "colour75";
|
|
49
|
+
const border = theme.border ?? "colour238";
|
|
50
|
+
const fg = theme.fg ?? "colour248";
|
|
51
|
+
// Pane tab components — each is a self-contained piece
|
|
52
|
+
const agentIndicator = [
|
|
53
|
+
`#{?#{==:#{@agent_busy},1},#[fg=${accent}]⏺ ,`,
|
|
54
|
+
`#{?#{==:#{@agent_idle},1},#[fg=${border}]● ,}}`,
|
|
55
|
+
].join("");
|
|
56
|
+
const portIndicator = `#{?#{==:#{@has_port},1},#[fg=green]⏺ ,}`;
|
|
57
|
+
const paneStyle = `#{?pane_active,#[fg=${accent}],#[fg=${border}]}`;
|
|
58
|
+
const paneTab = `${agentIndicator}${portIndicator}${paneStyle}#[range=pane|#{pane_id}] #T #[norange]#[default]`;
|
|
59
|
+
const separator = `#{?loop_last_flag,,#[fg=${border}]│}`;
|
|
60
|
+
return [
|
|
61
|
+
[
|
|
62
|
+
"set-option",
|
|
63
|
+
"-t",
|
|
64
|
+
session,
|
|
65
|
+
"status-left",
|
|
66
|
+
`#[fg=colour0,bg=${accent},bold] ${session.toUpperCase()} IDE #[default] `,
|
|
67
|
+
],
|
|
68
|
+
["set-option", "-t", session, "status-left-length", "30"],
|
|
69
|
+
[
|
|
70
|
+
"set-option",
|
|
71
|
+
"-t",
|
|
72
|
+
session,
|
|
73
|
+
"status-right",
|
|
74
|
+
`#[fg=colour243]%H:%M #[fg=${accent}]│ #[fg=${fg}]%b %d `,
|
|
75
|
+
],
|
|
76
|
+
["set-option", "-t", session, "status-justify", "centre"],
|
|
77
|
+
["set-option", "-t", session, "window-status-current-format", `#[fg=${accent},bold]●`],
|
|
78
|
+
["set-option", "-t", session, "window-status-format", `#[fg=${border}]○`],
|
|
79
|
+
["set-option", "-t", session, "status", "2"],
|
|
80
|
+
["set-option", "-t", session, "status-format[1]", ` #{P:${paneTab}${separator}}`],
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
export function keyBindings() {
|
|
84
|
+
return [["bind-key", "-n", "MouseDown1StatusDefault", "select-pane", "-t", "="]];
|
|
85
|
+
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Quote a string for safe embedding in POSIX sh/bash commands as a single word.
|
|
3
3
|
* Wraps in single quotes; embedded `'` becomes `'\''` (end quote, literal quote, resume).
|
|
4
4
|
*/
|
|
5
|
-
export function shellEscape(s
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export function shellEscape(s) {
|
|
6
|
+
// Each "'" in the input becomes '\'' outside a single-quoted string.
|
|
7
|
+
return "'" + s.replace(/'/g, "'\\''") + "'";
|
|
8
8
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute absolute sizes for items where some have explicit sizes and others don't.
|
|
3
|
+
* Items with `size` (e.g. "70%") keep their value; remaining space is split equally
|
|
4
|
+
* among items without a size.
|
|
5
|
+
*/
|
|
6
|
+
export declare function computeSizes(items: {
|
|
7
|
+
size?: string;
|
|
8
|
+
}[]): number[];
|
|
9
|
+
/**
|
|
10
|
+
* Convert absolute sizes (e.g. [70, 30]) to tmux split percentages for sequential splits.
|
|
11
|
+
* Returns array of -p values (one per split after the first item).
|
|
12
|
+
*
|
|
13
|
+
* Each tmux split divides the current pane. The percentage given to -p is
|
|
14
|
+
* the portion allocated to the NEW (bottom/right) pane.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toSplitPercents(sizes: number[]): number[];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute absolute sizes for items where some have explicit sizes and others don't.
|
|
3
|
+
* Items with `size` (e.g. "70%") keep their value; remaining space is split equally
|
|
4
|
+
* among items without a size.
|
|
5
|
+
*/
|
|
6
|
+
export function computeSizes(items) {
|
|
7
|
+
let claimed = 0;
|
|
8
|
+
let unclaimed = 0;
|
|
9
|
+
for (const item of items) {
|
|
10
|
+
if (item.size) {
|
|
11
|
+
claimed += parseFloat(item.size);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
unclaimed++;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const remaining = Math.max(0, 100 - claimed);
|
|
18
|
+
const defaultSize = unclaimed > 0 ? remaining / unclaimed : 0;
|
|
19
|
+
return items.map((item) => (item.size ? parseFloat(item.size) : defaultSize));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert absolute sizes (e.g. [70, 30]) to tmux split percentages for sequential splits.
|
|
23
|
+
* Returns array of -p values (one per split after the first item).
|
|
24
|
+
*
|
|
25
|
+
* Each tmux split divides the current pane. The percentage given to -p is
|
|
26
|
+
* the portion allocated to the NEW (bottom/right) pane.
|
|
27
|
+
*/
|
|
28
|
+
export function toSplitPercents(sizes) {
|
|
29
|
+
const percents = [];
|
|
30
|
+
for (let i = 1; i < sizes.length; i++) {
|
|
31
|
+
const remaining = sizes.slice(i - 1).reduce((a, b) => a + b, 0);
|
|
32
|
+
const topShare = sizes[i - 1];
|
|
33
|
+
percents.push(Math.round(((remaining - topShare) / remaining) * 100));
|
|
34
|
+
}
|
|
35
|
+
return percents;
|
|
36
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code's config dir: `TMUX_IDE_CLAUDE_DIR` when set (tests / per-run
|
|
3
|
+
* overrides), else `~/.claude`. Mirrors the {@link ../tui/integrations/claude.ts}
|
|
4
|
+
* settings override so both halves of the agent setup honor the same scratch dir.
|
|
5
|
+
*/
|
|
6
|
+
export declare function claudeDir(): string;
|
|
7
|
+
/** The fully-managed tmux-ide skill dir: `<claudeDir>/skills/tmux-ide`. */
|
|
8
|
+
export declare function skillTargetDir(): string;
|
|
9
|
+
/** The installed SKILL.md path (inside {@link skillTargetDir}). */
|
|
10
|
+
export declare function skillTargetFile(): string;
|
|
11
|
+
/**
|
|
12
|
+
* io — the bundled SKILL.md that ships in the package. Resolved relative to this
|
|
13
|
+
* module, handling BOTH the esbuild-bundled CLI (this file inlines into
|
|
14
|
+
* `bin/cli.js`, so `here` is `bin/` and the skill is one level up) AND the dev
|
|
15
|
+
* source tree (`packages/daemon/src/lib/`, four levels below the repo root) — the
|
|
16
|
+
* same dual-candidate trick as {@link getCurrentVersion}. Returns the first that
|
|
17
|
+
* exists, else the bundled-layout guess.
|
|
18
|
+
*/
|
|
19
|
+
export declare function defaultSkillSource(): string;
|
|
20
|
+
/**
|
|
21
|
+
* The version marker line (an HTML comment on line 2 of SKILL.md). The sync
|
|
22
|
+
* machinery reads it to know which version an installed copy is, and rewrites it
|
|
23
|
+
* to the installed package version at copy time.
|
|
24
|
+
*/
|
|
25
|
+
export declare const VERSION_MARKER_RE: RegExp;
|
|
26
|
+
/** PURE — render the marker line for a given version. */
|
|
27
|
+
export declare function versionMarker(version: string): string;
|
|
28
|
+
/** PURE — the version in a SKILL.md body, or null when the marker is absent. */
|
|
29
|
+
export declare function parseSkillVersion(content: string): string | null;
|
|
30
|
+
/**
|
|
31
|
+
* PURE — return `content` with its version marker rewritten to `version`. When no
|
|
32
|
+
* marker is present the content is returned unchanged (the bundled SKILL.md
|
|
33
|
+
* always carries one; this just never corrupts a hand-stripped file).
|
|
34
|
+
*/
|
|
35
|
+
export declare function rewriteVersionMarker(content: string, version: string): string;
|
|
36
|
+
/** The version marker read off an installed SKILL.md, or null if absent/unreadable. */
|
|
37
|
+
export declare function installedSkillVersion(dir?: string): string | null;
|
|
38
|
+
/** What a {@link syncSkill} did. */
|
|
39
|
+
export interface SyncResult {
|
|
40
|
+
/** `installed` = target was absent; `updated` = content changed; `unchanged` = no-op. */
|
|
41
|
+
action: "installed" | "updated" | "unchanged";
|
|
42
|
+
/** The written SKILL.md path. */
|
|
43
|
+
path: string;
|
|
44
|
+
/** The installed version before an `updated` (the marker we replaced), if any. */
|
|
45
|
+
from?: string | null;
|
|
46
|
+
/** The version written into the copy's marker. */
|
|
47
|
+
to: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* io — copy the bundled SKILL.md into the managed skill dir with its version
|
|
51
|
+
* marker rewritten to `version`. Content-driven and idempotent: the RENDERED
|
|
52
|
+
* source (marker substituted) is compared byte-for-byte against the installed
|
|
53
|
+
* copy — identical → `unchanged` (no write), absent → `installed`, otherwise
|
|
54
|
+
* `updated`. Only ever writes inside {@link skillTargetDir}; nothing outside it
|
|
55
|
+
* is read or touched.
|
|
56
|
+
*/
|
|
57
|
+
export declare function syncSkill({ source, version, }?: {
|
|
58
|
+
source?: string;
|
|
59
|
+
version?: string;
|
|
60
|
+
}): SyncResult;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Managed sync of the bundled Claude Code skill → `~/.claude/skills/tmux-ide`.
|
|
3
|
+
*
|
|
4
|
+
* `skill/SKILL.md` is the manual a coding agent loads to drive tmux-ide. It ships
|
|
5
|
+
* IN the package, but the copy that agents actually read lives in the user's
|
|
6
|
+
* `~/.claude/skills/` — so every install AND every update has to keep that copy
|
|
7
|
+
* fresh, or agents drive an old CLI. This module is that refresh: it copies the
|
|
8
|
+
* bundled SKILL.md into the tmux-ide skill dir with the version marker rewritten
|
|
9
|
+
* to the installed package version, and reports whether that was an install, an
|
|
10
|
+
* update, or a no-op.
|
|
11
|
+
*
|
|
12
|
+
* The dir is FULLY MANAGED: overwriting our own `~/.claude/skills/tmux-ide` is
|
|
13
|
+
* correct, and this NEVER touches anything outside it (user-authored skills in
|
|
14
|
+
* sibling dirs are safe). The version marker is line 2 of SKILL.md, an HTML
|
|
15
|
+
* comment ({@link VERSION_MARKER_RE}); {@link parseSkillVersion} reads it and
|
|
16
|
+
* {@link rewriteVersionMarker} substitutes it at copy time.
|
|
17
|
+
*
|
|
18
|
+
* The parse/render helpers are PURE and tested against fixtures; {@link syncSkill}
|
|
19
|
+
* is the thin io wrapper (tested with tmp dirs). Wired from three places — the
|
|
20
|
+
* npm `postinstall` (which re-implements the marker rewrite in plain JS since it
|
|
21
|
+
* can't import TS — see scripts/postinstall.js), `tmux-ide skill-sync` / the dev
|
|
22
|
+
* path of `tmux-ide update`, and `tmux-ide integration install claude`.
|
|
23
|
+
*/
|
|
24
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
25
|
+
import { homedir } from "node:os";
|
|
26
|
+
import { dirname, join } from "node:path";
|
|
27
|
+
import { fileURLToPath } from "node:url";
|
|
28
|
+
import { getCurrentVersion } from "./update-check.js";
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Paths
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
/**
|
|
33
|
+
* Claude Code's config dir: `TMUX_IDE_CLAUDE_DIR` when set (tests / per-run
|
|
34
|
+
* overrides), else `~/.claude`. Mirrors the {@link ../tui/integrations/claude.ts}
|
|
35
|
+
* settings override so both halves of the agent setup honor the same scratch dir.
|
|
36
|
+
*/
|
|
37
|
+
export function claudeDir() {
|
|
38
|
+
return process.env.TMUX_IDE_CLAUDE_DIR ?? join(homedir(), ".claude");
|
|
39
|
+
}
|
|
40
|
+
/** The fully-managed tmux-ide skill dir: `<claudeDir>/skills/tmux-ide`. */
|
|
41
|
+
export function skillTargetDir() {
|
|
42
|
+
return join(claudeDir(), "skills", "tmux-ide");
|
|
43
|
+
}
|
|
44
|
+
/** The installed SKILL.md path (inside {@link skillTargetDir}). */
|
|
45
|
+
export function skillTargetFile() {
|
|
46
|
+
return join(skillTargetDir(), "SKILL.md");
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* io — the bundled SKILL.md that ships in the package. Resolved relative to this
|
|
50
|
+
* module, handling BOTH the esbuild-bundled CLI (this file inlines into
|
|
51
|
+
* `bin/cli.js`, so `here` is `bin/` and the skill is one level up) AND the dev
|
|
52
|
+
* source tree (`packages/daemon/src/lib/`, four levels below the repo root) — the
|
|
53
|
+
* same dual-candidate trick as {@link getCurrentVersion}. Returns the first that
|
|
54
|
+
* exists, else the bundled-layout guess.
|
|
55
|
+
*/
|
|
56
|
+
export function defaultSkillSource() {
|
|
57
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
58
|
+
const candidates = [
|
|
59
|
+
join(here, "../skill/SKILL.md"), // bundled bin/cli.js → repo root
|
|
60
|
+
join(here, "../../../../skill/SKILL.md"), // dev src/lib → repo root
|
|
61
|
+
];
|
|
62
|
+
return candidates.find((c) => existsSync(c)) ?? candidates[0];
|
|
63
|
+
}
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Pure — version marker
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
/**
|
|
68
|
+
* The version marker line (an HTML comment on line 2 of SKILL.md). The sync
|
|
69
|
+
* machinery reads it to know which version an installed copy is, and rewrites it
|
|
70
|
+
* to the installed package version at copy time.
|
|
71
|
+
*/
|
|
72
|
+
export const VERSION_MARKER_RE = /<!--\s*tmux-ide-skill-version:\s*([^\s]+)\s*-->/;
|
|
73
|
+
/** PURE — render the marker line for a given version. */
|
|
74
|
+
export function versionMarker(version) {
|
|
75
|
+
return `<!-- tmux-ide-skill-version: ${version} -->`;
|
|
76
|
+
}
|
|
77
|
+
/** PURE — the version in a SKILL.md body, or null when the marker is absent. */
|
|
78
|
+
export function parseSkillVersion(content) {
|
|
79
|
+
const match = content.match(VERSION_MARKER_RE);
|
|
80
|
+
return match ? match[1] : null;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* PURE — return `content` with its version marker rewritten to `version`. When no
|
|
84
|
+
* marker is present the content is returned unchanged (the bundled SKILL.md
|
|
85
|
+
* always carries one; this just never corrupts a hand-stripped file).
|
|
86
|
+
*/
|
|
87
|
+
export function rewriteVersionMarker(content, version) {
|
|
88
|
+
if (!VERSION_MARKER_RE.test(content))
|
|
89
|
+
return content;
|
|
90
|
+
return content.replace(VERSION_MARKER_RE, versionMarker(version));
|
|
91
|
+
}
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
// io
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
/** The version marker read off an installed SKILL.md, or null if absent/unreadable. */
|
|
96
|
+
export function installedSkillVersion(dir = skillTargetDir()) {
|
|
97
|
+
const file = join(dir, "SKILL.md");
|
|
98
|
+
if (!existsSync(file))
|
|
99
|
+
return null;
|
|
100
|
+
try {
|
|
101
|
+
return parseSkillVersion(readFileSync(file, "utf-8"));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* io — copy the bundled SKILL.md into the managed skill dir with its version
|
|
109
|
+
* marker rewritten to `version`. Content-driven and idempotent: the RENDERED
|
|
110
|
+
* source (marker substituted) is compared byte-for-byte against the installed
|
|
111
|
+
* copy — identical → `unchanged` (no write), absent → `installed`, otherwise
|
|
112
|
+
* `updated`. Only ever writes inside {@link skillTargetDir}; nothing outside it
|
|
113
|
+
* is read or touched.
|
|
114
|
+
*/
|
|
115
|
+
export function syncSkill({ source = defaultSkillSource(), version = getCurrentVersion(), } = {}) {
|
|
116
|
+
const rendered = rewriteVersionMarker(readFileSync(source, "utf-8"), version);
|
|
117
|
+
const dir = skillTargetDir();
|
|
118
|
+
const target = join(dir, "SKILL.md");
|
|
119
|
+
const existing = existsSync(target) ? readFileSync(target, "utf-8") : null;
|
|
120
|
+
if (existing === rendered) {
|
|
121
|
+
return { action: "unchanged", path: target, to: version };
|
|
122
|
+
}
|
|
123
|
+
mkdirSync(dir, { recursive: true });
|
|
124
|
+
writeFileSync(target, rendered, "utf-8");
|
|
125
|
+
if (existing === null)
|
|
126
|
+
return { action: "installed", path: target, to: version };
|
|
127
|
+
return { action: "updated", path: target, from: parseSkillVersion(existing), to: version };
|
|
128
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminals registry (G20-P1).
|
|
3
|
+
*
|
|
4
|
+
* JSON-backed persistence for tab-strip metadata — names, scopes, and
|
|
5
|
+
* kind. The actual PTY process lives in `PtyBridgeRegistry`; this
|
|
6
|
+
* store only persists what the UI needs to restore tab labels across
|
|
7
|
+
* reloads. Atomic writes (temp + rename) so a crash mid-write leaves
|
|
8
|
+
* the previous list intact.
|
|
9
|
+
*/
|
|
10
|
+
import type { Terminal, TerminalKind } from "@tmux-ide/contracts";
|
|
11
|
+
/** Load the full list for a session. Missing file → empty list. */
|
|
12
|
+
export declare function loadTerminals(dir: string): Terminal[];
|
|
13
|
+
export interface CreateInput {
|
|
14
|
+
id: string;
|
|
15
|
+
projectId: string;
|
|
16
|
+
scopeId: string;
|
|
17
|
+
name: string;
|
|
18
|
+
kind: TerminalKind;
|
|
19
|
+
scripted?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** Insert OR replace a terminal record by id. Idempotent — calling
|
|
22
|
+
* `createTerminal` twice with the same deterministic id is a no-op
|
|
23
|
+
* on the canonical fields and updates `updatedAt`. */
|
|
24
|
+
export declare function upsertTerminal(dir: string, input: CreateInput): Terminal;
|
|
25
|
+
export declare function renameTerminal(dir: string, id: string, name: string): Terminal | null;
|
|
26
|
+
export declare function deleteTerminal(dir: string, id: string): boolean;
|
|
27
|
+
export declare function findTerminal(dir: string, id: string): Terminal | null;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminals registry (G20-P1).
|
|
3
|
+
*
|
|
4
|
+
* JSON-backed persistence for tab-strip metadata — names, scopes, and
|
|
5
|
+
* kind. The actual PTY process lives in `PtyBridgeRegistry`; this
|
|
6
|
+
* store only persists what the UI needs to restore tab labels across
|
|
7
|
+
* reloads. Atomic writes (temp + rename) so a crash mid-write leaves
|
|
8
|
+
* the previous list intact.
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
const TERMINALS_FILE = ".tmux-ide/terminals.json";
|
|
13
|
+
const SAFE_ID = /^[A-Za-z0-9_-]+$/u;
|
|
14
|
+
function path(dir) {
|
|
15
|
+
return join(dir, TERMINALS_FILE);
|
|
16
|
+
}
|
|
17
|
+
function ensureDir(dir) {
|
|
18
|
+
mkdirSync(dirname(path(dir)), { recursive: true });
|
|
19
|
+
}
|
|
20
|
+
/** Load the full list for a session. Missing file → empty list. */
|
|
21
|
+
export function loadTerminals(dir) {
|
|
22
|
+
const file = path(dir);
|
|
23
|
+
if (!existsSync(file))
|
|
24
|
+
return [];
|
|
25
|
+
try {
|
|
26
|
+
const body = readFileSync(file, "utf-8");
|
|
27
|
+
const parsed = JSON.parse(body);
|
|
28
|
+
if (!parsed.terminals || !Array.isArray(parsed.terminals))
|
|
29
|
+
return [];
|
|
30
|
+
return parsed.terminals.filter((t) => isTerminal(t)).map((t) => ({ ...t }));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function isTerminal(value) {
|
|
37
|
+
if (!value || typeof value !== "object")
|
|
38
|
+
return false;
|
|
39
|
+
const v = value;
|
|
40
|
+
return (typeof v.id === "string" &&
|
|
41
|
+
SAFE_ID.test(v.id) &&
|
|
42
|
+
typeof v.projectId === "string" &&
|
|
43
|
+
typeof v.scopeId === "string" &&
|
|
44
|
+
typeof v.name === "string" &&
|
|
45
|
+
(v.kind === "shell" || v.kind === "setup" || v.kind === "run" || v.kind === "teardown") &&
|
|
46
|
+
typeof v.createdAt === "string" &&
|
|
47
|
+
typeof v.updatedAt === "string");
|
|
48
|
+
}
|
|
49
|
+
function writeAtomic(dir, terminals) {
|
|
50
|
+
ensureDir(dir);
|
|
51
|
+
const file = path(dir);
|
|
52
|
+
const tmp = `${file}.tmp`;
|
|
53
|
+
writeFileSync(tmp, JSON.stringify({ terminals }, null, 2) + "\n");
|
|
54
|
+
renameSync(tmp, file);
|
|
55
|
+
}
|
|
56
|
+
/** Insert OR replace a terminal record by id. Idempotent — calling
|
|
57
|
+
* `createTerminal` twice with the same deterministic id is a no-op
|
|
58
|
+
* on the canonical fields and updates `updatedAt`. */
|
|
59
|
+
export function upsertTerminal(dir, input) {
|
|
60
|
+
if (!SAFE_ID.test(input.id)) {
|
|
61
|
+
throw new Error(`invalid terminal id "${input.id}"`);
|
|
62
|
+
}
|
|
63
|
+
const existing = loadTerminals(dir);
|
|
64
|
+
const idx = existing.findIndex((t) => t.id === input.id);
|
|
65
|
+
const now = new Date().toISOString();
|
|
66
|
+
const next = {
|
|
67
|
+
id: input.id,
|
|
68
|
+
projectId: input.projectId,
|
|
69
|
+
scopeId: input.scopeId,
|
|
70
|
+
name: input.name,
|
|
71
|
+
kind: input.kind,
|
|
72
|
+
createdAt: existing[idx]?.createdAt ?? now,
|
|
73
|
+
updatedAt: now,
|
|
74
|
+
...(input.scripted ? { scripted: true } : {}),
|
|
75
|
+
};
|
|
76
|
+
if (idx === -1)
|
|
77
|
+
existing.push(next);
|
|
78
|
+
else
|
|
79
|
+
existing[idx] = next;
|
|
80
|
+
writeAtomic(dir, existing);
|
|
81
|
+
return next;
|
|
82
|
+
}
|
|
83
|
+
export function renameTerminal(dir, id, name) {
|
|
84
|
+
const all = loadTerminals(dir);
|
|
85
|
+
const idx = all.findIndex((t) => t.id === id);
|
|
86
|
+
if (idx === -1)
|
|
87
|
+
return null;
|
|
88
|
+
const trimmed = name.trim();
|
|
89
|
+
if (!trimmed)
|
|
90
|
+
throw new Error("name required");
|
|
91
|
+
const next = {
|
|
92
|
+
...all[idx],
|
|
93
|
+
name: trimmed,
|
|
94
|
+
updatedAt: new Date().toISOString(),
|
|
95
|
+
};
|
|
96
|
+
all[idx] = next;
|
|
97
|
+
writeAtomic(dir, all);
|
|
98
|
+
return next;
|
|
99
|
+
}
|
|
100
|
+
export function deleteTerminal(dir, id) {
|
|
101
|
+
const all = loadTerminals(dir);
|
|
102
|
+
const next = all.filter((t) => t.id !== id);
|
|
103
|
+
if (next.length === all.length)
|
|
104
|
+
return false;
|
|
105
|
+
writeAtomic(dir, next);
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
export function findTerminal(dir, id) {
|
|
109
|
+
const all = loadTerminals(dir);
|
|
110
|
+
return all.find((t) => t.id === id) ?? null;
|
|
111
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/** The npm dist-tag endpoint that returns `{ "version": "x.y.z", … }`. */
|
|
2
|
+
export declare const REGISTRY_URL = "https://registry.npmjs.org/tmux-ide/latest";
|
|
3
|
+
/** Re-check no more than once per this window (24h). */
|
|
4
|
+
export declare const CHECK_INTERVAL_MS: number;
|
|
5
|
+
/** The cheap, cache-derived answer every surface reads. */
|
|
6
|
+
export interface UpdateStatus {
|
|
7
|
+
/** The latest published version the last check saw, or null when unknown. */
|
|
8
|
+
latest: string | null;
|
|
9
|
+
/** True when {@link latest} is strictly newer than the running version. */
|
|
10
|
+
updateAvailable: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** The on-disk cache shape (`~/.tmux-ide/update-check.json`). */
|
|
13
|
+
export interface UpdateCache {
|
|
14
|
+
/** Epoch ms of the last network check (throttles {@link shouldCheck}). */
|
|
15
|
+
lastCheckedAt: number | null;
|
|
16
|
+
/** The latest version that check saw, or null. */
|
|
17
|
+
latest: string | null;
|
|
18
|
+
/** Versions we've already toasted about (one-time-per-version debounce). */
|
|
19
|
+
notified?: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* PURE — order two semver strings: `-1` if `a < b`, `1` if `a > b`, else `0`.
|
|
23
|
+
*
|
|
24
|
+
* Numeric core (major, minor, patch) compares field-by-field, so `2.10.0` sorts
|
|
25
|
+
* ABOVE `2.6.0` (numeric, not lexical). Prerelease follows semver's rule: a
|
|
26
|
+
* release outranks a prerelease of the same core (`1.0.0` > `1.0.0-rc`); two
|
|
27
|
+
* prereleases fall back to a plain lexical compare of their tags (a simple, good-
|
|
28
|
+
* enough ordering — we never need to rank `rc.2` vs `rc.10` precisely).
|
|
29
|
+
*/
|
|
30
|
+
export declare function compareSemver(a: string, b: string): -1 | 0 | 1;
|
|
31
|
+
/** PURE — is `latest` strictly newer than `current`? */
|
|
32
|
+
export declare function isNewer(latest: string, current: string): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* PURE — should we hit the network again? True when we've never checked
|
|
35
|
+
* (`lastCheckedAt` null) or the last check was at least {@link CHECK_INTERVAL_MS}
|
|
36
|
+
* ago. A future `lastCheckedAt` (clock skew) reads as "recent" and skips — the
|
|
37
|
+
* daily tick self-heals once the clock passes it.
|
|
38
|
+
*/
|
|
39
|
+
export declare function shouldCheck(lastCheckedAt: number | null, nowMs: number): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* PURE — pull the `version` string out of a raw npm dist-tag response body.
|
|
42
|
+
* Returns null (never throws) for malformed JSON, a non-object, or a
|
|
43
|
+
* missing/empty/non-string `version`.
|
|
44
|
+
*/
|
|
45
|
+
export declare function parseRegistryResponse(json: string): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* PURE — derive the {@link UpdateStatus} for a running version from a (possibly
|
|
48
|
+
* null) cached latest. The single place "is there an update?" is decided, so
|
|
49
|
+
* every surface agrees.
|
|
50
|
+
*/
|
|
51
|
+
export declare function deriveStatus(latest: string | null, currentVersion: string): UpdateStatus;
|
|
52
|
+
/**
|
|
53
|
+
* Absolute path to the cache file: `<home>/update-check.json`, where `<home>` is
|
|
54
|
+
* `TMUX_IDE_HOME` when set (tests / per-run overrides), else `~/.tmux-ide` — the
|
|
55
|
+
* same home resolution the welcome marker uses.
|
|
56
|
+
*/
|
|
57
|
+
export declare function updateCachePath(): string;
|
|
58
|
+
/** io — read + parse the cache, or null when absent/unreadable/malformed. */
|
|
59
|
+
export declare function readUpdateCache(): UpdateCache | null;
|
|
60
|
+
/** io — write the cache (creating `<home>` if needed). Best-effort, never throws. */
|
|
61
|
+
export declare function writeUpdateCache(cache: UpdateCache): void;
|
|
62
|
+
/**
|
|
63
|
+
* io — ask npm for the latest published version, or null on ANY failure (offline,
|
|
64
|
+
* timeout, non-200, garbage body). Aborts after `timeoutMs` so a slow registry
|
|
65
|
+
* can never stall the updater tick. This is the ONLY network call in the module.
|
|
66
|
+
*/
|
|
67
|
+
export declare function fetchLatestVersion(timeoutMs?: number): Promise<string | null>;
|
|
68
|
+
/**
|
|
69
|
+
* The running tmux-ide version, read from the nearest `package.json`. Handles
|
|
70
|
+
* BOTH the bundled CLI (`bin/cli.js`, so the repo-root package.json is one level
|
|
71
|
+
* up) AND the dev source tree (this file at `packages/daemon/src/lib/`, so the
|
|
72
|
+
* root is four levels up). The workspace `packages/daemon/package.json` is
|
|
73
|
+
* deliberately NOT a candidate — it carries a placeholder version. Falls back to
|
|
74
|
+
* `"0.0.0"` when nothing is readable (so an unknown version simply never shows an
|
|
75
|
+
* update rather than crashing).
|
|
76
|
+
*/
|
|
77
|
+
export declare function getCurrentVersion(): string;
|
|
78
|
+
/**
|
|
79
|
+
* The cheap, network-FREE status read every surface uses: derive
|
|
80
|
+
* {@link UpdateStatus} from the cache against the current version. `now`/
|
|
81
|
+
* `currentVersion` are injectable for tests; the defaults read the live clock +
|
|
82
|
+
* package version.
|
|
83
|
+
*/
|
|
84
|
+
export declare function getUpdateStatus({ currentVersion, }?: {
|
|
85
|
+
now?: number;
|
|
86
|
+
currentVersion?: string;
|
|
87
|
+
}): UpdateStatus;
|
|
88
|
+
/**
|
|
89
|
+
* io — the throttled network refresh (called fire-and-forget from the updater
|
|
90
|
+
* tick). Does nothing if the last check was inside {@link CHECK_INTERVAL_MS};
|
|
91
|
+
* otherwise fetches the latest version and rewrites the cache with a fresh
|
|
92
|
+
* `lastCheckedAt`. On a failed fetch it still stamps `lastCheckedAt` (so we don't
|
|
93
|
+
* hammer a flaky/offline registry every tick) while KEEPING the previously known
|
|
94
|
+
* `latest`. Never throws.
|
|
95
|
+
*/
|
|
96
|
+
export declare function runUpdateCheck({ now }?: {
|
|
97
|
+
now?: number;
|
|
98
|
+
}): Promise<void>;
|
|
99
|
+
/**
|
|
100
|
+
* The tick's entry point: return the cheap cache-derived {@link UpdateStatus} NOW,
|
|
101
|
+
* and (when `enabled`) kick off the throttled network refresh in the background so
|
|
102
|
+
* the NEXT tick sees a fresh answer. Disabled (`updates.check: false`) → always
|
|
103
|
+
* "no update", no network. The background refresh is deliberately un-awaited: the
|
|
104
|
+
* tick must never block on the registry.
|
|
105
|
+
*/
|
|
106
|
+
export declare function maybeCheckForUpdate({ enabled, now, currentVersion, }: {
|
|
107
|
+
enabled: boolean;
|
|
108
|
+
now?: number;
|
|
109
|
+
currentVersion?: string;
|
|
110
|
+
}): UpdateStatus;
|
|
111
|
+
/**
|
|
112
|
+
* io — record that we've toasted about `version` and report whether this is the
|
|
113
|
+
* FIRST time (so the caller should actually toast). Persisted in the cache file's
|
|
114
|
+
* `notified` list so the one-time guarantee survives updater restarts — the old
|
|
115
|
+
* in-memory notify debounce would re-fire on every respawn. Best-effort: if the
|
|
116
|
+
* cache can't be written we still return the in-memory verdict.
|
|
117
|
+
*/
|
|
118
|
+
export declare function markUpdateNotified(version: string): boolean;
|