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.
Files changed (619) hide show
  1. package/README.md +218 -39
  2. package/bin/cli.mjs +60 -16
  3. package/bin/mcp-server.mjs +136 -0
  4. package/bin/mcp-server.test.ts +266 -0
  5. package/bin/provision-telegram-connector.mjs +193 -0
  6. package/bin/server-runtime.mjs +53 -0
  7. package/bin/server-runtime.test.ts +161 -0
  8. package/bin/tailscale-credential-isolation.test.ts +56 -0
  9. package/bin/tailscale.mjs +6 -4
  10. package/bin/telegram-login-bridge.py +253 -0
  11. package/bin/telegram-mcp-server.py +106 -0
  12. package/bin/telegram-session-reader.mjs +6 -0
  13. package/bin/telegram-session-validator.mjs +71 -0
  14. package/dist/mcp-server.mjs +48505 -0
  15. package/dist/standalone/.next/BUILD_ID +1 -1
  16. package/dist/standalone/.next/app-path-routes-manifest.json +73 -9
  17. package/dist/standalone/.next/build-manifest.json +6 -6
  18. package/dist/standalone/.next/prerender-manifest.json +3 -3
  19. package/dist/standalone/.next/react-loadable-manifest.json +89 -0
  20. package/dist/standalone/.next/required-server-files.json +12 -2
  21. package/dist/standalone/.next/routes-manifest.json +402 -0
  22. package/dist/standalone/.next/server/account-migration-controller-worker.js +1 -0
  23. package/dist/standalone/.next/server/app/_global-error/page.js +3 -3
  24. package/dist/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  25. package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  26. package/dist/standalone/.next/server/app/_global-error.html +1 -1
  27. package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
  28. package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  29. package/dist/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  30. package/dist/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  31. package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  32. package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  33. package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  34. package/dist/standalone/.next/server/app/_not-found/page.js +2 -2
  35. package/dist/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  36. package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  37. package/dist/standalone/.next/server/app/_not-found.html +1 -1
  38. package/dist/standalone/.next/server/app/_not-found.rsc +3 -3
  39. package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  40. package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  41. package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  42. package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  43. package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  44. package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  45. package/dist/standalone/.next/server/app/api/access/route.js +1 -1
  46. package/dist/standalone/.next/server/app/api/access/route.js.nft.json +1 -1
  47. package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route.js +1 -0
  48. package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route.js.nft.json +1 -0
  49. package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route_client-reference-manifest.js +1 -0
  50. package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js +4 -0
  51. package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js.nft.json +1 -0
  52. package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route_client-reference-manifest.js +1 -0
  53. package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js +1 -0
  54. package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js.nft.json +1 -0
  55. package/dist/standalone/.next/server/app/api/accounts/claude/active/route_client-reference-manifest.js +1 -0
  56. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js +4 -0
  57. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js.nft.json +1 -0
  58. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route_client-reference-manifest.js +1 -0
  59. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js +4 -0
  60. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js.nft.json +1 -0
  61. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route_client-reference-manifest.js +1 -0
  62. package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js +1 -0
  63. package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js.nft.json +1 -0
  64. package/dist/standalone/.next/server/app/api/accounts/claude/policy/route_client-reference-manifest.js +1 -0
  65. package/dist/standalone/.next/server/app/api/accounts/claude/route.js +1 -0
  66. package/dist/standalone/.next/server/app/api/accounts/claude/route.js.nft.json +1 -0
  67. package/dist/standalone/.next/server/app/api/accounts/claude/route_client-reference-manifest.js +1 -0
  68. package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js +4 -0
  69. package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js.nft.json +1 -0
  70. package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route_client-reference-manifest.js +1 -0
  71. package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js +1 -0
  72. package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js.nft.json +1 -0
  73. package/dist/standalone/.next/server/app/api/accounts/codex/active/route_client-reference-manifest.js +1 -0
  74. package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js +1 -0
  75. package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js.nft.json +1 -0
  76. package/dist/standalone/.next/server/app/api/accounts/codex/policy/route_client-reference-manifest.js +1 -0
  77. package/dist/standalone/.next/server/app/api/accounts/codex/route.js +1 -0
  78. package/dist/standalone/.next/server/app/api/accounts/codex/route.js.nft.json +1 -0
  79. package/dist/standalone/.next/server/app/api/accounts/codex/route_client-reference-manifest.js +1 -0
  80. package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js +4 -0
  81. package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js.nft.json +1 -0
  82. package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route_client-reference-manifest.js +1 -0
  83. package/dist/standalone/.next/server/app/api/accounts/route.js +1 -0
  84. package/dist/standalone/.next/server/app/api/accounts/route.js.nft.json +1 -0
  85. package/dist/standalone/.next/server/app/api/accounts/route_client-reference-manifest.js +1 -0
  86. package/dist/standalone/.next/server/app/api/agent/route.js +1 -0
  87. package/dist/standalone/.next/server/app/api/agent/route.js.nft.json +1 -0
  88. package/dist/standalone/.next/server/app/api/agent/route_client-reference-manifest.js +1 -0
  89. package/dist/standalone/.next/server/app/api/agent/snapshot/route.js +1 -0
  90. package/dist/standalone/.next/server/app/api/agent/snapshot/route.js.nft.json +1 -0
  91. package/dist/standalone/.next/server/app/api/agent/snapshot/route_client-reference-manifest.js +1 -0
  92. package/dist/standalone/.next/server/app/api/answer/route.js +1 -1
  93. package/dist/standalone/.next/server/app/api/answer/route.js.nft.json +1 -1
  94. package/dist/standalone/.next/server/app/api/artifact/route.js +1 -0
  95. package/dist/standalone/.next/server/app/api/artifact/route.js.nft.json +1 -0
  96. package/dist/standalone/.next/server/app/api/artifact/route_client-reference-manifest.js +1 -0
  97. package/dist/standalone/.next/server/app/api/attach-command/route.js +1 -0
  98. package/dist/standalone/.next/server/app/api/attach-command/route.js.nft.json +1 -0
  99. package/dist/standalone/.next/server/app/api/attach-command/route_client-reference-manifest.js +1 -0
  100. package/dist/standalone/.next/server/app/api/attention/[id]/route.js +1 -0
  101. package/dist/standalone/.next/server/app/api/attention/[id]/route.js.nft.json +1 -0
  102. package/dist/standalone/.next/server/app/api/attention/[id]/route_client-reference-manifest.js +1 -0
  103. package/dist/standalone/.next/server/app/api/attention/route.js +1 -0
  104. package/dist/standalone/.next/server/app/api/attention/route.js.nft.json +1 -0
  105. package/dist/standalone/.next/server/app/api/attention/route_client-reference-manifest.js +1 -0
  106. package/dist/standalone/.next/server/app/api/board/route.js +1 -0
  107. package/dist/standalone/.next/server/app/api/board/route.js.nft.json +1 -0
  108. package/dist/standalone/.next/server/app/api/board/route_client-reference-manifest.js +1 -0
  109. package/dist/standalone/.next/server/app/api/bridge/route.js +2 -0
  110. package/dist/standalone/.next/server/app/api/bridge/route.js.nft.json +1 -0
  111. package/dist/standalone/.next/server/app/api/bridge/route_client-reference-manifest.js +1 -0
  112. package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js +1 -0
  113. package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js.nft.json +1 -0
  114. package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route_client-reference-manifest.js +1 -0
  115. package/dist/standalone/.next/server/app/api/conversations/route.js +1 -0
  116. package/dist/standalone/.next/server/app/api/conversations/route.js.nft.json +1 -0
  117. package/dist/standalone/.next/server/app/api/conversations/route_client-reference-manifest.js +1 -0
  118. package/dist/standalone/.next/server/app/api/files/route.js +2 -1
  119. package/dist/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  120. package/dist/standalone/.next/server/app/api/flows/[id]/route.js +1 -1
  121. package/dist/standalone/.next/server/app/api/flows/[id]/route.js.nft.json +1 -1
  122. package/dist/standalone/.next/server/app/api/flows/route.js +1 -1
  123. package/dist/standalone/.next/server/app/api/flows/route.js.nft.json +1 -1
  124. package/dist/standalone/.next/server/app/api/image/route.js +1 -1
  125. package/dist/standalone/.next/server/app/api/image/route.js.nft.json +1 -1
  126. package/dist/standalone/.next/server/app/api/inbox/route.js +2 -2
  127. package/dist/standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  128. package/dist/standalone/.next/server/app/api/lifecycle/reaper/route.js +1 -0
  129. package/dist/standalone/.next/server/app/api/lifecycle/reaper/route.js.nft.json +1 -0
  130. package/dist/standalone/.next/server/app/api/lifecycle/reaper/route_client-reference-manifest.js +1 -0
  131. package/dist/standalone/.next/server/app/api/limits/history/route.js +4 -0
  132. package/dist/standalone/.next/server/app/api/limits/history/route.js.nft.json +1 -0
  133. package/dist/standalone/.next/server/app/api/limits/history/route_client-reference-manifest.js +1 -0
  134. package/dist/standalone/.next/server/app/api/limits/route.js +4 -2
  135. package/dist/standalone/.next/server/app/api/limits/route.js.nft.json +1 -1
  136. package/dist/standalone/.next/server/app/api/log/preflight/route.js +1 -0
  137. package/dist/standalone/.next/server/app/api/log/preflight/route.js.nft.json +1 -0
  138. package/dist/standalone/.next/server/app/api/log/preflight/route_client-reference-manifest.js +1 -0
  139. package/dist/standalone/.next/server/app/api/log/project-delete/route.js +1 -0
  140. package/dist/standalone/.next/server/app/api/log/project-delete/route.js.nft.json +1 -0
  141. package/dist/standalone/.next/server/app/api/log/project-delete/route_client-reference-manifest.js +1 -0
  142. package/dist/standalone/.next/server/app/api/log/provenance/route.js +1 -0
  143. package/dist/standalone/.next/server/app/api/log/provenance/route.js.nft.json +1 -0
  144. package/dist/standalone/.next/server/app/api/log/provenance/route_client-reference-manifest.js +1 -0
  145. package/dist/standalone/.next/server/app/api/log/route.js +1 -1
  146. package/dist/standalone/.next/server/app/api/log/route.js.nft.json +1 -1
  147. package/dist/standalone/.next/server/app/api/logs/route.js +1 -1
  148. package/dist/standalone/.next/server/app/api/logs/route.js.nft.json +1 -1
  149. package/dist/standalone/.next/server/app/api/logs/stream/route.js +4 -4
  150. package/dist/standalone/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
  151. package/dist/standalone/.next/server/app/api/monitor/lock/route.js +3 -0
  152. package/dist/standalone/.next/server/app/api/monitor/lock/route.js.nft.json +1 -0
  153. package/dist/standalone/.next/server/app/api/monitor/lock/route_client-reference-manifest.js +1 -0
  154. package/dist/standalone/.next/server/app/api/monitor/runs/route.js +3 -0
  155. package/dist/standalone/.next/server/app/api/monitor/runs/route.js.nft.json +1 -0
  156. package/dist/standalone/.next/server/app/api/monitor/runs/route_client-reference-manifest.js +1 -0
  157. package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js +1 -0
  158. package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js.nft.json +1 -0
  159. package/dist/standalone/.next/server/app/api/orchestrator/rotate/route_client-reference-manifest.js +1 -0
  160. package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js +1 -0
  161. package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js.nft.json +1 -0
  162. package/dist/standalone/.next/server/app/api/orchestrator/seat/route_client-reference-manifest.js +1 -0
  163. package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route.js +3 -0
  164. package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route.js.nft.json +1 -0
  165. package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route_client-reference-manifest.js +1 -0
  166. package/dist/standalone/.next/server/app/api/pipelines/[id]/route.js +1 -0
  167. package/dist/standalone/.next/server/app/api/pipelines/[id]/route.js.nft.json +1 -0
  168. package/dist/standalone/.next/server/app/api/pipelines/[id]/route_client-reference-manifest.js +1 -0
  169. package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js +1 -0
  170. package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js.nft.json +1 -0
  171. package/dist/standalone/.next/server/app/api/pipelines/preflight/route_client-reference-manifest.js +1 -0
  172. package/dist/standalone/.next/server/app/api/pipelines/route.js +2 -0
  173. package/dist/standalone/.next/server/app/api/pipelines/route.js.nft.json +1 -0
  174. package/dist/standalone/.next/server/app/api/pipelines/route_client-reference-manifest.js +1 -0
  175. package/dist/standalone/.next/server/app/api/pipelines/tick/route.js +2 -0
  176. package/dist/standalone/.next/server/app/api/pipelines/tick/route.js.nft.json +1 -0
  177. package/dist/standalone/.next/server/app/api/pipelines/tick/route_client-reference-manifest.js +1 -0
  178. package/dist/standalone/.next/server/app/api/proc/route.js +1 -1
  179. package/dist/standalone/.next/server/app/api/proc/route.js.nft.json +1 -1
  180. package/dist/standalone/.next/server/app/api/projects/create/route.js +3 -0
  181. package/dist/standalone/.next/server/app/api/projects/create/route.js.nft.json +1 -0
  182. package/dist/standalone/.next/server/app/api/projects/create/route_client-reference-manifest.js +1 -0
  183. package/dist/standalone/.next/server/app/api/projects/crown/route.js +1 -0
  184. package/dist/standalone/.next/server/app/api/projects/crown/route.js.nft.json +1 -0
  185. package/dist/standalone/.next/server/app/api/projects/crown/route_client-reference-manifest.js +1 -0
  186. package/dist/standalone/.next/server/app/api/push/route.js +2 -1
  187. package/dist/standalone/.next/server/app/api/push/route.js.nft.json +1 -1
  188. package/dist/standalone/.next/server/app/api/resources/route.js +1 -1
  189. package/dist/standalone/.next/server/app/api/resources/route.js.nft.json +1 -1
  190. package/dist/standalone/.next/server/app/api/roles/route.js +2 -0
  191. package/dist/standalone/.next/server/app/api/roles/route.js.nft.json +1 -0
  192. package/dist/standalone/.next/server/app/api/roles/route_client-reference-manifest.js +1 -0
  193. package/dist/standalone/.next/server/app/api/runtime/answer/route.js +1 -0
  194. package/dist/standalone/.next/server/app/api/runtime/answer/route.js.nft.json +1 -0
  195. package/dist/standalone/.next/server/app/api/runtime/answer/route_client-reference-manifest.js +1 -0
  196. package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js +1 -0
  197. package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js.nft.json +1 -0
  198. package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route_client-reference-manifest.js +1 -0
  199. package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js +1 -0
  200. package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js.nft.json +1 -0
  201. package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route_client-reference-manifest.js +1 -0
  202. package/dist/standalone/.next/server/app/api/runtime/deployments/route.js +1 -0
  203. package/dist/standalone/.next/server/app/api/runtime/deployments/route.js.nft.json +1 -0
  204. package/dist/standalone/.next/server/app/api/runtime/deployments/route_client-reference-manifest.js +1 -0
  205. package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js +1 -0
  206. package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js.nft.json +1 -0
  207. package/dist/standalone/.next/server/app/api/runtime/interrupt/route_client-reference-manifest.js +1 -0
  208. package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js +1 -0
  209. package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js.nft.json +1 -0
  210. package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route_client-reference-manifest.js +1 -0
  211. package/dist/standalone/.next/server/app/api/runtime/operations/route.js +1 -0
  212. package/dist/standalone/.next/server/app/api/runtime/operations/route.js.nft.json +1 -0
  213. package/dist/standalone/.next/server/app/api/runtime/operations/route_client-reference-manifest.js +1 -0
  214. package/dist/standalone/.next/server/app/api/runtime/realtime/route.js +1 -0
  215. package/dist/standalone/.next/server/app/api/runtime/realtime/route.js.nft.json +1 -0
  216. package/dist/standalone/.next/server/app/api/runtime/realtime/route_client-reference-manifest.js +1 -0
  217. package/dist/standalone/.next/server/app/api/runtime/send/route.js +1 -0
  218. package/dist/standalone/.next/server/app/api/runtime/send/route.js.nft.json +1 -0
  219. package/dist/standalone/.next/server/app/api/runtime/send/route_client-reference-manifest.js +1 -0
  220. package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js +1 -0
  221. package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js.nft.json +1 -0
  222. package/dist/standalone/.next/server/app/api/runtime/snapshot/route_client-reference-manifest.js +1 -0
  223. package/dist/standalone/.next/server/app/api/runtime/spawn/route.js +1 -0
  224. package/dist/standalone/.next/server/app/api/runtime/spawn/route.js.nft.json +1 -0
  225. package/dist/standalone/.next/server/app/api/runtime/spawn/route_client-reference-manifest.js +1 -0
  226. package/dist/standalone/.next/server/app/api/runtime/steer/route.js +1 -0
  227. package/dist/standalone/.next/server/app/api/runtime/steer/route.js.nft.json +1 -0
  228. package/dist/standalone/.next/server/app/api/runtime/steer/route_client-reference-manifest.js +1 -0
  229. package/dist/standalone/.next/server/app/api/runtime/stream/route.js +8 -0
  230. package/dist/standalone/.next/server/app/api/runtime/stream/route.js.nft.json +1 -0
  231. package/dist/standalone/.next/server/app/api/runtime/stream/route_client-reference-manifest.js +1 -0
  232. package/dist/standalone/.next/server/app/api/search/transcripts/route.js +2 -0
  233. package/dist/standalone/.next/server/app/api/search/transcripts/route.js.nft.json +1 -0
  234. package/dist/standalone/.next/server/app/api/search/transcripts/route_client-reference-manifest.js +1 -0
  235. package/dist/standalone/.next/server/app/api/session/route.js +1 -1
  236. package/dist/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
  237. package/dist/standalone/.next/server/app/api/session/supersedence/route.js +1 -0
  238. package/dist/standalone/.next/server/app/api/session/supersedence/route.js.nft.json +1 -0
  239. package/dist/standalone/.next/server/app/api/session/supersedence/route_client-reference-manifest.js +1 -0
  240. package/dist/standalone/.next/server/app/api/session/title/route.js +1 -0
  241. package/dist/standalone/.next/server/app/api/session/title/route.js.nft.json +1 -0
  242. package/dist/standalone/.next/server/app/api/session/title/route_client-reference-manifest.js +1 -0
  243. package/dist/standalone/.next/server/app/api/spawn/policy/route.js +6 -0
  244. package/dist/standalone/.next/server/app/api/spawn/policy/route.js.nft.json +1 -0
  245. package/dist/standalone/.next/server/app/api/spawn/policy/route_client-reference-manifest.js +1 -0
  246. package/dist/standalone/.next/server/app/api/spawn/route.js +2 -1
  247. package/dist/standalone/.next/server/app/api/spawn/route.js.nft.json +1 -1
  248. package/dist/standalone/.next/server/app/api/staging/route.js +2 -0
  249. package/dist/standalone/.next/server/app/api/staging/route.js.nft.json +1 -0
  250. package/dist/standalone/.next/server/app/api/staging/route_client-reference-manifest.js +1 -0
  251. package/dist/standalone/.next/server/app/api/task-attachments/route.js +2 -0
  252. package/dist/standalone/.next/server/app/api/task-attachments/route.js.nft.json +1 -0
  253. package/dist/standalone/.next/server/app/api/task-attachments/route_client-reference-manifest.js +1 -0
  254. package/dist/standalone/.next/server/app/api/tasks/[id]/assignment/route.js +1 -2
  255. package/dist/standalone/.next/server/app/api/tasks/[id]/assignment/route.js.nft.json +1 -1
  256. package/dist/standalone/.next/server/app/api/tasks/[id]/route.js +1 -2
  257. package/dist/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  258. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js +1 -1
  259. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js.nft.json +1 -1
  260. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js +1 -1
  261. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js.nft.json +1 -1
  262. package/dist/standalone/.next/server/app/api/tasks/curator/route.js +1 -1
  263. package/dist/standalone/.next/server/app/api/tasks/curator/route.js.nft.json +1 -1
  264. package/dist/standalone/.next/server/app/api/tasks/route.js +11 -2
  265. package/dist/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
  266. package/dist/standalone/.next/server/app/api/telegram/reports/route.js +1 -0
  267. package/dist/standalone/.next/server/app/api/telegram/reports/route.js.nft.json +1 -0
  268. package/dist/standalone/.next/server/app/api/telegram/reports/route_client-reference-manifest.js +1 -0
  269. package/dist/standalone/.next/server/app/api/telegram/route.js +1 -0
  270. package/dist/standalone/.next/server/app/api/telegram/route.js.nft.json +1 -0
  271. package/dist/standalone/.next/server/app/api/telegram/route_client-reference-manifest.js +1 -0
  272. package/dist/standalone/.next/server/app/api/timeline/route.js +1 -1
  273. package/dist/standalone/.next/server/app/api/timeline/route.js.nft.json +1 -1
  274. package/dist/standalone/.next/server/app/api/tmux/route.js +1 -1
  275. package/dist/standalone/.next/server/app/api/tmux/route.js.nft.json +1 -1
  276. package/dist/standalone/.next/server/app/api/tmux/targets/route.js +1 -1
  277. package/dist/standalone/.next/server/app/api/tmux/targets/route.js.nft.json +1 -1
  278. package/dist/standalone/.next/server/app/api/transcribe/backend/route.js +2 -2
  279. package/dist/standalone/.next/server/app/api/transcribe/backend/route.js.nft.json +1 -1
  280. package/dist/standalone/.next/server/app/api/transcribe/route.js +2 -2
  281. package/dist/standalone/.next/server/app/api/transcribe/route.js.nft.json +1 -1
  282. package/dist/standalone/.next/server/app/api/transcribe/token/route.js +2 -2
  283. package/dist/standalone/.next/server/app/api/transcribe/token/route.js.nft.json +1 -1
  284. package/dist/standalone/.next/server/app/api/tts/backend/route.js +1 -0
  285. package/dist/standalone/.next/server/app/api/tts/backend/route.js.nft.json +1 -0
  286. package/dist/standalone/.next/server/app/api/tts/backend/route_client-reference-manifest.js +1 -0
  287. package/dist/standalone/.next/server/app/api/tts/route.js +3 -0
  288. package/dist/standalone/.next/server/app/api/tts/route.js.nft.json +1 -0
  289. package/dist/standalone/.next/server/app/api/tts/route_client-reference-manifest.js +1 -0
  290. package/dist/standalone/.next/server/app/api/view/presence/route.js +1 -0
  291. package/dist/standalone/.next/server/app/api/view/presence/route.js.nft.json +1 -0
  292. package/dist/standalone/.next/server/app/api/view/presence/route_client-reference-manifest.js +1 -0
  293. package/dist/standalone/.next/server/app/api/workflows/[id]/route.js +1 -1
  294. package/dist/standalone/.next/server/app/api/workflows/[id]/route.js.nft.json +1 -1
  295. package/dist/standalone/.next/server/app/api/workflows/route.js +1 -1
  296. package/dist/standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  297. package/dist/standalone/.next/server/app/favicon.ico/route.js +1 -1
  298. package/dist/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  299. package/dist/standalone/.next/server/app/index.html +1 -1
  300. package/dist/standalone/.next/server/app/index.rsc +4 -4
  301. package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  302. package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  303. package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  304. package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  305. package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  306. package/dist/standalone/.next/server/app/page.js +74 -3
  307. package/dist/standalone/.next/server/app/page.js.nft.json +1 -1
  308. package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  309. package/dist/standalone/.next/server/app-paths-manifest.json +73 -9
  310. package/dist/standalone/.next/server/chunks/1068.js +1 -0
  311. package/dist/standalone/.next/server/chunks/1097.js +1 -0
  312. package/dist/standalone/.next/server/chunks/156.js +2 -0
  313. package/dist/standalone/.next/server/chunks/1617.js +2 -0
  314. package/dist/standalone/.next/server/chunks/1813.js +1 -0
  315. package/dist/standalone/.next/server/chunks/1858.js +91 -0
  316. package/dist/standalone/.next/server/chunks/1888.js +1 -0
  317. package/dist/standalone/.next/server/chunks/1911.js +1 -0
  318. package/dist/standalone/.next/server/chunks/1918.js +1 -0
  319. package/dist/standalone/.next/server/chunks/1920.js +27 -0
  320. package/dist/standalone/.next/server/chunks/2190.js +1 -0
  321. package/dist/standalone/.next/server/chunks/230.js +1 -0
  322. package/dist/standalone/.next/server/chunks/2318.js +2 -0
  323. package/dist/standalone/.next/server/chunks/2324.js +1 -0
  324. package/dist/standalone/.next/server/chunks/2338.js +9 -0
  325. package/dist/standalone/.next/server/chunks/2904.js +42 -0
  326. package/dist/standalone/.next/server/chunks/2923.js +1 -0
  327. package/dist/standalone/.next/server/chunks/2962.js +1 -0
  328. package/dist/standalone/.next/server/chunks/2977.js +1 -0
  329. package/dist/standalone/.next/server/chunks/306.js +3 -0
  330. package/dist/standalone/.next/server/chunks/3086.js +1 -0
  331. package/dist/standalone/.next/server/chunks/3139.js +10 -0
  332. package/dist/standalone/.next/server/chunks/3214.js +82 -0
  333. package/dist/standalone/.next/server/chunks/3313.js +1 -0
  334. package/dist/standalone/.next/server/chunks/3336.js +1 -0
  335. package/dist/standalone/.next/server/chunks/3438.js +2 -0
  336. package/dist/standalone/.next/server/chunks/3558.js +1 -0
  337. package/dist/standalone/.next/server/chunks/3587.js +1 -0
  338. package/dist/standalone/.next/server/chunks/3598.js +81 -0
  339. package/dist/standalone/.next/server/chunks/3669.js +1 -0
  340. package/dist/standalone/.next/server/chunks/3740.js +126 -0
  341. package/dist/standalone/.next/server/chunks/3793.js +6 -0
  342. package/dist/standalone/.next/server/chunks/3817.js +1 -0
  343. package/dist/standalone/.next/server/chunks/3916.js +1 -0
  344. package/dist/standalone/.next/server/chunks/3944.js +1 -0
  345. package/dist/standalone/.next/server/chunks/3953.js +1 -0
  346. package/dist/standalone/.next/server/chunks/4012.js +4 -0
  347. package/dist/standalone/.next/server/chunks/4127.js +1 -0
  348. package/dist/standalone/.next/server/chunks/4191.js +1 -0
  349. package/dist/standalone/.next/server/chunks/4260.js +2 -0
  350. package/dist/standalone/.next/server/chunks/4509.js +1 -0
  351. package/dist/standalone/.next/server/chunks/{741.js → 4741.js} +1 -1
  352. package/dist/standalone/.next/server/chunks/4968.js +1 -0
  353. package/dist/standalone/.next/server/chunks/4972.js +130 -0
  354. package/dist/standalone/.next/server/chunks/5689.js +11 -0
  355. package/dist/standalone/.next/server/chunks/6333.js +47 -0
  356. package/dist/standalone/.next/server/chunks/6389.js +1 -0
  357. package/dist/standalone/.next/server/chunks/640.js +1 -0
  358. package/dist/standalone/.next/server/chunks/6796.js +1 -0
  359. package/dist/standalone/.next/server/chunks/6826.js +2 -0
  360. package/dist/standalone/.next/server/chunks/6850.js +1 -0
  361. package/dist/standalone/.next/server/chunks/6909.js +1 -0
  362. package/dist/standalone/.next/server/chunks/6977.js +1 -0
  363. package/dist/standalone/.next/server/chunks/7126.js +1 -0
  364. package/dist/standalone/.next/server/chunks/7159.js +1 -0
  365. package/dist/standalone/.next/server/chunks/7270.js +45 -0
  366. package/dist/standalone/.next/server/chunks/7295.js +10 -0
  367. package/dist/standalone/.next/server/chunks/7471.js +87 -0
  368. package/dist/standalone/.next/server/chunks/7563.js +1 -0
  369. package/dist/standalone/.next/server/chunks/7644.js +13 -0
  370. package/dist/standalone/.next/server/chunks/7722.js +1 -0
  371. package/dist/standalone/.next/server/chunks/7733.js +4 -0
  372. package/dist/standalone/.next/server/chunks/7868.js +1 -0
  373. package/dist/standalone/.next/server/chunks/8026.js +1 -0
  374. package/dist/standalone/.next/server/chunks/8140.js +1 -0
  375. package/dist/standalone/.next/server/chunks/8176.js +1 -0
  376. package/dist/standalone/.next/server/chunks/8444.js +1 -0
  377. package/dist/standalone/.next/server/chunks/8465.js +2 -0
  378. package/dist/standalone/.next/server/chunks/849.js +6 -0
  379. package/dist/standalone/.next/server/chunks/8576.js +1 -0
  380. package/dist/standalone/.next/server/chunks/8600.js +12 -0
  381. package/dist/standalone/.next/server/chunks/8617.js +2 -0
  382. package/dist/standalone/.next/server/chunks/8797.js +1 -0
  383. package/dist/standalone/.next/server/chunks/8817.js +5 -0
  384. package/dist/standalone/.next/server/chunks/8966.js +2 -0
  385. package/dist/standalone/.next/server/chunks/8996.js +1 -0
  386. package/dist/standalone/.next/server/chunks/9246.js +47 -0
  387. package/dist/standalone/.next/server/chunks/9364.js +310 -0
  388. package/dist/standalone/.next/server/chunks/9411.js +14 -0
  389. package/dist/standalone/.next/server/chunks/9434.js +13 -0
  390. package/dist/standalone/.next/server/chunks/9507.js +1 -0
  391. package/dist/standalone/.next/server/chunks/9676.js +62 -0
  392. package/dist/standalone/.next/server/chunks/9733.js +42 -0
  393. package/dist/standalone/.next/server/chunks/9901.js +62 -0
  394. package/dist/standalone/.next/server/chunks/9937.js +2 -0
  395. package/dist/standalone/.next/server/chunks/9940.js +128 -0
  396. package/dist/standalone/.next/server/chunks/9998.js +1 -0
  397. package/dist/standalone/.next/server/chunks/static/media/pdf.worker.min.65fe1ff1.mjs +6 -0
  398. package/dist/standalone/.next/server/file-scanner-worker.js +4 -0
  399. package/dist/standalone/.next/server/files-response-worker.js +13 -0
  400. package/dist/standalone/.next/server/functions-config-manifest.json +64 -0
  401. package/dist/standalone/.next/server/instrumentation.js +1 -0
  402. package/dist/standalone/.next/server/middleware-build-manifest.js +1 -1
  403. package/dist/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  404. package/dist/standalone/.next/server/middleware.js +2 -2
  405. package/dist/standalone/.next/server/pages/404.html +1 -1
  406. package/dist/standalone/.next/server/pages/500.html +1 -1
  407. package/dist/standalone/.next/server/resource-collector-worker.js +1 -0
  408. package/dist/standalone/.next/server/server-reference-manifest.json +1 -1
  409. package/dist/standalone/.next/server/wakatime-sync-worker.js +2 -0
  410. package/dist/standalone/.next/server/webpack-runtime.js +1 -1
  411. package/dist/standalone/.next/static/chunks/1783.662e4b7044e5db2f.js +1 -0
  412. package/dist/standalone/.next/static/chunks/2345.c09668c2640f24ad.js +1 -0
  413. package/dist/standalone/.next/static/chunks/2462.217e83e51ac07519.js +1 -0
  414. package/dist/standalone/.next/static/chunks/2619.fd64e7a5bd9005d5.js +1 -0
  415. package/dist/standalone/.next/static/chunks/3015.f61f117dd9ccb747.js +1 -0
  416. package/dist/standalone/.next/static/chunks/{794-0fc36bf1952fbc29.js → 3794-a205959ce301b5c6.js} +1 -1
  417. package/dist/standalone/.next/static/chunks/4bd1b696-c2f6e0877b6c10aa.js +1 -0
  418. package/dist/standalone/.next/static/chunks/6370.4f217a9379f47764.js +1 -0
  419. package/dist/standalone/.next/static/chunks/7067.f02e8d0616800bac.js +1 -0
  420. package/dist/standalone/.next/static/chunks/7297.aaa457b2a2939f7b.js +1 -0
  421. package/dist/standalone/.next/static/chunks/7774.cca1e546ab5623e0.js +1 -0
  422. package/dist/standalone/.next/static/chunks/8293.5545fdbde0213c98.js +1 -0
  423. package/dist/standalone/.next/static/chunks/8327.33abd84515b38836.js +1 -0
  424. package/dist/standalone/.next/static/chunks/858.302d545082b159c6.js +1 -0
  425. package/dist/standalone/.next/static/chunks/9178-e32f088e89b55503.js +1 -0
  426. package/dist/standalone/.next/static/chunks/9583.b999fb5de3a3494a.js +1 -0
  427. package/dist/standalone/.next/static/chunks/9b0008ae.eb7a9c4c1c92a63b.js +45 -0
  428. package/dist/standalone/.next/static/chunks/app/_global-error/page-c132c5ba005ff29e.js +1 -0
  429. package/dist/standalone/.next/static/chunks/app/_not-found/page-9e7648417ae57bf7.js +1 -0
  430. package/dist/standalone/.next/static/chunks/app/api/access/route-c132c5ba005ff29e.js +1 -0
  431. package/dist/standalone/.next/static/chunks/app/api/account-migrations/[intentId]/route-c132c5ba005ff29e.js +1 -0
  432. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/[id]/status/route-c132c5ba005ff29e.js +1 -0
  433. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/active/route-c132c5ba005ff29e.js +1 -0
  434. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/input/route-c132c5ba005ff29e.js +1 -0
  435. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/route-c132c5ba005ff29e.js +1 -0
  436. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/policy/route-c132c5ba005ff29e.js +1 -0
  437. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/route-c132c5ba005ff29e.js +1 -0
  438. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/terminal/route-c132c5ba005ff29e.js +1 -0
  439. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/active/route-c132c5ba005ff29e.js +1 -0
  440. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/policy/route-c132c5ba005ff29e.js +1 -0
  441. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/route-c132c5ba005ff29e.js +1 -0
  442. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/terminal/route-c132c5ba005ff29e.js +1 -0
  443. package/dist/standalone/.next/static/chunks/app/api/accounts/route-c132c5ba005ff29e.js +1 -0
  444. package/dist/standalone/.next/static/chunks/app/api/agent/route-c132c5ba005ff29e.js +1 -0
  445. package/dist/standalone/.next/static/chunks/app/api/agent/snapshot/route-c132c5ba005ff29e.js +1 -0
  446. package/dist/standalone/.next/static/chunks/app/api/answer/route-c132c5ba005ff29e.js +1 -0
  447. package/dist/standalone/.next/static/chunks/app/api/artifact/route-c132c5ba005ff29e.js +1 -0
  448. package/dist/standalone/.next/static/chunks/app/api/attach-command/route-c132c5ba005ff29e.js +1 -0
  449. package/dist/standalone/.next/static/chunks/app/api/attention/[id]/route-c132c5ba005ff29e.js +1 -0
  450. package/dist/standalone/.next/static/chunks/app/api/attention/route-c132c5ba005ff29e.js +1 -0
  451. package/dist/standalone/.next/static/chunks/app/api/board/route-c132c5ba005ff29e.js +1 -0
  452. package/dist/standalone/.next/static/chunks/app/api/bridge/route-c132c5ba005ff29e.js +1 -0
  453. package/dist/standalone/.next/static/chunks/app/api/conversations/[conversationId]/migration/route-c132c5ba005ff29e.js +1 -0
  454. package/dist/standalone/.next/static/chunks/app/api/conversations/route-c132c5ba005ff29e.js +1 -0
  455. package/dist/standalone/.next/static/chunks/app/api/files/route-c132c5ba005ff29e.js +1 -0
  456. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-c132c5ba005ff29e.js +1 -0
  457. package/dist/standalone/.next/static/chunks/app/api/flows/route-c132c5ba005ff29e.js +1 -0
  458. package/dist/standalone/.next/static/chunks/app/api/image/route-c132c5ba005ff29e.js +1 -0
  459. package/dist/standalone/.next/static/chunks/app/api/inbox/route-c132c5ba005ff29e.js +1 -0
  460. package/dist/standalone/.next/static/chunks/app/api/lifecycle/reaper/route-c132c5ba005ff29e.js +1 -0
  461. package/dist/standalone/.next/static/chunks/app/api/limits/history/route-c132c5ba005ff29e.js +1 -0
  462. package/dist/standalone/.next/static/chunks/app/api/limits/route-c132c5ba005ff29e.js +1 -0
  463. package/dist/standalone/.next/static/chunks/app/api/log/preflight/route-c132c5ba005ff29e.js +1 -0
  464. package/dist/standalone/.next/static/chunks/app/api/log/project-delete/route-c132c5ba005ff29e.js +1 -0
  465. package/dist/standalone/.next/static/chunks/app/api/log/provenance/route-c132c5ba005ff29e.js +1 -0
  466. package/dist/standalone/.next/static/chunks/app/api/log/route-c132c5ba005ff29e.js +1 -0
  467. package/dist/standalone/.next/static/chunks/app/api/logs/route-c132c5ba005ff29e.js +1 -0
  468. package/dist/standalone/.next/static/chunks/app/api/logs/stream/route-c132c5ba005ff29e.js +1 -0
  469. package/dist/standalone/.next/static/chunks/app/api/monitor/lock/route-c132c5ba005ff29e.js +1 -0
  470. package/dist/standalone/.next/static/chunks/app/api/monitor/runs/route-c132c5ba005ff29e.js +1 -0
  471. package/dist/standalone/.next/static/chunks/app/api/orchestrator/rotate/route-c132c5ba005ff29e.js +1 -0
  472. package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/route-c132c5ba005ff29e.js +1 -0
  473. package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/status/route-c132c5ba005ff29e.js +1 -0
  474. package/dist/standalone/.next/static/chunks/app/api/pipelines/[id]/route-c132c5ba005ff29e.js +1 -0
  475. package/dist/standalone/.next/static/chunks/app/api/pipelines/preflight/route-c132c5ba005ff29e.js +1 -0
  476. package/dist/standalone/.next/static/chunks/app/api/pipelines/route-c132c5ba005ff29e.js +1 -0
  477. package/dist/standalone/.next/static/chunks/app/api/pipelines/tick/route-c132c5ba005ff29e.js +1 -0
  478. package/dist/standalone/.next/static/chunks/app/api/proc/route-c132c5ba005ff29e.js +1 -0
  479. package/dist/standalone/.next/static/chunks/app/api/projects/create/route-c132c5ba005ff29e.js +1 -0
  480. package/dist/standalone/.next/static/chunks/app/api/projects/crown/route-c132c5ba005ff29e.js +1 -0
  481. package/dist/standalone/.next/static/chunks/app/api/push/route-c132c5ba005ff29e.js +1 -0
  482. package/dist/standalone/.next/static/chunks/app/api/resources/route-c132c5ba005ff29e.js +1 -0
  483. package/dist/standalone/.next/static/chunks/app/api/roles/route-c132c5ba005ff29e.js +1 -0
  484. package/dist/standalone/.next/static/chunks/app/api/runtime/answer/route-c132c5ba005ff29e.js +1 -0
  485. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/[deploymentId]/route-c132c5ba005ff29e.js +1 -0
  486. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/capabilities/v1/route-c132c5ba005ff29e.js +1 -0
  487. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/route-c132c5ba005ff29e.js +1 -0
  488. package/dist/standalone/.next/static/chunks/app/api/runtime/interrupt/route-c132c5ba005ff29e.js +1 -0
  489. package/dist/standalone/.next/static/chunks/app/api/runtime/operations/[operationId]/route-c132c5ba005ff29e.js +1 -0
  490. package/dist/standalone/.next/static/chunks/app/api/runtime/operations/route-c132c5ba005ff29e.js +1 -0
  491. package/dist/standalone/.next/static/chunks/app/api/runtime/realtime/route-c132c5ba005ff29e.js +1 -0
  492. package/dist/standalone/.next/static/chunks/app/api/runtime/send/route-c132c5ba005ff29e.js +1 -0
  493. package/dist/standalone/.next/static/chunks/app/api/runtime/snapshot/route-c132c5ba005ff29e.js +1 -0
  494. package/dist/standalone/.next/static/chunks/app/api/runtime/spawn/route-c132c5ba005ff29e.js +1 -0
  495. package/dist/standalone/.next/static/chunks/app/api/runtime/steer/route-c132c5ba005ff29e.js +1 -0
  496. package/dist/standalone/.next/static/chunks/app/api/runtime/stream/route-c132c5ba005ff29e.js +1 -0
  497. package/dist/standalone/.next/static/chunks/app/api/search/transcripts/route-c132c5ba005ff29e.js +1 -0
  498. package/dist/standalone/.next/static/chunks/app/api/session/route-c132c5ba005ff29e.js +1 -0
  499. package/dist/standalone/.next/static/chunks/app/api/session/supersedence/route-c132c5ba005ff29e.js +1 -0
  500. package/dist/standalone/.next/static/chunks/app/api/session/title/route-c132c5ba005ff29e.js +1 -0
  501. package/dist/standalone/.next/static/chunks/app/api/spawn/policy/route-c132c5ba005ff29e.js +1 -0
  502. package/dist/standalone/.next/static/chunks/app/api/spawn/route-c132c5ba005ff29e.js +1 -0
  503. package/dist/standalone/.next/static/chunks/app/api/staging/route-c132c5ba005ff29e.js +1 -0
  504. package/dist/standalone/.next/static/chunks/app/api/task-attachments/route-c132c5ba005ff29e.js +1 -0
  505. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/assignment/route-c132c5ba005ff29e.js +1 -0
  506. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-c132c5ba005ff29e.js +1 -0
  507. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-c132c5ba005ff29e.js +1 -0
  508. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-c132c5ba005ff29e.js +1 -0
  509. package/dist/standalone/.next/static/chunks/app/api/tasks/curator/route-c132c5ba005ff29e.js +1 -0
  510. package/dist/standalone/.next/static/chunks/app/api/tasks/route-c132c5ba005ff29e.js +1 -0
  511. package/dist/standalone/.next/static/chunks/app/api/telegram/reports/route-c132c5ba005ff29e.js +1 -0
  512. package/dist/standalone/.next/static/chunks/app/api/telegram/route-c132c5ba005ff29e.js +1 -0
  513. package/dist/standalone/.next/static/chunks/app/api/timeline/route-c132c5ba005ff29e.js +1 -0
  514. package/dist/standalone/.next/static/chunks/app/api/tmux/route-c132c5ba005ff29e.js +1 -0
  515. package/dist/standalone/.next/static/chunks/app/api/tmux/targets/route-c132c5ba005ff29e.js +1 -0
  516. package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-c132c5ba005ff29e.js +1 -0
  517. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-c132c5ba005ff29e.js +1 -0
  518. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-c132c5ba005ff29e.js +1 -0
  519. package/dist/standalone/.next/static/chunks/app/api/tts/backend/route-c132c5ba005ff29e.js +1 -0
  520. package/dist/standalone/.next/static/chunks/app/api/tts/route-c132c5ba005ff29e.js +1 -0
  521. package/dist/standalone/.next/static/chunks/app/api/view/presence/route-c132c5ba005ff29e.js +1 -0
  522. package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-c132c5ba005ff29e.js +1 -0
  523. package/dist/standalone/.next/static/chunks/app/api/workflows/route-c132c5ba005ff29e.js +1 -0
  524. package/dist/standalone/.next/static/chunks/app/layout-c8390ace9b222dd6.js +1 -0
  525. package/dist/standalone/.next/static/chunks/app/page-ac9463b910bf83fe.js +77 -0
  526. package/dist/standalone/.next/static/chunks/framework-d1de002210ddaaef.js +1 -0
  527. package/dist/standalone/.next/static/chunks/{main-3cec32f88450e0e3.js → main-343fc547124ab6ff.js} +2 -2
  528. package/dist/standalone/.next/static/chunks/main-app-63e09a6ca85925cd.js +1 -0
  529. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-c132c5ba005ff29e.js +1 -0
  530. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c132c5ba005ff29e.js +1 -0
  531. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-a07ea5db82382b93.js +1 -0
  532. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-c132c5ba005ff29e.js +1 -0
  533. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c132c5ba005ff29e.js +1 -0
  534. package/dist/standalone/.next/static/chunks/webpack-1637988d4c7cf23c.js +1 -0
  535. package/dist/standalone/.next/static/css/498f12ddef7ecb0e.css +1 -0
  536. package/dist/standalone/.next/static/kt9OPe8iwfpNcdOX9ygvb/_buildManifest.js +1 -0
  537. package/dist/standalone/.next/static/media/pdf.worker.min.e890bf87.mjs +6 -0
  538. package/dist/standalone/package.json +31 -8
  539. package/dist/standalone/server.bun.js +38 -0
  540. package/dist/standalone/server.js +18 -37
  541. package/package.json +31 -8
  542. package/vendor/telegram-mcp/.python-version +1 -0
  543. package/vendor/telegram-mcp/LICENSE +201 -0
  544. package/vendor/telegram-mcp/PROVENANCE.md +70 -0
  545. package/vendor/telegram-mcp/SHA256SUMS +24 -0
  546. package/vendor/telegram-mcp/main.py +67 -0
  547. package/vendor/telegram-mcp/pyproject.toml +100 -0
  548. package/vendor/telegram-mcp/requirements.txt +7 -0
  549. package/vendor/telegram-mcp/sanitize.py +143 -0
  550. package/vendor/telegram-mcp/session_string_generator.py +259 -0
  551. package/vendor/telegram-mcp/telegram_mcp/__init__.py +15 -0
  552. package/vendor/telegram-mcp/telegram_mcp/client_identity.py +31 -0
  553. package/vendor/telegram-mcp/telegram_mcp/install_guard.py +209 -0
  554. package/vendor/telegram-mcp/telegram_mcp/runner.py +198 -0
  555. package/vendor/telegram-mcp/telegram_mcp/runtime.py +1812 -0
  556. package/vendor/telegram-mcp/telegram_mcp/singleton.py +143 -0
  557. package/vendor/telegram-mcp/telegram_mcp/tools/__init__.py +13 -0
  558. package/vendor/telegram-mcp/telegram_mcp/tools/accounts.py +31 -0
  559. package/vendor/telegram-mcp/telegram_mcp/tools/chats.py +1163 -0
  560. package/vendor/telegram-mcp/telegram_mcp/tools/contacts.py +802 -0
  561. package/vendor/telegram-mcp/telegram_mcp/tools/events.py +485 -0
  562. package/vendor/telegram-mcp/telegram_mcp/tools/folders.py +600 -0
  563. package/vendor/telegram-mcp/telegram_mcp/tools/groups.py +1286 -0
  564. package/vendor/telegram-mcp/telegram_mcp/tools/media.py +470 -0
  565. package/vendor/telegram-mcp/telegram_mcp/tools/messages.py +2041 -0
  566. package/vendor/telegram-mcp/telegram_mcp/tools/profile.py +449 -0
  567. package/vendor/telegram-mcp/uv.lock +1693 -0
  568. package/dist/standalone/.next/server/chunks/628.js +0 -2
  569. package/dist/standalone/.next/server/chunks/747.js +0 -4
  570. package/dist/standalone/.next/server/chunks/813.js +0 -1
  571. package/dist/standalone/.next/server/chunks/918.js +0 -1
  572. package/dist/standalone/.next/server/chunks/998.js +0 -1
  573. package/dist/standalone/.next/static/U4SZ1qekrUMw43qsp4kED/_buildManifest.js +0 -1
  574. package/dist/standalone/.next/static/chunks/4bd1b696-215e5051988c3dde.js +0 -1
  575. package/dist/standalone/.next/static/chunks/647-0b14204033b8658c.js +0 -1
  576. package/dist/standalone/.next/static/chunks/app/_global-error/page-d0de276a8c0b264e.js +0 -1
  577. package/dist/standalone/.next/static/chunks/app/_not-found/page-811f7dc4ec7ef451.js +0 -1
  578. package/dist/standalone/.next/static/chunks/app/api/access/route-d0de276a8c0b264e.js +0 -1
  579. package/dist/standalone/.next/static/chunks/app/api/answer/route-d0de276a8c0b264e.js +0 -1
  580. package/dist/standalone/.next/static/chunks/app/api/files/route-d0de276a8c0b264e.js +0 -1
  581. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-d0de276a8c0b264e.js +0 -1
  582. package/dist/standalone/.next/static/chunks/app/api/flows/route-d0de276a8c0b264e.js +0 -1
  583. package/dist/standalone/.next/static/chunks/app/api/image/route-d0de276a8c0b264e.js +0 -1
  584. package/dist/standalone/.next/static/chunks/app/api/inbox/route-d0de276a8c0b264e.js +0 -1
  585. package/dist/standalone/.next/static/chunks/app/api/limits/route-d0de276a8c0b264e.js +0 -1
  586. package/dist/standalone/.next/static/chunks/app/api/log/route-d0de276a8c0b264e.js +0 -1
  587. package/dist/standalone/.next/static/chunks/app/api/logs/route-d0de276a8c0b264e.js +0 -1
  588. package/dist/standalone/.next/static/chunks/app/api/logs/stream/route-d0de276a8c0b264e.js +0 -1
  589. package/dist/standalone/.next/static/chunks/app/api/proc/route-d0de276a8c0b264e.js +0 -1
  590. package/dist/standalone/.next/static/chunks/app/api/push/route-d0de276a8c0b264e.js +0 -1
  591. package/dist/standalone/.next/static/chunks/app/api/resources/route-d0de276a8c0b264e.js +0 -1
  592. package/dist/standalone/.next/static/chunks/app/api/session/route-d0de276a8c0b264e.js +0 -1
  593. package/dist/standalone/.next/static/chunks/app/api/spawn/route-d0de276a8c0b264e.js +0 -1
  594. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/assignment/route-d0de276a8c0b264e.js +0 -1
  595. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-d0de276a8c0b264e.js +0 -1
  596. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-d0de276a8c0b264e.js +0 -1
  597. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-d0de276a8c0b264e.js +0 -1
  598. package/dist/standalone/.next/static/chunks/app/api/tasks/curator/route-d0de276a8c0b264e.js +0 -1
  599. package/dist/standalone/.next/static/chunks/app/api/tasks/route-d0de276a8c0b264e.js +0 -1
  600. package/dist/standalone/.next/static/chunks/app/api/timeline/route-d0de276a8c0b264e.js +0 -1
  601. package/dist/standalone/.next/static/chunks/app/api/tmux/route-d0de276a8c0b264e.js +0 -1
  602. package/dist/standalone/.next/static/chunks/app/api/tmux/targets/route-d0de276a8c0b264e.js +0 -1
  603. package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-d0de276a8c0b264e.js +0 -1
  604. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-d0de276a8c0b264e.js +0 -1
  605. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-d0de276a8c0b264e.js +0 -1
  606. package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-d0de276a8c0b264e.js +0 -1
  607. package/dist/standalone/.next/static/chunks/app/api/workflows/route-d0de276a8c0b264e.js +0 -1
  608. package/dist/standalone/.next/static/chunks/app/layout-22e93960d4e3259a.js +0 -1
  609. package/dist/standalone/.next/static/chunks/app/page-6c0325e2d49a521e.js +0 -2
  610. package/dist/standalone/.next/static/chunks/framework-93cda6578f6c76ec.js +0 -1
  611. package/dist/standalone/.next/static/chunks/main-app-e6ff5fbff7d5b38f.js +0 -1
  612. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d0de276a8c0b264e.js +0 -1
  613. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d0de276a8c0b264e.js +0 -1
  614. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-2b3b5eea82b805ca.js +0 -1
  615. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d0de276a8c0b264e.js +0 -1
  616. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d0de276a8c0b264e.js +0 -1
  617. package/dist/standalone/.next/static/chunks/webpack-7dc14fd5ff1227ce.js +0 -1
  618. package/dist/standalone/.next/static/css/b9bc533a63013ced.css +0 -1
  619. /package/dist/standalone/.next/static/{U4SZ1qekrUMw43qsp4kED → kt9OPe8iwfpNcdOX9ygvb}/_ssgManifest.js +0 -0
