mixdog 0.7.17 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (836) hide show
  1. package/README.md +37 -331
  2. package/package.json +67 -99
  3. package/scripts/boot-smoke.mjs +94 -0
  4. package/scripts/build-tui.mjs +52 -0
  5. package/scripts/compact-smoke.mjs +199 -0
  6. package/scripts/lead-workflow-smoke.mjs +598 -0
  7. package/scripts/live-worker-smoke.mjs +239 -0
  8. package/scripts/output-style-smoke.mjs +101 -0
  9. package/scripts/smoke-loop-report.mjs +221 -0
  10. package/scripts/smoke-loop.mjs +201 -0
  11. package/scripts/smoke.mjs +113 -0
  12. package/scripts/tool-failures.mjs +143 -0
  13. package/scripts/tool-smoke.mjs +456 -0
  14. package/src/agents/debugger/AGENT.md +3 -0
  15. package/src/agents/debugger/agent.json +6 -0
  16. package/src/agents/explore/AGENT.md +4 -0
  17. package/src/agents/explore/agent.json +6 -0
  18. package/src/agents/heavy-worker/AGENT.md +3 -0
  19. package/src/agents/heavy-worker/agent.json +6 -0
  20. package/src/agents/maintainer/AGENT.md +3 -0
  21. package/src/agents/maintainer/agent.json +6 -0
  22. package/src/agents/reviewer/AGENT.md +3 -0
  23. package/src/agents/reviewer/agent.json +6 -0
  24. package/src/agents/scheduler-task.md +3 -0
  25. package/src/agents/web-researcher/AGENT.md +3 -0
  26. package/src/agents/web-researcher/agent.json +6 -0
  27. package/src/agents/webhook-handler.md +3 -0
  28. package/src/agents/worker/AGENT.md +3 -0
  29. package/src/agents/worker/agent.json +6 -0
  30. package/src/app.mjs +90 -0
  31. package/src/cli.mjs +11 -0
  32. package/src/defaults/hidden-roles.json +72 -0
  33. package/src/defaults/mixdog-config.template.json +15 -0
  34. package/src/hooks/lib/permission-evaluator.cjs +488 -0
  35. package/src/hooks/lib/settings-loader.cjs +112 -0
  36. package/src/lib/keychain-cjs.cjs +332 -0
  37. package/src/lib/plugin-paths.cjs +28 -0
  38. package/src/lib/rules-builder.cjs +315 -0
  39. package/src/mixdog-session-runtime.mjs +3704 -0
  40. package/src/output-styles/default.md +38 -0
  41. package/src/output-styles/extreme-simple.md +17 -0
  42. package/src/output-styles/simple.md +17 -0
  43. package/src/repl.mjs +322 -0
  44. package/src/rules/bridge/00-common.md +5 -0
  45. package/src/rules/bridge/20-skip-protocol.md +11 -0
  46. package/src/rules/bridge/30-explorer.md +4 -0
  47. package/src/rules/bridge/40-cycle1-agent.md +28 -0
  48. package/src/rules/bridge/41-cycle2-agent.md +59 -0
  49. package/src/rules/lead/00-tool-lead.md +5 -0
  50. package/src/rules/lead/01-general.md +5 -0
  51. package/src/rules/lead/02-channels.md +3 -0
  52. package/src/rules/lead/04-workflow.md +12 -0
  53. package/src/rules/shared/00-language.md +3 -0
  54. package/src/rules/shared/01-tool.md +3 -0
  55. package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
  56. package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
  57. package/src/runtime/agent/orchestrator/config.mjs +446 -0
  58. package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
  59. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
  60. package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
  61. package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
  62. package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
  63. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
  64. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
  65. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
  66. package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
  67. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
  68. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
  69. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
  70. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
  71. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
  72. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
  73. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
  76. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
  77. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
  78. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
  79. package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
  80. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
  81. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
  82. package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
  83. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  84. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
  85. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
  86. package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
  87. package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
  88. package/src/runtime/agent/orchestrator/session/loop.mjs +2320 -0
  89. package/src/runtime/agent/orchestrator/session/manager.mjs +2960 -0
  90. package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
  91. package/src/runtime/agent/orchestrator/session/store.mjs +663 -0
  92. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  93. package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
  94. package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
  95. package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
  96. package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
  97. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
  98. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
  99. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
  100. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
  102. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
  103. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
  105. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
  106. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  107. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
  108. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
  109. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
  110. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  111. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
  112. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
  113. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
  114. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
  115. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
  116. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
  118. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  119. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
  120. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  121. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
  122. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
  123. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
  124. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
  125. package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
  126. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
  127. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
  128. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
  129. package/src/runtime/channels/backends/discord.mjs +781 -0
  130. package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
  131. package/src/runtime/channels/index.mjs +3309 -0
  132. package/src/runtime/channels/lib/config.mjs +285 -0
  133. package/src/runtime/channels/lib/drop-trace.mjs +71 -0
  134. package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
  135. package/src/runtime/channels/lib/holidays.mjs +138 -0
  136. package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
  137. package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
  138. package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
  139. package/src/runtime/channels/lib/scheduler.mjs +710 -0
  140. package/src/runtime/channels/lib/session-discovery.mjs +102 -0
  141. package/src/runtime/channels/lib/state-file.mjs +68 -0
  142. package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
  143. package/src/runtime/channels/lib/tool-format.mjs +124 -0
  144. package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
  145. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
  146. package/src/runtime/channels/lib/webhook.mjs +1288 -0
  147. package/src/runtime/channels/tool-defs.mjs +177 -0
  148. package/src/runtime/lib/keychain-cjs.cjs +289 -0
  149. package/src/runtime/memory/data/runtime-manifest.json +40 -0
  150. package/src/runtime/memory/index.mjs +3600 -0
  151. package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
  152. package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
  153. package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
  154. package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
  155. package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
  156. package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
  157. package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
  158. package/src/runtime/memory/lib/memory-embed.mjs +300 -0
  159. package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
  160. package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
  161. package/src/runtime/memory/lib/memory.mjs +418 -0
  162. package/src/runtime/memory/lib/pg/adapter.mjs +314 -0
  163. package/src/runtime/memory/lib/pg/process.mjs +366 -0
  164. package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
  165. package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
  166. package/src/runtime/memory/lib/trace-store.mjs +734 -0
  167. package/src/runtime/memory/tool-defs.mjs +79 -0
  168. package/src/runtime/search/index.mjs +925 -0
  169. package/src/runtime/search/lib/config.mjs +61 -0
  170. package/src/runtime/search/lib/web-tools.mjs +1278 -0
  171. package/src/runtime/search/tool-defs.mjs +64 -0
  172. package/src/runtime/shared/atomic-file.mjs +435 -0
  173. package/src/runtime/shared/background-tasks.mjs +376 -0
  174. package/src/runtime/shared/child-guardian.mjs +98 -0
  175. package/src/runtime/shared/config.mjs +393 -0
  176. package/src/runtime/shared/err-text.mjs +121 -0
  177. package/src/runtime/shared/launcher-control.mjs +259 -0
  178. package/src/runtime/shared/llm/cost.mjs +66 -0
  179. package/src/runtime/shared/llm/http-agent.mjs +129 -0
  180. package/src/runtime/shared/open-url.mjs +37 -0
  181. package/src/runtime/shared/plugin-paths.mjs +25 -0
  182. package/src/runtime/shared/process-shutdown.mjs +147 -0
  183. package/src/runtime/shared/schedules-store.mjs +70 -0
  184. package/src/runtime/shared/tool-execution-contract.mjs +104 -0
  185. package/src/runtime/shared/tool-surface.mjs +950 -0
  186. package/src/runtime/shared/user-cwd.mjs +221 -0
  187. package/src/runtime/shared/user-data-guard.mjs +232 -0
  188. package/src/runtime/shared/workspace-router.mjs +259 -0
  189. package/src/standalone/bridge-tool.mjs +1414 -0
  190. package/src/standalone/channel-admin.mjs +366 -0
  191. package/src/standalone/channel-worker-preload.cjs +3 -0
  192. package/src/standalone/channel-worker.mjs +353 -0
  193. package/src/standalone/explore-tool.mjs +233 -0
  194. package/src/standalone/hook-bus.mjs +246 -0
  195. package/src/standalone/plugin-admin.mjs +247 -0
  196. package/src/standalone/provider-admin.mjs +338 -0
  197. package/src/standalone/seeds.mjs +94 -0
  198. package/src/standalone/usage-dashboard.mjs +510 -0
  199. package/src/tui/App.jsx +5438 -0
  200. package/src/tui/components/AnsiText.jsx +199 -0
  201. package/src/tui/components/ContextPanel.jsx +217 -0
  202. package/src/tui/components/Markdown.jsx +205 -0
  203. package/src/tui/components/MarkdownTable.jsx +204 -0
  204. package/src/tui/components/Message.jsx +103 -0
  205. package/src/tui/components/Picker.jsx +317 -0
  206. package/src/tui/components/PromptInput.jsx +584 -0
  207. package/src/tui/components/QueuedCommands.jsx +47 -0
  208. package/src/tui/components/SlashCommandPalette.jsx +114 -0
  209. package/src/tui/components/Spinner.jsx +317 -0
  210. package/src/tui/components/StatusLine.jsx +87 -0
  211. package/src/tui/components/TextEntryPanel.jsx +323 -0
  212. package/src/tui/components/ToolExecution.jsx +772 -0
  213. package/src/tui/components/TurnDone.jsx +78 -0
  214. package/src/tui/components/UsagePanel.jsx +331 -0
  215. package/src/tui/dist/index.mjs +12359 -0
  216. package/src/tui/engine.mjs +2410 -0
  217. package/src/tui/figures.mjs +50 -0
  218. package/src/tui/hooks/useEngine.mjs +16 -0
  219. package/src/tui/index.jsx +254 -0
  220. package/src/tui/input-editing.mjs +242 -0
  221. package/src/tui/markdown/format-token.mjs +194 -0
  222. package/src/tui/paste-attachments.mjs +198 -0
  223. package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
  224. package/src/tui/spinner-verbs.mjs +45 -0
  225. package/src/tui/theme.mjs +67 -0
  226. package/src/tui/time-format.mjs +53 -0
  227. package/src/ui/ansi.mjs +115 -0
  228. package/src/ui/markdown.mjs +195 -0
  229. package/src/ui/statusline.mjs +730 -0
  230. package/src/ui/tool-card.mjs +101 -0
  231. package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
  232. package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
  233. package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
  234. package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
  235. package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
  236. package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
  237. package/src/workflows/default/WORKFLOW.md +7 -0
  238. package/src/workflows/default/workflow.json +14 -0
  239. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  240. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  241. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  242. package/vendor/ink/build/colorize.d.ts +3 -0
  243. package/vendor/ink/build/colorize.js +48 -0
  244. package/vendor/ink/build/colorize.js.map +1 -0
  245. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  246. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  247. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  248. package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
  249. package/vendor/ink/build/components/AnimationContext.js +13 -0
  250. package/vendor/ink/build/components/AnimationContext.js.map +1 -0
  251. package/vendor/ink/build/components/App.d.ts +24 -0
  252. package/vendor/ink/build/components/App.js +554 -0
  253. package/vendor/ink/build/components/App.js.map +1 -0
  254. package/vendor/ink/build/components/AppContext.d.ts +80 -0
  255. package/vendor/ink/build/components/AppContext.js +25 -0
  256. package/vendor/ink/build/components/AppContext.js.map +1 -0
  257. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  258. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  259. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  260. package/vendor/ink/build/components/Box.d.ts +130 -0
  261. package/vendor/ink/build/components/Box.js +34 -0
  262. package/vendor/ink/build/components/Box.js.map +1 -0
  263. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  264. package/vendor/ink/build/components/CursorContext.js +8 -0
  265. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  266. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  267. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  268. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  269. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  270. package/vendor/ink/build/components/ErrorOverview.js +90 -0
  271. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  272. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  273. package/vendor/ink/build/components/FocusContext.js +17 -0
  274. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  275. package/vendor/ink/build/components/Newline.d.ts +13 -0
  276. package/vendor/ink/build/components/Newline.js +8 -0
  277. package/vendor/ink/build/components/Newline.js.map +1 -0
  278. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  279. package/vendor/ink/build/components/Spacer.js +11 -0
  280. package/vendor/ink/build/components/Spacer.js.map +1 -0
  281. package/vendor/ink/build/components/Static.d.ts +24 -0
  282. package/vendor/ink/build/components/Static.js +28 -0
  283. package/vendor/ink/build/components/Static.js.map +1 -0
  284. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  285. package/vendor/ink/build/components/StderrContext.js +13 -0
  286. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  287. package/vendor/ink/build/components/StdinContext.d.ts +28 -0
  288. package/vendor/ink/build/components/StdinContext.js +20 -0
  289. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  290. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  291. package/vendor/ink/build/components/StdoutContext.js +13 -0
  292. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  293. package/vendor/ink/build/components/Text.d.ts +55 -0
  294. package/vendor/ink/build/components/Text.js +50 -0
  295. package/vendor/ink/build/components/Text.js.map +1 -0
  296. package/vendor/ink/build/components/Transform.d.ts +16 -0
  297. package/vendor/ink/build/components/Transform.js +15 -0
  298. package/vendor/ink/build/components/Transform.js.map +1 -0
  299. package/vendor/ink/build/cursor-helpers.d.ts +39 -0
  300. package/vendor/ink/build/cursor-helpers.js +62 -0
  301. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  302. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  303. package/vendor/ink/build/devtools-window-polyfill.js +68 -0
  304. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  305. package/vendor/ink/build/devtools.d.ts +1 -0
  306. package/vendor/ink/build/devtools.js +36 -0
  307. package/vendor/ink/build/devtools.js.map +1 -0
  308. package/vendor/ink/build/dom.d.ts +62 -0
  309. package/vendor/ink/build/dom.js +143 -0
  310. package/vendor/ink/build/dom.js.map +1 -0
  311. package/vendor/ink/build/get-max-width.d.ts +3 -0
  312. package/vendor/ink/build/get-max-width.js +10 -0
  313. package/vendor/ink/build/get-max-width.js.map +1 -0
  314. package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
  315. package/vendor/ink/build/hooks/use-animation.js +87 -0
  316. package/vendor/ink/build/hooks/use-animation.js.map +1 -0
  317. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  318. package/vendor/ink/build/hooks/use-app.js +8 -0
  319. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  320. package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
  321. package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
  322. package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
  323. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  324. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  325. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  326. package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
  327. package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
  328. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  329. package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
  330. package/vendor/ink/build/hooks/use-focus.js +43 -0
  331. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  332. package/vendor/ink/build/hooks/use-input.d.ts +132 -0
  333. package/vendor/ink/build/hooks/use-input.js +126 -0
  334. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  335. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  336. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
  337. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  338. package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
  339. package/vendor/ink/build/hooks/use-paste.js +62 -0
  340. package/vendor/ink/build/hooks/use-paste.js.map +1 -0
  341. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  342. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  343. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  344. package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
  345. package/vendor/ink/build/hooks/use-stdin.js +9 -0
  346. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  347. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  348. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  349. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  350. package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
  351. package/vendor/ink/build/hooks/use-window-size.js +22 -0
  352. package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
  353. package/vendor/ink/build/index.d.ts +42 -0
  354. package/vendor/ink/build/index.js +24 -0
  355. package/vendor/ink/build/index.js.map +1 -0
  356. package/vendor/ink/build/ink.d.ts +146 -0
  357. package/vendor/ink/build/ink.js +1022 -0
  358. package/vendor/ink/build/ink.js.map +1 -0
  359. package/vendor/ink/build/input-parser.d.ts +10 -0
  360. package/vendor/ink/build/input-parser.js +194 -0
  361. package/vendor/ink/build/input-parser.js.map +1 -0
  362. package/vendor/ink/build/instances.d.ts +3 -0
  363. package/vendor/ink/build/instances.js +8 -0
  364. package/vendor/ink/build/instances.js.map +1 -0
  365. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  366. package/vendor/ink/build/kitty-keyboard.js +32 -0
  367. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  368. package/vendor/ink/build/log-update.d.ts +20 -0
  369. package/vendor/ink/build/log-update.js +261 -0
  370. package/vendor/ink/build/log-update.js.map +1 -0
  371. package/vendor/ink/build/measure-element.d.ts +20 -0
  372. package/vendor/ink/build/measure-element.js +13 -0
  373. package/vendor/ink/build/measure-element.js.map +1 -0
  374. package/vendor/ink/build/measure-text.d.ts +6 -0
  375. package/vendor/ink/build/measure-text.js +21 -0
  376. package/vendor/ink/build/measure-text.js.map +1 -0
  377. package/vendor/ink/build/output.d.ts +35 -0
  378. package/vendor/ink/build/output.js +328 -0
  379. package/vendor/ink/build/output.js.map +1 -0
  380. package/vendor/ink/build/parse-keypress.d.ts +20 -0
  381. package/vendor/ink/build/parse-keypress.js +495 -0
  382. package/vendor/ink/build/parse-keypress.js.map +1 -0
  383. package/vendor/ink/build/reconciler.d.ts +4 -0
  384. package/vendor/ink/build/reconciler.js +306 -0
  385. package/vendor/ink/build/reconciler.js.map +1 -0
  386. package/vendor/ink/build/render-background.d.ts +4 -0
  387. package/vendor/ink/build/render-background.js +25 -0
  388. package/vendor/ink/build/render-background.js.map +1 -0
  389. package/vendor/ink/build/render-border.d.ts +4 -0
  390. package/vendor/ink/build/render-border.js +84 -0
  391. package/vendor/ink/build/render-border.js.map +1 -0
  392. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  393. package/vendor/ink/build/render-node-to-output.js +162 -0
  394. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  395. package/vendor/ink/build/render-to-string.d.ts +38 -0
  396. package/vendor/ink/build/render-to-string.js +116 -0
  397. package/vendor/ink/build/render-to-string.js.map +1 -0
  398. package/vendor/ink/build/render.d.ts +176 -0
  399. package/vendor/ink/build/render.js +71 -0
  400. package/vendor/ink/build/render.js.map +1 -0
  401. package/vendor/ink/build/renderer.d.ts +8 -0
  402. package/vendor/ink/build/renderer.js +64 -0
  403. package/vendor/ink/build/renderer.js.map +1 -0
  404. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  405. package/vendor/ink/build/sanitize-ansi.js +27 -0
  406. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  407. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  408. package/vendor/ink/build/squash-text-nodes.js +36 -0
  409. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  410. package/vendor/ink/build/styles.d.ts +302 -0
  411. package/vendor/ink/build/styles.js +303 -0
  412. package/vendor/ink/build/styles.js.map +1 -0
  413. package/vendor/ink/build/utils.d.ts +9 -0
  414. package/vendor/ink/build/utils.js +19 -0
  415. package/vendor/ink/build/utils.js.map +1 -0
  416. package/vendor/ink/build/wrap-text.d.ts +3 -0
  417. package/vendor/ink/build/wrap-text.js +38 -0
  418. package/vendor/ink/build/wrap-text.js.map +1 -0
  419. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  420. package/vendor/ink/build/write-synchronized.js +9 -0
  421. package/vendor/ink/build/write-synchronized.js.map +1 -0
  422. package/vendor/ink/license +10 -0
  423. package/vendor/ink/package.json +137 -0
  424. package/.claude-plugin/marketplace.json +0 -34
  425. package/.claude-plugin/plugin.json +0 -20
  426. package/.gitattributes +0 -34
  427. package/.mcp.json +0 -14
  428. package/ARCHITECTURE.md +0 -77
  429. package/CHANGELOG.md +0 -30
  430. package/CONTRIBUTING.md +0 -45
  431. package/DATA-FLOW.md +0 -79
  432. package/LICENSE +0 -21
  433. package/SECURITY.md +0 -138
  434. package/UNINSTALL.md +0 -112
  435. package/agents/maintenance.md +0 -5
  436. package/agents/memory-classification.md +0 -30
  437. package/agents/scheduler-task.md +0 -18
  438. package/agents/webhook-handler.md +0 -27
  439. package/agents/worker.md +0 -24
  440. package/bin/bridge +0 -133
  441. package/bin/statusline-launcher.mjs +0 -82
  442. package/bin/statusline-lib.mjs +0 -558
  443. package/bin/statusline.mjs +0 -615
  444. package/bun.lock +0 -927
  445. package/commands/config.md +0 -16
  446. package/commands/doctor.md +0 -13
  447. package/commands/setup.md +0 -17
  448. package/defaults/hidden-roles.json +0 -68
  449. package/defaults/memory-chunk-prompt.md +0 -63
  450. package/defaults/mixdog-config.template.json +0 -27
  451. package/defaults/user-workflow.json +0 -8
  452. package/defaults/user-workflow.md +0 -17
  453. package/hooks/hooks.json +0 -73
  454. package/hooks/lib/active-instance.cjs +0 -77
  455. package/hooks/lib/permission-evaluator.cjs +0 -411
  456. package/hooks/lib/permission-route.cjs +0 -63
  457. package/hooks/lib/settings-loader.cjs +0 -117
  458. package/hooks/post-tool-use.cjs +0 -84
  459. package/hooks/pre-mcp-sandbox.cjs +0 -158
  460. package/hooks/pre-tool-subagent.cjs +0 -258
  461. package/hooks/session-start.cjs +0 -1479
  462. package/hooks/shim-launcher.cjs +0 -65
  463. package/hooks/turn-timer.cjs +0 -82
  464. package/lib/claude-md-writer.cjs +0 -386
  465. package/lib/keychain-cjs.cjs +0 -290
  466. package/lib/plugin-paths.cjs +0 -69
  467. package/lib/rules-builder.cjs +0 -241
  468. package/native/README.md +0 -117
  469. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  470. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  471. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  472. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  473. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  474. package/prompts/code-review.txt +0 -16
  475. package/prompts/security-audit.txt +0 -17
  476. package/rules/bridge/00-common.md +0 -39
  477. package/rules/bridge/20-skip-protocol.md +0 -18
  478. package/rules/bridge/30-explorer.md +0 -33
  479. package/rules/bridge/40-cycle1-agent.md +0 -52
  480. package/rules/bridge/41-cycle2-agent.md +0 -62
  481. package/rules/lead/00-tool-lead.md +0 -61
  482. package/rules/lead/01-general.md +0 -23
  483. package/rules/lead/02-channels.md +0 -49
  484. package/rules/lead/03-team.md +0 -27
  485. package/rules/lead/04-workflow.md +0 -20
  486. package/rules/shared/00-language.md +0 -14
  487. package/rules/shared/01-tool.md +0 -138
  488. package/scripts/bootstrap.mjs +0 -130
  489. package/scripts/bridge-unify-smoke.mjs +0 -308
  490. package/scripts/build-runtime-linux.sh +0 -348
  491. package/scripts/build-runtime-macos.sh +0 -217
  492. package/scripts/build-runtime-windows.ps1 +0 -242
  493. package/scripts/builtin-utils-smoke.mjs +0 -398
  494. package/scripts/bump.mjs +0 -80
  495. package/scripts/check-json.mjs +0 -45
  496. package/scripts/check-syntax-changed.mjs +0 -102
  497. package/scripts/check-syntax.mjs +0 -58
  498. package/scripts/code-graph-batch.test.mjs +0 -33
  499. package/scripts/config-preserve-smoke.mjs +0 -180
  500. package/scripts/doctor.mjs +0 -489
  501. package/scripts/edit-normalize-fuzz.mjs +0 -130
  502. package/scripts/edit-normalize-smoke.mjs +0 -401
  503. package/scripts/edit-operation-smoke.mjs +0 -369
  504. package/scripts/edit2-smoke.mjs +0 -63
  505. package/scripts/ensure-deps.mjs +0 -259
  506. package/scripts/fuzzy-e2e.mjs +0 -28
  507. package/scripts/fuzzy-smoke.mjs +0 -26
  508. package/scripts/generate-runtime-manifest.mjs +0 -166
  509. package/scripts/guard-smoke.mjs +0 -66
  510. package/scripts/hidden-role-schema-smoke.mjs +0 -162
  511. package/scripts/hook-routing-smoke.mjs +0 -29
  512. package/scripts/inject-input.ps1 +0 -204
  513. package/scripts/io-complex-smoke.mjs +0 -667
  514. package/scripts/io-explore-bench.mjs +0 -424
  515. package/scripts/io-guardrails-smoke.mjs +0 -205
  516. package/scripts/io-mini-bench-baseline.json +0 -11
  517. package/scripts/io-mini-bench.mjs +0 -216
  518. package/scripts/io-route-harness.mjs +0 -933
  519. package/scripts/io-telemetry-report.mjs +0 -691
  520. package/scripts/mutation-bench.mjs +0 -564
  521. package/scripts/mutation-io-smoke.mjs +0 -1097
  522. package/scripts/native-patch-bridge-smoke.mjs +0 -288
  523. package/scripts/native-patch-smoke.mjs +0 -304
  524. package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
  525. package/scripts/patch-interior-context-smoke.mjs +0 -49
  526. package/scripts/patch-newline-utf8-smoke.mjs +0 -157
  527. package/scripts/perf-hook-smoke.mjs +0 -71
  528. package/scripts/permission-eval-smoke.mjs +0 -443
  529. package/scripts/prep-patch.mjs +0 -53
  530. package/scripts/prep-shim.mjs +0 -96
  531. package/scripts/provider-cache-smoke.mjs +0 -687
  532. package/scripts/report-runtime-health.mjs +0 -132
  533. package/scripts/resolve-bun.mjs +0 -60
  534. package/scripts/run-mcp.mjs +0 -1448
  535. package/scripts/salvage-v4a-shatter.test.mjs +0 -58
  536. package/scripts/scoped-cache-io-smoke.mjs +0 -103
  537. package/scripts/shell-policy-round3-smoke.mjs +0 -46
  538. package/scripts/smoke-runtime-negative.ps1 +0 -100
  539. package/scripts/smoke-runtime-negative.sh +0 -95
  540. package/scripts/stall-policy-smoke.mjs +0 -50
  541. package/scripts/start-memory-worker.mjs +0 -23
  542. package/scripts/statusline-launcher-smoke.mjs +0 -82
  543. package/scripts/stress-atomic-write.mjs +0 -1028
  544. package/scripts/test-fault-inject.mjs +0 -164
  545. package/scripts/test-large-file.mjs +0 -174
  546. package/scripts/tool-edge-smoke.mjs +0 -209
  547. package/scripts/uninstall.mjs +0 -201
  548. package/scripts/webhook-selfheal-smoke.mjs +0 -27
  549. package/scripts/write-overwrite-guard-smoke.mjs +0 -56
  550. package/server-main.mjs +0 -3109
  551. package/server.mjs +0 -468
  552. package/setup/config-merge.mjs +0 -246
  553. package/setup/install.mjs +0 -574
  554. package/setup/launch-core.mjs +0 -617
  555. package/setup/launch.mjs +0 -101
  556. package/setup/locate-claude.mjs +0 -56
  557. package/setup/mixdog-cli.mjs +0 -122
  558. package/setup/setup-server.mjs +0 -3305
  559. package/setup/setup.html +0 -3740
  560. package/setup/tui.mjs +0 -325
  561. package/skills/retro-skill-proposer/SKILL.md +0 -92
  562. package/skills/schedule-add/SKILL.md +0 -77
  563. package/skills/setup/SKILL.md +0 -356
  564. package/skills/webhook-add/SKILL.md +0 -81
  565. package/src/agent/bridge-stall-watchdog.mjs +0 -337
  566. package/src/agent/index.mjs +0 -2138
  567. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
  568. package/src/agent/orchestrator/bridge-retry.mjs +0 -220
  569. package/src/agent/orchestrator/bridge-trace.mjs +0 -583
  570. package/src/agent/orchestrator/cache-mtime.mjs +0 -58
  571. package/src/agent/orchestrator/config.mjs +0 -405
  572. package/src/agent/orchestrator/context/collect.mjs +0 -651
  573. package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
  574. package/src/agent/orchestrator/drain-registry.mjs +0 -50
  575. package/src/agent/orchestrator/explore-validator.mjs +0 -8
  576. package/src/agent/orchestrator/internal-roles.mjs +0 -118
  577. package/src/agent/orchestrator/internal-tools.mjs +0 -88
  578. package/src/agent/orchestrator/jobs.mjs +0 -116
  579. package/src/agent/orchestrator/mcp/client.mjs +0 -364
  580. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1881
  581. package/src/agent/orchestrator/providers/anthropic.mjs +0 -594
  582. package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
  583. package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
  584. package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
  585. package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
  586. package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
  587. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
  588. package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
  589. package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
  590. package/src/agent/orchestrator/providers/registry.mjs +0 -192
  591. package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
  592. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
  593. package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
  594. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
  595. package/src/agent/orchestrator/session/loop.mjs +0 -1478
  596. package/src/agent/orchestrator/session/manager.mjs +0 -1991
  597. package/src/agent/orchestrator/session/result-classification.mjs +0 -65
  598. package/src/agent/orchestrator/session/store.mjs +0 -632
  599. package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
  600. package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
  601. package/src/agent/orchestrator/session/trim.mjs +0 -491
  602. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
  603. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
  604. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
  605. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
  606. package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
  607. package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
  608. package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
  609. package/src/agent/orchestrator/stall-policy.mjs +0 -201
  610. package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
  611. package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
  612. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -455
  613. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
  614. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
  615. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
  616. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
  617. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
  618. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
  619. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
  620. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
  621. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
  622. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
  623. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
  624. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
  625. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
  626. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
  627. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
  628. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
  629. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
  630. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
  631. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
  632. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
  633. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
  634. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
  635. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
  636. package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
  637. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
  638. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
  639. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
  640. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
  641. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
  642. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
  643. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
  644. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
  645. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
  646. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
  647. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
  648. package/src/agent/orchestrator/tools/builtin.mjs +0 -503
  649. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
  650. package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
  651. package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
  652. package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
  653. package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
  654. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
  655. package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
  656. package/src/agent/orchestrator/tools/host-input.mjs +0 -204
  657. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
  658. package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
  659. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
  660. package/src/agent/orchestrator/tools/patch.mjs +0 -2754
  661. package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
  662. package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
  663. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
  664. package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
  665. package/src/agent/orchestrator/workflow-store.mjs +0 -93
  666. package/src/agent/tool-defs.mjs +0 -103
  667. package/src/channels/backends/discord.mjs +0 -784
  668. package/src/channels/data/voice-runtime-manifest.json +0 -138
  669. package/src/channels/index.mjs +0 -3268
  670. package/src/channels/lib/config.mjs +0 -292
  671. package/src/channels/lib/drop-trace.mjs +0 -71
  672. package/src/channels/lib/event-pipeline.mjs +0 -81
  673. package/src/channels/lib/holidays.mjs +0 -138
  674. package/src/channels/lib/hook-pipe-server.mjs +0 -822
  675. package/src/channels/lib/output-forwarder.mjs +0 -765
  676. package/src/channels/lib/runtime-paths.mjs +0 -517
  677. package/src/channels/lib/scheduler.mjs +0 -723
  678. package/src/channels/lib/session-discovery.mjs +0 -103
  679. package/src/channels/lib/state-file.mjs +0 -68
  680. package/src/channels/lib/status-snapshot.mjs +0 -219
  681. package/src/channels/lib/tool-format.mjs +0 -140
  682. package/src/channels/lib/transcript-discovery.mjs +0 -195
  683. package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
  684. package/src/channels/lib/webhook.mjs +0 -1318
  685. package/src/channels/tool-defs.mjs +0 -170
  686. package/src/daemon/host.mjs +0 -118
  687. package/src/daemon/mcp-transport.mjs +0 -47
  688. package/src/daemon/session.mjs +0 -100
  689. package/src/daemon/thin-client.mjs +0 -71
  690. package/src/daemon/transport.mjs +0 -163
  691. package/src/memory/data/runtime-manifest.json +0 -40
  692. package/src/memory/index.mjs +0 -3332
  693. package/src/memory/lib/core-memory-store.mjs +0 -330
  694. package/src/memory/lib/embedding-provider.mjs +0 -269
  695. package/src/memory/lib/embedding-worker.mjs +0 -323
  696. package/src/memory/lib/memory-cycle1.mjs +0 -645
  697. package/src/memory/lib/memory-cycle2.mjs +0 -1284
  698. package/src/memory/lib/memory-cycle3.mjs +0 -540
  699. package/src/memory/lib/memory-embed.mjs +0 -299
  700. package/src/memory/lib/memory-ops-policy.mjs +0 -190
  701. package/src/memory/lib/memory-recall-store.mjs +0 -638
  702. package/src/memory/lib/memory.mjs +0 -412
  703. package/src/memory/lib/pg/adapter.mjs +0 -308
  704. package/src/memory/lib/pg/process.mjs +0 -360
  705. package/src/memory/lib/pg/supervisor.mjs +0 -396
  706. package/src/memory/lib/runtime-fetcher.mjs +0 -458
  707. package/src/memory/lib/trace-store.mjs +0 -728
  708. package/src/memory/tool-defs.mjs +0 -79
  709. package/src/search/index.mjs +0 -1173
  710. package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
  711. package/src/search/lib/backends/exa.mjs +0 -50
  712. package/src/search/lib/backends/firecrawl.mjs +0 -61
  713. package/src/search/lib/backends/gemini-api.mjs +0 -83
  714. package/src/search/lib/backends/grok-oauth.mjs +0 -86
  715. package/src/search/lib/backends/index.mjs +0 -150
  716. package/src/search/lib/backends/openai-api.mjs +0 -144
  717. package/src/search/lib/backends/openai-oauth.mjs +0 -102
  718. package/src/search/lib/backends/openai-web-search.mjs +0 -76
  719. package/src/search/lib/backends/tavily.mjs +0 -55
  720. package/src/search/lib/backends/xai-api.mjs +0 -113
  721. package/src/search/lib/config.mjs +0 -192
  722. package/src/search/lib/provider-usage.mjs +0 -67
  723. package/src/search/lib/providers.mjs +0 -47
  724. package/src/search/lib/search-intent.mjs +0 -109
  725. package/src/search/lib/setup-handler.mjs +0 -261
  726. package/src/search/lib/web-tools.mjs +0 -1219
  727. package/src/search/tool-defs.mjs +0 -83
  728. package/src/setup/defender-exclusion.mjs +0 -183
  729. package/src/shared/atomic-file.mjs +0 -436
  730. package/src/shared/config.mjs +0 -372
  731. package/src/shared/daemon-recycle.mjs +0 -108
  732. package/src/shared/disable-claude-builtins.mjs +0 -91
  733. package/src/shared/err-text.mjs +0 -12
  734. package/src/shared/llm/cost.mjs +0 -66
  735. package/src/shared/llm/http-agent.mjs +0 -123
  736. package/src/shared/open-url.mjs +0 -62
  737. package/src/shared/plugin-paths.mjs +0 -58
  738. package/src/shared/schedules-store.mjs +0 -70
  739. package/src/shared/seed.mjs +0 -136
  740. package/src/shared/user-cwd.mjs +0 -225
  741. package/src/shared/user-data-guard.mjs +0 -244
  742. package/src/status/aggregator.mjs +0 -584
  743. package/src/status/server.mjs +0 -413
  744. package/tools.json +0 -1653
  745. /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
  746. /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
  747. /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
  748. /package/{lib → src/lib}/config-cjs.cjs +0 -0
  749. /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
  750. /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
  751. /package/{lib → src/lib}/text-utils.cjs +0 -0
  752. /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
  753. /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
  754. /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
  755. /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
  756. /package/src/{agent → runtime/agent}/orchestrator/session/cache/post-edit-marks.mjs +0 -0
  757. /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
  758. /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
  759. /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
  760. /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
  761. /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
  762. /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
  763. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/advisory-lock.mjs +0 -0
  764. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
  765. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
  766. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
  767. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
  768. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
  769. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
  770. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
  771. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
  772. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
  773. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
  774. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
  775. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
  776. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
  777. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
  778. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
  779. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
  780. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
  781. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
  782. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
  783. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
  784. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
  785. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
  786. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
  787. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
  788. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
  789. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
  790. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
  791. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
  792. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
  793. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
  794. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
  795. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
  796. /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
  797. /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
  798. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
  799. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
  800. /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
  801. /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
  802. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
  803. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
  804. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
  805. /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
  806. /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
  807. /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
  808. /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
  809. /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
  810. /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
  811. /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
  812. /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
  813. /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
  814. /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
  815. /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
  816. /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
  817. /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
  818. /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
  819. /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
  820. /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
  821. /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
  822. /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
  823. /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
  824. /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
  825. /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
  826. /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
  827. /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
  828. /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
  829. /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
  830. /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
  831. /package/src/{search → runtime/search}/lib/state.mjs +0 -0
  832. /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
  833. /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
  834. /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
  835. /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
  836. /package/src/{shared → runtime/shared}/wsl.mjs +0 -0
