agent-log-viewer 1.0.0 → 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 +12 -21
- package/bin/cli.mjs +28 -4
- package/bin/mcp-server.mjs +7 -0
- package/bin/mcp-server.test.ts +2 -0
- package/bin/provision-telegram-connector.mjs +193 -0
- package/bin/server-runtime.mjs +4 -8
- package/bin/server-runtime.test.ts +46 -7
- 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 +31771 -25627
- package/dist/standalone/.next/BUILD_ID +1 -1
- package/dist/standalone/.next/app-path-routes-manifest.json +22 -15
- package/dist/standalone/.next/build-manifest.json +3 -3
- package/dist/standalone/.next/prerender-manifest.json +3 -3
- package/dist/standalone/.next/react-loadable-manifest.json +19 -0
- package/dist/standalone/.next/required-server-files.json +4 -1
- package/dist/standalone/.next/routes-manifest.json +48 -6
- 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 +2 -2
- package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
- 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 -1
- package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js +4 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js +4 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js +4 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/route.js +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js +4 -1
- package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js +1 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js +1 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/route.js +1 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js +4 -1
- package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/accounts/route.js +1 -1
- package/dist/standalone/.next/server/app/api/accounts/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/agent/route.js +1 -1
- package/dist/standalone/.next/server/app/api/agent/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/agent/snapshot/route.js +1 -1
- package/dist/standalone/.next/server/app/api/agent/snapshot/route.js.nft.json +1 -1
- 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/{orchestrator → artifact}/route.js.nft.json +1 -1
- 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 -1
- package/dist/standalone/.next/server/app/api/attach-command/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/attention/[id]/route.js +1 -1
- package/dist/standalone/.next/server/app/api/attention/[id]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/attention/route.js +1 -1
- package/dist/standalone/.next/server/app/api/attention/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/board/route.js +1 -1
- package/dist/standalone/.next/server/app/api/board/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/bridge/route.js +2 -2
- package/dist/standalone/.next/server/app/api/bridge/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js +1 -1
- package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/conversations/route.js +1 -1
- package/dist/standalone/.next/server/app/api/conversations/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/files/route.js +2 -2
- 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 -1
- package/dist/standalone/.next/server/app/api/lifecycle/reaper/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/limits/history/route.js +4 -1
- package/dist/standalone/.next/server/app/api/limits/history/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/limits/route.js +4 -1
- 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 -1
- package/dist/standalone/.next/server/app/api/log/preflight/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/log/project-delete/route.js +1 -1
- package/dist/standalone/.next/server/app/api/log/project-delete/route.js.nft.json +1 -1
- 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 +2 -2
- 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 +2 -2
- package/dist/standalone/.next/server/app/api/monitor/lock/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/monitor/runs/route.js +1 -1
- package/dist/standalone/.next/server/app/api/monitor/runs/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js +1 -1
- package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js +1 -1
- package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js.nft.json +1 -1
- 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 -1
- package/dist/standalone/.next/server/app/api/pipelines/[id]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js +1 -1
- package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/pipelines/route.js +2 -2
- package/dist/standalone/.next/server/app/api/pipelines/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/pipelines/tick/route.js +2 -2
- package/dist/standalone/.next/server/app/api/pipelines/tick/route.js.nft.json +1 -1
- 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 -2
- 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 -2
- package/dist/standalone/.next/server/app/api/roles/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/answer/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/answer/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/deployments/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/operations/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/operations/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/realtime/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/realtime/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/send/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/send/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/spawn/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/spawn/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/steer/route.js +1 -1
- package/dist/standalone/.next/server/app/api/runtime/steer/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/runtime/stream/route.js +2 -2
- package/dist/standalone/.next/server/app/api/runtime/stream/route.js.nft.json +1 -1
- 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 -1
- package/dist/standalone/.next/server/app/api/session/supersedence/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/session/title/route.js +1 -1
- package/dist/standalone/.next/server/app/api/session/title/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/spawn/policy/route.js +6 -3
- package/dist/standalone/.next/server/app/api/spawn/policy/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/spawn/route.js +2 -2
- 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 -2
- package/dist/standalone/.next/server/app/api/staging/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/task-attachments/route.js +2 -2
- package/dist/standalone/.next/server/app/api/task-attachments/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tasks/[id]/assignment/route.js +1 -1
- 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 -1
- 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 +2 -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 -1
- package/dist/standalone/.next/server/app/api/tts/backend/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/tts/route.js +3 -3
- package/dist/standalone/.next/server/app/api/tts/route.js.nft.json +1 -1
- package/dist/standalone/.next/server/app/api/view/presence/route.js +1 -2
- package/dist/standalone/.next/server/app/api/view/presence/route.js.nft.json +1 -1
- 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 +3 -3
- package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- 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 +41 -24
- 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 +22 -15
- package/dist/standalone/.next/server/chunks/156.js +2 -2
- package/dist/standalone/.next/server/chunks/1617.js +2 -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/1920.js +1 -1
- package/dist/standalone/.next/server/chunks/2190.js +1 -1
- 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 -1
- package/dist/standalone/.next/server/chunks/306.js +3 -3
- 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/3336.js +1 -1
- package/dist/standalone/.next/server/chunks/3558.js +1 -1
- package/dist/standalone/.next/server/chunks/3587.js +1 -1
- package/dist/standalone/.next/server/chunks/3598.js +81 -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/3916.js +1 -0
- package/dist/standalone/.next/server/chunks/3953.js +1 -0
- package/dist/standalone/.next/server/chunks/4012.js +2 -2
- package/dist/standalone/.next/server/chunks/4191.js +1 -1
- package/dist/standalone/.next/server/chunks/4260.js +2 -2
- package/dist/standalone/.next/server/chunks/4509.js +1 -1
- package/dist/standalone/.next/server/chunks/4968.js +1 -1
- package/dist/standalone/.next/server/chunks/4972.js +130 -2
- 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/6796.js +1 -0
- package/dist/standalone/.next/server/chunks/6826.js +2 -2
- package/dist/standalone/.next/server/chunks/6850.js +1 -1
- 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 +16 -14
- package/dist/standalone/.next/server/chunks/7563.js +1 -1
- package/dist/standalone/.next/server/chunks/7644.js +13 -0
- package/dist/standalone/.next/server/chunks/7722.js +1 -1
- 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/8176.js +1 -1
- package/dist/standalone/.next/server/chunks/8444.js +1 -1
- 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/8600.js +12 -0
- package/dist/standalone/.next/server/chunks/8617.js +2 -0
- package/dist/standalone/.next/server/chunks/8797.js +1 -1
- package/dist/standalone/.next/server/chunks/8817.js +5 -0
- package/dist/standalone/.next/server/chunks/8966.js +2 -2
- 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 +3 -3
- 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 +6 -3
- 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/static/media/pdf.worker.min.65fe1ff1.mjs +6 -0
- package/dist/standalone/.next/server/file-scanner-worker.js +2 -2
- package/dist/standalone/.next/server/files-response-worker.js +5 -5
- package/dist/standalone/.next/server/functions-config-manifest.json +8 -1
- package/dist/standalone/.next/server/instrumentation.js +1 -1
- 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/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 -1
- 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/2619.fd64e7a5bd9005d5.js +1 -0
- package/dist/standalone/.next/static/chunks/8293.5545fdbde0213c98.js +1 -0
- package/dist/standalone/.next/static/chunks/9178-e32f088e89b55503.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/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/page-ac9463b910bf83fe.js +77 -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/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 +9 -5
- package/dist/standalone/server.bun.js +38 -0
- package/dist/standalone/server.js +18 -37
- package/package.json +9 -5
- 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/app/api/orchestrator/route.js +0 -1
- package/dist/standalone/.next/server/app/api/orchestrator/route_client-reference-manifest.js +0 -1
- package/dist/standalone/.next/server/chunks/1699.js +0 -1
- package/dist/standalone/.next/server/chunks/2596.js +0 -1
- package/dist/standalone/.next/server/chunks/3886.js +0 -1
- package/dist/standalone/.next/server/chunks/4792.js +0 -101
- package/dist/standalone/.next/server/chunks/5622.js +0 -2
- package/dist/standalone/.next/server/chunks/616.js +0 -42
- package/dist/standalone/.next/server/chunks/620.js +0 -1
- package/dist/standalone/.next/server/chunks/6299.js +0 -4
- package/dist/standalone/.next/server/chunks/9598.js +0 -1
- package/dist/standalone/.next/server/chunks/9936.js +0 -6
- package/dist/standalone/.next/static/5aZdjqUDNxpxX8nVsuO2S/_buildManifest.js +0 -1
- package/dist/standalone/.next/static/chunks/9260-0e7e550c65609f11.js +0 -1
- package/dist/standalone/.next/static/chunks/app/_global-error/page-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/access/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/account-migrations/[intentId]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/[id]/status/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/active/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/input/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/policy/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/claude/terminal/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/active/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/policy/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/codex/terminal/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/accounts/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/agent/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/agent/snapshot/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/answer/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/attach-command/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/attention/[id]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/attention/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/board/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/bridge/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/conversations/[conversationId]/migration/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/conversations/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/files/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/flows/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/image/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/inbox/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/lifecycle/reaper/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/limits/history/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/limits/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/log/preflight/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/log/project-delete/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/log/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/logs/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/logs/stream/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/monitor/lock/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/monitor/runs/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/orchestrator/rotate/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/orchestrator/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/pipelines/[id]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/pipelines/preflight/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/pipelines/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/pipelines/tick/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/proc/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/push/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/resources/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/roles/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/answer/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/[deploymentId]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/capabilities/v1/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/interrupt/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/operations/[operationId]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/operations/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/realtime/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/send/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/snapshot/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/spawn/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/steer/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/runtime/stream/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/session/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/session/supersedence/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/session/title/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/spawn/policy/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/spawn/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/staging/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/task-attachments/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/assignment/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/curator/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tasks/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/timeline/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tmux/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tmux/targets/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/transcribe/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tts/backend/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/tts/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/view/presence/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/api/workflows/route-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/app/page-45fd788b5dbb86eb.js +0 -57
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-483eb859fba02a43.js +0 -1
- package/dist/standalone/.next/static/chunks/webpack-46c1a0323c2ca312.js +0 -1
- package/dist/standalone/.next/static/css/b5b2fbc52caf460a.css +0 -1
- /package/dist/standalone/.next/static/{5aZdjqUDNxpxX8nVsuO2S → kt9OPe8iwfpNcdOX9ygvb}/_ssgManifest.js +0 -0
package/README.md
CHANGED
|
@@ -7,8 +7,9 @@ parent→child tree, and tails the selected one in real time.
|
|
|
7
7
|
|
|
8
8
|

