agent-log-viewer 1.0.1 → 1.0.3

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 (558) hide show
  1. package/README.md +37 -21
  2. package/bin/cli.mjs +212 -12
  3. package/bin/server-runtime.mjs +51 -0
  4. package/bin/server-runtime.test.ts +190 -0
  5. package/dist/mcp-server.mjs +2515 -416
  6. package/dist/runtime-host.mjs +41670 -0
  7. package/dist/standalone/.next/BUILD_ID +1 -1
  8. package/dist/standalone/.next/app-path-routes-manifest.json +28 -25
  9. package/dist/standalone/.next/build-manifest.json +2 -2
  10. package/dist/standalone/.next/prerender-manifest.json +3 -3
  11. package/dist/standalone/.next/routes-manifest.json +18 -0
  12. package/dist/standalone/.next/server/account-migration-controller-worker.js +1 -1
  13. package/dist/standalone/.next/server/app/_global-error/page.js +3 -3
  14. package/dist/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
  15. package/dist/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  16. package/dist/standalone/.next/server/app/_global-error.html +1 -1
  17. package/dist/standalone/.next/server/app/_global-error.rsc +1 -1
  18. package/dist/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  19. package/dist/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  20. package/dist/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  21. package/dist/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  22. package/dist/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  23. package/dist/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  24. package/dist/standalone/.next/server/app/_not-found/page.js +2 -2
  25. package/dist/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  26. package/dist/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  27. package/dist/standalone/.next/server/app/_not-found.html +1 -1
  28. package/dist/standalone/.next/server/app/_not-found.rsc +2 -2
  29. package/dist/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  30. package/dist/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  31. package/dist/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  32. package/dist/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  33. package/dist/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  34. package/dist/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  35. package/dist/standalone/.next/server/app/api/access/route.js +1 -1
  36. package/dist/standalone/.next/server/app/api/access/route.js.nft.json +1 -1
  37. package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route.js +1 -1
  38. package/dist/standalone/.next/server/app/api/account-migrations/[intentId]/route.js.nft.json +1 -1
  39. package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js +3 -3
  40. package/dist/standalone/.next/server/app/api/accounts/claude/[id]/status/route.js.nft.json +1 -1
  41. package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js +1 -1
  42. package/dist/standalone/.next/server/app/api/accounts/claude/active/route.js.nft.json +1 -1
  43. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js +3 -3
  44. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/input/route.js.nft.json +1 -1
  45. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js +3 -3
  46. package/dist/standalone/.next/server/app/api/accounts/claude/login/[operationId]/route.js.nft.json +1 -1
  47. package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js +1 -1
  48. package/dist/standalone/.next/server/app/api/accounts/claude/policy/route.js.nft.json +1 -1
  49. package/dist/standalone/.next/server/app/api/accounts/claude/route.js +1 -1
  50. package/dist/standalone/.next/server/app/api/accounts/claude/route.js.nft.json +1 -1
  51. package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js +3 -3
  52. package/dist/standalone/.next/server/app/api/accounts/claude/terminal/route.js.nft.json +1 -1
  53. package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js +1 -1
  54. package/dist/standalone/.next/server/app/api/accounts/codex/active/route.js.nft.json +1 -1
  55. package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js +1 -1
  56. package/dist/standalone/.next/server/app/api/accounts/codex/policy/route.js.nft.json +1 -1
  57. package/dist/standalone/.next/server/app/api/accounts/codex/route.js +1 -1
  58. package/dist/standalone/.next/server/app/api/accounts/codex/route.js.nft.json +1 -1
  59. package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js +3 -3
  60. package/dist/standalone/.next/server/app/api/accounts/codex/terminal/route.js.nft.json +1 -1
  61. package/dist/standalone/.next/server/app/api/accounts/route.js +1 -1
  62. package/dist/standalone/.next/server/app/api/accounts/route.js.nft.json +1 -1
  63. package/dist/standalone/.next/server/app/api/agent/route.js +1 -1
  64. package/dist/standalone/.next/server/app/api/agent/route.js.nft.json +1 -1
  65. package/dist/standalone/.next/server/app/api/agent/snapshot/route.js +1 -1
  66. package/dist/standalone/.next/server/app/api/agent/snapshot/route.js.nft.json +1 -1
  67. package/dist/standalone/.next/server/app/api/answer/route.js +2 -1
  68. package/dist/standalone/.next/server/app/api/answer/route.js.nft.json +1 -1
  69. package/dist/standalone/.next/server/app/api/artifact/route.js +1 -1
  70. package/dist/standalone/.next/server/app/api/artifact/route.js.nft.json +1 -1
  71. package/dist/standalone/.next/server/app/api/attach-command/route.js +1 -1
  72. package/dist/standalone/.next/server/app/api/attach-command/route.js.nft.json +1 -1
  73. package/dist/standalone/.next/server/app/api/attention/[id]/route.js +1 -1
  74. package/dist/standalone/.next/server/app/api/attention/[id]/route.js.nft.json +1 -1
  75. package/dist/standalone/.next/server/app/api/attention/route.js +1 -1
  76. package/dist/standalone/.next/server/app/api/attention/route.js.nft.json +1 -1
  77. package/dist/standalone/.next/server/app/api/board/route.js +1 -1
  78. package/dist/standalone/.next/server/app/api/board/route.js.nft.json +1 -1
  79. package/dist/standalone/.next/server/app/api/bridge/route.js +2 -2
  80. package/dist/standalone/.next/server/app/api/bridge/route.js.nft.json +1 -1
  81. package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js +1 -1
  82. package/dist/standalone/.next/server/app/api/conversations/[conversationId]/migration/route.js.nft.json +1 -1
  83. package/dist/standalone/.next/server/app/api/conversations/route.js +1 -1
  84. package/dist/standalone/.next/server/app/api/conversations/route.js.nft.json +1 -1
  85. package/dist/standalone/.next/server/app/api/files/route.js +2 -2
  86. package/dist/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  87. package/dist/standalone/.next/server/app/api/flows/[id]/route.js +1 -1
  88. package/dist/standalone/.next/server/app/api/flows/[id]/route.js.nft.json +1 -1
  89. package/dist/standalone/.next/server/app/api/flows/route.js +1 -1
  90. package/dist/standalone/.next/server/app/api/flows/route.js.nft.json +1 -1
  91. package/dist/standalone/.next/server/app/api/image/route.js +1 -1
  92. package/dist/standalone/.next/server/app/api/image/route.js.nft.json +1 -1
  93. package/dist/standalone/.next/server/app/api/inbox/route.js +2 -2
  94. package/dist/standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
  95. package/dist/standalone/.next/server/app/api/lifecycle/reaper/route.js +1 -1
  96. package/dist/standalone/.next/server/app/api/lifecycle/reaper/route.js.nft.json +1 -1
  97. package/dist/standalone/.next/server/app/api/limits/history/route.js +3 -3
  98. package/dist/standalone/.next/server/app/api/limits/history/route.js.nft.json +1 -1
  99. package/dist/standalone/.next/server/app/api/limits/route.js +3 -3
  100. package/dist/standalone/.next/server/app/api/limits/route.js.nft.json +1 -1
  101. package/dist/standalone/.next/server/app/api/log/preflight/route.js +1 -1
  102. package/dist/standalone/.next/server/app/api/log/preflight/route.js.nft.json +1 -1
  103. package/dist/standalone/.next/server/app/api/log/project-delete/route.js +1 -1
  104. package/dist/standalone/.next/server/app/api/log/project-delete/route.js.nft.json +1 -1
  105. package/dist/standalone/.next/server/app/api/log/provenance/route.js +67 -1
  106. package/dist/standalone/.next/server/app/api/log/provenance/route.js.nft.json +1 -1
  107. package/dist/standalone/.next/server/app/api/log/route.js +1 -1
  108. package/dist/standalone/.next/server/app/api/log/route.js.nft.json +1 -1
  109. package/dist/standalone/.next/server/app/api/log/suggestions/route.js +3 -0
  110. package/dist/standalone/.next/server/app/api/log/suggestions/route.js.nft.json +1 -0
  111. package/dist/standalone/.next/server/app/api/log/suggestions/route_client-reference-manifest.js +1 -0
  112. package/dist/standalone/.next/server/app/api/logs/route.js +1 -1
  113. package/dist/standalone/.next/server/app/api/logs/route.js.nft.json +1 -1
  114. package/dist/standalone/.next/server/app/api/logs/stream/route.js +2 -2
  115. package/dist/standalone/.next/server/app/api/logs/stream/route.js.nft.json +1 -1
  116. package/dist/standalone/.next/server/app/api/monitor/lock/route.js +1 -3
  117. package/dist/standalone/.next/server/app/api/monitor/lock/route.js.nft.json +1 -1
  118. package/dist/standalone/.next/server/app/api/monitor/runs/route.js +1 -3
  119. package/dist/standalone/.next/server/app/api/monitor/runs/route.js.nft.json +1 -1
  120. package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js +1 -1
  121. package/dist/standalone/.next/server/app/api/orchestrator/rotate/route.js.nft.json +1 -1
  122. package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js +1 -1
  123. package/dist/standalone/.next/server/app/api/orchestrator/seat/route.js.nft.json +1 -1
  124. package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route.js +2 -2
  125. package/dist/standalone/.next/server/app/api/orchestrator/seat/status/route.js.nft.json +1 -1
  126. package/dist/standalone/.next/server/app/api/pipelines/[id]/route.js +1 -1
  127. package/dist/standalone/.next/server/app/api/pipelines/[id]/route.js.nft.json +1 -1
  128. package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js +1 -1
  129. package/dist/standalone/.next/server/app/api/pipelines/preflight/route.js.nft.json +1 -1
  130. package/dist/standalone/.next/server/app/api/pipelines/route.js +2 -2
  131. package/dist/standalone/.next/server/app/api/pipelines/route.js.nft.json +1 -1
  132. package/dist/standalone/.next/server/app/api/pipelines/tick/route.js +2 -2
  133. package/dist/standalone/.next/server/app/api/pipelines/tick/route.js.nft.json +1 -1
  134. package/dist/standalone/.next/server/app/api/proc/route.js +1 -1
  135. package/dist/standalone/.next/server/app/api/proc/route.js.nft.json +1 -1
  136. package/dist/standalone/.next/server/app/api/projects/create/route.js +2 -2
  137. package/dist/standalone/.next/server/app/api/projects/create/route.js.nft.json +1 -1
  138. package/dist/standalone/.next/server/app/api/projects/crown/route.js +1 -1
  139. package/dist/standalone/.next/server/app/api/projects/crown/route.js.nft.json +1 -1
  140. package/dist/standalone/.next/server/app/api/projects/directories/route.js +1 -0
  141. package/dist/standalone/.next/server/app/api/projects/directories/route.js.nft.json +1 -0
  142. package/dist/standalone/.next/server/app/api/projects/directories/route_client-reference-manifest.js +1 -0
  143. package/dist/standalone/.next/server/app/api/push/route.js +2 -2
  144. package/dist/standalone/.next/server/app/api/push/route.js.nft.json +1 -1
  145. package/dist/standalone/.next/server/app/api/resources/route.js +1 -1
  146. package/dist/standalone/.next/server/app/api/resources/route.js.nft.json +1 -1
  147. package/dist/standalone/.next/server/app/api/roles/route.js +2 -2
  148. package/dist/standalone/.next/server/app/api/roles/route.js.nft.json +1 -1
  149. package/dist/standalone/.next/server/app/api/runtime/answer/route.js +2 -1
  150. package/dist/standalone/.next/server/app/api/runtime/answer/route.js.nft.json +1 -1
  151. package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js +1 -1
  152. package/dist/standalone/.next/server/app/api/runtime/deployments/[deploymentId]/route.js.nft.json +1 -1
  153. package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js +1 -1
  154. package/dist/standalone/.next/server/app/api/runtime/deployments/capabilities/v1/route.js.nft.json +1 -1
  155. package/dist/standalone/.next/server/app/api/runtime/deployments/route.js +1 -1
  156. package/dist/standalone/.next/server/app/api/runtime/deployments/route.js.nft.json +1 -1
  157. package/dist/standalone/.next/server/app/api/runtime/hosts/route.js +1 -0
  158. package/dist/standalone/.next/server/app/api/runtime/hosts/route.js.nft.json +1 -0
  159. package/dist/standalone/.next/server/app/api/runtime/hosts/route_client-reference-manifest.js +1 -0
  160. package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js +2 -1
  161. package/dist/standalone/.next/server/app/api/runtime/interrupt/route.js.nft.json +1 -1
  162. package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js +2 -1
  163. package/dist/standalone/.next/server/app/api/runtime/operations/[operationId]/route.js.nft.json +1 -1
  164. package/dist/standalone/.next/server/app/api/runtime/operations/route.js +1 -1
  165. package/dist/standalone/.next/server/app/api/runtime/operations/route.js.nft.json +1 -1
  166. package/dist/standalone/.next/server/app/api/runtime/realtime/route.js +2 -1
  167. package/dist/standalone/.next/server/app/api/runtime/realtime/route.js.nft.json +1 -1
  168. package/dist/standalone/.next/server/app/api/runtime/send/route.js +2 -1
  169. package/dist/standalone/.next/server/app/api/runtime/send/route.js.nft.json +1 -1
  170. package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js +1 -1
  171. package/dist/standalone/.next/server/app/api/runtime/snapshot/route.js.nft.json +1 -1
  172. package/dist/standalone/.next/server/app/api/runtime/spawn/route.js +2 -1
  173. package/dist/standalone/.next/server/app/api/runtime/spawn/route.js.nft.json +1 -1
  174. package/dist/standalone/.next/server/app/api/runtime/steer/route.js +2 -1
  175. package/dist/standalone/.next/server/app/api/runtime/steer/route.js.nft.json +1 -1
  176. package/dist/standalone/.next/server/app/api/runtime/stream/route.js +2 -2
  177. package/dist/standalone/.next/server/app/api/runtime/stream/route.js.nft.json +1 -1
  178. package/dist/standalone/.next/server/app/api/search/transcripts/route.js +2 -2
  179. package/dist/standalone/.next/server/app/api/search/transcripts/route.js.nft.json +1 -1
  180. package/dist/standalone/.next/server/app/api/session/route.js +1 -1
  181. package/dist/standalone/.next/server/app/api/session/route.js.nft.json +1 -1
  182. package/dist/standalone/.next/server/app/api/session/supersedence/route.js +1 -1
  183. package/dist/standalone/.next/server/app/api/session/supersedence/route.js.nft.json +1 -1
  184. package/dist/standalone/.next/server/app/api/session/title/route.js +1 -1
  185. package/dist/standalone/.next/server/app/api/session/title/route.js.nft.json +1 -1
  186. package/dist/standalone/.next/server/app/api/spawn/policy/route.js +4 -4
  187. package/dist/standalone/.next/server/app/api/spawn/policy/route.js.nft.json +1 -1
  188. package/dist/standalone/.next/server/app/api/spawn/route.js +2 -2
  189. package/dist/standalone/.next/server/app/api/spawn/route.js.nft.json +1 -1
  190. package/dist/standalone/.next/server/app/api/staging/route.js +2 -2
  191. package/dist/standalone/.next/server/app/api/staging/route.js.nft.json +1 -1
  192. package/dist/standalone/.next/server/app/api/task-attachments/route.js +2 -2
  193. package/dist/standalone/.next/server/app/api/task-attachments/route.js.nft.json +1 -1
  194. package/dist/standalone/.next/server/app/api/tasks/[id]/assignment/route.js +1 -1
  195. package/dist/standalone/.next/server/app/api/tasks/[id]/assignment/route.js.nft.json +1 -1
  196. package/dist/standalone/.next/server/app/api/tasks/[id]/route.js +1 -1
  197. package/dist/standalone/.next/server/app/api/tasks/[id]/route.js.nft.json +1 -1
  198. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js +2 -1
  199. package/dist/standalone/.next/server/app/api/tasks/[id]/send/route.js.nft.json +1 -1
  200. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js +2 -1
  201. package/dist/standalone/.next/server/app/api/tasks/[id]/spawn/route.js.nft.json +1 -1
  202. package/dist/standalone/.next/server/app/api/tasks/curator/route.js +1 -1
  203. package/dist/standalone/.next/server/app/api/tasks/curator/route.js.nft.json +1 -1
  204. package/dist/standalone/.next/server/app/api/tasks/route.js +2 -2
  205. package/dist/standalone/.next/server/app/api/tasks/route.js.nft.json +1 -1
  206. package/dist/standalone/.next/server/app/api/telegram/reports/route.js +1 -1
  207. package/dist/standalone/.next/server/app/api/telegram/reports/route.js.nft.json +1 -1
  208. package/dist/standalone/.next/server/app/api/telegram/route.js +1 -1
  209. package/dist/standalone/.next/server/app/api/telegram/route.js.nft.json +1 -1
  210. package/dist/standalone/.next/server/app/api/timeline/route.js +1 -1
  211. package/dist/standalone/.next/server/app/api/timeline/route.js.nft.json +1 -1
  212. package/dist/standalone/.next/server/app/api/tmux/route.js +2 -1
  213. package/dist/standalone/.next/server/app/api/tmux/route.js.nft.json +1 -1
  214. package/dist/standalone/.next/server/app/api/tmux/targets/route.js +1 -1
  215. package/dist/standalone/.next/server/app/api/tmux/targets/route.js.nft.json +1 -1
  216. package/dist/standalone/.next/server/app/api/transcribe/backend/route.js +2 -2
  217. package/dist/standalone/.next/server/app/api/transcribe/backend/route.js.nft.json +1 -1
  218. package/dist/standalone/.next/server/app/api/transcribe/route.js +2 -2
  219. package/dist/standalone/.next/server/app/api/transcribe/route.js.nft.json +1 -1
  220. package/dist/standalone/.next/server/app/api/transcribe/token/route.js +2 -2
  221. package/dist/standalone/.next/server/app/api/transcribe/token/route.js.nft.json +1 -1
  222. package/dist/standalone/.next/server/app/api/tts/backend/route.js +1 -1
  223. package/dist/standalone/.next/server/app/api/tts/backend/route.js.nft.json +1 -1
  224. package/dist/standalone/.next/server/app/api/tts/route.js +1 -1
  225. package/dist/standalone/.next/server/app/api/tts/route.js.nft.json +1 -1
  226. package/dist/standalone/.next/server/app/api/view/presence/route.js +1 -1
  227. package/dist/standalone/.next/server/app/api/view/presence/route.js.nft.json +1 -1
  228. package/dist/standalone/.next/server/app/api/workflows/[id]/route.js +1 -1
  229. package/dist/standalone/.next/server/app/api/workflows/[id]/route.js.nft.json +1 -1
  230. package/dist/standalone/.next/server/app/api/workflows/route.js +1 -1
  231. package/dist/standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
  232. package/dist/standalone/.next/server/app/favicon.ico/route.js +1 -1
  233. package/dist/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -1
  234. package/dist/standalone/.next/server/app/index.html +1 -1
  235. package/dist/standalone/.next/server/app/index.rsc +3 -3
  236. package/dist/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  237. package/dist/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
  238. package/dist/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  239. package/dist/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  240. package/dist/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  241. package/dist/standalone/.next/server/app/page.js +21 -14
  242. package/dist/standalone/.next/server/app/page.js.nft.json +1 -1
  243. package/dist/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  244. package/dist/standalone/.next/server/app-paths-manifest.json +28 -25
  245. package/dist/standalone/.next/server/chunks/107.js +1 -0
  246. package/dist/standalone/.next/server/chunks/{1858.js → 1100.js} +2 -2
  247. package/dist/standalone/.next/server/chunks/1872.js +42 -0
  248. package/dist/standalone/.next/server/chunks/1952.js +3 -0
  249. package/dist/standalone/.next/server/chunks/2243.js +1 -0
  250. package/dist/standalone/.next/server/chunks/2260.js +104 -0
  251. package/dist/standalone/.next/server/chunks/2318.js +2 -2
  252. package/dist/standalone/.next/server/chunks/2324.js +1 -1
  253. package/dist/standalone/.next/server/chunks/2549.js +81 -0
  254. package/dist/standalone/.next/server/chunks/2682.js +85 -0
  255. package/dist/standalone/.next/server/chunks/3086.js +1 -1
  256. package/dist/standalone/.next/server/chunks/3214.js +1 -1
  257. package/dist/standalone/.next/server/chunks/3302.js +2 -0
  258. package/dist/standalone/.next/server/chunks/3336.js +1 -1
  259. package/dist/standalone/.next/server/chunks/3386.js +2 -0
  260. package/dist/standalone/.next/server/chunks/3558.js +1 -1
  261. package/dist/standalone/.next/server/chunks/3587.js +1 -1
  262. package/dist/standalone/.next/server/chunks/3740.js +20 -20
  263. package/dist/standalone/.next/server/chunks/3830.js +1 -0
  264. package/dist/standalone/.next/server/chunks/4012.js +3 -3
  265. package/dist/standalone/.next/server/chunks/4191.js +1 -1
  266. package/dist/standalone/.next/server/chunks/4310.js +1 -0
  267. package/dist/standalone/.next/server/chunks/4509.js +1 -1
  268. package/dist/standalone/.next/server/chunks/4565.js +1 -0
  269. package/dist/standalone/.next/server/chunks/4651.js +2 -0
  270. package/dist/standalone/.next/server/chunks/4756.js +13 -0
  271. package/dist/standalone/.next/server/chunks/4972.js +2 -2
  272. package/dist/standalone/.next/server/chunks/5103.js +10 -0
  273. package/dist/standalone/.next/server/chunks/5408.js +1 -0
  274. package/dist/standalone/.next/server/chunks/5545.js +1 -0
  275. package/dist/standalone/.next/server/chunks/5689.js +2 -2
  276. package/dist/standalone/.next/server/chunks/6333.js +3 -3
  277. package/dist/standalone/.next/server/chunks/6487.js +10 -0
  278. package/dist/standalone/.next/server/chunks/6796.js +1 -1
  279. package/dist/standalone/.next/server/chunks/6820.js +99 -0
  280. package/dist/standalone/.next/server/chunks/6826.js +1 -1
  281. package/dist/standalone/.next/server/chunks/6839.js +81 -0
  282. package/dist/standalone/.next/server/chunks/6850.js +1 -1
  283. package/dist/standalone/.next/server/chunks/6909.js +1 -1
  284. package/dist/standalone/.next/server/chunks/6942.js +27 -0
  285. package/dist/standalone/.next/server/chunks/7139.js +82 -0
  286. package/dist/standalone/.next/server/chunks/7471.js +13 -13
  287. package/dist/standalone/.next/server/chunks/7644.js +2 -2
  288. package/dist/standalone/.next/server/chunks/7722.js +1 -1
  289. package/dist/standalone/.next/server/chunks/773.js +47 -0
  290. package/dist/standalone/.next/server/chunks/7733.js +3 -3
  291. package/dist/standalone/.next/server/chunks/8263.js +81 -0
  292. package/dist/standalone/.next/server/chunks/8326.js +1 -0
  293. package/dist/standalone/.next/server/chunks/8444.js +1 -1
  294. package/dist/standalone/.next/server/chunks/8617.js +1 -1
  295. package/dist/standalone/.next/server/chunks/8797.js +1 -1
  296. package/dist/standalone/.next/server/chunks/8817.js +2 -2
  297. package/dist/standalone/.next/server/chunks/8996.js +1 -1
  298. package/dist/standalone/.next/server/chunks/9307.js +1 -0
  299. package/dist/standalone/.next/server/chunks/9364.js +61 -61
  300. package/dist/standalone/.next/server/chunks/9381.js +42 -0
  301. package/dist/standalone/.next/server/chunks/9403.js +1 -0
  302. package/dist/standalone/.next/server/chunks/9411.js +2 -2
  303. package/dist/standalone/.next/server/chunks/9434.js +3 -3
  304. package/dist/standalone/.next/server/chunks/9488.js +1 -0
  305. package/dist/standalone/.next/server/chunks/9750.js +1 -0
  306. package/dist/standalone/.next/server/chunks/9777.js +1 -0
  307. package/dist/standalone/.next/server/chunks/9937.js +1 -1
  308. package/dist/standalone/.next/server/chunks/9940.js +1 -1
  309. package/dist/standalone/.next/server/chunks/9998.js +1 -1
  310. package/dist/standalone/.next/server/files-response-worker.js +3 -3
  311. package/dist/standalone/.next/server/functions-config-manifest.json +3 -0
  312. package/dist/standalone/.next/server/instrumentation.js +1 -1
  313. package/dist/standalone/.next/server/middleware-build-manifest.js +1 -1
  314. package/dist/standalone/.next/server/pages/404.html +1 -1
  315. package/dist/standalone/.next/server/pages/500.html +1 -1
  316. package/dist/standalone/.next/server/resource-collector-worker.js +1 -1
  317. package/dist/standalone/.next/server/server-reference-manifest.json +1 -1
  318. package/dist/standalone/.next/server/wakatime-sync-worker.js +2 -2
  319. package/dist/standalone/.next/static/94yAMfjyhUPRgarycP9y4/_buildManifest.js +1 -0
  320. package/dist/standalone/.next/static/chunks/app/_global-error/page-ae02882983617748.js +1 -0
  321. package/dist/standalone/.next/static/chunks/app/api/access/route-ae02882983617748.js +1 -0
  322. package/dist/standalone/.next/static/chunks/app/api/account-migrations/[intentId]/route-ae02882983617748.js +1 -0
  323. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/[id]/status/route-ae02882983617748.js +1 -0
  324. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/active/route-ae02882983617748.js +1 -0
  325. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/input/route-ae02882983617748.js +1 -0
  326. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/route-ae02882983617748.js +1 -0
  327. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/policy/route-ae02882983617748.js +1 -0
  328. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/route-ae02882983617748.js +1 -0
  329. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/terminal/route-ae02882983617748.js +1 -0
  330. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/active/route-ae02882983617748.js +1 -0
  331. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/policy/route-ae02882983617748.js +1 -0
  332. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/route-ae02882983617748.js +1 -0
  333. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/terminal/route-ae02882983617748.js +1 -0
  334. package/dist/standalone/.next/static/chunks/app/api/accounts/route-ae02882983617748.js +1 -0
  335. package/dist/standalone/.next/static/chunks/app/api/agent/route-ae02882983617748.js +1 -0
  336. package/dist/standalone/.next/static/chunks/app/api/agent/snapshot/route-ae02882983617748.js +1 -0
  337. package/dist/standalone/.next/static/chunks/app/api/answer/route-ae02882983617748.js +1 -0
  338. package/dist/standalone/.next/static/chunks/app/api/artifact/route-ae02882983617748.js +1 -0
  339. package/dist/standalone/.next/static/chunks/app/api/attach-command/route-ae02882983617748.js +1 -0
  340. package/dist/standalone/.next/static/chunks/app/api/attention/[id]/route-ae02882983617748.js +1 -0
  341. package/dist/standalone/.next/static/chunks/app/api/attention/route-ae02882983617748.js +1 -0
  342. package/dist/standalone/.next/static/chunks/app/api/board/route-ae02882983617748.js +1 -0
  343. package/dist/standalone/.next/static/chunks/app/api/bridge/route-ae02882983617748.js +1 -0
  344. package/dist/standalone/.next/static/chunks/app/api/conversations/[conversationId]/migration/route-ae02882983617748.js +1 -0
  345. package/dist/standalone/.next/static/chunks/app/api/conversations/route-ae02882983617748.js +1 -0
  346. package/dist/standalone/.next/static/chunks/app/api/files/route-ae02882983617748.js +1 -0
  347. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-ae02882983617748.js +1 -0
  348. package/dist/standalone/.next/static/chunks/app/api/flows/route-ae02882983617748.js +1 -0
  349. package/dist/standalone/.next/static/chunks/app/api/image/route-ae02882983617748.js +1 -0
  350. package/dist/standalone/.next/static/chunks/app/api/inbox/route-ae02882983617748.js +1 -0
  351. package/dist/standalone/.next/static/chunks/app/api/lifecycle/reaper/route-ae02882983617748.js +1 -0
  352. package/dist/standalone/.next/static/chunks/app/api/limits/history/route-ae02882983617748.js +1 -0
  353. package/dist/standalone/.next/static/chunks/app/api/limits/route-ae02882983617748.js +1 -0
  354. package/dist/standalone/.next/static/chunks/app/api/log/preflight/route-ae02882983617748.js +1 -0
  355. package/dist/standalone/.next/static/chunks/app/api/log/project-delete/route-ae02882983617748.js +1 -0
  356. package/dist/standalone/.next/static/chunks/app/api/log/provenance/route-ae02882983617748.js +1 -0
  357. package/dist/standalone/.next/static/chunks/app/api/log/route-ae02882983617748.js +1 -0
  358. package/dist/standalone/.next/static/chunks/app/api/log/suggestions/route-ae02882983617748.js +1 -0
  359. package/dist/standalone/.next/static/chunks/app/api/logs/route-ae02882983617748.js +1 -0
  360. package/dist/standalone/.next/static/chunks/app/api/logs/stream/route-ae02882983617748.js +1 -0
  361. package/dist/standalone/.next/static/chunks/app/api/monitor/lock/route-ae02882983617748.js +1 -0
  362. package/dist/standalone/.next/static/chunks/app/api/monitor/runs/route-ae02882983617748.js +1 -0
  363. package/dist/standalone/.next/static/chunks/app/api/orchestrator/rotate/route-ae02882983617748.js +1 -0
  364. package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/route-ae02882983617748.js +1 -0
  365. package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/status/route-ae02882983617748.js +1 -0
  366. package/dist/standalone/.next/static/chunks/app/api/pipelines/[id]/route-ae02882983617748.js +1 -0
  367. package/dist/standalone/.next/static/chunks/app/api/pipelines/preflight/route-ae02882983617748.js +1 -0
  368. package/dist/standalone/.next/static/chunks/app/api/pipelines/route-ae02882983617748.js +1 -0
  369. package/dist/standalone/.next/static/chunks/app/api/pipelines/tick/route-ae02882983617748.js +1 -0
  370. package/dist/standalone/.next/static/chunks/app/api/proc/route-ae02882983617748.js +1 -0
  371. package/dist/standalone/.next/static/chunks/app/api/projects/create/route-ae02882983617748.js +1 -0
  372. package/dist/standalone/.next/static/chunks/app/api/projects/crown/route-ae02882983617748.js +1 -0
  373. package/dist/standalone/.next/static/chunks/app/api/projects/directories/route-ae02882983617748.js +1 -0
  374. package/dist/standalone/.next/static/chunks/app/api/push/route-ae02882983617748.js +1 -0
  375. package/dist/standalone/.next/static/chunks/app/api/resources/route-ae02882983617748.js +1 -0
  376. package/dist/standalone/.next/static/chunks/app/api/roles/route-ae02882983617748.js +1 -0
  377. package/dist/standalone/.next/static/chunks/app/api/runtime/answer/route-ae02882983617748.js +1 -0
  378. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/[deploymentId]/route-ae02882983617748.js +1 -0
  379. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/capabilities/v1/route-ae02882983617748.js +1 -0
  380. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/route-ae02882983617748.js +1 -0
  381. package/dist/standalone/.next/static/chunks/app/api/runtime/hosts/route-ae02882983617748.js +1 -0
  382. package/dist/standalone/.next/static/chunks/app/api/runtime/interrupt/route-ae02882983617748.js +1 -0
  383. package/dist/standalone/.next/static/chunks/app/api/runtime/operations/[operationId]/route-ae02882983617748.js +1 -0
  384. package/dist/standalone/.next/static/chunks/app/api/runtime/operations/route-ae02882983617748.js +1 -0
  385. package/dist/standalone/.next/static/chunks/app/api/runtime/realtime/route-ae02882983617748.js +1 -0
  386. package/dist/standalone/.next/static/chunks/app/api/runtime/send/route-ae02882983617748.js +1 -0
  387. package/dist/standalone/.next/static/chunks/app/api/runtime/snapshot/route-ae02882983617748.js +1 -0
  388. package/dist/standalone/.next/static/chunks/app/api/runtime/spawn/route-ae02882983617748.js +1 -0
  389. package/dist/standalone/.next/static/chunks/app/api/runtime/steer/route-ae02882983617748.js +1 -0
  390. package/dist/standalone/.next/static/chunks/app/api/runtime/stream/route-ae02882983617748.js +1 -0
  391. package/dist/standalone/.next/static/chunks/app/api/search/transcripts/route-ae02882983617748.js +1 -0
  392. package/dist/standalone/.next/static/chunks/app/api/session/route-ae02882983617748.js +1 -0
  393. package/dist/standalone/.next/static/chunks/app/api/session/supersedence/route-ae02882983617748.js +1 -0
  394. package/dist/standalone/.next/static/chunks/app/api/session/title/route-ae02882983617748.js +1 -0
  395. package/dist/standalone/.next/static/chunks/app/api/spawn/policy/route-ae02882983617748.js +1 -0
  396. package/dist/standalone/.next/static/chunks/app/api/spawn/route-ae02882983617748.js +1 -0
  397. package/dist/standalone/.next/static/chunks/app/api/staging/route-ae02882983617748.js +1 -0
  398. package/dist/standalone/.next/static/chunks/app/api/task-attachments/route-ae02882983617748.js +1 -0
  399. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/assignment/route-ae02882983617748.js +1 -0
  400. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-ae02882983617748.js +1 -0
  401. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-ae02882983617748.js +1 -0
  402. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-ae02882983617748.js +1 -0
  403. package/dist/standalone/.next/static/chunks/app/api/tasks/curator/route-ae02882983617748.js +1 -0
  404. package/dist/standalone/.next/static/chunks/app/api/tasks/route-ae02882983617748.js +1 -0
  405. package/dist/standalone/.next/static/chunks/app/api/telegram/reports/route-ae02882983617748.js +1 -0
  406. package/dist/standalone/.next/static/chunks/app/api/telegram/route-ae02882983617748.js +1 -0
  407. package/dist/standalone/.next/static/chunks/app/api/timeline/route-ae02882983617748.js +1 -0
  408. package/dist/standalone/.next/static/chunks/app/api/tmux/route-ae02882983617748.js +1 -0
  409. package/dist/standalone/.next/static/chunks/app/api/tmux/targets/route-ae02882983617748.js +1 -0
  410. package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-ae02882983617748.js +1 -0
  411. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-ae02882983617748.js +1 -0
  412. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-ae02882983617748.js +1 -0
  413. package/dist/standalone/.next/static/chunks/app/api/tts/backend/route-ae02882983617748.js +1 -0
  414. package/dist/standalone/.next/static/chunks/app/api/tts/route-ae02882983617748.js +1 -0
  415. package/dist/standalone/.next/static/chunks/app/api/view/presence/route-ae02882983617748.js +1 -0
  416. package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-ae02882983617748.js +1 -0
  417. package/dist/standalone/.next/static/chunks/app/api/workflows/route-ae02882983617748.js +1 -0
  418. package/dist/standalone/.next/static/chunks/app/page-1a141ae4aa9d31a9.js +85 -0
  419. package/dist/standalone/.next/static/chunks/{framework-d1de002210ddaaef.js → framework-04bc8c1a646a0097.js} +1 -1
  420. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-ae02882983617748.js +1 -0
  421. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-ae02882983617748.js +1 -0
  422. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-ae02882983617748.js +1 -0
  423. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-ae02882983617748.js +1 -0
  424. package/dist/standalone/.next/static/css/dc96fb2edbd8742e.css +1 -0
  425. package/dist/standalone/node_modules/{nanoid → next/node_modules/postcss/node_modules/nanoid}/non-secure/index.cjs +2 -2
  426. package/dist/standalone/node_modules/{nanoid → next/node_modules/postcss/node_modules/nanoid}/package.json +1 -1
  427. package/dist/standalone/node_modules/react/cjs/react.development.js +1 -1
  428. package/dist/standalone/node_modules/react/cjs/react.production.js +1 -1
  429. package/dist/standalone/node_modules/react/package.json +3 -3
  430. package/dist/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +1 -1
  431. package/dist/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +1 -1
  432. package/dist/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.js +3 -3
  433. package/dist/standalone/node_modules/react-dom/cjs/react-dom-server.edge.production.js +3 -3
  434. package/dist/standalone/node_modules/react-dom/cjs/react-dom-server.node.production.js +3 -3
  435. package/dist/standalone/node_modules/react-dom/cjs/react-dom.production.js +1 -1
  436. package/dist/standalone/node_modules/react-dom/package.json +4 -4
  437. package/dist/standalone/package.json +9 -8
  438. package/dist/standalone/src/lib/inboxFiles.ts +203 -0
  439. package/package.json +9 -8
  440. package/dist/standalone/.next/server/chunks/156.js +0 -2
  441. package/dist/standalone/.next/server/chunks/1920.js +0 -27
  442. package/dist/standalone/.next/server/chunks/2338.js +0 -9
  443. package/dist/standalone/.next/server/chunks/2904.js +0 -42
  444. package/dist/standalone/.next/server/chunks/2977.js +0 -1
  445. package/dist/standalone/.next/server/chunks/3139.js +0 -10
  446. package/dist/standalone/.next/server/chunks/3598.js +0 -81
  447. package/dist/standalone/.next/server/chunks/4968.js +0 -1
  448. package/dist/standalone/.next/server/chunks/6977.js +0 -1
  449. package/dist/standalone/.next/server/chunks/7295.js +0 -10
  450. package/dist/standalone/.next/server/chunks/7868.js +0 -1
  451. package/dist/standalone/.next/server/chunks/8026.js +0 -1
  452. package/dist/standalone/.next/server/chunks/8600.js +0 -12
  453. package/dist/standalone/.next/server/chunks/9246.js +0 -47
  454. package/dist/standalone/.next/server/chunks/9733.js +0 -42
  455. package/dist/standalone/.next/static/chunks/app/_global-error/page-c132c5ba005ff29e.js +0 -1
  456. package/dist/standalone/.next/static/chunks/app/api/access/route-c132c5ba005ff29e.js +0 -1
  457. package/dist/standalone/.next/static/chunks/app/api/account-migrations/[intentId]/route-c132c5ba005ff29e.js +0 -1
  458. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/[id]/status/route-c132c5ba005ff29e.js +0 -1
  459. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/active/route-c132c5ba005ff29e.js +0 -1
  460. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/input/route-c132c5ba005ff29e.js +0 -1
  461. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/login/[operationId]/route-c132c5ba005ff29e.js +0 -1
  462. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/policy/route-c132c5ba005ff29e.js +0 -1
  463. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/route-c132c5ba005ff29e.js +0 -1
  464. package/dist/standalone/.next/static/chunks/app/api/accounts/claude/terminal/route-c132c5ba005ff29e.js +0 -1
  465. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/active/route-c132c5ba005ff29e.js +0 -1
  466. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/policy/route-c132c5ba005ff29e.js +0 -1
  467. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/route-c132c5ba005ff29e.js +0 -1
  468. package/dist/standalone/.next/static/chunks/app/api/accounts/codex/terminal/route-c132c5ba005ff29e.js +0 -1
  469. package/dist/standalone/.next/static/chunks/app/api/accounts/route-c132c5ba005ff29e.js +0 -1
  470. package/dist/standalone/.next/static/chunks/app/api/agent/route-c132c5ba005ff29e.js +0 -1
  471. package/dist/standalone/.next/static/chunks/app/api/agent/snapshot/route-c132c5ba005ff29e.js +0 -1
  472. package/dist/standalone/.next/static/chunks/app/api/answer/route-c132c5ba005ff29e.js +0 -1
  473. package/dist/standalone/.next/static/chunks/app/api/artifact/route-c132c5ba005ff29e.js +0 -1
  474. package/dist/standalone/.next/static/chunks/app/api/attach-command/route-c132c5ba005ff29e.js +0 -1
  475. package/dist/standalone/.next/static/chunks/app/api/attention/[id]/route-c132c5ba005ff29e.js +0 -1
  476. package/dist/standalone/.next/static/chunks/app/api/attention/route-c132c5ba005ff29e.js +0 -1
  477. package/dist/standalone/.next/static/chunks/app/api/board/route-c132c5ba005ff29e.js +0 -1
  478. package/dist/standalone/.next/static/chunks/app/api/bridge/route-c132c5ba005ff29e.js +0 -1
  479. package/dist/standalone/.next/static/chunks/app/api/conversations/[conversationId]/migration/route-c132c5ba005ff29e.js +0 -1
  480. package/dist/standalone/.next/static/chunks/app/api/conversations/route-c132c5ba005ff29e.js +0 -1
  481. package/dist/standalone/.next/static/chunks/app/api/files/route-c132c5ba005ff29e.js +0 -1
  482. package/dist/standalone/.next/static/chunks/app/api/flows/[id]/route-c132c5ba005ff29e.js +0 -1
  483. package/dist/standalone/.next/static/chunks/app/api/flows/route-c132c5ba005ff29e.js +0 -1
  484. package/dist/standalone/.next/static/chunks/app/api/image/route-c132c5ba005ff29e.js +0 -1
  485. package/dist/standalone/.next/static/chunks/app/api/inbox/route-c132c5ba005ff29e.js +0 -1
  486. package/dist/standalone/.next/static/chunks/app/api/lifecycle/reaper/route-c132c5ba005ff29e.js +0 -1
  487. package/dist/standalone/.next/static/chunks/app/api/limits/history/route-c132c5ba005ff29e.js +0 -1
  488. package/dist/standalone/.next/static/chunks/app/api/limits/route-c132c5ba005ff29e.js +0 -1
  489. package/dist/standalone/.next/static/chunks/app/api/log/preflight/route-c132c5ba005ff29e.js +0 -1
  490. package/dist/standalone/.next/static/chunks/app/api/log/project-delete/route-c132c5ba005ff29e.js +0 -1
  491. package/dist/standalone/.next/static/chunks/app/api/log/provenance/route-c132c5ba005ff29e.js +0 -1
  492. package/dist/standalone/.next/static/chunks/app/api/log/route-c132c5ba005ff29e.js +0 -1
  493. package/dist/standalone/.next/static/chunks/app/api/logs/route-c132c5ba005ff29e.js +0 -1
  494. package/dist/standalone/.next/static/chunks/app/api/logs/stream/route-c132c5ba005ff29e.js +0 -1
  495. package/dist/standalone/.next/static/chunks/app/api/monitor/lock/route-c132c5ba005ff29e.js +0 -1
  496. package/dist/standalone/.next/static/chunks/app/api/monitor/runs/route-c132c5ba005ff29e.js +0 -1
  497. package/dist/standalone/.next/static/chunks/app/api/orchestrator/rotate/route-c132c5ba005ff29e.js +0 -1
  498. package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/route-c132c5ba005ff29e.js +0 -1
  499. package/dist/standalone/.next/static/chunks/app/api/orchestrator/seat/status/route-c132c5ba005ff29e.js +0 -1
  500. package/dist/standalone/.next/static/chunks/app/api/pipelines/[id]/route-c132c5ba005ff29e.js +0 -1
  501. package/dist/standalone/.next/static/chunks/app/api/pipelines/preflight/route-c132c5ba005ff29e.js +0 -1
  502. package/dist/standalone/.next/static/chunks/app/api/pipelines/route-c132c5ba005ff29e.js +0 -1
  503. package/dist/standalone/.next/static/chunks/app/api/pipelines/tick/route-c132c5ba005ff29e.js +0 -1
  504. package/dist/standalone/.next/static/chunks/app/api/proc/route-c132c5ba005ff29e.js +0 -1
  505. package/dist/standalone/.next/static/chunks/app/api/projects/create/route-c132c5ba005ff29e.js +0 -1
  506. package/dist/standalone/.next/static/chunks/app/api/projects/crown/route-c132c5ba005ff29e.js +0 -1
  507. package/dist/standalone/.next/static/chunks/app/api/push/route-c132c5ba005ff29e.js +0 -1
  508. package/dist/standalone/.next/static/chunks/app/api/resources/route-c132c5ba005ff29e.js +0 -1
  509. package/dist/standalone/.next/static/chunks/app/api/roles/route-c132c5ba005ff29e.js +0 -1
  510. package/dist/standalone/.next/static/chunks/app/api/runtime/answer/route-c132c5ba005ff29e.js +0 -1
  511. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/[deploymentId]/route-c132c5ba005ff29e.js +0 -1
  512. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/capabilities/v1/route-c132c5ba005ff29e.js +0 -1
  513. package/dist/standalone/.next/static/chunks/app/api/runtime/deployments/route-c132c5ba005ff29e.js +0 -1
  514. package/dist/standalone/.next/static/chunks/app/api/runtime/interrupt/route-c132c5ba005ff29e.js +0 -1
  515. package/dist/standalone/.next/static/chunks/app/api/runtime/operations/[operationId]/route-c132c5ba005ff29e.js +0 -1
  516. package/dist/standalone/.next/static/chunks/app/api/runtime/operations/route-c132c5ba005ff29e.js +0 -1
  517. package/dist/standalone/.next/static/chunks/app/api/runtime/realtime/route-c132c5ba005ff29e.js +0 -1
  518. package/dist/standalone/.next/static/chunks/app/api/runtime/send/route-c132c5ba005ff29e.js +0 -1
  519. package/dist/standalone/.next/static/chunks/app/api/runtime/snapshot/route-c132c5ba005ff29e.js +0 -1
  520. package/dist/standalone/.next/static/chunks/app/api/runtime/spawn/route-c132c5ba005ff29e.js +0 -1
  521. package/dist/standalone/.next/static/chunks/app/api/runtime/steer/route-c132c5ba005ff29e.js +0 -1
  522. package/dist/standalone/.next/static/chunks/app/api/runtime/stream/route-c132c5ba005ff29e.js +0 -1
  523. package/dist/standalone/.next/static/chunks/app/api/search/transcripts/route-c132c5ba005ff29e.js +0 -1
  524. package/dist/standalone/.next/static/chunks/app/api/session/route-c132c5ba005ff29e.js +0 -1
  525. package/dist/standalone/.next/static/chunks/app/api/session/supersedence/route-c132c5ba005ff29e.js +0 -1
  526. package/dist/standalone/.next/static/chunks/app/api/session/title/route-c132c5ba005ff29e.js +0 -1
  527. package/dist/standalone/.next/static/chunks/app/api/spawn/policy/route-c132c5ba005ff29e.js +0 -1
  528. package/dist/standalone/.next/static/chunks/app/api/spawn/route-c132c5ba005ff29e.js +0 -1
  529. package/dist/standalone/.next/static/chunks/app/api/staging/route-c132c5ba005ff29e.js +0 -1
  530. package/dist/standalone/.next/static/chunks/app/api/task-attachments/route-c132c5ba005ff29e.js +0 -1
  531. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/assignment/route-c132c5ba005ff29e.js +0 -1
  532. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/route-c132c5ba005ff29e.js +0 -1
  533. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/send/route-c132c5ba005ff29e.js +0 -1
  534. package/dist/standalone/.next/static/chunks/app/api/tasks/[id]/spawn/route-c132c5ba005ff29e.js +0 -1
  535. package/dist/standalone/.next/static/chunks/app/api/tasks/curator/route-c132c5ba005ff29e.js +0 -1
  536. package/dist/standalone/.next/static/chunks/app/api/tasks/route-c132c5ba005ff29e.js +0 -1
  537. package/dist/standalone/.next/static/chunks/app/api/telegram/reports/route-c132c5ba005ff29e.js +0 -1
  538. package/dist/standalone/.next/static/chunks/app/api/telegram/route-c132c5ba005ff29e.js +0 -1
  539. package/dist/standalone/.next/static/chunks/app/api/timeline/route-c132c5ba005ff29e.js +0 -1
  540. package/dist/standalone/.next/static/chunks/app/api/tmux/route-c132c5ba005ff29e.js +0 -1
  541. package/dist/standalone/.next/static/chunks/app/api/tmux/targets/route-c132c5ba005ff29e.js +0 -1
  542. package/dist/standalone/.next/static/chunks/app/api/transcribe/backend/route-c132c5ba005ff29e.js +0 -1
  543. package/dist/standalone/.next/static/chunks/app/api/transcribe/route-c132c5ba005ff29e.js +0 -1
  544. package/dist/standalone/.next/static/chunks/app/api/transcribe/token/route-c132c5ba005ff29e.js +0 -1
  545. package/dist/standalone/.next/static/chunks/app/api/tts/backend/route-c132c5ba005ff29e.js +0 -1
  546. package/dist/standalone/.next/static/chunks/app/api/tts/route-c132c5ba005ff29e.js +0 -1
  547. package/dist/standalone/.next/static/chunks/app/api/view/presence/route-c132c5ba005ff29e.js +0 -1
  548. package/dist/standalone/.next/static/chunks/app/api/workflows/[id]/route-c132c5ba005ff29e.js +0 -1
  549. package/dist/standalone/.next/static/chunks/app/api/workflows/route-c132c5ba005ff29e.js +0 -1
  550. package/dist/standalone/.next/static/chunks/app/page-ac9463b910bf83fe.js +0 -77
  551. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-c132c5ba005ff29e.js +0 -1
  552. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-c132c5ba005ff29e.js +0 -1
  553. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-c132c5ba005ff29e.js +0 -1
  554. package/dist/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-c132c5ba005ff29e.js +0 -1
  555. package/dist/standalone/.next/static/css/498f12ddef7ecb0e.css +0 -1
  556. package/dist/standalone/.next/static/kt9OPe8iwfpNcdOX9ygvb/_buildManifest.js +0 -1
  557. /package/dist/standalone/.next/static/{kt9OPe8iwfpNcdOX9ygvb → 94yAMfjyhUPRgarycP9y4}/_ssgManifest.js +0 -0
  558. /package/dist/standalone/node_modules/{nanoid → next/node_modules/postcss/node_modules/nanoid}/non-secure/package.json +0 -0
