mixdog 0.7.17 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (836) hide show
  1. package/README.md +37 -331
  2. package/package.json +67 -99
  3. package/scripts/boot-smoke.mjs +94 -0
  4. package/scripts/build-tui.mjs +52 -0
  5. package/scripts/compact-smoke.mjs +199 -0
  6. package/scripts/lead-workflow-smoke.mjs +598 -0
  7. package/scripts/live-worker-smoke.mjs +239 -0
  8. package/scripts/output-style-smoke.mjs +101 -0
  9. package/scripts/smoke-loop-report.mjs +221 -0
  10. package/scripts/smoke-loop.mjs +201 -0
  11. package/scripts/smoke.mjs +113 -0
  12. package/scripts/tool-failures.mjs +143 -0
  13. package/scripts/tool-smoke.mjs +456 -0
  14. package/src/agents/debugger/AGENT.md +3 -0
  15. package/src/agents/debugger/agent.json +6 -0
  16. package/src/agents/explore/AGENT.md +4 -0
  17. package/src/agents/explore/agent.json +6 -0
  18. package/src/agents/heavy-worker/AGENT.md +3 -0
  19. package/src/agents/heavy-worker/agent.json +6 -0
  20. package/src/agents/maintainer/AGENT.md +3 -0
  21. package/src/agents/maintainer/agent.json +6 -0
  22. package/src/agents/reviewer/AGENT.md +3 -0
  23. package/src/agents/reviewer/agent.json +6 -0
  24. package/src/agents/scheduler-task.md +3 -0
  25. package/src/agents/web-researcher/AGENT.md +3 -0
  26. package/src/agents/web-researcher/agent.json +6 -0
  27. package/src/agents/webhook-handler.md +3 -0
  28. package/src/agents/worker/AGENT.md +3 -0
  29. package/src/agents/worker/agent.json +6 -0
  30. package/src/app.mjs +90 -0
  31. package/src/cli.mjs +11 -0
  32. package/src/defaults/hidden-roles.json +72 -0
  33. package/src/defaults/mixdog-config.template.json +15 -0
  34. package/src/hooks/lib/permission-evaluator.cjs +488 -0
  35. package/src/hooks/lib/settings-loader.cjs +112 -0
  36. package/src/lib/keychain-cjs.cjs +332 -0
  37. package/src/lib/plugin-paths.cjs +28 -0
  38. package/src/lib/rules-builder.cjs +315 -0
  39. package/src/mixdog-session-runtime.mjs +3704 -0
  40. package/src/output-styles/default.md +38 -0
  41. package/src/output-styles/extreme-simple.md +17 -0
  42. package/src/output-styles/simple.md +17 -0
  43. package/src/repl.mjs +322 -0
  44. package/src/rules/bridge/00-common.md +5 -0
  45. package/src/rules/bridge/20-skip-protocol.md +11 -0
  46. package/src/rules/bridge/30-explorer.md +4 -0
  47. package/src/rules/bridge/40-cycle1-agent.md +28 -0
  48. package/src/rules/bridge/41-cycle2-agent.md +59 -0
  49. package/src/rules/lead/00-tool-lead.md +5 -0
  50. package/src/rules/lead/01-general.md +5 -0
  51. package/src/rules/lead/02-channels.md +3 -0
  52. package/src/rules/lead/04-workflow.md +12 -0
  53. package/src/rules/shared/00-language.md +3 -0
  54. package/src/rules/shared/01-tool.md +3 -0
  55. package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
  56. package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
  57. package/src/runtime/agent/orchestrator/config.mjs +446 -0
  58. package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
  59. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
  60. package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
  61. package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
  62. package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
  63. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
  64. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
  65. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
  66. package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
  67. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
  68. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
  69. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
  70. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
  71. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
  72. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
  73. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
  76. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
  77. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
  78. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
  79. package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
  80. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
  81. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
  82. package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
  83. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  84. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
  85. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
  86. package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
  87. package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
  88. package/src/runtime/agent/orchestrator/session/loop.mjs +2320 -0
  89. package/src/runtime/agent/orchestrator/session/manager.mjs +2960 -0
  90. package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
  91. package/src/runtime/agent/orchestrator/session/store.mjs +663 -0
  92. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  93. package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
  94. package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
  95. package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
  96. package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
  97. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
  98. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
  99. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
  100. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
  102. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
  103. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
  105. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
  106. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  107. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
  108. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
  109. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
  110. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  111. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
  112. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
  113. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
  114. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
  115. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
  116. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
  118. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  119. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
  120. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  121. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
  122. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
  123. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
  124. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
  125. package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
  126. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
  127. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
  128. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
  129. package/src/runtime/channels/backends/discord.mjs +781 -0
  130. package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
  131. package/src/runtime/channels/index.mjs +3309 -0
  132. package/src/runtime/channels/lib/config.mjs +285 -0
  133. package/src/runtime/channels/lib/drop-trace.mjs +71 -0
  134. package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
  135. package/src/runtime/channels/lib/holidays.mjs +138 -0
  136. package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
  137. package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
  138. package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
  139. package/src/runtime/channels/lib/scheduler.mjs +710 -0
  140. package/src/runtime/channels/lib/session-discovery.mjs +102 -0
  141. package/src/runtime/channels/lib/state-file.mjs +68 -0
  142. package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
  143. package/src/runtime/channels/lib/tool-format.mjs +124 -0
  144. package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
  145. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
  146. package/src/runtime/channels/lib/webhook.mjs +1288 -0
  147. package/src/runtime/channels/tool-defs.mjs +177 -0
  148. package/src/runtime/lib/keychain-cjs.cjs +289 -0
  149. package/src/runtime/memory/data/runtime-manifest.json +40 -0
  150. package/src/runtime/memory/index.mjs +3600 -0
  151. package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
  152. package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
  153. package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
  154. package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
  155. package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
  156. package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
  157. package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
  158. package/src/runtime/memory/lib/memory-embed.mjs +300 -0
  159. package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
  160. package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
  161. package/src/runtime/memory/lib/memory.mjs +418 -0
  162. package/src/runtime/memory/lib/pg/adapter.mjs +314 -0
  163. package/src/runtime/memory/lib/pg/process.mjs +366 -0
  164. package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
  165. package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
  166. package/src/runtime/memory/lib/trace-store.mjs +734 -0
  167. package/src/runtime/memory/tool-defs.mjs +79 -0
  168. package/src/runtime/search/index.mjs +925 -0
  169. package/src/runtime/search/lib/config.mjs +61 -0
  170. package/src/runtime/search/lib/web-tools.mjs +1278 -0
  171. package/src/runtime/search/tool-defs.mjs +64 -0
  172. package/src/runtime/shared/atomic-file.mjs +435 -0
  173. package/src/runtime/shared/background-tasks.mjs +376 -0
  174. package/src/runtime/shared/child-guardian.mjs +98 -0
  175. package/src/runtime/shared/config.mjs +393 -0
  176. package/src/runtime/shared/err-text.mjs +121 -0
  177. package/src/runtime/shared/launcher-control.mjs +259 -0
  178. package/src/runtime/shared/llm/cost.mjs +66 -0
  179. package/src/runtime/shared/llm/http-agent.mjs +129 -0
  180. package/src/runtime/shared/open-url.mjs +37 -0
  181. package/src/runtime/shared/plugin-paths.mjs +25 -0
  182. package/src/runtime/shared/process-shutdown.mjs +147 -0
  183. package/src/runtime/shared/schedules-store.mjs +70 -0
  184. package/src/runtime/shared/tool-execution-contract.mjs +104 -0
  185. package/src/runtime/shared/tool-surface.mjs +950 -0
  186. package/src/runtime/shared/user-cwd.mjs +221 -0
  187. package/src/runtime/shared/user-data-guard.mjs +232 -0
  188. package/src/runtime/shared/workspace-router.mjs +259 -0
  189. package/src/standalone/bridge-tool.mjs +1414 -0
  190. package/src/standalone/channel-admin.mjs +366 -0
  191. package/src/standalone/channel-worker-preload.cjs +3 -0
  192. package/src/standalone/channel-worker.mjs +353 -0
  193. package/src/standalone/explore-tool.mjs +233 -0
  194. package/src/standalone/hook-bus.mjs +246 -0
  195. package/src/standalone/plugin-admin.mjs +247 -0
  196. package/src/standalone/provider-admin.mjs +338 -0
  197. package/src/standalone/seeds.mjs +94 -0
  198. package/src/standalone/usage-dashboard.mjs +510 -0
  199. package/src/tui/App.jsx +5438 -0
  200. package/src/tui/components/AnsiText.jsx +199 -0
  201. package/src/tui/components/ContextPanel.jsx +217 -0
  202. package/src/tui/components/Markdown.jsx +205 -0
  203. package/src/tui/components/MarkdownTable.jsx +204 -0
  204. package/src/tui/components/Message.jsx +103 -0
  205. package/src/tui/components/Picker.jsx +317 -0
  206. package/src/tui/components/PromptInput.jsx +584 -0
  207. package/src/tui/components/QueuedCommands.jsx +47 -0
  208. package/src/tui/components/SlashCommandPalette.jsx +114 -0
  209. package/src/tui/components/Spinner.jsx +317 -0
  210. package/src/tui/components/StatusLine.jsx +87 -0
  211. package/src/tui/components/TextEntryPanel.jsx +323 -0
  212. package/src/tui/components/ToolExecution.jsx +772 -0
  213. package/src/tui/components/TurnDone.jsx +78 -0
  214. package/src/tui/components/UsagePanel.jsx +331 -0
  215. package/src/tui/dist/index.mjs +12359 -0
  216. package/src/tui/engine.mjs +2410 -0
  217. package/src/tui/figures.mjs +50 -0
  218. package/src/tui/hooks/useEngine.mjs +16 -0
  219. package/src/tui/index.jsx +254 -0
  220. package/src/tui/input-editing.mjs +242 -0
  221. package/src/tui/markdown/format-token.mjs +194 -0
  222. package/src/tui/paste-attachments.mjs +198 -0
  223. package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
  224. package/src/tui/spinner-verbs.mjs +45 -0
  225. package/src/tui/theme.mjs +67 -0
  226. package/src/tui/time-format.mjs +53 -0
  227. package/src/ui/ansi.mjs +115 -0
  228. package/src/ui/markdown.mjs +195 -0
  229. package/src/ui/statusline.mjs +730 -0
  230. package/src/ui/tool-card.mjs +101 -0
  231. package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
  232. package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
  233. package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
  234. package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
  235. package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
  236. package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
  237. package/src/workflows/default/WORKFLOW.md +7 -0
  238. package/src/workflows/default/workflow.json +14 -0
  239. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  240. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  241. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  242. package/vendor/ink/build/colorize.d.ts +3 -0
  243. package/vendor/ink/build/colorize.js +48 -0
  244. package/vendor/ink/build/colorize.js.map +1 -0
  245. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  246. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  247. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  248. package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
  249. package/vendor/ink/build/components/AnimationContext.js +13 -0
  250. package/vendor/ink/build/components/AnimationContext.js.map +1 -0
  251. package/vendor/ink/build/components/App.d.ts +24 -0
  252. package/vendor/ink/build/components/App.js +554 -0
  253. package/vendor/ink/build/components/App.js.map +1 -0
  254. package/vendor/ink/build/components/AppContext.d.ts +80 -0
  255. package/vendor/ink/build/components/AppContext.js +25 -0
  256. package/vendor/ink/build/components/AppContext.js.map +1 -0
  257. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  258. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  259. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  260. package/vendor/ink/build/components/Box.d.ts +130 -0
  261. package/vendor/ink/build/components/Box.js +34 -0
  262. package/vendor/ink/build/components/Box.js.map +1 -0
  263. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  264. package/vendor/ink/build/components/CursorContext.js +8 -0
  265. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  266. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  267. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  268. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  269. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  270. package/vendor/ink/build/components/ErrorOverview.js +90 -0
  271. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  272. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  273. package/vendor/ink/build/components/FocusContext.js +17 -0
  274. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  275. package/vendor/ink/build/components/Newline.d.ts +13 -0
  276. package/vendor/ink/build/components/Newline.js +8 -0
  277. package/vendor/ink/build/components/Newline.js.map +1 -0
  278. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  279. package/vendor/ink/build/components/Spacer.js +11 -0
  280. package/vendor/ink/build/components/Spacer.js.map +1 -0
  281. package/vendor/ink/build/components/Static.d.ts +24 -0
  282. package/vendor/ink/build/components/Static.js +28 -0
  283. package/vendor/ink/build/components/Static.js.map +1 -0
  284. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  285. package/vendor/ink/build/components/StderrContext.js +13 -0
  286. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  287. package/vendor/ink/build/components/StdinContext.d.ts +28 -0
  288. package/vendor/ink/build/components/StdinContext.js +20 -0
  289. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  290. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  291. package/vendor/ink/build/components/StdoutContext.js +13 -0
  292. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  293. package/vendor/ink/build/components/Text.d.ts +55 -0
  294. package/vendor/ink/build/components/Text.js +50 -0
  295. package/vendor/ink/build/components/Text.js.map +1 -0
  296. package/vendor/ink/build/components/Transform.d.ts +16 -0
  297. package/vendor/ink/build/components/Transform.js +15 -0
  298. package/vendor/ink/build/components/Transform.js.map +1 -0
  299. package/vendor/ink/build/cursor-helpers.d.ts +39 -0
  300. package/vendor/ink/build/cursor-helpers.js +62 -0
  301. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  302. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  303. package/vendor/ink/build/devtools-window-polyfill.js +68 -0
  304. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  305. package/vendor/ink/build/devtools.d.ts +1 -0
  306. package/vendor/ink/build/devtools.js +36 -0
  307. package/vendor/ink/build/devtools.js.map +1 -0
  308. package/vendor/ink/build/dom.d.ts +62 -0
  309. package/vendor/ink/build/dom.js +143 -0
  310. package/vendor/ink/build/dom.js.map +1 -0
  311. package/vendor/ink/build/get-max-width.d.ts +3 -0
  312. package/vendor/ink/build/get-max-width.js +10 -0
  313. package/vendor/ink/build/get-max-width.js.map +1 -0
  314. package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
  315. package/vendor/ink/build/hooks/use-animation.js +87 -0
  316. package/vendor/ink/build/hooks/use-animation.js.map +1 -0
  317. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  318. package/vendor/ink/build/hooks/use-app.js +8 -0
  319. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  320. package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
  321. package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
  322. package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
  323. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  324. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  325. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  326. package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
  327. package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
  328. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  329. package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
  330. package/vendor/ink/build/hooks/use-focus.js +43 -0
  331. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  332. package/vendor/ink/build/hooks/use-input.d.ts +132 -0
  333. package/vendor/ink/build/hooks/use-input.js +126 -0
  334. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  335. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  336. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
  337. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  338. package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
  339. package/vendor/ink/build/hooks/use-paste.js +62 -0
  340. package/vendor/ink/build/hooks/use-paste.js.map +1 -0
  341. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  342. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  343. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  344. package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
  345. package/vendor/ink/build/hooks/use-stdin.js +9 -0
  346. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  347. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  348. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  349. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  350. package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
  351. package/vendor/ink/build/hooks/use-window-size.js +22 -0
  352. package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
  353. package/vendor/ink/build/index.d.ts +42 -0
  354. package/vendor/ink/build/index.js +24 -0
  355. package/vendor/ink/build/index.js.map +1 -0
  356. package/vendor/ink/build/ink.d.ts +146 -0
  357. package/vendor/ink/build/ink.js +1022 -0
  358. package/vendor/ink/build/ink.js.map +1 -0
  359. package/vendor/ink/build/input-parser.d.ts +10 -0
  360. package/vendor/ink/build/input-parser.js +194 -0
  361. package/vendor/ink/build/input-parser.js.map +1 -0
  362. package/vendor/ink/build/instances.d.ts +3 -0
  363. package/vendor/ink/build/instances.js +8 -0
  364. package/vendor/ink/build/instances.js.map +1 -0
  365. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  366. package/vendor/ink/build/kitty-keyboard.js +32 -0
  367. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  368. package/vendor/ink/build/log-update.d.ts +20 -0
  369. package/vendor/ink/build/log-update.js +261 -0
  370. package/vendor/ink/build/log-update.js.map +1 -0
  371. package/vendor/ink/build/measure-element.d.ts +20 -0
  372. package/vendor/ink/build/measure-element.js +13 -0
  373. package/vendor/ink/build/measure-element.js.map +1 -0
  374. package/vendor/ink/build/measure-text.d.ts +6 -0
  375. package/vendor/ink/build/measure-text.js +21 -0
  376. package/vendor/ink/build/measure-text.js.map +1 -0
  377. package/vendor/ink/build/output.d.ts +35 -0
  378. package/vendor/ink/build/output.js +328 -0
  379. package/vendor/ink/build/output.js.map +1 -0
  380. package/vendor/ink/build/parse-keypress.d.ts +20 -0
  381. package/vendor/ink/build/parse-keypress.js +495 -0
  382. package/vendor/ink/build/parse-keypress.js.map +1 -0
  383. package/vendor/ink/build/reconciler.d.ts +4 -0
  384. package/vendor/ink/build/reconciler.js +306 -0
  385. package/vendor/ink/build/reconciler.js.map +1 -0
  386. package/vendor/ink/build/render-background.d.ts +4 -0
  387. package/vendor/ink/build/render-background.js +25 -0
  388. package/vendor/ink/build/render-background.js.map +1 -0
  389. package/vendor/ink/build/render-border.d.ts +4 -0
  390. package/vendor/ink/build/render-border.js +84 -0
  391. package/vendor/ink/build/render-border.js.map +1 -0
  392. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  393. package/vendor/ink/build/render-node-to-output.js +162 -0
  394. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  395. package/vendor/ink/build/render-to-string.d.ts +38 -0
  396. package/vendor/ink/build/render-to-string.js +116 -0
  397. package/vendor/ink/build/render-to-string.js.map +1 -0
  398. package/vendor/ink/build/render.d.ts +176 -0
  399. package/vendor/ink/build/render.js +71 -0
  400. package/vendor/ink/build/render.js.map +1 -0
  401. package/vendor/ink/build/renderer.d.ts +8 -0
  402. package/vendor/ink/build/renderer.js +64 -0
  403. package/vendor/ink/build/renderer.js.map +1 -0
  404. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  405. package/vendor/ink/build/sanitize-ansi.js +27 -0
  406. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  407. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  408. package/vendor/ink/build/squash-text-nodes.js +36 -0
  409. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  410. package/vendor/ink/build/styles.d.ts +302 -0
  411. package/vendor/ink/build/styles.js +303 -0
  412. package/vendor/ink/build/styles.js.map +1 -0
  413. package/vendor/ink/build/utils.d.ts +9 -0
  414. package/vendor/ink/build/utils.js +19 -0
  415. package/vendor/ink/build/utils.js.map +1 -0
  416. package/vendor/ink/build/wrap-text.d.ts +3 -0
  417. package/vendor/ink/build/wrap-text.js +38 -0
  418. package/vendor/ink/build/wrap-text.js.map +1 -0
  419. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  420. package/vendor/ink/build/write-synchronized.js +9 -0
  421. package/vendor/ink/build/write-synchronized.js.map +1 -0
  422. package/vendor/ink/license +10 -0
  423. package/vendor/ink/package.json +137 -0
  424. package/.claude-plugin/marketplace.json +0 -34
  425. package/.claude-plugin/plugin.json +0 -20
  426. package/.gitattributes +0 -34
  427. package/.mcp.json +0 -14
  428. package/ARCHITECTURE.md +0 -77
  429. package/CHANGELOG.md +0 -30
  430. package/CONTRIBUTING.md +0 -45
  431. package/DATA-FLOW.md +0 -79
  432. package/LICENSE +0 -21
  433. package/SECURITY.md +0 -138
  434. package/UNINSTALL.md +0 -112
  435. package/agents/maintenance.md +0 -5
  436. package/agents/memory-classification.md +0 -30
  437. package/agents/scheduler-task.md +0 -18
  438. package/agents/webhook-handler.md +0 -27
  439. package/agents/worker.md +0 -24
  440. package/bin/bridge +0 -133
  441. package/bin/statusline-launcher.mjs +0 -82
  442. package/bin/statusline-lib.mjs +0 -558
  443. package/bin/statusline.mjs +0 -615
  444. package/bun.lock +0 -927
  445. package/commands/config.md +0 -16
  446. package/commands/doctor.md +0 -13
  447. package/commands/setup.md +0 -17
  448. package/defaults/hidden-roles.json +0 -68
  449. package/defaults/memory-chunk-prompt.md +0 -63
  450. package/defaults/mixdog-config.template.json +0 -27
  451. package/defaults/user-workflow.json +0 -8
  452. package/defaults/user-workflow.md +0 -17
  453. package/hooks/hooks.json +0 -73
  454. package/hooks/lib/active-instance.cjs +0 -77
  455. package/hooks/lib/permission-evaluator.cjs +0 -411
  456. package/hooks/lib/permission-route.cjs +0 -63
  457. package/hooks/lib/settings-loader.cjs +0 -117
  458. package/hooks/post-tool-use.cjs +0 -84
  459. package/hooks/pre-mcp-sandbox.cjs +0 -158
  460. package/hooks/pre-tool-subagent.cjs +0 -258
  461. package/hooks/session-start.cjs +0 -1479
  462. package/hooks/shim-launcher.cjs +0 -65
  463. package/hooks/turn-timer.cjs +0 -82
  464. package/lib/claude-md-writer.cjs +0 -386
  465. package/lib/keychain-cjs.cjs +0 -290
  466. package/lib/plugin-paths.cjs +0 -69
  467. package/lib/rules-builder.cjs +0 -241
  468. package/native/README.md +0 -117
  469. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  470. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  471. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  472. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  473. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  474. package/prompts/code-review.txt +0 -16
  475. package/prompts/security-audit.txt +0 -17
  476. package/rules/bridge/00-common.md +0 -39
  477. package/rules/bridge/20-skip-protocol.md +0 -18
  478. package/rules/bridge/30-explorer.md +0 -33
  479. package/rules/bridge/40-cycle1-agent.md +0 -52
  480. package/rules/bridge/41-cycle2-agent.md +0 -62
  481. package/rules/lead/00-tool-lead.md +0 -61
  482. package/rules/lead/01-general.md +0 -23
  483. package/rules/lead/02-channels.md +0 -49
  484. package/rules/lead/03-team.md +0 -27
  485. package/rules/lead/04-workflow.md +0 -20
  486. package/rules/shared/00-language.md +0 -14
  487. package/rules/shared/01-tool.md +0 -138
  488. package/scripts/bootstrap.mjs +0 -130
  489. package/scripts/bridge-unify-smoke.mjs +0 -308
  490. package/scripts/build-runtime-linux.sh +0 -348
  491. package/scripts/build-runtime-macos.sh +0 -217
  492. package/scripts/build-runtime-windows.ps1 +0 -242
  493. package/scripts/builtin-utils-smoke.mjs +0 -398
  494. package/scripts/bump.mjs +0 -80
  495. package/scripts/check-json.mjs +0 -45
  496. package/scripts/check-syntax-changed.mjs +0 -102
  497. package/scripts/check-syntax.mjs +0 -58
  498. package/scripts/code-graph-batch.test.mjs +0 -33
  499. package/scripts/config-preserve-smoke.mjs +0 -180
  500. package/scripts/doctor.mjs +0 -489
  501. package/scripts/edit-normalize-fuzz.mjs +0 -130
  502. package/scripts/edit-normalize-smoke.mjs +0 -401
  503. package/scripts/edit-operation-smoke.mjs +0 -369
  504. package/scripts/edit2-smoke.mjs +0 -63
  505. package/scripts/ensure-deps.mjs +0 -259
  506. package/scripts/fuzzy-e2e.mjs +0 -28
  507. package/scripts/fuzzy-smoke.mjs +0 -26
  508. package/scripts/generate-runtime-manifest.mjs +0 -166
  509. package/scripts/guard-smoke.mjs +0 -66
  510. package/scripts/hidden-role-schema-smoke.mjs +0 -162
  511. package/scripts/hook-routing-smoke.mjs +0 -29
  512. package/scripts/inject-input.ps1 +0 -204
  513. package/scripts/io-complex-smoke.mjs +0 -667
  514. package/scripts/io-explore-bench.mjs +0 -424
  515. package/scripts/io-guardrails-smoke.mjs +0 -205
  516. package/scripts/io-mini-bench-baseline.json +0 -11
  517. package/scripts/io-mini-bench.mjs +0 -216
  518. package/scripts/io-route-harness.mjs +0 -933
  519. package/scripts/io-telemetry-report.mjs +0 -691
  520. package/scripts/mutation-bench.mjs +0 -564
  521. package/scripts/mutation-io-smoke.mjs +0 -1097
  522. package/scripts/native-patch-bridge-smoke.mjs +0 -288
  523. package/scripts/native-patch-smoke.mjs +0 -304
  524. package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
  525. package/scripts/patch-interior-context-smoke.mjs +0 -49
  526. package/scripts/patch-newline-utf8-smoke.mjs +0 -157
  527. package/scripts/perf-hook-smoke.mjs +0 -71
  528. package/scripts/permission-eval-smoke.mjs +0 -443
  529. package/scripts/prep-patch.mjs +0 -53
  530. package/scripts/prep-shim.mjs +0 -96
  531. package/scripts/provider-cache-smoke.mjs +0 -687
  532. package/scripts/report-runtime-health.mjs +0 -132
  533. package/scripts/resolve-bun.mjs +0 -60
  534. package/scripts/run-mcp.mjs +0 -1448
  535. package/scripts/salvage-v4a-shatter.test.mjs +0 -58
  536. package/scripts/scoped-cache-io-smoke.mjs +0 -103
  537. package/scripts/shell-policy-round3-smoke.mjs +0 -46
  538. package/scripts/smoke-runtime-negative.ps1 +0 -100
  539. package/scripts/smoke-runtime-negative.sh +0 -95
  540. package/scripts/stall-policy-smoke.mjs +0 -50
  541. package/scripts/start-memory-worker.mjs +0 -23
  542. package/scripts/statusline-launcher-smoke.mjs +0 -82
  543. package/scripts/stress-atomic-write.mjs +0 -1028
  544. package/scripts/test-fault-inject.mjs +0 -164
  545. package/scripts/test-large-file.mjs +0 -174
  546. package/scripts/tool-edge-smoke.mjs +0 -209
  547. package/scripts/uninstall.mjs +0 -201
  548. package/scripts/webhook-selfheal-smoke.mjs +0 -27
  549. package/scripts/write-overwrite-guard-smoke.mjs +0 -56
  550. package/server-main.mjs +0 -3109
  551. package/server.mjs +0 -468
  552. package/setup/config-merge.mjs +0 -246
  553. package/setup/install.mjs +0 -574
  554. package/setup/launch-core.mjs +0 -617
  555. package/setup/launch.mjs +0 -101
  556. package/setup/locate-claude.mjs +0 -56
  557. package/setup/mixdog-cli.mjs +0 -122
  558. package/setup/setup-server.mjs +0 -3305
  559. package/setup/setup.html +0 -3740
  560. package/setup/tui.mjs +0 -325
  561. package/skills/retro-skill-proposer/SKILL.md +0 -92
  562. package/skills/schedule-add/SKILL.md +0 -77
  563. package/skills/setup/SKILL.md +0 -356
  564. package/skills/webhook-add/SKILL.md +0 -81
  565. package/src/agent/bridge-stall-watchdog.mjs +0 -337
  566. package/src/agent/index.mjs +0 -2138
  567. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
  568. package/src/agent/orchestrator/bridge-retry.mjs +0 -220
  569. package/src/agent/orchestrator/bridge-trace.mjs +0 -583
  570. package/src/agent/orchestrator/cache-mtime.mjs +0 -58
  571. package/src/agent/orchestrator/config.mjs +0 -405
  572. package/src/agent/orchestrator/context/collect.mjs +0 -651
  573. package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
  574. package/src/agent/orchestrator/drain-registry.mjs +0 -50
  575. package/src/agent/orchestrator/explore-validator.mjs +0 -8
  576. package/src/agent/orchestrator/internal-roles.mjs +0 -118
  577. package/src/agent/orchestrator/internal-tools.mjs +0 -88
  578. package/src/agent/orchestrator/jobs.mjs +0 -116
  579. package/src/agent/orchestrator/mcp/client.mjs +0 -364
  580. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1881
  581. package/src/agent/orchestrator/providers/anthropic.mjs +0 -594
  582. package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
  583. package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
  584. package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
  585. package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
  586. package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
  587. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
  588. package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
  589. package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
  590. package/src/agent/orchestrator/providers/registry.mjs +0 -192
  591. package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
  592. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
  593. package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
  594. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
  595. package/src/agent/orchestrator/session/loop.mjs +0 -1478
  596. package/src/agent/orchestrator/session/manager.mjs +0 -1991
  597. package/src/agent/orchestrator/session/result-classification.mjs +0 -65
  598. package/src/agent/orchestrator/session/store.mjs +0 -632
  599. package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
  600. package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
  601. package/src/agent/orchestrator/session/trim.mjs +0 -491
  602. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
  603. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
  604. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
  605. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
  606. package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
  607. package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
  608. package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
  609. package/src/agent/orchestrator/stall-policy.mjs +0 -201
  610. package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
  611. package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
  612. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -455
  613. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
  614. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
  615. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
  616. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
  617. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
  618. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
  619. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
  620. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
  621. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
  622. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
  623. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
  624. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
  625. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
  626. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
  627. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
  628. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
  629. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
  630. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
  631. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
  632. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
  633. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
  634. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
  635. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
  636. package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
  637. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
  638. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
  639. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
  640. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
  641. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
  642. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
  643. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
  644. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
  645. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
  646. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
  647. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
  648. package/src/agent/orchestrator/tools/builtin.mjs +0 -503
  649. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
  650. package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
  651. package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
  652. package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
  653. package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
  654. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
  655. package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
  656. package/src/agent/orchestrator/tools/host-input.mjs +0 -204
  657. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
  658. package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
  659. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
  660. package/src/agent/orchestrator/tools/patch.mjs +0 -2754
  661. package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
  662. package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
  663. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
  664. package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
  665. package/src/agent/orchestrator/workflow-store.mjs +0 -93
  666. package/src/agent/tool-defs.mjs +0 -103
  667. package/src/channels/backends/discord.mjs +0 -784
  668. package/src/channels/data/voice-runtime-manifest.json +0 -138
  669. package/src/channels/index.mjs +0 -3268
  670. package/src/channels/lib/config.mjs +0 -292
  671. package/src/channels/lib/drop-trace.mjs +0 -71
  672. package/src/channels/lib/event-pipeline.mjs +0 -81
  673. package/src/channels/lib/holidays.mjs +0 -138
  674. package/src/channels/lib/hook-pipe-server.mjs +0 -822
  675. package/src/channels/lib/output-forwarder.mjs +0 -765
  676. package/src/channels/lib/runtime-paths.mjs +0 -517
  677. package/src/channels/lib/scheduler.mjs +0 -723
  678. package/src/channels/lib/session-discovery.mjs +0 -103
  679. package/src/channels/lib/state-file.mjs +0 -68
  680. package/src/channels/lib/status-snapshot.mjs +0 -219
  681. package/src/channels/lib/tool-format.mjs +0 -140
  682. package/src/channels/lib/transcript-discovery.mjs +0 -195
  683. package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
  684. package/src/channels/lib/webhook.mjs +0 -1318
  685. package/src/channels/tool-defs.mjs +0 -170
  686. package/src/daemon/host.mjs +0 -118
  687. package/src/daemon/mcp-transport.mjs +0 -47
  688. package/src/daemon/session.mjs +0 -100
  689. package/src/daemon/thin-client.mjs +0 -71
  690. package/src/daemon/transport.mjs +0 -163
  691. package/src/memory/data/runtime-manifest.json +0 -40
  692. package/src/memory/index.mjs +0 -3332
  693. package/src/memory/lib/core-memory-store.mjs +0 -330
  694. package/src/memory/lib/embedding-provider.mjs +0 -269
  695. package/src/memory/lib/embedding-worker.mjs +0 -323
  696. package/src/memory/lib/memory-cycle1.mjs +0 -645
  697. package/src/memory/lib/memory-cycle2.mjs +0 -1284
  698. package/src/memory/lib/memory-cycle3.mjs +0 -540
  699. package/src/memory/lib/memory-embed.mjs +0 -299
  700. package/src/memory/lib/memory-ops-policy.mjs +0 -190
  701. package/src/memory/lib/memory-recall-store.mjs +0 -638
  702. package/src/memory/lib/memory.mjs +0 -412
  703. package/src/memory/lib/pg/adapter.mjs +0 -308
  704. package/src/memory/lib/pg/process.mjs +0 -360
  705. package/src/memory/lib/pg/supervisor.mjs +0 -396
  706. package/src/memory/lib/runtime-fetcher.mjs +0 -458
  707. package/src/memory/lib/trace-store.mjs +0 -728
  708. package/src/memory/tool-defs.mjs +0 -79
  709. package/src/search/index.mjs +0 -1173
  710. package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
  711. package/src/search/lib/backends/exa.mjs +0 -50
  712. package/src/search/lib/backends/firecrawl.mjs +0 -61
  713. package/src/search/lib/backends/gemini-api.mjs +0 -83
  714. package/src/search/lib/backends/grok-oauth.mjs +0 -86
  715. package/src/search/lib/backends/index.mjs +0 -150
  716. package/src/search/lib/backends/openai-api.mjs +0 -144
  717. package/src/search/lib/backends/openai-oauth.mjs +0 -102
  718. package/src/search/lib/backends/openai-web-search.mjs +0 -76
  719. package/src/search/lib/backends/tavily.mjs +0 -55
  720. package/src/search/lib/backends/xai-api.mjs +0 -113
  721. package/src/search/lib/config.mjs +0 -192
  722. package/src/search/lib/provider-usage.mjs +0 -67
  723. package/src/search/lib/providers.mjs +0 -47
  724. package/src/search/lib/search-intent.mjs +0 -109
  725. package/src/search/lib/setup-handler.mjs +0 -261
  726. package/src/search/lib/web-tools.mjs +0 -1219
  727. package/src/search/tool-defs.mjs +0 -83
  728. package/src/setup/defender-exclusion.mjs +0 -183
  729. package/src/shared/atomic-file.mjs +0 -436
  730. package/src/shared/config.mjs +0 -372
  731. package/src/shared/daemon-recycle.mjs +0 -108
  732. package/src/shared/disable-claude-builtins.mjs +0 -91
  733. package/src/shared/err-text.mjs +0 -12
  734. package/src/shared/llm/cost.mjs +0 -66
  735. package/src/shared/llm/http-agent.mjs +0 -123
  736. package/src/shared/open-url.mjs +0 -62
  737. package/src/shared/plugin-paths.mjs +0 -58
  738. package/src/shared/schedules-store.mjs +0 -70
  739. package/src/shared/seed.mjs +0 -136
  740. package/src/shared/user-cwd.mjs +0 -225
  741. package/src/shared/user-data-guard.mjs +0 -244
  742. package/src/status/aggregator.mjs +0 -584
  743. package/src/status/server.mjs +0 -413
  744. package/tools.json +0 -1653
  745. /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
  746. /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
  747. /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
  748. /package/{lib → src/lib}/config-cjs.cjs +0 -0
  749. /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
  750. /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
  751. /package/{lib → src/lib}/text-utils.cjs +0 -0
  752. /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
  753. /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
  754. /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
  755. /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
  756. /package/src/{agent → runtime/agent}/orchestrator/session/cache/post-edit-marks.mjs +0 -0
  757. /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
  758. /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
  759. /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
  760. /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
  761. /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
  762. /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
  763. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/advisory-lock.mjs +0 -0
  764. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
  765. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
  766. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
  767. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
  768. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
  769. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
  770. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
  771. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
  772. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
  773. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
  774. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
  775. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
  776. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
  777. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
  778. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
  779. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
  780. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
  781. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
  782. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
  783. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
  784. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
  785. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
  786. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
  787. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
  788. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
  789. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
  790. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
  791. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
  792. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
  793. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
  794. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
  795. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
  796. /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
  797. /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
  798. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
  799. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
  800. /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
  801. /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
  802. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
  803. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
  804. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
  805. /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
  806. /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
  807. /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
  808. /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
  809. /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
  810. /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
  811. /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
  812. /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
  813. /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
  814. /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
  815. /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
  816. /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
  817. /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
  818. /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
  819. /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
  820. /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
  821. /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
  822. /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
  823. /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
  824. /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
  825. /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
  826. /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
  827. /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
  828. /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
  829. /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
  830. /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
  831. /package/src/{search → runtime/search}/lib/state.mjs +0 -0
  832. /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
  833. /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
  834. /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
  835. /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
  836. /package/src/{shared → runtime/shared}/wsl.mjs +0 -0
