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
@@ -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,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
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Canonical reader for registered schedules.
3
+ *
4
+ * `<Mixdog data dir>/schedules/<name>/` is the single source of truth.
5
+ * Each schedule directory contains `config.json` (metadata) and
6
+ * `instructions.md` (prompt body). Both the setup UI (POST /schedules)
7
+ * and the `schedule-add` skill write the same two files; every reader —
8
+ * setup-server (GET /schedules), channels/lib/config.mjs (loadConfig),
9
+ * status/aggregator.mjs — must go through listSchedules() so a single
10
+ * entry shape is presented everywhere.
11
+ *
12
+ * The legacy `mixdog-config.json` `channels.schedules.items` /
13
+ * `channels.nonInteractive` / `channels.interactive` arrays are no longer
14
+ * consulted. Migration: rename any legacy `prompt.md` to `instructions.md`
15
+ * — no in-code fallback.
16
+ */
17
+
18
+ import { readFileSync, readdirSync } from 'fs';
19
+ import { join } from 'path';
20
+ import { resolvePluginData } from './plugin-paths.mjs';
21
+
22
+ function schedulesDir() {
23
+ return join(resolvePluginData(), 'schedules');
24
+ }
25
+
26
+ function readJsonFile(path) {
27
+ try { return JSON.parse(readFileSync(path, 'utf8')); }
28
+ catch { return null; }
29
+ }
30
+
31
+ function readTextFile(path) {
32
+ try { return readFileSync(path, 'utf8'); }
33
+ catch { return ''; }
34
+ }
35
+
36
+ /**
37
+ * List every registered schedule.
38
+ *
39
+ * Return shape per entry: `{ name, ...config, prompt }`.
40
+ * - `name` is the directory name (slug).
41
+ * - Spread of `config.json` keys (time/days/type/channel/model/enabled
42
+ * when written by the setup UI; cron/timezone/mode/role when written
43
+ * by the schedule-add skill).
44
+ * - `prompt` carries `instructions.md` content (empty string when the
45
+ * file is missing — caller decides whether that is a hard error).
46
+ *
47
+ * Returns an empty array when the directory does not exist (fresh
48
+ * install with no schedules registered yet).
49
+ */
50
+ export function listSchedules() {
51
+ const dir = schedulesDir();
52
+ const out = [];
53
+ let entries;
54
+ try {
55
+ entries = readdirSync(dir, { withFileTypes: true });
56
+ } catch {
57
+ // ENOENT (fresh install, no schedules/ yet) / EACCES -> empty list.
58
+ // Replaces the previous existsSync check, which was racy: the dir
59
+ // could disappear between existsSync and readdirSync.
60
+ return out;
61
+ }
62
+ for (const ent of entries) {
63
+ if (!ent.isDirectory()) continue;
64
+ const name = ent.name;
65
+ const cfg = readJsonFile(join(dir, name, 'config.json')) || {};
66
+ const prompt = readTextFile(join(dir, name, 'instructions.md'));
67
+ out.push({ name, ...cfg, prompt });
68
+ }
69
+ return out;
70
+ }