package/README.md CHANGED
@@ -36,6 +36,22 @@ and shown above the terminal output).
36
36
  ![The chat feed: user bubbles, assistant prose, and tool-call cards with
37
37
  statuses and expandable output](docs/media/chat-feed.png)
38
38
 
39
+ ### Hand a project to an orchestrator
40
+
41
+ ![The orchestrator dock beside its project board](docs/media/orchestrator-dock.png)
42
+
43
+ Each project can designate one agent as its **orchestrator**. Press
44
+ **Orchestrator** in the project header, tell it what you want shipped, and it
45
+ opens a lane per issue, spawns the implementer, runs a fresh reviewer each
46
+ round and merges on APPROVE. Its mandate and any handoff from a predecessor are
47
+ written for you — there is no "you are an orchestrator" prompt to compose — and
48
+ you come back to the board when an agent needs a decision.
49
+
50
+ [docs/orchestrator.md](docs/orchestrator.md) walks the whole flow on a fresh
51
+ install: the dock, the board, pipelines, tasks, the attention queue, the
52
+ model/effort matrix the conveyor uses, and when three tasks a week does not
53
+ need any of it.
54
+
39
55
  ### Spawn agents from the board
40
56
 
41
57
  Each project is a pannable, zoomable scheme — root conversations on top,
