mixdog 0.7.18 → 0.8.1

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