@@ -1,584 +0,0 @@
1
- /**
2
- * Bridge-status aggregator.
3
- *
4
- * Builds the JSON / text payload consumed by statusline.sh and setup.html.
5
- * Extracted from setup-server.mjs (0.1.25 and earlier) so both the setup
6
- * server (on-demand, port 3458) and the MCP-embedded status server (always
7
- * on, ephemeral port) can serve the same response without drifting.
8
- *
9
- * All reads are best-effort; any single source failing leaves that segment
10
- * empty rather than failing the whole response.
11
- */
12
-
13
- import http from 'http';
14
- import { listSchedules } from '../shared/schedules-store.mjs';
15
-
16
- import {
17
- existsSync,
18
- readFileSync,
19
- readdirSync,
20
- } from 'fs';
21
- import { join } from 'path';
22
-
23
- const RECENT_MS = 30 * 60 * 1000;
24
- const SNAPSHOT_STALE_MS = 30_000;
25
-
26
- // Negative cache for ngrok offline state. Invariant: a /api/tunnels probe
27
- // that fails or returns no tunnel proves ngrok is offline; re-probing
28
- // within NGROK_OFFLINE_CACHE_MS adds zero information but pays a ~300ms
29
- // HTTP timeout per statusline tick. Cache the negative result; any
30
- // positive result (snapshot or successful probe) bypasses the cache.
31
- let _ngrokOfflineUntilMs = 0;
32
- const NGROK_OFFLINE_CACHE_MS = 30_000;
33
-
34
- // Whole-result cache for buildBridgeStatus. statusline polls at ~1s; a
35
- // short TTL collapses bursts (paired GET + setup-server tick + occasional
36
- // duplicate frame) into one IO pass. Sidecar files / sessions scan don't
37
- // change meaningfully within 800ms, so callers see consistent state.
38
- // Any caller that needs strictly-fresh data should pass options.noCache.
39
- const _buildCache = new Map();
40
- const BUILD_CACHE_MS = 800;
41
- const TWELVE_H = 12 * 60 * 60 * 1000;
42
-
43
- // Sessions directory scan cache. statusline polls aggregator at a tight
44
- // cadence (≤1s); without memoisation the readdirSync + per-file readFileSync +
45
- // JSON.parse pass burns a single core when sessions/ accumulates hundreds of
46
- // closed-session JSONs. TTL aligned with statusline polling cadence so the
47
- // CLOSED_GRACE_MS jitter window below is visible without strobing.
48
- const SESSIONS_CACHE_TTL_MS = 1_000;
49
- // Ephemeral maintenance roles (cycle1-agent, cycle2-agent, etc.) close
50
- // inside ~15-20s, faster than two statusline ticks can render. Keeping a
51
- // closed bridge session visible for this grace window past its terminal
52
- // updatedAt smooths the badge so short-lived workers don't strobe in and
53
- // out invisibly. STREAM_FRESH_MS still drops genuinely stalled sessions.
54
- const CLOSED_GRACE_MS = 5_000;
55
- let _sessionsCache = null;
56
- let _sessionsCacheAt = 0;
57
-
58
- function readSessionsScan(sessionsDir, now) {
59
- if (_sessionsCache && (now - _sessionsCacheAt) < SESSIONS_CACHE_TTL_MS) {
60
- return _sessionsCache;
61
- }
62
- const allSessions = [];
63
- const hbMap = new Map();
64
- let files = [];
65
- try {
66
- files = readdirSync(sessionsDir);
67
- } catch {
68
- // ENOENT (fresh install, no sessions/ yet) / EACCES (locked dir) ->
69
- // empty scan; caller treats as no sessions. Avoids the check-then-
70
- // readdir race where existsSync says yes but the dir vanishes before
71
- // readdir, propagating an error into statusline.
72
- files = [];
73
- }
74
- for (const f of files) {
75
- if (f.endsWith('.json')) {
76
- try {
77
- const parsed = JSON.parse(readFileSync(join(sessionsDir, f), 'utf-8'));
78
- // Reject non-plain-object payloads (null, arrays, strings, numbers).
79
- // isSessionRunning + downstream consumers do bare property access
80
- // (s.owner, s.closed, s.id) which throws on null and misbehaves on
81
- // arrays/primitives — a single malformed file would otherwise sink
82
- // the whole status build.
83
- if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
84
- allSessions.push(parsed);
85
- }
86
- }
87
- catch { /* skip corrupt */ }
88
- } else if (f.endsWith('.hb')) {
89
- const id = f.slice(0, -3);
90
- try {
91
- const ts = parseInt(readFileSync(join(sessionsDir, f), 'utf-8').trim(), 10);
92
- if (Number.isFinite(ts)) hbMap.set(id, ts);
93
- } catch { /* skip */ }
94
- }
95
- }
96
- _sessionsCache = { allSessions, hbMap };
97
- _sessionsCacheAt = now;
98
- return _sessionsCache;
99
- }
100
-
101
- function normalizeTimestamp(value) {
102
- if (value === null || value === undefined || value === '') return null;
103
- const n = Number(value);
104
- return Number.isFinite(n) ? n : null;
105
- }
106
-
107
- function buildRecapSegment(recap = {}) {
108
- const validStates = new Set(['idle', 'running', 'injected', 'empty', 'error']);
109
- const rawState = typeof recap.state === 'string' && validStates.has(recap.state) ? recap.state : 'idle';
110
- return {
111
- state: rawState,
112
- running: recap.running === true,
113
- startedAt: normalizeTimestamp(recap.startedAt),
114
- lastCompletedAt: normalizeTimestamp(recap.lastCompletedAt),
115
- updatedAt: normalizeTimestamp(recap.updatedAt),
116
- errorMessage: typeof recap.errorMessage === 'string' ? recap.errorMessage.slice(0, 200) : null,
117
- };
118
- }
119
-
120
- // Hidden maintenance roles (see defaults/hidden-roles.json kind="maintenance").
121
- // Plugin-internal background workers without per-terminal ownership: cycle1/2/3,
122
- // scheduler-task, webhook-handler. Spawned via
123
- // callBridgeLlm WITHOUT an explicit ownerSessionId, so the session-builder
124
- // fallback inherits the spawning instance's MIXDOG_OWNER_SESSION_ID rather
125
- // than leaving it null. The set is still used by the closed-grace / last-
126
- // completed visibility gates below; owner-scoping (matchesOwnerSession) now
127
- // keeps each terminal's statusline limited to the workers it actually spawned.
128
- const SHARED_BACKGROUND_ROLES = new Set([
129
- 'cycle1-agent',
130
- 'cycle2-agent',
131
- 'cycle3-agent',
132
- 'scheduler-task',
133
- 'webhook-handler',
134
- ]);
135
-
136
- function matchesOwnerSession(session, ownerSessionId) {
137
- if (!ownerSessionId) return true;
138
- return session?.ownerSessionId === ownerSessionId;
139
- }
140
-
141
- function matchesClientHostPid(session, clientHostPid) {
142
- if (!clientHostPid) return true;
143
- return session?.clientHostPid === clientHostPid;
144
- }
145
-
146
- function keepClosedSessionVisible(session) {
147
- // Only grace a genuine just-finished close. idle-sweep / abort batch-closes
148
- // bump updatedAt on many stale tombstones at once; without this reason gate
149
- // they all re-enter the 5s closed-grace simultaneously and strobe the badge
150
- // (the SHARED_BACKGROUND_ROLES "phantom flash" at idle). Genuine completions
151
- // (e.g. ephemeral-done) are not suppressed, so real finishes still show.
152
- return session?.role
153
- && SHARED_BACKGROUND_ROLES.has(session.role)
154
- && shouldShowLastCompleted(session);
155
- }
156
-
157
- const SUPPRESSED_LAST_COMPLETED_REASONS = new Set([
158
- 'manual',
159
- 'request-abort',
160
- 'request-aborted',
161
- 'retry-replaced',
162
- 'idle-sweep',
163
- ]);
164
-
165
- function shouldShowLastCompleted(session) {
166
- const reason = session?.closedReason ? String(session.closedReason) : '';
167
- return !SUPPRESSED_LAST_COMPLETED_REASONS.has(reason);
168
- }
169
-
170
- // Active-session filter anchored on stream-recency via the heartbeat
171
- // file. .hb is the single source of truth — no disk session.status /
172
- // lastStreamDeltaAt fallback. The 5min window keeps the badge alive
173
- // across long reasoning blocks (xhigh effort, deep tool chains) where
174
- // the gap between SSE chunks routinely exceeds 30s. Genuine stalls
175
- // eventually trip the bridge-stall-watchdog or the RUNNING_STALL_MS
176
- // sweep at 10min; closed:true plants land on disk synchronously so the
177
- // badge drops immediately on real completion.
178
- const STREAM_FRESH_MS = 5 * 60 * 1000;
179
-
180
- // Mirror of the store-side running-stall window (store.mjs:489). A not-yet-
181
- // closed session whose heartbeat lapsed during a long non-streaming tool call
182
- // stays visible until this window — matching when the store sweep would
183
- // actually close it — so deep tool chains don't blink out mid-run.
184
- const RUNNING_STALL_MS = 10 * 60 * 1000;
185
-
186
- // Shared running-session predicate used by both the full and compact
187
- // builders. Multi-CC isolation: owner-scoped status servers must not
188
- // show bridge sessions from another terminal — untagged legacy
189
- // sessions are hidden once the request is owner-scoped. Heartbeat-less
190
- // grace is reserved for shared background roles; user worker sessions
191
- // must have a fresh heartbeat, otherwise stale tombstones can flash in
192
- // unrelated statuslines during spawn/claim races.
193
- function isSessionRunning(s, { hbMap, now, ownerSessionId, clientHostPid, ownerHostPid, includeClosedGrace = true }) {
194
- if (s.owner !== 'bridge') return false;
195
- const isSharedBackground = s.role && SHARED_BACKGROUND_ROLES.has(s.role);
196
- // Scoping unit differs by role kind (invariant, not a fallback):
197
- // - Maintenance/background roles (cycle1/2/3-agent, scheduler-task,
198
- // webhook-handler) are spawned by the memory daemon via
199
- // callBridgeLlm WITHOUT a clientHostPid, so their session JSON has
200
- // none. They belong to the ACTIVE OWNER TERMINAL (owner = one live
201
- // session, NOT the daemon): on a shared daemon every attached
202
- // terminal carries the same ownerSessionId, so owner-scoping alone
203
- // would leak maintenance chips onto EVERY terminal. Gate them
204
- // on the requesting terminal being the active-instance owner —
205
- // clientHostPid === ownerHostPid (active-instance.json SSOT). When
206
- // ownerHostPid or the request clientHostPid is absent (legacy /
207
- // single-instance), fall through to owner-scoping unchanged.
208
- // - User worker sessions (worker/reviewer/debugger/tester) carry a
209
- // per-terminal clientHostPid and stay strictly isolated to the
210
- // terminal that spawned them.
211
- if (isSharedBackground) {
212
- if (!matchesOwnerSession(s, ownerSessionId)) return false;
213
- if (ownerHostPid && clientHostPid && clientHostPid !== ownerHostPid) return false;
214
- } else if (!matchesClientHostPid(s, clientHostPid)) {
215
- return false;
216
- }
217
- if (s.closed === true) {
218
- if (!includeClosedGrace) return false;
219
- return keepClosedSessionVisible(s) && (now - (s.updatedAt || 0)) <= CLOSED_GRACE_MS;
220
- }
221
- const hb = hbMap.get(s.id);
222
- if (hb && (now - hb) <= STREAM_FRESH_MS) return true;
223
- if (s.status && s.status !== 'running') return false;
224
- const statusIsRunning = s.status === 'running';
225
- // Heartbeat-less grace is only for plugin-owned background work. Public
226
- // worker/reviewer/debugger sessions clear their heartbeat on completion but
227
- // may remain on disk as idle tombstones, so treating updatedAt as liveness
228
- // makes finished workers linger in L2 and leak across terminals.
229
- if (isSharedBackground && statusIsRunning && (now - (s.updatedAt || 0)) <= RUNNING_STALL_MS) return true;
230
- return false;
231
- }
232
-
233
- // Idle bridge-worker predicate. A worker that has finished its turn clears
234
- // its heartbeat (so isSessionRunning is false) but may remain on disk as an
235
- // idle tombstone until the store reaps it. Reaped sessions are deleted from
236
- // sessions/ entirely, so they fall out of allSessions and vanish from L2 with
237
- // no extra logic here. We surface the surviving idle workers (greyed) so the
238
- // user can see a worker is parked-but-present, distinct from RUNNING.
239
- // Maintenance/background roles are excluded — user workers scoped by clientHostPid only
240
- // (ownerSessionId is volatile across daemon restarts; clientHostPid is per-terminal SSOT).
241
- function isIdleWorkerSession(s, { ownerSessionId, clientHostPid }) {
242
- if (s.owner !== 'bridge') return false;
243
- if (!matchesClientHostPid(s, clientHostPid)) return false;
244
- if (s.closed === true) return false; // closed → handled by closed-grace / lastCompleted
245
- if (s.role && SHARED_BACKGROUND_ROLES.has(s.role)) return false; // maintenance, not a user worker
246
- return true; // on-disk, not running (callers exclude running ids), not closed → idle
247
- }
248
-
249
- // Build the unified worker list consumed by L2: running workers carry
250
- // status 'running', surviving idle tombstones carry 'idle'. Each entry keeps
251
- // its bridgeTag so the statusline can render tag + status. This is the single
252
- // thread that carries running/idle status from aggregator → statusline-lib.
253
- function buildWorkerList(running, idle) {
254
- return [
255
- ...running.map((s) => ({ tag: s.bridgeTag || s.role || 'agent', status: 'running' })),
256
- ...idle.map((s) => ({ tag: s.bridgeTag || s.role || 'agent', status: 'idle' })),
257
- ].filter((w) => w.tag);
258
- }
259
-
260
- // Snapshot → nextSchedule parser. Used by both builders. Returns null
261
- // when the snapshot has no schedules.next entry or the fireAt is not a
262
- // finite number; otherwise returns { name, fireAt }.
263
- function parseNextScheduleFromSnap(snap) {
264
- if (!snap?.schedules?.next) return null;
265
- const fireAt = Number(snap.schedules.next.fireAt);
266
- if (!Number.isFinite(fireAt)) return null;
267
- // ECMAScript caps valid Date instants at ±8.64e15 ms from epoch; finite
268
- // numbers outside that range yield an Invalid Date whose toISOString()
269
- // throws RangeError. Treat out-of-range snapshots as best-effort-absent
270
- // so a malformed schedules.next does not sink buildBridgeStatus.
271
- if (Math.abs(fireAt) > 8.64e15) return null;
272
- return { name: snap.schedules.next.name, fireAt };
273
- }
274
-
275
- export async function buildBridgeStatus(dataDir, options = {}) {
276
- const now = Date.now();
277
- // Short-TTL whole-result cache. statusline tick is ~1s, so an 800ms TTL
278
- // turns repeated GETs (paired status + setup duplicate) into zero-cost
279
- // returns while keeping per-tick freshness for the user.
280
- const _cacheKey = `${options.ownerSessionId || ''}|${options.clientHostPid ?? ''}`;
281
- if (!options.noCache) {
282
- const _cached = _buildCache.get(_cacheKey);
283
- if (_cached && now - _cached.at < BUILD_CACHE_MS) return _cached.result;
284
- }
285
-
286
- const SESSIONS_DIR = join(dataDir, 'sessions');
287
- const STATUS_SNAPSHOT_PATH = join(dataDir, 'channels', 'status-snapshot.json');
288
- const JOBS_STATE_PATH = join(dataDir, 'jobs', 'state.json');
289
- const CACHE_STATS_PATH = join(dataDir, 'cache-stats.json');
290
-
291
- // ── 1. Active + recently-completed bridge sessions ────────────────
292
- // Single readdir over sessions/ separates `<id>.json` (full session
293
- // payload) from `<id>.hb` (lightweight heartbeat published by
294
- // markSessionStreamDelta on a ≤5s self-throttle). The .hb file is the
295
- // authoritative fresh signal because the heavy session.json save is
296
- // throttled to 60s.
297
- const { allSessions, hbMap } = readSessionsScan(SESSIONS_DIR, now);
298
- const running = allSessions.filter(s => isSessionRunning(s, {
299
- hbMap, now, ownerSessionId: options.ownerSessionId, clientHostPid: options.clientHostPid, ownerHostPid: options.ownerHostPid,
300
- }));
301
- const runningRoles = running.map(s => s.bridgeTag || s.role || 'agent').filter(Boolean);
302
- // Surviving idle worker tombstones (running ones excluded so a session is
303
- // never counted twice). Reaped sessions are gone from allSessions already.
304
- const runningIds = new Set(running.map(s => s.id));
305
- const idle = allSessions.filter(s => !runningIds.has(s.id)
306
- && isIdleWorkerSession(s, { ownerSessionId: options.ownerSessionId, clientHostPid: options.clientHostPid }));
307
- const workers = buildWorkerList(running, idle);
308
-
309
- const recentClosed = allSessions
310
- .filter(s => s.owner === 'bridge'
311
- && s.closed === true
312
- && shouldShowLastCompleted(s)
313
- && matchesOwnerSession(s, options.ownerSessionId)
314
- && matchesClientHostPid(s, options.clientHostPid)
315
- && (now - (s.updatedAt || 0)) <= RECENT_MS)
316
- .sort((a, b) => (b.updatedAt || 0) - (a.updatedAt || 0));
317
- const lastCompleted = recentClosed[0] || null;
318
-
319
- // ── 2. Scheduler state ────────────────────────────────────────────
320
- let scheduleActive = 0;
321
- let scheduleDeferred = 0;
322
- let nextSchedule = null;
323
- let discordTotalUnread = null;
324
- let ngrokTunnelUrl = null;
325
- let snapshotFresh = false;
326
- try {
327
- if (existsSync(STATUS_SNAPSHOT_PATH)) {
328
- const snap = JSON.parse(readFileSync(STATUS_SNAPSHOT_PATH, 'utf-8'));
329
- if (snap && typeof snap.writtenAt === 'number' && (now - snap.writtenAt) <= SNAPSHOT_STALE_MS) {
330
- snapshotFresh = true;
331
- // Schedules truth source: `${CLAUDE_PLUGIN_DATA}/schedules/<name>/`.
332
- // listSchedules() is shared with channels/lib/config.mjs and
333
- // setup-server so all three see the same entry list.
334
- const allSchedules = listSchedules().filter(s => s.enabled !== false && s.name);
335
- scheduleActive = allSchedules.length;
336
- scheduleDeferred = snap.schedules?.deferredCount ?? 0;
337
- nextSchedule = parseNextScheduleFromSnap(snap);
338
- if (typeof snap.discord?.totalUnread === 'number') {
339
- discordTotalUnread = snap.discord.totalUnread;
340
- }
341
- if (snap.ngrok?.tunnelUrl) {
342
- ngrokTunnelUrl = snap.ngrok.tunnelUrl;
343
- }
344
- }
345
- }
346
- } catch { /* snapshot unreadable */ }
347
-
348
- if (!snapshotFresh) {
349
- try {
350
- const allSchedules = listSchedules().filter(s => s.enabled !== false && s.name);
351
- scheduleActive = allSchedules.length;
352
-
353
- const candidates = [];
354
- for (const s of allSchedules) {
355
- if (!s.time || !/^\d{2}:\d{2}$/.test(s.time)) continue;
356
- // Skip entries the snapshot-less fallback cannot faithfully
357
- // evaluate: cron expressions, non-local timezones, day-of-week
358
- // restrictions, and any deferrals (only carried in the snapshot).
359
- // Emitting a falsely-imminent upcoming entry is worse than
360
- // showing none — the statusline simply omits the badge.
361
- if (s.cron) continue;
362
- if (s.timezone) continue;
363
- if (Array.isArray(s.days) && s.days.length > 0) continue;
364
- const [hh, mm] = s.time.split(':').map(Number);
365
- for (const offsetDays of [0, 1]) {
366
- const candidate = new Date(now);
367
- candidate.setDate(candidate.getDate() + offsetDays);
368
- candidate.setHours(hh, mm, 0, 0);
369
- const diff = candidate.getTime() - now;
370
- if (diff > 0 && diff <= TWELVE_H) {
371
- candidates.push({ name: s.name, fireAt: candidate.getTime(), diff });
372
- }
373
- }
374
- }
375
- candidates.sort((a, b) => a.diff - b.diff);
376
- if (candidates.length > 0) nextSchedule = candidates[0];
377
- } catch { /* config unreadable */ }
378
- }
379
-
380
- // ── 3. Jobs count ────────────────────────────────────────────────
381
- let jobsCount = 0;
382
- if (existsSync(JOBS_STATE_PATH)) {
383
- try {
384
- const jobsState = JSON.parse(readFileSync(JOBS_STATE_PATH, 'utf-8'));
385
- if (Array.isArray(jobsState)) {
386
- jobsCount = jobsState.filter(j => j.status === 'running').length;
387
- }
388
- } catch { /* unreadable */ }
389
- }
390
-
391
- // ── 5. Ngrok online ──────────────────────────────────────────────
392
- let ngrokOnline = false;
393
- if (ngrokTunnelUrl) {
394
- ngrokOnline = true;
395
- _ngrokOfflineUntilMs = 0; // positive evidence resets negative cache
396
- } else if (Date.now() < _ngrokOfflineUntilMs) {
397
- // Negative cache hit — skip the ~300ms HTTP probe.
398
- ngrokOnline = false;
399
- } else {
400
- await new Promise((resolve) => {
401
- const timer = setTimeout(() => { try { req_ng && req_ng.destroy(); } catch {} resolve(); }, 300);
402
- let req_ng;
403
- try {
404
- req_ng = http.get('http://127.0.0.1:4040/api/tunnels', (r) => {
405
- clearTimeout(timer);
406
- let body = '';
407
- r.on('data', d => { body += d; });
408
- r.on('end', () => {
409
- try {
410
- const parsed = JSON.parse(body);
411
- const tunnel = (parsed.tunnels || []).find(t => t.public_url);
412
- if (tunnel) {
413
- ngrokOnline = true;
414
- ngrokTunnelUrl = tunnel.public_url;
415
- }
416
- } catch { /* ignore */ }
417
- resolve();
418
- });
419
- });
420
- req_ng.on('error', () => { clearTimeout(timer); resolve(); });
421
- req_ng.setTimeout(300, () => { clearTimeout(timer); try { req_ng.destroy(); } catch {} resolve(); });
422
- } catch { clearTimeout(timer); resolve(); }
423
- });
424
- if (ngrokOnline) {
425
- _ngrokOfflineUntilMs = 0;
426
- } else {
427
- _ngrokOfflineUntilMs = Date.now() + NGROK_OFFLINE_CACHE_MS;
428
- }
429
- }
430
-
431
- // ── Assemble payload ─────────────────────────────────────────────
432
- const sessionSegment = running.length > 0
433
- ? { active: running.length, roles: runningRoles, workers }
434
- : { active: 0, roles: [], workers };
435
-
436
- let lastCompletedSegment = null;
437
- if (lastCompleted) {
438
- const ageMs = now - (lastCompleted.updatedAt || 0);
439
- lastCompletedSegment = {
440
- role: lastCompleted.role || 'agent',
441
- agoMinutes: Math.round(ageMs / 60000),
442
- };
443
- }
444
-
445
- const scheduleSegment = {
446
- active: scheduleActive,
447
- deferred: scheduleDeferred,
448
- next: nextSchedule ? {
449
- name: nextSchedule.name,
450
- fireAt: nextSchedule.fireAt,
451
- fireAtISO: new Date(nextSchedule.fireAt).toISOString(),
452
- } : null,
453
- };
454
- const recapSegment = buildRecapSegment(options.recap);
455
-
456
- // ── 6. Cache stats ───────────────────────────────────────────────
457
- let cacheStats = null;
458
- if (existsSync(CACHE_STATS_PATH)) {
459
- try {
460
- const raw = JSON.parse(readFileSync(CACHE_STATS_PATH, 'utf-8'));
461
- if (raw && typeof raw.writtenAt === 'number' && typeof raw.totals === 'object') {
462
- const t = raw.totals;
463
- cacheStats = {
464
- writtenAt: raw.writtenAt,
465
- totals: {
466
- sets: t.sets ?? 0,
467
- hits: t.hits ?? 0,
468
- misses: t.misses ?? 0,
469
- clears: t.clears ?? 0,
470
- },
471
- perSession: Array.isArray(raw.perSession) ? raw.perSession : [],
472
- };
473
- }
474
- } catch (e) { try { process.stderr.write(`[status-aggregator] partial-fetch swallow: ${e?.message ?? e}\n`); } catch {} }
475
- }
476
-
477
- const _result = {
478
- sessions: sessionSegment,
479
- lastCompleted: lastCompletedSegment,
480
- schedule: scheduleSegment,
481
- jobs: { count: jobsCount },
482
- recap: recapSegment,
483
- ngrok: { online: ngrokOnline, tunnelUrl: ngrokTunnelUrl ?? undefined },
484
- ...(discordTotalUnread !== null ? { discord: { totalUnread: discordTotalUnread } } : {}),
485
- ...(cacheStats !== null ? { cacheStats } : {}),
486
- snapshotFresh,
487
- generatedAt: new Date(now).toISOString(),
488
- };
489
- if (!options.noCache) {
490
- _buildCache.set(_cacheKey, { result: _result, at: now });
491
- }
492
- return _result;
493
- }
494
-
495
- // Compact payload for the statusline 1-5 s polling cadence. Builds only
496
- // the fields bin/statusline.mjs actually consumes (sessions.roles +
497
- // schedule.next.{name,fireAt}); skips ngrok probe (~300 ms IO),
498
- // cache-stats, lastCompleted, jobs.count, discord, recap. Reuses the
499
- // 1 s readSessionsScan cache so repeated ticks see one disk scan
500
- // amortised across all statusline-json polls within the window. Compact L2
501
- // intentionally excludes closed-grace workers; completed work belongs in the
502
- // full `lastCompleted` segment, not the running badge.
503
- export async function buildBridgeStatusCompact(dataDir, options = {}) {
504
- const now = Date.now();
505
- const SESSIONS_DIR = join(dataDir, 'sessions');
506
- const STATUS_SNAPSHOT_PATH = join(dataDir, 'channels', 'status-snapshot.json');
507
-
508
- const { allSessions, hbMap } = readSessionsScan(SESSIONS_DIR, now);
509
- const running = allSessions.filter((s) => isSessionRunning(s, {
510
- hbMap,
511
- now,
512
- ownerSessionId: options.ownerSessionId,
513
- clientHostPid: options.clientHostPid,
514
- ownerHostPid: options.ownerHostPid,
515
- includeClosedGrace: false,
516
- }));
517
- const runningRoles = running.map((s) => s.bridgeTag || s.role || 'agent').filter(Boolean);
518
- // Mirror buildBridgeStatus: surface surviving idle worker tombstones too.
519
- // Note compact deliberately excludes closed-grace from `running`; idle here
520
- // means on-disk, not running, not closed — reaped sessions are already gone.
521
- const runningIds = new Set(running.map((s) => s.id));
522
- const idle = allSessions.filter((s) => !runningIds.has(s.id)
523
- && isIdleWorkerSession(s, { ownerSessionId: options.ownerSessionId, clientHostPid: options.clientHostPid }));
524
- const workers = buildWorkerList(running, idle);
525
-
526
- let nextSchedule = null;
527
- try {
528
- if (existsSync(STATUS_SNAPSHOT_PATH)) {
529
- const snap = JSON.parse(readFileSync(STATUS_SNAPSHOT_PATH, 'utf-8'));
530
- if (snap && typeof snap.writtenAt === 'number' && (now - snap.writtenAt) <= SNAPSHOT_STALE_MS) {
531
- nextSchedule = parseNextScheduleFromSnap(snap);
532
- }
533
- }
534
- } catch { /* snapshot unreadable */ }
535
-
536
- return {
537
- sessions: { active: running.length, roles: runningRoles, workers },
538
- schedule: { next: nextSchedule },
539
- };
540
- }
541
-
542
- export function renderBridgeStatusText(payload) {
543
- const parts = [];
544
- const running = payload.sessions?.active || 0;
545
- const roles = payload.sessions?.roles || [];
546
-
547
- if (running > 0) {
548
- const roleList = [...new Set(roles)].join(',');
549
- parts.push(`⚙ ${running} running (${roleList})`);
550
- } else {
551
- parts.push('idle');
552
- }
553
-
554
- if (payload.lastCompleted) {
555
- const ageMins = payload.lastCompleted.agoMinutes || 0;
556
- const timeAgo = ageMins <= 0 ? 'just now' : `${ageMins}m`;
557
- parts.push(`✓ ${payload.lastCompleted.role} ${timeAgo}`);
558
- }
559
-
560
- if (payload.schedule?.next) {
561
- const d = new Date(payload.schedule.next.fireAt);
562
- const hh = String(d.getHours()).padStart(2, '0');
563
- const mm = String(d.getMinutes()).padStart(2, '0');
564
- parts.push(`⏰ ${hh}:${mm} ${payload.schedule.next.name}`);
565
- }
566
-
567
- if (payload.schedule?.active > 0) {
568
- const def = payload.schedule.deferred || 0;
569
- parts.push(def > 0
570
- ? `📋 ${payload.schedule.active}/${def}def`
571
- : `📋 ${payload.schedule.active}`);
572
- }
573
-
574
- if (payload.cacheStats?.totals) {
575
- const { hits, misses } = payload.cacheStats.totals;
576
- const total = hits + misses;
577
- if (total >= 1) {
578
- const rate = Math.round((hits / total) * 100);
579
- parts.push(`cache ${hits}/${total} (${rate}%)`);
580
- }
581
- }
582
-
583
- return parts.join(' · ');
584
- }