@@ -0,0 +1,259 @@
1
+ // Cross-platform managed-launcher control channel.
2
+ //
3
+ // Replaces the Windows-only AttachConsole + WriteConsoleInputW front-injection
4
+ // path. A `mixdog`-launched session can be "managed": the launcher
5
+ // (setup/mixdog.mjs) owns the child process and exposes a file-based
6
+ // command queue under the runtime root. Internal commands (/clear,
7
+ // /reload-plugins) are enqueued by the MCP server (inject_command / inject_input)
8
+ // and the launcher delivers them to the child's stdin — no terminal keystroke
9
+ // injection, no new window. Works on Windows / macOS / Linux.
10
+ //
11
+ // Native backend (CANONICAL): Rust is canonical for mixdog's native
12
+ // functionality. The enqueue/drain primitives and the managed terminal bridge
13
+ // are owned by the Rust crate native/mixdog-launch. The pure-JS queue path below
14
+ // is only a wire-compatible fallback for queue writes/drains when the binary has
15
+ // not landed; managed terminal ownership never falls back to JS/node-pty.
16
+ //
17
+ // Wire-up:
18
+ // • The launcher sets MIXDOG_LAUNCH_ID (and MIXDOG_MANAGED_LAUNCH=1) on the
19
+ // child env ONLY when it has actually engaged the stdin control bridge.
20
+ // • The MCP server (a descendant of the child) inherits that env, so
21
+ // managedLaunchId() is the single source of truth for "am I managed?".
22
+ // • enqueueLauncherCommand() publishes one command file atomically; the
23
+ // launcher's watchLauncherCommands() drains + delivers them in order.
24
+
25
+ import {
26
+ mkdirSync,
27
+ readdirSync,
28
+ readFileSync,
29
+ writeFileSync,
30
+ rmSync,
31
+ renameSync,
32
+ existsSync,
33
+ statSync,
34
+ } from 'node:fs';
35
+ import { spawnSync } from 'node:child_process';
36
+ import { tmpdir } from 'node:os';
37
+ import { dirname, join, resolve } from 'node:path';
38
+ import { fileURLToPath } from 'node:url';
39
+ import { randomUUID } from 'node:crypto';
40
+
41
+ const ENV_LAUNCH_ID = 'MIXDOG_LAUNCH_ID';
42
+ const ENV_MANAGED = 'MIXDOG_MANAGED_LAUNCH';
43
+
44
+ // 0x1E (ASCII Record Separator): how `mixdog-launch drain` joins multiple
45
+ // command bodies on stdout so embedded newlines in a command survive transport.
46
+ const RECORD_SEP = '\x1e';
47
+
48
+ // Names the env vars the launcher must set on the child so this module's
49
+ // managedLaunchId() resolves inside the MCP server.
50
+ export const LAUNCHER_ENV = Object.freeze({ ENV_LAUNCH_ID, ENV_MANAGED });
51
+
52
+ // Mirror of channels/lib/runtime-paths.mjs RUNTIME_ROOT resolution so the
53
+ // launcher and the MCP server agree on the queue location without importing
54
+ // the channels layer into setup/.
55
+ export function launcherRuntimeRoot() {
56
+ return process.env.MIXDOG_RUNTIME_ROOT
57
+ ? resolve(process.env.MIXDOG_RUNTIME_ROOT)
58
+ : join(tmpdir(), 'mixdog');
59
+ }
60
+
61
+ function sanitize(value) {
62
+ return String(value).replace(/[^a-zA-Z0-9._-]/g, '_');
63
+ }
64
+
65
+ export function launcherQueueDir(launchId) {
66
+ return join(launcherRuntimeRoot(), `launch-cmds-${sanitize(launchId)}`);
67
+ }
68
+
69
+ // ── Native backend resolution (canonical) ──────────────────────────────────
70
+ // Locate the Rust mixdog-launch binary built by dev-sync / cargo. Resolution
71
+ // order: explicit override → fresh live build → local cargo release build →
72
+ // shipped prebuilt.
73
+ // Returns an absolute path when present, else null (JS fallback engages).
74
+ const PLUGIN_ROOT = process.env.MIXDOG_ROOT
75
+ || resolve(dirname(fileURLToPath(import.meta.url)), '../..');
76
+ const NATIVE_LAUNCH_DEFAULT_BIN = join(
77
+ PLUGIN_ROOT,
78
+ 'native/mixdog-launch/target/release',
79
+ process.platform === 'win32' ? 'mixdog-launch.exe' : 'mixdog-launch',
80
+ );
81
+ const NATIVE_LAUNCH_LIVE_BIN = join(
82
+ PLUGIN_ROOT,
83
+ 'native/mixdog-launch/target-live/release',
84
+ process.platform === 'win32' ? 'mixdog-launch.exe' : 'mixdog-launch',
85
+ );
86
+
87
+ function nativeLaunchSourceMtime() {
88
+ let mtime = 0;
89
+ for (const rel of ['native/mixdog-launch/Cargo.toml', 'native/mixdog-launch/src/main.rs']) {
90
+ try { mtime = Math.max(mtime, statSync(join(PLUGIN_ROOT, rel)).mtimeMs); } catch {}
91
+ }
92
+ return mtime;
93
+ }
94
+
95
+ function freshNativeLaunchBin(path) {
96
+ try {
97
+ const binMtime = statSync(path).mtimeMs;
98
+ const srcMtime = nativeLaunchSourceMtime();
99
+ return binMtime > 0 && binMtime >= srcMtime ? path : null;
100
+ } catch {
101
+ return null;
102
+ }
103
+ }
104
+
105
+ // Shipped prebuilt path under native/prebuilt/<os-arch>/mixdog-launch(.exe)
106
+ function nativeLaunchPrebuiltPath() {
107
+ const arch =
108
+ process.arch === 'x64' ? 'x86_64'
109
+ : process.arch === 'arm64' ? 'aarch64'
110
+ : process.arch === 'ia32' ? 'i686'
111
+ : process.arch;
112
+ const os =
113
+ process.platform === 'win32' ? 'windows'
114
+ : process.platform === 'darwin' ? 'macos'
115
+ : 'linux';
116
+ const ext = process.platform === 'win32' ? '.exe' : '';
117
+ return join(PLUGIN_ROOT, 'native', 'prebuilt', `${os}-${arch}`, `mixdog-launch${ext}`);
118
+ }
119
+
120
+ let _nativeBinCache; // undefined = unresolved, string|null = resolved
121
+ export function nativeLaunchBin() {
122
+ if (_nativeBinCache !== undefined) return _nativeBinCache;
123
+ // Opt-out for tests / forced-JS parity checks.
124
+ if (/^(0|false|no|off|js)$/i.test(String(process.env.MIXDOG_LAUNCH_NATIVE || ''))) {
125
+ _nativeBinCache = null;
126
+ return _nativeBinCache;
127
+ }
128
+ const override = process.env.MIXDOG_LAUNCH_NATIVE_BIN;
129
+ if (override && existsSync(override)) { _nativeBinCache = override; return _nativeBinCache; }
130
+ const live = freshNativeLaunchBin(NATIVE_LAUNCH_LIVE_BIN);
131
+ if (live) { _nativeBinCache = live; return _nativeBinCache; }
132
+ const release = freshNativeLaunchBin(NATIVE_LAUNCH_DEFAULT_BIN);
133
+ if (release) { _nativeBinCache = release; return _nativeBinCache; }
134
+ // Shipped prebuilt fallback (under native/prebuilt/<os-arch>/)
135
+ const prebuilt = nativeLaunchPrebuiltPath();
136
+ if (prebuilt && existsSync(prebuilt)) { _nativeBinCache = prebuilt; return _nativeBinCache; }
137
+ _nativeBinCache = null;
138
+ return _nativeBinCache;
139
+ }
140
+
141
+ // Returns true when the native mixdog-launch binary's `bridge` subcommand is
142
+ // available for this platform (exit 0). The launcher uses this to gate the
143
+ // managed-launch interactive path — no JS stdin pipe bridge fallback.
144
+ export function nativeBridgeAvailable() {
145
+ const bin = nativeLaunchBin();
146
+ if (!bin) return false;
147
+ const r = spawnSync(bin, ['bridge', '--probe'], {
148
+ encoding: 'utf8', windowsHide: true,
149
+ stdio: ['ignore', 'pipe', 'pipe'],
150
+ });
151
+ return r.status === 0;
152
+ }
153
+
154
+ export function newLaunchId() {
155
+ return `${process.pid}-${randomUUID().slice(0, 8)}`;
156
+ }
157
+
158
+ // MCP-server side: returns the managed launch id when this process belongs to a
159
+ // `mixdog`-launched session that engaged the control bridge, else null. The
160
+ // launcher only sets MIXDOG_LAUNCH_ID once the bridge is live, so presence is
161
+ // sufficient — there is no half-managed state to disambiguate.
162
+ export function managedLaunchId() {
163
+ const id = process.env[ENV_LAUNCH_ID];
164
+ return id && String(id).length > 0 ? String(id) : null;
165
+ }
166
+
167
+ let enqueueSequence = 0;
168
+
169
+ // Writer side (inject_command / inject_input): publish one command for the
170
+ // launcher to deliver. Prefers the canonical Rust backend; the JS writer (temp
171
+ // name + rename so the watcher never sees a partial file) is the fallback.
172
+ // Returns the published path.
173
+ export function enqueueLauncherCommand(launchId, command) {
174
+ const dir = launcherQueueDir(launchId);
175
+ mkdirSync(dir, { recursive: true });
176
+ const bin = nativeLaunchBin();
177
+ if (bin) {
178
+ const r = spawnSync(bin, ['enqueue', '--dir', dir, '--command', String(command)], {
179
+ encoding: 'utf8', windowsHide: true,
180
+ });
181
+ if (r.status === 0) {
182
+ const out = String(r.stdout || '').trim();
183
+ if (out) return out;
184
+ }
185
+ // Native spawn failed / non-zero → fall through to the JS writer.
186
+ }
187
+ const seq = String(enqueueSequence++).padStart(6, '0');
188
+ const base = `${Date.now()}-${seq}-${randomUUID().slice(0, 8)}.cmd`;
189
+ const tmp = join(dir, `.${base}.tmp`);
190
+ const dst = join(dir, base);
191
+ writeFileSync(tmp, String(command), 'utf8');
192
+ renameSync(tmp, dst);
193
+ return dst;
194
+ }
195
+
196
+ // Launcher side: drain queued commands oldest-first (lexical sort on the
197
+ // timestamp-prefixed name), deleting each as it is read. Prefers the canonical
198
+ // Rust backend; the JS reader is the fallback.
199
+ export function drainLauncherCommands(launchId) {
200
+ const dir = launcherQueueDir(launchId);
201
+ const bin = nativeLaunchBin();
202
+ if (bin) {
203
+ const r = spawnSync(bin, ['drain', '--dir', dir], {
204
+ encoding: 'utf8', windowsHide: true,
205
+ });
206
+ if (r.status === 0) {
207
+ const out = String(r.stdout || '');
208
+ return out.length === 0 ? [] : out.split(RECORD_SEP);
209
+ }
210
+ // Native spawn failed / non-zero → fall through to the JS reader.
211
+ }
212
+ let entries;
213
+ try {
214
+ entries = readdirSync(dir);
215
+ } catch {
216
+ return [];
217
+ }
218
+ const out = [];
219
+ for (const name of entries.filter((f) => f.endsWith('.cmd')).sort()) {
220
+ const full = join(dir, name);
221
+ let text;
222
+ try {
223
+ text = readFileSync(full, 'utf8');
224
+ } catch {
225
+ continue;
226
+ }
227
+ try {
228
+ rmSync(full, { force: true });
229
+ } catch {}
230
+ out.push(text);
231
+ }
232
+ return out;
233
+ }
234
+
235
+ // Launcher side: poll-based watcher. fs.watch semantics differ enough across
236
+ // platforms (and miss atomic-rename publishes on some) that a short poll is the
237
+ // robust choice for this low-rate control path. Returns a stop() that also
238
+ // removes the queue directory.
239
+ export function watchLauncherCommands(launchId, onCommand, { intervalMs = 150 } = {}) {
240
+ mkdirSync(launcherQueueDir(launchId), { recursive: true });
241
+ let stopped = false;
242
+ const timer = setInterval(() => {
243
+ if (stopped) return;
244
+ for (const cmd of drainLauncherCommands(launchId)) {
245
+ try {
246
+ onCommand(cmd);
247
+ } catch {}
248
+ }
249
+ }, intervalMs);
250
+ if (typeof timer.unref === 'function') timer.unref();
251
+ return () => {
252
+ if (stopped) return;
253
+ stopped = true;
254
+ clearInterval(timer);
255
+ try {
256
+ rmSync(launcherQueueDir(launchId), { recursive: true, force: true });
257
+ } catch {}
258
+ };
259
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Per-call cost estimator for bridge-trace usage rows.
3
+ *
4
+ * Pricing is pulled from the LiteLLM catalog (already warmed by providers/
5
+ * agent bootstrap). All four token slots — input / output / cacheRead /
6
+ * cacheWrite — are multiplied by their matching $/M rate from the catalog
7
+ * and summed. Missing rates are treated as 0 (no extrapolation).
8
+ *
9
+ * The catalog is looked up synchronously: if it has not been warmed yet
10
+ * (fresh process, first call), this returns 0 without blocking. The next
11
+ * call will pick up the cache.
12
+ */
13
+
14
+ import { getModelMetadataSync } from '../../agent/orchestrator/providers/model-catalog.mjs';
15
+
16
+ // OpenAI / Codex / Gemini report `input_tokens` as the total prompt token
17
+ // count *including* the cached portion (inclusive). Anthropic reports the
18
+ // uncached remainder only and bills cached_read / cached_write as separate
19
+ // additive slots (additive). Cost and prompt-total math has to branch on this.
20
+ // OpenAI-compatible direct providers (deepseek / ollama / lmstudio)
21
+ // go through the OpenAI SDK and likewise report an inclusive prompt_tokens
22
+ // with a separate cached-tokens detail — so they are inclusive too. Omitting
23
+ // them bills the cached portion at the full input rate AND re-adds it as a
24
+ // cacheRead slot, double-billing the cache (e.g. a ~10k-token cached system
25
+ // prompt charged ~25x its real cost on every DeepSeek call).
26
+ export function isInclusiveProvider(provider) {
27
+ if (!provider) return false;
28
+ const p = String(provider).toLowerCase();
29
+ // 'grok' covers grok-oauth, which delegates inference to the xai compat
30
+ // provider (inclusive input_tokens) but reports its own provider id on
31
+ // usage rows — without it, cached tokens would be double-billed in the
32
+ // cost fallback and prompt totals.
33
+ return p.includes('openai') || p.includes('codex') || p.includes('gemini') || p.includes('google') || p.includes('xai') || p.includes('grok')
34
+ || p.includes('deepseek') || p.includes('ollama') || p.includes('lmstudio') || p.includes('groq') || p.includes('openrouter');
35
+ }
36
+
37
+ /**
38
+ * @param {object} args
39
+ * @param {string} args.model
40
+ * @param {string} [args.provider]
41
+ * @param {number} [args.inputTokens]
42
+ * @param {number} [args.outputTokens]
43
+ * @param {number} [args.cacheReadTokens]
44
+ * @param {number} [args.cacheWriteTokens]
45
+ * @returns {number} USD, rounded to 6 decimal places.
46
+ */
47
+ export function computeCostUsd(args) {
48
+ const meta = getModelMetadataSync(args?.model, args?.provider);
49
+ if (!meta) return 0;
50
+ const inputTokens = args.inputTokens || 0;
51
+ const outputTokens = args.outputTokens || 0;
52
+ const cacheReadTokens = args.cacheReadTokens || 0;
53
+ const cacheWriteTokens = args.cacheWriteTokens || 0;
54
+ const billableInput = isInclusiveProvider(args.provider)
55
+ ? Math.max(inputTokens - cacheReadTokens - cacheWriteTokens, 0)
56
+ : inputTokens;
57
+ const parts = [
58
+ billableInput * (meta.inputCostPerM || 0),
59
+ outputTokens * (meta.outputCostPerM || 0),
60
+ cacheReadTokens * (meta.cacheReadCostPerM || 0),
61
+ cacheWriteTokens * (meta.cacheWriteCostPerM || 0),
62
+ ];
63
+ const total = parts.reduce((s, x) => s + x, 0) / 1_000_000;
64
+ if (!Number.isFinite(total) || total <= 0) return 0;
65
+ return Number(total.toFixed(6));
66
+ }
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Shared HTTP connection pool for outbound LLM provider API calls.
3
+ *
4
+ * The provider modules (anthropic-oauth, openai-oauth, grok-oauth, gemini)
5
+ * call the global `fetch()` with no dispatcher, so they ride Node's default
6
+ * undici agent. That agent keeps connections alive only briefly, so after an
7
+ * idle gap the first request to a provider pays a fresh TLS handshake — a
8
+ * 100-300ms first-byte penalty observed on cold calls.
9
+ *
10
+ * This module exports ONE lazily-created singleton undici `Agent` with a long
11
+ * keep-alive window and a sane connection cap, passed as the `dispatcher`
12
+ * option on those providers' `fetch()` calls so warm sockets survive idle
13
+ * gaps. `preconnect(origin)` opens a socket ahead of the first real request
14
+ * (best-effort, errors swallowed) and is called once at provider construction.
15
+ *
16
+ * Scope note: this is deliberately NOT used by src/search/lib/web-tools.mjs,
17
+ * whose per-request Agent pins a pre-validated DNS address for SSRF safety and
18
+ * must own its own short-lived pool. LLM API origins are fixed, trusted hosts,
19
+ * so a shared long-lived pool is appropriate here.
20
+ */
21
+
22
+ import { Agent, getGlobalDispatcher, setGlobalDispatcher, request as undiciRequest } from 'undici'
23
+
24
+ let _agent = null
25
+ let _globalInstalled = false
26
+
27
+ function envInt(name, fallback) {
28
+ const raw = process.env[name]
29
+ if (!raw) return fallback
30
+ const n = Number(raw)
31
+ return Number.isFinite(n) && n > 0 ? Math.trunc(n) : fallback
32
+ }
33
+
34
+ /**
35
+ * Detect whether outbound HTTP is meant to flow through a proxy or any custom
36
+ * global dispatcher. When so, pinning our own bare keep-alive `Agent` as the
37
+ * per-request `dispatcher` would silently bypass `setGlobalDispatcher(...)` and
38
+ * env-proxy wiring — so callers must fall back to the global dispatcher.
39
+ *
40
+ * What is preserved (we step aside): explicit proxy env vars, undici's built-in
41
+ * `ProxyAgent`, and ANY non-default global dispatcher — i.e. any installed
42
+ * global whose constructor name is not `Agent` (undici's default global is a
43
+ * plain `Agent`). Our own singleton is never installed via
44
+ * `setGlobalDispatcher`, so this never self-detects.
45
+ *
46
+ * Accepted gap: a custom dispatcher deliberately constructed AS a plain undici
47
+ * `Agent` and set as the global is indistinguishable from the default here, so
48
+ * we'd keep using our shared pool. That's tolerable — such a dispatcher is
49
+ * itself a direct-connection pool (no proxy hop), so the bypass risk is minimal.
50
+ */
51
+ function proxyConfigured() {
52
+ const env = process.env
53
+ if (env.HTTP_PROXY || env.HTTPS_PROXY || env.http_proxy || env.https_proxy) return true
54
+ if (env.NODE_USE_ENV_PROXY) return true
55
+ try {
56
+ const g = getGlobalDispatcher?.()
57
+ // Any non-default global dispatcher (constructor name other than the plain
58
+ // `Agent` undici installs by default) is treated as custom — ProxyAgent,
59
+ // EnvHttpProxyAgent, MockAgent, or a user subclass — and we step aside.
60
+ if (g && g.constructor && g.constructor.name !== 'Agent') return true
61
+ } catch { /* getGlobalDispatcher unavailable — treat as no proxy */ }
62
+ return false
63
+ }
64
+
65
+ /**
66
+ * The shared singleton dispatcher for LLM API requests. Created on first use.
67
+ *
68
+ * keepAliveTimeout (~60s) keeps a socket warm across the typical idle gap
69
+ * between bridge turns; connections caps concurrent sockets per origin so a
70
+ * burst of parallel calls can't open an unbounded number of handshakes.
71
+ *
72
+ * Returns `undefined` when a proxy / any custom (non-default) global dispatcher
73
+ * is configured, so `fetch({ dispatcher: undefined })` falls back to that
74
+ * global dispatcher instead of bypassing it. `dispatcher: undefined` is a
75
+ * harmless fetch option, so call sites need no change.
76
+ */
77
+ export function getLlmDispatcher() {
78
+ if (proxyConfigured()) return undefined
79
+ if (!_agent) {
80
+ _agent = new Agent({
81
+ keepAliveTimeout: envInt('MIXDOG_LLM_KEEPALIVE_MS', 60_000),
82
+ keepAliveMaxTimeout: envInt('MIXDOG_LLM_KEEPALIVE_MAX_MS', 90_000),
83
+ connections: envInt('MIXDOG_LLM_CONNECTIONS', 16),
84
+ })
85
+ }
86
+ // mixdog standalone: separate undici instance from Node's fetch undici, so
87
+ // a per-request dispatcher throws UND_ERR_INVALID_ARG. Install globally once
88
+ // and omit the per-request dispatcher. See port-plan D7.
89
+ if (!_globalInstalled) {
90
+ try { setGlobalDispatcher(_agent); _globalInstalled = true } catch { /* fall back */ }
91
+ }
92
+ return _globalInstalled ? undefined : _agent
93
+ }
94
+
95
+ // Origins already warmed (or warming) this process, so repeated provider
96
+ // construction or multiple providers on the same host don't spam handshakes.
97
+ const _preconnected = new Set()
98
+
99
+ /**
100
+ * Best-effort warm a kept-alive socket to `origin` so the first real request
101
+ * skips the TLS handshake. Fire-and-forget: never throws, never returns a
102
+ * pending promise the caller must await.
103
+ *
104
+ * @param {string} origin e.g. 'https://api.anthropic.com'
105
+ */
106
+ export function preconnect(origin) {
107
+ try {
108
+ // With a proxy / custom global dispatcher in play we deliberately don't own
109
+ // the connection pool, so there's no warm socket to seed — no-op.
110
+ if (proxyConfigured()) return
111
+ if (!origin || typeof origin !== 'string') return
112
+ let url
113
+ try { url = new URL(origin) } catch { return }
114
+ if (url.protocol !== 'https:' && url.protocol !== 'http:') return
115
+ const key = url.origin
116
+ if (_preconnected.has(key)) return
117
+ _preconnected.add(key)
118
+ // A throwaway HEAD lands a pooled socket without fetching a body. Any
119
+ // failure (offline, DNS, 4xx/5xx) is irrelevant — the handshake is the
120
+ // point, and the real request will surface genuine errors.
121
+ undiciRequest(key, {
122
+ method: 'HEAD',
123
+ dispatcher: getLlmDispatcher(),
124
+ signal: AbortSignal.timeout(10_000),
125
+ })
126
+ .then((res) => res.body?.dump?.())
127
+ .catch(() => { /* best-effort warmup; ignore */ })
128
+ } catch { /* never let warmup break construction */ }
129
+ }
@@ -0,0 +1,37 @@
1
+ import { spawn } from 'child_process';
2
+ import { isWSL } from './wsl.mjs';
3
+
4
+ /**
5
+ * Open a URL in the user's default browser. Best-effort and non-blocking.
6
+ * Callers also print the URL, so opener failure should never block OAuth.
7
+ */
8
+ export function openInBrowser(url) {
9
+ const u = String(url);
10
+ let candidates;
11
+ if (process.platform === 'win32') {
12
+ candidates = [['rundll32', ['url.dll,FileProtocolHandler', u]]];
13
+ } else if (process.platform === 'darwin') {
14
+ candidates = [['open', [u]]];
15
+ } else if (isWSL()) {
16
+ const psUrl = `'${u.replace(/'/g, "''")}'`;
17
+ candidates = [
18
+ ['wslview', [u]],
19
+ ['powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', `Start-Process -FilePath ${psUrl}`]],
20
+ ];
21
+ } else {
22
+ candidates = [['xdg-open', [u]]];
23
+ }
24
+ tryOpenCandidates(candidates, 0);
25
+ }
26
+
27
+ function tryOpenCandidates(candidates, index) {
28
+ if (index >= candidates.length) return;
29
+ const [cmd, args] = candidates[index];
30
+ try {
31
+ const child = spawn(cmd, args, { stdio: 'ignore', detached: true, windowsHide: true });
32
+ child.on('error', () => { tryOpenCandidates(candidates, index + 1); });
33
+ child.unref();
34
+ } catch {
35
+ tryOpenCandidates(candidates, index + 1);
36
+ }
37
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Canonical resolver for the Mixdog data dir.
3
+ *
4
+ * Resolution order:
5
+ * 1. MIXDOG_DATA_DIR
6
+ * 2. <MIXDOG_HOME|~/.mixdog>/data
7
+ */
8
+
9
+ import { homedir } from 'os';
10
+ import { dirname, join } from 'path';
11
+ import { fileURLToPath } from 'url';
12
+
13
+ const DEFAULT_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..');
14
+
15
+ export function mixdogHome() {
16
+ return process.env.MIXDOG_HOME || join(homedir(), '.mixdog');
17
+ }
18
+
19
+ export function mixdogRoot() {
20
+ return process.env.MIXDOG_ROOT || DEFAULT_ROOT;
21
+ }
22
+
23
+ export function resolvePluginData() {
24
+ return process.env.MIXDOG_DATA_DIR || join(mixdogHome(), 'data');
25
+ }
@@ -0,0 +1,147 @@
1
+ 'use strict';
2
+
3
+ const SIGNAL_EXIT_CODES = {
4
+ SIGINT: 130,
5
+ SIGTERM: 143,
6
+ SIGHUP: 129,
7
+ };
8
+
9
+ function errorText(error) {
10
+ return error?.stack || error?.message || String(error);
11
+ }
12
+
13
+ function writeStderr(line) {
14
+ try { process.stderr.write(`${line}\n`); } catch {}
15
+ }
16
+
17
+ export function signalExitCode(signal, fallback = 1) {
18
+ return SIGNAL_EXIT_CODES[signal] || fallback;
19
+ }
20
+
21
+ export function waitWithTimeout(promise, timeoutMs, label = 'cleanup') {
22
+ const ms = Math.max(1, Math.floor(Number(timeoutMs) || 1));
23
+ return new Promise((resolve, reject) => {
24
+ let settled = false;
25
+ const timer = setTimeout(() => {
26
+ if (settled) return;
27
+ settled = true;
28
+ reject(new Error(`${label} timed out after ${ms}ms`));
29
+ }, ms);
30
+ if (typeof timer.unref === 'function') timer.unref();
31
+ Promise.resolve(promise)
32
+ .then((value) => {
33
+ if (settled) return;
34
+ settled = true;
35
+ clearTimeout(timer);
36
+ resolve(value);
37
+ })
38
+ .catch((error) => {
39
+ if (settled) return;
40
+ settled = true;
41
+ clearTimeout(timer);
42
+ reject(error);
43
+ });
44
+ });
45
+ }
46
+
47
+ export function installProcessSignalCleanup({
48
+ name = 'mixdog',
49
+ signals = ['SIGINT', 'SIGTERM', 'SIGHUP'],
50
+ timeoutMs = 6500,
51
+ exit = true,
52
+ fatal = true,
53
+ beforeCleanup,
54
+ cleanup,
55
+ afterCleanup,
56
+ log = writeStderr,
57
+ } = {}) {
58
+ let installed = true;
59
+ let running = false;
60
+ let hardExitTimer = null;
61
+ const handlers = [];
62
+
63
+ const removeHandlers = () => {
64
+ for (const [event, handler] of handlers.splice(0)) {
65
+ try { process.removeListener(event, handler); } catch {}
66
+ }
67
+ };
68
+
69
+ const hardExit = (code) => {
70
+ try { process.exit(code); } catch {}
71
+ };
72
+
73
+ const run = async (reason = 'process-exit', {
74
+ code = 0,
75
+ shouldExit = false,
76
+ error = null,
77
+ } = {}) => {
78
+ if (running) {
79
+ if (shouldExit) hardExit(code);
80
+ return false;
81
+ }
82
+ running = true;
83
+ removeHandlers();
84
+
85
+ if (shouldExit) {
86
+ hardExitTimer = setTimeout(() => hardExit(code), Math.max(1000, Number(timeoutMs) + 1000));
87
+ if (typeof hardExitTimer.unref === 'function') hardExitTimer.unref();
88
+ }
89
+
90
+ if (error && typeof log === 'function') {
91
+ log(`[${name}] ${reason}: ${errorText(error)}`);
92
+ }
93
+
94
+ try { beforeCleanup?.(reason, { code, error }); } catch {}
95
+ try {
96
+ if (typeof cleanup === 'function') {
97
+ await waitWithTimeout(cleanup(reason, { code, error }), timeoutMs, `${name} shutdown`);
98
+ }
99
+ } catch (cleanupError) {
100
+ if (typeof log === 'function') log(`[${name}] cleanup failed: ${errorText(cleanupError)}`);
101
+ }
102
+ try { afterCleanup?.(reason, { code, error }); } catch {}
103
+ if (hardExitTimer) {
104
+ clearTimeout(hardExitTimer);
105
+ hardExitTimer = null;
106
+ }
107
+ running = false;
108
+ if (shouldExit) hardExit(code);
109
+ return true;
110
+ };
111
+
112
+ const add = (event, handler) => {
113
+ try {
114
+ process.once(event, handler);
115
+ handlers.push([event, handler]);
116
+ } catch {}
117
+ };
118
+
119
+ for (const signal of signals) {
120
+ if (!signal) continue;
121
+ add(signal, () => {
122
+ void run(signal, { code: signalExitCode(signal), shouldExit: exit });
123
+ });
124
+ }
125
+
126
+ if (fatal) {
127
+ add('uncaughtException', (error) => {
128
+ void run('uncaughtException', { code: 1, shouldExit: exit, error });
129
+ });
130
+ add('unhandledRejection', (error) => {
131
+ void run('unhandledRejection', { code: 1, shouldExit: exit, error });
132
+ });
133
+ }
134
+
135
+ return {
136
+ run,
137
+ uninstall() {
138
+ if (!installed) return;
139
+ installed = false;
140
+ removeHandlers();
141
+ if (hardExitTimer) {
142
+ clearTimeout(hardExitTimer);
143
+ hardExitTimer = null;
144
+ }
145
+ },
146
+ };
147
+ }