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,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Character-range authorship tracking for plan files.
|
|
3
|
+
*
|
|
4
|
+
* Follows the @proof/core marks model: each mark tracks authorship at the
|
|
5
|
+
* character range level with quote-based re-anchoring when positions shift.
|
|
6
|
+
*
|
|
7
|
+
* @module authorship
|
|
8
|
+
*/
|
|
9
|
+
export type MarkKind = "authored" | "approved" | "flagged" | "comment" | "insert" | "delete" | "replace";
|
|
10
|
+
export interface MarkRange {
|
|
11
|
+
from: number;
|
|
12
|
+
to: number;
|
|
13
|
+
}
|
|
14
|
+
export interface Mark {
|
|
15
|
+
id: string;
|
|
16
|
+
kind: MarkKind;
|
|
17
|
+
by: string;
|
|
18
|
+
at: string;
|
|
19
|
+
range: MarkRange;
|
|
20
|
+
quote: string;
|
|
21
|
+
orphaned?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface MarksDocument {
|
|
24
|
+
version: number;
|
|
25
|
+
marks: Record<string, Mark>;
|
|
26
|
+
}
|
|
27
|
+
export interface AuthorshipStats {
|
|
28
|
+
aiPercent: number;
|
|
29
|
+
humanPercent: number;
|
|
30
|
+
totalChars: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function generateMarkId(): string;
|
|
33
|
+
export declare function normalizeQuote(text: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Extract marks from a markdown file.
|
|
36
|
+
* Returns clean content (without the comment block) and parsed marks.
|
|
37
|
+
*/
|
|
38
|
+
export declare function extractMarks(markdown: string): {
|
|
39
|
+
content: string;
|
|
40
|
+
marks: MarksDocument | null;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Embed marks into a markdown file.
|
|
44
|
+
* Strips any existing marks comment and appends a new one at the end.
|
|
45
|
+
*/
|
|
46
|
+
export declare function embedMarks(markdown: string, doc: MarksDocument): string;
|
|
47
|
+
export declare function createAuthored(by: string, range: MarkRange, quote: string): Mark;
|
|
48
|
+
/**
|
|
49
|
+
* Calculate AI vs human authorship percentages from marks.
|
|
50
|
+
* Only counts 'authored' marks. Uses character range lengths.
|
|
51
|
+
*/
|
|
52
|
+
export declare function calculateStats(marks: Record<string, Mark>): AuthorshipStats;
|
|
53
|
+
/**
|
|
54
|
+
* Re-anchor marks whose ranges may have shifted due to content edits.
|
|
55
|
+
* Uses quote text to find new positions. Marks orphaned if quote not found.
|
|
56
|
+
*/
|
|
57
|
+
export declare function reanchorMarks(content: string, marks: Record<string, Mark>): Record<string, Mark>;
|
|
58
|
+
/**
|
|
59
|
+
* Tag the full content as authored by the given actor.
|
|
60
|
+
* Preserves existing marks and only adds a mark for uncovered ranges.
|
|
61
|
+
*/
|
|
62
|
+
export declare function tagContent(markdown: string, by: string): string;
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Character-range authorship tracking for plan files.
|
|
3
|
+
*
|
|
4
|
+
* Follows the @proof/core marks model: each mark tracks authorship at the
|
|
5
|
+
* character range level with quote-based re-anchoring when positions shift.
|
|
6
|
+
*
|
|
7
|
+
* @module authorship
|
|
8
|
+
*/
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Comment block format
|
|
11
|
+
// ============================================================================
|
|
12
|
+
const MARKS_START = "<!-- TMUX-IDE:MARKS";
|
|
13
|
+
const MARKS_END = "-->";
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// ID generation
|
|
16
|
+
// ============================================================================
|
|
17
|
+
let markIdCounter = 0;
|
|
18
|
+
export function generateMarkId() {
|
|
19
|
+
return `m${Date.now()}_${++markIdCounter}`;
|
|
20
|
+
}
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// Quote normalization (matches @proof/core)
|
|
23
|
+
// ============================================================================
|
|
24
|
+
export function normalizeQuote(text) {
|
|
25
|
+
return text.replace(/\s+/g, " ").trim();
|
|
26
|
+
}
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// Extract / Embed
|
|
29
|
+
// ============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* Extract marks from a markdown file.
|
|
32
|
+
* Returns clean content (without the comment block) and parsed marks.
|
|
33
|
+
*/
|
|
34
|
+
export function extractMarks(markdown) {
|
|
35
|
+
const startIdx = markdown.lastIndexOf(MARKS_START);
|
|
36
|
+
if (startIdx === -1) {
|
|
37
|
+
return { content: markdown, marks: null };
|
|
38
|
+
}
|
|
39
|
+
const endIdx = markdown.indexOf(MARKS_END, startIdx + MARKS_START.length);
|
|
40
|
+
if (endIdx === -1) {
|
|
41
|
+
return { content: markdown, marks: null };
|
|
42
|
+
}
|
|
43
|
+
const jsonStr = markdown.slice(startIdx + MARKS_START.length, endIdx).trim();
|
|
44
|
+
const content = (markdown.slice(0, startIdx) + markdown.slice(endIdx + MARKS_END.length)).trimEnd();
|
|
45
|
+
try {
|
|
46
|
+
const data = JSON.parse(jsonStr);
|
|
47
|
+
return { content, marks: data };
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return { content, marks: null };
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Embed marks into a markdown file.
|
|
55
|
+
* Strips any existing marks comment and appends a new one at the end.
|
|
56
|
+
*/
|
|
57
|
+
export function embedMarks(markdown, doc) {
|
|
58
|
+
const { content } = extractMarks(markdown);
|
|
59
|
+
const json = JSON.stringify(doc, null, 2);
|
|
60
|
+
return `${content}\n\n${MARKS_START}\n${json}\n${MARKS_END}\n`;
|
|
61
|
+
}
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// Mark creation helpers
|
|
64
|
+
// ============================================================================
|
|
65
|
+
export function createAuthored(by, range, quote) {
|
|
66
|
+
return {
|
|
67
|
+
id: generateMarkId(),
|
|
68
|
+
kind: "authored",
|
|
69
|
+
by,
|
|
70
|
+
at: new Date().toISOString(),
|
|
71
|
+
range,
|
|
72
|
+
quote: normalizeQuote(quote),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// Stats calculation
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Calculate AI vs human authorship percentages from marks.
|
|
80
|
+
* Only counts 'authored' marks. Uses character range lengths.
|
|
81
|
+
*/
|
|
82
|
+
export function calculateStats(marks) {
|
|
83
|
+
let aiChars = 0;
|
|
84
|
+
let humanChars = 0;
|
|
85
|
+
for (const mark of Object.values(marks)) {
|
|
86
|
+
if (mark.kind !== "authored")
|
|
87
|
+
continue;
|
|
88
|
+
if (mark.orphaned)
|
|
89
|
+
continue;
|
|
90
|
+
const chars = mark.range.to - mark.range.from;
|
|
91
|
+
if (mark.by.startsWith("ai:") || mark.by === "ai") {
|
|
92
|
+
aiChars += chars;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
humanChars += chars;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const totalChars = aiChars + humanChars;
|
|
99
|
+
if (totalChars === 0) {
|
|
100
|
+
return { aiPercent: 0, humanPercent: 0, totalChars: 0 };
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
aiPercent: Math.round((aiChars / totalChars) * 100),
|
|
104
|
+
humanPercent: Math.round((humanChars / totalChars) * 100),
|
|
105
|
+
totalChars,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// ============================================================================
|
|
109
|
+
// Re-anchoring: recover positions when content shifts
|
|
110
|
+
// ============================================================================
|
|
111
|
+
/**
|
|
112
|
+
* Find the position of a quote in content text.
|
|
113
|
+
* Returns { from, to } or null if not found.
|
|
114
|
+
*/
|
|
115
|
+
function findQuotePosition(content, quote) {
|
|
116
|
+
if (!quote)
|
|
117
|
+
return null;
|
|
118
|
+
const normalized = normalizeQuote(quote);
|
|
119
|
+
const normalizedContent = normalizeQuote(content);
|
|
120
|
+
const idx = normalizedContent.indexOf(normalized);
|
|
121
|
+
if (idx === -1)
|
|
122
|
+
return null;
|
|
123
|
+
// Map back to original content positions (approximate — whitespace may differ)
|
|
124
|
+
// Walk through original content counting normalized chars
|
|
125
|
+
let origFrom = -1;
|
|
126
|
+
let normalizedPos = 0;
|
|
127
|
+
for (let i = 0; i < content.length; i++) {
|
|
128
|
+
if (/\s/.test(content[i]) && (i === 0 || /\s/.test(content[i - 1])))
|
|
129
|
+
continue;
|
|
130
|
+
if (normalizedPos === idx && origFrom === -1)
|
|
131
|
+
origFrom = i;
|
|
132
|
+
if (normalizedPos === idx + normalized.length) {
|
|
133
|
+
return { from: origFrom, to: i };
|
|
134
|
+
}
|
|
135
|
+
normalizedPos++;
|
|
136
|
+
}
|
|
137
|
+
// Fallback: simple indexOf on original
|
|
138
|
+
const simpleIdx = content.indexOf(quote);
|
|
139
|
+
if (simpleIdx !== -1) {
|
|
140
|
+
return { from: simpleIdx, to: simpleIdx + quote.length };
|
|
141
|
+
}
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Re-anchor marks whose ranges may have shifted due to content edits.
|
|
146
|
+
* Uses quote text to find new positions. Marks orphaned if quote not found.
|
|
147
|
+
*/
|
|
148
|
+
export function reanchorMarks(content, marks) {
|
|
149
|
+
const result = {};
|
|
150
|
+
for (const [id, mark] of Object.entries(marks)) {
|
|
151
|
+
// Check if current range still matches quote
|
|
152
|
+
const currentText = content.slice(mark.range.from, mark.range.to);
|
|
153
|
+
if (normalizeQuote(currentText) === normalizeQuote(mark.quote)) {
|
|
154
|
+
result[id] = mark;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
// Try to re-anchor using quote
|
|
158
|
+
const newRange = findQuotePosition(content, mark.quote);
|
|
159
|
+
if (newRange) {
|
|
160
|
+
result[id] = { ...mark, range: newRange, orphaned: false };
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
result[id] = { ...mark, orphaned: true };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
// ============================================================================
|
|
169
|
+
// Tagging: tag entire content as authored by a given actor
|
|
170
|
+
// ============================================================================
|
|
171
|
+
/**
|
|
172
|
+
* Tag the full content as authored by the given actor.
|
|
173
|
+
* Preserves existing marks and only adds a mark for uncovered ranges.
|
|
174
|
+
*/
|
|
175
|
+
export function tagContent(markdown, by) {
|
|
176
|
+
const { content, marks: existingDoc } = extractMarks(markdown);
|
|
177
|
+
const existingMarks = existingDoc?.marks ?? {};
|
|
178
|
+
// Re-anchor existing marks against current content
|
|
179
|
+
const anchored = Object.keys(existingMarks).length > 0 ? reanchorMarks(content, existingMarks) : {};
|
|
180
|
+
// Find uncovered character ranges
|
|
181
|
+
const covered = new Set();
|
|
182
|
+
for (const mark of Object.values(anchored)) {
|
|
183
|
+
if (mark.kind !== "authored" || mark.orphaned)
|
|
184
|
+
continue;
|
|
185
|
+
for (let i = mark.range.from; i < mark.range.to && i < content.length; i++) {
|
|
186
|
+
covered.add(i);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Build marks for uncovered ranges (coalesce adjacent)
|
|
190
|
+
const newMarks = { ...anchored };
|
|
191
|
+
let rangeStart = -1;
|
|
192
|
+
for (let i = 0; i <= content.length; i++) {
|
|
193
|
+
const isCovered = covered.has(i);
|
|
194
|
+
const atEnd = i === content.length;
|
|
195
|
+
if (!isCovered && !atEnd && rangeStart === -1) {
|
|
196
|
+
rangeStart = i;
|
|
197
|
+
}
|
|
198
|
+
else if ((isCovered || atEnd) && rangeStart !== -1) {
|
|
199
|
+
const quote = content.slice(rangeStart, i);
|
|
200
|
+
if (quote.trim().length > 0) {
|
|
201
|
+
const mark = createAuthored(by, { from: rangeStart, to: i }, quote);
|
|
202
|
+
newMarks[mark.id] = mark;
|
|
203
|
+
}
|
|
204
|
+
rangeStart = -1;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const doc = { version: 2, marks: newMarks };
|
|
208
|
+
return embedMarks(content, doc);
|
|
209
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface CanonicalDaemonInfo {
|
|
2
|
+
readonly pid: number;
|
|
3
|
+
readonly port: number;
|
|
4
|
+
readonly version: string;
|
|
5
|
+
readonly startedAt: string;
|
|
6
|
+
readonly bindHostname: string;
|
|
7
|
+
readonly authToken: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function getCanonicalDaemonInfoPath(): string;
|
|
10
|
+
export declare function writeCanonicalDaemonInfo(info: CanonicalDaemonInfo): void;
|
|
11
|
+
export declare function readCanonicalDaemonInfo(): CanonicalDaemonInfo | null;
|
|
12
|
+
export declare function clearCanonicalDaemonInfo(): void;
|
|
13
|
+
/**
|
|
14
|
+
* Version-skew guard. A client (desktop app, editor extension, second
|
|
15
|
+
* CLI) attaching to the canonical daemon compiles in the daemon
|
|
16
|
+
* version it expects. If the live daemon advertises a different
|
|
17
|
+
* `version`, the wire contract may have drifted — warn loudly rather
|
|
18
|
+
* than failing silently on a mismatched action/WS schema.
|
|
19
|
+
*/
|
|
20
|
+
export declare function warnOnDaemonVersionSkew(info: CanonicalDaemonInfo, expectedVersion: string): void;
|
|
21
|
+
export declare function isCanonicalDaemonAlive(info: CanonicalDaemonInfo): Promise<boolean>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
const DAEMON_INFO_DIR_ENV = "TMUX_IDE_DAEMON_INFO_DIR";
|
|
5
|
+
const REGISTRY_DIR_ENV = "TMUX_IDE_REGISTRY_DIR";
|
|
6
|
+
const DAEMON_INFO_FILE = "daemon.json";
|
|
7
|
+
export function getCanonicalDaemonInfoPath() {
|
|
8
|
+
const dir = process.env[DAEMON_INFO_DIR_ENV] ??
|
|
9
|
+
process.env[REGISTRY_DIR_ENV] ??
|
|
10
|
+
join(homedir(), ".tmux-ide");
|
|
11
|
+
return join(dir, DAEMON_INFO_FILE);
|
|
12
|
+
}
|
|
13
|
+
function parseCanonicalDaemonInfo(raw) {
|
|
14
|
+
if (!raw || typeof raw !== "object")
|
|
15
|
+
return null;
|
|
16
|
+
const info = raw;
|
|
17
|
+
const pid = info.pid;
|
|
18
|
+
const port = info.port;
|
|
19
|
+
if (typeof pid !== "number" || typeof port !== "number")
|
|
20
|
+
return null;
|
|
21
|
+
if (!Number.isInteger(pid) || !Number.isInteger(port))
|
|
22
|
+
return null;
|
|
23
|
+
if (typeof info.version !== "string" || typeof info.startedAt !== "string")
|
|
24
|
+
return null;
|
|
25
|
+
if (typeof info.bindHostname !== "string")
|
|
26
|
+
return null;
|
|
27
|
+
if (info.authToken !== null && typeof info.authToken !== "string")
|
|
28
|
+
return null;
|
|
29
|
+
return {
|
|
30
|
+
pid,
|
|
31
|
+
port,
|
|
32
|
+
version: info.version,
|
|
33
|
+
startedAt: info.startedAt,
|
|
34
|
+
bindHostname: info.bindHostname,
|
|
35
|
+
authToken: info.authToken,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function writeCanonicalDaemonInfo(info) {
|
|
39
|
+
const path = getCanonicalDaemonInfoPath();
|
|
40
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
41
|
+
const tmpPath = `${path}.${process.pid}.${Date.now()}.tmp`;
|
|
42
|
+
const persisted = {
|
|
43
|
+
pid: info.pid,
|
|
44
|
+
port: info.port,
|
|
45
|
+
version: info.version,
|
|
46
|
+
startedAt: info.startedAt,
|
|
47
|
+
bindHostname: info.bindHostname,
|
|
48
|
+
authToken: info.authToken,
|
|
49
|
+
};
|
|
50
|
+
writeFileSync(tmpPath, JSON.stringify(persisted, null, 2) + "\n", "utf-8");
|
|
51
|
+
renameSync(tmpPath, path);
|
|
52
|
+
}
|
|
53
|
+
export function readCanonicalDaemonInfo() {
|
|
54
|
+
const path = getCanonicalDaemonInfoPath();
|
|
55
|
+
if (!existsSync(path))
|
|
56
|
+
return null;
|
|
57
|
+
try {
|
|
58
|
+
return parseCanonicalDaemonInfo(JSON.parse(readFileSync(path, "utf-8")));
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export function clearCanonicalDaemonInfo() {
|
|
65
|
+
rmSync(getCanonicalDaemonInfoPath(), { force: true });
|
|
66
|
+
}
|
|
67
|
+
function isPidAlive(pid) {
|
|
68
|
+
try {
|
|
69
|
+
process.kill(pid, 0);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function probeHostname(bindHostname) {
|
|
77
|
+
return bindHostname === "0.0.0.0" ? "127.0.0.1" : bindHostname;
|
|
78
|
+
}
|
|
79
|
+
function timeoutSignal(ms) {
|
|
80
|
+
const controller = new AbortController();
|
|
81
|
+
setTimeout(() => controller.abort(), ms).unref?.();
|
|
82
|
+
return controller.signal;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Version-skew guard. A client (desktop app, editor extension, second
|
|
86
|
+
* CLI) attaching to the canonical daemon compiles in the daemon
|
|
87
|
+
* version it expects. If the live daemon advertises a different
|
|
88
|
+
* `version`, the wire contract may have drifted — warn loudly rather
|
|
89
|
+
* than failing silently on a mismatched action/WS schema.
|
|
90
|
+
*/
|
|
91
|
+
export function warnOnDaemonVersionSkew(info, expectedVersion) {
|
|
92
|
+
if (info.version === expectedVersion)
|
|
93
|
+
return;
|
|
94
|
+
console.warn(`[tmux-ide] canonical daemon version skew: daemon.json reports ` +
|
|
95
|
+
`"${info.version}" but this client expects "${expectedVersion}". ` +
|
|
96
|
+
`The action/WS contract may have drifted — restart the canonical ` +
|
|
97
|
+
`daemon (tmux-ide) so it matches this client build.`);
|
|
98
|
+
}
|
|
99
|
+
export async function isCanonicalDaemonAlive(info) {
|
|
100
|
+
if (!isPidAlive(info.pid))
|
|
101
|
+
return false;
|
|
102
|
+
try {
|
|
103
|
+
const res = await fetch(`http://${probeHostname(info.bindHostname)}:${info.port}/health`, {
|
|
104
|
+
signal: timeoutSignal(750),
|
|
105
|
+
});
|
|
106
|
+
return res.ok;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ActionInput, type ActionName, type ActionResult } from "../command-center/actions/contract.ts";
|
|
2
|
+
import type { ActionErrorCode } from "../command-center/actions/errors.ts";
|
|
3
|
+
import { type CanonicalDaemonInfo } from "./canonical-daemon.ts";
|
|
4
|
+
import { type EmbeddedDaemonHandle, type EmbeddedDaemonOptions } from "./daemon-embed.ts";
|
|
5
|
+
interface ActionFailure {
|
|
6
|
+
code: ActionErrorCode;
|
|
7
|
+
message: string;
|
|
8
|
+
details?: unknown;
|
|
9
|
+
}
|
|
10
|
+
interface CliActionBridgeDeps {
|
|
11
|
+
fetch: typeof fetch;
|
|
12
|
+
cwd: () => string;
|
|
13
|
+
readCanonicalDaemonInfo: () => CanonicalDaemonInfo | null;
|
|
14
|
+
clearCanonicalDaemonInfo: () => void;
|
|
15
|
+
isCanonicalDaemonAlive: (info: CanonicalDaemonInfo) => Promise<boolean>;
|
|
16
|
+
startEmbeddedDaemon: (opts: EmbeddedDaemonOptions) => Promise<EmbeddedDaemonHandle>;
|
|
17
|
+
}
|
|
18
|
+
export declare class CliActionInvocationError extends Error {
|
|
19
|
+
readonly code: ActionErrorCode;
|
|
20
|
+
readonly details: unknown;
|
|
21
|
+
constructor(error: ActionFailure);
|
|
22
|
+
}
|
|
23
|
+
export declare function __setCliActionBridgeDepsForTests(overrides: Partial<CliActionBridgeDeps>): () => void;
|
|
24
|
+
export declare function tryDispatchAction<Name extends ActionName>(name: Name, input: ActionInput<Name>, options?: {
|
|
25
|
+
cwd?: string;
|
|
26
|
+
}): Promise<ActionResult<Name> | null>;
|
|
27
|
+
export {};
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { ActionContractsZ, } from "../command-center/actions/contract.js";
|
|
4
|
+
import { clearCanonicalDaemonInfo, isCanonicalDaemonAlive, readCanonicalDaemonInfo, warnOnDaemonVersionSkew, } from "./canonical-daemon.js";
|
|
5
|
+
import { startEmbeddedDaemon, } from "./daemon-embed.js";
|
|
6
|
+
const FailureEnvelopeZ = z.object({
|
|
7
|
+
ok: z.literal(false),
|
|
8
|
+
error: z.object({
|
|
9
|
+
code: z.string(),
|
|
10
|
+
message: z.string(),
|
|
11
|
+
details: z.unknown().optional(),
|
|
12
|
+
}),
|
|
13
|
+
});
|
|
14
|
+
let deps = {
|
|
15
|
+
fetch,
|
|
16
|
+
cwd: () => process.cwd(),
|
|
17
|
+
readCanonicalDaemonInfo,
|
|
18
|
+
clearCanonicalDaemonInfo,
|
|
19
|
+
isCanonicalDaemonAlive,
|
|
20
|
+
startEmbeddedDaemon,
|
|
21
|
+
};
|
|
22
|
+
export class CliActionInvocationError extends Error {
|
|
23
|
+
code;
|
|
24
|
+
details;
|
|
25
|
+
constructor(error) {
|
|
26
|
+
super(error.message);
|
|
27
|
+
this.name = "CliActionInvocationError";
|
|
28
|
+
this.code = error.code;
|
|
29
|
+
this.details = error.details ?? null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function __setCliActionBridgeDepsForTests(overrides) {
|
|
33
|
+
const previous = deps;
|
|
34
|
+
deps = { ...deps, ...overrides };
|
|
35
|
+
return () => {
|
|
36
|
+
deps = previous;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function timeoutSignal(ms) {
|
|
40
|
+
const controller = new AbortController();
|
|
41
|
+
setTimeout(() => controller.abort(), ms).unref?.();
|
|
42
|
+
return controller.signal;
|
|
43
|
+
}
|
|
44
|
+
async function isDaemonAlive(port) {
|
|
45
|
+
try {
|
|
46
|
+
const res = await deps.fetch(`http://127.0.0.1:${port}/health`, {
|
|
47
|
+
signal: timeoutSignal(500),
|
|
48
|
+
});
|
|
49
|
+
return res.ok;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function hostnameForClient(bindHostname) {
|
|
56
|
+
return bindHostname === "0.0.0.0" ? "127.0.0.1" : bindHostname;
|
|
57
|
+
}
|
|
58
|
+
function daemonBaseUrl(info) {
|
|
59
|
+
return `http://${hostnameForClient(info.bindHostname)}:${info.port}`;
|
|
60
|
+
}
|
|
61
|
+
const requireFromHere = createRequire(import.meta.url);
|
|
62
|
+
/** The daemon version this CLI client was built against — compared
|
|
63
|
+
* against the live daemon's advertised version on attach. */
|
|
64
|
+
function expectedDaemonVersion() {
|
|
65
|
+
try {
|
|
66
|
+
const pkg = requireFromHere("../../package.json");
|
|
67
|
+
return pkg.version ?? "0.0.0";
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return "0.0.0";
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function resolveCanonicalDaemon() {
|
|
74
|
+
const existing = deps.readCanonicalDaemonInfo();
|
|
75
|
+
if (existing) {
|
|
76
|
+
if (await deps.isCanonicalDaemonAlive(existing)) {
|
|
77
|
+
warnOnDaemonVersionSkew(existing, expectedDaemonVersion());
|
|
78
|
+
return { baseUrl: daemonBaseUrl(existing), transientHandle: null, restoreCwd: null };
|
|
79
|
+
}
|
|
80
|
+
deps.clearCanonicalDaemonInfo();
|
|
81
|
+
}
|
|
82
|
+
// Test / short-lived-CLI escape: skip the transient daemon spawn when
|
|
83
|
+
// TMUX_IDE_CLI_NO_AUTOSTART is set. Callers (e.g. config-cli.test.ts)
|
|
84
|
+
// exercise the local-mutation fallback path; without this guard a
|
|
85
|
+
// single `tmux-ide config enable-team` in a fixture dir would start a
|
|
86
|
+
// full embedded daemon and never tear it down in time.
|
|
87
|
+
if (process.env.TMUX_IDE_CLI_NO_AUTOSTART) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const dir = deps.cwd();
|
|
91
|
+
const previousCwd = process.cwd();
|
|
92
|
+
try {
|
|
93
|
+
process.chdir(dir);
|
|
94
|
+
const handle = await deps.startEmbeddedDaemon({
|
|
95
|
+
sessionName: undefined,
|
|
96
|
+
bindHostname: "127.0.0.1",
|
|
97
|
+
silent: true,
|
|
98
|
+
});
|
|
99
|
+
if (!(await isDaemonAlive(handle.port))) {
|
|
100
|
+
await handle.stop();
|
|
101
|
+
process.chdir(previousCwd);
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return { baseUrl: handle.apiBaseUrl, transientHandle: handle, restoreCwd: previousCwd };
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
process.chdir(previousCwd);
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async function stopTransientDaemon(daemon) {
|
|
112
|
+
if (daemon.transientHandle)
|
|
113
|
+
await daemon.transientHandle.stop().catch(() => undefined);
|
|
114
|
+
if (daemon.restoreCwd)
|
|
115
|
+
process.chdir(daemon.restoreCwd);
|
|
116
|
+
}
|
|
117
|
+
export async function tryDispatchAction(name, input, options = {}) {
|
|
118
|
+
const dir = options.cwd ?? deps.cwd();
|
|
119
|
+
const previousDeps = deps;
|
|
120
|
+
deps = { ...deps, cwd: () => dir };
|
|
121
|
+
const daemon = await resolveCanonicalDaemon();
|
|
122
|
+
deps = previousDeps;
|
|
123
|
+
if (!daemon)
|
|
124
|
+
return null;
|
|
125
|
+
const contract = ActionContractsZ[name];
|
|
126
|
+
const parsedInput = contract.input.parse(input);
|
|
127
|
+
let response;
|
|
128
|
+
try {
|
|
129
|
+
response = await deps.fetch(`${daemon.baseUrl}/api/v2/action/${encodeURIComponent(name)}`, {
|
|
130
|
+
method: "POST",
|
|
131
|
+
headers: { "Content-Type": "application/json" },
|
|
132
|
+
body: JSON.stringify(parsedInput),
|
|
133
|
+
signal: timeoutSignal(2000),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
await stopTransientDaemon(daemon);
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
let body;
|
|
141
|
+
try {
|
|
142
|
+
body = await response.json();
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
await stopTransientDaemon(daemon);
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
await stopTransientDaemon(daemon);
|
|
149
|
+
const failure = FailureEnvelopeZ.safeParse(body);
|
|
150
|
+
if (failure.success) {
|
|
151
|
+
throw new CliActionInvocationError({
|
|
152
|
+
code: failure.data.error.code,
|
|
153
|
+
message: failure.data.error.message,
|
|
154
|
+
details: failure.data.error.details,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const success = z.object({ ok: z.literal(true), result: contract.result }).safeParse(body);
|
|
158
|
+
if (!success.success)
|
|
159
|
+
return null;
|
|
160
|
+
return success.data.result;
|
|
161
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Programmatic tmux-ide daemon entrypoint.
|
|
3
|
+
*
|
|
4
|
+
* This is the shared runtime used by the standalone daemon process and by
|
|
5
|
+
* embedders such as Electron's main process.
|
|
6
|
+
*/
|
|
7
|
+
import { type ProjectActivationOptions } from "./active-projects.ts";
|
|
8
|
+
export interface EmbeddedDaemonOptions {
|
|
9
|
+
sessionName?: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
bindHostname?: string;
|
|
12
|
+
authToken?: string | null;
|
|
13
|
+
localBypassToken?: string | null;
|
|
14
|
+
takeoverIfRunning?: boolean;
|
|
15
|
+
silent?: boolean;
|
|
16
|
+
/** @deprecated Use bindHostname. */
|
|
17
|
+
hostname?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface EmbeddedDaemonHandle {
|
|
20
|
+
readonly port: number;
|
|
21
|
+
readonly apiBaseUrl: string;
|
|
22
|
+
readonly wsUrl: string;
|
|
23
|
+
readonly localBypassToken: string | null;
|
|
24
|
+
activateProject(projectName: string, options?: ProjectActivationOptions): Promise<{
|
|
25
|
+
stop: () => Promise<void>;
|
|
26
|
+
}>;
|
|
27
|
+
stop(opts?: {
|
|
28
|
+
gracefulMs?: number;
|
|
29
|
+
}): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export declare function startEmbeddedDaemon(opts: EmbeddedDaemonOptions): Promise<EmbeddedDaemonHandle>;
|