package/README.md CHANGED
@@ -1,30 +1,67 @@
1
- # Live Log Viewer
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
- Everything runs locally against files already on disk. There is no database and
9
- no external service — the app reads `~/.claude` and `~/.codex` and renders what
10
- it finds.
8
+ ![From the overview board into a session and its live tail](docs/media/board-to-live-tail.gif)
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
  ![The chat feed: user bubbles, assistant prose, and tool-call cards with
13
37
  statuses and expandable output](docs/media/chat-feed.png)
14
38
 
15
- ## What it shows
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
+ ![Drafting and configuring a new agent on the project board](docs/media/spawn-agent.gif)
16
47
 
17
- - **Claude Code sessions** (`~/.claude/projects/**/*.jsonl`) and their
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
- ## Highlights
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
+ ![A review loop: round 1 requested changes, round 2 re-checks live](docs/media/review-loop.gif)
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
+ ![Answering a pending AskUserQuestion from the feed](docs/media/pending-question.gif)
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
- - **Project scheme**: each project is a pannable, zoomable diagram — the root
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
  ![Session parentage tree](docs/media/session-tree.png)
@@ -50,9 +82,12 @@ The session parentage tree, wiring root conversations to their spawned agents:
50
82
  | --- | --- |
51
83
  | ![Codex session with command cards and patches](docs/media/codex-session.png) | ![Overview board across projects](docs/media/overview-board.png) |
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
- With npm (note the `--` that forwards flags to the start script):
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
- npm install
80
- npm run build
81
- npm start -- --port 8898 --hostname 127.0.0.1
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
- `start` serves the output of the last `build`, so run `build` first. For
85
- development, `bun dev` runs the app with hot reload (it needs a high OS
86
- file-watch limit for large home directories).
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 viewer
95
- with host parity (the container reuses your real `tmux`, `claude`, `codex` and
96
- home directory). This is how the maintainer's own prod instance runs.
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
- docker compose up -d viewer # prod on 127.0.0.1:8898, restarts on reboot
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 are still honored as read-only fallbacks, so
248
- existing setups keep working without changes.
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
- command: process.execPath,
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
- command: process.execPath,
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
- command: nextBin,
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(` ✳ Live Log Viewer v${version}`);
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
+ }