@@ -95,22 +111,25 @@ bunx agent-log-viewer
95
111
  npx agent-log-viewer
96
112
  ```
97
113
 
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.
114
+ This starts the server on `127.0.0.1:8898` and opens your browser. The CLI also
115
+ starts and supervises the packaged structured runtime host, including restart
116
+ backoff and Ctrl-C cleanup. Pipelines and the orchestrator work from this
117
+ installation without Docker. Both launch paths require Bun because the runtime
118
+ journal and authoritative state stores use Bun SQLite.
101
119
 
102
120
  ### From a local clone
103
121
 
104
122
  ```bash
105
123
  bun install
106
124
  bun run build
107
- bun run start -- --port 8898 --hostname 127.0.0.1
125
+ bun bin/cli.mjs --no-open --port 8898 --hostname 127.0.0.1
108
126
  # open http://127.0.0.1:8898/
109
127
  ```
110
128
 
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).
129
+ The CLI serves the output of the last `build`, so run `build` first. For
130
+ development, `bun dev` runs the app with hot reload and expects a separately
131
+ managed runtime host (it needs a high OS file-watch limit for large home
132
+ directories).
114
133
 
115
134
  The Viewer server runs on Bun. The runtime journal and hot state collections
116
135
  use `bun:sqlite`, and macOS process ownership uses the kernel's microsecond
@@ -119,20 +138,15 @@ feature-flag configuration.
119
138
 
120
139
  ### Spawn transport
121
140
 
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.
141
+ Agents launch through a structured runtime host. The installed CLI supervises
142
+ that host with the same Bun executable as the Viewer and places its Unix socket
143
+ and runtime journal under the Viewer state directory with installation-specific
144
+ names. Ambient deployment runtime settings are ignored so separate bunx
145
+ installations cannot attach to each other's host or claim each other's journal
146
+ epoch. Startup fails clearly when Bun, the packaged host entry, the managed
147
+ socket, or its directory permissions are unavailable.
148
+ The CLI log carries the host failure and the pipeline card directs the operator
149
+ to it. There is no tmux fallback.
136
150
 
137
151
  ### Connect an orchestrator through MCP
138
152
 
@@ -410,6 +424,8 @@ All optional. Transcription variables are documented in full in
410
424
  | `LLV_SCHEME_CARDS_PER_PROJECT` | Maximum scanner entries rendered per scheme project (default `80`). List and search remain complete. |
411
425
  | `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
