mixdog 0.7.18 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (844) hide show
  1. package/README.md +37 -331
  2. package/package.json +67 -99
  3. package/scripts/boot-smoke.mjs +94 -0
  4. package/scripts/build-tui.mjs +52 -0
  5. package/scripts/compact-smoke.mjs +199 -0
  6. package/scripts/lead-workflow-smoke.mjs +598 -0
  7. package/scripts/live-worker-smoke.mjs +239 -0
  8. package/scripts/output-style-smoke.mjs +101 -0
  9. package/scripts/smoke-loop-report.mjs +221 -0
  10. package/scripts/smoke-loop.mjs +201 -0
  11. package/scripts/smoke.mjs +113 -0
  12. package/scripts/tool-failures.mjs +143 -0
  13. package/scripts/tool-smoke.mjs +456 -0
  14. package/src/agents/debugger/AGENT.md +3 -0
  15. package/src/agents/debugger/agent.json +6 -0
  16. package/src/agents/explore/AGENT.md +4 -0
  17. package/src/agents/explore/agent.json +6 -0
  18. package/src/agents/heavy-worker/AGENT.md +3 -0
  19. package/src/agents/heavy-worker/agent.json +6 -0
  20. package/src/agents/maintainer/AGENT.md +3 -0
  21. package/src/agents/maintainer/agent.json +6 -0
  22. package/src/agents/reviewer/AGENT.md +3 -0
  23. package/src/agents/reviewer/agent.json +6 -0
  24. package/src/agents/scheduler-task.md +3 -0
  25. package/src/agents/web-researcher/AGENT.md +3 -0
  26. package/src/agents/web-researcher/agent.json +6 -0
  27. package/src/agents/webhook-handler.md +3 -0
  28. package/src/agents/worker/AGENT.md +3 -0
  29. package/src/agents/worker/agent.json +6 -0
  30. package/src/app.mjs +90 -0
  31. package/src/cli.mjs +11 -0
  32. package/src/defaults/hidden-roles.json +72 -0
  33. package/src/defaults/mixdog-config.template.json +15 -0
  34. package/src/hooks/lib/permission-evaluator.cjs +488 -0
  35. package/src/hooks/lib/settings-loader.cjs +112 -0
  36. package/src/lib/keychain-cjs.cjs +332 -0
  37. package/src/lib/plugin-paths.cjs +28 -0
  38. package/src/lib/rules-builder.cjs +315 -0
  39. package/src/mixdog-session-runtime.mjs +3704 -0
  40. package/src/output-styles/default.md +38 -0
  41. package/src/output-styles/extreme-simple.md +17 -0
  42. package/src/output-styles/simple.md +17 -0
  43. package/src/repl.mjs +322 -0
  44. package/src/rules/bridge/00-common.md +5 -0
  45. package/src/rules/bridge/20-skip-protocol.md +11 -0
  46. package/src/rules/bridge/30-explorer.md +4 -0
  47. package/src/rules/bridge/40-cycle1-agent.md +28 -0
  48. package/src/rules/bridge/41-cycle2-agent.md +59 -0
  49. package/src/rules/lead/00-tool-lead.md +5 -0
  50. package/src/rules/lead/01-general.md +5 -0
  51. package/src/rules/lead/02-channels.md +3 -0
  52. package/src/rules/lead/04-workflow.md +12 -0
  53. package/src/rules/shared/00-language.md +3 -0
  54. package/src/rules/shared/01-tool.md +3 -0
  55. package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
  56. package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
  57. package/src/runtime/agent/orchestrator/config.mjs +446 -0
  58. package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
  59. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
  60. package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
  61. package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
  62. package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
  63. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
  64. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
  65. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
  66. package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
  67. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
  68. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
  69. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
  70. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
  71. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
  72. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
  73. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
  76. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
  77. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
  78. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
  79. package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
  80. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
  81. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
  82. package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
  83. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  84. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
  85. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
  86. package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
  87. package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
  88. package/src/runtime/agent/orchestrator/session/loop.mjs +2320 -0
  89. package/src/runtime/agent/orchestrator/session/manager.mjs +2960 -0
  90. package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
  91. package/src/runtime/agent/orchestrator/session/store.mjs +663 -0
  92. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  93. package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
  94. package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
  95. package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
  96. package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
  97. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
  98. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
  99. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
  100. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
  102. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
  103. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
  105. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
  106. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  107. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
  108. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
  109. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
  110. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  111. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
  112. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
  113. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
  114. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
  115. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
  116. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
  118. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  119. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
  120. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  121. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
  122. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
  123. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
  124. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
  125. package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
  126. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
  127. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
  128. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
  129. package/src/runtime/channels/backends/discord.mjs +781 -0
  130. package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
  131. package/src/runtime/channels/index.mjs +3309 -0
  132. package/src/runtime/channels/lib/config.mjs +285 -0
  133. package/src/runtime/channels/lib/drop-trace.mjs +71 -0
  134. package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
  135. package/src/runtime/channels/lib/holidays.mjs +138 -0
  136. package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
  137. package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
  138. package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
  139. package/src/runtime/channels/lib/scheduler.mjs +710 -0
  140. package/src/runtime/channels/lib/session-discovery.mjs +102 -0
  141. package/src/runtime/channels/lib/state-file.mjs +68 -0
  142. package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
  143. package/src/runtime/channels/lib/tool-format.mjs +124 -0
  144. package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
  145. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
  146. package/src/runtime/channels/lib/webhook.mjs +1288 -0
  147. package/src/runtime/channels/tool-defs.mjs +177 -0
  148. package/src/runtime/lib/keychain-cjs.cjs +289 -0
  149. package/src/runtime/memory/data/runtime-manifest.json +40 -0
  150. package/src/runtime/memory/index.mjs +3600 -0
  151. package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
  152. package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
  153. package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
  154. package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
  155. package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
  156. package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
  157. package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
  158. package/src/runtime/memory/lib/memory-embed.mjs +300 -0
  159. package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
  160. package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
  161. package/src/runtime/memory/lib/memory.mjs +418 -0
  162. package/src/runtime/memory/lib/pg/adapter.mjs +314 -0
  163. package/src/runtime/memory/lib/pg/process.mjs +366 -0
  164. package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
  165. package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
  166. package/src/runtime/memory/lib/trace-store.mjs +734 -0
  167. package/src/runtime/memory/tool-defs.mjs +79 -0
  168. package/src/runtime/search/index.mjs +925 -0
  169. package/src/runtime/search/lib/config.mjs +61 -0
  170. package/src/runtime/search/lib/web-tools.mjs +1278 -0
  171. package/src/runtime/search/tool-defs.mjs +64 -0
  172. package/src/runtime/shared/atomic-file.mjs +435 -0
  173. package/src/runtime/shared/background-tasks.mjs +376 -0
  174. package/src/runtime/shared/child-guardian.mjs +98 -0
  175. package/src/runtime/shared/config.mjs +393 -0
  176. package/src/runtime/shared/err-text.mjs +121 -0
  177. package/src/runtime/shared/launcher-control.mjs +259 -0
  178. package/src/runtime/shared/llm/http-agent.mjs +129 -0
  179. package/src/runtime/shared/open-url.mjs +37 -0
  180. package/src/runtime/shared/plugin-paths.mjs +25 -0
  181. package/src/runtime/shared/process-shutdown.mjs +147 -0
  182. package/src/runtime/shared/schedules-store.mjs +70 -0
  183. package/src/runtime/shared/tool-execution-contract.mjs +104 -0
  184. package/src/runtime/shared/tool-surface.mjs +950 -0
  185. package/src/runtime/shared/user-cwd.mjs +221 -0
  186. package/src/runtime/shared/user-data-guard.mjs +232 -0
  187. package/src/runtime/shared/workspace-router.mjs +259 -0
  188. package/src/standalone/bridge-tool.mjs +1414 -0
  189. package/src/standalone/channel-admin.mjs +366 -0
  190. package/src/standalone/channel-worker-preload.cjs +3 -0
  191. package/src/standalone/channel-worker.mjs +353 -0
  192. package/src/standalone/explore-tool.mjs +233 -0
  193. package/src/standalone/hook-bus.mjs +246 -0
  194. package/src/standalone/plugin-admin.mjs +247 -0
  195. package/src/standalone/provider-admin.mjs +338 -0
  196. package/src/standalone/seeds.mjs +94 -0
  197. package/src/standalone/usage-dashboard.mjs +510 -0
  198. package/src/tui/App.jsx +5438 -0
  199. package/src/tui/components/AnsiText.jsx +199 -0
  200. package/src/tui/components/ContextPanel.jsx +217 -0
  201. package/src/tui/components/Markdown.jsx +205 -0
  202. package/src/tui/components/MarkdownTable.jsx +204 -0
  203. package/src/tui/components/Message.jsx +103 -0
  204. package/src/tui/components/Picker.jsx +317 -0
  205. package/src/tui/components/PromptInput.jsx +584 -0
  206. package/src/tui/components/QueuedCommands.jsx +47 -0
  207. package/src/tui/components/SlashCommandPalette.jsx +114 -0
  208. package/src/tui/components/Spinner.jsx +317 -0
  209. package/src/tui/components/StatusLine.jsx +87 -0
  210. package/src/tui/components/TextEntryPanel.jsx +323 -0
  211. package/src/tui/components/ToolExecution.jsx +772 -0
  212. package/src/tui/components/TurnDone.jsx +78 -0
  213. package/src/tui/components/UsagePanel.jsx +331 -0
  214. package/src/tui/dist/index.mjs +12359 -0
  215. package/src/tui/engine.mjs +2410 -0
  216. package/src/tui/figures.mjs +50 -0
  217. package/src/tui/hooks/useEngine.mjs +16 -0
  218. package/src/tui/index.jsx +254 -0
  219. package/src/tui/input-editing.mjs +242 -0
  220. package/src/tui/markdown/format-token.mjs +194 -0
  221. package/src/tui/paste-attachments.mjs +198 -0
  222. package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
  223. package/src/tui/spinner-verbs.mjs +45 -0
  224. package/src/tui/theme.mjs +67 -0
  225. package/src/tui/time-format.mjs +53 -0
  226. package/src/ui/ansi.mjs +115 -0
  227. package/src/ui/markdown.mjs +195 -0
  228. package/src/ui/statusline.mjs +730 -0
  229. package/src/ui/tool-card.mjs +101 -0
  230. package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
  231. package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
  232. package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
  233. package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
  234. package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
  235. package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
  236. package/src/workflows/default/WORKFLOW.md +7 -0
  237. package/src/workflows/default/workflow.json +14 -0
  238. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  239. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  240. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  241. package/vendor/ink/build/colorize.d.ts +3 -0
  242. package/vendor/ink/build/colorize.js +48 -0
  243. package/vendor/ink/build/colorize.js.map +1 -0
  244. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  245. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  246. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  247. package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
  248. package/vendor/ink/build/components/AnimationContext.js +13 -0
  249. package/vendor/ink/build/components/AnimationContext.js.map +1 -0
  250. package/vendor/ink/build/components/App.d.ts +24 -0
  251. package/vendor/ink/build/components/App.js +554 -0
  252. package/vendor/ink/build/components/App.js.map +1 -0
  253. package/vendor/ink/build/components/AppContext.d.ts +80 -0
  254. package/vendor/ink/build/components/AppContext.js +25 -0
  255. package/vendor/ink/build/components/AppContext.js.map +1 -0
  256. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  257. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  258. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  259. package/vendor/ink/build/components/Box.d.ts +130 -0
  260. package/vendor/ink/build/components/Box.js +34 -0
  261. package/vendor/ink/build/components/Box.js.map +1 -0
  262. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  263. package/vendor/ink/build/components/CursorContext.js +8 -0
  264. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  265. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  266. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  267. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  268. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  269. package/vendor/ink/build/components/ErrorOverview.js +90 -0
  270. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  271. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  272. package/vendor/ink/build/components/FocusContext.js +17 -0
  273. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  274. package/vendor/ink/build/components/Newline.d.ts +13 -0
  275. package/vendor/ink/build/components/Newline.js +8 -0
  276. package/vendor/ink/build/components/Newline.js.map +1 -0
  277. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  278. package/vendor/ink/build/components/Spacer.js +11 -0
  279. package/vendor/ink/build/components/Spacer.js.map +1 -0
  280. package/vendor/ink/build/components/Static.d.ts +24 -0
  281. package/vendor/ink/build/components/Static.js +28 -0
  282. package/vendor/ink/build/components/Static.js.map +1 -0
  283. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  284. package/vendor/ink/build/components/StderrContext.js +13 -0
  285. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  286. package/vendor/ink/build/components/StdinContext.d.ts +28 -0
  287. package/vendor/ink/build/components/StdinContext.js +20 -0
  288. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  289. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  290. package/vendor/ink/build/components/StdoutContext.js +13 -0
  291. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  292. package/vendor/ink/build/components/Text.d.ts +55 -0
  293. package/vendor/ink/build/components/Text.js +50 -0
  294. package/vendor/ink/build/components/Text.js.map +1 -0
  295. package/vendor/ink/build/components/Transform.d.ts +16 -0
  296. package/vendor/ink/build/components/Transform.js +15 -0
  297. package/vendor/ink/build/components/Transform.js.map +1 -0
  298. package/vendor/ink/build/cursor-helpers.d.ts +39 -0
  299. package/vendor/ink/build/cursor-helpers.js +62 -0
  300. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  301. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  302. package/vendor/ink/build/devtools-window-polyfill.js +68 -0
  303. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  304. package/vendor/ink/build/devtools.d.ts +1 -0
  305. package/vendor/ink/build/devtools.js +36 -0
  306. package/vendor/ink/build/devtools.js.map +1 -0
  307. package/vendor/ink/build/dom.d.ts +62 -0
  308. package/vendor/ink/build/dom.js +143 -0
  309. package/vendor/ink/build/dom.js.map +1 -0
  310. package/vendor/ink/build/get-max-width.d.ts +3 -0
  311. package/vendor/ink/build/get-max-width.js +10 -0
  312. package/vendor/ink/build/get-max-width.js.map +1 -0
  313. package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
  314. package/vendor/ink/build/hooks/use-animation.js +87 -0
  315. package/vendor/ink/build/hooks/use-animation.js.map +1 -0
  316. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  317. package/vendor/ink/build/hooks/use-app.js +8 -0
  318. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  319. package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
  320. package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
  321. package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
  322. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  323. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  324. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  325. package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
  326. package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
  327. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  328. package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
  329. package/vendor/ink/build/hooks/use-focus.js +43 -0
  330. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  331. package/vendor/ink/build/hooks/use-input.d.ts +132 -0
  332. package/vendor/ink/build/hooks/use-input.js +126 -0
  333. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  334. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  335. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
  336. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  337. package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
  338. package/vendor/ink/build/hooks/use-paste.js +62 -0
  339. package/vendor/ink/build/hooks/use-paste.js.map +1 -0
  340. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  341. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  342. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  343. package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
  344. package/vendor/ink/build/hooks/use-stdin.js +9 -0
  345. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  346. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  347. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  348. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  349. package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
  350. package/vendor/ink/build/hooks/use-window-size.js +22 -0
  351. package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
  352. package/vendor/ink/build/index.d.ts +42 -0
  353. package/vendor/ink/build/index.js +24 -0
  354. package/vendor/ink/build/index.js.map +1 -0
  355. package/vendor/ink/build/ink.d.ts +146 -0
  356. package/vendor/ink/build/ink.js +1022 -0
  357. package/vendor/ink/build/ink.js.map +1 -0
  358. package/vendor/ink/build/input-parser.d.ts +10 -0
  359. package/vendor/ink/build/input-parser.js +194 -0
  360. package/vendor/ink/build/input-parser.js.map +1 -0
  361. package/vendor/ink/build/instances.d.ts +3 -0
  362. package/vendor/ink/build/instances.js +8 -0
  363. package/vendor/ink/build/instances.js.map +1 -0
  364. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  365. package/vendor/ink/build/kitty-keyboard.js +32 -0
  366. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  367. package/vendor/ink/build/log-update.d.ts +20 -0
  368. package/vendor/ink/build/log-update.js +261 -0
  369. package/vendor/ink/build/log-update.js.map +1 -0
  370. package/vendor/ink/build/measure-element.d.ts +20 -0
  371. package/vendor/ink/build/measure-element.js +13 -0
  372. package/vendor/ink/build/measure-element.js.map +1 -0
  373. package/vendor/ink/build/measure-text.d.ts +6 -0
  374. package/vendor/ink/build/measure-text.js +21 -0
  375. package/vendor/ink/build/measure-text.js.map +1 -0
  376. package/vendor/ink/build/output.d.ts +35 -0
  377. package/vendor/ink/build/output.js +328 -0
  378. package/vendor/ink/build/output.js.map +1 -0
  379. package/vendor/ink/build/parse-keypress.d.ts +20 -0
  380. package/vendor/ink/build/parse-keypress.js +495 -0
  381. package/vendor/ink/build/parse-keypress.js.map +1 -0
  382. package/vendor/ink/build/reconciler.d.ts +4 -0
  383. package/vendor/ink/build/reconciler.js +306 -0
  384. package/vendor/ink/build/reconciler.js.map +1 -0
  385. package/vendor/ink/build/render-background.d.ts +4 -0
  386. package/vendor/ink/build/render-background.js +25 -0
  387. package/vendor/ink/build/render-background.js.map +1 -0
  388. package/vendor/ink/build/render-border.d.ts +4 -0
  389. package/vendor/ink/build/render-border.js +84 -0
  390. package/vendor/ink/build/render-border.js.map +1 -0
  391. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  392. package/vendor/ink/build/render-node-to-output.js +162 -0
  393. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  394. package/vendor/ink/build/render-to-string.d.ts +38 -0
  395. package/vendor/ink/build/render-to-string.js +116 -0
  396. package/vendor/ink/build/render-to-string.js.map +1 -0
  397. package/vendor/ink/build/render.d.ts +176 -0
  398. package/vendor/ink/build/render.js +71 -0
  399. package/vendor/ink/build/render.js.map +1 -0
  400. package/vendor/ink/build/renderer.d.ts +8 -0
  401. package/vendor/ink/build/renderer.js +64 -0
  402. package/vendor/ink/build/renderer.js.map +1 -0
  403. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  404. package/vendor/ink/build/sanitize-ansi.js +27 -0
  405. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  406. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  407. package/vendor/ink/build/squash-text-nodes.js +36 -0
  408. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  409. package/vendor/ink/build/styles.d.ts +302 -0
  410. package/vendor/ink/build/styles.js +303 -0
  411. package/vendor/ink/build/styles.js.map +1 -0
  412. package/vendor/ink/build/utils.d.ts +9 -0
  413. package/vendor/ink/build/utils.js +19 -0
  414. package/vendor/ink/build/utils.js.map +1 -0
  415. package/vendor/ink/build/wrap-text.d.ts +3 -0
  416. package/vendor/ink/build/wrap-text.js +38 -0
  417. package/vendor/ink/build/wrap-text.js.map +1 -0
  418. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  419. package/vendor/ink/build/write-synchronized.js +9 -0
  420. package/vendor/ink/build/write-synchronized.js.map +1 -0
  421. package/vendor/ink/license +10 -0
  422. package/vendor/ink/package.json +137 -0
  423. package/.claude-plugin/marketplace.json +0 -34
  424. package/.claude-plugin/plugin.json +0 -20
  425. package/.gitattributes +0 -34
  426. package/.mcp.json +0 -14
  427. package/ARCHITECTURE.md +0 -77
  428. package/CHANGELOG.md +0 -30
  429. package/CONTRIBUTING.md +0 -45
  430. package/DATA-FLOW.md +0 -79
  431. package/LICENSE +0 -21
  432. package/SECURITY.md +0 -138
  433. package/UNINSTALL.md +0 -115
  434. package/agents/maintenance.md +0 -5
  435. package/agents/memory-classification.md +0 -30
  436. package/agents/scheduler-task.md +0 -18
  437. package/agents/webhook-handler.md +0 -27
  438. package/agents/worker.md +0 -24
  439. package/bin/bridge +0 -133
  440. package/bin/statusline-launcher.mjs +0 -82
  441. package/bin/statusline-lib.mjs +0 -581
  442. package/bin/statusline-route.mjs +0 -273
  443. package/bin/statusline.mjs +0 -638
  444. package/bun.lock +0 -927
  445. package/commands/config.md +0 -16
  446. package/commands/doctor.md +0 -13
  447. package/commands/model.md +0 -61
  448. package/commands/setup.md +0 -17
  449. package/defaults/hidden-roles.json +0 -68
  450. package/defaults/memory-chunk-prompt.md +0 -63
  451. package/defaults/mixdog-config.template.json +0 -27
  452. package/defaults/user-workflow.json +0 -8
  453. package/defaults/user-workflow.md +0 -17
  454. package/hooks/hooks.json +0 -73
  455. package/hooks/lib/active-instance.cjs +0 -77
  456. package/hooks/lib/permission-evaluator.cjs +0 -411
  457. package/hooks/lib/permission-route.cjs +0 -63
  458. package/hooks/lib/settings-loader.cjs +0 -117
  459. package/hooks/post-tool-use.cjs +0 -84
  460. package/hooks/pre-mcp-sandbox.cjs +0 -158
  461. package/hooks/pre-tool-subagent.cjs +0 -258
  462. package/hooks/session-start.cjs +0 -1493
  463. package/hooks/shim-launcher.cjs +0 -65
  464. package/hooks/turn-timer.cjs +0 -82
  465. package/lib/claude-md-writer.cjs +0 -386
  466. package/lib/keychain-cjs.cjs +0 -290
  467. package/lib/plugin-paths.cjs +0 -69
  468. package/lib/rules-builder.cjs +0 -241
  469. package/native/README.md +0 -117
  470. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  471. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  472. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  473. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  474. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  475. package/prompts/code-review.txt +0 -16
  476. package/prompts/security-audit.txt +0 -17
  477. package/rules/bridge/00-common.md +0 -39
  478. package/rules/bridge/20-skip-protocol.md +0 -18
  479. package/rules/bridge/30-explorer.md +0 -33
  480. package/rules/bridge/40-cycle1-agent.md +0 -52
  481. package/rules/bridge/41-cycle2-agent.md +0 -62
  482. package/rules/lead/00-tool-lead.md +0 -61
  483. package/rules/lead/01-general.md +0 -26
  484. package/rules/lead/02-channels.md +0 -49
  485. package/rules/lead/03-team.md +0 -27
  486. package/rules/lead/04-workflow.md +0 -20
  487. package/rules/shared/00-language.md +0 -14
  488. package/rules/shared/01-tool.md +0 -138
  489. package/scripts/bootstrap.mjs +0 -130
  490. package/scripts/bridge-unify-smoke.mjs +0 -308
  491. package/scripts/build-runtime-linux.sh +0 -348
  492. package/scripts/build-runtime-macos.sh +0 -217
  493. package/scripts/build-runtime-windows.ps1 +0 -242
  494. package/scripts/builtin-utils-smoke.mjs +0 -398
  495. package/scripts/bump.mjs +0 -80
  496. package/scripts/check-json.mjs +0 -45
  497. package/scripts/check-syntax-changed.mjs +0 -102
  498. package/scripts/check-syntax.mjs +0 -58
  499. package/scripts/code-graph-batch.test.mjs +0 -33
  500. package/scripts/config-preserve-smoke.mjs +0 -180
  501. package/scripts/doctor.mjs +0 -489
  502. package/scripts/edit-normalize-fuzz.mjs +0 -130
  503. package/scripts/edit-normalize-smoke.mjs +0 -401
  504. package/scripts/edit-operation-smoke.mjs +0 -369
  505. package/scripts/edit2-smoke.mjs +0 -63
  506. package/scripts/ensure-deps.mjs +0 -259
  507. package/scripts/fuzzy-e2e.mjs +0 -28
  508. package/scripts/fuzzy-smoke.mjs +0 -26
  509. package/scripts/gateway-model.mjs +0 -596
  510. package/scripts/generate-runtime-manifest.mjs +0 -166
  511. package/scripts/guard-smoke.mjs +0 -66
  512. package/scripts/hidden-role-schema-smoke.mjs +0 -162
  513. package/scripts/hook-routing-smoke.mjs +0 -29
  514. package/scripts/inject-input.ps1 +0 -204
  515. package/scripts/io-complex-smoke.mjs +0 -667
  516. package/scripts/io-explore-bench.mjs +0 -424
  517. package/scripts/io-guardrails-smoke.mjs +0 -205
  518. package/scripts/io-mini-bench-baseline.json +0 -11
  519. package/scripts/io-mini-bench.mjs +0 -216
  520. package/scripts/io-route-harness.mjs +0 -933
  521. package/scripts/io-telemetry-report.mjs +0 -691
  522. package/scripts/lib/gateway-inventory.mjs +0 -178
  523. package/scripts/lib/gateway-settings.mjs +0 -78
  524. package/scripts/mutation-bench.mjs +0 -564
  525. package/scripts/mutation-io-smoke.mjs +0 -1097
  526. package/scripts/native-patch-bridge-smoke.mjs +0 -288
  527. package/scripts/native-patch-smoke.mjs +0 -304
  528. package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
  529. package/scripts/patch-interior-context-smoke.mjs +0 -49
  530. package/scripts/patch-newline-utf8-smoke.mjs +0 -157
  531. package/scripts/perf-hook-smoke.mjs +0 -71
  532. package/scripts/permission-eval-smoke.mjs +0 -443
  533. package/scripts/prep-patch.mjs +0 -53
  534. package/scripts/prep-shim.mjs +0 -96
  535. package/scripts/provider-cache-smoke.mjs +0 -687
  536. package/scripts/report-runtime-health.mjs +0 -132
  537. package/scripts/resolve-bun.mjs +0 -60
  538. package/scripts/run-mcp.mjs +0 -1473
  539. package/scripts/salvage-v4a-shatter.test.mjs +0 -58
  540. package/scripts/scoped-cache-io-smoke.mjs +0 -103
  541. package/scripts/shell-policy-round3-smoke.mjs +0 -46
  542. package/scripts/smoke-runtime-negative.ps1 +0 -100
  543. package/scripts/smoke-runtime-negative.sh +0 -95
  544. package/scripts/stall-policy-smoke.mjs +0 -50
  545. package/scripts/start-memory-worker.mjs +0 -23
  546. package/scripts/statusline-launcher-smoke.mjs +0 -235
  547. package/scripts/stress-atomic-write.mjs +0 -1028
  548. package/scripts/test-fault-inject.mjs +0 -164
  549. package/scripts/test-large-file.mjs +0 -174
  550. package/scripts/tool-edge-smoke.mjs +0 -209
  551. package/scripts/uninstall.mjs +0 -238
  552. package/scripts/webhook-selfheal-smoke.mjs +0 -27
  553. package/scripts/write-overwrite-guard-smoke.mjs +0 -56
  554. package/server-main.mjs +0 -3350
  555. package/server.mjs +0 -468
  556. package/setup/config-merge.mjs +0 -246
  557. package/setup/install.mjs +0 -574
  558. package/setup/launch-core.mjs +0 -617
  559. package/setup/launch.mjs +0 -101
  560. package/setup/locate-claude.mjs +0 -56
  561. package/setup/mixdog-cli.mjs +0 -122
  562. package/setup/setup-server.mjs +0 -3305
  563. package/setup/setup.html +0 -3740
  564. package/setup/tui.mjs +0 -325
  565. package/skills/retro-skill-proposer/SKILL.md +0 -92
  566. package/skills/schedule-add/SKILL.md +0 -77
  567. package/skills/setup/SKILL.md +0 -356
  568. package/skills/webhook-add/SKILL.md +0 -81
  569. package/src/agent/bridge-stall-watchdog.mjs +0 -337
  570. package/src/agent/index.mjs +0 -2229
  571. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
  572. package/src/agent/orchestrator/bridge-retry.mjs +0 -220
  573. package/src/agent/orchestrator/bridge-trace.mjs +0 -601
  574. package/src/agent/orchestrator/cache-mtime.mjs +0 -58
  575. package/src/agent/orchestrator/config.mjs +0 -405
  576. package/src/agent/orchestrator/context/collect.mjs +0 -651
  577. package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
  578. package/src/agent/orchestrator/drain-registry.mjs +0 -50
  579. package/src/agent/orchestrator/explore-validator.mjs +0 -8
  580. package/src/agent/orchestrator/internal-roles.mjs +0 -118
  581. package/src/agent/orchestrator/internal-tools.mjs +0 -88
  582. package/src/agent/orchestrator/jobs.mjs +0 -116
  583. package/src/agent/orchestrator/mcp/client.mjs +0 -364
  584. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1884
  585. package/src/agent/orchestrator/providers/anthropic.mjs +0 -598
  586. package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
  587. package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
  588. package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
  589. package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
  590. package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
  591. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
  592. package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
  593. package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
  594. package/src/agent/orchestrator/providers/registry.mjs +0 -192
  595. package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
  596. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
  597. package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
  598. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
  599. package/src/agent/orchestrator/session/loop.mjs +0 -1619
  600. package/src/agent/orchestrator/session/manager.mjs +0 -1991
  601. package/src/agent/orchestrator/session/result-classification.mjs +0 -65
  602. package/src/agent/orchestrator/session/store.mjs +0 -632
  603. package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
  604. package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
  605. package/src/agent/orchestrator/session/trim.mjs +0 -491
  606. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
  607. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
  608. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
  609. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
  610. package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
  611. package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
  612. package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
  613. package/src/agent/orchestrator/stall-policy.mjs +0 -201
  614. package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
  615. package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
  616. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -511
  617. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
  618. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
  619. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
  620. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
  621. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
  622. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
  623. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
  624. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
  625. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
  626. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
  627. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
  628. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
  629. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
  630. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
  631. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
  632. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
  633. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
  634. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
  635. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
  636. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
  637. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
  638. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
  639. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
  640. package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
  641. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
  642. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
  643. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
  644. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
  645. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
  646. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
  647. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
  648. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
  649. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
  650. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
  651. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
  652. package/src/agent/orchestrator/tools/builtin.mjs +0 -503
  653. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
  654. package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
  655. package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
  656. package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
  657. package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
  658. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
  659. package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
  660. package/src/agent/orchestrator/tools/host-input.mjs +0 -204
  661. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
  662. package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
  663. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
  664. package/src/agent/orchestrator/tools/patch.mjs +0 -2754
  665. package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
  666. package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
  667. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
  668. package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
  669. package/src/agent/orchestrator/workflow-store.mjs +0 -93
  670. package/src/agent/tool-defs.mjs +0 -110
  671. package/src/channels/backends/discord.mjs +0 -784
  672. package/src/channels/data/voice-runtime-manifest.json +0 -138
  673. package/src/channels/index.mjs +0 -3268
  674. package/src/channels/lib/config.mjs +0 -292
  675. package/src/channels/lib/drop-trace.mjs +0 -71
  676. package/src/channels/lib/event-pipeline.mjs +0 -81
  677. package/src/channels/lib/holidays.mjs +0 -138
  678. package/src/channels/lib/hook-pipe-server.mjs +0 -822
  679. package/src/channels/lib/output-forwarder.mjs +0 -765
  680. package/src/channels/lib/runtime-paths.mjs +0 -552
  681. package/src/channels/lib/scheduler.mjs +0 -723
  682. package/src/channels/lib/session-discovery.mjs +0 -103
  683. package/src/channels/lib/state-file.mjs +0 -68
  684. package/src/channels/lib/status-snapshot.mjs +0 -219
  685. package/src/channels/lib/tool-format.mjs +0 -140
  686. package/src/channels/lib/transcript-discovery.mjs +0 -195
  687. package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
  688. package/src/channels/lib/webhook.mjs +0 -1318
  689. package/src/channels/tool-defs.mjs +0 -170
  690. package/src/daemon/host.mjs +0 -118
  691. package/src/daemon/mcp-transport.mjs +0 -47
  692. package/src/daemon/session.mjs +0 -100
  693. package/src/daemon/thin-client.mjs +0 -71
  694. package/src/daemon/transport.mjs +0 -163
  695. package/src/gateway/claude-current.mjs +0 -255
  696. package/src/gateway/oauth-usage.mjs +0 -598
  697. package/src/gateway/route-meta.mjs +0 -629
  698. package/src/gateway/server.mjs +0 -713
  699. package/src/memory/data/runtime-manifest.json +0 -40
  700. package/src/memory/index.mjs +0 -3332
  701. package/src/memory/lib/core-memory-store.mjs +0 -330
  702. package/src/memory/lib/embedding-provider.mjs +0 -269
  703. package/src/memory/lib/embedding-worker.mjs +0 -323
  704. package/src/memory/lib/memory-cycle1.mjs +0 -645
  705. package/src/memory/lib/memory-cycle2.mjs +0 -1284
  706. package/src/memory/lib/memory-cycle3.mjs +0 -540
  707. package/src/memory/lib/memory-embed.mjs +0 -299
  708. package/src/memory/lib/memory-ops-policy.mjs +0 -190
  709. package/src/memory/lib/memory-recall-store.mjs +0 -638
  710. package/src/memory/lib/memory.mjs +0 -412
  711. package/src/memory/lib/pg/adapter.mjs +0 -308
  712. package/src/memory/lib/pg/process.mjs +0 -360
  713. package/src/memory/lib/pg/supervisor.mjs +0 -396
  714. package/src/memory/lib/runtime-fetcher.mjs +0 -458
  715. package/src/memory/lib/trace-store.mjs +0 -728
  716. package/src/memory/tool-defs.mjs +0 -79
  717. package/src/search/index.mjs +0 -1173
  718. package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
  719. package/src/search/lib/backends/exa.mjs +0 -50
  720. package/src/search/lib/backends/firecrawl.mjs +0 -61
  721. package/src/search/lib/backends/gemini-api.mjs +0 -83
  722. package/src/search/lib/backends/grok-oauth.mjs +0 -86
  723. package/src/search/lib/backends/index.mjs +0 -150
  724. package/src/search/lib/backends/openai-api.mjs +0 -144
  725. package/src/search/lib/backends/openai-oauth.mjs +0 -102
  726. package/src/search/lib/backends/openai-web-search.mjs +0 -76
  727. package/src/search/lib/backends/tavily.mjs +0 -55
  728. package/src/search/lib/backends/xai-api.mjs +0 -113
  729. package/src/search/lib/config.mjs +0 -192
  730. package/src/search/lib/provider-usage.mjs +0 -67
  731. package/src/search/lib/providers.mjs +0 -47
  732. package/src/search/lib/search-intent.mjs +0 -109
  733. package/src/search/lib/setup-handler.mjs +0 -261
  734. package/src/search/lib/web-tools.mjs +0 -1219
  735. package/src/search/tool-defs.mjs +0 -83
  736. package/src/setup/defender-exclusion.mjs +0 -183
  737. package/src/shared/atomic-file.mjs +0 -436
  738. package/src/shared/config.mjs +0 -372
  739. package/src/shared/daemon-recycle.mjs +0 -108
  740. package/src/shared/disable-claude-builtins.mjs +0 -91
  741. package/src/shared/err-text.mjs +0 -12
  742. package/src/shared/llm/http-agent.mjs +0 -123
  743. package/src/shared/open-url.mjs +0 -62
  744. package/src/shared/plugin-paths.mjs +0 -58
  745. package/src/shared/schedules-store.mjs +0 -70
  746. package/src/shared/seed.mjs +0 -161
  747. package/src/shared/user-cwd.mjs +0 -225
  748. package/src/shared/user-data-guard.mjs +0 -244
  749. package/src/status/aggregator.mjs +0 -584
  750. package/src/status/server.mjs +0 -413
  751. package/tools.json +0 -1671
  752. /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
  753. /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
  754. /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
  755. /package/{lib → src/lib}/config-cjs.cjs +0 -0
  756. /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
  757. /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
  758. /package/{lib → src/lib}/text-utils.cjs +0 -0
  759. /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
  760. /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
  761. /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
  762. /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
  763. /package/src/{agent → runtime/agent}/orchestrator/session/cache/post-edit-marks.mjs +0 -0
  764. /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
  765. /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
  766. /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
  767. /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
  768. /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
  769. /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
  770. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/advisory-lock.mjs +0 -0
  771. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
  772. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
  773. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
  774. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
  775. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
  776. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
  777. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
  778. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
  779. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
  780. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
  781. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
  782. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
  783. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
  784. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
  785. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
  786. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
  787. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
  788. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
  789. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
  790. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
  791. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
  792. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
  793. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
  794. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
  795. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
  796. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
  797. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
  798. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
  799. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
  800. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
  801. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
  802. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
  803. /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
  804. /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
  805. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
  806. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
  807. /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
  808. /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
  809. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
  810. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
  811. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
  812. /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
  813. /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
  814. /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
  815. /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
  816. /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
  817. /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
  818. /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
  819. /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
  820. /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
  821. /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
  822. /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
  823. /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
  824. /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
  825. /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
  826. /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
  827. /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
  828. /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
  829. /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
  830. /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
  831. /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
  832. /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
  833. /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
  834. /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
  835. /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
  836. /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
  837. /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
  838. /package/src/{search → runtime/search}/lib/state.mjs +0 -0
  839. /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
  840. /package/src/{shared → runtime/shared}/llm/cost.mjs +0 -0
  841. /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
  842. /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
  843. /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
  844. /package/src/{shared → runtime/shared}/wsl.mjs +0 -0
