mixdog 0.7.18 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (847) 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/session-context-bench.mjs +172 -0
  10. package/scripts/smoke-loop-report.mjs +221 -0
  11. package/scripts/smoke-loop.mjs +201 -0
  12. package/scripts/smoke.mjs +113 -0
  13. package/scripts/tool-failures.mjs +143 -0
  14. package/scripts/tool-smoke.mjs +452 -0
  15. package/src/agents/debugger/AGENT.md +3 -0
  16. package/src/agents/debugger/agent.json +6 -0
  17. package/src/agents/explore/AGENT.md +4 -0
  18. package/src/agents/explore/agent.json +6 -0
  19. package/src/agents/heavy-worker/AGENT.md +3 -0
  20. package/src/agents/heavy-worker/agent.json +6 -0
  21. package/src/agents/maintainer/AGENT.md +3 -0
  22. package/src/agents/maintainer/agent.json +6 -0
  23. package/src/agents/reviewer/AGENT.md +3 -0
  24. package/src/agents/reviewer/agent.json +6 -0
  25. package/src/agents/scheduler-task.md +3 -0
  26. package/src/agents/web-researcher/AGENT.md +3 -0
  27. package/src/agents/web-researcher/agent.json +6 -0
  28. package/src/agents/webhook-handler.md +3 -0
  29. package/src/agents/worker/AGENT.md +3 -0
  30. package/src/agents/worker/agent.json +6 -0
  31. package/src/app.mjs +90 -0
  32. package/src/cli.mjs +11 -0
  33. package/src/defaults/hidden-roles.json +72 -0
  34. package/src/defaults/mixdog-config.template.json +15 -0
  35. package/src/hooks/lib/permission-evaluator.cjs +488 -0
  36. package/src/hooks/lib/settings-loader.cjs +112 -0
  37. package/src/lib/keychain-cjs.cjs +332 -0
  38. package/src/lib/plugin-paths.cjs +28 -0
  39. package/src/lib/rules-builder.cjs +315 -0
  40. package/src/mixdog-session-runtime.mjs +3813 -0
  41. package/src/output-styles/default.md +38 -0
  42. package/src/output-styles/extreme-simple.md +17 -0
  43. package/src/output-styles/simple.md +17 -0
  44. package/src/repl.mjs +330 -0
  45. package/src/rules/bridge/00-common.md +5 -0
  46. package/src/rules/bridge/20-skip-protocol.md +11 -0
  47. package/src/rules/bridge/30-explorer.md +4 -0
  48. package/src/rules/bridge/40-cycle1-agent.md +28 -0
  49. package/src/rules/bridge/41-cycle2-agent.md +59 -0
  50. package/src/rules/lead/00-tool-lead.md +5 -0
  51. package/src/rules/lead/01-general.md +5 -0
  52. package/src/rules/lead/02-channels.md +3 -0
  53. package/src/rules/lead/04-workflow.md +12 -0
  54. package/src/rules/shared/00-language.md +3 -0
  55. package/src/rules/shared/01-tool.md +3 -0
  56. package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
  57. package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
  58. package/src/runtime/agent/orchestrator/config.mjs +446 -0
  59. package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
  60. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
  61. package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
  62. package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
  63. package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
  64. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
  65. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
  66. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
  67. package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
  68. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
  69. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
  70. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
  71. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
  72. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
  73. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
  76. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
  77. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
  78. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
  79. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
  80. package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
  81. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
  82. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
  83. package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
  84. package/src/runtime/agent/orchestrator/session/cache/post-edit-marks.mjs +42 -0
  85. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  86. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
  87. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
  88. package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
  89. package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
  90. package/src/runtime/agent/orchestrator/session/loop.mjs +2269 -0
  91. package/src/runtime/agent/orchestrator/session/manager.mjs +2972 -0
  92. package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
  93. package/src/runtime/agent/orchestrator/session/store.mjs +870 -0
  94. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  95. package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
  96. package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
  97. package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
  98. package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
  99. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
  100. package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +171 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
  102. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
  103. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
  105. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
  106. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
  107. package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
  108. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
  109. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  110. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
  111. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
  112. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
  113. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  114. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
  115. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
  116. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
  118. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
  119. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
  120. package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
  121. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  122. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
  123. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  124. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
  125. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
  126. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
  127. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
  128. package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
  129. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
  130. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
  131. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
  132. package/src/runtime/channels/backends/discord.mjs +781 -0
  133. package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
  134. package/src/runtime/channels/index.mjs +3309 -0
  135. package/src/runtime/channels/lib/config.mjs +285 -0
  136. package/src/runtime/channels/lib/drop-trace.mjs +71 -0
  137. package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
  138. package/src/runtime/channels/lib/holidays.mjs +138 -0
  139. package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
  140. package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
  141. package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
  142. package/src/runtime/channels/lib/scheduler.mjs +710 -0
  143. package/src/runtime/channels/lib/session-discovery.mjs +102 -0
  144. package/src/runtime/channels/lib/state-file.mjs +68 -0
  145. package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
  146. package/src/runtime/channels/lib/tool-format.mjs +122 -0
  147. package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
  148. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
  149. package/src/runtime/channels/lib/webhook.mjs +1288 -0
  150. package/src/runtime/channels/tool-defs.mjs +177 -0
  151. package/src/runtime/lib/keychain-cjs.cjs +289 -0
  152. package/src/runtime/memory/data/runtime-manifest.json +40 -0
  153. package/src/runtime/memory/index.mjs +3706 -0
  154. package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
  155. package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
  156. package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
  157. package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
  158. package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
  159. package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
  160. package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
  161. package/src/runtime/memory/lib/memory-embed.mjs +300 -0
  162. package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
  163. package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
  164. package/src/runtime/memory/lib/memory.mjs +418 -0
  165. package/src/runtime/memory/lib/pg/adapter.mjs +328 -0
  166. package/src/runtime/memory/lib/pg/process.mjs +366 -0
  167. package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
  168. package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
  169. package/src/runtime/memory/lib/trace-store.mjs +734 -0
  170. package/src/runtime/memory/tool-defs.mjs +79 -0
  171. package/src/runtime/search/index.mjs +925 -0
  172. package/src/runtime/search/lib/config.mjs +61 -0
  173. package/src/runtime/search/lib/web-tools.mjs +1278 -0
  174. package/src/runtime/search/tool-defs.mjs +64 -0
  175. package/src/runtime/shared/atomic-file.mjs +435 -0
  176. package/src/runtime/shared/background-tasks.mjs +376 -0
  177. package/src/runtime/shared/child-guardian.mjs +98 -0
  178. package/src/runtime/shared/config.mjs +393 -0
  179. package/src/runtime/shared/err-text.mjs +121 -0
  180. package/src/runtime/shared/launcher-control.mjs +259 -0
  181. package/src/runtime/shared/llm/http-agent.mjs +129 -0
  182. package/src/runtime/shared/open-url.mjs +37 -0
  183. package/src/runtime/shared/plugin-paths.mjs +25 -0
  184. package/src/runtime/shared/process-shutdown.mjs +147 -0
  185. package/src/runtime/shared/schedules-store.mjs +70 -0
  186. package/src/runtime/shared/tool-execution-contract.mjs +104 -0
  187. package/src/runtime/shared/tool-surface.mjs +947 -0
  188. package/src/runtime/shared/user-cwd.mjs +221 -0
  189. package/src/runtime/shared/user-data-guard.mjs +232 -0
  190. package/src/runtime/shared/workspace-router.mjs +259 -0
  191. package/src/standalone/bridge-tool.mjs +1414 -0
  192. package/src/standalone/channel-admin.mjs +366 -0
  193. package/src/standalone/channel-worker-preload.cjs +3 -0
  194. package/src/standalone/channel-worker.mjs +353 -0
  195. package/src/standalone/explore-tool.mjs +233 -0
  196. package/src/standalone/hook-bus.mjs +246 -0
  197. package/src/standalone/plugin-admin.mjs +247 -0
  198. package/src/standalone/provider-admin.mjs +338 -0
  199. package/src/standalone/seeds.mjs +94 -0
  200. package/src/standalone/usage-dashboard.mjs +510 -0
  201. package/src/tui/App.jsx +5446 -0
  202. package/src/tui/components/AnsiText.jsx +199 -0
  203. package/src/tui/components/ContextPanel.jsx +265 -0
  204. package/src/tui/components/Markdown.jsx +205 -0
  205. package/src/tui/components/MarkdownTable.jsx +204 -0
  206. package/src/tui/components/Message.jsx +103 -0
  207. package/src/tui/components/Picker.jsx +317 -0
  208. package/src/tui/components/PromptInput.jsx +584 -0
  209. package/src/tui/components/QueuedCommands.jsx +47 -0
  210. package/src/tui/components/SlashCommandPalette.jsx +114 -0
  211. package/src/tui/components/Spinner.jsx +317 -0
  212. package/src/tui/components/StatusLine.jsx +87 -0
  213. package/src/tui/components/TextEntryPanel.jsx +323 -0
  214. package/src/tui/components/ToolExecution.jsx +791 -0
  215. package/src/tui/components/TurnDone.jsx +78 -0
  216. package/src/tui/components/UsagePanel.jsx +331 -0
  217. package/src/tui/dist/index.mjs +12420 -0
  218. package/src/tui/engine.mjs +2410 -0
  219. package/src/tui/figures.mjs +50 -0
  220. package/src/tui/hooks/useEngine.mjs +16 -0
  221. package/src/tui/index.jsx +254 -0
  222. package/src/tui/input-editing.mjs +242 -0
  223. package/src/tui/markdown/format-token.mjs +194 -0
  224. package/src/tui/paste-attachments.mjs +198 -0
  225. package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
  226. package/src/tui/spinner-verbs.mjs +45 -0
  227. package/src/tui/theme.mjs +67 -0
  228. package/src/tui/time-format.mjs +53 -0
  229. package/src/ui/ansi.mjs +115 -0
  230. package/src/ui/markdown.mjs +195 -0
  231. package/src/ui/statusline.mjs +730 -0
  232. package/src/ui/tool-card.mjs +99 -0
  233. package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
  234. package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
  235. package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
  236. package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
  237. package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
  238. package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
  239. package/src/workflows/default/WORKFLOW.md +7 -0
  240. package/src/workflows/default/workflow.json +14 -0
  241. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  242. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  243. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  244. package/vendor/ink/build/colorize.d.ts +3 -0
  245. package/vendor/ink/build/colorize.js +48 -0
  246. package/vendor/ink/build/colorize.js.map +1 -0
  247. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  248. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  249. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  250. package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
  251. package/vendor/ink/build/components/AnimationContext.js +13 -0
  252. package/vendor/ink/build/components/AnimationContext.js.map +1 -0
  253. package/vendor/ink/build/components/App.d.ts +24 -0
  254. package/vendor/ink/build/components/App.js +554 -0
  255. package/vendor/ink/build/components/App.js.map +1 -0
  256. package/vendor/ink/build/components/AppContext.d.ts +80 -0
  257. package/vendor/ink/build/components/AppContext.js +25 -0
  258. package/vendor/ink/build/components/AppContext.js.map +1 -0
  259. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  260. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  261. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  262. package/vendor/ink/build/components/Box.d.ts +130 -0
  263. package/vendor/ink/build/components/Box.js +34 -0
  264. package/vendor/ink/build/components/Box.js.map +1 -0
  265. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  266. package/vendor/ink/build/components/CursorContext.js +8 -0
  267. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  268. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  269. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  270. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  271. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  272. package/vendor/ink/build/components/ErrorOverview.js +90 -0
  273. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  274. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  275. package/vendor/ink/build/components/FocusContext.js +17 -0
  276. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  277. package/vendor/ink/build/components/Newline.d.ts +13 -0
  278. package/vendor/ink/build/components/Newline.js +8 -0
  279. package/vendor/ink/build/components/Newline.js.map +1 -0
  280. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  281. package/vendor/ink/build/components/Spacer.js +11 -0
  282. package/vendor/ink/build/components/Spacer.js.map +1 -0
  283. package/vendor/ink/build/components/Static.d.ts +24 -0
  284. package/vendor/ink/build/components/Static.js +28 -0
  285. package/vendor/ink/build/components/Static.js.map +1 -0
  286. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  287. package/vendor/ink/build/components/StderrContext.js +13 -0
  288. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  289. package/vendor/ink/build/components/StdinContext.d.ts +28 -0
  290. package/vendor/ink/build/components/StdinContext.js +20 -0
  291. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  292. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  293. package/vendor/ink/build/components/StdoutContext.js +13 -0
  294. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  295. package/vendor/ink/build/components/Text.d.ts +55 -0
  296. package/vendor/ink/build/components/Text.js +50 -0
  297. package/vendor/ink/build/components/Text.js.map +1 -0
  298. package/vendor/ink/build/components/Transform.d.ts +16 -0
  299. package/vendor/ink/build/components/Transform.js +15 -0
  300. package/vendor/ink/build/components/Transform.js.map +1 -0
  301. package/vendor/ink/build/cursor-helpers.d.ts +39 -0
  302. package/vendor/ink/build/cursor-helpers.js +62 -0
  303. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  304. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  305. package/vendor/ink/build/devtools-window-polyfill.js +68 -0
  306. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  307. package/vendor/ink/build/devtools.d.ts +1 -0
  308. package/vendor/ink/build/devtools.js +36 -0
  309. package/vendor/ink/build/devtools.js.map +1 -0
  310. package/vendor/ink/build/dom.d.ts +62 -0
  311. package/vendor/ink/build/dom.js +143 -0
  312. package/vendor/ink/build/dom.js.map +1 -0
  313. package/vendor/ink/build/get-max-width.d.ts +3 -0
  314. package/vendor/ink/build/get-max-width.js +10 -0
  315. package/vendor/ink/build/get-max-width.js.map +1 -0
  316. package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
  317. package/vendor/ink/build/hooks/use-animation.js +87 -0
  318. package/vendor/ink/build/hooks/use-animation.js.map +1 -0
  319. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  320. package/vendor/ink/build/hooks/use-app.js +8 -0
  321. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  322. package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
  323. package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
  324. package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
  325. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  326. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  327. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  328. package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
  329. package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
  330. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  331. package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
  332. package/vendor/ink/build/hooks/use-focus.js +43 -0
  333. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  334. package/vendor/ink/build/hooks/use-input.d.ts +132 -0
  335. package/vendor/ink/build/hooks/use-input.js +126 -0
  336. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  337. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  338. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
  339. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  340. package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
  341. package/vendor/ink/build/hooks/use-paste.js +62 -0
  342. package/vendor/ink/build/hooks/use-paste.js.map +1 -0
  343. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  344. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  345. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  346. package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
  347. package/vendor/ink/build/hooks/use-stdin.js +9 -0
  348. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  349. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  350. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  351. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  352. package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
  353. package/vendor/ink/build/hooks/use-window-size.js +22 -0
  354. package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
  355. package/vendor/ink/build/index.d.ts +42 -0
  356. package/vendor/ink/build/index.js +24 -0
  357. package/vendor/ink/build/index.js.map +1 -0
  358. package/vendor/ink/build/ink.d.ts +146 -0
  359. package/vendor/ink/build/ink.js +1022 -0
  360. package/vendor/ink/build/ink.js.map +1 -0
  361. package/vendor/ink/build/input-parser.d.ts +10 -0
  362. package/vendor/ink/build/input-parser.js +194 -0
  363. package/vendor/ink/build/input-parser.js.map +1 -0
  364. package/vendor/ink/build/instances.d.ts +3 -0
  365. package/vendor/ink/build/instances.js +8 -0
  366. package/vendor/ink/build/instances.js.map +1 -0
  367. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  368. package/vendor/ink/build/kitty-keyboard.js +32 -0
  369. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  370. package/vendor/ink/build/log-update.d.ts +20 -0
  371. package/vendor/ink/build/log-update.js +261 -0
  372. package/vendor/ink/build/log-update.js.map +1 -0
  373. package/vendor/ink/build/measure-element.d.ts +20 -0
  374. package/vendor/ink/build/measure-element.js +13 -0
  375. package/vendor/ink/build/measure-element.js.map +1 -0
  376. package/vendor/ink/build/measure-text.d.ts +6 -0
  377. package/vendor/ink/build/measure-text.js +21 -0
  378. package/vendor/ink/build/measure-text.js.map +1 -0
  379. package/vendor/ink/build/output.d.ts +35 -0
  380. package/vendor/ink/build/output.js +328 -0
  381. package/vendor/ink/build/output.js.map +1 -0
  382. package/vendor/ink/build/parse-keypress.d.ts +20 -0
  383. package/vendor/ink/build/parse-keypress.js +495 -0
  384. package/vendor/ink/build/parse-keypress.js.map +1 -0
  385. package/vendor/ink/build/reconciler.d.ts +4 -0
  386. package/vendor/ink/build/reconciler.js +306 -0
  387. package/vendor/ink/build/reconciler.js.map +1 -0
  388. package/vendor/ink/build/render-background.d.ts +4 -0
  389. package/vendor/ink/build/render-background.js +25 -0
  390. package/vendor/ink/build/render-background.js.map +1 -0
  391. package/vendor/ink/build/render-border.d.ts +4 -0
  392. package/vendor/ink/build/render-border.js +84 -0
  393. package/vendor/ink/build/render-border.js.map +1 -0
  394. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  395. package/vendor/ink/build/render-node-to-output.js +162 -0
  396. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  397. package/vendor/ink/build/render-to-string.d.ts +38 -0
  398. package/vendor/ink/build/render-to-string.js +116 -0
  399. package/vendor/ink/build/render-to-string.js.map +1 -0
  400. package/vendor/ink/build/render.d.ts +176 -0
  401. package/vendor/ink/build/render.js +71 -0
  402. package/vendor/ink/build/render.js.map +1 -0
  403. package/vendor/ink/build/renderer.d.ts +8 -0
  404. package/vendor/ink/build/renderer.js +64 -0
  405. package/vendor/ink/build/renderer.js.map +1 -0
  406. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  407. package/vendor/ink/build/sanitize-ansi.js +27 -0
  408. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  409. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  410. package/vendor/ink/build/squash-text-nodes.js +36 -0
  411. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  412. package/vendor/ink/build/styles.d.ts +302 -0
  413. package/vendor/ink/build/styles.js +303 -0
  414. package/vendor/ink/build/styles.js.map +1 -0
  415. package/vendor/ink/build/utils.d.ts +9 -0
  416. package/vendor/ink/build/utils.js +19 -0
  417. package/vendor/ink/build/utils.js.map +1 -0
  418. package/vendor/ink/build/wrap-text.d.ts +3 -0
  419. package/vendor/ink/build/wrap-text.js +38 -0
  420. package/vendor/ink/build/wrap-text.js.map +1 -0
  421. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  422. package/vendor/ink/build/write-synchronized.js +9 -0
  423. package/vendor/ink/build/write-synchronized.js.map +1 -0
  424. package/vendor/ink/license +10 -0
  425. package/vendor/ink/package.json +137 -0
  426. package/.claude-plugin/marketplace.json +0 -34
  427. package/.claude-plugin/plugin.json +0 -20
  428. package/.gitattributes +0 -34
  429. package/.mcp.json +0 -14
  430. package/ARCHITECTURE.md +0 -77
  431. package/CHANGELOG.md +0 -30
  432. package/CONTRIBUTING.md +0 -45
  433. package/DATA-FLOW.md +0 -79
  434. package/LICENSE +0 -21
  435. package/SECURITY.md +0 -138
  436. package/UNINSTALL.md +0 -115
  437. package/agents/maintenance.md +0 -5
  438. package/agents/memory-classification.md +0 -30
  439. package/agents/scheduler-task.md +0 -18
  440. package/agents/webhook-handler.md +0 -27
  441. package/agents/worker.md +0 -24
  442. package/bin/bridge +0 -133
  443. package/bin/statusline-launcher.mjs +0 -82
  444. package/bin/statusline-lib.mjs +0 -581
  445. package/bin/statusline-route.mjs +0 -273
  446. package/bin/statusline.mjs +0 -638
  447. package/bun.lock +0 -927
  448. package/commands/config.md +0 -16
  449. package/commands/doctor.md +0 -13
  450. package/commands/model.md +0 -61
  451. package/commands/setup.md +0 -17
  452. package/defaults/hidden-roles.json +0 -68
  453. package/defaults/memory-chunk-prompt.md +0 -63
  454. package/defaults/mixdog-config.template.json +0 -27
  455. package/defaults/user-workflow.json +0 -8
  456. package/defaults/user-workflow.md +0 -17
  457. package/hooks/hooks.json +0 -73
  458. package/hooks/lib/active-instance.cjs +0 -77
  459. package/hooks/lib/permission-evaluator.cjs +0 -411
  460. package/hooks/lib/permission-route.cjs +0 -63
  461. package/hooks/lib/settings-loader.cjs +0 -117
  462. package/hooks/post-tool-use.cjs +0 -84
  463. package/hooks/pre-mcp-sandbox.cjs +0 -158
  464. package/hooks/pre-tool-subagent.cjs +0 -258
  465. package/hooks/session-start.cjs +0 -1493
  466. package/hooks/shim-launcher.cjs +0 -65
  467. package/hooks/turn-timer.cjs +0 -82
  468. package/lib/claude-md-writer.cjs +0 -386
  469. package/lib/keychain-cjs.cjs +0 -290
  470. package/lib/plugin-paths.cjs +0 -69
  471. package/lib/rules-builder.cjs +0 -241
  472. package/native/README.md +0 -117
  473. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  474. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  475. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  476. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  477. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  478. package/prompts/code-review.txt +0 -16
  479. package/prompts/security-audit.txt +0 -17
  480. package/rules/bridge/00-common.md +0 -39
  481. package/rules/bridge/20-skip-protocol.md +0 -18
  482. package/rules/bridge/30-explorer.md +0 -33
  483. package/rules/bridge/40-cycle1-agent.md +0 -52
  484. package/rules/bridge/41-cycle2-agent.md +0 -62
  485. package/rules/lead/00-tool-lead.md +0 -61
  486. package/rules/lead/01-general.md +0 -26
  487. package/rules/lead/02-channels.md +0 -49
  488. package/rules/lead/03-team.md +0 -27
  489. package/rules/lead/04-workflow.md +0 -20
  490. package/rules/shared/00-language.md +0 -14
  491. package/rules/shared/01-tool.md +0 -138
  492. package/scripts/bootstrap.mjs +0 -130
  493. package/scripts/bridge-unify-smoke.mjs +0 -308
  494. package/scripts/build-runtime-linux.sh +0 -348
  495. package/scripts/build-runtime-macos.sh +0 -217
  496. package/scripts/build-runtime-windows.ps1 +0 -242
  497. package/scripts/builtin-utils-smoke.mjs +0 -398
  498. package/scripts/bump.mjs +0 -80
  499. package/scripts/check-json.mjs +0 -45
  500. package/scripts/check-syntax-changed.mjs +0 -102
  501. package/scripts/check-syntax.mjs +0 -58
  502. package/scripts/code-graph-batch.test.mjs +0 -33
  503. package/scripts/config-preserve-smoke.mjs +0 -180
  504. package/scripts/doctor.mjs +0 -489
  505. package/scripts/edit-normalize-fuzz.mjs +0 -130
  506. package/scripts/edit-normalize-smoke.mjs +0 -401
  507. package/scripts/edit-operation-smoke.mjs +0 -369
  508. package/scripts/edit2-smoke.mjs +0 -63
  509. package/scripts/ensure-deps.mjs +0 -259
  510. package/scripts/fuzzy-e2e.mjs +0 -28
  511. package/scripts/fuzzy-smoke.mjs +0 -26
  512. package/scripts/gateway-model.mjs +0 -596
  513. package/scripts/generate-runtime-manifest.mjs +0 -166
  514. package/scripts/guard-smoke.mjs +0 -66
  515. package/scripts/hidden-role-schema-smoke.mjs +0 -162
  516. package/scripts/hook-routing-smoke.mjs +0 -29
  517. package/scripts/inject-input.ps1 +0 -204
  518. package/scripts/io-complex-smoke.mjs +0 -667
  519. package/scripts/io-explore-bench.mjs +0 -424
  520. package/scripts/io-guardrails-smoke.mjs +0 -205
  521. package/scripts/io-mini-bench-baseline.json +0 -11
  522. package/scripts/io-mini-bench.mjs +0 -216
  523. package/scripts/io-route-harness.mjs +0 -933
  524. package/scripts/io-telemetry-report.mjs +0 -691
  525. package/scripts/lib/gateway-inventory.mjs +0 -178
  526. package/scripts/lib/gateway-settings.mjs +0 -78
  527. package/scripts/mutation-bench.mjs +0 -564
  528. package/scripts/mutation-io-smoke.mjs +0 -1097
  529. package/scripts/native-patch-bridge-smoke.mjs +0 -288
  530. package/scripts/native-patch-smoke.mjs +0 -304
  531. package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
  532. package/scripts/patch-interior-context-smoke.mjs +0 -49
  533. package/scripts/patch-newline-utf8-smoke.mjs +0 -157
  534. package/scripts/perf-hook-smoke.mjs +0 -71
  535. package/scripts/permission-eval-smoke.mjs +0 -443
  536. package/scripts/prep-patch.mjs +0 -53
  537. package/scripts/prep-shim.mjs +0 -96
  538. package/scripts/provider-cache-smoke.mjs +0 -687
  539. package/scripts/report-runtime-health.mjs +0 -132
  540. package/scripts/resolve-bun.mjs +0 -60
  541. package/scripts/run-mcp.mjs +0 -1473
  542. package/scripts/salvage-v4a-shatter.test.mjs +0 -58
  543. package/scripts/scoped-cache-io-smoke.mjs +0 -103
  544. package/scripts/shell-policy-round3-smoke.mjs +0 -46
  545. package/scripts/smoke-runtime-negative.ps1 +0 -100
  546. package/scripts/smoke-runtime-negative.sh +0 -95
  547. package/scripts/stall-policy-smoke.mjs +0 -50
  548. package/scripts/start-memory-worker.mjs +0 -23
  549. package/scripts/statusline-launcher-smoke.mjs +0 -235
  550. package/scripts/stress-atomic-write.mjs +0 -1028
  551. package/scripts/test-fault-inject.mjs +0 -164
  552. package/scripts/test-large-file.mjs +0 -174
  553. package/scripts/tool-edge-smoke.mjs +0 -209
  554. package/scripts/uninstall.mjs +0 -238
  555. package/scripts/webhook-selfheal-smoke.mjs +0 -27
  556. package/scripts/write-overwrite-guard-smoke.mjs +0 -56
  557. package/server-main.mjs +0 -3350
  558. package/server.mjs +0 -468
  559. package/setup/config-merge.mjs +0 -246
  560. package/setup/install.mjs +0 -574
  561. package/setup/launch-core.mjs +0 -617
  562. package/setup/launch.mjs +0 -101
  563. package/setup/locate-claude.mjs +0 -56
  564. package/setup/mixdog-cli.mjs +0 -122
  565. package/setup/setup-server.mjs +0 -3305
  566. package/setup/setup.html +0 -3740
  567. package/setup/tui.mjs +0 -325
  568. package/skills/retro-skill-proposer/SKILL.md +0 -92
  569. package/skills/schedule-add/SKILL.md +0 -77
  570. package/skills/setup/SKILL.md +0 -356
  571. package/skills/webhook-add/SKILL.md +0 -81
  572. package/src/agent/bridge-stall-watchdog.mjs +0 -337
  573. package/src/agent/index.mjs +0 -2229
  574. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
  575. package/src/agent/orchestrator/bridge-retry.mjs +0 -220
  576. package/src/agent/orchestrator/bridge-trace.mjs +0 -601
  577. package/src/agent/orchestrator/cache-mtime.mjs +0 -58
  578. package/src/agent/orchestrator/config.mjs +0 -405
  579. package/src/agent/orchestrator/context/collect.mjs +0 -651
  580. package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
  581. package/src/agent/orchestrator/drain-registry.mjs +0 -50
  582. package/src/agent/orchestrator/explore-validator.mjs +0 -8
  583. package/src/agent/orchestrator/internal-roles.mjs +0 -118
  584. package/src/agent/orchestrator/internal-tools.mjs +0 -88
  585. package/src/agent/orchestrator/jobs.mjs +0 -116
  586. package/src/agent/orchestrator/mcp/client.mjs +0 -364
  587. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1884
  588. package/src/agent/orchestrator/providers/anthropic.mjs +0 -598
  589. package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
  590. package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
  591. package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
  592. package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
  593. package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
  594. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
  595. package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
  596. package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
  597. package/src/agent/orchestrator/providers/registry.mjs +0 -192
  598. package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
  599. package/src/agent/orchestrator/session/cache/post-edit-marks.mjs +0 -42
  600. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
  601. package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
  602. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
  603. package/src/agent/orchestrator/session/loop.mjs +0 -1619
  604. package/src/agent/orchestrator/session/manager.mjs +0 -1991
  605. package/src/agent/orchestrator/session/result-classification.mjs +0 -65
  606. package/src/agent/orchestrator/session/store.mjs +0 -632
  607. package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
  608. package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
  609. package/src/agent/orchestrator/session/trim.mjs +0 -491
  610. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
  611. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
  612. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
  613. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
  614. package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
  615. package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
  616. package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
  617. package/src/agent/orchestrator/stall-policy.mjs +0 -201
  618. package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
  619. package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
  620. package/src/agent/orchestrator/tools/builtin/advisory-lock.mjs +0 -171
  621. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -511
  622. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
  623. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
  624. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
  625. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
  626. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
  627. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
  628. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
  629. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
  630. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
  631. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
  632. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
  633. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
  634. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
  635. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
  636. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
  637. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
  638. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
  639. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
  640. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
  641. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
  642. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
  643. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
  644. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
  645. package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
  646. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
  647. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
  648. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
  649. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
  650. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
  651. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
  652. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
  653. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
  654. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
  655. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
  656. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
  657. package/src/agent/orchestrator/tools/builtin.mjs +0 -503
  658. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
  659. package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
  660. package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
  661. package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
  662. package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
  663. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
  664. package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
  665. package/src/agent/orchestrator/tools/host-input.mjs +0 -204
  666. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
  667. package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
  668. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
  669. package/src/agent/orchestrator/tools/patch.mjs +0 -2754
  670. package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
  671. package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
  672. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
  673. package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
  674. package/src/agent/orchestrator/workflow-store.mjs +0 -93
  675. package/src/agent/tool-defs.mjs +0 -110
  676. package/src/channels/backends/discord.mjs +0 -784
  677. package/src/channels/data/voice-runtime-manifest.json +0 -138
  678. package/src/channels/index.mjs +0 -3268
  679. package/src/channels/lib/config.mjs +0 -292
  680. package/src/channels/lib/drop-trace.mjs +0 -71
  681. package/src/channels/lib/event-pipeline.mjs +0 -81
  682. package/src/channels/lib/holidays.mjs +0 -138
  683. package/src/channels/lib/hook-pipe-server.mjs +0 -822
  684. package/src/channels/lib/output-forwarder.mjs +0 -765
  685. package/src/channels/lib/runtime-paths.mjs +0 -552
  686. package/src/channels/lib/scheduler.mjs +0 -723
  687. package/src/channels/lib/session-discovery.mjs +0 -103
  688. package/src/channels/lib/state-file.mjs +0 -68
  689. package/src/channels/lib/status-snapshot.mjs +0 -219
  690. package/src/channels/lib/tool-format.mjs +0 -140
  691. package/src/channels/lib/transcript-discovery.mjs +0 -195
  692. package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
  693. package/src/channels/lib/webhook.mjs +0 -1318
  694. package/src/channels/tool-defs.mjs +0 -170
  695. package/src/daemon/host.mjs +0 -118
  696. package/src/daemon/mcp-transport.mjs +0 -47
  697. package/src/daemon/session.mjs +0 -100
  698. package/src/daemon/thin-client.mjs +0 -71
  699. package/src/daemon/transport.mjs +0 -163
  700. package/src/gateway/claude-current.mjs +0 -255
  701. package/src/gateway/oauth-usage.mjs +0 -598
  702. package/src/gateway/route-meta.mjs +0 -629
  703. package/src/gateway/server.mjs +0 -713
  704. package/src/memory/data/runtime-manifest.json +0 -40
  705. package/src/memory/index.mjs +0 -3332
  706. package/src/memory/lib/core-memory-store.mjs +0 -330
  707. package/src/memory/lib/embedding-provider.mjs +0 -269
  708. package/src/memory/lib/embedding-worker.mjs +0 -323
  709. package/src/memory/lib/memory-cycle1.mjs +0 -645
  710. package/src/memory/lib/memory-cycle2.mjs +0 -1284
  711. package/src/memory/lib/memory-cycle3.mjs +0 -540
  712. package/src/memory/lib/memory-embed.mjs +0 -299
  713. package/src/memory/lib/memory-ops-policy.mjs +0 -190
  714. package/src/memory/lib/memory-recall-store.mjs +0 -638
  715. package/src/memory/lib/memory.mjs +0 -412
  716. package/src/memory/lib/pg/adapter.mjs +0 -308
  717. package/src/memory/lib/pg/process.mjs +0 -360
  718. package/src/memory/lib/pg/supervisor.mjs +0 -396
  719. package/src/memory/lib/runtime-fetcher.mjs +0 -458
  720. package/src/memory/lib/trace-store.mjs +0 -728
  721. package/src/memory/tool-defs.mjs +0 -79
  722. package/src/search/index.mjs +0 -1173
  723. package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
  724. package/src/search/lib/backends/exa.mjs +0 -50
  725. package/src/search/lib/backends/firecrawl.mjs +0 -61
  726. package/src/search/lib/backends/gemini-api.mjs +0 -83
  727. package/src/search/lib/backends/grok-oauth.mjs +0 -86
  728. package/src/search/lib/backends/index.mjs +0 -150
  729. package/src/search/lib/backends/openai-api.mjs +0 -144
  730. package/src/search/lib/backends/openai-oauth.mjs +0 -102
  731. package/src/search/lib/backends/openai-web-search.mjs +0 -76
  732. package/src/search/lib/backends/tavily.mjs +0 -55
  733. package/src/search/lib/backends/xai-api.mjs +0 -113
  734. package/src/search/lib/config.mjs +0 -192
  735. package/src/search/lib/provider-usage.mjs +0 -67
  736. package/src/search/lib/providers.mjs +0 -47
  737. package/src/search/lib/search-intent.mjs +0 -109
  738. package/src/search/lib/setup-handler.mjs +0 -261
  739. package/src/search/lib/web-tools.mjs +0 -1219
  740. package/src/search/tool-defs.mjs +0 -83
  741. package/src/setup/defender-exclusion.mjs +0 -183
  742. package/src/shared/atomic-file.mjs +0 -436
  743. package/src/shared/config.mjs +0 -372
  744. package/src/shared/daemon-recycle.mjs +0 -108
  745. package/src/shared/disable-claude-builtins.mjs +0 -91
  746. package/src/shared/err-text.mjs +0 -12
  747. package/src/shared/llm/http-agent.mjs +0 -123
  748. package/src/shared/open-url.mjs +0 -62
  749. package/src/shared/plugin-paths.mjs +0 -58
  750. package/src/shared/schedules-store.mjs +0 -70
  751. package/src/shared/seed.mjs +0 -161
  752. package/src/shared/user-cwd.mjs +0 -225
  753. package/src/shared/user-data-guard.mjs +0 -244
  754. package/src/status/aggregator.mjs +0 -584
  755. package/src/status/server.mjs +0 -413
  756. package/tools.json +0 -1671
  757. /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
  758. /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
  759. /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
  760. /package/{lib → src/lib}/config-cjs.cjs +0 -0
  761. /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
  762. /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
  763. /package/{lib → src/lib}/text-utils.cjs +0 -0
  764. /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
  765. /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
  766. /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
  767. /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
  768. /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
  769. /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
  770. /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
  771. /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
  772. /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
  773. /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
  774. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
  775. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
  776. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
  777. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
  778. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
  779. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
  780. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
  781. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
  782. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
  783. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
  784. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
  785. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
  786. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
  787. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
  788. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
  789. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
  790. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
  791. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
  792. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
  793. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
  794. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
  795. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
  796. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
  797. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
  798. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
  799. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
  800. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
  801. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
  802. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
  803. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
  804. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
  805. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
  806. /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
  807. /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
  808. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
  809. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
  810. /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
  811. /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
  812. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
  813. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
  814. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
  815. /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
  816. /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
  817. /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
  818. /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
  819. /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
  820. /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
  821. /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
  822. /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
  823. /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
  824. /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
  825. /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
  826. /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
  827. /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
  828. /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
  829. /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
  830. /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
  831. /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
  832. /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
  833. /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
  834. /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
  835. /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
  836. /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
  837. /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
  838. /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
  839. /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
  840. /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
  841. /package/src/{search → runtime/search}/lib/state.mjs +0 -0
  842. /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
  843. /package/src/{shared → runtime/shared}/llm/cost.mjs +0 -0
  844. /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
  845. /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
  846. /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
  847. /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);