agent-log-viewer 0.11.7 → 1.0.1
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 +218 -39
- package/bin/cli.mjs +60 -16
- package/bin/mcp-server.mjs +136 -0
- package/bin/mcp-server.test.ts +266 -0
- package/bin/provision-telegram-connector.mjs +193 -0
- package/bin/server-runtime.mjs +53 -0
- package/bin/server-runtime.test.ts +161 -0
- package/bin/tailscale-credential-isolation.test.ts +56 -0
- package/bin/tailscale.mjs +6 -4
- package/bin/telegram-login-bridge.py +253 -0
- package/bin/telegram-mcp-server.py +106 -0
- package/bin/telegram-session-reader.mjs +6 -0
- package/bin/telegram-session-validator.mjs +71 -0
- package/dist/mcp-server.mjs +48505 -0
- package/dist/standalone/.next/BUILD_ID +1 -1
- package/dist/standalone/.next/app-path-routes-manifest.json +73 -9
- package/dist/standalone/.next/build-manifest.json +6 -6
- package/dist/standalone/.next/prerender-manifest.json +3 -3
- package/dist/standalone/.next/react-loadable-manifest.json +89 -0
- package/dist/standalone/.next/required-server-files.json +12 -2
- package/dist/standalone/.next/routes-manifest.json +402 -0
- package/dist/standalone/.next/server/account-migration-controller-worker.js +1 -0
- package/dist/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/api/access/route.js +1 -1
- package/dist/standalone/.next/server/app/api/access/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route.js +1 -0
- package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js +4 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/active/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js +4 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js +4 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/policy/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/route.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js +4 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/active/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/policy/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/route.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js +4 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/route.js +1 -0
- package/dist/standalone/.next/server/app/api/accounts/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/accounts/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/agent/route.js +1 -0
- package/dist/standalone/.next/server/app/api/agent/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/agent/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/agent/snapshot/route.js +1 -0
- package/dist/standalone/.next/server/app/api/agent/snapshot/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/agent/snapshot/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/answer/route.js +1 -1
- package/dist/standalone/.next/server/app/api/answer/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/artifact/route.js +1 -0
- package/dist/standalone/.next/server/app/api/artifact/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/artifact/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/attach-command/route.js +1 -0
- package/dist/standalone/.next/server/app/api/attach-command/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/attach-command/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/attention/[id]/route.js +1 -0
- package/dist/standalone/.next/server/app/api/attention/[id]/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/attention/[id]/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/attention/route.js +1 -0
- package/dist/standalone/.next/server/app/api/attention/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/attention/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/board/route.js +1 -0
- package/dist/standalone/.next/server/app/api/board/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/board/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/bridge/route.js +2 -0
- package/dist/standalone/.next/server/app/api/bridge/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/bridge/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js +1 -0
- package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/conversations/route.js +1 -0
- package/dist/standalone/.next/server/app/api/conversations/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/conversations/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/files/route.js +2 -1
- package/dist/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/flows/[id]/route.js +1 -1
- package/dist/standalone/.next/server/app/api/flows/[id]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/flows/route.js +1 -1
- package/dist/standalone/.next/server/app/api/flows/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/image/route.js +1 -1
- package/dist/standalone/.next/server/app/api/image/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/inbox/route.js +2 -2
- package/dist/standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/lifecycle/reaper/route.js +1 -0
- package/dist/standalone/.next/server/app/api/lifecycle/reaper/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/lifecycle/reaper/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/limits/history/route.js +4 -0
- package/dist/standalone/.next/server/app/api/limits/history/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/limits/history/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/limits/route.js +4 -2
- package/dist/standalone/.next/server/app/api/limits/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/log/preflight/route.js +1 -0
- package/dist/standalone/.next/server/app/api/log/preflight/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/log/preflight/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/log/project-delete/route.js +1 -0
- package/dist/standalone/.next/server/app/api/log/project-delete/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/log/project-delete/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/log/provenance/route.js +1 -0
- package/dist/standalone/.next/server/app/api/log/provenance/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/log/provenance/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/log/route.js +1 -1
- package/dist/standalone/.next/server/app/api/log/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/logs/route.js +1 -1
- package/dist/standalone/.next/server/app/api/logs/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/logs/stream/route.js +4 -4
- package/dist/standalone/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/monitor/lock/route.js +3 -0
- package/dist/standalone/.next/server/app/api/monitor/lock/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/monitor/lock/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/monitor/runs/route.js +3 -0
- package/dist/standalone/.next/server/app/api/monitor/runs/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/monitor/runs/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/rotate/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/seat/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route.js +3 -0
- package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/[id]/route.js +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/[id]/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/[id]/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/preflight/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/route.js +2 -0
- package/dist/standalone/.next/server/app/api/pipelines/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/tick/route.js +2 -0
- package/dist/standalone/.next/server/app/api/pipelines/tick/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/pipelines/tick/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/proc/route.js +1 -1
- package/dist/standalone/.next/server/app/api/proc/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/projects/create/route.js +3 -0
- package/dist/standalone/.next/server/app/api/projects/create/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/projects/create/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/projects/crown/route.js +1 -0
- package/dist/standalone/.next/server/app/api/projects/crown/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/projects/crown/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/push/route.js +2 -1
- package/dist/standalone/.next/server/app/api/push/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/resources/route.js +1 -1
- package/dist/standalone/.next/server/app/api/resources/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/roles/route.js +2 -0
- package/dist/standalone/.next/server/app/api/roles/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/answer/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/answer/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/answer/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/deployments/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/interrupt/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/operations/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/operations/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/operations/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/realtime/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/realtime/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/realtime/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/send/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/send/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/send/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/snapshot/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/spawn/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/spawn/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/spawn/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/steer/route.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/steer/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/steer/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/runtime/stream/route.js +8 -0
- package/dist/standalone/.next/server/app/api/runtime/stream/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/runtime/stream/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/search/transcripts/route.js +2 -0
- package/dist/standalone/.next/server/app/api/search/transcripts/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/search/transcripts/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/session/route.js +1 -1
- package/dist/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/session/supersedence/route.js +1 -0
- package/dist/standalone/.next/server/app/api/session/supersedence/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/session/supersedence/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/session/title/route.js +1 -0
- package/dist/standalone/.next/server/app/api/session/title/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/session/title/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/spawn/policy/route.js +6 -0
- package/dist/standalone/.next/server/app/api/spawn/policy/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/spawn/policy/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/spawn/route.js +2 -1
- package/dist/standalone/.next/server/app/api/spawn/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/staging/route.js +2 -0
- package/dist/standalone/.next/server/app/api/staging/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/staging/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/task-attachments/route.js +2 -0
- package/dist/standalone/.next/server/app/api/task-attachments/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/task-attachments/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/tasks/[id]/assignment/route.js +1 -2
- package/dist/standalone/.next/server/app/api/tasks/[id]/assignment/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tasks/[id]/route.js +1 -2
- package/dist/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js +1 -1
- package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js +1 -1
- package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tasks/curator/route.js +1 -1
- package/dist/standalone/.next/server/app/api/tasks/curator/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tasks/route.js +11 -2
- package/dist/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/telegram/reports/route.js +1 -0
- package/dist/standalone/.next/server/app/api/telegram/reports/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/telegram/reports/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/telegram/route.js +1 -0
- package/dist/standalone/.next/server/app/api/telegram/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/telegram/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/timeline/route.js +1 -1
- package/dist/standalone/.next/server/app/api/timeline/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tmux/route.js +1 -1
- package/dist/standalone/.next/server/app/api/tmux/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tmux/targets/route.js +1 -1
- package/dist/standalone/.next/server/app/api/tmux/targets/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/transcribe/backend/route.js +2 -2
- package/dist/standalone/.next/server/app/api/transcribe/backend/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/transcribe/route.js +2 -2
- package/dist/standalone/.next/server/app/api/transcribe/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/transcribe/token/route.js +2 -2
- package/dist/standalone/.next/server/app/api/transcribe/token/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tts/backend/route.js +1 -0
- package/dist/standalone/.next/server/app/api/tts/backend/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/tts/backend/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/tts/route.js +3 -0
- package/dist/standalone/.next/server/app/api/tts/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/tts/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/view/presence/route.js +1 -0
- package/dist/standalone/.next/server/app/api/view/presence/route.js.nft.json +1 -0
- package/dist/standalone/.next/server/app/api/view/presence/route_client-reference-manifest.js +1 -0
- package/dist/standalone/.next/server/app/api/workflows/[id]/route.js +1 -1
- package/dist/standalone/.next/server/app/api/workflows/[id]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/workflows/route.js +1 -1
- package/dist/standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/favicon.ico/route.js +1 -1
- package/dist/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/index.html +1 -1
- package/dist/standalone/.next/server/app/index.rsc +4 -4
- package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/page.js +74 -3
- package/dist/standalone/.next/server/app/page.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/standalone/.next/server/app-paths-manifest.json +73 -9
- package/dist/standalone/.next/server/chunks/1068.js +1 -0
- package/dist/standalone/.next/server/chunks/1097.js +1 -0
- package/dist/standalone/.next/server/chunks/156.js +2 -0
- package/dist/standalone/.next/server/chunks/1617.js +2 -0
- package/dist/standalone/.next/server/chunks/1813.js +1 -0
- package/dist/standalone/.next/server/chunks/1858.js +91 -0
- package/dist/standalone/.next/server/chunks/1888.js +1 -0
- package/dist/standalone/.next/server/chunks/1911.js +1 -0
- package/dist/standalone/.next/server/chunks/1918.js +1 -0
- package/dist/standalone/.next/server/chunks/1920.js +27 -0
- package/dist/standalone/.next/server/chunks/2190.js +1 -0
- package/dist/standalone/.next/server/chunks/230.js +1 -0
- package/dist/standalone/.next/server/chunks/2318.js +2 -0
- package/dist/standalone/.next/server/chunks/2324.js +1 -0
- package/dist/standalone/.next/server/chunks/2338.js +9 -0
- package/dist/standalone/.next/server/chunks/2904.js +42 -0
- package/dist/standalone/.next/server/chunks/2923.js +1 -0
- package/dist/standalone/.next/server/chunks/2962.js +1 -0
- package/dist/standalone/.next/server/chunks/2977.js +1 -0
- package/dist/standalone/.next/server/chunks/306.js +3 -0
- package/dist/standalone/.next/server/chunks/3086.js +1 -0
- package/dist/standalone/.next/server/chunks/3139.js +10 -0
- package/dist/standalone/.next/server/chunks/3214.js +82 -0
- package/dist/standalone/.next/server/chunks/3313.js +1 -0
- package/dist/standalone/.next/server/chunks/3336.js +1 -0
- package/dist/standalone/.next/server/chunks/3438.js +2 -0
- package/dist/standalone/.next/server/chunks/3558.js +1 -0
- package/dist/standalone/.next/server/chunks/3587.js +1 -0
- package/dist/standalone/.next/server/chunks/3598.js +81 -0
- package/dist/standalone/.next/server/chunks/3669.js +1 -0
- package/dist/standalone/.next/server/chunks/3740.js +126 -0
- package/dist/standalone/.next/server/chunks/3793.js +6 -0
- package/dist/standalone/.next/server/chunks/3817.js +1 -0
- package/dist/standalone/.next/server/chunks/3916.js +1 -0
- package/dist/standalone/.next/server/chunks/3944.js +1 -0
- package/dist/standalone/.next/server/chunks/3953.js +1 -0
- package/dist/standalone/.next/server/chunks/4012.js +4 -0
- package/dist/standalone/.next/server/chunks/4127.js +1 -0
- package/dist/standalone/.next/server/chunks/4191.js +1 -0
- package/dist/standalone/.next/server/chunks/4260.js +2 -0
- package/dist/standalone/.next/server/chunks/4509.js +1 -0
- package/dist/standalone/.next/server/chunks/{741.js → 4741.js} +1 -1
- package/dist/standalone/.next/server/chunks/4968.js +1 -0
- package/dist/standalone/.next/server/chunks/4972.js +130 -0
- package/dist/standalone/.next/server/chunks/5689.js +11 -0
- package/dist/standalone/.next/server/chunks/6333.js +47 -0
- package/dist/standalone/.next/server/chunks/6389.js +1 -0
- package/dist/standalone/.next/server/chunks/640.js +1 -0
- package/dist/standalone/.next/server/chunks/6796.js +1 -0
- package/dist/standalone/.next/server/chunks/6826.js +2 -0
- package/dist/standalone/.next/server/chunks/6850.js +1 -0
- package/dist/standalone/.next/server/chunks/6909.js +1 -0
- package/dist/standalone/.next/server/chunks/6977.js +1 -0
- package/dist/standalone/.next/server/chunks/7126.js +1 -0
- package/dist/standalone/.next/server/chunks/7159.js +1 -0
- package/dist/standalone/.next/server/chunks/7270.js +45 -0
- package/dist/standalone/.next/server/chunks/7295.js +10 -0
- package/dist/standalone/.next/server/chunks/7471.js +87 -0
- package/dist/standalone/.next/server/chunks/7563.js +1 -0
- package/dist/standalone/.next/server/chunks/7644.js +13 -0
- package/dist/standalone/.next/server/chunks/7722.js +1 -0
- package/dist/standalone/.next/server/chunks/7733.js +4 -0
- package/dist/standalone/.next/server/chunks/7868.js +1 -0
- package/dist/standalone/.next/server/chunks/8026.js +1 -0
- package/dist/standalone/.next/server/chunks/8140.js +1 -0
- package/dist/standalone/.next/server/chunks/8176.js +1 -0
- package/dist/standalone/.next/server/chunks/8444.js +1 -0
- package/dist/standalone/.next/server/chunks/8465.js +2 -0
- package/dist/standalone/.next/server/chunks/849.js +6 -0
- package/dist/standalone/.next/server/chunks/8576.js +1 -0
- package/dist/standalone/.next/server/chunks/8600.js +12 -0
- package/dist/standalone/.next/server/chunks/8617.js +2 -0
- package/dist/standalone/.next/server/chunks/8797.js +1 -0
- package/dist/standalone/.next/server/chunks/8817.js +5 -0
- package/dist/standalone/.next/server/chunks/8966.js +2 -0
- package/dist/standalone/.next/server/chunks/8996.js +1 -0
- package/dist/standalone/.next/server/chunks/9246.js +47 -0
- package/dist/standalone/.next/server/chunks/9364.js +310 -0
- package/dist/standalone/.next/server/chunks/9411.js +14 -0
- package/dist/standalone/.next/server/chunks/9434.js +13 -0
- package/dist/standalone/.next/server/chunks/9507.js +1 -0
- package/dist/standalone/.next/server/chunks/9676.js +62 -0
- package/dist/standalone/.next/server/chunks/9733.js +42 -0
- package/dist/standalone/.next/server/chunks/9901.js +62 -0
- package/dist/standalone/.next/server/chunks/9937.js +2 -0
- package/dist/standalone/.next/server/chunks/9940.js +128 -0
- package/dist/standalone/.next/server/chunks/9998.js +1 -0
- package/dist/standalone/.next/server/chunks/static/media/pdf.worker.min.65fe1ff1.mjs +6 -0
- package/dist/standalone/.next/server/file-scanner-worker.js +4 -0
- package/dist/standalone/.next/server/files-response-worker.js +13 -0
- package/dist/standalone/.next/server/functions-config-manifest.json +64 -0
- package/dist/standalone/.next/server/instrumentation.js +1 -0
- package/dist/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/standalone/.next/server/middleware.js +2 -2
- package/dist/standalone/.next/server/pages/404.html +1 -1
- package/dist/standalone/.next/server/pages/500.html +1 -1
- package/dist/standalone/.next/server/resource-collector-worker.js +1 -0
- package/dist/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/standalone/.next/server/wakatime-sync-worker.js +2 -0
- package/dist/standalone/.next/server/webpack-runtime.js +1 -1
- package/dist/standalone/.next/static/chunks/1783.662e4b7044e5db2f.js +1 -0
- package/dist/standalone/.next/static/chunks/2345.c09668c2640f24ad.js +1 -0
- package/dist/standalone/.next/static/chunks/2462.217e83e51ac07519.js +1 -0
- package/dist/standalone/.next/static/chunks/2619.fd64e7a5bd9005d5.js +1 -0
- package/dist/standalone/.next/static/chunks/3015.f61f117dd9ccb747.js +1 -0
- package/dist/standalone/.next/static/chunks/{794-0fc36bf1952fbc29.js → 3794-a205959ce301b5c6.js} +1 -1
- package/dist/standalone/.next/static/chunks/4bd1b696-c2f6e0877b6c10aa.js +1 -0
- package/dist/standalone/.next/static/chunks/6370.4f217a9379f47764.js +1 -0
- package/dist/standalone/.next/static/chunks/7067.f02e8d0616800bac.js +1 -0
- package/dist/standalone/.next/static/chunks/7297.aaa457b2a2939f7b.js +1 -0
- package/dist/standalone/.next/static/chunks/7774.cca1e546ab5623e0.js +1 -0
- package/dist/standalone/.next/static/chunks/8293.5545fdbde0213c98.js +1 -0
- package/dist/standalone/.next/static/chunks/8327.33abd84515b38836.js +1 -0
- package/dist/standalone/.next/static/chunks/858.302d545082b159c6.js +1 -0
- package/dist/standalone/.next/static/chunks/9178-e32f088e89b55503.js +1 -0
- package/dist/standalone/.next/static/chunks/9583.b999fb5de3a3494a.js +1 -0
- package/dist/standalone/.next/static/chunks/9b0008ae.eb7a9c4c1c92a63b.js +45 -0
- package/dist/standalone/.next/static/chunks/app/_global-error/page-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/_not-found/page-9e7648417ae57bf7.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/access/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/account-migrations/[intentId]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/[id]/status/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/active/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/input/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/policy/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/terminal/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/active/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/policy/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/terminal/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/accounts/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/agent/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/agent/snapshot/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/answer/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/artifact/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/attach-command/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/attention/[id]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/attention/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/board/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/bridge/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/conversations/[conversationId]/migration/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/conversations/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/files/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/flows/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/image/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/inbox/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/lifecycle/reaper/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/limits/history/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/limits/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/log/preflight/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/log/project-delete/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/log/provenance/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/log/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/logs/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/logs/stream/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/monitor/lock/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/monitor/runs/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/orchestrator/rotate/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/status/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/pipelines/[id]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/pipelines/preflight/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/pipelines/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/pipelines/tick/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/proc/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/projects/create/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/projects/crown/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/push/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/resources/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/roles/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/answer/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/[deploymentId]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/capabilities/v1/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/interrupt/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/operations/[operationId]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/operations/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/realtime/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/send/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/snapshot/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/spawn/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/steer/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/runtime/stream/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/search/transcripts/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/session/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/session/supersedence/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/session/title/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/spawn/policy/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/spawn/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/staging/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/task-attachments/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/assignment/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tasks/curator/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tasks/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/telegram/reports/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/telegram/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/timeline/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tmux/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tmux/targets/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/transcribe/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tts/backend/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/tts/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/view/presence/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/api/workflows/route-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/app/layout-c8390ace9b222dd6.js +1 -0
- package/dist/standalone/.next/static/chunks/app/page-ac9463b910bf83fe.js +77 -0
- package/dist/standalone/.next/static/chunks/framework-d1de002210ddaaef.js +1 -0
- package/dist/standalone/.next/static/chunks/{main-3cec32f88450e0e3.js → main-343fc547124ab6ff.js} +2 -2
- package/dist/standalone/.next/static/chunks/main-app-63e09a6ca85925cd.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-a07ea5db82382b93.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c132c5ba005ff29e.js +1 -0
- package/dist/standalone/.next/static/chunks/webpack-1637988d4c7cf23c.js +1 -0
- package/dist/standalone/.next/static/css/498f12ddef7ecb0e.css +1 -0
- package/dist/standalone/.next/static/kt9OPe8iwfpNcdOX9ygvb/_buildManifest.js +1 -0
- package/dist/standalone/.next/static/media/pdf.worker.min.e890bf87.mjs +6 -0
- package/dist/standalone/package.json +31 -8
- package/dist/standalone/server.bun.js +38 -0
- package/dist/standalone/server.js +18 -37
- package/package.json +31 -8
- package/vendor/telegram-mcp/.python-version +1 -0
- package/vendor/telegram-mcp/LICENSE +201 -0
- package/vendor/telegram-mcp/PROVENANCE.md +70 -0
- package/vendor/telegram-mcp/SHA256SUMS +24 -0
- package/vendor/telegram-mcp/main.py +67 -0
- package/vendor/telegram-mcp/pyproject.toml +100 -0
- package/vendor/telegram-mcp/requirements.txt +7 -0
- package/vendor/telegram-mcp/sanitize.py +143 -0
- package/vendor/telegram-mcp/session_string_generator.py +259 -0
- package/vendor/telegram-mcp/telegram_mcp/__init__.py +15 -0
- package/vendor/telegram-mcp/telegram_mcp/client_identity.py +31 -0
- package/vendor/telegram-mcp/telegram_mcp/install_guard.py +209 -0
- package/vendor/telegram-mcp/telegram_mcp/runner.py +198 -0
- package/vendor/telegram-mcp/telegram_mcp/runtime.py +1812 -0
- package/vendor/telegram-mcp/telegram_mcp/singleton.py +143 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/__init__.py +13 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/accounts.py +31 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/chats.py +1163 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/contacts.py +802 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/events.py +485 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/folders.py +600 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/groups.py +1286 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/media.py +470 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/messages.py +2041 -0
- package/vendor/telegram-mcp/telegram_mcp/tools/profile.py +449 -0
- package/vendor/telegram-mcp/uv.lock +1693 -0
- package/dist/standalone/.next/server/chunks/628.js +0 -2
- package/dist/standalone/.next/server/chunks/747.js +0 -4
- package/dist/standalone/.next/server/chunks/813.js +0 -1
- package/dist/standalone/.next/server/chunks/918.js +0 -1
- package/dist/standalone/.next/server/chunks/998.js +0 -1
- package/dist/standalone/.next/static/U4SZ1qekrUMw43qsp4kED/_buildManifest.js +0 -1
- package/dist/standalone/.next/static/chunks/4bd1b696-215e5051988c3dde.js +0 -1
- package/dist/standalone/.next/static/chunks/647-0b14204033b8658c.js +0 -1
- package/dist/standalone/.next/static/chunks/app/_global-error/page-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/_not-found/page-811f7dc4ec7ef451.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/access/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/answer/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/files/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/flows/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/image/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/inbox/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/limits/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/log/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/logs/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/logs/stream/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/proc/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/push/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/resources/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/session/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/spawn/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/assignment/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/curator/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/timeline/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tmux/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tmux/targets/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/transcribe/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/workflows/route-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/app/layout-22e93960d4e3259a.js +0 -1
- package/dist/standalone/.next/static/chunks/app/page-6c0325e2d49a521e.js +0 -2
- package/dist/standalone/.next/static/chunks/framework-93cda6578f6c76ec.js +0 -1
- package/dist/standalone/.next/static/chunks/main-app-e6ff5fbff7d5b38f.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-2b3b5eea82b805ca.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d0de276a8c0b264e.js +0 -1
- package/dist/standalone/.next/static/chunks/webpack-7dc14fd5ff1227ce.js +0 -1
- package/dist/standalone/.next/static/css/b9bc533a63013ced.css +0 -1
- /package/dist/standalone/.next/static/{U4SZ1qekrUMw43qsp4kED → kt9OPe8iwfpNcdOX9ygvb}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -1,30 +1,67 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Agent Log Viewer
|
|
2
2
|
|
|
3
3
|
`agent-log-viewer` is a local web UI that turns raw Codex / Claude Code agent
|
|
4
4
|
logs into a readable, live-updating chat feed. It discovers every session,
|
|
5
5
|
subagent and background shell task on your machine, links them into a
|
|
6
6
|
parent→child tree, and tails the selected one in real time.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+

