mixdog 0.7.17 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (836) hide show
  1. package/README.md +37 -331
  2. package/package.json +67 -99
  3. package/scripts/boot-smoke.mjs +94 -0
  4. package/scripts/build-tui.mjs +52 -0
  5. package/scripts/compact-smoke.mjs +199 -0
  6. package/scripts/lead-workflow-smoke.mjs +598 -0
  7. package/scripts/live-worker-smoke.mjs +239 -0
  8. package/scripts/output-style-smoke.mjs +101 -0
  9. package/scripts/smoke-loop-report.mjs +221 -0
  10. package/scripts/smoke-loop.mjs +201 -0
  11. package/scripts/smoke.mjs +113 -0
  12. package/scripts/tool-failures.mjs +143 -0
  13. package/scripts/tool-smoke.mjs +456 -0
  14. package/src/agents/debugger/AGENT.md +3 -0
  15. package/src/agents/debugger/agent.json +6 -0
  16. package/src/agents/explore/AGENT.md +4 -0
  17. package/src/agents/explore/agent.json +6 -0
  18. package/src/agents/heavy-worker/AGENT.md +3 -0
  19. package/src/agents/heavy-worker/agent.json +6 -0
  20. package/src/agents/maintainer/AGENT.md +3 -0
  21. package/src/agents/maintainer/agent.json +6 -0
  22. package/src/agents/reviewer/AGENT.md +3 -0
  23. package/src/agents/reviewer/agent.json +6 -0
  24. package/src/agents/scheduler-task.md +3 -0
  25. package/src/agents/web-researcher/AGENT.md +3 -0
  26. package/src/agents/web-researcher/agent.json +6 -0
  27. package/src/agents/webhook-handler.md +3 -0
  28. package/src/agents/worker/AGENT.md +3 -0
  29. package/src/agents/worker/agent.json +6 -0
  30. package/src/app.mjs +90 -0
  31. package/src/cli.mjs +11 -0
  32. package/src/defaults/hidden-roles.json +72 -0
  33. package/src/defaults/mixdog-config.template.json +15 -0
  34. package/src/hooks/lib/permission-evaluator.cjs +488 -0
  35. package/src/hooks/lib/settings-loader.cjs +112 -0
  36. package/src/lib/keychain-cjs.cjs +332 -0
  37. package/src/lib/plugin-paths.cjs +28 -0
  38. package/src/lib/rules-builder.cjs +315 -0
  39. package/src/mixdog-session-runtime.mjs +3704 -0
  40. package/src/output-styles/default.md +38 -0
  41. package/src/output-styles/extreme-simple.md +17 -0
  42. package/src/output-styles/simple.md +17 -0
  43. package/src/repl.mjs +322 -0
  44. package/src/rules/bridge/00-common.md +5 -0
  45. package/src/rules/bridge/20-skip-protocol.md +11 -0
  46. package/src/rules/bridge/30-explorer.md +4 -0
  47. package/src/rules/bridge/40-cycle1-agent.md +28 -0
  48. package/src/rules/bridge/41-cycle2-agent.md +59 -0
  49. package/src/rules/lead/00-tool-lead.md +5 -0
  50. package/src/rules/lead/01-general.md +5 -0
  51. package/src/rules/lead/02-channels.md +3 -0
  52. package/src/rules/lead/04-workflow.md +12 -0
  53. package/src/rules/shared/00-language.md +3 -0
  54. package/src/rules/shared/01-tool.md +3 -0
  55. package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
  56. package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
  57. package/src/runtime/agent/orchestrator/config.mjs +446 -0
  58. package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
  59. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
  60. package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
  61. package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
  62. package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
  63. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
  64. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
  65. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
  66. package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
  67. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
  68. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
  69. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
  70. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
  71. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
  72. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
  73. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
  76. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
  77. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
  78. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
  79. package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
  80. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
  81. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
  82. package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
  83. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  84. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
  85. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
  86. package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
  87. package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
  88. package/src/runtime/agent/orchestrator/session/loop.mjs +2320 -0
  89. package/src/runtime/agent/orchestrator/session/manager.mjs +2960 -0
  90. package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
  91. package/src/runtime/agent/orchestrator/session/store.mjs +663 -0
  92. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  93. package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
  94. package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
  95. package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
  96. package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
  97. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
  98. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
  99. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
  100. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
  102. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
  103. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
  105. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
  106. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  107. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
  108. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
  109. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
  110. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  111. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
  112. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
  113. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
  114. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
  115. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
  116. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
  118. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  119. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
  120. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  121. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
  122. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
  123. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
  124. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
  125. package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
  126. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
  127. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
  128. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
  129. package/src/runtime/channels/backends/discord.mjs +781 -0
  130. package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
  131. package/src/runtime/channels/index.mjs +3309 -0
  132. package/src/runtime/channels/lib/config.mjs +285 -0
  133. package/src/runtime/channels/lib/drop-trace.mjs +71 -0
  134. package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
  135. package/src/runtime/channels/lib/holidays.mjs +138 -0
  136. package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
  137. package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
  138. package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
  139. package/src/runtime/channels/lib/scheduler.mjs +710 -0
  140. package/src/runtime/channels/lib/session-discovery.mjs +102 -0
  141. package/src/runtime/channels/lib/state-file.mjs +68 -0
  142. package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
  143. package/src/runtime/channels/lib/tool-format.mjs +124 -0
  144. package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
  145. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
  146. package/src/runtime/channels/lib/webhook.mjs +1288 -0
  147. package/src/runtime/channels/tool-defs.mjs +177 -0
  148. package/src/runtime/lib/keychain-cjs.cjs +289 -0
  149. package/src/runtime/memory/data/runtime-manifest.json +40 -0
  150. package/src/runtime/memory/index.mjs +3600 -0
  151. package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
  152. package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
  153. package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
  154. package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
  155. package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
  156. package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
  157. package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
  158. package/src/runtime/memory/lib/memory-embed.mjs +300 -0
  159. package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
  160. package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
  161. package/src/runtime/memory/lib/memory.mjs +418 -0
  162. package/src/runtime/memory/lib/pg/adapter.mjs +314 -0
  163. package/src/runtime/memory/lib/pg/process.mjs +366 -0
  164. package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
  165. package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
  166. package/src/runtime/memory/lib/trace-store.mjs +734 -0
  167. package/src/runtime/memory/tool-defs.mjs +79 -0
  168. package/src/runtime/search/index.mjs +925 -0
  169. package/src/runtime/search/lib/config.mjs +61 -0
  170. package/src/runtime/search/lib/web-tools.mjs +1278 -0
  171. package/src/runtime/search/tool-defs.mjs +64 -0
  172. package/src/runtime/shared/atomic-file.mjs +435 -0
  173. package/src/runtime/shared/background-tasks.mjs +376 -0
  174. package/src/runtime/shared/child-guardian.mjs +98 -0
  175. package/src/runtime/shared/config.mjs +393 -0
  176. package/src/runtime/shared/err-text.mjs +121 -0
  177. package/src/runtime/shared/launcher-control.mjs +259 -0
  178. package/src/runtime/shared/llm/cost.mjs +66 -0
  179. package/src/runtime/shared/llm/http-agent.mjs +129 -0
  180. package/src/runtime/shared/open-url.mjs +37 -0
  181. package/src/runtime/shared/plugin-paths.mjs +25 -0
  182. package/src/runtime/shared/process-shutdown.mjs +147 -0
  183. package/src/runtime/shared/schedules-store.mjs +70 -0
  184. package/src/runtime/shared/tool-execution-contract.mjs +104 -0
  185. package/src/runtime/shared/tool-surface.mjs +950 -0
  186. package/src/runtime/shared/user-cwd.mjs +221 -0
  187. package/src/runtime/shared/user-data-guard.mjs +232 -0
  188. package/src/runtime/shared/workspace-router.mjs +259 -0
  189. package/src/standalone/bridge-tool.mjs +1414 -0
  190. package/src/standalone/channel-admin.mjs +366 -0
  191. package/src/standalone/channel-worker-preload.cjs +3 -0
  192. package/src/standalone/channel-worker.mjs +353 -0
  193. package/src/standalone/explore-tool.mjs +233 -0
  194. package/src/standalone/hook-bus.mjs +246 -0
  195. package/src/standalone/plugin-admin.mjs +247 -0
  196. package/src/standalone/provider-admin.mjs +338 -0
  197. package/src/standalone/seeds.mjs +94 -0
  198. package/src/standalone/usage-dashboard.mjs +510 -0
  199. package/src/tui/App.jsx +5438 -0
  200. package/src/tui/components/AnsiText.jsx +199 -0
  201. package/src/tui/components/ContextPanel.jsx +217 -0
  202. package/src/tui/components/Markdown.jsx +205 -0
  203. package/src/tui/components/MarkdownTable.jsx +204 -0
  204. package/src/tui/components/Message.jsx +103 -0
  205. package/src/tui/components/Picker.jsx +317 -0
  206. package/src/tui/components/PromptInput.jsx +584 -0
  207. package/src/tui/components/QueuedCommands.jsx +47 -0
  208. package/src/tui/components/SlashCommandPalette.jsx +114 -0
  209. package/src/tui/components/Spinner.jsx +317 -0
  210. package/src/tui/components/StatusLine.jsx +87 -0
  211. package/src/tui/components/TextEntryPanel.jsx +323 -0
  212. package/src/tui/components/ToolExecution.jsx +772 -0
  213. package/src/tui/components/TurnDone.jsx +78 -0
  214. package/src/tui/components/UsagePanel.jsx +331 -0
  215. package/src/tui/dist/index.mjs +12359 -0
  216. package/src/tui/engine.mjs +2410 -0
  217. package/src/tui/figures.mjs +50 -0
  218. package/src/tui/hooks/useEngine.mjs +16 -0
  219. package/src/tui/index.jsx +254 -0
  220. package/src/tui/input-editing.mjs +242 -0
  221. package/src/tui/markdown/format-token.mjs +194 -0
  222. package/src/tui/paste-attachments.mjs +198 -0
  223. package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
  224. package/src/tui/spinner-verbs.mjs +45 -0
  225. package/src/tui/theme.mjs +67 -0
  226. package/src/tui/time-format.mjs +53 -0
  227. package/src/ui/ansi.mjs +115 -0
  228. package/src/ui/markdown.mjs +195 -0
  229. package/src/ui/statusline.mjs +730 -0
  230. package/src/ui/tool-card.mjs +101 -0
  231. package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
  232. package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
  233. package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
  234. package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
  235. package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
  236. package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
  237. package/src/workflows/default/WORKFLOW.md +7 -0
  238. package/src/workflows/default/workflow.json +14 -0
  239. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  240. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  241. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  242. package/vendor/ink/build/colorize.d.ts +3 -0
  243. package/vendor/ink/build/colorize.js +48 -0
  244. package/vendor/ink/build/colorize.js.map +1 -0
  245. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  246. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  247. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  248. package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
  249. package/vendor/ink/build/components/AnimationContext.js +13 -0
  250. package/vendor/ink/build/components/AnimationContext.js.map +1 -0
  251. package/vendor/ink/build/components/App.d.ts +24 -0
  252. package/vendor/ink/build/components/App.js +554 -0
  253. package/vendor/ink/build/components/App.js.map +1 -0
  254. package/vendor/ink/build/components/AppContext.d.ts +80 -0
  255. package/vendor/ink/build/components/AppContext.js +25 -0
  256. package/vendor/ink/build/components/AppContext.js.map +1 -0
  257. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  258. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  259. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  260. package/vendor/ink/build/components/Box.d.ts +130 -0
  261. package/vendor/ink/build/components/Box.js +34 -0
  262. package/vendor/ink/build/components/Box.js.map +1 -0
  263. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  264. package/vendor/ink/build/components/CursorContext.js +8 -0
  265. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  266. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  267. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  268. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  269. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  270. package/vendor/ink/build/components/ErrorOverview.js +90 -0
  271. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  272. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  273. package/vendor/ink/build/components/FocusContext.js +17 -0
  274. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  275. package/vendor/ink/build/components/Newline.d.ts +13 -0
  276. package/vendor/ink/build/components/Newline.js +8 -0
  277. package/vendor/ink/build/components/Newline.js.map +1 -0
  278. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  279. package/vendor/ink/build/components/Spacer.js +11 -0
  280. package/vendor/ink/build/components/Spacer.js.map +1 -0
  281. package/vendor/ink/build/components/Static.d.ts +24 -0
  282. package/vendor/ink/build/components/Static.js +28 -0
  283. package/vendor/ink/build/components/Static.js.map +1 -0
  284. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  285. package/vendor/ink/build/components/StderrContext.js +13 -0
  286. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  287. package/vendor/ink/build/components/StdinContext.d.ts +28 -0
  288. package/vendor/ink/build/components/StdinContext.js +20 -0
  289. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  290. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  291. package/vendor/ink/build/components/StdoutContext.js +13 -0
  292. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  293. package/vendor/ink/build/components/Text.d.ts +55 -0
  294. package/vendor/ink/build/components/Text.js +50 -0
  295. package/vendor/ink/build/components/Text.js.map +1 -0
  296. package/vendor/ink/build/components/Transform.d.ts +16 -0
  297. package/vendor/ink/build/components/Transform.js +15 -0
  298. package/vendor/ink/build/components/Transform.js.map +1 -0
  299. package/vendor/ink/build/cursor-helpers.d.ts +39 -0
  300. package/vendor/ink/build/cursor-helpers.js +62 -0
  301. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  302. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  303. package/vendor/ink/build/devtools-window-polyfill.js +68 -0
  304. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  305. package/vendor/ink/build/devtools.d.ts +1 -0
  306. package/vendor/ink/build/devtools.js +36 -0
  307. package/vendor/ink/build/devtools.js.map +1 -0
  308. package/vendor/ink/build/dom.d.ts +62 -0
  309. package/vendor/ink/build/dom.js +143 -0
  310. package/vendor/ink/build/dom.js.map +1 -0
  311. package/vendor/ink/build/get-max-width.d.ts +3 -0
  312. package/vendor/ink/build/get-max-width.js +10 -0
  313. package/vendor/ink/build/get-max-width.js.map +1 -0
  314. package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
  315. package/vendor/ink/build/hooks/use-animation.js +87 -0
  316. package/vendor/ink/build/hooks/use-animation.js.map +1 -0
  317. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  318. package/vendor/ink/build/hooks/use-app.js +8 -0
  319. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  320. package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
  321. package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
  322. package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
  323. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  324. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  325. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  326. package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
  327. package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
  328. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  329. package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
  330. package/vendor/ink/build/hooks/use-focus.js +43 -0
  331. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  332. package/vendor/ink/build/hooks/use-input.d.ts +132 -0
  333. package/vendor/ink/build/hooks/use-input.js +126 -0
  334. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  335. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  336. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
  337. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  338. package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
  339. package/vendor/ink/build/hooks/use-paste.js +62 -0
  340. package/vendor/ink/build/hooks/use-paste.js.map +1 -0
  341. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  342. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  343. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  344. package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
  345. package/vendor/ink/build/hooks/use-stdin.js +9 -0
  346. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  347. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  348. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  349. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  350. package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
  351. package/vendor/ink/build/hooks/use-window-size.js +22 -0
  352. package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
  353. package/vendor/ink/build/index.d.ts +42 -0
  354. package/vendor/ink/build/index.js +24 -0
  355. package/vendor/ink/build/index.js.map +1 -0
  356. package/vendor/ink/build/ink.d.ts +146 -0
  357. package/vendor/ink/build/ink.js +1022 -0
  358. package/vendor/ink/build/ink.js.map +1 -0
  359. package/vendor/ink/build/input-parser.d.ts +10 -0
  360. package/vendor/ink/build/input-parser.js +194 -0
  361. package/vendor/ink/build/input-parser.js.map +1 -0
  362. package/vendor/ink/build/instances.d.ts +3 -0
  363. package/vendor/ink/build/instances.js +8 -0
  364. package/vendor/ink/build/instances.js.map +1 -0
  365. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  366. package/vendor/ink/build/kitty-keyboard.js +32 -0
  367. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  368. package/vendor/ink/build/log-update.d.ts +20 -0
  369. package/vendor/ink/build/log-update.js +261 -0
  370. package/vendor/ink/build/log-update.js.map +1 -0
  371. package/vendor/ink/build/measure-element.d.ts +20 -0
  372. package/vendor/ink/build/measure-element.js +13 -0
  373. package/vendor/ink/build/measure-element.js.map +1 -0
  374. package/vendor/ink/build/measure-text.d.ts +6 -0
  375. package/vendor/ink/build/measure-text.js +21 -0
  376. package/vendor/ink/build/measure-text.js.map +1 -0
  377. package/vendor/ink/build/output.d.ts +35 -0
  378. package/vendor/ink/build/output.js +328 -0
  379. package/vendor/ink/build/output.js.map +1 -0
  380. package/vendor/ink/build/parse-keypress.d.ts +20 -0
  381. package/vendor/ink/build/parse-keypress.js +495 -0
  382. package/vendor/ink/build/parse-keypress.js.map +1 -0
  383. package/vendor/ink/build/reconciler.d.ts +4 -0
  384. package/vendor/ink/build/reconciler.js +306 -0
  385. package/vendor/ink/build/reconciler.js.map +1 -0
  386. package/vendor/ink/build/render-background.d.ts +4 -0
  387. package/vendor/ink/build/render-background.js +25 -0
  388. package/vendor/ink/build/render-background.js.map +1 -0
  389. package/vendor/ink/build/render-border.d.ts +4 -0
  390. package/vendor/ink/build/render-border.js +84 -0
  391. package/vendor/ink/build/render-border.js.map +1 -0
  392. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  393. package/vendor/ink/build/render-node-to-output.js +162 -0
  394. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  395. package/vendor/ink/build/render-to-string.d.ts +38 -0
  396. package/vendor/ink/build/render-to-string.js +116 -0
  397. package/vendor/ink/build/render-to-string.js.map +1 -0
  398. package/vendor/ink/build/render.d.ts +176 -0
  399. package/vendor/ink/build/render.js +71 -0
  400. package/vendor/ink/build/render.js.map +1 -0
  401. package/vendor/ink/build/renderer.d.ts +8 -0
  402. package/vendor/ink/build/renderer.js +64 -0
  403. package/vendor/ink/build/renderer.js.map +1 -0
  404. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  405. package/vendor/ink/build/sanitize-ansi.js +27 -0
  406. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  407. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  408. package/vendor/ink/build/squash-text-nodes.js +36 -0
  409. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  410. package/vendor/ink/build/styles.d.ts +302 -0
  411. package/vendor/ink/build/styles.js +303 -0
  412. package/vendor/ink/build/styles.js.map +1 -0
  413. package/vendor/ink/build/utils.d.ts +9 -0
  414. package/vendor/ink/build/utils.js +19 -0
  415. package/vendor/ink/build/utils.js.map +1 -0
  416. package/vendor/ink/build/wrap-text.d.ts +3 -0
  417. package/vendor/ink/build/wrap-text.js +38 -0
  418. package/vendor/ink/build/wrap-text.js.map +1 -0
  419. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  420. package/vendor/ink/build/write-synchronized.js +9 -0
  421. package/vendor/ink/build/write-synchronized.js.map +1 -0
  422. package/vendor/ink/license +10 -0
  423. package/vendor/ink/package.json +137 -0
  424. package/.claude-plugin/marketplace.json +0 -34
  425. package/.claude-plugin/plugin.json +0 -20
  426. package/.gitattributes +0 -34
  427. package/.mcp.json +0 -14
  428. package/ARCHITECTURE.md +0 -77
  429. package/CHANGELOG.md +0 -30
  430. package/CONTRIBUTING.md +0 -45
  431. package/DATA-FLOW.md +0 -79
  432. package/LICENSE +0 -21
  433. package/SECURITY.md +0 -138
  434. package/UNINSTALL.md +0 -112
  435. package/agents/maintenance.md +0 -5
  436. package/agents/memory-classification.md +0 -30
  437. package/agents/scheduler-task.md +0 -18
  438. package/agents/webhook-handler.md +0 -27
  439. package/agents/worker.md +0 -24
  440. package/bin/bridge +0 -133
  441. package/bin/statusline-launcher.mjs +0 -82
  442. package/bin/statusline-lib.mjs +0 -558
  443. package/bin/statusline.mjs +0 -615
  444. package/bun.lock +0 -927
  445. package/commands/config.md +0 -16
  446. package/commands/doctor.md +0 -13
  447. package/commands/setup.md +0 -17
  448. package/defaults/hidden-roles.json +0 -68
  449. package/defaults/memory-chunk-prompt.md +0 -63
  450. package/defaults/mixdog-config.template.json +0 -27
  451. package/defaults/user-workflow.json +0 -8
  452. package/defaults/user-workflow.md +0 -17
  453. package/hooks/hooks.json +0 -73
  454. package/hooks/lib/active-instance.cjs +0 -77
  455. package/hooks/lib/permission-evaluator.cjs +0 -411
  456. package/hooks/lib/permission-route.cjs +0 -63
  457. package/hooks/lib/settings-loader.cjs +0 -117
  458. package/hooks/post-tool-use.cjs +0 -84
  459. package/hooks/pre-mcp-sandbox.cjs +0 -158
  460. package/hooks/pre-tool-subagent.cjs +0 -258
  461. package/hooks/session-start.cjs +0 -1479
  462. package/hooks/shim-launcher.cjs +0 -65
  463. package/hooks/turn-timer.cjs +0 -82
  464. package/lib/claude-md-writer.cjs +0 -386
  465. package/lib/keychain-cjs.cjs +0 -290
  466. package/lib/plugin-paths.cjs +0 -69
  467. package/lib/rules-builder.cjs +0 -241
  468. package/native/README.md +0 -117
  469. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  470. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  471. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  472. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  473. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  474. package/prompts/code-review.txt +0 -16
  475. package/prompts/security-audit.txt +0 -17
  476. package/rules/bridge/00-common.md +0 -39
  477. package/rules/bridge/20-skip-protocol.md +0 -18
  478. package/rules/bridge/30-explorer.md +0 -33
  479. package/rules/bridge/40-cycle1-agent.md +0 -52
  480. package/rules/bridge/41-cycle2-agent.md +0 -62
  481. package/rules/lead/00-tool-lead.md +0 -61
  482. package/rules/lead/01-general.md +0 -23
  483. package/rules/lead/02-channels.md +0 -49
  484. package/rules/lead/03-team.md +0 -27
  485. package/rules/lead/04-workflow.md +0 -20
  486. package/rules/shared/00-language.md +0 -14
  487. package/rules/shared/01-tool.md +0 -138
  488. package/scripts/bootstrap.mjs +0 -130
  489. package/scripts/bridge-unify-smoke.mjs +0 -308
  490. package/scripts/build-runtime-linux.sh +0 -348
  491. package/scripts/build-runtime-macos.sh +0 -217
  492. package/scripts/build-runtime-windows.ps1 +0 -242
  493. package/scripts/builtin-utils-smoke.mjs +0 -398
  494. package/scripts/bump.mjs +0 -80
  495. package/scripts/check-json.mjs +0 -45
  496. package/scripts/check-syntax-changed.mjs +0 -102
  497. package/scripts/check-syntax.mjs +0 -58
  498. package/scripts/code-graph-batch.test.mjs +0 -33
  499. package/scripts/config-preserve-smoke.mjs +0 -180
  500. package/scripts/doctor.mjs +0 -489
  501. package/scripts/edit-normalize-fuzz.mjs +0 -130
  502. package/scripts/edit-normalize-smoke.mjs +0 -401
  503. package/scripts/edit-operation-smoke.mjs +0 -369
  504. package/scripts/edit2-smoke.mjs +0 -63
  505. package/scripts/ensure-deps.mjs +0 -259
  506. package/scripts/fuzzy-e2e.mjs +0 -28
  507. package/scripts/fuzzy-smoke.mjs +0 -26
  508. package/scripts/generate-runtime-manifest.mjs +0 -166
  509. package/scripts/guard-smoke.mjs +0 -66
  510. package/scripts/hidden-role-schema-smoke.mjs +0 -162
  511. package/scripts/hook-routing-smoke.mjs +0 -29
  512. package/scripts/inject-input.ps1 +0 -204
  513. package/scripts/io-complex-smoke.mjs +0 -667
  514. package/scripts/io-explore-bench.mjs +0 -424
  515. package/scripts/io-guardrails-smoke.mjs +0 -205
  516. package/scripts/io-mini-bench-baseline.json +0 -11
  517. package/scripts/io-mini-bench.mjs +0 -216
  518. package/scripts/io-route-harness.mjs +0 -933
  519. package/scripts/io-telemetry-report.mjs +0 -691
  520. package/scripts/mutation-bench.mjs +0 -564
  521. package/scripts/mutation-io-smoke.mjs +0 -1097
  522. package/scripts/native-patch-bridge-smoke.mjs +0 -288
  523. package/scripts/native-patch-smoke.mjs +0 -304
  524. package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
  525. package/scripts/patch-interior-context-smoke.mjs +0 -49
  526. package/scripts/patch-newline-utf8-smoke.mjs +0 -157
  527. package/scripts/perf-hook-smoke.mjs +0 -71
  528. package/scripts/permission-eval-smoke.mjs +0 -443
  529. package/scripts/prep-patch.mjs +0 -53
  530. package/scripts/prep-shim.mjs +0 -96
  531. package/scripts/provider-cache-smoke.mjs +0 -687
  532. package/scripts/report-runtime-health.mjs +0 -132
  533. package/scripts/resolve-bun.mjs +0 -60
  534. package/scripts/run-mcp.mjs +0 -1448
  535. package/scripts/salvage-v4a-shatter.test.mjs +0 -58
  536. package/scripts/scoped-cache-io-smoke.mjs +0 -103
  537. package/scripts/shell-policy-round3-smoke.mjs +0 -46
  538. package/scripts/smoke-runtime-negative.ps1 +0 -100
  539. package/scripts/smoke-runtime-negative.sh +0 -95
  540. package/scripts/stall-policy-smoke.mjs +0 -50
  541. package/scripts/start-memory-worker.mjs +0 -23
  542. package/scripts/statusline-launcher-smoke.mjs +0 -82
  543. package/scripts/stress-atomic-write.mjs +0 -1028
  544. package/scripts/test-fault-inject.mjs +0 -164
  545. package/scripts/test-large-file.mjs +0 -174
  546. package/scripts/tool-edge-smoke.mjs +0 -209
  547. package/scripts/uninstall.mjs +0 -201
  548. package/scripts/webhook-selfheal-smoke.mjs +0 -27
  549. package/scripts/write-overwrite-guard-smoke.mjs +0 -56
  550. package/server-main.mjs +0 -3109
  551. package/server.mjs +0 -468
  552. package/setup/config-merge.mjs +0 -246
  553. package/setup/install.mjs +0 -574
  554. package/setup/launch-core.mjs +0 -617
  555. package/setup/launch.mjs +0 -101
  556. package/setup/locate-claude.mjs +0 -56
  557. package/setup/mixdog-cli.mjs +0 -122
  558. package/setup/setup-server.mjs +0 -3305
  559. package/setup/setup.html +0 -3740
  560. package/setup/tui.mjs +0 -325
  561. package/skills/retro-skill-proposer/SKILL.md +0 -92
  562. package/skills/schedule-add/SKILL.md +0 -77
  563. package/skills/setup/SKILL.md +0 -356
  564. package/skills/webhook-add/SKILL.md +0 -81
  565. package/src/agent/bridge-stall-watchdog.mjs +0 -337
  566. package/src/agent/index.mjs +0 -2138
  567. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
  568. package/src/agent/orchestrator/bridge-retry.mjs +0 -220
  569. package/src/agent/orchestrator/bridge-trace.mjs +0 -583
  570. package/src/agent/orchestrator/cache-mtime.mjs +0 -58
  571. package/src/agent/orchestrator/config.mjs +0 -405
  572. package/src/agent/orchestrator/context/collect.mjs +0 -651
  573. package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
  574. package/src/agent/orchestrator/drain-registry.mjs +0 -50
  575. package/src/agent/orchestrator/explore-validator.mjs +0 -8
  576. package/src/agent/orchestrator/internal-roles.mjs +0 -118
  577. package/src/agent/orchestrator/internal-tools.mjs +0 -88
  578. package/src/agent/orchestrator/jobs.mjs +0 -116
  579. package/src/agent/orchestrator/mcp/client.mjs +0 -364
  580. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1881
  581. package/src/agent/orchestrator/providers/anthropic.mjs +0 -594
  582. package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
  583. package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
  584. package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
  585. package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
  586. package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
  587. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
  588. package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
  589. package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
  590. package/src/agent/orchestrator/providers/registry.mjs +0 -192
  591. package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
  592. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
  593. package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
  594. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
  595. package/src/agent/orchestrator/session/loop.mjs +0 -1478
  596. package/src/agent/orchestrator/session/manager.mjs +0 -1991
  597. package/src/agent/orchestrator/session/result-classification.mjs +0 -65
  598. package/src/agent/orchestrator/session/store.mjs +0 -632
  599. package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
  600. package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
  601. package/src/agent/orchestrator/session/trim.mjs +0 -491
  602. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
  603. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
  604. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
  605. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
  606. package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
  607. package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
  608. package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
  609. package/src/agent/orchestrator/stall-policy.mjs +0 -201
  610. package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
  611. package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
  612. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -455
  613. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
  614. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
  615. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
  616. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
  617. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
  618. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
  619. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
  620. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
  621. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
  622. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
  623. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
  624. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
  625. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
  626. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
  627. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
  628. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
  629. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
  630. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
  631. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
  632. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
  633. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
  634. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
  635. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
  636. package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
  637. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
  638. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
  639. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
  640. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
  641. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
  642. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
  643. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
  644. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
  645. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
  646. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
  647. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
  648. package/src/agent/orchestrator/tools/builtin.mjs +0 -503
  649. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
  650. package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
  651. package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
  652. package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
  653. package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
  654. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
  655. package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
  656. package/src/agent/orchestrator/tools/host-input.mjs +0 -204
  657. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
  658. package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
  659. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
  660. package/src/agent/orchestrator/tools/patch.mjs +0 -2754
  661. package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
  662. package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
  663. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
  664. package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
  665. package/src/agent/orchestrator/workflow-store.mjs +0 -93
  666. package/src/agent/tool-defs.mjs +0 -103
  667. package/src/channels/backends/discord.mjs +0 -784
  668. package/src/channels/data/voice-runtime-manifest.json +0 -138
  669. package/src/channels/index.mjs +0 -3268
  670. package/src/channels/lib/config.mjs +0 -292
  671. package/src/channels/lib/drop-trace.mjs +0 -71
  672. package/src/channels/lib/event-pipeline.mjs +0 -81
  673. package/src/channels/lib/holidays.mjs +0 -138
  674. package/src/channels/lib/hook-pipe-server.mjs +0 -822
  675. package/src/channels/lib/output-forwarder.mjs +0 -765
  676. package/src/channels/lib/runtime-paths.mjs +0 -517
  677. package/src/channels/lib/scheduler.mjs +0 -723
  678. package/src/channels/lib/session-discovery.mjs +0 -103
  679. package/src/channels/lib/state-file.mjs +0 -68
  680. package/src/channels/lib/status-snapshot.mjs +0 -219
  681. package/src/channels/lib/tool-format.mjs +0 -140
  682. package/src/channels/lib/transcript-discovery.mjs +0 -195
  683. package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
  684. package/src/channels/lib/webhook.mjs +0 -1318
  685. package/src/channels/tool-defs.mjs +0 -170
  686. package/src/daemon/host.mjs +0 -118
  687. package/src/daemon/mcp-transport.mjs +0 -47
  688. package/src/daemon/session.mjs +0 -100
  689. package/src/daemon/thin-client.mjs +0 -71
  690. package/src/daemon/transport.mjs +0 -163
  691. package/src/memory/data/runtime-manifest.json +0 -40
  692. package/src/memory/index.mjs +0 -3332
  693. package/src/memory/lib/core-memory-store.mjs +0 -330
  694. package/src/memory/lib/embedding-provider.mjs +0 -269
  695. package/src/memory/lib/embedding-worker.mjs +0 -323
  696. package/src/memory/lib/memory-cycle1.mjs +0 -645
  697. package/src/memory/lib/memory-cycle2.mjs +0 -1284
  698. package/src/memory/lib/memory-cycle3.mjs +0 -540
  699. package/src/memory/lib/memory-embed.mjs +0 -299
  700. package/src/memory/lib/memory-ops-policy.mjs +0 -190
  701. package/src/memory/lib/memory-recall-store.mjs +0 -638
  702. package/src/memory/lib/memory.mjs +0 -412
  703. package/src/memory/lib/pg/adapter.mjs +0 -308
  704. package/src/memory/lib/pg/process.mjs +0 -360
  705. package/src/memory/lib/pg/supervisor.mjs +0 -396
  706. package/src/memory/lib/runtime-fetcher.mjs +0 -458
  707. package/src/memory/lib/trace-store.mjs +0 -728
  708. package/src/memory/tool-defs.mjs +0 -79
  709. package/src/search/index.mjs +0 -1173
  710. package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
  711. package/src/search/lib/backends/exa.mjs +0 -50
  712. package/src/search/lib/backends/firecrawl.mjs +0 -61
  713. package/src/search/lib/backends/gemini-api.mjs +0 -83
  714. package/src/search/lib/backends/grok-oauth.mjs +0 -86
  715. package/src/search/lib/backends/index.mjs +0 -150
  716. package/src/search/lib/backends/openai-api.mjs +0 -144
  717. package/src/search/lib/backends/openai-oauth.mjs +0 -102
  718. package/src/search/lib/backends/openai-web-search.mjs +0 -76
  719. package/src/search/lib/backends/tavily.mjs +0 -55
  720. package/src/search/lib/backends/xai-api.mjs +0 -113
  721. package/src/search/lib/config.mjs +0 -192
  722. package/src/search/lib/provider-usage.mjs +0 -67
  723. package/src/search/lib/providers.mjs +0 -47
  724. package/src/search/lib/search-intent.mjs +0 -109
  725. package/src/search/lib/setup-handler.mjs +0 -261
  726. package/src/search/lib/web-tools.mjs +0 -1219
  727. package/src/search/tool-defs.mjs +0 -83
  728. package/src/setup/defender-exclusion.mjs +0 -183
  729. package/src/shared/atomic-file.mjs +0 -436
  730. package/src/shared/config.mjs +0 -372
  731. package/src/shared/daemon-recycle.mjs +0 -108
  732. package/src/shared/disable-claude-builtins.mjs +0 -91
  733. package/src/shared/err-text.mjs +0 -12
  734. package/src/shared/llm/cost.mjs +0 -66
  735. package/src/shared/llm/http-agent.mjs +0 -123
  736. package/src/shared/open-url.mjs +0 -62
  737. package/src/shared/plugin-paths.mjs +0 -58
  738. package/src/shared/schedules-store.mjs +0 -70
  739. package/src/shared/seed.mjs +0 -136
  740. package/src/shared/user-cwd.mjs +0 -225
  741. package/src/shared/user-data-guard.mjs +0 -244
  742. package/src/status/aggregator.mjs +0 -584
  743. package/src/status/server.mjs +0 -413
  744. package/tools.json +0 -1653
  745. /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
  746. /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
  747. /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
  748. /package/{lib → src/lib}/config-cjs.cjs +0 -0
  749. /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
  750. /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
  751. /package/{lib → src/lib}/text-utils.cjs +0 -0
  752. /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
  753. /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
  754. /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
  755. /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
  756. /package/src/{agent → runtime/agent}/orchestrator/session/cache/post-edit-marks.mjs +0 -0
  757. /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
  758. /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
  759. /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
  760. /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
  761. /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
  762. /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
  763. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/advisory-lock.mjs +0 -0
  764. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
  765. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
  766. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
  767. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
  768. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
  769. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
  770. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
  771. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
  772. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
  773. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
  774. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
  775. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
  776. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
  777. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
  778. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
  779. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
  780. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
  781. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
  782. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
  783. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
  784. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
  785. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
  786. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
  787. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
  788. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
  789. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
  790. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
  791. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
  792. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
  793. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
  794. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
  795. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
  796. /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
  797. /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
  798. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
  799. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
  800. /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
  801. /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
  802. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
  803. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
  804. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
  805. /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
  806. /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
  807. /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
  808. /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
  809. /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
  810. /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
  811. /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
  812. /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
  813. /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
  814. /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
  815. /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
  816. /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
  817. /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
  818. /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
  819. /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
  820. /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
  821. /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
  822. /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
  823. /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
  824. /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
  825. /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
  826. /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
  827. /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
  828. /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
  829. /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
  830. /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
  831. /package/src/{search → runtime/search}/lib/state.mjs +0 -0
  832. /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
  833. /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
  834. /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
  835. /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
  836. /package/src/{shared → runtime/shared}/wsl.mjs +0 -0