426
  | `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`). |
427
+ | `LLV_HOST_RETIREMENT_IDLE_HOURS` | How long a structured host's transcript must have been quiet before the automatic retirement sweep may end it (default `6`). `0` turns the sweep off. Staleness is transcript modification time, never process age, and the sweep still refuses any host with a turn in flight, a pending question, an undelivered handoff entry, an open spawn receipt, an unflushed event tail, a realtime binding, or an orchestrator seat. Every qualification is re-proved one step before the signal, and each retirement is written to `state/host-retirement-report.json` and appended to `state/host-retirement-journal.ndjson`. |
428
+ | `LLV_HOST_RETIREMENT_GRACE_MS` | How long a retiring host may take to honour SIGTERM before its tree is force-killed (default `5000`, capped at `60000`). Raising it lowers how many hosts one sweep attempts, so a sweep's terminations still fit well inside the interval before the next one; whatever is skipped is reported as deferred and picked up by the following sweep. |
413
429
  | `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). |
414
430
 
415
431
  ## Config paths
package/bin/cli.mjs CHANGED
@@ -3,16 +3,18 @@
3
3
  import { spawn } from "node:child_process";
4
4
  import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, symlinkSync } from "node:fs";
5
5
  import http from "node:http";
6
+ import net from "node:net";
6
7
  import { homedir } from "node:os";
7
8
  import { dirname, join } from "node:path";
8
9
  import { fileURLToPath } from "node:url";
9
10
 
10
11
  import { detectTailscale, getToken, readStatus, serve as serveTailscale, TailscaleError } from "./tailscale.mjs";
11
12
  import {
13
+ cliRuntimeHostConfig,
14
+ cliRuntimeHostEnvironment,
12
15
  discardWakatimeEnvironmentCredential,
13
16
  viewerChildProcessOptions,
14
17
  viewerServerBunRuntime,
15
- withoutWakatimeCredential,
16
18
  } from "./server-runtime.mjs";
17
19
 
18
20
  discardWakatimeEnvironmentCredential();
@@ -27,6 +29,11 @@ const READINESS_INTERVAL_MS = 200;
27
29
  // Reusing READINESS_INTERVAL_MS here made every probe abort before the healthy
28
30
  // server could answer, so startup always "timed out" and killed its own server.
29
31
  const READINESS_PROBE_TIMEOUT_MS = 5_000;
32
+ const RUNTIME_HOST_READINESS_TIMEOUT_MS = 15_000;
33
+ const RUNTIME_HOST_READINESS_INTERVAL_MS = 100;
34
+ const RUNTIME_HOST_RESTART_BASE_MS = 500;
35
+ const RUNTIME_HOST_RESTART_MAX_MS = 10_000;
36
+ const RUNTIME_HOST_STABLE_UPTIME_MS = 30_000;
30
37
 
31
38
  const cliPath = fileURLToPath(import.meta.url);
32
39
  const cliDir = dirname(cliPath);
@@ -73,6 +80,13 @@ Options:
73
80
  tsCookie: () => " After the first open the key is stored in a cookie for 30 days.",
74
81
  nonLocalWarn: () => "Warning: a non-local address exposes the viewer to the network, so access-key mode is forced on.",
75
82
  serverNotReady: () => "Server not ready.",
83
+ runtimeHostEntryMissing: () => "The runtime host is missing from this install. Reinstall agent-log-viewer and try again.",
84
+ runtimeHostStartFail: (detail) => `Couldn't start the structured runtime host: ${detail}`,
85
+ runtimeHostTimeout: (socketPath) => `the runtime host did not bind ${socketPath} within ${RUNTIME_HOST_READINESS_TIMEOUT_MS / 1_000} seconds; check the socket directory permissions`,
86
+ runtimeHostExited: (detail) => `the runtime host exited before its socket was ready${detail ? `: ${detail}` : ""}`,
87
+ runtimeHostOwnerMismatch: (ownerPid, childPid) => `the runtime host socket is owned by pid ${ownerPid}, while this CLI spawned pid ${childPid}; stop the other agent-log-viewer instance for this installation and try again`,
88
+ runtimeHostRestart: (delay, detail) => `[runtime host] ${detail}; restarting in ${delay}ms`,
89
+ runtimeHostRestartFail: (detail) => `[runtime host] restart failed: ${detail}`,
76
90
  },