|
|
9
|
+
|
|
10
|
+
The default setup runs locally against transcripts already on disk. It reads
|
|
11
|
+
`~/.claude` and `~/.codex` directly, while operational Viewer state is kept in
|
|
12
|
+
a local SQLite database under its private configuration directory.
|
|
13
|
+
Optional outbound integrations stay disabled until you configure them:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
bunx agent-log-viewer # or: npx agent-log-viewer
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
See [WakaTime activity integration](docs/wakatime.md) for opt-in activity
|
|
20
|
+
export, its disclosure boundary, and disablement steps.
|
|
21
|
+
|
|
22
|
+
Prefer video? A 45-second cut of the full flow lives at
|
|
23
|
+
[docs/media/demo.mp4](docs/media/demo.mp4).
|
|
24
|
+
|
|
25
|
+
## The tour
|
|
26
|
+
|
|
27
|
+
### Read any session as a chat
|
|
28
|
+
|
|
29
|
+
User bubbles, assistant prose, tool-call cards with ✓/✗ statuses, expandable
|
|
30
|
+
command output and diffs — for **Claude Code** sessions and their subagents
|
|
31
|
+
(`~/.claude/projects/**/*.jsonl`), **Codex CLI** rollouts
|
|
32
|
+
(`~/.codex/sessions/**/rollout-*.jsonl`) with command cards, patches and
|
|
33
|
+
service events, and **background shell tasks** (recovered from the transcript
|
|
34
|
+
and shown above the terminal output).
|
|
11
35
|
|
|
12
36
|

