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