@@ -1,118 +0,0 @@
1
- /**
2
- * Internal hidden roles — plugin-managed, user-untouchable.
3
- *
4
- * Unlike user-workflow.json roles (which the user defines and edits freely),
5
- * these roles are NEVER exposed to callers of the `bridge` MCP tool. They are
6
- * invoked only by internal MCP handlers (explore / recall / search) and carry
7
- * their own system prompt + tool-set policy.
8
- *
9
- * Lookup order (bridge-llm.resolvePresetName):
10
- * 1. explicit preset arg
11
- * 2. opts.preset
12
- * 3. hidden-role registry (defaults/hidden-roles.json) ← plugin-internal
13
- * 4. user-workflow.json[role] ← user-owned
14
- *
15
- * Role definitions live in defaults/hidden-roles.json. Editing that file is a
16
- * plugin-code change; users cannot break the dispatch path by touching their
17
- * workflow JSON.
18
- *
19
- * The preset names refer to entries seeded in mixdog-config.json (agent.presets)
20
- * via DEFAULT_PRESETS (see config.mjs). If the user deletes the referenced preset
21
- * from their config the hidden roles degrade gracefully — `resolvePresetName`
22
- * returns a name, but session creation will fail with a clear "preset not
23
- * found" error rather than silently mis-dispatching.
24
- *
25
- * Kind classification:
26
- * - 'retrieval' : short-lived MCP-invoked hidden retrieval roles (explore).
27
- * BP2 is cache-aligned with public `worker` (collect.mjs).
28
- * - 'maintenance' : background-trigger hidden roles (memory cycle, recap, scheduler,
29
- * webhook). Receive only their own self section in BP2.
30
- *
31
- * Permission classification:
32
- * - 'read' : read-only — write/edit/bash blocked at loop.mjs runtime
33
- * guard with the same error string public read-only roles see.
34
- * - 'read-write' : full tool surface — used by hidden roles that legitimately
35
- * mutate state (scheduler-task launches commands,
36
- * webhook-handler persists payloads). bridge-llm honors this
37
- * declaratively instead of forcing every hidden role to 'read'.
38
- *
39
- * Tool schema profile:
40
- * - 'unified' : shared bridge tool schema for provider cache reuse.
41
- * - 'llm-only' : no tools exposed; pure transform/classifier roles.
42
- */
43
-
44
- import { fileURLToPath } from 'url'
45
- import { readFileSync } from 'fs'
46
- import { join, dirname } from 'path'
47
-
48
- // Load hidden-role definitions from defaults/hidden-roles.json at module
49
- // initialisation. CLAUDE_PLUGIN_ROOT points to the plugin root directory
50
- // (same pattern used by bridge-llm.mjs pluginRoot()). Falls back to a
51
- // path derived from import.meta.url (3 levels up from src/agent/orchestrator/)
52
- // so tests and standalone scripts work without the env var.
53
- function _loadHiddenRoles() {
54
- const root = process.env.CLAUDE_PLUGIN_ROOT
55
- || join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..')
56
- try {
57
- const raw = JSON.parse(readFileSync(join(root, 'defaults', 'hidden-roles.json'), 'utf8'))
58
- const map = Object.create(null)
59
- for (const entry of (raw.roles || [])) {
60
- if (entry && entry.name) map[entry.name] = Object.freeze({ ...entry })
61
- }
62
- return Object.freeze(map)
63
- } catch (err) {
64
- // Fail loudly — a missing or malformed hidden-roles.json breaks dispatch.
65
- throw new Error(`[internal-roles] failed to load defaults/hidden-roles.json: ${err.message}`)
66
- }
67
- }
68
-
69
- const _HIDDEN_ROLES = _loadHiddenRoles()
70
-
71
- /**
72
- * Return the hidden-role definition, or null if the name is not internal.
73
- */
74
- export function getHiddenRole(name) {
75
- if (!name) return null
76
- return _HIDDEN_ROLES[name] || null
77
- }
78
-
79
- /**
80
- * Resolve permission stamped on a bridge session. Hidden roles declared
81
- * `permission: 'read'` are read-locked — caller opts cannot upgrade them.
82
- */
83
- export function resolveBridgeSessionPermission(role, callerPermission) {
84
- const hidden = getHiddenRole(role)
85
- if (hidden && hidden.permission === 'read') return 'read'
86
- if (callerPermission != null && callerPermission !== '') return callerPermission
87
- if (hidden?.permission) return hidden.permission
88
- return null
89
- }
90
-
91
- /**
92
- * Boolean check — useful for branching inside bridge-llm / session-manager.
93
- */
94
- export function isHiddenRole(name) {
95
- if (!name) return false
96
- return Object.prototype.hasOwnProperty.call(_HIDDEN_ROLES, name)
97
- }
98
-
99
- /**
100
- * List all hidden role names. Used by diagnostics / setup UI guards to ensure
101
- * a user-defined role doesn't collide with an internal one.
102
- */
103
- export function listHiddenRoleNames() {
104
- return Object.keys(_HIDDEN_ROLES)
105
- }
106
-
107
- /**
108
- * List hidden role names matching a given kind ('retrieval' | 'maintenance').
109
- * Consumed by collect.mjs to drive BP2 cache shard classification dynamically
110
- * instead of hard-coding role-name sets.
111
- */
112
- export function listHiddenRolesByKind(kind) {
113
- const out = []
114
- for (const [name, def] of Object.entries(_HIDDEN_ROLES)) {
115
- if (def.kind === kind) out.push(name)
116
- }
117
- return out
118
- }
@@ -1,88 +0,0 @@
1
- /**
2
- * Internal tool registry — in-process tools exposed to external LLMs via bridge.
3
- *
4
- * Populated by agent/index.mjs.handleToolCall when the server injects a
5
- * context carrying { toolExecutor, internalTools }. The executor dispatches
6
- * to the plugin's existing module router (worker IPC for memory/channels,
7
- * in-process loadModule for search). No MCP loopback, no HTTP hop.
8
- *
9
- * Orchestrator modules (session/manager.mjs, session/loop.mjs) import from
10
- * here instead of going through mcp/client.mjs for internal tools.
11
- *
12
- * Permission enforcement: bridge-worker tool calls (including internal tools)
13
- * are gated by _checkWorkerPermission() in session/loop.mjs BEFORE reaching
14
- * executeTool() → executeInternalTool(). No duplicate check is needed here;
15
- * the loop is the single enforcement point for all dispatch paths.
16
- */
17
-
18
- let _executor = null;
19
- let _tools = [];
20
- let _names = new Set();
21
-
22
- let _bootReady = false;
23
- let _bootResolver = null;
24
- const _bootPromise = new Promise((r) => { _bootResolver = r; });
25
- export function markBootReady() { if (_bootReady) return; _bootReady = true; _bootResolver(); }
26
- export async function awaitBootReady(timeoutMs = 2000) { if (_bootReady) return; await Promise.race([_bootPromise, new Promise((r) => setTimeout(r, timeoutMs))]); }
27
-
28
- // Per-tool executor overrides. Populated by addInternalTools() for extra
29
- // internal tools that bypass the main dispatch (tools.json + dispatchTool).
30
- const _overrides = new Map();
31
-
32
- export function setInternalToolsProvider({ executor, tools }) {
33
- if (typeof executor !== 'function') throw new Error('internal-tools: executor must be a function');
34
- _executor = executor;
35
- const base = Array.isArray(tools) ? [...tools] : [];
36
- // Re-registration (handleToolCall idempotent fallback) must preserve any
37
- // override-backed tools previously registered via addInternalTools.
38
- if (_overrides.size > 0) {
39
- const baseNames = new Set(base.map(t => t?.name).filter(Boolean));
40
- for (const [name] of _overrides) {
41
- if (baseNames.has(name)) continue;
42
- const existing = _tools.find(t => t?.name === name);
43
- if (existing) base.push(existing);
44
- }
45
- }
46
- _tools = base;
47
- _names = new Set(_tools.map(t => t?.name).filter(Boolean));
48
- }
49
-
50
- /**
51
- * Register additional tools that aren't declared in tools.json — each comes
52
- * with its own executor.
53
- *
54
- * Re-registration is idempotent; later calls overwrite earlier entries with
55
- * the same name.
56
- */
57
- export function getInternalTools() {
58
- return _tools;
59
- }
60
-
61
- export function isInternalTool(name) {
62
- return _names.has(name);
63
- }
64
-
65
- export async function executeInternalTool(name, args, callerCtx = {}) {
66
- if (!_names.has(name)) throw new Error(`internal-tools: "${name}" is not registered`);
67
- const override = _overrides.get(name);
68
- if (override) {
69
- const result = await override(args ?? {}, callerCtx);
70
- return _normalize(result);
71
- }
72
- if (!_executor) throw new Error(`internal-tools: executor not initialized (tool=${name})`);
73
- const result = await _executor(name, args ?? {}, callerCtx);
74
- return _normalize(result);
75
- }
76
-
77
- // Mirror executeMcpTool's shape normalization so the session loop sees a
78
- // plain string either way. Worker/module handlers return the MCP-shaped
79
- // `{ content: [{type:'text', text}] }` envelope directly.
80
- function _normalize(result) {
81
- if (result && typeof result === 'object' && Array.isArray(result.content)) {
82
- return result.content
83
- .map((c) => (c?.type === 'text' ? c.text || '' : JSON.stringify(c)))
84
- .join('\n');
85
- }
86
- if (typeof result === 'string') return result;
87
- return JSON.stringify(result);
88
- }
@@ -1,116 +0,0 @@
1
- import { join } from 'path';
2
- import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
3
- import { randomUUID } from 'crypto';
4
- import { getPluginData } from './config.mjs';
5
- import { writeJsonAtomicSync } from '../../shared/atomic-file.mjs';
6
- function getJobsDir() {
7
- const dir = join(getPluginData(), 'jobs');
8
- if (!existsSync(dir))
9
- mkdirSync(dir, { recursive: true });
10
- return dir;
11
- }
12
- function stateFilePath() {
13
- return join(getJobsDir(), 'state.json');
14
- }
15
- function jobFilePath(jobId) {
16
- return join(getJobsDir(), `${jobId}.json`);
17
- }
18
- function _readStateFromDisk() {
19
- const p = stateFilePath();
20
- if (!existsSync(p))
21
- return [];
22
- try {
23
- return JSON.parse(readFileSync(p, 'utf-8'));
24
- }
25
- catch {
26
- return [];
27
- }
28
- }
29
-
30
- // In-memory cache + 200ms debounce so a running→stage→done flurry writes once.
31
- let _stateCache = null;
32
- let _stateFlushTimer = null;
33
- function _flushState() {
34
- _stateFlushTimer = null;
35
- if (_stateCache === null) return;
36
- const p = stateFilePath();
37
- try {
38
- writeJsonAtomicSync(p, _stateCache, { lock: true });
39
- } catch { /* best-effort */ }
40
- }
41
- function writeState(state) {
42
- _stateCache = state;
43
- if (_stateFlushTimer) return; // coalesce: latest _stateCache written on flush
44
- _stateFlushTimer = setTimeout(_flushState, 200);
45
- }
46
-
47
- export function drainJobs() {
48
- if (_stateFlushTimer === null || _stateCache === null) return;
49
- clearTimeout(_stateFlushTimer);
50
- _flushState();
51
- }
52
- // SIGTERM/SIGINT drain runs through drain-registry.mjs; bare 'exit' hook
53
- // stays as an idempotent backup for cases where the registry already ran.
54
- process.on('exit', drainJobs);
55
-
56
- // Module-level mutex: serializes all state R/M/W in this process.
57
- let _stateLock = Promise.resolve();
58
-
59
- export function createJob(sessionId, prompt, context, { scopeKey, lane } = {}) {
60
- const jobId = `job_${randomUUID()}`;
61
- const now = new Date().toISOString();
62
- const detail = {
63
- jobId,
64
- sessionId,
65
- status: 'running',
66
- scopeKey: scopeKey || null,
67
- lane: lane || null,
68
- request: { prompt, context },
69
- startedAt: now,
70
- };
71
- // Write detail file first (unique path — no contention).
72
- writeFileSync(jobFilePath(jobId), JSON.stringify(detail, null, 2));
73
- // Mutate _stateCache synchronously so immediate same-process listJobs() sees the new job.
74
- const newEntry = { jobId, sessionId, status: 'running', startedAt: now, lane: lane || null };
75
- if (_stateCache !== null) {
76
- _stateCache.push(newEntry);
77
- } else {
78
- _stateCache = [..._readStateFromDisk(), newEntry];
79
- }
80
- // Serialize disk persistence only (cache already updated above).
81
- _stateLock = _stateLock.then(() => {
82
- try {
83
- writeState(_stateCache ?? []);
84
- } catch { /* best-effort */ }
85
- });
86
- return jobId;
87
- }
88
- export function completeJob(jobId, result, failed = false) {
89
- const now = new Date().toISOString();
90
- const status = failed ? 'failed' : 'completed';
91
- // Mutate _stateCache synchronously so immediate same-process reads see updated status.
92
- if (_stateCache === null) _stateCache = _readStateFromDisk();
93
- const syncEntry = _stateCache.find(j => j.jobId === jobId);
94
- if (syncEntry) {
95
- syncEntry.status = status;
96
- syncEntry.finishedAt = now;
97
- }
98
- // Serialize disk persistence only (cache already updated above).
99
- _stateLock = _stateLock.then(() => {
100
- try {
101
- writeState(_stateCache ?? []);
102
- } catch { /* best-effort */ }
103
- });
104
- // Update detail file
105
- const detailPath = jobFilePath(jobId);
106
- if (existsSync(detailPath)) {
107
- try {
108
- const detail = JSON.parse(readFileSync(detailPath, 'utf-8'));
109
- detail.status = status;
110
- detail.result = result;
111
- detail.finishedAt = now;
112
- writeFileSync(detailPath, JSON.stringify(detail, null, 2));
113
- }
114
- catch { /* ignore corrupt file */ }
115
- }
116
- }
@@ -1,364 +0,0 @@
1
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
- import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
4
- import { readFileSync, existsSync, readdirSync, mkdirSync, writeFileSync } from 'fs';
5
- import { join } from 'path';
6
- import { tmpdir, homedir } from 'os';
7
- import { randomUUID } from 'crypto';
8
- import { DEFAULT_MARKETPLACE } from '../../../shared/plugin-paths.mjs';
9
- import { smartReadTruncate } from '../tools/builtin/read-formatting.mjs';
10
- // --- Types ---
11
- /** Known auto-detect targets: port file path relative to tmpdir.
12
- * Note: `mixdog` used to self-loopback via active-instance.json's
13
- * httpPort, but that path went through channels' owner HTTP server which
14
- * only exposes a subset of tools. The plugin's own tools are now injected
15
- * in-process through agent's toolExecutor (see orchestrator/internal-tools),
16
- * so this registry is for genuinely external port-based MCP targets only. */
17
- const AUTO_DETECT_PORTS = {
18
- 'mixdog-memory': { dir: 'mixdog', file: 'active-instance.json', portField: 'memory_port', endpoint: '/mcp' },
19
- };
20
- const DEFAULT_MCP_CALL_TIMEOUT_MS = 0;
21
- // --- State ---
22
- const servers = new Map();
23
- // Memo for mcpToolHasField(name, field) — keyed by `${toolName}|${field}`.
24
- // The lookup (regex parse + servers Map get + tools.find + schema property
25
- // inspection) runs on every MCP tool invocation but its result only changes
26
- // when the servers/tools registry is (re)built. Cleared at every registry
27
- // mutation point (connectServer / disconnectAll) so a stale positive or
28
- // negative can never survive a tools-list change.
29
- const _mcpToolFieldMemo = new Map();
30
- function _invalidateMcpToolFieldMemo() {
31
- _mcpToolFieldMemo.clear();
32
- }
33
- // --- Public API ---
34
- /**
35
- * Connect to MCP servers defined in config.
36
- * Supports stdio (child process) and http (Streamable HTTP) transports.
37
- */
38
- export async function connectMcpServers(config) {
39
- const failures = [];
40
- for (const [name, cfg] of Object.entries(config)) {
41
- try {
42
- await connectServer(name, cfg);
43
- }
44
- catch (err) {
45
- const msg = err instanceof Error ? err.message : String(err);
46
- process.stderr.write(`[mcp-client] Failed to connect "${name}": ${msg}\n`);
47
- failures.push({ name, msg });
48
- }
49
- }
50
- if (failures.length > 0) {
51
- const detail = failures.map(f => `${f.name}: ${f.msg}`).join('; ');
52
- throw new Error(`[mcp-client] ${failures.length} MCP server(s) failed to connect — ${detail}`);
53
- }
54
- }
55
- /**
56
- * Get all tool definitions from connected MCP servers.
57
- * Tool names are prefixed: `mcp__{serverName}__{toolName}`
58
- */
59
- export function getMcpTools() {
60
- const tools = [];
61
- for (const server of servers.values()) {
62
- tools.push(...server.tools);
63
- }
64
- return tools;
65
- }
66
- /**
67
- * Execute an MCP tool call.
68
- * Name format: `mcp__{serverName}__{toolName}`
69
- */
70
- export async function executeMcpTool(name, args) {
71
- // Parse: mcp__{server}__{tool}
72
- const match = name.match(/^mcp__(.+?)__(.+)$/);
73
- if (!match)
74
- throw new Error(`Not an MCP tool name: ${name}`);
75
- const [, serverName, toolName] = match;
76
- const server = servers.get(serverName);
77
- if (!server)
78
- throw new Error(`MCP server "${serverName}" not connected`);
79
- let result;
80
- try {
81
- result = await _callToolWithTimeout(server, toolName, args);
82
- } catch (firstErr) {
83
- const firstMsg = firstErr instanceof Error ? firstErr.message : String(firstErr);
84
- if (isMcpToolCallTimeoutError(firstErr)) {
85
- process.stderr.write(`[mcp-client] Tool call timed out; skipping reconnect retry for "${serverName}/${toolName}".\n`);
86
- throw firstErr;
87
- }
88
- process.stderr.write(`[mcp-client] Tool call failed, attempting reconnect...\n`);
89
- await new Promise(r => setTimeout(r, 500));
90
- try {
91
- await server.client.close();
92
- } catch { /* ignore close error */ }
93
- try {
94
- await connectServer(serverName, server.cfg);
95
- } catch (reconnectErr) {
96
- const reconnectMsg = reconnectErr instanceof Error ? reconnectErr.message : String(reconnectErr);
97
- throw new Error(`Tool call failed: ${firstMsg}; reconnect also failed: ${reconnectMsg}`);
98
- }
99
- const retryServer = servers.get(serverName);
100
- if (!retryServer) {
101
- throw new Error(`Tool call failed: ${firstMsg}; reconnect succeeded but server "${serverName}" entry is missing from registry`);
102
- }
103
- try {
104
- result = await _callToolWithTimeout(retryServer, toolName, args);
105
- } catch (retryErr) {
106
- const retryMsg = retryErr instanceof Error ? retryErr.message : String(retryErr);
107
- throw new Error(`Tool call failed: ${firstMsg}; retry after reconnect also failed: ${retryMsg}`);
108
- }
109
- }
110
- const content = result.content;
111
- let text;
112
- if (Array.isArray(content)) {
113
- text = content
114
- .map((c) => (c.type === 'text' ? c.text || '' : JSON.stringify(c)))
115
- .join('\n');
116
- } else {
117
- text = typeof content === 'string' ? content : JSON.stringify(content);
118
- }
119
- return capMcpOutput(text);
120
- }
121
-
122
- // MCP per-tool-call timeout. Disabled by default: external MCP tools can be
123
- // long-running, and replaying an arbitrary tool after a timeout can duplicate
124
- // side effects. Operators may opt in with MIXDOG_MCP_CALL_TIMEOUT_MS or a
125
- // per-server timeoutMs/callTimeoutMs config value. On expiry we close the
126
- // transport so the next dispatch reconnects fresh, but we do not retry the
127
- // timed-out call automatically.
128
- export function resolveMcpCallTimeoutMs(cfg = {}, env = process.env) {
129
- const raw = cfg?.timeoutMs ?? cfg?.timeout_ms ?? cfg?.callTimeoutMs ?? cfg?.call_timeout_ms
130
- ?? env?.MIXDOG_MCP_CALL_TIMEOUT_MS;
131
- if (raw == null || raw === '' || raw === false) return DEFAULT_MCP_CALL_TIMEOUT_MS;
132
- if (typeof raw === 'string' && /^(0|off|none|false)$/i.test(raw.trim())) return 0;
133
- const parsed = Number(raw);
134
- if (!Number.isFinite(parsed) || parsed <= 0) return DEFAULT_MCP_CALL_TIMEOUT_MS;
135
- return Math.round(parsed);
136
- }
137
-
138
- export function isMcpToolCallTimeoutError(err) {
139
- return err?.code === 'EMCPTOOLTIMEOUT';
140
- }
141
-
142
- async function _callToolWithTimeout(server, toolName, args) {
143
- let timer;
144
- const timeoutMs = resolveMcpCallTimeoutMs(server?.cfg);
145
- if (!(timeoutMs > 0)) {
146
- return server.client.callTool({ name: toolName, arguments: args });
147
- }
148
- const timeout = new Promise((_, rej) => {
149
- timer = setTimeout(() => {
150
- try { server.client.close().catch(() => {}); } catch { /* ignore */ }
151
- const err = new Error(`MCP tool call timed out after ${timeoutMs}ms (server="${server.name}", tool="${toolName}")`);
152
- err.code = 'EMCPTOOLTIMEOUT';
153
- err.serverName = server.name;
154
- err.toolName = toolName;
155
- err.timeoutMs = timeoutMs;
156
- rej(err);
157
- }, timeoutMs);
158
- if (timer.unref) timer.unref();
159
- });
160
- try {
161
- return await Promise.race([
162
- server.client.callTool({ name: toolName, arguments: args }),
163
- timeout,
164
- ]);
165
- } finally {
166
- if (timer) clearTimeout(timer);
167
- }
168
- }
169
-
170
- function countTextLines(text) {
171
- const s = String(text ?? '');
172
- if (s.length === 0) return 0;
173
- let lines = 1;
174
- for (let i = 0; i < s.length; i += 1) {
175
- if (s.charCodeAt(i) === 10) lines += 1;
176
- }
177
- return lines;
178
- }
179
-
180
- function capMcpOutput(content) {
181
- const s = typeof content === 'string' ? content : String(content ?? '');
182
- const bodyBytes = Buffer.byteLength(s, 'utf8');
183
- const bodyLines = countTextLines(s);
184
- const { text, truncated } = smartReadTruncate(s, bodyLines, bodyBytes);
185
- if (!truncated) return text;
186
- // Spill the full body to a tmp file so the caller can recover content
187
- // elided by the head/tail cap (parity with the prior head-only spill).
188
- let spillPath = null;
189
- try {
190
- const dir = join(tmpdir(), 'mixdog-mcp-output');
191
- mkdirSync(dir, { recursive: true });
192
- spillPath = join(dir, `mcp-${Date.now()}-${randomUUID().slice(0, 8)}.txt`);
193
- writeFileSync(spillPath, s, 'utf-8');
194
- } catch { /* spill best-effort */ }
195
- const spillNote = spillPath
196
- ? `\n\n... [full output spilled to ${spillPath}] ...`
197
- : '';
198
- return `${text}${spillNote}`;
199
- }
200
- /**
201
- * Check if a tool name is an MCP tool.
202
- */
203
- export function isMcpTool(name) {
204
- return name.startsWith('mcp__');
205
- }
206
- /**
207
- * Check whether the inputSchema for an MCP tool declares the given top-level
208
- * property. Used to decide if the orchestrator should auto-inject context
209
- * (e.g. cwd) into the args before dispatch — schemas that don't declare the
210
- * field would reject the unknown argument.
211
- */
212
- export function mcpToolHasField(name, field) {
213
- const memoKey = `${name}|${field}`;
214
- const memoized = _mcpToolFieldMemo.get(memoKey);
215
- if (memoized !== undefined) return memoized;
216
- const match = name.match(/^mcp__(.+?)__(.+)$/);
217
- if (!match) { _mcpToolFieldMemo.set(memoKey, false); return false; }
218
- const [, serverName] = match;
219
- const server = servers.get(serverName);
220
- if (!server) { _mcpToolFieldMemo.set(memoKey, false); return false; }
221
- const tool = server.tools.find((t) => t.name === name);
222
- if (!tool) { _mcpToolFieldMemo.set(memoKey, false); return false; }
223
- const props = tool.inputSchema?.properties;
224
- const result = Boolean(props && Object.prototype.hasOwnProperty.call(props, field));
225
- _mcpToolFieldMemo.set(memoKey, result);
226
- return result;
227
- }
228
- /**
229
- * Disconnect all MCP servers.
230
- */
231
- export const drainMcpClients = disconnectAll;
232
- export async function disconnectAll() {
233
- for (const [name, server] of servers) {
234
- try {
235
- await server.client.close();
236
- }
237
- catch { /* ignore */ }
238
- servers.delete(name);
239
- }
240
- _invalidateMcpToolFieldMemo();
241
- }
242
- /**
243
- * Load MCP server configs from a JSON file.
244
- * Supports both `{ mcpServers: { ... } }` and flat `{ name: { ... } }` format.
245
- */
246
-
247
- function mcpConfigCommon(c) {
248
- const timeout = c?.timeoutMs ?? c?.timeout_ms ?? c?.callTimeoutMs ?? c?.call_timeout_ms;
249
- if (timeout == null) return {};
250
- return { timeoutMs: resolveMcpCallTimeoutMs({ timeoutMs: timeout }, {}) };
251
- }
252
- // --- Internal ---
253
- function resolvePluginCacheScript(pluginName, script) {
254
- const cacheBase = join(homedir(), '.claude', 'plugins', 'cache', DEFAULT_MARKETPLACE, pluginName);
255
- if (existsSync(cacheBase)) {
256
- const versions = readdirSync(cacheBase).filter(d => /^\d+\.\d+\.\d+/.test(d)).sort((a, b) => {
257
- const pa = a.split('.').map(Number), pb = b.split('.').map(Number);
258
- return (pa[0] - pb[0]) || (pa[1] - pb[1]) || (pa[2] - pb[2]);
259
- });
260
- for (let i = versions.length - 1; i >= 0; i--) {
261
- const version = versions[i];
262
- const dir = join(cacheBase, version);
263
- const scriptPath = join(dir, script);
264
- if (existsSync(scriptPath)) {
265
- return { dir, scriptPath, source: `pluginCache:${pluginName}@${version}` };
266
- }
267
- }
268
- }
269
- const marketplaceDir = join(homedir(), '.claude', 'plugins', 'marketplaces', DEFAULT_MARKETPLACE, 'external_plugins', pluginName);
270
- const marketplaceScript = join(marketplaceDir, script);
271
- if (existsSync(marketplaceScript)) {
272
- return { dir: marketplaceDir, scriptPath: marketplaceScript, source: `marketplace:${pluginName}` };
273
- }
274
- return null;
275
- }
276
-
277
- async function connectServer(name, cfg) {
278
- const client = new Client({ name: `mixdog-agent/${name}`, version: '1.0.0' });
279
- let transport;
280
- // pluginCache: resolve latest cached plugin version as stdio transport
281
- if (cfg.pluginCache) {
282
- const script = cfg.script || 'scripts/run-mcp.mjs';
283
- const resolved = resolvePluginCacheScript(cfg.pluginCache, script);
284
- if (!resolved) throw new Error(`Script not found for pluginCache "${cfg.pluginCache}" (${script})`);
285
- transport = new StdioClientTransport({
286
- command: 'node',
287
- args: [resolved.scriptPath],
288
- cwd: resolved.dir,
289
- env: {
290
- ...process.env,
291
- CLAUDE_PLUGIN_ROOT: resolved.dir,
292
- CLAUDE_PLUGIN_DATA: join(homedir(), '.claude', 'plugins', 'data', `${cfg.pluginCache}-${DEFAULT_MARKETPLACE}`),
293
- },
294
- });
295
- process.stderr.write(`[mcp-client] Connecting "${name}" via ${resolved.source}\n`);
296
- }
297
- // Auto-detect: read port from a running service's port file
298
- else if (cfg.autoDetect) {
299
- const spec = AUTO_DETECT_PORTS[cfg.autoDetect];
300
- if (!spec)
301
- throw new Error(`Unknown autoDetect target: "${cfg.autoDetect}"`);
302
- const portFile = spec.dir === 'mixdog' && process.env.MIXDOG_RUNTIME_ROOT
303
- ? join(process.env.MIXDOG_RUNTIME_ROOT, spec.file)
304
- : join(tmpdir(), spec.dir, spec.file);
305
- if (!existsSync(portFile)) {
306
- throw new Error(`autoDetect server "${name}": port file missing (${portFile})`);
307
- }
308
- let port;
309
- const raw = readFileSync(portFile, 'utf-8').trim();
310
- if (spec.portField) {
311
- try {
312
- const json = JSON.parse(raw);
313
- const v = json[spec.portField];
314
- port = (typeof v === 'number' && Number.isFinite(v)) ? v : Number(v);
315
- if (!Number.isFinite(port)) {
316
- throw new Error(`autoDetect server "${name}": portField "${spec.portField}" is not numeric in ${portFile}`);
317
- }
318
- } catch (jsonErr) {
319
- if (jsonErr instanceof Error && jsonErr.message.startsWith('autoDetect server')) throw jsonErr;
320
- throw new Error(`autoDetect server "${name}": invalid JSON in port file ${portFile}`);
321
- }
322
- }
323
- else {
324
- port = parseInt(raw, 10);
325
- }
326
- if (!Number.isFinite(port) || port < 1 || port > 65535) {
327
- throw new Error(`autoDetect server "${name}": invalid port value in ${portFile}`);
328
- }
329
- const url = `http://127.0.0.1:${port}${spec.endpoint}`;
330
- transport = new StreamableHTTPClientTransport(new URL(url));
331
- process.stderr.write(`[mcp-client] Connecting "${name}" via autoDetect HTTP: ${url}\n`);
332
- }
333
- else if (cfg.transport === 'http' && cfg.url) {
334
- transport = new StreamableHTTPClientTransport(new URL(cfg.url));
335
- process.stderr.write(`[mcp-client] Connecting "${name}" via HTTP: ${cfg.url}\n`);
336
- }
337
- else if (cfg.command) {
338
- transport = new StdioClientTransport({
339
- command: cfg.command,
340
- args: cfg.args,
341
- cwd: cfg.cwd,
342
- env: { ...process.env, ...cfg.env },
343
- });
344
- }
345
- else {
346
- throw new Error(`Invalid config for "${name}": need autoDetect, url (http), or command (stdio)`);
347
- }
348
- await client.connect(transport);
349
- const toolsResult = await client.listTools();
350
- if (!toolsResult || !Array.isArray(toolsResult.tools)) {
351
- throw new Error(`[mcp-client] ListTools returned invalid shape for "${name}": missing or non-array tools field`);
352
- }
353
- const tools = toolsResult.tools.map((t) => ({
354
- name: `mcp__${name}__${t.name}`,
355
- description: t.description || '',
356
- inputSchema: (t.inputSchema || { type: 'object', properties: {} }),
357
- ...(t.annotations && typeof t.annotations === 'object' ? { annotations: t.annotations } : {}),
358
- }));
359
- const mode = cfg.pluginCache ? `pluginCache(${cfg.pluginCache})` : cfg.autoDetect ? `autoDetect(${cfg.autoDetect})` : cfg.transport || 'stdio';
360
- const toolNames = tools.map(t => t.name);
361
- servers.set(name, { name, client, transport, tools, cfg });
362
- _invalidateMcpToolFieldMemo();
363
- process.stderr.write(`[mcp] connected: ${tools.length} tools — ${toolNames.join(', ')}\n`);
364
- }