mixdog 0.7.18 → 0.8.0

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