|
|
14
38
|
|
|
15
|
-
|
|
39
|
+
### Spawn agents from the board
|
|
40
|
+
|
|
41
|
+
Each project is a pannable, zoomable scheme — root conversations on top,
|
|
42
|
+
spawned agents one generation below, arrows colored by engine. Draft a new
|
|
43
|
+
agent right on the board: pick Claude or Codex, a model and reasoning effort,
|
|
44
|
+
type the first prompt, and it launches into tmux.
|
|
45
|
+
|
|
46
|
+

|
|
16
47
|
|
|
17
|
-
|
|
18
|
-
subagents, rendered as a chat: user bubbles, assistant prose, tool-call
|
|
19
|
-
cards with ✓/✗ statuses and expandable output.
|
|
20
|
-
- **Codex CLI sessions** (`~/.codex/sessions/**/rollout-*.jsonl`) with command
|
|
21
|
-
cards, patches and service events.
|
|
22
|
-
- **Background shell tasks** (`claude-<uid>/**/tasks/*.output` under the OS
|
|
23
|
-
temp dir — `/tmp` on Linux, `$TMPDIR` on macOS) — the originating Bash
|
|
24
|
-
command is recovered from the session transcript and shown above the
|
|
25
|
-
terminal output.
|
|
48
|
+
### Run implement → review loops
|
|
26
49
|
|
|
27
|
-
|
|
50
|
+
The viewer orchestrates review cycles: a long-lived implementer in tmux, a
|
|
51
|
+
fresh read-only reviewer each round over the full diff, findings relayed
|
|
52
|
+
automatically, and a verdict deck in the scheme view.
|
|
53
|
+
|
|
54
|
+

