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,138 +0,0 @@
1
- # Tool Routing
2
-
3
- Native tools and shell are NEVER used for IO — search, inspect, read, mutate
4
- files, or web access. Use the Mixdog equivalent. `bash` is the single shell
5
- entry point (PowerShell on Windows); native `Bash`/`PowerShell` are not used.
6
-
7
- | Native (forbidden for IO) | → Mixdog |
8
- |---|---|
9
- | `Read` | `read` |
10
- | `Grep` | `grep` |
11
- | `Glob` | `glob` |
12
- | `LS` / dir listing | `list` |
13
- | `Edit` / `NotebookEdit` | `apply_patch` (default editor) or `edit` (small exact substitution) |
14
- | `Write` | `write` (or `apply_patch`) |
15
- | Delete / remove a file | `apply_patch` (`*** Delete File: <path>`) — no native `rm`/unlink |
16
- | `WebSearch` | `search` |
17
- | `WebFetch` | `web_fetch` |
18
- | `Bash`/`PowerShell` (file IO) | ✗ — use the rows above; never `bash mkdir` to prep a path (`write`/`apply_patch` auto-create parent dirs), nor `touch`/`cat` (use `write`/`read`) |
19
- | `Bash`/`PowerShell` (git/build/test/run) | `bash` |
20
- | native `Agent` sub-agent to search / inspect / fetch | ✗ — call Mixdog tools directly; real sub-work goes through `bridge` |
21
-
22
- No native equivalent (use as-is): `code_graph`
23
- (`find_symbol`/`search`/`references`/`callers`/`imports`/`dependents`),
24
- `ToolSearch`. Lead progress tracking via `TaskCreate`/`TaskUpdate`/
25
- `TaskList` is allowed.
26
-
27
- ## Decision order — pick the FIRST that matches the task
28
-
29
- 1. **External / web / current docs** → `search` → `web_fetch` for bodies.
30
- 2. **Past memory / prior decisions / session history** → `recall`.
31
- Reach for it BEFORE re-deriving or re-asking — the trigger list (user
32
- references earlier work, resuming a paused task, proposing a decision
33
- that may already exist) is on the tool description. The SessionStart
34
- inject is a thin excerpt, not the store — anything not visible there is
35
- one read-only, cheap recall away.
36
- 3. **Read the code, scope unknown / open-ended / tree-wide** → `explore`.
37
- The entry point for "read the code and tell me X" and any sweep that would
38
- otherwise be a long `grep`/`code_graph` storm — ONE call offloads it to a
39
- sub-agent and keeps your context clean. Never a `worker`/`bridge` for
40
- read-only exploration; never grep-loop it yourself.
41
- explore LOCATES and DESCRIBES code — NOT an audit/review tool: its
42
- bug/quality/risk claims are unverified leads; verify them (reviewer role
43
- or direct reads) before acting on or reporting them. Shape every query as
44
- a LOCATION/INVENTORY question ("where/which/what implements X"), never a
45
- verdict question ("is X correct/missing", "are there gaps/bugs") —
46
- judgment stays with the Lead or a reviewer, applied to the coordinates
47
- explore returns.
48
- 4. **Known symbol / identifier** → `code_graph` (`find_symbol` when exact;
49
- `mode:search` with a keyword when you don't know the exact name — file-less,
50
- lists matching symbols + locations, use INSTEAD of grepping for a symbol).
51
- 5. **Find files by name / type / size / date** → `glob` (glob pattern, exact)
52
- or `list mode:find` (name-substring / type / size / date filter).
53
- 6. **Free-text / non-symbol content** (string literals, log lines, config keys,
54
- comments) → `grep`.
55
- 7. **Read a specific known region** → `read` (`offset`/`limit` or
56
- `line`/`context`; `symbol=NAME` for a whole definition; `max_lines`/`budget`/
57
- `mode` for a whole-file glance).
58
- 8. **Edit** → `apply_patch` (default editor; large/structural, multi-hunk, or
59
- multi-file) · `edit` (small exact substitution in a known spot; batch several) ·
60
- `write` (new file or a full rewrite of one already read — never `write` over an
61
- unread file). Batch dependent edits into ONE multi-hunk apply_patch; by default
62
- keep each hunk's context minimal — the target line(s) plus only enough for a
63
- unique match — so nothing surrounding is left to go stale.
64
- `write`/`apply_patch` auto-create missing parent directories — never
65
- `bash mkdir` to prepare an output path.
66
- To delete a file, use `apply_patch` with `*** Delete File: <path>` — there is
67
- no `rm` tool and `bash rm` is forbidden.
68
- 9. **Shell** (git/build/test/run only) → `bash`.
69
-
70
- Retrieval (1–3) picks the SOURCE family first; never default to a `bridge`
71
- worker for a read-only lookup. Retrieval is ONE-SHOT (never reused) but fans
72
- out: `recall`/`search` take a query array (built-in parallelism); `explore`
73
- spawns one per independent area in a single batch. All read-only, so concurrent
74
- is safe (no worktree conflict). How to shape `explore.query` — one-line
75
- per-topic sub-questions, never one broad brief, no anchors/context dump — is the
76
- SSOT in the `explore` tool's `query` parameter description; follow it.
77
-
78
- ## Broad to narrow — once scope is known
79
-
80
- `explore` (unknown scope) → `code_graph` (known identifier) → `glob`/`list` →
81
- `grep` (free-text / non-symbol only) → `read`. Anchor to the named file/symbol.
82
- A bounded / known-anchor lookup skips straight to `code_graph`/`grep` — but
83
- "the brief names a repo path" is NOT an anchor; anchor = a named file or symbol
84
- to start from. A tree-wide enumeration with no such anchor is step 3, not grep.
85
-
86
- Read what you need in ONE turn — batch a file's windows/`symbol=`s in the same
87
- turn, don't re-open it across later turns.
88
-
89
- ## Shortest route — collapse a multi-hop search into ONE call
90
-
91
- When the shape is known, do not chain `grep` → `read`:
92
- - keyword / partial-or-unknown symbol name → `code_graph mode:search` (one call,
93
- file-less) instead of grepping for it.
94
- Seed it with a SINGLE token, not a prose phrase — multi-word phrases miss and
95
- waste a call.
96
- - a named symbol → `code_graph find_symbol` with `body:true` (location + body +
97
- callees in one call).
98
- - several symbols' bodies / a call chain → ONE `code_graph find_symbol
99
- symbols:[...]` instead of N reads.
100
- - all call sites of a symbol → `callers`/`references` UNSCOPED (omit `file:`; add
101
- `file:` only to narrow a too-large result).
102
- - an upstream/downstream call chain across several symbols → ONE
103
- `callers`/`references` `symbols:[...]` (batches per chain LEVEL, not per symbol).
104
- - a whole function/definition → `read symbol=NAME`.
105
- - the lines around a hit → `grep -C`.
106
- - several free-text patterns at once → ONE `grep` with an array `pattern:[...]`
107
- (OR-matched ripgrep regexes, ≤20; ≤5 with `multiline`) instead of repeated
108
- single-pattern greps (`glob` takes an array too; for named/partial symbols use
109
- `code_graph`, not `grep`).
110
-
111
- Reach for the one-shot form before adding a follow-up `read`.
112
-
113
- ## Modifiers — rules that ride on top of the ladder
114
-
115
- - **Exploration budget.** Stop as soon as you can answer the task correctly —
116
- don't keep searching to confirm a found answer, gather extra examples, or
117
- polish phrasing. Match depth to the brief's stated thoroughness, not a default
118
- of exhaustive.
119
- - **Concurrency.** Any calls that don't depend on each other's output go in ONE
120
- message = one round-trip — read-only probes (`read`/`grep`/`glob`/`code_graph`)
121
- and non-overlapping `apply_patch` edits alike. Only a true dependency chain
122
- (grep → read the hit) stays serial; never run independent calls one-at-a-time.
123
- - **Lead-only async.** `explore` defaults to `background:true` (handle returns
124
- now; the merged answer arrives via `dispatch_result`) — LEAD ONLY. Bridge
125
- workers run `explore` sync (no channel for the async push) but still use it
126
- over a grep storm. `explore` fans out to read-only hidden `explorer` sub-agents
127
- (full worker tool schema + worker BP2 for cache parity); `recall`/`search` are
128
- plain MCP tools.
129
- - **No waiting calls.** Never issue shell calls whose only purpose is waiting,
130
- spacing, or liveness probing; report delayed/cancelled output instead.
131
- - **Failure circuit-breaker.** The same call failing TWICE with the same error
132
- ends variant-retrying: stop, diagnose the root cause (read the error's
133
- expected-vs-actual detail, inspect the target), then switch tool or
134
- strategy. Blind third attempts with tweaked arguments are wasted calls —
135
- the success path is one-shot; keep the failure path bounded too.
136
- - **No self-verification of output.** When the deliverable is code/text returned
137
- in your answer, emit it directly; never `write` a scratch file or `bash` it to
138
- compile/run/test your own output.
@@ -1,130 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * bootstrap.mjs — node-only bun bootstrap for mixdog.
4
- *
5
- * Ensures bun is available (system PATH or plugin-local node_modules/.bin/bun),
6
- * installs it via npm if missing, then exec-proxies into scripts/run-mcp.mjs.
7
- *
8
- * Deps: node built-ins only (node:child_process, node:fs, node:path, node:url, node:os).
9
- */
10
- import { spawnSync, spawn } from 'node:child_process';
11
- import { readFileSync, writeFileSync, renameSync } from 'node:fs';
12
- import { homedir } from 'node:os';
13
- import { join, dirname } from 'node:path';
14
- import { fileURLToPath } from 'node:url';
15
- import { prepShim } from './prep-shim.mjs';
16
- import { prepPatch } from './prep-patch.mjs';
17
- import { resolveBun, installBunViaNpm } from './resolve-bun.mjs';
18
-
19
- const scriptDir = dirname(fileURLToPath(import.meta.url));
20
- const pluginRoot = dirname(scriptDir);
21
- const isWin = process.platform === 'win32';
22
-
23
- // ---------------------------------------------------------------------------
24
- // Main
25
- // ---------------------------------------------------------------------------
26
- let bunPath = resolveBun(pluginRoot);
27
-
28
- if (!bunPath) {
29
- installBunViaNpm(pluginRoot);
30
- bunPath = resolveBun(pluginRoot);
31
- if (!bunPath) {
32
- process.stderr.write(
33
- '[bootstrap] bun still not found after npm install.\n' +
34
- '[bootstrap] Please install bun manually: https://bun.sh\n'
35
- );
36
- process.exit(1);
37
- }
38
- }
39
-
40
- // ---------------------------------------------------------------------------
41
- // Stage the prebuilt shim into target/release and normalize hooks.json for
42
- // the current OS. Best-effort: failure leaves shim absent and hooks fail-open.
43
- // ---------------------------------------------------------------------------
44
- try { prepShim(pluginRoot); } catch (err) {
45
- process.stderr.write(`[bootstrap] prep-shim skipped: ${err?.message || err}\n`);
46
- }
47
- // Fire-and-forget: warms the patch binary cache so the first apply_patch
48
- // dispatch hits a ready file instead of paying the 2-10s download latency
49
- // (sync fast-path in patch.mjs would otherwise throw before the dispatch
50
- // async path's fetch runs).
51
- try { prepPatch(pluginRoot); } catch (err) {
52
- process.stderr.write(`[bootstrap] prep-patch skipped: ${err?.message || err}\n`);
53
- }
54
-
55
- function positivePid(value) {
56
- const pid = Number(value);
57
- return Number.isFinite(pid) && pid > 0 ? pid : null;
58
- }
59
-
60
- function detectOwnerHostPid() {
61
- if (isWin) {
62
- try {
63
- const ps = [
64
- '$procs = Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name;',
65
- '$map = @{};',
66
- 'foreach ($p in $procs) { $map[[int]$p.ProcessId] = $p }',
67
- `$cur = ${Number(process.pid)};`,
68
- 'for ($i = 0; $i -lt 16; $i++) {',
69
- ' $p = $map[$cur]; if ($null -eq $p) { break }',
70
- " if ($p.Name -ieq 'claude.exe' -or $p.Name -ieq 'claude') { [Console]::Write($p.ProcessId); exit 0 }",
71
- ' $cur = [int]$p.ParentProcessId',
72
- '}',
73
- ].join(' ');
74
- const r = spawnSync('powershell.exe', ['-NoProfile', '-Command', ps], {
75
- encoding: 'utf8',
76
- timeout: 1500,
77
- windowsHide: true,
78
- });
79
- const pid = positivePid(String(r.stdout || '').trim());
80
- if (pid) return String(pid);
81
- } catch {}
82
- }
83
- return String(positivePid(process.ppid) || positivePid(process.env.MIXDOG_OWNER_HOST_PID) || '');
84
- }
85
-
86
- const ownerHostPid = detectOwnerHostPid();
87
-
88
- // ---------------------------------------------------------------------------
89
- // Proxy into run-mcp.mjs via the resolved bun binary.
90
- // ---------------------------------------------------------------------------
91
- const child = spawn(bunPath, [join(pluginRoot, 'scripts', 'run-mcp.mjs')], {
92
- stdio: 'inherit',
93
- windowsHide: true,
94
- env: {
95
- ...process.env,
96
- BUN_EXEC_PATH: bunPath,
97
- MIXDOG_OWNER_HOST_PID: ownerHostPid,
98
- },
99
- });
100
-
101
- child.on('error', (err) => {
102
- process.stderr.write(`[bootstrap] failed to start run-mcp.mjs: ${err.message}\n`);
103
- process.exit(1);
104
- });
105
-
106
- child.on('exit', (code) => {
107
- process.exit(code ?? 0);
108
- });
109
-
110
- function forward(sig) {
111
- try { child.kill(sig); } catch { /* child already gone */ }
112
- }
113
- process.on('SIGTERM', () => forward('SIGTERM'));
114
- process.on('SIGINT', () => forward('SIGINT'));
115
-
116
- // stdin EOF / close = Claude Code (parent) disconnected its end of stdio.
117
- // run-mcp.mjs handles this in its own layer, but if a race leaves the bun
118
- // child unable to fire `exit` (sudden stdio break, abnormal bun termination),
119
- // bootstrap.mjs would otherwise wait forever, accumulating wrapper-layer
120
- // zombies across reconnects. Force teardown: SIGTERM child, give it 2s,
121
- // then SIGKILL + self-exit. Mirrors run-mcp.mjs stdin EOF invariant
122
- // (commit 754ab7d) at the bootstrap layer.
123
- process.stdin.on('close', () => {
124
- try { child.kill('SIGTERM'); } catch {}
125
- setTimeout(() => {
126
- try { child.kill('SIGKILL'); } catch {}
127
- process.exit(0);
128
- }, 2000).unref();
129
- });
130
- process.stdin.on('error', () => process.exit(0));
@@ -1,308 +0,0 @@
1
- #!/usr/bin/env node
2
- // bridge-unify-smoke.mjs — arg-routing checks for the unified `bridge` tool.
3
- //
4
- // Exercises the type-discriminator routing and tag-registry guard rails on the
5
- // fast-fail branches (no provider/model needed): list on an empty store,
6
- // send/close against an unknown tag, spawn missing role, and the type-less
7
- // (default spawn) backward-compat path. Does NOT spin a real worker.
8
-
9
- import { tmpdir } from 'os';
10
- import { join, dirname } from 'path';
11
- import { fileURLToPath } from 'url';
12
- import { mkdirSync, writeFileSync, rmSync } from 'fs';
13
-
14
- const ROOT = join(dirname(fileURLToPath(import.meta.url)), '..');
15
- process.env.CLAUDE_PLUGIN_ROOT ||= ROOT;
16
- // MUST be unconditional (`=`, not `||=`): when the smoke runs inside a real
17
- // mixdog environment CLAUDE_PLUGIN_DATA already points at the LIVE plugin data
18
- // dir, so `||=` would write the synthetic `sess_<pid>_<scenario>_<ts>` fixtures
19
- // straight into the production session store. Those fixtures (provider/model
20
- // `none`, closed:false, no `owner`) slip past both sweeps and linger forever in
21
- // `bridge list` / the statusline. Force an isolated per-pid temp dir, always.
22
- const _SMOKE_DATA_DIR = join(tmpdir(), `mixdog-bridge-unify-smoke-${process.pid}`);
23
- process.env.CLAUDE_PLUGIN_DATA = _SMOKE_DATA_DIR;
24
- process.env.MIXDOG_SKIP_USER_DATA_BACKUP = '1';
25
-
26
- const { handleToolCall } = await import('../src/agent/index.mjs');
27
- // updateSessionStage drives the in-memory runtime stage the send busy-guard
28
- // consults when session.status is still unset — exercised by the startup-window
29
- // race case (#1) below.
30
- const { updateSessionStage, drainPendingMessages } = await import('../src/agent/orchestrator/session/manager.mjs');
31
- // initProviders lets the cold-tag respawn case register a network-free dummy
32
- // provider so the spawn path passes its synchronous provider check and returns
33
- // a detached jobId (the real API call is deferred to the IIFE, never reached).
34
- const { initProviders } = await import('../src/agent/orchestrator/providers/registry.mjs');
35
-
36
- // Write a minimal on-disk session fixture so the unified `bridge type=send`
37
- // path (which resolves a raw sess_ id via getSession/loadSession) can be
38
- // exercised without spinning a real provider-backed worker. The send handler's
39
- // busy-guard reads session.status BEFORE calling askSession, so a fixture is
40
- // enough to assert the resumability guard rails (bugs #1/#2).
41
- const _sessionsDir = join(process.env.CLAUDE_PLUGIN_DATA, 'sessions');
42
- function writeSessionFixture(id, status) {
43
- mkdirSync(_sessionsDir, { recursive: true });
44
- const now = Date.now();
45
- const session = {
46
- id,
47
- status,
48
- closed: false,
49
- generation: 0,
50
- provider: 'none', // unknown provider → askSession fails fast (no hang)
51
- model: 'none',
52
- messages: [],
53
- tools: [],
54
- createdAt: now,
55
- updatedAt: now,
56
- };
57
- writeFileSync(join(_sessionsDir, `${id}.json`), JSON.stringify(session));
58
- return id;
59
- }
60
-
61
- let passed = 0;
62
- let failed = 0;
63
- function check(name, fn) {
64
- return Promise.resolve()
65
- .then(fn)
66
- .then(() => { passed++; console.log(` PASS ${name}`); })
67
- .catch((e) => { failed++; console.log(` FAIL ${name}\n ${e?.message || e}`); });
68
- }
69
-
70
- // Tool results are MCP content blocks: { content: [{ type:'text', text }], isError? }.
71
- function textOf(res) {
72
- if (res && Array.isArray(res.content)) {
73
- return res.content.map((c) => (c && typeof c.text === 'string' ? c.text : '')).join('');
74
- }
75
- return typeof res === 'string' ? res : JSON.stringify(res);
76
- }
77
- function assert(cond, msg) { if (!cond) throw new Error(msg || 'assertion failed'); }
78
-
79
- await check('type=list on empty store → "No active sessions."', async () => {
80
- const res = await handleToolCall('bridge', { type: 'list' }, {});
81
- const t = textOf(res);
82
- assert(/No active sessions/.test(t), `unexpected: ${t}`);
83
- });
84
-
85
- await check('type=send with unknown tag → clear error', async () => {
86
- const res = await handleToolCall('bridge', { type: 'send', tag: 'nope1', message: 'hi' }, {});
87
- const t = textOf(res);
88
- assert(res.isError === true, 'expected isError');
89
- assert(/not found \(may have been reaped after 5min\) — include a role to respawn fresh/.test(t), `unexpected: ${t}`);
90
- });
91
-
92
- await check('type=send unknown tag WITH role → respawns fresh (jobId)', async () => {
93
- // Register a network-free dummy provider so the spawn path passes its
94
- // synchronous provider check. The bench escape hatch (provider+model) builds
95
- // an ad-hoc preset so no user-workflow.json role mapping is needed. spawn
96
- // returns the jobId synchronously; the real API call (which would fail on the
97
- // dummy key) is deferred to the detached IIFE and never asserted here.
98
- await initProviders({ anthropic: { enabled: true, apiKey: 'dummy-smoke-key' } });
99
- const res = await handleToolCall('bridge', { type: 'send', tag: 'respawn1', role: 'worker', provider: 'anthropic', model: 'claude-3-haiku', message: 'hi' }, {});
100
- const t = textOf(res);
101
- assert(res.isError !== true, `expected success, got: ${t}`);
102
- assert(/"jobId"\s*:\s*"bridge_/.test(t), `expected a jobId, got: ${t}`);
103
- });
104
-
105
- await check('type=send missing message → error', async () => {
106
- const res = await handleToolCall('bridge', { type: 'send', tag: 'x' }, {});
107
- assert(res.isError === true, 'expected isError');
108
- });
109
-
110
- await check('type=close with unknown tag → error', async () => {
111
- const res = await handleToolCall('bridge', { type: 'close', tag: 'nope2' }, {});
112
- const t = textOf(res);
113
- assert(res.isError === true, 'expected isError');
114
- assert(/does not map to a live session/.test(t), `unexpected: ${t}`);
115
- });
116
-
117
- await check('type=close missing tag → error', async () => {
118
- const res = await handleToolCall('bridge', { type: 'close' }, {});
119
- assert(res.isError === true, 'expected isError');
120
- });
121
-
122
- await check('unknown type → error', async () => {
123
- const res = await handleToolCall('bridge', { type: 'bogus', role: 'worker' }, {});
124
- const t = textOf(res);
125
- assert(res.isError === true, 'expected isError');
126
- assert(/unknown type/.test(t), `unexpected: ${t}`);
127
- });
128
-
129
- await check('default (no type) + no role → spawn path "role is required"', async () => {
130
- const res = await handleToolCall('bridge', {}, {});
131
- const t = textOf(res);
132
- assert(res.isError === true, 'expected isError');
133
- assert(/role is required/.test(t), `unexpected: ${t}`);
134
- });
135
-
136
- await check('type=spawn + role but no prompt/message → prompt resolution error', async () => {
137
- const res = await handleToolCall('bridge', { type: 'spawn', role: 'nonexistent-role-xyz' }, {});
138
- const t = textOf(res);
139
- assert(res.isError === true, 'expected isError');
140
- // Either prompt-missing or role-not-found surfaces — both prove routing into spawn.
141
- assert(/prompt|role|provide exactly one/.test(t), `unexpected: ${t}`);
142
- });
143
-
144
- // --- Resumability guard rails (bugs #1/#2) ---------------------------------
145
- // These drive the unified `bridge type=send` path against an on-disk session
146
- // fixture addressed by raw sess_ id (the tag→sessionId registry is module
147
- // private; raw-id passthrough exercises the same handler code).
148
-
149
- await check('type=send while worker running → queued (not rejected)', async () => {
150
- // pendingMessages pattern: a send during the in-flight turn must NOT become
151
- // the first user message and must NOT be rejected — it enqueues and drains
152
- // after the current turn. A non-terminal status trips the queue branch
153
- // before askSession.
154
- const sid = writeSessionFixture(`sess_${process.pid}_running_${Date.now()}`, 'running');
155
- const res = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'race' }, {});
156
- const t = textOf(res);
157
- assert(res.isError !== true, `expected success (queued), got: ${t}`);
158
- assert(/"queued"\s*:\s*true/.test(t), `expected queued:true, got: ${t}`);
159
- assert(!/still starting|retry shortly/.test(t), `must not reject a busy send anymore: ${t}`);
160
- // The message must actually be parked on the pending queue.
161
- const drained = drainPendingMessages(sid);
162
- assert(drained.length === 1 && drained[0] === 'race', `expected ['race'] queued, got: ${JSON.stringify(drained)}`);
163
- });
164
-
165
- await check('type=send to non-terminal (connecting) status → queued', async () => {
166
- // Same branch, mid-startup stage label — queues instead of rejecting. Since
167
- // queuing preserves order, the connecting/startup window can queue safely:
168
- // the queued send runs after the worker's first turn.
169
- const sid = writeSessionFixture(`sess_${process.pid}_connecting_${Date.now()}`, 'connecting');
170
- const res = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'race' }, {});
171
- const t = textOf(res);
172
- assert(res.isError !== true, `expected success (queued), got: ${t}`);
173
- assert(/"queued"\s*:\s*true/.test(t), `expected queued:true, got: ${t}`);
174
- assert(!/still starting|retry shortly/.test(t), `must not reject a connecting send anymore: ${t}`);
175
- });
176
-
177
- await check('type=send to idle session → returns a jobId synchronously (detached, no inline response)', async () => {
178
- // Bug #1 + async detach: once the initial turn has settled to a terminal
179
- // status the send must NOT be rejected by the busy-guard — it passes the
180
- // guard, cancels the pending 120s reap, and (now) returns IMMEDIATELY with a
181
- // detached jobId instead of blocking on askSession. The provider failure on
182
- // the dummy session now surfaces asynchronously via notifyFn, NOT in this
183
- // synchronous return value.
184
- const sid = writeSessionFixture(`sess_${process.pid}_idle_${Date.now()}`, 'idle');
185
- const res = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'resume' }, {});
186
- const t = textOf(res);
187
- assert(res.isError !== true, `expected a synchronous jobId return (not an error), got: ${t}`);
188
- // Must be the immediate detached return, NOT the busy-guard.
189
- assert(!/still starting|retry shortly/.test(t), `guard wrongly rejected an idle resume: ${t}`);
190
- assert(/bridge_\d+_/.test(t), `expected a detached jobId in the sync return, got: ${t}`);
191
- assert(/"detached":\s*true/.test(t), `expected detached:true in the sync return, got: ${t}`);
192
- // The resume reply is delivered later via dispatch_result/notifyFn — the
193
- // synchronous return must NOT carry an inline response/usage payload.
194
- assert(!/"response"/.test(t), `send must not return an inline response now: ${t}`);
195
- });
196
-
197
- await check('type=send during startup window (tag bound, status not yet running) → queued', async () => {
198
- // Bug #1 (round 2): spawn binds the tag and retry rebinds it BEFORE the
199
- // session status is written 'running' / the runtime entry reaches askSession.
200
- // A send landing in that gap must NOT slip through as the first user turn.
201
- // The runtime stage is marked 'connecting' at the moment the tag is bound, so
202
- // the queue branch's active-status set catches the window even though
203
- // session.status is still unwritten — the send is QUEUED and drained after
204
- // the worker's first turn, preserving order. Simulate by writing a fixture
205
- // with NO status, then setting the runtime stage to 'connecting' the way the
206
- // spawn/retry bind now does.
207
- const sid = writeSessionFixture(`sess_${process.pid}_startwin_${Date.now()}`, undefined);
208
- updateSessionStage(sid, 'connecting');
209
- const res = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'race' }, {});
210
- const t = textOf(res);
211
- assert(res.isError !== true, `expected success (queued), got: ${t}`);
212
- assert(/"queued"\s*:\s*true/.test(t), `expected queued:true, got: ${t}`);
213
- assert(!/still starting|retry shortly/.test(t), `startup-window send must queue, not reject: ${t}`);
214
- });
215
-
216
- await check('failed resume re-arms reap → session stays usable for a follow-up send', async () => {
217
- // Bug #2 (round 2): send cancels the pending reap before resuming, but the
218
- // reap was previously re-armed only on the success path — a failed resumed
219
- // turn left the reap canceled, so the idle/error session was never terminally
220
- // reaped. The fix re-arms _scheduleBridgeReap in a finally (idempotent). The
221
- // reap timer is module-private, so assert the observable consequence: after a
222
- // FIRST resume that fails on the dummy provider, a SECOND send to the same
223
- // session still passes the busy-guard and reaches askSession (the failed
224
- // resume left the session addressable + the reap re-armed, not orphaned).
225
- const sid = writeSessionFixture(`sess_${process.pid}_failresume_${Date.now()}`, 'idle');
226
- const first = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'resume-1' }, {});
227
- const t1 = textOf(first);
228
- assert(first.isError !== true, `expected first resume to detach (jobId), got: ${t1}`);
229
- assert(!/still starting|retry shortly/.test(t1), `first resume wrongly guard-rejected: ${t1}`);
230
- assert(/bridge_\d+_/.test(t1), `expected first resume jobId, got: ${t1}`);
231
- // The detached resume fails on the dummy provider in the background and
232
- // re-arms the reap in its finally. Yield so that async tail can settle.
233
- await new Promise((r) => setTimeout(r, 50));
234
- // Re-mark idle (real path: failed turn flips status to 'idle'/'error'; the
235
- // fixture write here restores a terminal status so the second send is guarded
236
- // the same way) and re-send.
237
- writeSessionFixture(sid, 'idle');
238
- const second = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'resume-2' }, {});
239
- const t2 = textOf(second);
240
- assert(second.isError !== true, `expected second resume to detach (jobId), got: ${t2}`);
241
- assert(!/still starting|retry shortly/.test(t2), `second resume wrongly guard-rejected (session orphaned by failed resume?): ${t2}`);
242
- assert(/bridge_\d+_/.test(t2), `expected second resume jobId (session addressable + reap re-armed, not orphaned), got: ${t2}`);
243
- });
244
-
245
- await check('type=send in post-askSession/pre-idle gap (persisted running, runtime done) → NOT stranded', async () => {
246
- // Bug #2: spawn keeps persisted status 'running' until AFTER the completion
247
- // emit (updateSessionStatus(idle) runs OUTSIDE askSession, past the drain
248
- // point). A send landing after askSession returned but before status flips
249
- // to 'idle' used to see persisted 'running' and ENQUEUE — but askSession had
250
- // already drained and returned, so nothing consumed it: stranded + out of
251
- // order. The busy-guard now prefers the RUNTIME terminal stage over the
252
- // stale persisted 'running', so the send does a fresh detached resume
253
- // instead of queuing into the void. Simulate: persisted status 'running'
254
- // (not yet flipped), runtime stage 'done' (markSessionDone ran before the
255
- // turn-loop drain).
256
- const sid = writeSessionFixture(`sess_${process.pid}_gap_${Date.now()}`, 'running');
257
- updateSessionStage(sid, 'done');
258
- const res = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'gap' }, {});
259
- const t = textOf(res);
260
- assert(res.isError !== true, `expected a detached resume, got: ${t}`);
261
- assert(!/"queued"\s*:\s*true/.test(t), `must NOT enqueue in the post-askSession/pre-idle gap (would strand): ${t}`);
262
- assert(/bridge_\d+_/.test(t), `expected a detached jobId (fresh resume), got: ${t}`);
263
- // Nothing parked on the queue — proves the message was not stranded.
264
- assert(drainPendingMessages(sid).length === 0, 'queue must be empty (message not stranded)');
265
- });
266
-
267
- await check('type=send raw MISSING sess_ id WITH role → respawns fresh (jobId), not a dead-session resume', async () => {
268
- // Bug #5: a raw `sess_...` id that does NOT resolve to a LIVE session must
269
- // fall into the reaped/unknown branch — with a role present, that means a
270
- // fresh respawn (spawn path), NOT an async askSession launched against a
271
- // missing/closed session. The id below is never written to disk, so
272
- // _isLiveSession() rejects it and the precheck flips bridgeType→spawn.
273
- await initProviders({ anthropic: { enabled: true, apiKey: 'dummy-smoke-key' } });
274
- const missing = `sess_${process.pid}_ghost_${Date.now()}`;
275
- const res = await handleToolCall('bridge', { type: 'send', sessionId: missing, role: 'worker', provider: 'anthropic', model: 'claude-3-haiku', message: 'hi' }, {});
276
- const t = textOf(res);
277
- assert(res.isError !== true, `expected a fresh respawn, got: ${t}`);
278
- assert(/"jobId"\s*:\s*"bridge_/.test(t), `expected a jobId (fresh spawn), got: ${t}`);
279
- // A fresh spawn allocates a NEW session id — it must not echo the dead id.
280
- assert(!t.includes(missing), `respawn must not resume the missing/dead session id: ${t}`);
281
- });
282
-
283
- await check('multiple sends to a running worker → queued FIFO, drained in order', async () => {
284
- // Order preservation: two sends landing during the same in-flight turn must
285
- // queue in arrival order and drain in that order (the askSession turn loop
286
- // shifts them off the front as follow-up turns). queueDepth reflects the
287
- // growing queue.
288
- const sid = writeSessionFixture(`sess_${process.pid}_fifo_${Date.now()}`, 'running');
289
- const r1 = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'first' }, {});
290
- const r2 = await handleToolCall('bridge', { type: 'send', sessionId: sid, message: 'second' }, {});
291
- const t1 = textOf(r1); const t2 = textOf(r2);
292
- assert(/"queued"\s*:\s*true/.test(t1) && /"queued"\s*:\s*true/.test(t2), `both sends must queue, got: ${t1} | ${t2}`);
293
- assert(/"queueDepth"\s*:\s*1/.test(t1), `first queued send should report queueDepth 1, got: ${t1}`);
294
- assert(/"queueDepth"\s*:\s*2/.test(t2), `second queued send should report queueDepth 2, got: ${t2}`);
295
- // Drain mirrors what askSession does after each turn — FIFO order.
296
- const drained = drainPendingMessages(sid);
297
- assert(drained.length === 2 && drained[0] === 'first' && drained[1] === 'second',
298
- `expected ['first','second'] in order, got: ${JSON.stringify(drained)}`);
299
- // Queue is emptied after drain.
300
- assert(drainPendingMessages(sid).length === 0, 'queue must be empty after drain');
301
- });
302
-
303
- console.log(`\nbridge-unify-smoke: ${passed} passed, ${failed} failed`);
304
- // Remove the isolated data dir so no fixture survives the run. Belt-and-braces
305
- // with the unconditional CLAUDE_PLUGIN_DATA override above: even the isolated
306
- // temp store should not accumulate per-pid dirs across repeated smoke runs.
307
- try { rmSync(_SMOKE_DATA_DIR, { recursive: true, force: true }); } catch { /* best-effort */ }
308
- process.exit(failed === 0 ? 0 : 1);