77
91
  uk: {
78
92
  usage: () => `Використання: agent-log-viewer [опції]
@@ -104,6 +118,13 @@ Options:
104
118
  tsCookie: () => " Після першого відкриття ключ зберігається у cookie на 30 днів.",
105
119
  nonLocalWarn: () => "Увага: нелокальна адреса відкриває viewer для мережі, тому режим ключа доступу увімкнено примусово.",
106
120
  serverNotReady: () => "Сервер не готовий.",
121
+ runtimeHostEntryMissing: () => "У цьому пакеті немає runtime host. Перевстановіть agent-log-viewer і повторіть спробу.",
122
+ runtimeHostStartFail: (detail) => `Не вдалося запустити structured runtime host: ${detail}`,
123
+ runtimeHostTimeout: (socketPath) => `runtime host не створив ${socketPath} за ${RUNTIME_HOST_READINESS_TIMEOUT_MS / 1_000} секунд; перевірте права каталогу сокета`,
124
+ runtimeHostExited: (detail) => `runtime host завершився до готовності сокета${detail ? `: ${detail}` : ""}`,
125
+ runtimeHostOwnerMismatch: (ownerPid, childPid) => `сокетом runtime host володіє процес ${ownerPid}, а цей CLI запустив процес ${childPid}; зупиніть інший agent-log-viewer для цієї інсталяції та повторіть спробу`,
126
+ runtimeHostRestart: (delay, detail) => `[runtime host] ${detail}; повторний запуск за ${delay} мс`,
127
+ runtimeHostRestartFail: (detail) => `[runtime host] помилка повторного запуску: ${detail}`,
107
128
  },
108
129
  };
109
130
 
@@ -255,9 +276,9 @@ function resolveServer(packageRoot) {
255
276
  };
256
277
  }
257
278
 
258
- function buildChildEnv(options, runtime, packageRoot) {
279
+ function buildChildEnv(options, runtime, packageRoot, runtimeHostEnvironment) {
259
280
  const env = {
260
- ...withoutWakatimeCredential(process.env),
281
+ ...runtimeHostEnvironment,
261
282
  PORT: String(options.port),
262
283
  // zsh exports HOSTNAME with the machine name on this user's machine; setting it here keeps standalone bound to the requested address.
263
284
  HOSTNAME: options.hostname,
@@ -306,10 +327,10 @@ function buildChildEnv(options, runtime, packageRoot) {
306
327
  return env;
307
328
  }
308
329
 
309
- function startServer(server, options, runtime, tailscaleProcessRef, packageRoot) {
330
+ function startServer(server, options, runtime, tailscaleProcessRef, runtimeHostSupervisor, packageRoot, runtimeHostEnvironment) {
310
331
  const child = spawn(server.command, server.args, viewerChildProcessOptions({
311
332
  cwd: server.cwd,
312
- env: buildChildEnv(options, runtime, packageRoot),
333
+ env: buildChildEnv(options, runtime, packageRoot, runtimeHostEnvironment),
313
334
  stdio: ["ignore", "inherit", "pipe"],
314
335
  }));
315
336
 
@@ -333,7 +354,11 @@ function startServer(server, options, runtime, tailscaleProcessRef, packageRoot)
333
354
  });
334
355
 
335
356
  child.on("error", (error) => {
336
- fail(m.serverStartFail(error.message));
357
+ state.stopping = true;
358
+ void Promise.all([
359
+ tailscaleProcessRef?.current ? stopChild(tailscaleProcessRef.current) : Promise.resolve(),
360
+ runtimeHostSupervisor.stop(),
361
+ ]).finally(() => fail(m.serverStartFail(error.message)));
337
362
  });
338
363
 
339
364
  child.on("exit", async (code, signal) => {
@@ -348,6 +373,7 @@ function startServer(server, options, runtime, tailscaleProcessRef, packageRoot)
348
373
  if (tailscaleProcessRef?.current) {
349
374
  await stopChild(tailscaleProcessRef.current);
350
375
  }
376
+ await runtimeHostSupervisor.stop();
351
377
 
352
378
  if (state.sawAddressInUse) {
353
379
  process.exit(1);
@@ -369,6 +395,156 @@ function wait(ms) {
369
395
  });
370
396
  }
371
397
 
398
+ function probeRuntimeHost(socketPath) {
399
+ return new Promise((resolve) => {
400
+ const socket = net.createConnection(socketPath);
401
+ let settled = false;
402
+ const finish = (ready) => {
403
+ if (settled) return;
404
+ settled = true;
405
+ socket.destroy();
406
+ resolve(ready);
407
+ };
408
+ socket.once("connect", () => finish(true));
409
+ socket.once("error", () => finish(false));
410
+ socket.setTimeout(1_000, () => finish(false));
411
+ });
412
+ }
413
+
414
+ function runtimeHostFenceOwner(socketPath) {
415
+ try {
416
+ const owner = JSON.parse(readFileSync(`${socketPath}.lock`, "utf8"));
417
+ if (!Number.isSafeInteger(owner?.pid) || owner.pid <= 1) return null;
418
+ if (typeof owner.startIdentity !== "string" || !owner.startIdentity.startsWith(`${owner.pid}:`)) return null;
419
+ if (typeof owner.acquisitionId !== "string" || owner.acquisitionId.length < 16) return null;
420
+ return owner;
421
+ } catch {
422
+ return null;
423
+ }
424
+ }
425
+
426
+ function runtimeHostExitDetail(processHandle) {
427
+ const { child, state } = processHandle;
428
+ if (state.spawnError) {
429
+ return state.spawnError.code === "ENOENT"
430
+ ? `Bun executable ${state.command} is unavailable (${state.spawnError.message})`
431
+ : `Bun could not launch the host (${state.spawnError.message})`;
432
+ }
433
+ const outcome = child.signalCode ? `signal ${child.signalCode}` : `exit code ${child.exitCode ?? "unknown"}`;
434
+ const stderr = state.stderrTail
435
+ .split(/\r?\n/)
436
+ .map((line) => line.replace(/\s+/g, " ").trim())
437
+ .filter(Boolean)
438
+ .slice(-3)
439
+ .join(" | ");
440
+ return stderr ? `${outcome}: ${stderr}` : outcome;
441
+ }
442
+
443
+ async function waitForRuntimeHost(socketPath, processHandle = null) {
444
+ const deadline = Date.now() + RUNTIME_HOST_READINESS_TIMEOUT_MS;
445
+ while (Date.now() < deadline) {
446
+ if (processHandle?.state.spawnError) {
447
+ throw new Error(runtimeHostExitDetail(processHandle));
448
+ }
449
+ if (processHandle && (processHandle.child.exitCode !== null || processHandle.child.signalCode !== null)) {
450
+ throw new Error(m.runtimeHostExited(runtimeHostExitDetail(processHandle)));
451
+ }
452
+ if (await probeRuntimeHost(socketPath)) {
453
+ const owner = runtimeHostFenceOwner(socketPath);
454
+ if (!processHandle) return;
455
+ if (owner?.pid === processHandle.child.pid) return;
456
+ if (owner) throw new Error(m.runtimeHostOwnerMismatch(owner.pid, processHandle.child.pid));
457
+ }
458
+ await wait(RUNTIME_HOST_READINESS_INTERVAL_MS);
459
+ }
460
+ throw new Error(m.runtimeHostTimeout(socketPath));
461
+ }
462
+
463
+ function createRuntimeHostSupervisor(config, bunRuntime, environment, packageRoot) {
464
+ let current = null;
465
+ let restartTimer = null;
466
+ let restartFailures = 0;
467
+ let stopping = false;
468
+
469
+ const scheduleRestart = (detail, uptimeMs = 0) => {
470
+ if (stopping || restartTimer) return;
471
+ restartFailures = uptimeMs >= RUNTIME_HOST_STABLE_UPTIME_MS ? 1 : restartFailures + 1;
472
+ const delay = Math.min(
473
+ RUNTIME_HOST_RESTART_BASE_MS * (2 ** Math.max(0, restartFailures - 1)),
474
+ RUNTIME_HOST_RESTART_MAX_MS,
475
+ );
476
+ console.error(m.runtimeHostRestart(delay, detail));
477
+ restartTimer = setTimeout(() => {
478
+ restartTimer = null;
479
+ void launch(false).catch((error) => {
480
+ if (stopping) return;
481
+ const message = error instanceof Error ? error.message : String(error);
482
+ console.error(m.runtimeHostRestartFail(message));
483
+ scheduleRestart(message);
484
+ });
485
+ }, delay);
486
+ };
487
+
488
+ const spawnHost = () => {
489
+ const child = spawn(bunRuntime, ["--bun", config.entrypoint], viewerChildProcessOptions({
490
+ cwd: packageRoot,
491
+ env: environment,
492
+ stdio: ["ignore", "inherit", "pipe"],
493
+ }));
494
+ const state = {
495
+ command: bunRuntime,
496
+ readyAt: null,
497
+ spawnError: null,
498
+ stderrTail: "",
499
+ stopping: false,
500
+ };
501
+ const processHandle = { child, state };
502
+ current = processHandle;
503
+ child.stderr.on("data", (chunk) => {
504
+ state.stderrTail = `${state.stderrTail}${chunk}`.slice(-8_192);
505
+ process.stderr.write(chunk);
506
+ });
507
+ child.once("error", (error) => {
508
+ state.spawnError = error;
509
+ });
510
+ child.once("exit", () => {
511
+ if (current !== processHandle || stopping || state.stopping || state.readyAt === null) return;
512
+ scheduleRestart(runtimeHostExitDetail(processHandle), Date.now() - state.readyAt);
513
+ });
514
+ return processHandle;
515
+ };
516
+
517
+ const launch = async (initial) => {
518
+ const processHandle = spawnHost();
519
+ try {
520
+ await waitForRuntimeHost(config.socketPath, processHandle);
521
+ processHandle.state.readyAt = Date.now();
522
+ if (processHandle.child.exitCode !== null || processHandle.child.signalCode !== null) {
523
+ throw new Error(m.runtimeHostExited(runtimeHostExitDetail(processHandle)));
524
+ }
525
+ } catch (error) {
526
+ await stopChild(processHandle);
527
+ if (initial) throw error;
528
+ throw error;
529
+ }
530
+ };
531
+
532
+ return {
533
+ async start() {
534
+ if (!existsSync(config.entrypoint)) throw new Error(m.runtimeHostEntryMissing());
535
+ await launch(true);
536
+ },
537
+ async stop() {
538
+ stopping = true;
539
+ if (restartTimer) {
540
+ clearTimeout(restartTimer);
541
+ restartTimer = null;
542
+ }
543
+ if (current) await stopChild(current);
544
+ },
545
+ };
546
+ }
547
+
372
548
  function probe(url) {
373
549
  return new Promise((resolve) => {
374
550
  const request = http.get(url, (response) => {
@@ -477,16 +653,17 @@ async function stopChild(processHandle) {
477
653
  });
478
654
  }
479
655
 
480
- async function stopAll(serverProcess, tailscaleProcess) {
656
+ async function stopAll(serverProcess, tailscaleProcess, runtimeHostSupervisor) {
481
657
  await Promise.all([
482
658
  serverProcess ? stopChild(serverProcess) : Promise.resolve(),
483
659
  tailscaleProcess ? stopChild(tailscaleProcess) : Promise.resolve(),
660
+ runtimeHostSupervisor ? runtimeHostSupervisor.stop() : Promise.resolve(),
484
661
  ]);
485
662
  }
486
663
 
487
- function installSignalHandlers(serverProcess, tailscaleProcessRef) {
664
+ function installSignalHandlers(serverProcess, tailscaleProcessRef, runtimeHostSupervisor) {
488
665
  const shutdown = async () => {
489
- await stopAll(serverProcess, tailscaleProcessRef.current);
666
+ await stopAll(serverProcess, tailscaleProcessRef.current, runtimeHostSupervisor);
490
667
  process.exit(0);
491
668
  };
492
669
 
@@ -626,9 +803,32 @@ async function main() {
626
803
  }
627
804
 
628
805
  const server = resolveServer(packageRoot);
806
+ const runtimeHostConfig = cliRuntimeHostConfig(packageRoot);
807
+ const runtimeHostEnvironment = cliRuntimeHostEnvironment(process.env, runtimeHostConfig);
808
+ const runtimeHostSupervisor = createRuntimeHostSupervisor(
809
+ runtimeHostConfig,
810
+ viewerServerBunRuntime(),
811
+ runtimeHostEnvironment,
812
+ packageRoot,
813
+ );
814
+ try {
815
+ await runtimeHostSupervisor.start();
816
+ } catch (error) {
817
+ await runtimeHostSupervisor.stop();
818
+ fail(m.runtimeHostStartFail(error instanceof Error ? error.message : String(error)));
819
+ }
820
+
629
821
  const tailscaleProcessRef = { current: null };
630
- const serverProcess = startServer(server, options, runtime, tailscaleProcessRef, packageRoot);
631
- installSignalHandlers(serverProcess, tailscaleProcessRef);
822
+ const serverProcess = startServer(
823
+ server,
824
+ options,
825
+ runtime,
826
+ tailscaleProcessRef,
827
+ runtimeHostSupervisor,
828
+ packageRoot,
829
+ runtimeHostEnvironment,
830
+ );
831
+ installSignalHandlers(serverProcess, tailscaleProcessRef, runtimeHostSupervisor);
632
832
 
633
833
  if (options.tailscale && runtime.tailscalePath) {
634
834
  tailscaleProcessRef.current = serveTailscale(runtime.tailscalePath, options.port);
@@ -637,7 +837,7 @@ async function main() {
637
837
  try {
638
838
  await waitForReadiness(options.port);
639
839
  } catch (error) {
640
- await stopAll(serverProcess, tailscaleProcessRef.current);
840
+ await stopAll(serverProcess, tailscaleProcessRef.current, runtimeHostSupervisor);
641
841
  fail(error instanceof Error ? error.message : m.serverNotReady());
642
842
  }
643
843
 
@@ -1,3 +1,8 @@
1
+ import { createHash } from "node:crypto";
2
+ import { existsSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join, resolve } from "node:path";
5
+
1
6
  export const WAKATIME_CREDENTIAL_ENV = "WAKATIME_API_KEY";
2
7
 
3
8
  /** @param {Record<string, string | undefined>} environment */
@@ -51,3 +56,49 @@ export function viewerServerBunRuntime(options = {}) {
51
56
  const execPath = options.execPath ?? process.execPath;
52
57
  return versions.bun ? execPath : (env.LLV_BUN_EXECUTABLE || "bun");
53
58
  }
59
+
60
+ /**
61
+ * Resolve the runtime host the public CLI will supervise. Ordinary package
62
+ * installs share the Viewer state directory while retaining distinct socket
63
+ * and journal ownership. Ambient deployment runtime configuration never
64
+ * crosses this CLI ownership boundary.
65
+ *
66
+ * @param {string} packageRoot
67
+ * @param {{ env?: Readonly<Record<string, string | undefined>>, home?: string }} [options]
68
+ */
69
+ export function cliRuntimeHostConfig(packageRoot, options = {}) {
70
+ const env = options.env ?? process.env;
71
+ const home = options.home ?? homedir();
72
+ const stateDirectory = env.LLV_STATE_DIR?.trim()
73
+ || join(env.XDG_CONFIG_HOME?.trim() || join(home, ".config"), "agent-log-viewer", "state");
74
+ const installId = createHash("sha256").update(resolve(packageRoot)).digest("hex").slice(0, 16);
75
+ const bundled = join(packageRoot, "dist", "runtime-host.mjs");
76
+ const source = join(packageRoot, "src", "runtime-host", "main.ts");
77
+ return {
78
+ socketPath: join(stateDirectory, `runtime-host-${installId}.sock`),
79
+ journalPath: join(stateDirectory, `runtime-events-${installId}.sqlite`),
80
+ entrypoint: existsSync(bundled) ? bundled : source,
81
+ };
82
+ }
83
+
84
+ /**
85
+ * Environment shared by the supervised runtime host and the Viewer server.
86
+ * The CLI is the structured-host activation boundary, including for callers
87
+ * whose shell still carries one of the former rollback values. Its journal
88
+ * follows the same installation boundary as its socket, so a CLI host cannot
89
+ * claim an ambient deployment's host epoch through the shared state directory.
90
+ *
91
+ * @param {Readonly<Record<string, string | undefined>>} base
92
+ * @param {{ socketPath: string, journalPath: string }} config
93
+ */
94
+ export function cliRuntimeHostEnvironment(base, config) {
95
+ return {
96
+ ...withoutWakatimeCredential(base),
97
+ LLV_RUNTIME_HOST_SOCKET: config.socketPath,
98
+ LLV_RUNTIME_JOURNAL: config.journalPath,
99
+ LLV_STRUCTURED_HOSTS: "1",
100
+ LLV_RUNTIME_EVENTS: "1",
101
+ LLV_SPAWN_TRANSPORT: "structured",
102
+ NEXT_PUBLIC_RUNTIME_UI: "1",
103
+ };
104
+ }