commandmate 0.28.0 → 0.29.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/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +411 -404
- package/.next/app-path-routes-manifest.json +24 -23
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +12 -12
- package/.next/react-loadable-manifest.json +0 -6
- package/.next/required-server-files.json +1 -1
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/app/update-check/route.js +1 -1
- package/.next/server/app/api/app/update-check/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/conversation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/start/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/assistant/tools/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/login/route.js +1 -1
- package/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/logout/route.js +1 -1
- package/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/auth/status/route.js +1 -1
- package/.next/server/app/api/auth/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/capabilities/route.js +1 -1
- package/.next/server/app/api/capabilities/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/daily-summary/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/health/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/external-apps/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/browse/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/fs/recent-paths/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/agent-event/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/claude-done/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/hooks/permission-request/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/metrics/vibe/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/ollama/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/escalation/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/subscriptions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/push/vapid/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/remote/pair/route.js +2 -0
- package/.next/server/app/api/remote/pair/route.js.nft.json +1 -0
- package/.next/server/app/api/remote/pair/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/repositories/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/[jobId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/clone/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/excluded/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/restore/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/scan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/sync/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/repositories/validate-path/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sidebar/group-order/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/installations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/operations/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/reindex/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/templates/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/verification/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/auto-yes/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/capture/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/clear-composer/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cli-tool/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/cmate/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/current-output/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/env/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/[logId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/execution-logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/files/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/create/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branch/delete/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/branches/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/checkout/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/commit/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/fetch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/log/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/pull/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/reset/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/revert/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/show/[commitHash]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/staged/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/[index]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/apply/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/pop/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/push/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/stash/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/status/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/unstage/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/git/working-diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/instances/opencode/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/interrupt/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/kill-session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/[filename]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/logs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/marp-render/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/[memoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/memos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/messages/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/diff/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/session/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/opencode/share/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/prompt-response/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/resolve-target/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/respond/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/[scheduleId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/schedules/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/search/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/send/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/install/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/[skillId]/update-plan/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/skills/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/slash-commands/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/special-keys/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/start-polling/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tasks/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/terminal/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/timers/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/[todoId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/todos/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/tree/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/upload/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/[runId]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/verify/runs/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/[id]/viewed/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/worktrees/route.js +1 -1
- package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -1
- package/.next/server/app/chat/page_client-reference-manifest.js +1 -1
- package/.next/server/app/login/page.js +2 -2
- package/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/more/page_client-reference-manifest.js +1 -1
- package/.next/server/app/offline/page_client-reference-manifest.js +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app/proxy/[...path]/route_client-reference-manifest.js +1 -1
- package/.next/server/app/repositories/page_client-reference-manifest.js +1 -1
- package/.next/server/app/review/page_client-reference-manifest.js +1 -1
- package/.next/server/app/sessions/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/[skillId]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/installed/page_client-reference-manifest.js +1 -1
- package/.next/server/app/skills/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/files/[...path]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/page.js +1 -1
- package/.next/server/app/worktrees/[id]/page_client-reference-manifest.js +1 -1
- package/.next/server/app/worktrees/[id]/terminal/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +24 -23
- package/.next/server/chunks/1162.js +1 -1
- package/.next/server/chunks/2759.js +1 -1
- package/.next/server/chunks/3440.js +1 -1
- package/.next/server/chunks/3543.js +1 -1
- package/.next/server/chunks/3945.js +1 -1
- package/.next/server/chunks/4393.js +1 -1
- package/.next/server/chunks/6130.js +1 -1
- package/.next/server/chunks/880.js +6 -6
- package/.next/server/chunks/9123.js +2 -2
- package/.next/server/chunks/9938.js +1 -1
- package/.next/server/functions-config-manifest.json +3 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +5 -5
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/server/src/middleware.js +1 -1
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/chunks/5229-580b581fce5aeb52.js +1 -0
- package/.next/static/chunks/6381-c8d93ec301dbc380.js +1 -0
- package/.next/static/chunks/app/api/app/update/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/app/update-check/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/assistant/conversation/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/assistant/current-output/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/assistant/messages/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/assistant/session/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/assistant/start/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/assistant/terminal/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/assistant/tools/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/auth/login/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/auth/logout/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/auth/status/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/capabilities/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/daily-summary/status/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/external-apps/[id]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/external-apps/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/fs/browse/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/fs/recent-paths/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/hooks/agent-event/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/hooks/claude-done/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/hooks/permission-request/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/metrics/vibe/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/ollama/models/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/push/escalation/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/push/subscriptions/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/push/vapid/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/remote/pair/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/clone/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/excluded/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/restore/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/scan/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/sync/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/repositories/validate-path/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/sidebar/group-order/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/skills/[id]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/skills/installations/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/skills/operations/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/skills/reindex/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/skills/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/slash-commands/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/tasks/[taskId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/templates/[id]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/templates/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/todos/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/verification/runs/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/api/worktrees/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/login/page-03659dded846ef1d.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/proxy/[...path]/route-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/layout-e3626364434d521b.js +1 -0
- package/.next/static/chunks/app/worktrees/[id]/{page-27b7cb2e77099eec.js → page-c07b23b6ca58091c.js} +1 -1
- package/.next/static/chunks/webpack-7e79064bfce988d7.js +1 -0
- package/.next/static/css/b6990f889f4f9515.css +1 -0
- package/.next/static/uulKcSOgyxChTo4SipUSF/_buildManifest.js +1 -0
- package/.next/trace +13 -13
- package/.next/types/app/api/remote/pair/route.ts +347 -0
- package/.next/types/routes.d.ts +2 -1
- package/.next/types/validator.ts +9 -0
- package/README.md +15 -3
- package/dist/cli/commands/remote.d.ts +248 -0
- package/dist/cli/commands/remote.d.ts.map +1 -0
- package/dist/cli/commands/remote.js +849 -0
- package/dist/cli/config/security-messages.d.ts +25 -0
- package/dist/cli/config/security-messages.d.ts.map +1 -1
- package/dist/cli/config/security-messages.js +43 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +6 -0
- package/dist/cli/types/index.d.ts +20 -0
- package/dist/cli/types/index.d.ts.map +1 -1
- package/dist/cli/utils/qr-terminal.d.ts +54 -0
- package/dist/cli/utils/qr-terminal.d.ts.map +1 -0
- package/dist/cli/utils/qr-terminal.js +181 -0
- package/dist/cli/utils/remote-state.d.ts +123 -0
- package/dist/cli/utils/remote-state.d.ts.map +1 -0
- package/dist/cli/utils/remote-state.js +193 -0
- package/dist/config/auth-config.d.ts +1 -1
- package/dist/config/auth-config.d.ts.map +1 -1
- package/dist/config/auth-config.js +5 -0
- package/dist/lib/remote/cloudflare.d.ts +285 -0
- package/dist/lib/remote/cloudflare.d.ts.map +1 -0
- package/dist/lib/remote/cloudflare.js +619 -0
- package/dist/lib/remote/index.d.ts +17 -0
- package/dist/lib/remote/index.d.ts.map +1 -0
- package/dist/lib/remote/index.js +64 -0
- package/dist/lib/remote/provider-registry.d.ts +29 -0
- package/dist/lib/remote/provider-registry.d.ts.map +1 -0
- package/dist/lib/remote/provider-registry.js +73 -0
- package/dist/lib/remote/tailscale.d.ts +268 -0
- package/dist/lib/remote/tailscale.d.ts.map +1 -0
- package/dist/lib/remote/tailscale.js +546 -0
- package/dist/lib/remote/types.d.ts +127 -0
- package/dist/lib/remote/types.d.ts.map +1 -0
- package/dist/lib/remote/types.js +53 -0
- package/dist/lib/security/pairing-code.d.ts +182 -0
- package/dist/lib/security/pairing-code.d.ts.map +1 -0
- package/dist/lib/security/pairing-code.js +265 -0
- package/dist/server/src/config/auth-config.js +5 -0
- package/package.json +2 -1
- package/.next/static/0GHE2JGlFzqvSBZAcBFSt/_buildManifest.js +0 -1
- package/.next/static/chunks/5229-1f5f19740a8d6c11.js +0 -1
- package/.next/static/chunks/6271.295ced91b6335f18.js +0 -1
- package/.next/static/chunks/6381-d921ab728eda1191.js +0 -1
- package/.next/static/chunks/app/api/app/update/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/app/update-check/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/assistant/conversation/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/assistant/current-output/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/assistant/messages/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/assistant/session/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/assistant/start/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/assistant/terminal/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/assistant/tools/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/auth/login/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/auth/logout/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/auth/status/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/capabilities/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/daily-summary/status/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/health/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/external-apps/[id]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/external-apps/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/fs/browse/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/fs/recent-paths/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/hooks/agent-event/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/hooks/claude-done/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/hooks/permission-request/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/metrics/vibe/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/ollama/models/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/push/escalation/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/push/subscriptions/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/push/vapid/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/[todoId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/[id]/todos/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/[jobId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/clone/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/excluded/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/restore/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/scan/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/sync/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/repositories/validate-path/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/sidebar/group-order/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/skills/[id]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/skills/installations/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/skills/operations/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/skills/reindex/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/skills/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/slash-commands/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/cancel/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/tasks/[taskId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/templates/[id]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/templates/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/todos/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/[runId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/verification/runs/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/auto-yes/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/capture/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/clear-composer/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cli-tool/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/cmate/schedules/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/current-output/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/env/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/[logId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/execution-logs/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/files/[...path]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/create/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branch/delete/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/branches/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/checkout/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/commit/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/diff/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/fetch/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/log/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/pull/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/push/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/reset/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/revert/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/show/[commitHash]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stage/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/staged/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/[index]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/apply/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/pop/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/push/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/stash/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/status/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/unstage/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/git/working-diff/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/instances/opencode/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/interrupt/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/kill-session/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/[filename]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/logs/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/marp-render/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/[memoId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/memos/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/messages/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/diff/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/session/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/opencode/share/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/prompt-response/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/resolve-target/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/respond/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/[scheduleId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/active/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/schedules/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/search/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/send/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/git-workflow/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/install/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/plan/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/uninstall-plan/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/[skillId]/update-plan/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/skills/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/slash-commands/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/special-keys/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/start-polling/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tasks/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/terminal/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/history/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/timers/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/[todoId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/todos/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/[...path]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/tree/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/upload/[...path]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/[runId]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/verify/runs/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/[id]/viewed/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/api/worktrees/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/login/page-adc51f0f7cbb7ac6.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/proxy/[...path]/route-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/app/worktrees/[id]/layout-9247d6b9d647f750.js +0 -1
- package/.next/static/chunks/webpack-6a9668cf54a26eba.js +0 -1
- package/.next/static/css/98722bc4152cedcc.css +0 -1
- /package/.next/static/{0GHE2JGlFzqvSBZAcBFSt → uulKcSOgyxChTo4SipUSF}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tailscaleProvider = exports.TAILSCALE_VERSION_ARG = exports.TAILSCALE_BIN = exports.snapshotServeConfig = exports.serveHandlerKeys = exports.serveHandlerKey = exports.SERVE_TIMEOUT_MS = exports.SERVE_PATH = exports.SERVE_HTTPS_PORT = exports.readServeReadiness = exports.parseServeHandlerKey = exports.parseServeConfig = exports.normalizeDnsName = exports.TAILSCALE_LOOPBACK_HOST = exports.TAILSCALE_DETECT_TIMEOUT_MS = exports.createTailscaleProvider = exports.buildServeUrl = exports.buildServeOffArgs = exports.buildServeArgs = exports.BACKEND_STATE_RUNNING = exports.STDERR_CAPTURE_LIMIT = exports.resolveCloudflareStateDir = exports.QUICK_TUNNEL_SUFFIX = exports.parseQuickTunnelHostname = exports.parseBannerUrl = exports.openStderrLog = exports.LOOPBACK_HOST = exports.isQuickTunnelHostname = exports.findFreeLoopbackPort = exports.fetchQuickTunnelHostname = exports.DETECT_TIMEOUT_MS = exports.DEFAULT_QUICK_TUNNEL_TIMING = exports.createCloudflareProvider = exports.cloudflareProvider = exports.CLOUDFLARED_VERSION_ARG = exports.CLOUDFLARED_PIDFILE_NAME = exports.CLOUDFLARED_LOG_NAME = exports.CLOUDFLARED_BIN = exports.buildQuickTunnelSpawnOptions = exports.buildQuickTunnelArgs = exports.REMOTE_PROVIDER_ORDER = exports.detectRemoteProviders = exports.createRemoteProviders = exports.planStop = exports.isPreexistingSnapshot = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Public surface of the remote Provider layer (Issue #1937, R1/R2/R3).
|
|
6
|
+
*
|
|
7
|
+
* Note what is not re-exported: there is no selection helper. The orchestrator
|
|
8
|
+
* that owns `src/cli/commands/remote.ts` (R9) applies the selection rule
|
|
9
|
+
* itself — see the header of `./provider-registry`.
|
|
10
|
+
*
|
|
11
|
+
* Both `CLOUDFLARE_NOT_IMPLEMENTED_REASON` (removed in R2) and
|
|
12
|
+
* `TAILSCALE_NOT_IMPLEMENTED_REASON` (removed here in R3) are gone for the same
|
|
13
|
+
* reason: both Providers are implemented, so a constant saying otherwise would
|
|
14
|
+
* be a lie a caller could still read and act on.
|
|
15
|
+
*/
|
|
16
|
+
var types_1 = require("./types");
|
|
17
|
+
Object.defineProperty(exports, "isPreexistingSnapshot", { enumerable: true, get: function () { return types_1.isPreexistingSnapshot; } });
|
|
18
|
+
Object.defineProperty(exports, "planStop", { enumerable: true, get: function () { return types_1.planStop; } });
|
|
19
|
+
var provider_registry_1 = require("./provider-registry");
|
|
20
|
+
Object.defineProperty(exports, "createRemoteProviders", { enumerable: true, get: function () { return provider_registry_1.createRemoteProviders; } });
|
|
21
|
+
Object.defineProperty(exports, "detectRemoteProviders", { enumerable: true, get: function () { return provider_registry_1.detectRemoteProviders; } });
|
|
22
|
+
Object.defineProperty(exports, "REMOTE_PROVIDER_ORDER", { enumerable: true, get: function () { return provider_registry_1.REMOTE_PROVIDER_ORDER; } });
|
|
23
|
+
var cloudflare_1 = require("./cloudflare");
|
|
24
|
+
Object.defineProperty(exports, "buildQuickTunnelArgs", { enumerable: true, get: function () { return cloudflare_1.buildQuickTunnelArgs; } });
|
|
25
|
+
Object.defineProperty(exports, "buildQuickTunnelSpawnOptions", { enumerable: true, get: function () { return cloudflare_1.buildQuickTunnelSpawnOptions; } });
|
|
26
|
+
Object.defineProperty(exports, "CLOUDFLARED_BIN", { enumerable: true, get: function () { return cloudflare_1.CLOUDFLARED_BIN; } });
|
|
27
|
+
Object.defineProperty(exports, "CLOUDFLARED_LOG_NAME", { enumerable: true, get: function () { return cloudflare_1.CLOUDFLARED_LOG_NAME; } });
|
|
28
|
+
Object.defineProperty(exports, "CLOUDFLARED_PIDFILE_NAME", { enumerable: true, get: function () { return cloudflare_1.CLOUDFLARED_PIDFILE_NAME; } });
|
|
29
|
+
Object.defineProperty(exports, "CLOUDFLARED_VERSION_ARG", { enumerable: true, get: function () { return cloudflare_1.CLOUDFLARED_VERSION_ARG; } });
|
|
30
|
+
Object.defineProperty(exports, "cloudflareProvider", { enumerable: true, get: function () { return cloudflare_1.cloudflareProvider; } });
|
|
31
|
+
Object.defineProperty(exports, "createCloudflareProvider", { enumerable: true, get: function () { return cloudflare_1.createCloudflareProvider; } });
|
|
32
|
+
Object.defineProperty(exports, "DEFAULT_QUICK_TUNNEL_TIMING", { enumerable: true, get: function () { return cloudflare_1.DEFAULT_QUICK_TUNNEL_TIMING; } });
|
|
33
|
+
Object.defineProperty(exports, "DETECT_TIMEOUT_MS", { enumerable: true, get: function () { return cloudflare_1.DETECT_TIMEOUT_MS; } });
|
|
34
|
+
Object.defineProperty(exports, "fetchQuickTunnelHostname", { enumerable: true, get: function () { return cloudflare_1.fetchQuickTunnelHostname; } });
|
|
35
|
+
Object.defineProperty(exports, "findFreeLoopbackPort", { enumerable: true, get: function () { return cloudflare_1.findFreeLoopbackPort; } });
|
|
36
|
+
Object.defineProperty(exports, "isQuickTunnelHostname", { enumerable: true, get: function () { return cloudflare_1.isQuickTunnelHostname; } });
|
|
37
|
+
Object.defineProperty(exports, "LOOPBACK_HOST", { enumerable: true, get: function () { return cloudflare_1.LOOPBACK_HOST; } });
|
|
38
|
+
Object.defineProperty(exports, "openStderrLog", { enumerable: true, get: function () { return cloudflare_1.openStderrLog; } });
|
|
39
|
+
Object.defineProperty(exports, "parseBannerUrl", { enumerable: true, get: function () { return cloudflare_1.parseBannerUrl; } });
|
|
40
|
+
Object.defineProperty(exports, "parseQuickTunnelHostname", { enumerable: true, get: function () { return cloudflare_1.parseQuickTunnelHostname; } });
|
|
41
|
+
Object.defineProperty(exports, "QUICK_TUNNEL_SUFFIX", { enumerable: true, get: function () { return cloudflare_1.QUICK_TUNNEL_SUFFIX; } });
|
|
42
|
+
Object.defineProperty(exports, "resolveCloudflareStateDir", { enumerable: true, get: function () { return cloudflare_1.resolveCloudflareStateDir; } });
|
|
43
|
+
Object.defineProperty(exports, "STDERR_CAPTURE_LIMIT", { enumerable: true, get: function () { return cloudflare_1.STDERR_CAPTURE_LIMIT; } });
|
|
44
|
+
var tailscale_1 = require("./tailscale");
|
|
45
|
+
Object.defineProperty(exports, "BACKEND_STATE_RUNNING", { enumerable: true, get: function () { return tailscale_1.BACKEND_STATE_RUNNING; } });
|
|
46
|
+
Object.defineProperty(exports, "buildServeArgs", { enumerable: true, get: function () { return tailscale_1.buildServeArgs; } });
|
|
47
|
+
Object.defineProperty(exports, "buildServeOffArgs", { enumerable: true, get: function () { return tailscale_1.buildServeOffArgs; } });
|
|
48
|
+
Object.defineProperty(exports, "buildServeUrl", { enumerable: true, get: function () { return tailscale_1.buildServeUrl; } });
|
|
49
|
+
Object.defineProperty(exports, "createTailscaleProvider", { enumerable: true, get: function () { return tailscale_1.createTailscaleProvider; } });
|
|
50
|
+
Object.defineProperty(exports, "TAILSCALE_DETECT_TIMEOUT_MS", { enumerable: true, get: function () { return tailscale_1.DETECT_TIMEOUT_MS; } });
|
|
51
|
+
Object.defineProperty(exports, "TAILSCALE_LOOPBACK_HOST", { enumerable: true, get: function () { return tailscale_1.LOOPBACK_HOST; } });
|
|
52
|
+
Object.defineProperty(exports, "normalizeDnsName", { enumerable: true, get: function () { return tailscale_1.normalizeDnsName; } });
|
|
53
|
+
Object.defineProperty(exports, "parseServeConfig", { enumerable: true, get: function () { return tailscale_1.parseServeConfig; } });
|
|
54
|
+
Object.defineProperty(exports, "parseServeHandlerKey", { enumerable: true, get: function () { return tailscale_1.parseServeHandlerKey; } });
|
|
55
|
+
Object.defineProperty(exports, "readServeReadiness", { enumerable: true, get: function () { return tailscale_1.readServeReadiness; } });
|
|
56
|
+
Object.defineProperty(exports, "SERVE_HTTPS_PORT", { enumerable: true, get: function () { return tailscale_1.SERVE_HTTPS_PORT; } });
|
|
57
|
+
Object.defineProperty(exports, "SERVE_PATH", { enumerable: true, get: function () { return tailscale_1.SERVE_PATH; } });
|
|
58
|
+
Object.defineProperty(exports, "SERVE_TIMEOUT_MS", { enumerable: true, get: function () { return tailscale_1.SERVE_TIMEOUT_MS; } });
|
|
59
|
+
Object.defineProperty(exports, "serveHandlerKey", { enumerable: true, get: function () { return tailscale_1.serveHandlerKey; } });
|
|
60
|
+
Object.defineProperty(exports, "serveHandlerKeys", { enumerable: true, get: function () { return tailscale_1.serveHandlerKeys; } });
|
|
61
|
+
Object.defineProperty(exports, "snapshotServeConfig", { enumerable: true, get: function () { return tailscale_1.snapshotServeConfig; } });
|
|
62
|
+
Object.defineProperty(exports, "TAILSCALE_BIN", { enumerable: true, get: function () { return tailscale_1.TAILSCALE_BIN; } });
|
|
63
|
+
Object.defineProperty(exports, "TAILSCALE_VERSION_ARG", { enumerable: true, get: function () { return tailscale_1.TAILSCALE_VERSION_ARG; } });
|
|
64
|
+
Object.defineProperty(exports, "tailscaleProvider", { enumerable: true, get: function () { return tailscale_1.tailscaleProvider; } });
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ProviderDetection, RemoteProvider, RemoteProviderId } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Preference order, most preferred first.
|
|
4
|
+
*
|
|
5
|
+
* Tailscale is first because it exposes the server only to the user's own
|
|
6
|
+
* tailnet; the Cloudflare Quick Tunnel puts it on the public internet. The
|
|
7
|
+
* order is data, not control flow — being second here never causes a fallback.
|
|
8
|
+
*/
|
|
9
|
+
export declare const REMOTE_PROVIDER_ORDER: readonly RemoteProviderId[];
|
|
10
|
+
/** The shipped Providers, in `REMOTE_PROVIDER_ORDER`. */
|
|
11
|
+
export declare function createRemoteProviders(): RemoteProvider[];
|
|
12
|
+
/** One Provider and what probing it just said. */
|
|
13
|
+
export interface ProviderCandidate {
|
|
14
|
+
provider: RemoteProvider;
|
|
15
|
+
detection: ProviderDetection;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Probes every Provider and returns all of them in preference order.
|
|
19
|
+
*
|
|
20
|
+
* Every candidate comes back, including the unusable ones: the caller needs the
|
|
21
|
+
* `reason` of the preferred Provider to explain why it is falling through to a
|
|
22
|
+
* question rather than to a tunnel.
|
|
23
|
+
*
|
|
24
|
+
* A Provider whose `detect()` throws is reported as unavailable rather than
|
|
25
|
+
* taking down the probe — a broken `tailscale` binary must not stop the user
|
|
26
|
+
* from seeing that `cloudflared` exists.
|
|
27
|
+
*/
|
|
28
|
+
export declare function detectRemoteProviders(providers?: readonly RemoteProvider[]): Promise<ProviderCandidate[]>;
|
|
29
|
+
//# sourceMappingURL=provider-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-registry.d.ts","sourceRoot":"","sources":["../../../src/lib/remote/provider-registry.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEnF;;;;;;GAMG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,gBAAgB,EAG5D,CAAC;AAEF,yDAAyD;AACzD,wBAAgB,qBAAqB,IAAI,cAAc,EAAE,CAExD;AAED,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,iBAAiB,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,GAAE,SAAS,cAAc,EAA4B,GAC7D,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAW9B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REMOTE_PROVIDER_ORDER = void 0;
|
|
4
|
+
exports.createRemoteProviders = createRemoteProviders;
|
|
5
|
+
exports.detectRemoteProviders = detectRemoteProviders;
|
|
6
|
+
/**
|
|
7
|
+
* Provider registry for `commandmate remote` (Issue #1937, R1).
|
|
8
|
+
*
|
|
9
|
+
* What this module does: run every Provider's `detect()` and hand back the
|
|
10
|
+
* results **in preference order**.
|
|
11
|
+
*
|
|
12
|
+
* What this module deliberately does NOT do, and why (§6.2):
|
|
13
|
+
*
|
|
14
|
+
* - It does not pick a Provider. "Tailscale first, and never fall back to a
|
|
15
|
+
* public tunnel on its own" is a rule about selection, not a property of
|
|
16
|
+
* either Provider. Putting it here would bury an irreversible decision —
|
|
17
|
+
* exposing the machine through a third party — inside a probe helper. The
|
|
18
|
+
* orchestrator (`src/cli/commands/remote.ts`, R9) reads this ordered list,
|
|
19
|
+
* applies the rule, and asks the user before anything public is created.
|
|
20
|
+
* - It does not prompt. A prompt in here would have to re-derive
|
|
21
|
+
* interactive-vs-not per Provider, and the answer would be invisible to the
|
|
22
|
+
* caller that has to honour `--yes`.
|
|
23
|
+
* - It does not know about `~/.commandmate/remote.json`. Persistence is the
|
|
24
|
+
* orchestrator's; a Provider that can read the state file is one refactor
|
|
25
|
+
* away from "clean up whatever the state file forgot".
|
|
26
|
+
*
|
|
27
|
+
* A test pins the export list of this module so that a future `selectProvider()`
|
|
28
|
+
* cannot be added here without someone having to delete that assertion.
|
|
29
|
+
*/
|
|
30
|
+
const cloudflare_1 = require("./cloudflare");
|
|
31
|
+
const tailscale_1 = require("./tailscale");
|
|
32
|
+
/**
|
|
33
|
+
* Preference order, most preferred first.
|
|
34
|
+
*
|
|
35
|
+
* Tailscale is first because it exposes the server only to the user's own
|
|
36
|
+
* tailnet; the Cloudflare Quick Tunnel puts it on the public internet. The
|
|
37
|
+
* order is data, not control flow — being second here never causes a fallback.
|
|
38
|
+
*/
|
|
39
|
+
exports.REMOTE_PROVIDER_ORDER = [
|
|
40
|
+
'tailscale-serve',
|
|
41
|
+
'cloudflare-quick',
|
|
42
|
+
];
|
|
43
|
+
/** The shipped Providers, in `REMOTE_PROVIDER_ORDER`. */
|
|
44
|
+
function createRemoteProviders() {
|
|
45
|
+
return [tailscale_1.tailscaleProvider, cloudflare_1.cloudflareProvider];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Probes every Provider and returns all of them in preference order.
|
|
49
|
+
*
|
|
50
|
+
* Every candidate comes back, including the unusable ones: the caller needs the
|
|
51
|
+
* `reason` of the preferred Provider to explain why it is falling through to a
|
|
52
|
+
* question rather than to a tunnel.
|
|
53
|
+
*
|
|
54
|
+
* A Provider whose `detect()` throws is reported as unavailable rather than
|
|
55
|
+
* taking down the probe — a broken `tailscale` binary must not stop the user
|
|
56
|
+
* from seeing that `cloudflared` exists.
|
|
57
|
+
*/
|
|
58
|
+
async function detectRemoteProviders(providers = createRemoteProviders()) {
|
|
59
|
+
const ordered = [...providers].sort((a, b) => exports.REMOTE_PROVIDER_ORDER.indexOf(a.id) - exports.REMOTE_PROVIDER_ORDER.indexOf(b.id));
|
|
60
|
+
return Promise.all(ordered.map(async (provider) => ({
|
|
61
|
+
provider,
|
|
62
|
+
detection: await probe(provider),
|
|
63
|
+
})));
|
|
64
|
+
}
|
|
65
|
+
async function probe(provider) {
|
|
66
|
+
try {
|
|
67
|
+
return await provider.detect();
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
71
|
+
return { available: false, ready: false, reason: `detect() failed: ${message}` };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tailscale Serve Provider (Issue #1937, R3).
|
|
3
|
+
*
|
|
4
|
+
* Implements §6.1–§6.3 of `docs/design/remote-qr-pairing-1937.md`. §6.4's
|
|
5
|
+
* Tailscale table was written as a guess on a machine that had no `tailscale`
|
|
6
|
+
* at all (U-2). Everything below marked "measured" was measured on 2026-08-29
|
|
7
|
+
* against Tailscale 1.102.3 (standalone/macsys, `/usr/local/bin/tailscale`) on
|
|
8
|
+
* macOS; the raw session is in `dev-reports/issue/1937/u2-tailscale-serve.md`.
|
|
9
|
+
* Where the two disagree, the measurement wins.
|
|
10
|
+
*
|
|
11
|
+
* ## The one thing this file exists to get right
|
|
12
|
+
*
|
|
13
|
+
* Serve configuration is persistent state owned by tailscaled. The user may
|
|
14
|
+
* already be publishing their own services through it, and **there is no undo
|
|
15
|
+
* and no backup**. So the whole design here is about the blast radius of
|
|
16
|
+
* teardown, and the measurement below is the reason it is not obvious:
|
|
17
|
+
*
|
|
18
|
+
* | invocation | measured effect on a node serving `/` and `/u2-existing-user` |
|
|
19
|
+
* |---|---|
|
|
20
|
+
* | `serve --https=<port> --set-path <path> off` | removes exactly that one handler |
|
|
21
|
+
* | the same command with the path passed positionally instead | **wiped both handlers; config back to `{}`** |
|
|
22
|
+
* | the same command with no path at all | **wiped both handlers; config back to `{}`** |
|
|
23
|
+
*
|
|
24
|
+
* The middle row matters most, because the untargeted form is *what Tailscale
|
|
25
|
+
* itself prints* after a successful `serve`: its success banner recommends
|
|
26
|
+
* re-running `serve` with only `--https=<port>` and the word "off", no path.
|
|
27
|
+
* Following that hint would delete the user's configuration along with ours,
|
|
28
|
+
* silently, with exit status 0. (The banner's exact wording is quoted in the
|
|
29
|
+
* dev report; it is paraphrased here so this file does not trip the guard that
|
|
30
|
+
* forbids the shape — which is itself a small positive control.)
|
|
31
|
+
*
|
|
32
|
+
* Hence {@link buildServeOffArgs} is the only place an `off` argv is built, it
|
|
33
|
+
* always carries `--set-path`, and it derives that path from the handler key it
|
|
34
|
+
* is undoing rather than from anything ambient.
|
|
35
|
+
*
|
|
36
|
+
* ## Why `off` at all, when `serve --help` never mentions it
|
|
37
|
+
*
|
|
38
|
+
* 1.102.3's help lists `status` / `reset` / `drain` / `clear` / `advertise` /
|
|
39
|
+
* `get-config` / `set-config` and no `off`. Two alternatives were measured and
|
|
40
|
+
* rejected before settling on the undocumented-but-live `off`:
|
|
41
|
+
*
|
|
42
|
+
* - `get-config` + `set-config` looked like a "snapshot and restore" route, but
|
|
43
|
+
* measuring their help shows both are **service**-scoped (`--service`, or
|
|
44
|
+
* `--all` meaning "all services"). They do not address node-level Serve
|
|
45
|
+
* handlers at all, so they cannot express "remove this one handler".
|
|
46
|
+
* - `drain` / `clear` are likewise service-scoped, and both are *destructive*
|
|
47
|
+
* at service granularity. They are now forbidden outright by
|
|
48
|
+
* `tests/unit/config/remote-destructive-command-guard.test.ts`.
|
|
49
|
+
*
|
|
50
|
+
* That leaves `off`, which is undocumented in `--help` yet is the exact string
|
|
51
|
+
* the CLI recommends in its own success output, and which measured clean:
|
|
52
|
+
* exit 0, only the named handler removed, and the `TCP` entry for the port
|
|
53
|
+
* cleaned up automatically once the last handler on it is gone.
|
|
54
|
+
*
|
|
55
|
+
* ## What `start()` refuses to do
|
|
56
|
+
*
|
|
57
|
+
* Measured: running `serve` for a path that already has a handler **overwrites
|
|
58
|
+
* it, prints the new mapping, and exits 0**. Nothing warns, and the previous
|
|
59
|
+
* upstream is unrecoverable. `preexisting` cannot help after the fact — §6.3-2
|
|
60
|
+
* protects the user's entries from `stop()`, not from `start()`. So `start()`
|
|
61
|
+
* reads the snapshot first and refuses when its target key is already taken.
|
|
62
|
+
*
|
|
63
|
+
* Deliberately absent: `reset()` / `cleanupAll()` (§6.3-1), and any command
|
|
64
|
+
* that operates on "the current configuration" rather than on a handle.
|
|
65
|
+
*
|
|
66
|
+
* This module imports Node builtins and `./types` only. No `@/` alias, so it
|
|
67
|
+
* resolves under `tsconfig.cli.json` (which sets `paths: {}`).
|
|
68
|
+
*/
|
|
69
|
+
import { type SpawnSyncOptionsWithStringEncoding, type SpawnSyncReturns } from 'child_process';
|
|
70
|
+
import { type PreexistingSnapshot, type RemoteProvider } from './types';
|
|
71
|
+
/** The executable. Looked up on PATH by `spawnSync`, never through a shell. */
|
|
72
|
+
export declare const TAILSCALE_BIN = "tailscale";
|
|
73
|
+
/**
|
|
74
|
+
* Mirrors `PreflightChecker.checkDependency()`: one argument, passed in an
|
|
75
|
+
* array. Measured: `tailscale version` prints `1.102.3` as its first line,
|
|
76
|
+
* while `tailscale --version` prints the same number followed by four lines of
|
|
77
|
+
* commit hashes. Both work; the subcommand is the tidier one to parse.
|
|
78
|
+
*/
|
|
79
|
+
export declare const TAILSCALE_VERSION_ARG = "version";
|
|
80
|
+
/**
|
|
81
|
+
* The only host this Provider ever names.
|
|
82
|
+
*
|
|
83
|
+
* A constant rather than a parameter, so "the upstream is always loopback" is a
|
|
84
|
+
* property of the code and not of every call site. §9.2 pins it from outside as
|
|
85
|
+
* well, by asserting the argv `start()` builds.
|
|
86
|
+
*
|
|
87
|
+
* Measured: passing a bare port (`tailscale serve --bg 19001`) also resolves to
|
|
88
|
+
* `http://127.0.0.1:19001`. The full URL is passed anyway, so the guarantee is
|
|
89
|
+
* visible in argv instead of relying on a Tailscale-side default.
|
|
90
|
+
*/
|
|
91
|
+
export declare const LOOPBACK_HOST = "127.0.0.1";
|
|
92
|
+
/**
|
|
93
|
+
* The HTTPS port Serve publishes on.
|
|
94
|
+
*
|
|
95
|
+
* 443 is the port `tailscale serve <target>` uses by default and the one the
|
|
96
|
+
* tailnet's HTTPS certificate covers (measured: `status --json` reports
|
|
97
|
+
* `CertDomains: ["<node>.<tailnet>.ts.net"]`, so no extra enablement step is
|
|
98
|
+
* needed on this machine).
|
|
99
|
+
*/
|
|
100
|
+
export declare const SERVE_HTTPS_PORT = 443;
|
|
101
|
+
/**
|
|
102
|
+
* The path CommandMate publishes on.
|
|
103
|
+
*
|
|
104
|
+
* Root, not a prefix: the Next.js app is served without a `basePath`, so a
|
|
105
|
+
* handler mounted at `/commandmate` would return an app whose own asset and API
|
|
106
|
+
* URLs all point back at `/`.
|
|
107
|
+
*/
|
|
108
|
+
export declare const SERVE_PATH = "/";
|
|
109
|
+
/** Same 5s budget `PreflightChecker` gives every other dependency probe. */
|
|
110
|
+
export declare const DETECT_TIMEOUT_MS = 5000;
|
|
111
|
+
/**
|
|
112
|
+
* Budget for the Serve mutations.
|
|
113
|
+
*
|
|
114
|
+
* Longer than the probe: `serve --bg` talks to tailscaled and, the first time a
|
|
115
|
+
* tailnet uses HTTPS, can provision a certificate. Measured latency on an
|
|
116
|
+
* already-provisioned node was well under a second.
|
|
117
|
+
*/
|
|
118
|
+
export declare const SERVE_TIMEOUT_MS = 30000;
|
|
119
|
+
/** `BackendState` from `tailscale status --json` when the node is usable. */
|
|
120
|
+
export declare const BACKEND_STATE_RUNNING = "Running";
|
|
121
|
+
/** The subset of `tailscale serve status --json` this module reads. */
|
|
122
|
+
export interface ServeTcpEntry {
|
|
123
|
+
HTTPS?: boolean;
|
|
124
|
+
HTTP?: boolean;
|
|
125
|
+
TCPForward?: string;
|
|
126
|
+
TerminateTLS?: string;
|
|
127
|
+
}
|
|
128
|
+
/** One `host:port` block of the `Web` map. */
|
|
129
|
+
export interface ServeWebEntry {
|
|
130
|
+
Handlers?: Record<string, {
|
|
131
|
+
Proxy?: string;
|
|
132
|
+
} | null>;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* `tailscale serve status --json`, as measured.
|
|
136
|
+
*
|
|
137
|
+
* With nothing configured the command prints `{}` and exits 0 (the human form
|
|
138
|
+
* says `No serve config`). With two handlers on 443 it prints
|
|
139
|
+
* `{"TCP":{"443":{"HTTPS":true}},"Web":{"<node>.<tailnet>.ts.net:443":
|
|
140
|
+
* {"Handlers":{"/":{"Proxy":"http://127.0.0.1:19002"}, ...}}}}`.
|
|
141
|
+
*/
|
|
142
|
+
export interface ServeConfig {
|
|
143
|
+
TCP?: Record<string, ServeTcpEntry | null>;
|
|
144
|
+
Web?: Record<string, ServeWebEntry | null>;
|
|
145
|
+
}
|
|
146
|
+
/** The fields of `tailscale status --json` readiness is decided from. */
|
|
147
|
+
export interface TailscaleStatus {
|
|
148
|
+
BackendState?: string;
|
|
149
|
+
MagicDNSSuffix?: string;
|
|
150
|
+
Self?: {
|
|
151
|
+
DNSName?: string;
|
|
152
|
+
} | null;
|
|
153
|
+
Version?: string;
|
|
154
|
+
}
|
|
155
|
+
/** The seam that lets this Provider be tested without a tailnet. */
|
|
156
|
+
export interface TailscaleProviderDeps {
|
|
157
|
+
spawnSync: (command: string, args: readonly string[], options: SpawnSyncOptionsWithStringEncoding) => SpawnSyncReturns<string>;
|
|
158
|
+
/** HTTPS port to publish on. Overridable so tests can prove it reaches argv. */
|
|
159
|
+
servePort: number;
|
|
160
|
+
/** Path to publish on. Same reason. */
|
|
161
|
+
servePath: string;
|
|
162
|
+
detectTimeoutMs: number;
|
|
163
|
+
serveTimeoutMs: number;
|
|
164
|
+
}
|
|
165
|
+
export declare const defaultTailscaleDeps: TailscaleProviderDeps;
|
|
166
|
+
/**
|
|
167
|
+
* Drops the trailing dot from a MagicDNS name.
|
|
168
|
+
*
|
|
169
|
+
* Measured: `Self.DNSName` is `maenomac-studio.taile4f402.ts.net.` — fully
|
|
170
|
+
* qualified, with the root dot — while the key Serve uses in its own `Web` map
|
|
171
|
+
* is `maenomac-studio.taile4f402.ts.net:443`, without it. The two must agree
|
|
172
|
+
* or every snapshot key would miss.
|
|
173
|
+
*/
|
|
174
|
+
export declare function normalizeDnsName(name: string): string;
|
|
175
|
+
/**
|
|
176
|
+
* The key one Serve handler is known by, in the keyspace `PreexistingSnapshot`
|
|
177
|
+
* and `RemoteHandle.owned.revert` share (§6.3-2).
|
|
178
|
+
*
|
|
179
|
+
* `<host>:<port><path>` — byte-for-byte the `Web` map key with the handler path
|
|
180
|
+
* appended, so a snapshot key and an owned key are comparable by construction
|
|
181
|
+
* rather than by convention.
|
|
182
|
+
*/
|
|
183
|
+
export declare function serveHandlerKey(host: string, port: number, path: string): string;
|
|
184
|
+
/** The parts of a handler key an undo command needs. */
|
|
185
|
+
export interface ParsedServeHandlerKey {
|
|
186
|
+
host: string;
|
|
187
|
+
port: number;
|
|
188
|
+
path: string;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Inverse of {@link serveHandlerKey}.
|
|
192
|
+
*
|
|
193
|
+
* Returns null rather than guessing. A key that cannot be parsed is a key whose
|
|
194
|
+
* undo command cannot be built safely, and the caller reports that instead of
|
|
195
|
+
* running a less specific command — which, per the measurement in the file
|
|
196
|
+
* header, is how a whole-port wipe happens.
|
|
197
|
+
*/
|
|
198
|
+
export declare function parseServeHandlerKey(key: string): ParsedServeHandlerKey | null;
|
|
199
|
+
/**
|
|
200
|
+
* Parses `tailscale serve status --json`.
|
|
201
|
+
*
|
|
202
|
+
* Empty output is an empty configuration, not a failure: measured, the command
|
|
203
|
+
* prints `{}` when nothing is served, and a Provider that treated "no config"
|
|
204
|
+
* as "could not read config" would refuse to start on a clean machine.
|
|
205
|
+
*/
|
|
206
|
+
export declare function parseServeConfig(text: string): ServeConfig | null;
|
|
207
|
+
/**
|
|
208
|
+
* Every handler currently configured, as keys, sorted.
|
|
209
|
+
*
|
|
210
|
+
* This is the list §6.3-2 protects. Anything in here existed before CommandMate
|
|
211
|
+
* ran and must survive `stop()`.
|
|
212
|
+
*/
|
|
213
|
+
export declare function serveHandlerKeys(config: ServeConfig): string[];
|
|
214
|
+
/** Wraps a parsed config as the snapshot shape the shared skip rule reads. */
|
|
215
|
+
export declare function snapshotServeConfig(config: ServeConfig): PreexistingSnapshot;
|
|
216
|
+
/**
|
|
217
|
+
* The argv that publishes `http://127.0.0.1:<upstreamPort>`.
|
|
218
|
+
*
|
|
219
|
+
* `LOOPBACK_HOST` is a constant here and `upstreamPort` is validated before it
|
|
220
|
+
* arrives, so the only caller-supplied value that reaches the command line is a
|
|
221
|
+
* port number. `--yes` keeps tailscaled from ever asking a question on a
|
|
222
|
+
* non-interactive run.
|
|
223
|
+
*/
|
|
224
|
+
export declare function buildServeArgs(opts: {
|
|
225
|
+
servePort: number;
|
|
226
|
+
servePath: string;
|
|
227
|
+
upstreamPort: number;
|
|
228
|
+
}): string[];
|
|
229
|
+
/**
|
|
230
|
+
* The argv that removes exactly one handler.
|
|
231
|
+
*
|
|
232
|
+
* **The `--set-path` is load-bearing.** Measured on 1.102.3, dropping it — or
|
|
233
|
+
* passing the path positionally, the way older Tailscale documentation shows —
|
|
234
|
+
* removes every handler on the port and exits 0. See the table in the file
|
|
235
|
+
* header. This is the only function in the codebase that builds an `off` argv,
|
|
236
|
+
* and it cannot build one without a path.
|
|
237
|
+
*/
|
|
238
|
+
export declare function buildServeOffArgs(parsed: ParsedServeHandlerKey): string[];
|
|
239
|
+
/** The public URL a handler on `<host>:<port><path>` answers on. */
|
|
240
|
+
export declare function buildServeUrl(host: string, port: number): string;
|
|
241
|
+
/** What `tailscale status --json` says about this node being able to serve. */
|
|
242
|
+
export interface ServeReadiness {
|
|
243
|
+
ready: boolean;
|
|
244
|
+
/** The MagicDNS name, without its trailing dot, when there is one. */
|
|
245
|
+
dnsName: string | null;
|
|
246
|
+
reason?: string;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Decides `ready` from `tailscale status --json`.
|
|
250
|
+
*
|
|
251
|
+
* Two signals, both measured present on a working node: `BackendState` is
|
|
252
|
+
* `Running`, and `Self.DNSName` carries the MagicDNS name Serve publishes on.
|
|
253
|
+
* They are checked separately because they fail separately — a logged-out node
|
|
254
|
+
* reports a non-`Running` state, while a tailnet with MagicDNS disabled is
|
|
255
|
+
* `Running` with no name to serve under.
|
|
256
|
+
*/
|
|
257
|
+
export declare function readServeReadiness(text: string): ServeReadiness;
|
|
258
|
+
/**
|
|
259
|
+
* Builds the Provider.
|
|
260
|
+
*
|
|
261
|
+
* The returned object has exactly the four members `RemoteProvider` declares —
|
|
262
|
+
* the seams stay closed over in here rather than becoming a fifth key, because
|
|
263
|
+
* the contract test pins that list and §6.3-1 is the reason it does.
|
|
264
|
+
*/
|
|
265
|
+
export declare function createTailscaleProvider(overrides?: Partial<TailscaleProviderDeps>): RemoteProvider;
|
|
266
|
+
/** The shipped Provider, wired to the real `tailscale`. */
|
|
267
|
+
export declare const tailscaleProvider: RemoteProvider;
|
|
268
|
+
//# sourceMappingURL=tailscale.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailscale.d.ts","sourceRoot":"","sources":["../../../src/lib/remote/tailscale.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,OAAO,EAEL,KAAK,kCAAkC,EACvC,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAEL,KAAK,mBAAmB,EAExB,KAAK,cAAc,EAGpB,MAAM,SAAS,CAAC;AAEjB,+EAA+E;AAC/E,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,cAAc,CAAC;AAEzC;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAEvC,6EAA6E;AAC7E,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,8CAA8C;AAC9C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACtD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC;CAC5C;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oEAAoE;AACpE,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,CACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,kCAAkC,KACxC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9B,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,oBAAoB,EAAE,qBAMlC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,wDAAwD;AACxD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CAe9E;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAWjE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CAU9D;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,mBAAmB,CAE5E;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,EAAE,CAUX;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,EAAE,CASzE;AAED,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhE;AAkED,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,sEAAsE;IACtE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAwC/D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAC7C,cAAc,CAoKhB;AAsCD,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,EAAE,cAA0C,CAAC"}
|