@@ -0,0 +1,247 @@
1
+ import { OpenAICompatProvider, OPENAI_COMPAT_PRESETS } from './openai-compat.mjs';
2
+ import { AnthropicProvider } from './anthropic.mjs';
3
+ import { OpenCodeGoProvider } from './opencode-go.mjs';
4
+ import { GeminiProvider } from './gemini.mjs';
5
+ import { OpenAIOAuthProvider, hasOpenAIOAuthCredentials } from './openai-oauth.mjs';
6
+ import { AnthropicOAuthProvider, hasAnthropicOAuthCredentials } from './anthropic-oauth.mjs';
7
+ import { GrokOAuthProvider, hasGrokOAuthCredentials } from './grok-oauth.mjs';
8
+ import { OpenAIDirectProvider } from './openai-ws.mjs';
9
+ import { refreshCatalog as refreshMetadataCatalog, warmModelMetadataCatalogs } from './model-catalog.mjs';
10
+ // OpenAI-compat provider names are self-declared by openai-compat.mjs via
11
+ // OPENAI_COMPAT_PRESETS. No parallel list maintained here.
12
+ const providers = new Map();
13
+ // Parallel map: provider name -> signature of the config it was built from.
14
+ // Lets initProviders() skip reconstructing a provider whose config is byte-for-
15
+ // byte identical to the live one, so lazy-init misses that re-run initProviders
16
+ // don't churn (tear down + rebuild) every live provider instance on every call.
17
+ const signatures = new Map();
18
+
19
+ // Deterministic structural signature of a provider config. Recursively sorts
20
+ // object keys so signature equality reflects config-value equality regardless
21
+ // of key insertion order. Invariant: same config in -> same string out.
22
+ function sortKeysDeep(v) {
23
+ if (Array.isArray(v)) return v.map(sortKeysDeep);
24
+ if (v && typeof v === 'object') {
25
+ const out = {};
26
+ for (const k of Object.keys(v).sort()) out[k] = sortKeysDeep(v[k]);
27
+ return out;
28
+ }
29
+ return v;
30
+ }
31
+ function configSignature(cfg) {
32
+ try {
33
+ return JSON.stringify(sortKeysDeep(cfg));
34
+ } catch {
35
+ // Non-serializable config (cycles / exotic values): force a rebuild by
36
+ // returning a never-matching signature rather than risk a stale reuse.
37
+ return null;
38
+ }
39
+ }
40
+ export async function initProviders(config) {
41
+ // Invariant: never wipe the live registry based on an empty / all-disabled
42
+ // config. Without this guard, a stale `loadAgentConfig()` (e.g. mid-reload
43
+ // or a transient FS hiccup) would land here as `{}` or `{...,enabled:false}`,
44
+ // and the `providers.clear()` at the bottom would erase every previously
45
+ // registered provider. The owner process then stays alive returning
46
+ // `Provider "<name>" not found or not enabled` until restart. Throwing
47
+ // here preserves whatever was already registered.
48
+ const entries = Object.entries(config || {});
49
+ if (entries.length === 0) {
50
+ throw new Error('[provider] initProviders called with empty config — refusing to clear registry');
51
+ }
52
+ const next = new Map();
53
+ const nextSignatures = new Map();
54
+ for (const [name, cfg] of entries) {
55
+ if (!cfg.enabled)
56
+ continue;
57
+ // Idempotent reuse: an enabled provider whose config signature is
58
+ // unchanged from the live registry is carried forward as-is. Only
59
+ // added or changed providers are (re)constructed below.
60
+ const sig = configSignature(cfg);
61
+ if (sig !== null && providers.has(name) && signatures.get(name) === sig) {
62
+ next.set(name, providers.get(name));
63
+ nextSignatures.set(name, sig);
64
+ continue;
65
+ }
66
+ try {
67
+ let inst;
68
+ if (name === 'anthropic') {
69
+ inst = new AnthropicProvider(cfg);
70
+ }
71
+ else if (name === 'gemini') {
72
+ inst = new GeminiProvider(cfg);
73
+ }
74
+ else if (name === 'openai-oauth') {
75
+ inst = new OpenAIOAuthProvider(cfg);
76
+ }
77
+ else if (name === 'anthropic-oauth') {
78
+ inst = new AnthropicOAuthProvider(cfg);
79
+ }
80
+ else if (name === 'grok-oauth') {
81
+ inst = new GrokOAuthProvider(cfg);
82
+ }
83
+ else if (name === 'openai') {
84
+ inst = new OpenAIDirectProvider(cfg);
85
+ }
86
+ else if (name === 'opencode-go') {
87
+ inst = new OpenCodeGoProvider(cfg);
88
+ }
89
+ else if (Object.prototype.hasOwnProperty.call(OPENAI_COMPAT_PRESETS, name)) {
90
+ inst = new OpenAICompatProvider(name, cfg);
91
+ }
92
+ else {
93
+ throw new Error(`unknown enabled provider: ${name}`);
94
+ }
95
+ next.set(name, inst);
96
+ if (sig !== null) nextSignatures.set(name, sig);
97
+ }
98
+ catch (err) {
99
+ const msg = err instanceof Error ? err.message : String(err);
100
+ throw new Error(`[provider] Failed to init "${name}": ${msg}`);
101
+ }
102
+ }
103
+ // Second guard: every entry was disabled. Same reasoning — keep the
104
+ // existing registry rather than going dark.
105
+ if (next.size === 0) {
106
+ throw new Error('[provider] all providers disabled in config — refusing to clear registry');
107
+ }
108
+ // OAuth preservation guard. anthropic-oauth / openai-oauth are NOT stored
109
+ // in mixdog-config.json — buildDefaultConfig injects them at runtime by
110
+ // calling hasAnthropic/OpenAIOAuthCredentials(), which reads the on-disk
111
+ // credentials file each call. A transient ENOENT / partial-write / JSON
112
+ // parse failure quietly returns false, the OAuth entry lands in next as
113
+ // disabled (silently skipped by the `!cfg.enabled` continue above), and
114
+ // the `providers.clear()` below would erase the previously registered
115
+ // instance permanently — the process then returns
116
+ // `Provider "anthropic-oauth" not found or not enabled` for the rest of
117
+ // its lifetime even though the credential file is fine again. Carry
118
+ // forward the prior instance instead.
119
+ for (const name of ['anthropic-oauth', 'openai-oauth', 'grok-oauth']) {
120
+ if (!next.has(name) && providers.has(name)) {
121
+ next.set(name, providers.get(name));
122
+ if (signatures.has(name)) nextSignatures.set(name, signatures.get(name));
123
+ }
124
+ }
125
+ providers.clear();
126
+ for (const [k, v] of next) providers.set(k, v);
127
+ signatures.clear();
128
+ for (const [k, v] of nextSignatures) signatures.set(k, v);
129
+ }
130
+ export function getProvider(name) {
131
+ const cached = providers.get(name);
132
+ if (cached) return cached;
133
+ // OAuth lazy fallback. Covers the boot-time race where
134
+ // hasAnthropic/OpenAIOAuthCredentials() returned false the first time
135
+ // (credential file mid-write, lock contention, or a transient parse
136
+ // failure) — initProviders then skipped the entry entirely so there is
137
+ // nothing for the preservation guard to carry forward. Re-probe the
138
+ // credential each miss: if the credential is now valid, register the
139
+ // instance on the spot so subsequent calls hit the cached entry.
140
+ if (name === 'anthropic-oauth' && hasAnthropicOAuthCredentials()) {
141
+ const inst = new AnthropicOAuthProvider({});
142
+ providers.set(name, inst);
143
+ return inst;
144
+ }
145
+ if (name === 'openai-oauth' && hasOpenAIOAuthCredentials()) {
146
+ const inst = new OpenAIOAuthProvider({});
147
+ providers.set(name, inst);
148
+ return inst;
149
+ }
150
+ if (name === 'grok-oauth' && hasGrokOAuthCredentials()) {
151
+ const inst = new GrokOAuthProvider({});
152
+ providers.set(name, inst);
153
+ return inst;
154
+ }
155
+ return undefined;
156
+ }
157
+ // Whether a provider reports usage.input_tokens EXCLUDING cached tokens
158
+ // (Anthropic) rather than INCLUDING them (openai / gemini / grok). Used to
159
+ // normalize the live "context window" footprint in session metrics: for a
160
+ // cache-excluding provider the cache_read count must be added back to reflect
161
+ // what the model actually saw last turn. The convention is declared as a
162
+ // static `inputExcludesCache` on each provider class, so a newly added
163
+ // provider states its own answer — no central regex to keep in sync. Unknown /
164
+ // unregistered providers default to false (the openai/gemini majority).
165
+ export function providerInputExcludesCache(name) {
166
+ const p = getProvider(name);
167
+ return p?.constructor?.inputExcludesCache === true;
168
+ }
169
+ export function getAllProviders() {
170
+ // Defensive copy — callers must not mutate the live registry or retain
171
+ // stale entries across re-init (initProviders rebuilds the map in place).
172
+ return new Map(providers);
173
+ }
174
+ // Background catalog warm-up. Each provider's listModels() either hits its
175
+ // own cached model list (no-op) or fires a single HTTP refresh. Called from
176
+ // agent.init() after providers are registered so the first bridge LLM call
177
+ // (e.g. cycle1 on session start) does not pay the catalog refresh latency
178
+ // inline. Fire-and-forget: failures are logged inside each provider.
179
+ export function warmupCatalogs() {
180
+ const metadataReady = Promise.resolve()
181
+ .then(() => warmModelMetadataCatalogs())
182
+ .catch((err) => {
183
+ const msg = err instanceof Error ? err.message : String(err);
184
+ process.stderr.write(`[model-catalog] metadata warm-up failed: ${msg}\n`);
185
+ return null;
186
+ });
187
+ for (const [name, provider] of providers) {
188
+ if (typeof provider?.listModels !== 'function') continue;
189
+ Promise.resolve()
190
+ .then(() => metadataReady)
191
+ .then(() => provider.listModels())
192
+ .catch((err) => {
193
+ const msg = err instanceof Error ? err.message : String(err);
194
+ process.stderr.write(`[provider:${name}] catalog warm-up failed: ${msg}\n`);
195
+ });
196
+ }
197
+ }
198
+
199
+ // Force-refresh each provider's /models catalog on every MCP start. Unlike
200
+ // warmupCatalogs (which calls listModels() and so respects the 24h provider
201
+ // TTL → no-op when the cache is fresh), this bypasses the TTL via
202
+ // _refreshModelCache so a model released since the last refresh is picked up
203
+ // at startup instead of waiting for TTL expiry. Deliberately does NOT touch
204
+ // the shared LiteLLM metadata catalog (refreshMetadataCatalog) — pricing /
205
+ // context metadata stays on its own 24h TTL. Fire-and-forget: never awaited,
206
+ // per-provider failures logged to stderr like warmupCatalogs.
207
+ export function refreshProviderCatalogsOnStartup() {
208
+ for (const [name, provider] of providers) {
209
+ const refreshFn = typeof provider?._refreshModelCache === 'function'
210
+ ? () => provider._refreshModelCache()
211
+ : (typeof provider?.listModels === 'function' ? () => provider.listModels() : null);
212
+ if (!refreshFn) continue;
213
+ Promise.resolve()
214
+ .then(() => refreshFn())
215
+ .catch((err) => {
216
+ const msg = err instanceof Error ? err.message : String(err);
217
+ process.stderr.write(`[provider:${name}] startup catalog refresh failed: ${msg}\n`);
218
+ });
219
+ }
220
+ }
221
+
222
+ // Force-refresh provider catalogs after an operator changes model/provider
223
+ // configuration. This bypasses the 24h provider TTL where supported and warms
224
+ // the shared LiteLLM metadata cache first so context/pricing metadata follows
225
+ // newly released models without waiting for the next process restart.
226
+ export function refreshCatalogs() {
227
+ const metadataReady = Promise.resolve()
228
+ .then(() => refreshMetadataCatalog())
229
+ .catch((err) => {
230
+ const msg = err instanceof Error ? err.message : String(err);
231
+ process.stderr.write(`[model-catalog] metadata refresh failed: ${msg}\n`);
232
+ return null;
233
+ });
234
+ for (const [name, provider] of providers) {
235
+ const refreshFn = typeof provider?._refreshModelCache === 'function'
236
+ ? () => provider._refreshModelCache()
237
+ : (typeof provider?.listModels === 'function' ? () => provider.listModels() : null);
238
+ if (!refreshFn) continue;
239
+ Promise.resolve()
240
+ .then(() => metadataReady)
241
+ .then(() => refreshFn())
242
+ .catch((err) => {
243
+ const msg = err instanceof Error ? err.message : String(err);
244
+ process.stderr.write(`[provider:${name}] catalog refresh failed: ${msg}\n`);
245
+ });
246
+ }
247
+ }
@@ -0,0 +1,332 @@
1
+ /**
2
+ * retry-classifier.mjs — shared transient/permanent error classifier
3
+ *
4
+ * Single source of truth across every provider (openai-oauth-ws, openai-oauth,
5
+ * anthropic-oauth, anthropic, gemini, openai-ws, openai-compat).
6
+ *
7
+ * Goal: when a provider returns a transient server-side condition we should
8
+ * retry; when it returns a deterministic refusal (auth, permission, quota)
9
+ * we should fail fast. Mid-stream WS events (server-supplied error / response
10
+ * .failed messages) historically lost their HTTP status because the message
11
+ * was wrapped without classification — that left "Our servers are currently
12
+ * overloaded" indistinguishable from a permanent failure to the retry layer.
13
+ *
14
+ * Usage:
15
+ * import { classifyError, populateHttpStatusFromMessage } from './retry-classifier.mjs'
16
+ * const kind = classifyError(err) // 'auth' | 'permanent' | 'transient' | 'unknown'
17
+ * populateHttpStatusFromMessage(err) // mutates err.httpStatus if message hints at one
18
+ */
19
+
20
+ import {
21
+ PROVIDER_MAX_BEFORE_WARN_MS,
22
+ PROVIDER_RETRY_BACKOFF_MS,
23
+ PROVIDER_RETRY_JITTER_RATIO,
24
+ PROVIDER_RETRY_MAX_ATTEMPTS,
25
+ createTimeoutSignal,
26
+ } from '../stall-policy.mjs'
27
+
28
+ // HTTP statuses considered transient — safe to retry with backoff.
29
+ // 408 — request timeout
30
+ // 429 — rate limit (caller may still respect Retry-After, but the kind
31
+ // classification here only signals "retryable"; sub-error in the
32
+ // provider can still treat 429 as permanent for quota-exhausted)
33
+ // 500/502/503/504 — server errors (overload / bad gateway / timeout)
34
+ const TRANSIENT_STATUSES = new Set([408, 500, 502, 503, 504])
35
+
36
+ // HTTP statuses that mean "permanent: stop retrying, surface to caller".
37
+ // 401/403 — auth issue
38
+ // 404 — not found
39
+ // 400/422 — bad request (deterministic)
40
+ const AUTH_STATUSES = new Set([401, 403])
41
+ const PERMANENT_STATUSES = new Set([400, 404, 405, 410, 415, 422])
42
+
43
+ // Server-message text patterns. Used when a WS / SSE event carries an error
44
+ // payload but no explicit status code — we sniff the text and assign the most
45
+ // likely HTTP equivalent so the retry layer can use the same rules.
46
+ const MESSAGE_PATTERNS = [
47
+ // OpenAI/Codex sometimes surfaces generic backend failures only as
48
+ // message text plus a request ID, with no HTTP status on the WS event.
49
+ { regex: /(?:an error occurred while processing your request|please include the request id)/i, status: 503 },
50
+ // Overload / transient 5xx — server is asking us to back off. The `\b`
51
+ // anchor is intentionally OMITTED on the trailing side of `overload` so
52
+ // "overloaded" / "overloading" both match (inflected forms are common in
53
+ // server error text).
54
+ { regex: /(?:overload(?:ed|ing)?|temporarily unavailable|try again later|service unavailable|bad gateway|gateway timeout)/i, status: 503 },
55
+ // Explicit 5xx mention.
56
+ { regex: /\b(?:5\d\d|http 5\d\d)\b/i, status: 503 },
57
+ // Rate limit / quota — same retry posture as 429 but treat as permanent
58
+ // by classifyError because per-call retry won't change the answer (the
59
+ // window must elapse). Providers that want time-bounded retry should
60
+ // honor Retry-After on the original response, not loop here.
61
+ { regex: /(?:rate ?limit|quota)/i, status: 429 },
62
+ // Auth — never retryable from our side.
63
+ { regex: /\b(?:unauthorized|unauthorised|authentication|not authenticated|token expired|access token|invalid api key)\b/i, status: 401 },
64
+ { regex: /\b(?:forbidden|permission denied|policy violation)\b/i, status: 403 },
65
+ ]
66
+
67
+ /**
68
+ * Inspect `err.message` (or the explicit `msg` argument) and, if the text
69
+ * matches one of the known transient/permanent patterns, set `err.httpStatus`
70
+ * to the corresponding code. No-op when httpStatus is already set.
71
+ *
72
+ * Returns the resolved httpStatus (existing or newly assigned), or 0 when
73
+ * nothing matched.
74
+ */
75
+ export function populateHttpStatusFromMessage(err, msg = null) {
76
+ if (!err || typeof err !== 'object') return 0
77
+ if (Number(err.httpStatus) > 0) return Number(err.httpStatus)
78
+ const text = String(msg ?? err.message ?? '')
79
+ if (!text) return 0
80
+ for (const { regex, status } of MESSAGE_PATTERNS) {
81
+ if (regex.test(text)) {
82
+ err.httpStatus = status
83
+ return status
84
+ }
85
+ }
86
+ return 0
87
+ }
88
+
89
+ /**
90
+ * Classify an error for retry policy. Combines HTTP status (when set) and
91
+ * message-text fallback so message-only errors (mid-stream WS error events)
92
+ * route through the same logic as fetch responses.
93
+ *
94
+ * 'auth' — 401/403 — invalid credentials / forbidden, fail fast.
95
+ * 'permanent' — 4xx (non-auth) or quota — caller decision is final.
96
+ * 'transient' — 5xx/408 or socket-level transient codes — retry with backoff.
97
+ * 'unknown' — neither; default to permanent in safety-critical paths,
98
+ * or retry once in best-effort paths.
99
+ */
100
+ export function classifyError(err) {
101
+ if (!err) return 'unknown'
102
+ // Once a streamed tool call has been surfaced to the loop, retrying the same
103
+ // provider turn can double-execute that tool. Providers mark these stream
104
+ // failures as unsafe so the shared retry wrapper fails fast.
105
+ if (err.emittedToolCall === true || err.toolCallEmitted === true || err.unsafeToRetry === true) return 'permanent'
106
+ // Truncated SSE stream (message_start without message_stop). These are
107
+ // idempotent to retry: the partial result is discarded, and a pendingToolUse
108
+ // means the tool_use input JSON never completed, so re-requesting is safe.
109
+ // Checked BEFORE HTTP-status classification so a truncation error that also
110
+ // carries a 4xx/429 status still classifies transient per the contract.
111
+ // Treating this as transient is what lets every withRetry / mid-stream-loop
112
+ // consumer recover a cut-off stream uniformly.
113
+ if (err.truncatedStream === true || err.code === 'TRUNCATED_STREAM') return 'transient'
114
+
115
+ // Honor explicit httpStatus first, then sniff message text.
116
+ const status = Number(err.httpStatus || err.status || err.response?.status || 0) || populateHttpStatusFromMessage(err)
117
+ if (AUTH_STATUSES.has(status)) return 'auth'
118
+ if (status === 429) return 'permanent'
119
+ if (TRANSIENT_STATUSES.has(status)) return 'transient'
120
+ if (PERMANENT_STATUSES.has(status)) return 'permanent'
121
+
122
+ // Socket-level codes (Node errno) — DNS / reset / refused / timeout are all
123
+ // transient: we can retry the same request and may succeed.
124
+ const code = String(err.code || '')
125
+ if (code === 'ECONNRESET' || code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT'
126
+ || code === 'EAI_AGAIN' || code === 'ENOTFOUND' || code === 'EAI_NODATA'
127
+ || code === 'ECONNREFUSED' || code === 'ENETUNREACH' || code === 'EHOSTUNREACH'
128
+ || code === 'EPIPE'
129
+ || code === 'EPROVIDERTIMEOUT' || code === 'EGEMINITIMEOUT'
130
+ || code === 'EWSACQUIRETIMEOUT') {
131
+ return 'transient'
132
+ }
133
+
134
+ return 'unknown'
135
+ }
136
+
137
+ // Provider error-text signatures for a context-window / input-too-large
138
+ // rejection. These are DETERMINISTIC refusals (the request is simply too big)
139
+ // — not transient faults — so they must never be routed through the
140
+ // network/stall retry path. The fix is to shrink the payload (trim harder)
141
+ // and re-send, which the agent loop's send path does once before surfacing.
142
+ // Patterns cover OpenAI ("maximum context length", "reduce the length"),
143
+ // Anthropic ("prompt is too long"), and generic "input exceeds the context
144
+ // window" phrasing. Match is case-insensitive over err.message.
145
+ const CONTEXT_OVERFLOW_PATTERNS = [
146
+ /input (?:length|tokens?) exceeds? the context window/i,
147
+ /exceeds? the (?:maximum )?context (?:window|length)/i,
148
+ /maximum context length/i,
149
+ /context[_ ]length[_ ]exceeded/i,
150
+ /prompt is too long/i,
151
+ /reduce the length of (?:the )?(?:messages|input|prompt)/i,
152
+ ]
153
+
154
+ /**
155
+ * True when `err` is a context-window-exceeded provider rejection. Walks
156
+ * err.cause / err.response.data up to depth 2 so SDK-wrapped errors are
157
+ * detected. Deterministic: the same request will always be rejected, so
158
+ * callers must shrink the payload (trim harder) before re-sending rather
159
+ * than blindly retrying against the same input.
160
+ * @param {unknown} err
161
+ * @returns {boolean}
162
+ */
163
+ export function isContextOverflowError(err, _depth = 0) {
164
+ if (!err || _depth > 2) return false
165
+ const msg = (err instanceof Error ? err.message : (typeof err === 'string' ? err : err?.message)) || ''
166
+ if (msg && CONTEXT_OVERFLOW_PATTERNS.some((re) => re.test(msg))) return true
167
+ if (err.cause != null && err.cause !== err) return isContextOverflowError(err.cause, _depth + 1)
168
+ if (err.response?.data != null) return isContextOverflowError(err.response.data, _depth + 1)
169
+ return false
170
+ }
171
+
172
+ function _headerValue(headers, name) {
173
+ if (!headers) return null
174
+ const lower = name.toLowerCase()
175
+ if (typeof headers.get === 'function') return headers.get(name) || headers.get(lower)
176
+ for (const [k, v] of Object.entries(headers)) {
177
+ if (String(k).toLowerCase() === lower) return Array.isArray(v) ? v[0] : v
178
+ }
179
+ return null
180
+ }
181
+
182
+ export function retryAfterMsFromError(err) {
183
+ const headers = err?.headers || err?.response?.headers || err?.data?.responseHeaders || null
184
+ const retryAfterMs = _headerValue(headers, 'retry-after-ms')
185
+ if (retryAfterMs != null && retryAfterMs !== '') {
186
+ const n = Number(retryAfterMs)
187
+ if (Number.isFinite(n) && n >= 0) return n
188
+ }
189
+ const retryAfter = _headerValue(headers, 'retry-after')
190
+ if (retryAfter == null || retryAfter === '') return null
191
+ const seconds = Number(retryAfter)
192
+ if (Number.isFinite(seconds) && seconds >= 0) return Math.ceil(seconds * 1000)
193
+ const dateMs = Date.parse(String(retryAfter))
194
+ if (!Number.isNaN(dateMs)) return Math.max(0, dateMs - Date.now())
195
+ return null
196
+ }
197
+
198
+ /**
199
+ * Convenience predicate: should this error be retried at the request level?
200
+ * Wraps classifyError() with the standard "transient = retry, otherwise no"
201
+ * policy. Callers that have provider-specific retry budgets (e.g. anthropic-
202
+ * oauth's MAX_ATTEMPTS, openai-oauth-ws's mid-stream classifier) still gate
203
+ * on attempt count separately; this helper only answers the kind question.
204
+ */
205
+ export function isRetryable(err) {
206
+ return classifyError(err) === 'transient'
207
+ }
208
+
209
+ // Default backoff schedule used by withRetry when caller does not override.
210
+ // Mirrors anthropic-oauth's 5-attempt curve (immediate + 1s/2s/4s/8s) so the
211
+ // total cap stays under 15s. Total upper bound = sum = 15s.
212
+ const DEFAULT_BACKOFF_MS = PROVIDER_RETRY_BACKOFF_MS
213
+ const DEFAULT_MAX_ATTEMPTS = PROVIDER_RETRY_MAX_ATTEMPTS
214
+
215
+ export function jitterDelayMs(ms, ratio = PROVIDER_RETRY_JITTER_RATIO, mode = 'symmetric') {
216
+ const base = Number(ms) || 0
217
+ if (base <= 0) return 0
218
+ const r = Math.min(Math.max(Number(ratio) || 0, 0), 1)
219
+ if (!r) return Math.round(base)
220
+ const spread = base * r
221
+ const offset = mode === 'positive'
222
+ ? Math.random() * spread
223
+ : (Math.random() * 2 - 1) * spread
224
+ return Math.max(0, Math.round(base + offset))
225
+ }
226
+
227
+ /**
228
+ * Run an async function with exponential-backoff retry on transient errors.
229
+ *
230
+ * Behavior:
231
+ * - Calls `fn()` up to `maxAttempts` times.
232
+ * - Between attempts, sleeps `backoffMs[attemptIndex]`.
233
+ * - Honors `signal` (AbortSignal): aborts current attempt's wait and re-
234
+ * throws caller's reason. Does NOT abort an in-flight call — that's
235
+ * the provider's own responsibility via its native abort plumbing.
236
+ * - Uses classifyError() to decide retry. 'transient' → retry,
237
+ * 'auth' / 'permanent' / 'unknown' → throw immediately.
238
+ * - populateHttpStatusFromMessage(err) is called on every caught error so
239
+ * server-text errors (e.g. "Our servers are currently overloaded")
240
+ * resolve to httpStatus before classification.
241
+ *
242
+ * Returns whatever `fn()` resolves to. Throws the last error if every retry
243
+ * is exhausted, or the first error if it's classified non-transient.
244
+ */
245
+ export async function withRetry(fn, opts = {}) {
246
+ const maxAttempts = Number(opts.maxAttempts ?? DEFAULT_MAX_ATTEMPTS)
247
+ const backoffMs = Array.isArray(opts.backoffMs) ? opts.backoffMs : DEFAULT_BACKOFF_MS
248
+ const signal = opts.signal || null
249
+ const onRetry = typeof opts.onRetry === 'function' ? opts.onRetry : null
250
+ const perAttemptTimeoutMs = Number(opts.perAttemptTimeoutMs || 0)
251
+ const perAttemptLabel = opts.perAttemptLabel || 'provider request'
252
+ const maxRetryAfterMs = Number(opts.maxRetryAfterMs ?? PROVIDER_MAX_BEFORE_WARN_MS)
253
+ const retryJitterRatio = Number(opts.retryJitterRatio ?? PROVIDER_RETRY_JITTER_RATIO)
254
+
255
+ let lastErr = null
256
+ let nextDelayMs = null
257
+ let nextDelayReason = null
258
+ for (let attempt = 0; attempt < maxAttempts; attempt++) {
259
+ if (signal?.aborted) {
260
+ const reason = signal.reason
261
+ throw reason instanceof Error ? reason : new Error('withRetry: aborted')
262
+ }
263
+ if (attempt > 0) {
264
+ const rawWait = nextDelayMs ?? backoffMs[Math.min(attempt, backoffMs.length - 1)] ?? 0
265
+ const wait = jitterDelayMs(
266
+ rawWait,
267
+ retryJitterRatio,
268
+ nextDelayReason === 'retry-after' ? 'positive' : 'symmetric',
269
+ )
270
+ const boundedWait = nextDelayReason === 'retry-after' && Number.isFinite(maxRetryAfterMs)
271
+ ? Math.min(wait, maxRetryAfterMs)
272
+ : wait
273
+ onRetry?.({ attempt, lastErr, delayMs: boundedWait, delayReason: nextDelayReason })
274
+ if (boundedWait > 0) await _sleepWithAbort(boundedWait, signal)
275
+ if (signal?.aborted) {
276
+ const reason = signal.reason
277
+ throw reason instanceof Error ? reason : new Error('withRetry: aborted')
278
+ }
279
+ nextDelayMs = null
280
+ nextDelayReason = null
281
+ }
282
+ const attemptTimeout = perAttemptTimeoutMs > 0
283
+ ? createTimeoutSignal(signal, perAttemptTimeoutMs, `${perAttemptLabel} attempt ${attempt + 1}`)
284
+ : null
285
+ const attemptSignal = attemptTimeout?.signal || signal
286
+ try {
287
+ return await fn({ attempt, signal: attemptSignal })
288
+ } catch (err) {
289
+ let caught = err
290
+ if (!signal?.aborted && attemptSignal?.aborted && attemptSignal.reason instanceof Error) {
291
+ caught = attemptSignal.reason
292
+ }
293
+ if (signal?.aborted) {
294
+ const reason = signal.reason
295
+ throw reason instanceof Error ? reason : new Error('withRetry: aborted')
296
+ }
297
+ lastErr = caught
298
+ populateHttpStatusFromMessage(caught)
299
+ const retryAfterMs = retryAfterMsFromError(caught)
300
+ const status = Number(caught?.httpStatus || caught?.status || caught?.response?.status || 0)
301
+ const kind = classifyError(caught)
302
+ const retryableRateLimit = status === 429 && retryAfterMs != null
303
+ if (kind !== 'transient' && !retryableRateLimit) throw caught
304
+ // Last attempt failed transiently — propagate to caller.
305
+ if (attempt === maxAttempts - 1) throw caught
306
+ if (retryAfterMs != null) {
307
+ nextDelayMs = Math.max(0, Math.min(retryAfterMs, maxRetryAfterMs))
308
+ nextDelayReason = 'retry-after'
309
+ }
310
+ } finally {
311
+ attemptTimeout?.cleanup()
312
+ }
313
+ }
314
+ // Defensive — loop above always returns or throws.
315
+ throw lastErr || new Error('withRetry: exhausted with no error captured')
316
+ }
317
+
318
+ function _sleepWithAbort(ms, signal) {
319
+ return new Promise((resolve) => {
320
+ let onAbort = null
321
+ const t = setTimeout(() => {
322
+ if (signal && onAbort) {
323
+ try { signal.removeEventListener('abort', onAbort) } catch {}
324
+ }
325
+ resolve()
326
+ }, ms)
327
+ if (!signal) return
328
+ if (signal.aborted) { clearTimeout(t); resolve(); return }
329
+ onAbort = () => { clearTimeout(t); resolve() }
330
+ signal.addEventListener('abort', onAbort, { once: true })
331
+ })
332
+ }
@@ -0,0 +1,11 @@
1
+ let routeMeta;
2
+
3
+ try {
4
+ routeMeta = await import('../../../../vendor/statusline/src/gateway/route-meta.mjs');
5
+ } catch {
6
+ routeMeta = await import('../../../gateway/route-meta.mjs');
7
+ }
8
+
9
+ export const buildGatewayLimits = routeMeta.buildGatewayLimits;
10
+ export const recordGatewayUsageEvent = routeMeta.recordGatewayUsageEvent;
11
+ export const summarizeGatewayUsage = routeMeta.summarizeGatewayUsage;
@@ -0,0 +1,50 @@
1
+ // Shared trace fingerprinting utilities for provider trace logging.
2
+ // These functions produce deterministic, compact representations of
3
+ // LLM call artifacts (tool schemas, messages, function arguments)
4
+ // for cache-key computation and trace hash comparison.
5
+ // Used by gemini.mjs and openai-compat.mjs.
6
+
7
+ import { createHash } from 'crypto';
8
+
9
+ export function traceHash(value) {
10
+ return createHash('sha256')
11
+ .update(String(value ?? ''))
12
+ .digest('hex')
13
+ .slice(0, 16);
14
+ }
15
+
16
+ export function stableTraceStringify(value, seen = new WeakSet()) {
17
+ if (value === null || typeof value !== 'object') {
18
+ if (typeof value === 'bigint') return JSON.stringify(String(value));
19
+ if (typeof value === 'undefined' || typeof value === 'function') return 'null';
20
+ return JSON.stringify(value);
21
+ }
22
+ if (seen.has(value)) return JSON.stringify('[Circular]');
23
+ seen.add(value);
24
+ if (Array.isArray(value)) {
25
+ const serialized = '[' + value.map(v => stableTraceStringify(v, seen)).join(',') + ']';
26
+ seen.delete(value);
27
+ return serialized;
28
+ }
29
+ const parts = [];
30
+ for (const key of Object.keys(value).sort()) {
31
+ const v = value[key];
32
+ if (typeof v === 'undefined' || typeof v === 'function') continue;
33
+ parts.push(JSON.stringify(key) + ':' + stableTraceStringify(v, seen));
34
+ }
35
+ seen.delete(value);
36
+ return '{' + parts.join(',') + '}';
37
+ }
38
+
39
+ export function summarizeTraceTools(tools) {
40
+ return (tools || []).map(t => ({
41
+ name: t?.name || null,
42
+ description: t?.description || '',
43
+ inputSchema: t?.inputSchema || null,
44
+ }));
45
+ }
46
+
47
+ export function traceTextShape(text) {
48
+ const value = String(text ?? '');
49
+ return { chars: value.length, hash: traceHash(value) };
50
+ }