|
|
55
|
+
|
|
56
|
+
### Answer a blocked agent from the browser
|
|
57
|
+
|
|
58
|
+
When an agent stops on an `AskUserQuestion`, the question surfaces as a card
|
|
59
|
+
with clickable options. The answer is delivered into the agent's tmux pane and
|
|
60
|
+
confirmed against the transcript — the agent just keeps going.
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
64
|
+
### And everything around it
|
|
28
65
|
|
|
29
66
|
- **Parentage tree**: session → subagents → rollouts → background tasks, built
|
|
30
67
|
server-side by scanning transcripts (append-only incremental,
|
|
@@ -33,15 +70,10 @@ statuses and expandable output](docs/media/chat-feed.png)
|
|
|
33
70
|
it is mid-turn and *done* once the final assistant message lands.
|
|
34
71
|
- **Deep links**: every selection is reflected in the URL (`#f=<path>`), so a
|
|
35
72
|
link opens that exact log.
|
|
36
|
-
- **
|
|
37
|
-
conversation on top, spawned agents one generation below, arrows colored by
|
|
38
|
-
engine. Quiet branches and tasks collapse under their nearest ancestor.
|
|
39
|
-
- **English or Ukrainian UI**, model chips (`fable-5`, `gpt-5.5`, `sonnet`…),
|
|
73
|
+
- **English or Ukrainian UI**, model chips (`opus`, `gpt-5.6-sol`, `sonnet`…),
|
|
40
74
|
collapsible tree with persisted state, follow-mode autoscroll, service-event
|
|
41
75
|
toggle, and a line filter.
|
|
42
76
|
|
|
43
|
-
## Screenshots
|
|
44
|
-
|
|
45
77
|
The session parentage tree, wiring root conversations to their spawned agents:
|
|
46
78
|
|
|
47
79
|