|
|
9
9
|
|
|
10
|
-
The default setup runs locally against
|
|
11
|
-
|
|
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.
|
|
12
13
|
Optional outbound integrations stay disabled until you configure them:
|
|
13
14
|
|
|
14
15
|
```bash
|
|
@@ -94,38 +95,27 @@ bunx agent-log-viewer
|
|
|
94
95
|
npx agent-log-viewer
|
|
95
96
|
```
|
|
96
97
|
|
|
97
|
-
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.
|
|
98
101
|
|
|
99
102
|
### From a local clone
|
|
100
103
|
|
|
101
|
-
With bun:
|
|
102
|
-
|
|
103
104
|
```bash
|
|
104
105
|
bun install
|
|
105
106
|
bun run build
|
|
106
|
-
bun
|
|
107
|
+
bun run start -- --port 8898 --hostname 127.0.0.1
|
|
107
108
|
# open http://127.0.0.1:8898/
|
|
108
109
|
```
|
|
109
110
|
|
|
110
|
-
With npm (note the `--` that forwards flags to the start script):
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
npm install
|
|
114
|
-
npm run build
|
|
115
|
-
npm start -- --port 8898 --hostname 127.0.0.1
|
|
116
|
-
```
|
|
117
|
-
|
|
118
111
|
`start` serves the output of the last `build`, so run `build` first. For
|
|
119
112
|
development, `bun dev` runs the app with hot reload (it needs a high OS
|
|
120
113
|
file-watch limit for large home directories).
|
|
121
114
|
|
|
122
|
-
The
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
CLI select Bun unless `LLV_STRUCTURED_HOSTS=0` rolls it back and
|
|
127
|
-
`LLV_AGENT_REGISTRY_SQLITE` is off. Local source checkouts should use the
|
|
128
|
-
explicit `bun --bun` command above.
|
|
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.
|
|
129
119
|
|
|
130
120
|
### Spawn transport
|
|
131
121
|
|
|
@@ -418,6 +408,7 @@ All optional. Transcription variables are documented in full in
|
|
|
418
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`. |
|
|
419
409
|
| `LLV_SCHEME_PROJECT_CAP` | Number of most-recent projects rendered by the scheme feed (default `10`). List and search remain complete. |
|
|
420
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_*`). |
|
|
421
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`). |
|
|
422
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). |
|
|
423
414
|
|
package/bin/cli.mjs
CHANGED
|
@@ -255,7 +255,7 @@ function resolveServer(packageRoot) {
|
|
|
255
255
|
};
|
|
256
256
|
}
|
|
257
257
|
|
|
258
|
-
function buildChildEnv(options, runtime) {
|
|
258
|
+
function buildChildEnv(options, runtime, packageRoot) {
|
|
259
259
|
const env = {
|
|
260
260
|
...withoutWakatimeCredential(process.env),
|
|
261
261
|
PORT: String(options.port),
|
|
@@ -263,6 +263,30 @@ function buildChildEnv(options, runtime) {
|
|
|
263
263
|
HOSTNAME: options.hostname,
|
|
264
264
|
};
|
|
265
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
|
+
|
|
266
290
|
if (runtime.llvToken) {
|
|
267
291
|
env.LLV_TOKEN = runtime.llvToken;
|
|
268
292
|
}
|
|
@@ -282,10 +306,10 @@ function buildChildEnv(options, runtime) {
|
|
|
282
306
|
return env;
|
|
283
307
|
}
|
|
284
308
|
|
|
285
|
-
function startServer(server, options, runtime, tailscaleProcessRef) {
|
|
309
|
+
function startServer(server, options, runtime, tailscaleProcessRef, packageRoot) {
|
|
286
310
|
const child = spawn(server.command, server.args, viewerChildProcessOptions({
|
|
287
311
|
cwd: server.cwd,
|
|
288
|
-
env: buildChildEnv(options, runtime),
|
|
312
|
+
env: buildChildEnv(options, runtime, packageRoot),
|
|
289
313
|
stdio: ["ignore", "inherit", "pipe"],
|
|
290
314
|
}));
|
|
291
315
|
|
|
@@ -603,7 +627,7 @@ async function main() {
|
|
|
603
627
|
|
|
604
628
|
const server = resolveServer(packageRoot);
|
|
605
629
|
const tailscaleProcessRef = { current: null };
|
|
606
|
-
const serverProcess = startServer(server, options, runtime, tailscaleProcessRef);
|
|
630
|
+
const serverProcess = startServer(server, options, runtime, tailscaleProcessRef, packageRoot);
|
|
607
631
|
installSignalHandlers(serverProcess, tailscaleProcessRef);
|
|
608
632
|
|
|
609
633
|
if (options.tailscale && runtime.tailscalePath) {
|
package/bin/mcp-server.mjs
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
discardWakatimeEnvironmentCredential();
|
|
16
16
|
|
|
17
17
|
const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
18
|
+
let selectedReleaseRevision = null;
|
|
18
19
|
|
|
19
20
|
function deployedPackageRoot() {
|
|
20
21
|
const configRoot = process.env.XDG_CONFIG_HOME || join(process.env.HOME || "/home/user", ".config");
|
|
@@ -37,6 +38,7 @@ function deployedPackageRoot() {
|
|
|
37
38
|
|| !/^[0-9a-f]{40}$/.test(target.revision)) {
|
|
38
39
|
throw new Error("The active Viewer release target is invalid.");
|
|
39
40
|
}
|
|
41
|
+
selectedReleaseRevision = target.revision;
|
|
40
42
|
const runtime = target.mcpRuntime;
|
|
41
43
|
if (runtime === undefined) return packageRoot;
|
|
42
44
|
if (!runtime
|
|
@@ -73,6 +75,7 @@ function deployedPackageRoot() {
|
|
|
73
75
|
}
|
|
74
76
|
|
|
75
77
|
const selectedPackageRoot = deployedPackageRoot();
|
|
78
|
+
if (selectedReleaseRevision) process.env.LLV_HOT_STATE_RELEASE_REVISION = selectedReleaseRevision;
|
|
76
79
|
const bundled = join(selectedPackageRoot, "dist", "mcp-server.mjs");
|
|
77
80
|
const source = join(selectedPackageRoot, "src", "lib", "mcp", "entry.ts");
|
|
78
81
|
|
|
@@ -85,6 +88,10 @@ async function runChild(runtime, entry) {
|
|
|
85
88
|
}
|
|
86
89
|
const child = spawn(runtime, [entry], viewerChildProcessOptions({
|
|
87
90
|
cwd: selectedPackageRoot,
|
|
91
|
+
env: {
|
|
92
|
+
...process.env,
|
|
93
|
+
...(selectedReleaseRevision ? { LLV_HOT_STATE_RELEASE_REVISION: selectedReleaseRevision } : {}),
|
|
94
|
+
},
|
|
88
95
|
stdio: admissionChannel ? [0, 1, 2, 3] : [0, 1, 2, "ignore"],
|
|
89
96
|
}));
|
|
90
97
|
let childExited = false;
|
package/bin/mcp-server.test.ts
CHANGED
|
@@ -76,6 +76,7 @@ test("fresh Claude and Codex hosts load the exact MCP runtime named by the promo
|
|
|
76
76
|
revision: "${candidateRevision}",
|
|
77
77
|
tools: ["deployment_status", "board_snapshot"],
|
|
78
78
|
host: process.env.LLV_TEST_HOST,
|
|
79
|
+
hotStateRevision: process.env.LLV_HOT_STATE_RELEASE_REVISION,
|
|
79
80
|
}) + "\\n");
|
|
80
81
|
process.stdin.pipe(process.stdout);
|
|
81
82
|
`;
|
|
@@ -109,6 +110,7 @@ test("fresh Claude and Codex hosts load the exact MCP runtime named by the promo
|
|
|
109
110
|
revision: candidateRevision,
|
|
110
111
|
tools: ["deployment_status", "board_snapshot"],
|
|
111
112
|
host,
|
|
113
|
+
hotStateRevision: candidateRevision,
|
|
112
114
|
});
|
|
113
115
|
expect(handshake).toBe(`${host}-initialize`);
|
|
114
116
|
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Provisions the packaged Telegram connector environment (issue #1059).
|
|
4
|
+
*
|
|
5
|
+
* Builds the Viewer-owned Python venv from the vendored pinned source
|
|
6
|
+
* (`vendor/telegram-mcp`, see its PROVENANCE.md) with `uv sync --frozen`, so a
|
|
7
|
+
* clean installation can start the connector without a manual clone and
|
|
8
|
+
* without ever resolving the poisoned `telegram-mcp` PyPI name.
|
|
9
|
+
*
|
|
10
|
+
* Ships in `bin/` with the published package (npm `files`), dependency-free,
|
|
11
|
+
* so an installed `agent-log-viewer` can run it directly:
|
|
12
|
+
*
|
|
13
|
+
* node bin/provision-telegram-connector.mjs # or: bun run telegram:provision
|
|
14
|
+
*
|
|
15
|
+
* Environment (same contract as src/lib/telegram/packaging.ts):
|
|
16
|
+
* LLV_TELEGRAM_VENDOR_DIR vendored tree (default: <package>/vendor/telegram-mcp)
|
|
17
|
+
* LLV_STATE_DIR viewer state root (default: $XDG_CONFIG_HOME/agent-log-viewer/state)
|
|
18
|
+
* LLV_TELEGRAM_PYTHON expected venv python (default: <state>/telegram/venv/bin/python)
|
|
19
|
+
*/
|
|
20
|
+
import { spawnSync } from "node:child_process";
|
|
21
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
22
|
+
import {
|
|
23
|
+
chmodSync,
|
|
24
|
+
cpSync,
|
|
25
|
+
existsSync,
|
|
26
|
+
lstatSync,
|
|
27
|
+
mkdirSync,
|
|
28
|
+
renameSync,
|
|
29
|
+
rmSync,
|
|
30
|
+
writeFileSync,
|
|
31
|
+
} from "node:fs";
|
|
32
|
+
import { homedir } from "node:os";
|
|
33
|
+
import { dirname, join, resolve } from "node:path";
|
|
34
|
+
import { fileURLToPath } from "node:url";
|
|
35
|
+
|
|
36
|
+
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
37
|
+
|
|
38
|
+
export const UV_BOOTSTRAP_VERSION = "0.7.13";
|
|
39
|
+
const MAX_UV_ARCHIVE_BYTES = 64 * 1024 * 1024;
|
|
40
|
+
const UV_DOWNLOAD_TIMEOUT_MS = 120_000;
|
|
41
|
+
const UV_SELF_CHECK_TIMEOUT_MS = 10_000;
|
|
42
|
+
const CONNECTOR_PROVISION_TIMEOUT_MS = 10 * 60_000;
|
|
43
|
+
const UV_RELEASES = Object.freeze({
|
|
44
|
+
"darwin-arm64": { triple: "aarch64-apple-darwin", sha256: "721f532b73171586574298d4311a91d5ea2c802ef4db3ebafc434239330090c6" },
|
|
45
|
+
"darwin-x64": { triple: "x86_64-apple-darwin", sha256: "d785753ac092e25316180626aa691c5dfe1fb075290457ba4fdb72c7c5661321" },
|
|
46
|
+
"linux-arm64-gnu": { triple: "aarch64-unknown-linux-gnu", sha256: "0b2ad9fe4295881615295add8cc5daa02549d29cc9a61f0578e397efcf12f08f" },
|
|
47
|
+
"linux-arm64-musl": { triple: "aarch64-unknown-linux-musl", sha256: "52baba71881c978d32b7c32216ad0cde4546a4dc62e606c9834ec4616c1610eb" },
|
|
48
|
+
"linux-x64-gnu": { triple: "x86_64-unknown-linux-gnu", sha256: "909278eb197c5ed0e9b5f16317d1255270d1f9ea4196e7179ce934d48c4c2545" },
|
|
49
|
+
"linux-x64-musl": { triple: "x86_64-unknown-linux-musl", sha256: "560bb64e060354e45138d7dd47c8dd48a4f7a349af5520d29cd3c704e79f286c" },
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
function usesGlibc() {
|
|
53
|
+
return Boolean(process.report?.getReport?.().header?.glibcVersionRuntime);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function uvReleaseFor(platform = process.platform, arch = process.arch, glibc = usesGlibc()) {
|
|
57
|
+
const libc = platform === "linux" ? (glibc ? "-gnu" : "-musl") : "";
|
|
58
|
+
const release = UV_RELEASES[`${platform}-${arch}${libc}`];
|
|
59
|
+
if (!release) throw new Error(`unsupported uv bootstrap target ${platform}-${arch}${libc}`);
|
|
60
|
+
const asset = `uv-${release.triple}.tar.gz`;
|
|
61
|
+
return {
|
|
62
|
+
...release,
|
|
63
|
+
asset,
|
|
64
|
+
url: `https://github.com/astral-sh/uv/releases/download/${UV_BOOTSTRAP_VERSION}/${asset}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function ownerOnlyDirectory(pathname) {
|
|
69
|
+
if (!existsSync(pathname)) mkdirSync(pathname, { recursive: true, mode: 0o700 });
|
|
70
|
+
const stat = lstatSync(pathname);
|
|
71
|
+
if (stat.isSymbolicLink() || !stat.isDirectory() || (stat.mode & 0o077) !== 0
|
|
72
|
+
|| (typeof process.getuid === "function" && stat.uid !== process.getuid())) {
|
|
73
|
+
throw new Error("telegram state directory is not owner-only");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function commandRuns(command) {
|
|
78
|
+
const result = spawnSync(command, ["--version"], { stdio: "ignore", timeout: UV_SELF_CHECK_TIMEOUT_MS });
|
|
79
|
+
return !result.error && result.status === 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export async function installPinnedUv(toolsDir, options = {}) {
|
|
83
|
+
const release = options.release || uvReleaseFor();
|
|
84
|
+
const fetcher = options.fetcher || fetch;
|
|
85
|
+
ownerOnlyDirectory(toolsDir);
|
|
86
|
+
const destination = join(toolsDir, "uv");
|
|
87
|
+
if (existsSync(destination)) {
|
|
88
|
+
const existing = lstatSync(destination);
|
|
89
|
+
if (existing.isSymbolicLink() || !existing.isFile() || (existing.mode & 0o077) !== 0
|
|
90
|
+
|| (typeof process.getuid === "function" && existing.uid !== process.getuid())) {
|
|
91
|
+
throw new Error("installed uv executable is unsafe");
|
|
92
|
+
}
|
|
93
|
+
if (commandRuns(destination)) return destination;
|
|
94
|
+
throw new Error("installed uv executable failed its self-check");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const installDir = join(toolsDir, `.uv-install-${process.pid}-${randomUUID()}`);
|
|
98
|
+
const archive = join(installDir, release.asset);
|
|
99
|
+
mkdirSync(installDir, { mode: 0o700 });
|
|
100
|
+
try {
|
|
101
|
+
const response = await fetcher(release.url, {
|
|
102
|
+
redirect: "follow",
|
|
103
|
+
signal: AbortSignal.timeout(UV_DOWNLOAD_TIMEOUT_MS),
|
|
104
|
+
});
|
|
105
|
+
if (!response.ok) throw new Error(`uv download failed with HTTP ${response.status}`);
|
|
106
|
+
const declaredLength = Number(response.headers.get("content-length"));
|
|
107
|
+
if (Number.isFinite(declaredLength) && declaredLength > MAX_UV_ARCHIVE_BYTES) throw new Error("uv archive is oversized");
|
|
108
|
+
const bytes = Buffer.from(await response.arrayBuffer());
|
|
109
|
+
if (bytes.length === 0 || bytes.length > MAX_UV_ARCHIVE_BYTES) throw new Error("uv archive has an invalid size");
|
|
110
|
+
const digest = createHash("sha256").update(bytes).digest("hex");
|
|
111
|
+
if (digest !== release.sha256) throw new Error("uv archive checksum mismatch");
|
|
112
|
+
writeFileSync(archive, bytes, { mode: 0o600 });
|
|
113
|
+
const extracted = spawnSync("tar", ["-xzf", archive, "-C", installDir], { stdio: "ignore" });
|
|
114
|
+
if (extracted.error || extracted.status !== 0) throw new Error("uv archive extraction failed");
|
|
115
|
+
const source = join(installDir, `uv-${release.triple}`, "uv");
|
|
116
|
+
if (!existsSync(source)) throw new Error("uv archive did not contain the expected executable");
|
|
117
|
+
chmodSync(source, 0o700);
|
|
118
|
+
renameSync(source, destination);
|
|
119
|
+
chmodSync(destination, 0o700);
|
|
120
|
+
if (!commandRuns(destination)) throw new Error("installed uv executable failed its self-check");
|
|
121
|
+
return destination;
|
|
122
|
+
} finally {
|
|
123
|
+
rmSync(installDir, { recursive: true, force: true });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export async function provisionTelegramConnector(env = process.env) {
|
|
128
|
+
const vendorDir = env.LLV_TELEGRAM_VENDOR_DIR || join(packageRoot, "vendor", "telegram-mcp");
|
|
129
|
+
const stateDir = env.LLV_STATE_DIR
|
|
130
|
+
|| join(env.XDG_CONFIG_HOME || join(homedir(), ".config"), "agent-log-viewer", "state");
|
|
131
|
+
const venvDir = join(stateDir, "telegram", "venv");
|
|
132
|
+
const venvPython = env.LLV_TELEGRAM_PYTHON || join(venvDir, "bin", "python");
|
|
133
|
+
const telegramStateDir = dirname(venvDir);
|
|
134
|
+
if (!existsSync(join(vendorDir, "pyproject.toml"))) throw new Error("vendored connector is unavailable");
|
|
135
|
+
ownerOnlyDirectory(telegramStateDir);
|
|
136
|
+
|
|
137
|
+
const uvCommand = await installPinnedUv(join(telegramStateDir, "tools"));
|
|
138
|
+
/* The packaged tree can sit on a read-only filesystem (#1081), while the
|
|
139
|
+
vendored runtime's supply-chain guard requires running from a source
|
|
140
|
+
checkout and setuptools writes build metadata into the project dir. So:
|
|
141
|
+
stage a writable owner-only copy at a STABLE path, editable-install from
|
|
142
|
+
it, and keep it — the connector runs from this copy (#1084). */
|
|
143
|
+
const sourceDir = join(telegramStateDir, "vendor-src");
|
|
144
|
+
const incoming = join(telegramStateDir, `.vendor-src-${process.pid}-${randomUUID()}`);
|
|
145
|
+
try {
|
|
146
|
+
cpSync(vendorDir, incoming, { recursive: true });
|
|
147
|
+
chmodSync(incoming, 0o700);
|
|
148
|
+
rmSync(sourceDir, { recursive: true, force: true });
|
|
149
|
+
renameSync(incoming, sourceDir);
|
|
150
|
+
} finally {
|
|
151
|
+
rmSync(incoming, { recursive: true, force: true });
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const result = spawnSync(uvCommand, ["sync", "--frozen", "--no-dev", "--project", sourceDir], {
|
|
155
|
+
cwd: sourceDir,
|
|
156
|
+
env: { ...env, UV_PROJECT_ENVIRONMENT: venvDir },
|
|
157
|
+
stdio: "inherit",
|
|
158
|
+
timeout: CONNECTOR_PROVISION_TIMEOUT_MS,
|
|
159
|
+
killSignal: "SIGKILL",
|
|
160
|
+
});
|
|
161
|
+
const failed = () => {
|
|
162
|
+
/* A partial venv must never pass a later provisioned check (#1084). */
|
|
163
|
+
rmSync(venvDir, { recursive: true, force: true });
|
|
164
|
+
rmSync(sourceDir, { recursive: true, force: true });
|
|
165
|
+
};
|
|
166
|
+
if (result.error || result.status !== 0) {
|
|
167
|
+
failed();
|
|
168
|
+
throw new Error("connector dependency provisioning failed");
|
|
169
|
+
}
|
|
170
|
+
if (!existsSync(venvPython)) {
|
|
171
|
+
failed();
|
|
172
|
+
throw new Error("provisioning completed without a Python executable");
|
|
173
|
+
}
|
|
174
|
+
/* Success is a verified import, recorded durably — bare venv existence has
|
|
175
|
+
already lied once (#1084). */
|
|
176
|
+
const probe = spawnSync(venvPython, ["-c", "import telethon, telegram_mcp"], {
|
|
177
|
+
stdio: "ignore",
|
|
178
|
+
timeout: UV_SELF_CHECK_TIMEOUT_MS * 6,
|
|
179
|
+
});
|
|
180
|
+
if (probe.error || probe.status !== 0) {
|
|
181
|
+
failed();
|
|
182
|
+
throw new Error("provisioned environment failed its import probe");
|
|
183
|
+
}
|
|
184
|
+
writeFileSync(join(venvDir, ".llv-provisioned"), "ok\n", { mode: 0o600 });
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const invokedDirectly = process.argv[1] && resolve(process.argv[1]) === fileURLToPath(import.meta.url);
|
|
188
|
+
if (invokedDirectly) {
|
|
189
|
+
provisionTelegramConnector().catch((error) => {
|
|
190
|
+
console.error("telegram connector provisioning failed:", error instanceof Error ? error.message : "unknown error");
|
|
191
|
+
process.exitCode = 1;
|
|
192
|
+
});
|
|
193
|
+
}
|
package/bin/server-runtime.mjs
CHANGED
|
@@ -31,11 +31,10 @@ export function viewerChildProcessOptions(options = {}) {
|
|
|
31
31
|
/**
|
|
32
32
|
* Mirror of `structuredHostsEnabled` (and its rollback normalisation) from
|
|
33
33
|
* `src/lib/runtime/flags.ts`. `bin/` is plain JS outside the TS build and
|
|
34
|
-
* cannot import that module, so
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* start token), so the launcher must select Bun on the same answer.
|
|
34
|
+
* cannot import that module, so `bin/server-runtime.test.ts` pins both readers
|
|
35
|
+
* to one truth table. Structured hosting and the authoritative hot-state
|
|
36
|
+
* collections use Bun SQLite. The hot-state requirement applies in every
|
|
37
|
+
* feature-flag configuration, so the packaged launcher always selects Bun.
|
|
39
38
|
*
|
|
40
39
|
* @param {Readonly<Record<string, string | undefined>>} [env]
|
|
41
40
|
*/
|
|
@@ -50,8 +49,5 @@ export function viewerServerBunRuntime(options = {}) {
|
|
|
50
49
|
const env = options.env ?? process.env;
|
|
51
50
|
const versions = options.versions ?? process.versions;
|
|
52
51
|
const execPath = options.execPath ?? process.execPath;
|
|
53
|
-
const sqliteMode = env.LLV_AGENT_REGISTRY_SQLITE ?? "off";
|
|
54
|
-
const requiresBun = sqliteMode !== "off" || structuredHostsEnabled(env);
|
|
55
|
-
if (!requiresBun) return null;
|
|
56
52
|
return versions.bun ? execPath : (env.LLV_BUN_EXECUTABLE || "bun");
|
|
57
53
|
}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import os from "node:os";
|
|
2
4
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
3
5
|
|
|
6
|
+
import { Database } from "bun:sqlite";
|
|
4
7
|
import { expect, test } from "bun:test";
|
|
5
8
|
|
|
9
|
+
import { loadFlows } from "@/lib/flows/store";
|
|
10
|
+
import { loadArchivedPipelines, loadPipelines } from "@/lib/pipelines/store";
|
|
6
11
|
import { structuredHostsEnabled as structuredHostsEnabledInApp } from "@/lib/runtime/flags";
|
|
12
|
+
import { loadWorkflows } from "@/lib/workflows/store";
|
|
7
13
|
|
|
8
14
|
import {
|
|
9
15
|
structuredHostsEnabled as structuredHostsEnabledInLauncher,
|
|
@@ -28,13 +34,19 @@ test("structured hosts select Bun for a CLI process launched by Node", () => {
|
|
|
28
34
|
|
|
29
35
|
test("the packaged helper makes the same structured-runtime choice under Node", () => {
|
|
30
36
|
const helper = path.join(path.dirname(fileURLToPath(import.meta.url)), "server-runtime.mjs");
|
|
37
|
+
const nodeSearchPath = (process.env.PATH ?? "")
|
|
38
|
+
.split(path.delimiter)
|
|
39
|
+
.filter((directory) => !path.basename(directory).startsWith("bun-node-"))
|
|
40
|
+
.join(path.delimiter);
|
|
41
|
+
const nodeExecutable = Bun.which("node", { PATH: nodeSearchPath });
|
|
42
|
+
if (!nodeExecutable) throw new Error("the packaged runtime test requires Node");
|
|
31
43
|
const probe = Bun.spawnSync([
|
|
32
|
-
|
|
44
|
+
nodeExecutable,
|
|
33
45
|
"--input-type=module",
|
|
34
46
|
"--eval",
|
|
35
47
|
`import { viewerServerBunRuntime } from ${JSON.stringify(pathToFileURL(helper).href)}; process.stdout.write(String(viewerServerBunRuntime()));`,
|
|
36
48
|
], {
|
|
37
|
-
env: { ...process.env, LLV_STRUCTURED_HOSTS: "1", LLV_BUN_EXECUTABLE: "/verified/bun" },
|
|
49
|
+
env: { ...process.env, PATH: nodeSearchPath, LLV_STRUCTURED_HOSTS: "1", LLV_BUN_EXECUTABLE: "/verified/bun" },
|
|
38
50
|
stdout: "pipe",
|
|
39
51
|
stderr: "pipe",
|
|
40
52
|
});
|
|
@@ -73,17 +85,44 @@ test.each([
|
|
|
73
85
|
] as const)("the launcher mirror and the app definition agree on %p", (value) => {
|
|
74
86
|
const env = value === undefined ? {} : { LLV_STRUCTURED_HOSTS: value };
|
|
75
87
|
expect(structuredHostsEnabledInLauncher(env)).toBe(structuredHostsEnabledInApp(env));
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
.toBe(structuredHostsEnabledInApp(env));
|
|
88
|
+
expect(viewerServerBunRuntime({ env, versions: { node: "20.9.0" }, execPath: "/usr/bin/node" }))
|
|
89
|
+
.toBe("bun");
|
|
79
90
|
});
|
|
80
91
|
|
|
81
|
-
test("
|
|
92
|
+
test("hot SQLite stores select Bun when optional Bun features are disabled", () => {
|
|
82
93
|
expect(viewerServerBunRuntime({
|
|
83
94
|
env: { LLV_AGENT_REGISTRY_SQLITE: "off", LLV_STRUCTURED_HOSTS: "0" },
|
|
84
95
|
versions: { node: "20.9.0" },
|
|
85
96
|
execPath: "/usr/bin/node",
|
|
86
|
-
})).
|
|
97
|
+
})).toBe("bun");
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("documented development and production scripts pin Bun and open every hot collection", () => {
|
|
101
|
+
const packageJson = JSON.parse(fs.readFileSync(path.join(process.cwd(), "package.json"), "utf8")) as {
|
|
102
|
+
engines: Record<string, string>;
|
|
103
|
+
scripts: Record<string, string>;
|
|
104
|
+
};
|
|
105
|
+
expect(packageJson.engines.bun).toBeTruthy();
|
|
106
|
+
expect(packageJson.scripts.dev).toContain("bun --bun");
|
|
107
|
+
expect(packageJson.scripts.start).toContain("bun --bun");
|
|
108
|
+
|
|
109
|
+
const previous = process.env.LLV_STATE_DIR;
|
|
110
|
+
const sandbox = fs.mkdtempSync(path.join(os.tmpdir(), "llv-bun-startup-"));
|
|
111
|
+
process.env.LLV_STATE_DIR = sandbox;
|
|
112
|
+
try {
|
|
113
|
+
expect(loadFlows()).toEqual([]);
|
|
114
|
+
expect(loadPipelines()).toEqual([]);
|
|
115
|
+
expect(loadArchivedPipelines()).toEqual([]);
|
|
116
|
+
expect(loadWorkflows()).toEqual([]);
|
|
117
|
+
const db = new Database(path.join(sandbox, "state.sqlite"), { readonly: true, strict: true });
|
|
118
|
+
const collections = db.query<{ collection: string }, []>("SELECT collection FROM state_collections ORDER BY collection").all();
|
|
119
|
+
db.close();
|
|
120
|
+
expect(collections.map((row) => row.collection)).toEqual(["flows", "pipelines", "pipelines_archive", "workflows"]);
|
|
121
|
+
} finally {
|
|
122
|
+
if (previous === undefined) delete process.env.LLV_STATE_DIR;
|
|
123
|
+
else process.env.LLV_STATE_DIR = previous;
|
|
124
|
+
fs.rmSync(sandbox, { recursive: true, force: true });
|
|
125
|
+
}
|
|
87
126
|
});
|
|
88
127
|
|
|
89
128
|
test("Viewer child processes receive no ambient WakaTime key material", () => {
|