|
|
@@ -50,9 +82,12 @@ The session parentage tree, wiring root conversations to their spawned agents:
|
|
|
50
82
|
| --- | --- |
|
|
51
83
|
|  |  |
|
|
52
84
|
|
|
85
|
+
All media above is regenerated deterministically from a synthetic fixture —
|
|
86
|
+
see [docs/media/README.md](docs/media/README.md).
|
|
87
|
+
|
|
53
88
|
## Run
|
|
54
89
|
|
|
55
|
-
The package is published to npm, so the quickstart needs no clone:
|
|
90
|
+
The package is published to npm, so the quickstart above needs no clone:
|
|
56
91
|
|
|
57
92
|
```bash
|
|
58
93
|
bunx agent-log-viewer
|
|
@@ -60,30 +95,153 @@ bunx agent-log-viewer
|
|
|
60
95
|
npx agent-log-viewer
|
|
61
96
|
```
|
|
62
97
|
|
|
63
|
-
This starts the server on `127.0.0.1:8898` and opens your browser.
|
|
98
|
+
This starts the server on `127.0.0.1:8898` and opens your browser. Both launch
|
|
99
|
+
paths require Bun to be installed because the authoritative state stores use
|
|
100
|
+
Bun SQLite.
|
|
64
101
|
|
|
65
102
|
### From a local clone
|
|
66
103
|
|
|
67
|
-
With bun:
|
|
68
|
-
|
|
69
104
|
```bash
|
|
70
105
|
bun install
|
|
71
106
|
bun run build
|
|
72
|
-
bun start --port 8898 --hostname 127.0.0.1
|
|
107
|
+
bun run start -- --port 8898 --hostname 127.0.0.1
|
|
73
108
|
# open http://127.0.0.1:8898/
|
|
74
109
|
```
|
|
75
110
|
|
|
76
|
-
|
|
111
|
+
`start` serves the output of the last `build`, so run `build` first. For
|
|
112
|
+
development, `bun dev` runs the app with hot reload (it needs a high OS
|
|
113
|
+
file-watch limit for large home directories).
|
|
114
|
+
|
|
115
|
+
The Viewer server runs on Bun. The runtime journal and hot state collections
|
|
116
|
+
use `bun:sqlite`, and macOS process ownership uses the kernel's microsecond
|
|
117
|
+
start token. The Docker runtime and `agent-log-viewer` CLI select Bun for every
|
|
118
|
+
feature-flag configuration.
|
|
119
|
+
|
|
120
|
+
### Spawn transport
|
|
121
|
+
|
|
122
|
+
Agents launch through a structured runtime host — no tmux pane between the
|
|
123
|
+
Viewer and the agent — wherever a deployment can serve one. The transport is
|
|
124
|
+
chosen by capability: a deployment that declares `LLV_RUNTIME_HOST_SOCKET`
|
|
125
|
+
spawns structured, and one without a host still spawns through tmux instead of
|
|
126
|
+
failing. Structured hosting itself is on by default; `LLV_STRUCTURED_HOSTS=0`,
|
|
127
|
+
`LLV_RUNTIME_EVENTS=0`, and `NEXT_PUBLIC_RUNTIME_UI=0` are rollback switches.
|
|
128
|
+
Each of the three sends the implicit choice back to tmux, so reaching for one
|
|
129
|
+
during an incident never costs the ability to spawn. They accept the spellings
|
|
130
|
+
an env file actually produces — `0`, `" 0 "`, `'0'`, `false`, `off`, `no` — and
|
|
131
|
+
an unset variable means the default is on.
|
|
132
|
+
|
|
133
|
+
`LLV_SPAWN_TRANSPORT=tmux|structured` overrides the choice. An explicit
|
|
134
|
+
`structured` without a reachable host returns a gap naming what is missing
|
|
135
|
+
rather than quietly downgrading the request.
|
|
136
|
+
|
|
137
|
+
### Connect an orchestrator through MCP
|
|
138
|
+
|
|
139
|
+
The package includes `agent-log-viewer-mcp`, a local stdio MCP server. It
|
|
140
|
+
invokes Viewer services in-process and shares their durable stores, locks, and
|
|
141
|
+
idempotency rules. Keep the Viewer package and the MCP process under the same
|
|
142
|
+
OS user so they resolve the same state directory.
|
|
143
|
+
|
|
144
|
+
For an installed package, add this server to the orchestrator's standard MCP
|
|
145
|
+
configuration:
|
|
146
|
+
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"mcpServers": {
|
|
150
|
+
"viewer": {
|
|
151
|
+
"command": "agent-log-viewer-mcp"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
For a local clone, point the client at the launcher:
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"mcpServers": {
|
|
162
|
+
"viewer": {
|
|
163
|
+
"command": "bun",
|
|
164
|
+
"args": ["/absolute/path/to/live-log-viewer-next/bin/mcp-server.mjs"]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Quick install from the CLI:
|
|
77
171
|
|
|
78
172
|
```bash
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
173
|
+
# Claude Code (user scope)
|
|
174
|
+
claude mcp add viewer -s user -- bun /absolute/path/to/live-log-viewer-next/bin/mcp-server.mjs
|
|
175
|
+
|
|
176
|
+
# Codex — append to ~/.codex/config.toml
|
|
177
|
+
[mcp_servers.viewer]
|
|
178
|
+
command = "bun"
|
|
179
|
+
args = ["/absolute/path/to/live-log-viewer-next/bin/mcp-server.mjs"]
|
|
82
180
|
```
|
|
83
181
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
182
|
+
To register the server everywhere at once — the operator's Claude Code and
|
|
183
|
+
Codex configs plus every Viewer-managed account under
|
|
184
|
+
`~/.config/agent-log-viewer/accounts` (their spawned agents each run with
|
|
185
|
+
their own `CLAUDE_CONFIG_DIR`/`CODEX_HOME`, so each account needs its own
|
|
186
|
+
registration) — run the idempotent installer and re-run it after adding
|
|
187
|
+
accounts:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
scripts/install-mcp.sh # uses the managed stable launcher when present
|
|
191
|
+
LLV_MCP_BIN=/path/to/mcp-server.mjs \
|
|
192
|
+
scripts/install-mcp.sh # select an explicit launcher
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Exact deployments keep the managed executable at
|
|
196
|
+
`~/.agents/tools/llv-mcp-runtime/bin/mcp-server.mjs`. Existing Claude and
|
|
197
|
+
Codex registrations retain that path. Each fresh MCP process reads the atomic
|
|
198
|
+
Viewer release target and starts the runtime bundle staged from the same
|
|
199
|
+
revision. Deployment receipts expose the staged runtime digest plus durable
|
|
200
|
+
activation or restore evidence.
|
|
201
|
+
|
|
202
|
+
The server name must stay `viewer` (or another `isViewerMcpServer()` match:
|
|
203
|
+
`viewer-*`, `agent-log-viewer*`) — transcript calls attributed to other names
|
|
204
|
+
do not render as Viewer cards.
|
|
205
|
+
|
|
206
|
+
The MCP surface includes:
|
|
207
|
+
|
|
208
|
+
- conversations and the board: `board_snapshot`, `list_conversations`,
|
|
209
|
+
`get_conversation`, `send_message`, and `conversation_action` for
|
|
210
|
+
`interrupt`, `kill`, `resume`, `compact`, and `dialog-key`;
|
|
211
|
+
- review flows: `list_flows`, `get_flow`, and `flow_action`;
|
|
212
|
+
- pipelines: `create_pipeline`, `list_pipelines`, `get_pipeline`,
|
|
213
|
+
`pipeline_action`, and `link_task_to_pipeline`;
|
|
214
|
+
- tasks: `create_task`, `list_tasks`, `get_task`, and `update_task`;
|
|
215
|
+
- operator/runtime reads: `operator_snapshot`, `deployment_status`, and
|
|
216
|
+
`resources`;
|
|
217
|
+
- agent liveness and lifecycle: `agent_activity` for the per-conversation
|
|
218
|
+
`{lastRecordAt, turnState, host alive/gone, stalledForMs}` stall snapshot, and
|
|
219
|
+
`lifecycle_events` for the durable lifecycle journal (`mode: "query"`, by
|
|
220
|
+
project/pipeline/conversation and cursor) and its bounded relay digest
|
|
221
|
+
(`mode: "digest"`, terminal events immediately, routine progress coalesced and
|
|
222
|
+
rate-limited to one per five minutes per subscriber);
|
|
223
|
+
- agent/runtime mutations: `spawn_agent`, `conversation_migration`, and
|
|
224
|
+
`deploy_exact_sha`;
|
|
225
|
+
- the operator's attention: `request_attention`, which offers to move their
|
|
226
|
+
Viewer to a target and waits for their answer. It only asks — nothing moves
|
|
227
|
+
until they agree on a device, and the request names the root agent by an
|
|
228
|
+
identity the server resolves, never one the caller supplies.
|
|
229
|
+
|
|
230
|
+
Every call requires a stable `clientRequestId`. Reusing that id with the same
|
|
231
|
+
arguments returns the durable result as a replay. Reusing it with different
|
|
232
|
+
arguments returns an idempotency conflict. Read tools are inert, bounded, and
|
|
233
|
+
secret-redacted. Mutating tools return stable operation receipts, and their
|
|
234
|
+
durable MCP receipt prevents a replay from applying the action twice.
|
|
235
|
+
`deploy_exact_sha` accepts a full 40-character commit SHA and requires
|
|
236
|
+
`confirm: "deploy"`.
|
|
237
|
+
|
|
238
|
+
The package exposes the MCP launcher as `agent-log-viewer/mcp-server` in
|
|
239
|
+
addition to the `agent-log-viewer-mcp` executable.
|
|
240
|
+
|
|
241
|
+
Tool results contain the durable entity identifiers available for that action,
|
|
242
|
+
including conversation ids, transcript paths, pipeline ids, task ids, and
|
|
243
|
+
runtime operation ids. Viewer transcripts render calls attributed to the `viewer` MCP
|
|
244
|
+
server as live cards and turn those identifiers into navigation chips.
|
|
87
245
|
|
|
88
246
|
**Prerequisites:** Node ≥ 20.9, and bun or npm/pnpm. `tmux` is optional — see
|
|
89
247
|
[Platform support](#platform-support).
|
|
@@ -91,18 +249,33 @@ file-watch limit for large home directories).
|
|
|
91
249
|
### Docker (reproducible runtime)
|
|
92
250
|
|
|
93
251
|
For a pinned, reproducible deployment the repo ships a `Dockerfile` and
|
|
94
|
-
`docker-compose.yml` that build `.next` inside the image and run the
|
|
95
|
-
with host parity
|
|
96
|
-
home directory
|
|
252
|
+
`docker-compose.yml` that build `.next` inside the image and run the Viewer
|
|
253
|
+
with host parity. The container reuses your real `tmux`, `claude`, `codex`, and
|
|
254
|
+
home directory. Runtime-host owns production releases and the listener.
|
|
255
|
+
Complete the [bootstrap listener migration](docs/docker.md#bootstrap-listener-ownership)
|
|
256
|
+
before the first runtime-host activation.
|
|
97
257
|
|
|
98
258
|
```bash
|
|
99
|
-
|
|
259
|
+
export LLV_DOCKER_GID="$(stat -c %g /var/run/docker.sock)"
|
|
260
|
+
LLV_RUNTIME_EVENTS=1 LLV_VIEWER_DEPLOYMENTS=1 docker compose --profile runtime-host up -d runtime-host
|
|
261
|
+
scripts/rebuild.sh
|
|
100
262
|
LLV_TEST_PORT=8901 docker compose --profile test up -d viewer-test
|
|
101
263
|
```
|
|
102
264
|
|
|
103
265
|
See [docs/docker.md](docs/docker.md) for the parity model, the nsenter shims,
|
|
104
266
|
and volume/port details.
|
|
105
267
|
|
|
268
|
+
### Attach to a live tmux pane
|
|
269
|
+
|
|
270
|
+
The Viewer resolves and copies a complete command for each live pane. Paste that command into a normal shell; it selects the supervisor endpoint and the current pane coordinate. The read-only variant adds `-r`.
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
TMUX_TMPDIR='/run/user/1000/agent-log-viewer' tmux attach-session -t 'agents:2.0'
|
|
274
|
+
TMUX_TMPDIR='/run/user/1000/agent-log-viewer' tmux attach-session -r -t 'agents:2.0'
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Detach with `Ctrl-b d` and the agent keeps running. An unqualified tmux command may use a different server. Refresh and copy again after a stale-pane or restarted-server message; the fresh command accounts for window renumbering. See [the Docker guide](docs/docker.md#attach-to-a-viewer-pane) for the supervisor migration context.
|
|
278
|
+
|
|
106
279
|
### CLI options
|
|
107
280
|
|
|
108
281
|
```
|
|
@@ -232,6 +405,11 @@ All optional. Transcription variables are documented in full in
|
|
|
232
405
|
| `LLV_WHISPER_VENV` | Path to the whisper virtualenv (default `~/.cache/agent-log-viewer/whisper-venv`). |
|
|
233
406
|
| `LLV_ELEVENLABS_STT_MODEL` | ElevenLabs batch model override. |
|
|
234
407
|
| `ELEVENLABS_API_KEY` | ElevenLabs API key for the ElevenLabs backend. |
|
|
408
|
+
| `LLV_REAPER_ENABLED` | `1` enables verified pane and detached-reviewer process cleanup by the deterministic agent reaper. Unset keeps dry-run mode and exposes its latest report at `GET /api/lifecycle/reaper`. |
|
|
409
|
+
| `LLV_SCHEME_PROJECT_CAP` | Number of most-recent projects rendered by the scheme feed (default `10`). List and search remain complete. |
|
|
410
|
+
| `LLV_SCHEME_CARDS_PER_PROJECT` | Maximum scanner entries rendered per scheme project (default `80`). List and search remain complete. |
|
|
411
|
+
| `NEXT_PUBLIC_LLV_SCHEME_AGE_HORIZON_HOURS` | Age horizon in hours for automatic card placement on the project scheme (default `48`). A root conversation with activity inside the horizon keeps an automatic card even while idle; older roots leave the canvas for quiet history and «All conversations». Live or running conversations and manually placed cards are never removed by the horizon. Inlined at build time (`NEXT_PUBLIC_*`). |
|
|
412
|
+
| `LLV_HEADLESS_REAPER_THRESHOLD_MS` | Minimum age in milliseconds for the always-active leaked Codex/MCP safety reaper (default `7200000`, two hours; minimum accepted value `60000`). |
|
|
235
413
|
| `LLV_DOCKER_NSENTER_SHIMS` | `1` makes the agent CLI resolver prefer the container's `/usr/local/bin` nsenter shims for host CLIs. Set automatically by the Docker image; leave unset on a host runtime. See [docs/docker.md](docs/docker.md). |
|
|
236
414
|
|
|
237
415
|
## Config paths
|
|
@@ -244,8 +422,9 @@ package:
|
|
|
244
422
|
- `~/.cache/agent-log-viewer/whisper-venv` — the local transcription
|
|
245
423
|
virtualenv.
|
|
246
424
|
|
|
247
|
-
Legacy `live-log-viewer` paths
|
|
248
|
-
existing
|
|
425
|
+
Legacy `live-log-viewer` paths remain valid fallbacks. When a legacy config or
|
|
426
|
+
cache file is the resolved existing file, subsequent updates keep using that
|
|
427
|
+
same path so existing setups continue without a forced move.
|
|
249
428
|
|
|
250
429
|
## Architecture
|
|
251
430
|
|
package/bin/cli.mjs
CHANGED
|
@@ -8,6 +8,14 @@ import { dirname, join } from "node:path";
|
|
|
8
8
|
import { fileURLToPath } from "node:url";
|
|
9
9
|
|
|
10
10
|
import { detectTailscale, getToken, readStatus, serve as serveTailscale, TailscaleError } from "./tailscale.mjs";
|
|
11
|
+
import {
|
|
12
|
+
discardWakatimeEnvironmentCredential,
|
|
13
|
+
viewerChildProcessOptions,
|
|
14
|
+
viewerServerBunRuntime,
|
|
15
|
+
withoutWakatimeCredential,
|
|
16
|
+
} from "./server-runtime.mjs";
|
|
17
|
+
|
|
18
|
+
discardWakatimeEnvironmentCredential();
|
|
11
19
|
|
|
12
20
|
const DEFAULT_PORT = 8898;
|
|
13
21
|
const DEFAULT_HOSTNAME = "127.0.0.1";
|
|
@@ -44,6 +52,7 @@ Options:
|
|
|
44
52
|
--tailscale Access over Tailscale
|
|
45
53
|
--no-open Don't open the browser
|
|
46
54
|
--new-token Create a new access key
|
|
55
|
+
--new-operator-token Rotate the operator spawn capability
|
|
47
56
|
-v, --version Show the version
|
|
48
57
|
-h, --help Show this help`,
|
|
49
58
|
badPort: (value) => `Invalid port: ${value}`,
|
|
@@ -74,6 +83,7 @@ Options:
|
|
|
74
83
|
--tailscale Доступ через Tailscale
|
|
75
84
|
--no-open Не відкривати браузер
|
|
76
85
|
--new-token Створити новий ключ доступу
|
|
86
|
+
--new-operator-token Оновити операторський ключ запуску агентів
|
|
77
87
|
-v, --version Показати версію
|
|
78
88
|
-h, --help Показати довідку`,
|
|
79
89
|
badPort: (value) => `Некоректний порт: ${value}`,
|
|
@@ -131,6 +141,7 @@ function parseArgs(args) {
|
|
|
131
141
|
tailscale: false,
|
|
132
142
|
noOpen: false,
|
|
133
143
|
newToken: false,
|
|
144
|
+
newOperatorToken: false,
|
|
134
145
|
help: false,
|
|
135
146
|
version: false,
|
|
136
147
|
};
|
|
@@ -159,6 +170,8 @@ function parseArgs(args) {
|
|
|
159
170
|
options.noOpen = true;
|
|
160
171
|
} else if (arg === "--new-token") {
|
|
161
172
|
options.newToken = true;
|
|
173
|
+
} else if (arg === "--new-operator-token") {
|
|
174
|
+
options.newOperatorToken = true;
|
|
162
175
|
} else if (arg === "-v" || arg === "--version") {
|
|
163
176
|
options.version = true;
|
|
164
177
|
} else if (arg === "-h" || arg === "--help") {
|
|
@@ -206,11 +219,15 @@ function readPackageJson(packageRoot) {
|
|
|
206
219
|
}
|
|
207
220
|
|
|
208
221
|
function resolveServer(packageRoot) {
|
|
222
|
+
const bunRuntime = viewerServerBunRuntime();
|
|
223
|
+
const commandFor = (command, args, bunEntry = command, bunArgs = args) => bunRuntime
|
|
224
|
+
? { command: bunRuntime, args: ["--bun", bunEntry, ...bunArgs] }
|
|
225
|
+
: { command, args };
|
|
209
226
|
const publishedStandalone = join(packageRoot, "dist", "standalone", "server.js");
|
|
210
227
|
if (existsSync(publishedStandalone)) {
|
|
228
|
+
const launch = commandFor(process.execPath, [publishedStandalone], publishedStandalone, []);
|
|
211
229
|
return {
|
|
212
|
-
|
|
213
|
-
args: [publishedStandalone],
|
|
230
|
+
...launch,
|
|
214
231
|
cwd: join(packageRoot, "dist", "standalone"),
|
|
215
232
|
label: "server.js",
|
|
216
233
|
};
|
|
@@ -218,9 +235,9 @@ function resolveServer(packageRoot) {
|
|
|
218
235
|
|
|
219
236
|
const repoStandalone = join(packageRoot, ".next", "standalone", "server.js");
|
|
220
237
|
if (existsSync(repoStandalone)) {
|
|
238
|
+
const launch = commandFor(process.execPath, [repoStandalone], repoStandalone, []);
|
|
221
239
|
return {
|
|
222
|
-
|
|
223
|
-
args: [repoStandalone],
|
|
240
|
+
...launch,
|
|
224
241
|
cwd: join(packageRoot, ".next", "standalone"),
|
|
225
242
|
label: "server.js",
|
|
226
243
|
};
|
|
@@ -232,21 +249,44 @@ function resolveServer(packageRoot) {
|
|
|
232
249
|
}
|
|
233
250
|
|
|
234
251
|
return {
|
|
235
|
-
|
|
236
|
-
args: ["start"],
|
|
252
|
+
...commandFor(nextBin, ["start"]),
|
|
237
253
|
cwd: packageRoot,
|
|
238
254
|
label: "next start",
|
|
239
255
|
};
|
|
240
256
|
}
|
|
241
257
|
|
|
242
|
-
function buildChildEnv(options, runtime) {
|
|
258
|
+
function buildChildEnv(options, runtime, packageRoot) {
|
|
243
259
|
const env = {
|
|
244
|
-
...process.env,
|
|
260
|
+
...withoutWakatimeCredential(process.env),
|
|
245
261
|
PORT: String(options.port),
|
|
246
262
|
// zsh exports HOSTNAME with the machine name on this user's machine; setting it here keeps standalone bound to the requested address.
|
|
247
263
|
HOSTNAME: options.hostname,
|
|
248
264
|
};
|
|
249
265
|
|
|
266
|
+
// The standalone server runs with cwd inside dist/standalone, so the
|
|
267
|
+
// Telegram connector assets (issue #1059) are pinned to the package root
|
|
268
|
+
// explicitly; a pre-set override always wins.
|
|
269
|
+
const telegramVendor = join(packageRoot, "vendor", "telegram-mcp");
|
|
270
|
+
if (!env.LLV_TELEGRAM_VENDOR_DIR && existsSync(telegramVendor)) {
|
|
271
|
+
env.LLV_TELEGRAM_VENDOR_DIR = telegramVendor;
|
|
272
|
+
}
|
|
273
|
+
const telegramBridge = join(packageRoot, "bin", "telegram-login-bridge.py");
|
|
274
|
+
if (!env.LLV_TELEGRAM_BRIDGE && existsSync(telegramBridge)) {
|
|
275
|
+
env.LLV_TELEGRAM_BRIDGE = telegramBridge;
|
|
276
|
+
}
|
|
277
|
+
const telegramServerBridge = join(packageRoot, "bin", "telegram-mcp-server.py");
|
|
278
|
+
if (!env.LLV_TELEGRAM_SERVER_BRIDGE && existsSync(telegramServerBridge)) {
|
|
279
|
+
env.LLV_TELEGRAM_SERVER_BRIDGE = telegramServerBridge;
|
|
280
|
+
}
|
|
281
|
+
const telegramSessionReader = join(packageRoot, "bin", "telegram-session-reader.mjs");
|
|
282
|
+
if (!env.LLV_TELEGRAM_SESSION_READER && existsSync(telegramSessionReader)) {
|
|
283
|
+
env.LLV_TELEGRAM_SESSION_READER = telegramSessionReader;
|
|
284
|
+
}
|
|
285
|
+
const telegramProvisioner = join(packageRoot, "bin", "provision-telegram-connector.mjs");
|
|
286
|
+
if (!env.LLV_TELEGRAM_PROVISIONER && existsSync(telegramProvisioner)) {
|
|
287
|
+
env.LLV_TELEGRAM_PROVISIONER = telegramProvisioner;
|
|
288
|
+
}
|
|
289
|
+
|
|
250
290
|
if (runtime.llvToken) {
|
|
251
291
|
env.LLV_TOKEN = runtime.llvToken;
|
|
252
292
|
}
|
|
@@ -259,15 +299,19 @@ function buildChildEnv(options, runtime) {
|
|
|
259
299
|
env.LLV_TS_URL = runtime.tailnetUrl;
|
|
260
300
|
}
|
|
261
301
|
|
|
302
|
+
if (options.newOperatorToken) {
|
|
303
|
+
env.LLV_ROTATE_OPERATOR_SPAWN_CAPABILITY = "1";
|
|
304
|
+
}
|
|
305
|
+
|
|
262
306
|
return env;
|
|
263
307
|
}
|
|
264
308
|
|
|
265
|
-
function startServer(server, options, runtime, tailscaleProcessRef) {
|
|
266
|
-
const child = spawn(server.command, server.args, {
|
|
309
|
+
function startServer(server, options, runtime, tailscaleProcessRef, packageRoot) {
|
|
310
|
+
const child = spawn(server.command, server.args, viewerChildProcessOptions({
|
|
267
311
|
cwd: server.cwd,
|
|
268
|
-
env: buildChildEnv(options, runtime),
|
|
312
|
+
env: buildChildEnv(options, runtime, packageRoot),
|
|
269
313
|
stdio: ["ignore", "inherit", "pipe"],
|
|
270
|
-
});
|
|
314
|
+
}));
|
|
271
315
|
|
|
272
316
|
const state = {
|
|
273
317
|
sawAddressInUse: false,
|
|
@@ -368,7 +412,7 @@ function localUrl(options) {
|
|
|
368
412
|
}
|
|
369
413
|
|
|
370
414
|
function printBanner(version, options) {
|
|
371
|
-
console.log(` ✳
|
|
415
|
+
console.log(` ✳ Agent Log Viewer v${version}`);
|
|
372
416
|
console.log(m.bannerOpened(localUrl(options)));
|
|
373
417
|
console.log(m.bannerReads());
|
|
374
418
|
console.log(m.bannerStop());
|
|
@@ -400,10 +444,10 @@ function openBrowser(url) {
|
|
|
400
444
|
return;
|
|
401
445
|
}
|
|
402
446
|
|
|
403
|
-
const child = spawn(opener, [url], {
|
|
447
|
+
const child = spawn(opener, [url], viewerChildProcessOptions({
|
|
404
448
|
stdio: "ignore",
|
|
405
449
|
detached: true,
|
|
406
|
-
});
|
|
450
|
+
}));
|
|
407
451
|
child.unref();
|
|
408
452
|
}
|
|
409
453
|
|
|
@@ -583,7 +627,7 @@ async function main() {
|
|
|
583
627
|
|
|
584
628
|
const server = resolveServer(packageRoot);
|
|
585
629
|
const tailscaleProcessRef = { current: null };
|
|
586
|
-
const serverProcess = startServer(server, options, runtime, tailscaleProcessRef);
|
|
630
|
+
const serverProcess = startServer(server, options, runtime, tailscaleProcessRef, packageRoot);
|
|
587
631
|
installSignalHandlers(serverProcess, tailscaleProcessRef);
|
|
588
632
|
|
|
589
633
|
if (options.tailscale && runtime.tailscalePath) {
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { createHash } from "node:crypto";
|
|
5
|
+
import { existsSync, fstatSync, readFileSync } from "node:fs";
|
|
6
|
+
import { dirname, join } from "node:path";
|
|
7
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
discardWakatimeEnvironmentCredential,
|
|
11
|
+
viewerChildProcessOptions,
|
|
12
|
+
viewerServerBunRuntime,
|
|
13
|
+
} from "./server-runtime.mjs";
|
|
14
|
+
|
|
15
|
+
discardWakatimeEnvironmentCredential();
|
|
16
|
+
|
|
17
|
+
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
18
|
+
let selectedReleaseRevision = null;
|
|
19
|
+
|
|
20
|
+
function deployedPackageRoot() {
|
|
21
|
+
const configRoot = process.env.XDG_CONFIG_HOME || join(process.env.HOME || "/home/user", ".config");
|
|
22
|
+
const stateDir = process.env.LLV_STATE_DIR || join(configRoot, "agent-log-viewer", "state");
|
|
23
|
+
const targetFile = process.env.LLV_VIEWER_DEPLOY_TARGET || join(stateDir, "viewer-release.json");
|
|
24
|
+
let target;
|
|
25
|
+
try {
|
|
26
|
+
target = JSON.parse(readFileSync(targetFile, "utf8"));
|
|
27
|
+
} catch (error) {
|
|
28
|
+
if (error?.code === "ENOENT") return packageRoot;
|
|
29
|
+
throw new Error(`Could not read the Viewer release target: ${error instanceof Error ? error.message : String(error)}`);
|
|
30
|
+
}
|
|
31
|
+
if (!target
|
|
32
|
+
|| typeof target !== "object"
|
|
33
|
+
|| Array.isArray(target)
|
|
34
|
+
|| typeof target.image !== "string"
|
|
35
|
+
|| typeof target.container !== "string"
|
|
36
|
+
|| typeof target.endpoint !== "string"
|
|
37
|
+
|| typeof target.revision !== "string"
|
|
38
|
+
|| !/^[0-9a-f]{40}$/.test(target.revision)) {
|
|
39
|
+
throw new Error("The active Viewer release target is invalid.");
|
|
40
|
+
}
|
|
41
|
+
selectedReleaseRevision = target.revision;
|
|
42
|
+
const runtime = target.mcpRuntime;
|
|
43
|
+
if (runtime === undefined) return packageRoot;
|
|
44
|
+
if (!runtime
|
|
45
|
+
|| typeof runtime !== "object"
|
|
46
|
+
|| runtime.source !== "managed"
|
|
47
|
+
|| typeof runtime.releaseId !== "string"
|
|
48
|
+
|| !/^[a-z0-9-]+$/.test(runtime.releaseId)
|
|
49
|
+
|| typeof runtime.revision !== "string"
|
|
50
|
+
|| runtime.revision !== target.revision
|
|
51
|
+
|| !/^[0-9a-f]{40}$/.test(runtime.revision)
|
|
52
|
+
|| typeof runtime.artifactDigest !== "string"
|
|
53
|
+
|| !/^[0-9a-f]{64}$/.test(runtime.artifactDigest)
|
|
54
|
+
|| typeof runtime.stagedAt !== "string") {
|
|
55
|
+
throw new Error("The active Viewer release has an invalid MCP runtime identity.");
|
|
56
|
+
}
|
|
57
|
+
const releasesRoot = join(stateDir, "mcp-runtime", "releases");
|
|
58
|
+
const releaseRoot = join(releasesRoot, runtime.releaseId);
|
|
59
|
+
const bundle = join(releaseRoot, "dist", "mcp-server.mjs");
|
|
60
|
+
let bundled;
|
|
61
|
+
try {
|
|
62
|
+
bundled = readFileSync(bundle);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
/* Same policy as an absent release target: a runtime the deployment never
|
|
65
|
+
published (or already retired) falls back to this image's own bundle
|
|
66
|
+
instead of leaving the operator with no MCP server at all. */
|
|
67
|
+
if (error?.code === "ENOENT") return packageRoot;
|
|
68
|
+
throw new Error(`Could not read the published MCP runtime bundle: ${error instanceof Error ? error.message : String(error)}`);
|
|
69
|
+
}
|
|
70
|
+
const artifactDigest = createHash("sha256").update(bundled).digest("hex");
|
|
71
|
+
if (artifactDigest !== runtime.artifactDigest) {
|
|
72
|
+
throw new Error("MCP runtime bundle digest does not match the active release.");
|
|
73
|
+
}
|
|
74
|
+
return releaseRoot;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const selectedPackageRoot = deployedPackageRoot();
|
|
78
|
+
if (selectedReleaseRevision) process.env.LLV_HOT_STATE_RELEASE_REVISION = selectedReleaseRevision;
|
|
79
|
+
const bundled = join(selectedPackageRoot, "dist", "mcp-server.mjs");
|
|
80
|
+
const source = join(selectedPackageRoot, "src", "lib", "mcp", "entry.ts");
|
|
81
|
+
|
|
82
|
+
async function runChild(runtime, entry) {
|
|
83
|
+
let admissionChannel = false;
|
|
84
|
+
try {
|
|
85
|
+
admissionChannel = fstatSync(3).isSocket();
|
|
86
|
+
} catch {
|
|
87
|
+
admissionChannel = false;
|
|
88
|
+
}
|
|
89
|
+
const child = spawn(runtime, [entry], viewerChildProcessOptions({
|
|
90
|
+
cwd: selectedPackageRoot,
|
|
91
|
+
env: {
|
|
92
|
+
...process.env,
|
|
93
|
+
...(selectedReleaseRevision ? { LLV_HOT_STATE_RELEASE_REVISION: selectedReleaseRevision } : {}),
|
|
94
|
+
},
|
|
95
|
+
stdio: admissionChannel ? [0, 1, 2, 3] : [0, 1, 2, "ignore"],
|
|
96
|
+
}));
|
|
97
|
+
let childExited = false;
|
|
98
|
+
const forwardInterrupt = () => {
|
|
99
|
+
if (!childExited) child.kill("SIGINT");
|
|
100
|
+
};
|
|
101
|
+
const forwardTermination = () => {
|
|
102
|
+
if (!childExited) child.kill("SIGTERM");
|
|
103
|
+
};
|
|
104
|
+
process.on("SIGINT", forwardInterrupt);
|
|
105
|
+
process.on("SIGTERM", forwardTermination);
|
|
106
|
+
await new Promise((resolve) => {
|
|
107
|
+
let settled = false;
|
|
108
|
+
const finish = (exitCode) => {
|
|
109
|
+
if (settled) return;
|
|
110
|
+
settled = true;
|
|
111
|
+
childExited = true;
|
|
112
|
+
process.removeListener("SIGINT", forwardInterrupt);
|
|
113
|
+
process.removeListener("SIGTERM", forwardTermination);
|
|
114
|
+
process.exitCode = exitCode;
|
|
115
|
+
resolve();
|
|
116
|
+
};
|
|
117
|
+
child.once("error", (error) => {
|
|
118
|
+
console.error(`Could not start the Viewer MCP server: ${error.message}`);
|
|
119
|
+
finish(1);
|
|
120
|
+
});
|
|
121
|
+
child.once("exit", (code, signal) => {
|
|
122
|
+
finish(code ?? (signal ? 1 : 0));
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (existsSync(bundled)) {
|
|
128
|
+
const bunRuntime = viewerServerBunRuntime();
|
|
129
|
+
if (bunRuntime && !process.versions.bun) await runChild(bunRuntime, bundled);
|
|
130
|
+
else await import(pathToFileURL(bundled).href);
|
|
131
|
+
} else if (process.versions.bun) {
|
|
132
|
+
await import(pathToFileURL(source).href);
|
|
133
|
+
} else {
|
|
134
|
+
const bun = process.env.LLV_BUN_EXECUTABLE || "bun";
|
|
135
|
+
await runChild(bun, source);
|
|
136
|
+
}
|