mixdog 0.7.18 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (847) hide show
  1. package/README.md +37 -331
  2. package/package.json +67 -99
  3. package/scripts/boot-smoke.mjs +94 -0
  4. package/scripts/build-tui.mjs +52 -0
  5. package/scripts/compact-smoke.mjs +199 -0
  6. package/scripts/lead-workflow-smoke.mjs +598 -0
  7. package/scripts/live-worker-smoke.mjs +239 -0
  8. package/scripts/output-style-smoke.mjs +101 -0
  9. package/scripts/session-context-bench.mjs +172 -0
  10. package/scripts/smoke-loop-report.mjs +221 -0
  11. package/scripts/smoke-loop.mjs +201 -0
  12. package/scripts/smoke.mjs +113 -0
  13. package/scripts/tool-failures.mjs +143 -0
  14. package/scripts/tool-smoke.mjs +452 -0
  15. package/src/agents/debugger/AGENT.md +3 -0
  16. package/src/agents/debugger/agent.json +6 -0
  17. package/src/agents/explore/AGENT.md +4 -0
  18. package/src/agents/explore/agent.json +6 -0
  19. package/src/agents/heavy-worker/AGENT.md +3 -0
  20. package/src/agents/heavy-worker/agent.json +6 -0
  21. package/src/agents/maintainer/AGENT.md +3 -0
  22. package/src/agents/maintainer/agent.json +6 -0
  23. package/src/agents/reviewer/AGENT.md +3 -0
  24. package/src/agents/reviewer/agent.json +6 -0
  25. package/src/agents/scheduler-task.md +3 -0
  26. package/src/agents/web-researcher/AGENT.md +3 -0
  27. package/src/agents/web-researcher/agent.json +6 -0
  28. package/src/agents/webhook-handler.md +3 -0
  29. package/src/agents/worker/AGENT.md +3 -0
  30. package/src/agents/worker/agent.json +6 -0
  31. package/src/app.mjs +90 -0
  32. package/src/cli.mjs +11 -0
  33. package/src/defaults/hidden-roles.json +72 -0
  34. package/src/defaults/mixdog-config.template.json +15 -0
  35. package/src/hooks/lib/permission-evaluator.cjs +488 -0
  36. package/src/hooks/lib/settings-loader.cjs +112 -0
  37. package/src/lib/keychain-cjs.cjs +332 -0
  38. package/src/lib/plugin-paths.cjs +28 -0
  39. package/src/lib/rules-builder.cjs +315 -0
  40. package/src/mixdog-session-runtime.mjs +3813 -0
  41. package/src/output-styles/default.md +38 -0
  42. package/src/output-styles/extreme-simple.md +17 -0
  43. package/src/output-styles/simple.md +17 -0
  44. package/src/repl.mjs +330 -0
  45. package/src/rules/bridge/00-common.md +5 -0
  46. package/src/rules/bridge/20-skip-protocol.md +11 -0
  47. package/src/rules/bridge/30-explorer.md +4 -0
  48. package/src/rules/bridge/40-cycle1-agent.md +28 -0
  49. package/src/rules/bridge/41-cycle2-agent.md +59 -0
  50. package/src/rules/lead/00-tool-lead.md +5 -0
  51. package/src/rules/lead/01-general.md +5 -0
  52. package/src/rules/lead/02-channels.md +3 -0
  53. package/src/rules/lead/04-workflow.md +12 -0
  54. package/src/rules/shared/00-language.md +3 -0
  55. package/src/rules/shared/01-tool.md +3 -0
  56. package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
  57. package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
  58. package/src/runtime/agent/orchestrator/config.mjs +446 -0
  59. package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
  60. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
  61. package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
  62. package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
  63. package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
  64. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
  65. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
  66. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
  67. package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
  68. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
  69. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
  70. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
  71. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
  72. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
  73. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
  76. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
  77. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
  78. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
  79. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
  80. package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
  81. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
  82. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
  83. package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
  84. package/src/runtime/agent/orchestrator/session/cache/post-edit-marks.mjs +42 -0
  85. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  86. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
  87. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
  88. package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
  89. package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
  90. package/src/runtime/agent/orchestrator/session/loop.mjs +2269 -0
  91. package/src/runtime/agent/orchestrator/session/manager.mjs +2972 -0
  92. package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
  93. package/src/runtime/agent/orchestrator/session/store.mjs +870 -0
  94. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  95. package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
  96. package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
  97. package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
  98. package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
  99. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
  100. package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +171 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
  102. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
  103. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
  105. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
  106. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
  107. package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
  108. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
  109. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  110. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
  111. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
  112. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
  113. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  114. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
  115. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
  116. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
  118. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
  119. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
  120. package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
  121. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  122. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
  123. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  124. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
  125. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
  126. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
  127. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
  128. package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
  129. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
  130. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
  131. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
  132. package/src/runtime/channels/backends/discord.mjs +781 -0
  133. package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
  134. package/src/runtime/channels/index.mjs +3309 -0
  135. package/src/runtime/channels/lib/config.mjs +285 -0
  136. package/src/runtime/channels/lib/drop-trace.mjs +71 -0
  137. package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
  138. package/src/runtime/channels/lib/holidays.mjs +138 -0
  139. package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
  140. package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
  141. package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
  142. package/src/runtime/channels/lib/scheduler.mjs +710 -0
  143. package/src/runtime/channels/lib/session-discovery.mjs +102 -0
  144. package/src/runtime/channels/lib/state-file.mjs +68 -0
  145. package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
  146. package/src/runtime/channels/lib/tool-format.mjs +122 -0
  147. package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
  148. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
  149. package/src/runtime/channels/lib/webhook.mjs +1288 -0
  150. package/src/runtime/channels/tool-defs.mjs +177 -0
  151. package/src/runtime/lib/keychain-cjs.cjs +289 -0
  152. package/src/runtime/memory/data/runtime-manifest.json +40 -0
  153. package/src/runtime/memory/index.mjs +3706 -0
  154. package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
  155. package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
  156. package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
  157. package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
  158. package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
  159. package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
  160. package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
  161. package/src/runtime/memory/lib/memory-embed.mjs +300 -0
  162. package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
  163. package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
  164. package/src/runtime/memory/lib/memory.mjs +418 -0
  165. package/src/runtime/memory/lib/pg/adapter.mjs +328 -0
  166. package/src/runtime/memory/lib/pg/process.mjs +366 -0
  167. package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
  168. package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
  169. package/src/runtime/memory/lib/trace-store.mjs +734 -0
  170. package/src/runtime/memory/tool-defs.mjs +79 -0
  171. package/src/runtime/search/index.mjs +925 -0
  172. package/src/runtime/search/lib/config.mjs +61 -0
  173. package/src/runtime/search/lib/web-tools.mjs +1278 -0
  174. package/src/runtime/search/tool-defs.mjs +64 -0
  175. package/src/runtime/shared/atomic-file.mjs +435 -0
  176. package/src/runtime/shared/background-tasks.mjs +376 -0
  177. package/src/runtime/shared/child-guardian.mjs +98 -0
  178. package/src/runtime/shared/config.mjs +393 -0
  179. package/src/runtime/shared/err-text.mjs +121 -0
  180. package/src/runtime/shared/launcher-control.mjs +259 -0
  181. package/src/runtime/shared/llm/http-agent.mjs +129 -0
  182. package/src/runtime/shared/open-url.mjs +37 -0
  183. package/src/runtime/shared/plugin-paths.mjs +25 -0
  184. package/src/runtime/shared/process-shutdown.mjs +147 -0
  185. package/src/runtime/shared/schedules-store.mjs +70 -0
  186. package/src/runtime/shared/tool-execution-contract.mjs +104 -0
  187. package/src/runtime/shared/tool-surface.mjs +947 -0
  188. package/src/runtime/shared/user-cwd.mjs +221 -0
  189. package/src/runtime/shared/user-data-guard.mjs +232 -0
  190. package/src/runtime/shared/workspace-router.mjs +259 -0
  191. package/src/standalone/bridge-tool.mjs +1414 -0
  192. package/src/standalone/channel-admin.mjs +366 -0
  193. package/src/standalone/channel-worker-preload.cjs +3 -0
  194. package/src/standalone/channel-worker.mjs +353 -0
  195. package/src/standalone/explore-tool.mjs +233 -0
  196. package/src/standalone/hook-bus.mjs +246 -0
  197. package/src/standalone/plugin-admin.mjs +247 -0
  198. package/src/standalone/provider-admin.mjs +338 -0
  199. package/src/standalone/seeds.mjs +94 -0
  200. package/src/standalone/usage-dashboard.mjs +510 -0
  201. package/src/tui/App.jsx +5446 -0
  202. package/src/tui/components/AnsiText.jsx +199 -0
  203. package/src/tui/components/ContextPanel.jsx +265 -0
  204. package/src/tui/components/Markdown.jsx +205 -0
  205. package/src/tui/components/MarkdownTable.jsx +204 -0
  206. package/src/tui/components/Message.jsx +103 -0
  207. package/src/tui/components/Picker.jsx +317 -0
  208. package/src/tui/components/PromptInput.jsx +584 -0
  209. package/src/tui/components/QueuedCommands.jsx +47 -0
  210. package/src/tui/components/SlashCommandPalette.jsx +114 -0
  211. package/src/tui/components/Spinner.jsx +317 -0
  212. package/src/tui/components/StatusLine.jsx +87 -0
  213. package/src/tui/components/TextEntryPanel.jsx +323 -0
  214. package/src/tui/components/ToolExecution.jsx +791 -0
  215. package/src/tui/components/TurnDone.jsx +78 -0
  216. package/src/tui/components/UsagePanel.jsx +331 -0
  217. package/src/tui/dist/index.mjs +12420 -0
  218. package/src/tui/engine.mjs +2410 -0
  219. package/src/tui/figures.mjs +50 -0
  220. package/src/tui/hooks/useEngine.mjs +16 -0
  221. package/src/tui/index.jsx +254 -0
  222. package/src/tui/input-editing.mjs +242 -0
  223. package/src/tui/markdown/format-token.mjs +194 -0
  224. package/src/tui/paste-attachments.mjs +198 -0
  225. package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
  226. package/src/tui/spinner-verbs.mjs +45 -0
  227. package/src/tui/theme.mjs +67 -0
  228. package/src/tui/time-format.mjs +53 -0
  229. package/src/ui/ansi.mjs +115 -0
  230. package/src/ui/markdown.mjs +195 -0
  231. package/src/ui/statusline.mjs +730 -0
  232. package/src/ui/tool-card.mjs +99 -0
  233. package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
  234. package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
  235. package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
  236. package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
  237. package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
  238. package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
  239. package/src/workflows/default/WORKFLOW.md +7 -0
  240. package/src/workflows/default/workflow.json +14 -0
  241. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  242. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  243. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  244. package/vendor/ink/build/colorize.d.ts +3 -0
  245. package/vendor/ink/build/colorize.js +48 -0
  246. package/vendor/ink/build/colorize.js.map +1 -0
  247. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  248. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  249. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  250. package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
  251. package/vendor/ink/build/components/AnimationContext.js +13 -0
  252. package/vendor/ink/build/components/AnimationContext.js.map +1 -0
  253. package/vendor/ink/build/components/App.d.ts +24 -0
  254. package/vendor/ink/build/components/App.js +554 -0
  255. package/vendor/ink/build/components/App.js.map +1 -0
  256. package/vendor/ink/build/components/AppContext.d.ts +80 -0
  257. package/vendor/ink/build/components/AppContext.js +25 -0
  258. package/vendor/ink/build/components/AppContext.js.map +1 -0
  259. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  260. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  261. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  262. package/vendor/ink/build/components/Box.d.ts +130 -0
  263. package/vendor/ink/build/components/Box.js +34 -0
  264. package/vendor/ink/build/components/Box.js.map +1 -0
  265. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  266. package/vendor/ink/build/components/CursorContext.js +8 -0
  267. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  268. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  269. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  270. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  271. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  272. package/vendor/ink/build/components/ErrorOverview.js +90 -0
  273. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  274. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  275. package/vendor/ink/build/components/FocusContext.js +17 -0
  276. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  277. package/vendor/ink/build/components/Newline.d.ts +13 -0
  278. package/vendor/ink/build/components/Newline.js +8 -0
  279. package/vendor/ink/build/components/Newline.js.map +1 -0
  280. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  281. package/vendor/ink/build/components/Spacer.js +11 -0
  282. package/vendor/ink/build/components/Spacer.js.map +1 -0
  283. package/vendor/ink/build/components/Static.d.ts +24 -0
  284. package/vendor/ink/build/components/Static.js +28 -0
  285. package/vendor/ink/build/components/Static.js.map +1 -0
  286. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  287. package/vendor/ink/build/components/StderrContext.js +13 -0
  288. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  289. package/vendor/ink/build/components/StdinContext.d.ts +28 -0
  290. package/vendor/ink/build/components/StdinContext.js +20 -0
  291. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  292. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  293. package/vendor/ink/build/components/StdoutContext.js +13 -0
  294. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  295. package/vendor/ink/build/components/Text.d.ts +55 -0
  296. package/vendor/ink/build/components/Text.js +50 -0
  297. package/vendor/ink/build/components/Text.js.map +1 -0
  298. package/vendor/ink/build/components/Transform.d.ts +16 -0
  299. package/vendor/ink/build/components/Transform.js +15 -0
  300. package/vendor/ink/build/components/Transform.js.map +1 -0
  301. package/vendor/ink/build/cursor-helpers.d.ts +39 -0
  302. package/vendor/ink/build/cursor-helpers.js +62 -0
  303. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  304. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  305. package/vendor/ink/build/devtools-window-polyfill.js +68 -0
  306. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  307. package/vendor/ink/build/devtools.d.ts +1 -0
  308. package/vendor/ink/build/devtools.js +36 -0
  309. package/vendor/ink/build/devtools.js.map +1 -0
  310. package/vendor/ink/build/dom.d.ts +62 -0
  311. package/vendor/ink/build/dom.js +143 -0
  312. package/vendor/ink/build/dom.js.map +1 -0
  313. package/vendor/ink/build/get-max-width.d.ts +3 -0
  314. package/vendor/ink/build/get-max-width.js +10 -0
  315. package/vendor/ink/build/get-max-width.js.map +1 -0
  316. package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
  317. package/vendor/ink/build/hooks/use-animation.js +87 -0
  318. package/vendor/ink/build/hooks/use-animation.js.map +1 -0
  319. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  320. package/vendor/ink/build/hooks/use-app.js +8 -0
  321. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  322. package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
  323. package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
  324. package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
  325. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  326. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  327. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  328. package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
  329. package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
  330. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  331. package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
  332. package/vendor/ink/build/hooks/use-focus.js +43 -0
  333. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  334. package/vendor/ink/build/hooks/use-input.d.ts +132 -0
  335. package/vendor/ink/build/hooks/use-input.js +126 -0
  336. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  337. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  338. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
  339. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  340. package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
  341. package/vendor/ink/build/hooks/use-paste.js +62 -0
  342. package/vendor/ink/build/hooks/use-paste.js.map +1 -0
  343. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  344. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  345. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  346. package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
  347. package/vendor/ink/build/hooks/use-stdin.js +9 -0
  348. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  349. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  350. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  351. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  352. package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
  353. package/vendor/ink/build/hooks/use-window-size.js +22 -0
  354. package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
  355. package/vendor/ink/build/index.d.ts +42 -0
  356. package/vendor/ink/build/index.js +24 -0
  357. package/vendor/ink/build/index.js.map +1 -0
  358. package/vendor/ink/build/ink.d.ts +146 -0
  359. package/vendor/ink/build/ink.js +1022 -0
  360. package/vendor/ink/build/ink.js.map +1 -0
  361. package/vendor/ink/build/input-parser.d.ts +10 -0
  362. package/vendor/ink/build/input-parser.js +194 -0
  363. package/vendor/ink/build/input-parser.js.map +1 -0
  364. package/vendor/ink/build/instances.d.ts +3 -0
  365. package/vendor/ink/build/instances.js +8 -0
  366. package/vendor/ink/build/instances.js.map +1 -0
  367. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  368. package/vendor/ink/build/kitty-keyboard.js +32 -0
  369. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  370. package/vendor/ink/build/log-update.d.ts +20 -0
  371. package/vendor/ink/build/log-update.js +261 -0
  372. package/vendor/ink/build/log-update.js.map +1 -0
  373. package/vendor/ink/build/measure-element.d.ts +20 -0
  374. package/vendor/ink/build/measure-element.js +13 -0
  375. package/vendor/ink/build/measure-element.js.map +1 -0
  376. package/vendor/ink/build/measure-text.d.ts +6 -0
  377. package/vendor/ink/build/measure-text.js +21 -0
  378. package/vendor/ink/build/measure-text.js.map +1 -0
  379. package/vendor/ink/build/output.d.ts +35 -0
  380. package/vendor/ink/build/output.js +328 -0
  381. package/vendor/ink/build/output.js.map +1 -0
  382. package/vendor/ink/build/parse-keypress.d.ts +20 -0
  383. package/vendor/ink/build/parse-keypress.js +495 -0
  384. package/vendor/ink/build/parse-keypress.js.map +1 -0
  385. package/vendor/ink/build/reconciler.d.ts +4 -0
  386. package/vendor/ink/build/reconciler.js +306 -0
  387. package/vendor/ink/build/reconciler.js.map +1 -0
  388. package/vendor/ink/build/render-background.d.ts +4 -0
  389. package/vendor/ink/build/render-background.js +25 -0
  390. package/vendor/ink/build/render-background.js.map +1 -0
  391. package/vendor/ink/build/render-border.d.ts +4 -0
  392. package/vendor/ink/build/render-border.js +84 -0
  393. package/vendor/ink/build/render-border.js.map +1 -0
  394. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  395. package/vendor/ink/build/render-node-to-output.js +162 -0
  396. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  397. package/vendor/ink/build/render-to-string.d.ts +38 -0
  398. package/vendor/ink/build/render-to-string.js +116 -0
  399. package/vendor/ink/build/render-to-string.js.map +1 -0
  400. package/vendor/ink/build/render.d.ts +176 -0
  401. package/vendor/ink/build/render.js +71 -0
  402. package/vendor/ink/build/render.js.map +1 -0
  403. package/vendor/ink/build/renderer.d.ts +8 -0
  404. package/vendor/ink/build/renderer.js +64 -0
  405. package/vendor/ink/build/renderer.js.map +1 -0
  406. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  407. package/vendor/ink/build/sanitize-ansi.js +27 -0
  408. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  409. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  410. package/vendor/ink/build/squash-text-nodes.js +36 -0
  411. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  412. package/vendor/ink/build/styles.d.ts +302 -0
  413. package/vendor/ink/build/styles.js +303 -0
  414. package/vendor/ink/build/styles.js.map +1 -0
  415. package/vendor/ink/build/utils.d.ts +9 -0
  416. package/vendor/ink/build/utils.js +19 -0
  417. package/vendor/ink/build/utils.js.map +1 -0
  418. package/vendor/ink/build/wrap-text.d.ts +3 -0
  419. package/vendor/ink/build/wrap-text.js +38 -0
  420. package/vendor/ink/build/wrap-text.js.map +1 -0
  421. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  422. package/vendor/ink/build/write-synchronized.js +9 -0
  423. package/vendor/ink/build/write-synchronized.js.map +1 -0
  424. package/vendor/ink/license +10 -0
  425. package/vendor/ink/package.json +137 -0
  426. package/.claude-plugin/marketplace.json +0 -34
  427. package/.claude-plugin/plugin.json +0 -20
  428. package/.gitattributes +0 -34
  429. package/.mcp.json +0 -14
  430. package/ARCHITECTURE.md +0 -77
  431. package/CHANGELOG.md +0 -30
  432. package/CONTRIBUTING.md +0 -45
  433. package/DATA-FLOW.md +0 -79
  434. package/LICENSE +0 -21
  435. package/SECURITY.md +0 -138
  436. package/UNINSTALL.md +0 -115
  437. package/agents/maintenance.md +0 -5
  438. package/agents/memory-classification.md +0 -30
  439. package/agents/scheduler-task.md +0 -18
  440. package/agents/webhook-handler.md +0 -27
  441. package/agents/worker.md +0 -24
  442. package/bin/bridge +0 -133
  443. package/bin/statusline-launcher.mjs +0 -82
  444. package/bin/statusline-lib.mjs +0 -581
  445. package/bin/statusline-route.mjs +0 -273
  446. package/bin/statusline.mjs +0 -638
  447. package/bun.lock +0 -927
  448. package/commands/config.md +0 -16
  449. package/commands/doctor.md +0 -13
  450. package/commands/model.md +0 -61
  451. package/commands/setup.md +0 -17
  452. package/defaults/hidden-roles.json +0 -68
  453. package/defaults/memory-chunk-prompt.md +0 -63
  454. package/defaults/mixdog-config.template.json +0 -27
  455. package/defaults/user-workflow.json +0 -8
  456. package/defaults/user-workflow.md +0 -17
  457. package/hooks/hooks.json +0 -73
  458. package/hooks/lib/active-instance.cjs +0 -77
  459. package/hooks/lib/permission-evaluator.cjs +0 -411
  460. package/hooks/lib/permission-route.cjs +0 -63
  461. package/hooks/lib/settings-loader.cjs +0 -117
  462. package/hooks/post-tool-use.cjs +0 -84
  463. package/hooks/pre-mcp-sandbox.cjs +0 -158
  464. package/hooks/pre-tool-subagent.cjs +0 -258
  465. package/hooks/session-start.cjs +0 -1493
  466. package/hooks/shim-launcher.cjs +0 -65
  467. package/hooks/turn-timer.cjs +0 -82
  468. package/lib/claude-md-writer.cjs +0 -386
  469. package/lib/keychain-cjs.cjs +0 -290
  470. package/lib/plugin-paths.cjs +0 -69
  471. package/lib/rules-builder.cjs +0 -241
  472. package/native/README.md +0 -117
  473. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  474. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  475. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  476. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  477. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  478. package/prompts/code-review.txt +0 -16
  479. package/prompts/security-audit.txt +0 -17
  480. package/rules/bridge/00-common.md +0 -39
  481. package/rules/bridge/20-skip-protocol.md +0 -18
  482. package/rules/bridge/30-explorer.md +0 -33
  483. package/rules/bridge/40-cycle1-agent.md +0 -52
  484. package/rules/bridge/41-cycle2-agent.md +0 -62
  485. package/rules/lead/00-tool-lead.md +0 -61
  486. package/rules/lead/01-general.md +0 -26
  487. package/rules/lead/02-channels.md +0 -49
  488. package/rules/lead/03-team.md +0 -27
  489. package/rules/lead/04-workflow.md +0 -20
  490. package/rules/shared/00-language.md +0 -14
  491. package/rules/shared/01-tool.md +0 -138
  492. package/scripts/bootstrap.mjs +0 -130
  493. package/scripts/bridge-unify-smoke.mjs +0 -308
  494. package/scripts/build-runtime-linux.sh +0 -348
  495. package/scripts/build-runtime-macos.sh +0 -217
  496. package/scripts/build-runtime-windows.ps1 +0 -242
  497. package/scripts/builtin-utils-smoke.mjs +0 -398
  498. package/scripts/bump.mjs +0 -80
  499. package/scripts/check-json.mjs +0 -45
  500. package/scripts/check-syntax-changed.mjs +0 -102
  501. package/scripts/check-syntax.mjs +0 -58
  502. package/scripts/code-graph-batch.test.mjs +0 -33
  503. package/scripts/config-preserve-smoke.mjs +0 -180
  504. package/scripts/doctor.mjs +0 -489
  505. package/scripts/edit-normalize-fuzz.mjs +0 -130
  506. package/scripts/edit-normalize-smoke.mjs +0 -401
  507. package/scripts/edit-operation-smoke.mjs +0 -369
  508. package/scripts/edit2-smoke.mjs +0 -63
  509. package/scripts/ensure-deps.mjs +0 -259
  510. package/scripts/fuzzy-e2e.mjs +0 -28
  511. package/scripts/fuzzy-smoke.mjs +0 -26
  512. package/scripts/gateway-model.mjs +0 -596
  513. package/scripts/generate-runtime-manifest.mjs +0 -166
  514. package/scripts/guard-smoke.mjs +0 -66
  515. package/scripts/hidden-role-schema-smoke.mjs +0 -162
  516. package/scripts/hook-routing-smoke.mjs +0 -29
  517. package/scripts/inject-input.ps1 +0 -204
  518. package/scripts/io-complex-smoke.mjs +0 -667
  519. package/scripts/io-explore-bench.mjs +0 -424
  520. package/scripts/io-guardrails-smoke.mjs +0 -205
  521. package/scripts/io-mini-bench-baseline.json +0 -11
  522. package/scripts/io-mini-bench.mjs +0 -216
  523. package/scripts/io-route-harness.mjs +0 -933
  524. package/scripts/io-telemetry-report.mjs +0 -691
  525. package/scripts/lib/gateway-inventory.mjs +0 -178
  526. package/scripts/lib/gateway-settings.mjs +0 -78
  527. package/scripts/mutation-bench.mjs +0 -564
  528. package/scripts/mutation-io-smoke.mjs +0 -1097
  529. package/scripts/native-patch-bridge-smoke.mjs +0 -288
  530. package/scripts/native-patch-smoke.mjs +0 -304
  531. package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
  532. package/scripts/patch-interior-context-smoke.mjs +0 -49
  533. package/scripts/patch-newline-utf8-smoke.mjs +0 -157
  534. package/scripts/perf-hook-smoke.mjs +0 -71
  535. package/scripts/permission-eval-smoke.mjs +0 -443
  536. package/scripts/prep-patch.mjs +0 -53
  537. package/scripts/prep-shim.mjs +0 -96
  538. package/scripts/provider-cache-smoke.mjs +0 -687
  539. package/scripts/report-runtime-health.mjs +0 -132
  540. package/scripts/resolve-bun.mjs +0 -60
  541. package/scripts/run-mcp.mjs +0 -1473
  542. package/scripts/salvage-v4a-shatter.test.mjs +0 -58
  543. package/scripts/scoped-cache-io-smoke.mjs +0 -103
  544. package/scripts/shell-policy-round3-smoke.mjs +0 -46
  545. package/scripts/smoke-runtime-negative.ps1 +0 -100
  546. package/scripts/smoke-runtime-negative.sh +0 -95
  547. package/scripts/stall-policy-smoke.mjs +0 -50
  548. package/scripts/start-memory-worker.mjs +0 -23
  549. package/scripts/statusline-launcher-smoke.mjs +0 -235
  550. package/scripts/stress-atomic-write.mjs +0 -1028
  551. package/scripts/test-fault-inject.mjs +0 -164
  552. package/scripts/test-large-file.mjs +0 -174
  553. package/scripts/tool-edge-smoke.mjs +0 -209
  554. package/scripts/uninstall.mjs +0 -238
  555. package/scripts/webhook-selfheal-smoke.mjs +0 -27
  556. package/scripts/write-overwrite-guard-smoke.mjs +0 -56
  557. package/server-main.mjs +0 -3350
  558. package/server.mjs +0 -468
  559. package/setup/config-merge.mjs +0 -246
  560. package/setup/install.mjs +0 -574
  561. package/setup/launch-core.mjs +0 -617
  562. package/setup/launch.mjs +0 -101
  563. package/setup/locate-claude.mjs +0 -56
  564. package/setup/mixdog-cli.mjs +0 -122
  565. package/setup/setup-server.mjs +0 -3305
  566. package/setup/setup.html +0 -3740
  567. package/setup/tui.mjs +0 -325
  568. package/skills/retro-skill-proposer/SKILL.md +0 -92
  569. package/skills/schedule-add/SKILL.md +0 -77
  570. package/skills/setup/SKILL.md +0 -356
  571. package/skills/webhook-add/SKILL.md +0 -81
  572. package/src/agent/bridge-stall-watchdog.mjs +0 -337
  573. package/src/agent/index.mjs +0 -2229
  574. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
  575. package/src/agent/orchestrator/bridge-retry.mjs +0 -220
  576. package/src/agent/orchestrator/bridge-trace.mjs +0 -601
  577. package/src/agent/orchestrator/cache-mtime.mjs +0 -58
  578. package/src/agent/orchestrator/config.mjs +0 -405
  579. package/src/agent/orchestrator/context/collect.mjs +0 -651
  580. package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
  581. package/src/agent/orchestrator/drain-registry.mjs +0 -50
  582. package/src/agent/orchestrator/explore-validator.mjs +0 -8
  583. package/src/agent/orchestrator/internal-roles.mjs +0 -118
  584. package/src/agent/orchestrator/internal-tools.mjs +0 -88
  585. package/src/agent/orchestrator/jobs.mjs +0 -116
  586. package/src/agent/orchestrator/mcp/client.mjs +0 -364
  587. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1884
  588. package/src/agent/orchestrator/providers/anthropic.mjs +0 -598
  589. package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
  590. package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
  591. package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
  592. package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
  593. package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
  594. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
  595. package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
  596. package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
  597. package/src/agent/orchestrator/providers/registry.mjs +0 -192
  598. package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
  599. package/src/agent/orchestrator/session/cache/post-edit-marks.mjs +0 -42
  600. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
  601. package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
  602. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
  603. package/src/agent/orchestrator/session/loop.mjs +0 -1619
  604. package/src/agent/orchestrator/session/manager.mjs +0 -1991
  605. package/src/agent/orchestrator/session/result-classification.mjs +0 -65
  606. package/src/agent/orchestrator/session/store.mjs +0 -632
  607. package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
  608. package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
  609. package/src/agent/orchestrator/session/trim.mjs +0 -491
  610. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
  611. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
  612. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
  613. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
  614. package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
  615. package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
  616. package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
  617. package/src/agent/orchestrator/stall-policy.mjs +0 -201
  618. package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
  619. package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
  620. package/src/agent/orchestrator/tools/builtin/advisory-lock.mjs +0 -171
  621. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -511
  622. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
  623. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
  624. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
  625. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
  626. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
  627. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
  628. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
  629. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
  630. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
  631. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
  632. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
  633. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
  634. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
  635. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
  636. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
  637. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
  638. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
  639. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
  640. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
  641. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
  642. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
  643. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
  644. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
  645. package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
  646. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
  647. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
  648. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
  649. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
  650. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
  651. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
  652. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
  653. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
  654. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
  655. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
  656. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
  657. package/src/agent/orchestrator/tools/builtin.mjs +0 -503
  658. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
  659. package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
  660. package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
  661. package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
  662. package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
  663. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
  664. package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
  665. package/src/agent/orchestrator/tools/host-input.mjs +0 -204
  666. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
  667. package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
  668. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
  669. package/src/agent/orchestrator/tools/patch.mjs +0 -2754
  670. package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
  671. package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
  672. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
  673. package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
  674. package/src/agent/orchestrator/workflow-store.mjs +0 -93
  675. package/src/agent/tool-defs.mjs +0 -110
  676. package/src/channels/backends/discord.mjs +0 -784
  677. package/src/channels/data/voice-runtime-manifest.json +0 -138
  678. package/src/channels/index.mjs +0 -3268
  679. package/src/channels/lib/config.mjs +0 -292
  680. package/src/channels/lib/drop-trace.mjs +0 -71
  681. package/src/channels/lib/event-pipeline.mjs +0 -81
  682. package/src/channels/lib/holidays.mjs +0 -138
  683. package/src/channels/lib/hook-pipe-server.mjs +0 -822
  684. package/src/channels/lib/output-forwarder.mjs +0 -765
  685. package/src/channels/lib/runtime-paths.mjs +0 -552
  686. package/src/channels/lib/scheduler.mjs +0 -723
  687. package/src/channels/lib/session-discovery.mjs +0 -103
  688. package/src/channels/lib/state-file.mjs +0 -68
  689. package/src/channels/lib/status-snapshot.mjs +0 -219
  690. package/src/channels/lib/tool-format.mjs +0 -140
  691. package/src/channels/lib/transcript-discovery.mjs +0 -195
  692. package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
  693. package/src/channels/lib/webhook.mjs +0 -1318
  694. package/src/channels/tool-defs.mjs +0 -170
  695. package/src/daemon/host.mjs +0 -118
  696. package/src/daemon/mcp-transport.mjs +0 -47
  697. package/src/daemon/session.mjs +0 -100
  698. package/src/daemon/thin-client.mjs +0 -71
  699. package/src/daemon/transport.mjs +0 -163
  700. package/src/gateway/claude-current.mjs +0 -255
  701. package/src/gateway/oauth-usage.mjs +0 -598
  702. package/src/gateway/route-meta.mjs +0 -629
  703. package/src/gateway/server.mjs +0 -713
  704. package/src/memory/data/runtime-manifest.json +0 -40
  705. package/src/memory/index.mjs +0 -3332
  706. package/src/memory/lib/core-memory-store.mjs +0 -330
  707. package/src/memory/lib/embedding-provider.mjs +0 -269
  708. package/src/memory/lib/embedding-worker.mjs +0 -323
  709. package/src/memory/lib/memory-cycle1.mjs +0 -645
  710. package/src/memory/lib/memory-cycle2.mjs +0 -1284
  711. package/src/memory/lib/memory-cycle3.mjs +0 -540
  712. package/src/memory/lib/memory-embed.mjs +0 -299
  713. package/src/memory/lib/memory-ops-policy.mjs +0 -190
  714. package/src/memory/lib/memory-recall-store.mjs +0 -638
  715. package/src/memory/lib/memory.mjs +0 -412
  716. package/src/memory/lib/pg/adapter.mjs +0 -308
  717. package/src/memory/lib/pg/process.mjs +0 -360
  718. package/src/memory/lib/pg/supervisor.mjs +0 -396
  719. package/src/memory/lib/runtime-fetcher.mjs +0 -458
  720. package/src/memory/lib/trace-store.mjs +0 -728
  721. package/src/memory/tool-defs.mjs +0 -79
  722. package/src/search/index.mjs +0 -1173
  723. package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
  724. package/src/search/lib/backends/exa.mjs +0 -50
  725. package/src/search/lib/backends/firecrawl.mjs +0 -61
  726. package/src/search/lib/backends/gemini-api.mjs +0 -83
  727. package/src/search/lib/backends/grok-oauth.mjs +0 -86
  728. package/src/search/lib/backends/index.mjs +0 -150
  729. package/src/search/lib/backends/openai-api.mjs +0 -144
  730. package/src/search/lib/backends/openai-oauth.mjs +0 -102
  731. package/src/search/lib/backends/openai-web-search.mjs +0 -76
  732. package/src/search/lib/backends/tavily.mjs +0 -55
  733. package/src/search/lib/backends/xai-api.mjs +0 -113
  734. package/src/search/lib/config.mjs +0 -192
  735. package/src/search/lib/provider-usage.mjs +0 -67
  736. package/src/search/lib/providers.mjs +0 -47
  737. package/src/search/lib/search-intent.mjs +0 -109
  738. package/src/search/lib/setup-handler.mjs +0 -261
  739. package/src/search/lib/web-tools.mjs +0 -1219
  740. package/src/search/tool-defs.mjs +0 -83
  741. package/src/setup/defender-exclusion.mjs +0 -183
  742. package/src/shared/atomic-file.mjs +0 -436
  743. package/src/shared/config.mjs +0 -372
  744. package/src/shared/daemon-recycle.mjs +0 -108
  745. package/src/shared/disable-claude-builtins.mjs +0 -91
  746. package/src/shared/err-text.mjs +0 -12
  747. package/src/shared/llm/http-agent.mjs +0 -123
  748. package/src/shared/open-url.mjs +0 -62
  749. package/src/shared/plugin-paths.mjs +0 -58
  750. package/src/shared/schedules-store.mjs +0 -70
  751. package/src/shared/seed.mjs +0 -161
  752. package/src/shared/user-cwd.mjs +0 -225
  753. package/src/shared/user-data-guard.mjs +0 -244
  754. package/src/status/aggregator.mjs +0 -584
  755. package/src/status/server.mjs +0 -413
  756. package/tools.json +0 -1671
  757. /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
  758. /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
  759. /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
  760. /package/{lib → src/lib}/config-cjs.cjs +0 -0
  761. /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
  762. /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
  763. /package/{lib → src/lib}/text-utils.cjs +0 -0
  764. /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
  765. /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
  766. /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
  767. /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
  768. /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
  769. /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
  770. /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
  771. /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
  772. /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
  773. /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
  774. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
  775. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
  776. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
  777. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
  778. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
  779. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
  780. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
  781. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
  782. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
  783. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
  784. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
  785. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
  786. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
  787. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
  788. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
  789. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
  790. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
  791. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
  792. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
  793. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
  794. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
  795. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
  796. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
  797. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
  798. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
  799. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
  800. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
  801. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
  802. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
  803. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
  804. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
  805. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
  806. /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
  807. /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
  808. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
  809. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
  810. /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
  811. /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
  812. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
  813. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
  814. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
  815. /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
  816. /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
  817. /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
  818. /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
  819. /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
  820. /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
  821. /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
  822. /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
  823. /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
  824. /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
  825. /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
  826. /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
  827. /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
  828. /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
  829. /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
  830. /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
  831. /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
  832. /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
  833. /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
  834. /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
  835. /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
  836. /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
  837. /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
  838. /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
  839. /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
  840. /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
  841. /package/src/{search → runtime/search}/lib/state.mjs +0 -0
  842. /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
  843. /package/src/{shared → runtime/shared}/llm/cost.mjs +0 -0
  844. /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
  845. /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
  846. /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
  847. /package/src/{shared → runtime/shared}/wsl.mjs +0 -0
@@ -1,491 +0,0 @@
1
- import { isOffloadedToolResultText } from './tool-result-offload.mjs';
2
- import { createHash } from 'node:crypto';
3
-
4
- // Rough token estimate: ~4 chars per token
5
- function estimateTokens(text) {
6
- return Math.ceil(String(text ?? '').length / 4);
7
- }
8
- function messageEstimateText(m) {
9
- if (!m || typeof m !== 'object') return '';
10
- let text = typeof m.content === 'string' ? m.content : JSON.stringify(m.content ?? '');
11
- if (m.role === 'assistant' && Array.isArray(m.toolCalls) && m.toolCalls.length) {
12
- try { text += `\n${JSON.stringify(m.toolCalls)}`; }
13
- catch { text += `\n[${m.toolCalls.length} tool calls]`; }
14
- }
15
- if (m.role === 'tool' && m.toolCallId) text += `\n${m.toolCallId}`;
16
- return text;
17
- }
18
- function estimateMessageTokens(m) {
19
- return estimateTokens(messageEstimateText(m)) + 4;
20
- }
21
- export function estimateMessagesTokens(messages) {
22
- return messages.reduce((sum, m) => sum + estimateMessageTokens(m), 0);
23
- }
24
-
25
- // Per-request overhead the provider injects that never appears in the
26
- // `messages` array: function-calling preamble + system-prompt framing the
27
- // provider wraps around the request. The chars/4 message estimate misses all
28
- // of it, so a "fits" verdict computed from messages alone is optimistic.
29
- const REQUEST_OVERHEAD_TOKENS = 512;
30
-
31
- /**
32
- * Estimate the token cost of the tool/function schemas a provider appends to
33
- * the request body. These are NOT part of `messages` (they're a separate
34
- * argument to provider.send), so estimateMessagesTokens() ignores them
35
- * entirely — a transcript that "fits" by message tokens can still overflow
36
- * once N tool schemas are serialized into the same request. Best-effort
37
- * chars/4 over the JSON-serialized definitions.
38
- */
39
- export function estimateToolSchemaTokens(tools) {
40
- if (!Array.isArray(tools) || tools.length === 0) return 0;
41
- let text = '';
42
- try { text = JSON.stringify(tools); }
43
- catch { text = tools.map(t => String(t?.name ?? '')).join(''); }
44
- return estimateTokens(text);
45
- }
46
-
47
- /**
48
- * Total headroom the caller should reserve out of the context window before
49
- * trimming: tool-schema bytes + fixed request framing overhead. Pass the
50
- * result as `opts.reserveTokens` to trimMessages so the working budget
51
- * accounts for request-side bytes the message estimate cannot see.
52
- */
53
- export function estimateRequestReserveTokens(tools) {
54
- return estimateToolSchemaTokens(tools) + REQUEST_OVERHEAD_TOKENS;
55
- }
56
- const TOOL_MISSING_STUB = '[Older tool result dropped to fit the context window]';
57
- /**
58
- * Walk backward from `idx` past consecutive tool messages to the parent
59
- * assistant message that emitted the tool_calls. Returns an index that points
60
- * at (or before) that assistant so a byte-budget cut drops the group as a
61
- * unit rather than leaving orphan tool results. Returns `idx` unchanged if
62
- * we didn't land inside a group.
63
- */
64
- export function alignBoundaryBackward(messages, idx) {
65
- if (!Array.isArray(messages) || idx <= 0 || idx >= messages.length) return idx;
66
- let i = idx;
67
- while (i > 0 && messages[i]?.role === 'tool') i--;
68
- if (i === idx) return idx;
69
- const anchor = messages[i];
70
- if (anchor?.role === 'assistant' && Array.isArray(anchor.toolCalls) && anchor.toolCalls.length) {
71
- return i;
72
- }
73
- return idx;
74
- }
75
- /**
76
- * Post-trim sanitization (Hermes `_sanitize_tool_pairs`):
77
- * - Drop `tool` messages whose toolCallId has no surviving assistant tool_call.
78
- * - For surviving assistant tool_calls whose results got trimmed, insert a
79
- * stub tool message so the provider doesn't reject the request for
80
- * unmatched tool_use_id.
81
- * Messages ordering is preserved; stubs are inserted immediately after the
82
- * assistant message so the tool pair sits adjacent.
83
- */
84
- export function sanitizeToolPairs(messages) {
85
- if (!Array.isArray(messages) || messages.length === 0) return messages;
86
- const assistantCallIds = new Set();
87
- for (const m of messages) {
88
- if (m.role === 'assistant' && Array.isArray(m.toolCalls)) {
89
- for (const tc of m.toolCalls) {
90
- if (tc && tc.id) assistantCallIds.add(tc.id);
91
- }
92
- }
93
- }
94
- const toolById = new Map();
95
- for (const m of messages) {
96
- if (m.role === 'tool' && m.toolCallId) toolById.set(m.toolCallId, m);
97
- }
98
- const filtered = messages.filter(m => {
99
- if (m.role !== 'tool') return true;
100
- if (!m.toolCallId) return true;
101
- return assistantCallIds.has(m.toolCallId);
102
- });
103
- const result = [];
104
- for (const m of filtered) {
105
- result.push(m);
106
- if (m.role !== 'assistant' || !Array.isArray(m.toolCalls)) continue;
107
- for (const tc of m.toolCalls) {
108
- if (!tc?.id) continue;
109
- const existing = toolById.get(tc.id);
110
- if (existing && filtered.includes(existing)) continue;
111
- const preserved = existing?.content;
112
- result.push({
113
- role: 'tool',
114
- content: isOffloadedToolResultText(preserved) ? preserved : TOOL_MISSING_STUB,
115
- toolCallId: tc.id,
116
- });
117
- }
118
- }
119
- return result;
120
- }
121
-
122
- // Minimum body size to consider for hash-based dedup. Small results are
123
- // cheap to re-deliver and short strings often collide on trivial content
124
- // like "ok" or "done", so deduplicate only non-trivial bodies.
125
- const DEDUP_MIN_BYTES = 512;
126
-
127
- /**
128
- * Replace duplicate tool-result bodies (2nd+ occurrence of the same content
129
- * hash) with a compact reference stub. Hash-based dedup avoids re-delivering
130
- * large identical results (e.g. the same grep output called twice) while
131
- * keeping the first occurrence intact so the model still has the body.
132
- *
133
- * Skip conditions (structural — not heuristic prefix sniffing):
134
- * - m.toolKind !== 'normal' (and defined): cache-hit / error / ref messages
135
- * carry a structured kind annotation set by loop.mjs; skip them.
136
- * - No toolKind (undefined): legacy or intra-turn-dedup stubs — apply dedup
137
- * (backward compatible; the dedup body IS the meaningful result).
138
- * - content.length < DEDUP_MIN_BYTES: structural cost optimization.
139
- * - isOffloadedToolResultText(content): body is on disk, not inline.
140
- */
141
- export function dedupToolResultBodies(messages) {
142
- if (!Array.isArray(messages) || messages.length === 0) return messages;
143
- const seenHash = new Map(); // hash -> first toolCallId
144
- return messages.map((m) => {
145
- if (m?.role !== 'tool' || typeof m.content !== 'string') return m;
146
- const content = m.content;
147
- if (content.length < DEDUP_MIN_BYTES) return m;
148
- if (isOffloadedToolResultText(content)) return m;
149
- // Structural kind-based skip: non-normal kinds are already stubs/refs —
150
- // deduping them would nest stubs inside stubs and confuse the model.
151
- if (m.toolKind !== undefined && m.toolKind !== 'normal') return m;
152
- const hash = createHash('sha256').update(content).digest('hex').slice(0, 16);
153
- const first = seenHash.get(hash);
154
- if (!first) {
155
- seenHash.set(hash, m.toolCallId || '?');
156
- return m;
157
- }
158
- const stub = `[duplicate-of tool_use_id=${first}] body identical to result of ${first} (sha256 prefix matches; ${content.length} bytes elided).`;
159
- return { ...m, content: stub };
160
- });
161
- }
162
-
163
- // Match the head of dedupToolResultBodies' stub body so we can detect whether
164
- // the referenced first-occurrence tool_use_id is still present after later
165
- // drop passes (safety loop, sanitize). Any stub pointing at an id no longer
166
- // in the message stream is reconciled back to TOOL_MISSING_STUB so the model
167
- // never sees `[duplicate-of call_X]` with no call_X.
168
- const DEDUP_STUB_HEAD_RE = /^\[duplicate-of tool_use_id=([^\]]+)\]/;
169
- export function reconcileDedupStubs(messages) {
170
- if (!Array.isArray(messages) || messages.length === 0) return messages;
171
- const presentIds = new Set();
172
- for (const m of messages) {
173
- if (m?.role === 'tool' && m.toolCallId) presentIds.add(m.toolCallId);
174
- }
175
- return messages.map((m) => {
176
- if (m?.role !== 'tool' || typeof m.content !== 'string') return m;
177
- const match = DEDUP_STUB_HEAD_RE.exec(m.content);
178
- if (!match) return m;
179
- if (presentIds.has(match[1])) return m;
180
- return { ...m, content: TOOL_MISSING_STUB };
181
- });
182
- }
183
-
184
- /**
185
- * Final-mile pairing for Anthropic API content arrays. Operates on the
186
- * already-converted format (role: assistant|user|system, content: block[])
187
- * — the mixdog-internal sanitizeToolPairs only sees toolCalls/toolCallId
188
- * fields and misses cases where tool_use blocks were pushed directly into
189
- * content (streaming chunk inserts, salvage paths, etc.). Without this
190
- * pass, an unmatched tool_use can reach the provider and trigger
191
- * `messages.N: tool_use ids were found without tool_result blocks
192
- * immediately after`.
193
- */
194
- export function sanitizeAnthropicContentPairs(messages) {
195
- if (!Array.isArray(messages)) return messages;
196
- const work = messages.slice();
197
- const out = [];
198
- for (let i = 0; i < work.length; i++) {
199
- let m = work[i];
200
- // Drop tool_use blocks without an id from assistant messages — these
201
- // come from partial streaming chunks that never finalised, and the
202
- // provider rejects them as `tool_use ids were found without
203
- // tool_result blocks` even though no id was actually emitted.
204
- if (m?.role === 'assistant' && Array.isArray(m.content)) {
205
- const cleaned = m.content.filter(
206
- (b) => !(b?.type === 'tool_use' && !b.id),
207
- );
208
- if (cleaned.length !== m.content.length) {
209
- m = { ...m, content: cleaned };
210
- work[i] = m;
211
- }
212
- }
213
- out.push(m);
214
- if (m?.role !== 'assistant' || !Array.isArray(m.content)) continue;
215
- const toolUseIds = m.content
216
- .filter((b) => b?.type === 'tool_use' && b.id)
217
- .map((b) => b.id);
218
- if (toolUseIds.length === 0) continue;
219
- const next = work[i + 1];
220
- const nextResultIds = (next?.role === 'user' && Array.isArray(next.content))
221
- ? new Set(
222
- next.content
223
- .filter((b) => b?.type === 'tool_result' && b.tool_use_id)
224
- .map((b) => b.tool_use_id),
225
- )
226
- : new Set();
227
- const missing = toolUseIds.filter((id) => !nextResultIds.has(id));
228
- const stubs = missing.map((id) => ({
229
- type: 'tool_result',
230
- tool_use_id: id,
231
- content: '[tool_result missing — recovered by sanitizeAnthropicContentPairs]',
232
- is_error: true,
233
- }));
234
- if (next?.role === 'user' && Array.isArray(next.content)) {
235
- // Anthropic requires tool_result blocks to lead the user message
236
- // when responding to a prior tool_use. Reorder even when no stub
237
- // was needed; a matching tool_result after text still triggers the
238
- // same `tool_use ids ... without tool_result blocks immediately
239
- // after` rejection.
240
- const existingResults = next.content.filter((b) => b?.type === 'tool_result');
241
- const nonResults = next.content.filter((b) => b?.type !== 'tool_result');
242
- const reordered = [...stubs, ...existingResults, ...nonResults];
243
- const changed = missing.length > 0 || reordered.some((b, idx) => b !== next.content[idx]);
244
- if (changed) work[i + 1] = { ...next, content: reordered };
245
- } else {
246
- if (missing.length === 0) continue;
247
- out.push({ role: 'user', content: stubs });
248
- }
249
- }
250
- return out;
251
- }
252
-
253
- /**
254
- * Trim messages to fit within a token budget.
255
- *
256
- * Single linear path — no fallback chain:
257
- * 1. Sanitize tool pairs on entry.
258
- * 2. Dedup repeated large tool-result bodies (hash-based; first occurrence kept).
259
- * 3. Return deduped messages if already within budget.
260
- * 4. Drop tool result messages oldest-first; also drop paired assistant
261
- * once all its tool calls are gone.
262
- * 5. If still over budget, drop oldest non-system messages respecting
263
- * tool-call group boundaries.
264
- * 6. Final sanitize + safety loop absorbs stub-insertion overshoot.
265
- *
266
- * budgetTokens MUST be derived from the model's context window by the
267
- * caller (session.contextWindow * safetyFactor). Passing 0 or a negative
268
- * value is a caller error and throws immediately.
269
- *
270
- * opts.reserveTokens (optional) subtracts request-side bytes the message
271
- * estimate cannot see (tool schemas + provider framing — see
272
- * estimateRequestReserveTokens). The reserve is clamped so it can never
273
- * drive the effective budget to <= 0; at most it leaves 1 token of working
274
- * room so callers that over-estimate the reserve still get a usable budget
275
- * rather than an immediate throw.
276
- */
277
- export function trimMessages(messages, budgetTokens, opts = {}) {
278
- if (!(budgetTokens > 0)) throw new Error();
279
- const reserve = Number(opts?.reserveTokens) || 0;
280
- if (reserve > 0) {
281
- // Cap the reserve so it can never consume more than half the budget.
282
- // An over-estimated reserve (large tool schemas relative to a small
283
- // context window) would otherwise collapse the effective budget toward
284
- // 1, making system+latest baseCost exceed it and forcing trimMessages
285
- // to throw — which defeats the overflow-resilience goal. Half-budget
286
- // is the floor: the reserve still accounts for tool schemas but can
287
- // never starve the mandatory system+latest content.
288
- const effectiveReserve = Math.min(reserve, Math.floor(budgetTokens * 0.5));
289
- budgetTokens = Math.max(1, budgetTokens - effectiveReserve);
290
- }
291
-
292
- const sanitized = sanitizeToolPairs(messages);
293
- // Cache-anchor invariant: when sanitized messages already fit the budget,
294
- // return them WITHOUT running dedupToolResultBodies. Dedup creates new
295
- // object refs on every duplicate hit (sha256 match on ≥512B tool result
296
- // bodies); messagesArrayChanged in loop.mjs detects those new refs as
297
- // mutation and drops providerState, which kills the server-side
298
- // previous_response_id chain that xAI Responses / Codex WS rely on for
299
- // prefix cache reuse. Skip the payload optimization when it would cost
300
- // a fresh cache cold-start for no token-budget benefit.
301
- if (estimateMessagesTokens(sanitized) <= budgetTokens) return reconcileDedupStubs(sanitized);
302
- // Over budget: dedup-then-fit before drop. If post-dedup body fits the
303
- // budget, return the deduped result without dropping. Both stub and
304
- // original are still in the message stream so the stub reference is safe.
305
- // Survivors-only dedup (Pass 1/2 below) still applies when drop is required.
306
- const deduped = dedupToolResultBodies(sanitized);
307
- if (estimateMessagesTokens(deduped) <= budgetTokens) return reconcileDedupStubs(deduped);
308
-
309
- const system = sanitized.filter(m => m.role === 'system');
310
- const rest = sanitized.filter(m => m.role !== 'system');
311
- if (rest.length === 0) return reconcileDedupStubs(system);
312
-
313
- // The most-recent turn must survive intact. When the last message is a tool
314
- // result, its owning assistant (and that assistant's sibling tool results)
315
- // form one atomic "last group" — we keep the whole group, never a bare
316
- // orphan tool result. The boundary is determined strictly by toolCallId
317
- // ownership (invariant), not by position.
318
- const lastMsg = rest[rest.length - 1];
319
- let lastGroupStart = rest.length - 1;
320
- if (lastMsg && lastMsg.role === 'tool' && lastMsg.toolCallId) {
321
- const ownerIdx = rest.findIndex(m =>
322
- m.role === 'assistant' && Array.isArray(m.toolCalls) &&
323
- m.toolCalls.some(tc => tc.id === lastMsg.toolCallId)
324
- );
325
- if (ownerIdx !== -1) lastGroupStart = ownerIdx;
326
- }
327
- const lastGroup = rest.slice(lastGroupStart);
328
- let middle = rest.slice(0, lastGroupStart);
329
- const baseCost = estimateMessagesTokens(system) + estimateMessagesTokens(lastGroup);
330
-
331
- // Exact fit (baseCost === budget) must be allowed — only a true overshoot throws.
332
- if (baseCost > budgetTokens) throw new Error(`trimMessages: cannot fit even system+last group within budget=${budgetTokens} (base=${baseCost})`);
333
-
334
- // Pass 1: drop tool results oldest-first; drop paired assistant when all its calls are gone.
335
- let total = estimateMessagesTokens(middle);
336
- while (total + baseCost > budgetTokens) {
337
- const toolIdx = middle.findIndex(m => m.role === 'tool');
338
- if (toolIdx === -1) break;
339
- const toolCallId = middle[toolIdx].toolCallId;
340
- total -= estimateMessageTokens(middle[toolIdx]);
341
- middle.splice(toolIdx, 1);
342
- if (toolCallId) {
343
- const assistantIdx = middle.findIndex(m =>
344
- m.role === 'assistant' && Array.isArray(m.toolCalls) &&
345
- m.toolCalls.some(tc => tc.id === toolCallId)
346
- );
347
- if (assistantIdx !== -1) {
348
- const assistantMsg = middle[assistantIdx];
349
- const remainingCalls = assistantMsg.toolCalls.filter(tc =>
350
- middle.some(m => m.role === 'tool' && m.toolCallId === tc.id)
351
- );
352
- if (remainingCalls.length === 0) {
353
- total -= estimateMessageTokens(assistantMsg);
354
- middle.splice(assistantIdx, 1);
355
- }
356
- }
357
- }
358
- }
359
-
360
- if (total + baseCost <= budgetTokens) {
361
- const s = sanitizeToolPairs([...system, ...middle, ...lastGroup]);
362
- if (estimateMessagesTokens(s) <= budgetTokens) return reconcileDedupStubs(dedupToolResultBodies(s));
363
- // sanitizeToolPairs stub inserts pushed back over budget — fall through to Pass 2.
364
- // Recompute the last-group span on the POST-sanitize sequence: stubs may have
365
- // been inserted adjacent to the last group, so using the original lastGroup.length
366
- // as a tail offset is off-by-N. Locate by matching the lastGroup subsequence
367
- // from the END of s — indexOf(lastGroup[0]) is wrong when the same object
368
- // reference repeats earlier in middle (a duplicate would promote part of
369
- // middle into the locked last group).
370
- let anchorIdx = -1;
371
- let lgMatchIdx = lastGroup.length - 1;
372
- for (let si = s.length - 1; si >= 0 && lgMatchIdx >= 0; si--) {
373
- if (s[si] === lastGroup[lgMatchIdx]) {
374
- if (lgMatchIdx === 0) { anchorIdx = si; break; }
375
- lgMatchIdx--;
376
- }
377
- }
378
- const postSanitizeLastGroup = anchorIdx === -1 ? lastGroup : s.slice(anchorIdx);
379
- const nonSystem = s.slice(0, anchorIdx === -1 ? s.length : anchorIdx)
380
- .filter(m => m.role !== 'system');
381
- middle = nonSystem;
382
- // Replace lastGroup binding so downstream baseCost/safety bounds reflect
383
- // the sanitize-grown tail (stubs inserted around the last group).
384
- lastGroup.length = 0;
385
- for (const m of postSanitizeLastGroup) lastGroup.push(m);
386
- }
387
-
388
- // Pass 2: drop oldest non-system messages, respecting tool-call group boundaries.
389
- // Recompute baseCost against the (possibly grown) lastGroup so we don't underflow
390
- // remaining by the original tail-cost estimate.
391
- const baseCostP2 = estimateMessagesTokens(system) + estimateMessagesTokens(lastGroup);
392
- let remaining = budgetTokens - baseCostP2;
393
- const kept = [];
394
- // Track which middle messages have already had their cost subtracted from
395
- // `remaining`. Without this, a paired-assistant charged via the tool→owner
396
- // lookup gets charged again when the outer loop reaches its own index,
397
- // double-counting its cost and underflowing `remaining` -> premature break
398
- // that drops content which still fits.
399
- const charged = new Set();
400
- const startIdx = alignBoundaryBackward(middle, middle.length - 1);
401
- for (let i = startIdx; i >= 0; i--) {
402
- const m = middle[i];
403
- const cost = charged.has(m) ? 0 : estimateMessageTokens(m);
404
- if (remaining - cost < 0) break;
405
- if (m.role === 'tool' && m.toolCallId) {
406
- const pairedIdx = middle.findIndex((a, idx) =>
407
- idx < i && a.role === 'assistant' && Array.isArray(a.toolCalls) &&
408
- a.toolCalls.some(tc => tc.id === m.toolCallId)
409
- );
410
- if (pairedIdx !== -1 && !kept.includes(middle[pairedIdx])) {
411
- const paired = middle[pairedIdx];
412
- const pairedCost = charged.has(paired) ? 0 : estimateMessageTokens(paired);
413
- if (remaining - cost - pairedCost < 0) break;
414
- remaining -= pairedCost;
415
- charged.add(paired);
416
- kept.unshift(paired);
417
- }
418
- }
419
- if (m.role === 'assistant' && Array.isArray(m.toolCalls)) {
420
- const toolResultCosts = m.toolCalls.reduce((sum, tc) => {
421
- const toolMsg = middle.find(t =>
422
- t.role === 'tool' && t.toolCallId === tc.id && !kept.includes(t)
423
- );
424
- return sum + (toolMsg && !charged.has(toolMsg) ? estimateMessageTokens(toolMsg) : 0);
425
- }, 0);
426
- if (remaining - cost - toolResultCosts < 0) break;
427
- for (const tc of m.toolCalls) {
428
- const toolMsg = middle.find(t =>
429
- t.role === 'tool' && t.toolCallId === tc.id && !kept.includes(t)
430
- );
431
- if (toolMsg) {
432
- if (!charged.has(toolMsg)) {
433
- remaining -= estimateMessageTokens(toolMsg);
434
- charged.add(toolMsg);
435
- }
436
- kept.push(toolMsg);
437
- }
438
- }
439
- }
440
- if (!charged.has(m)) {
441
- remaining -= cost;
442
- charged.add(m);
443
- }
444
- if (!kept.includes(m)) kept.unshift(m);
445
- }
446
-
447
- const middleOrder = new Map(middle.map((m, idx) => [m, idx]));
448
- kept.sort((a, b) => (middleOrder.get(a) ?? 0) - (middleOrder.get(b) ?? 0));
449
-
450
- // Run sanitizeToolPairs before the safety loop; defer dedupToolResultBodies until after
451
- // so stubs are never left referencing content that the safety loop subsequently drops.
452
- let result = sanitizeToolPairs([...system, ...kept, ...lastGroup]);
453
- let safety = 16;
454
- while (
455
- safety-- > 0
456
- && result.length > system.length + lastGroup.length
457
- && estimateMessagesTokens(result) > budgetTokens
458
- ) {
459
- // Drop a whole aligned tool-group from the head of the non-system region,
460
- // not a single arbitrary line. Splicing one line at a time can sever an
461
- // assistant from its tool results (orphaned pair) — sanitizeToolPairs
462
- // then re-inserts a stub for the dangling tool_use, the byte count drops
463
- // by less than expected, and the loop oscillates without progress.
464
- const head = system.length;
465
- if (head >= result.length) break;
466
- let dropEnd = head + 1;
467
- const first = result[head];
468
- if (first?.role === 'assistant' && Array.isArray(first.toolCalls) && first.toolCalls.length) {
469
- const callIds = new Set(first.toolCalls.map(tc => tc.id).filter(Boolean));
470
- while (
471
- dropEnd < result.length
472
- && result[dropEnd]?.role === 'tool'
473
- && callIds.has(result[dropEnd].toolCallId)
474
- ) dropEnd++;
475
- }
476
- // Refuse to cross into the locked last group.
477
- const lastGroupStartIdx = result.length - lastGroup.length;
478
- if (dropEnd > lastGroupStartIdx) break;
479
- result.splice(head, dropEnd - head);
480
- result = sanitizeToolPairs(result);
481
- }
482
- result = dedupToolResultBodies(result);
483
- // Final stub-vs-survivor reconciliation: any [duplicate-of tool_use_id=X]
484
- // pointing at an X no longer present in `result` (carried over from a
485
- // prior trim and orphaned by this trim's drops) is rewritten to the
486
- // generic missing-stub so the model never sees a reference to an absent id.
487
- result = reconcileDedupStubs(result);
488
- const finalTokens = estimateMessagesTokens(result);
489
- if (finalTokens > budgetTokens) throw new Error(`trimMessages: exhausted drop strategy, result=${finalTokens} > budget=${budgetTokens}`);
490
- return result;
491
- }
@@ -1,115 +0,0 @@
1
- # Bridge Cache-Shard Policy
2
-
3
- Authoritative policy for prefix-cache shard construction across all bridge sessions. The implementation must satisfy every rule below; reviewers should reject changes that turn stable shared layers into per-call fragments.
4
-
5
- ## Design philosophy
6
-
7
- Maximize cross-role / cross-call cache reuse by packing every role's policy into a SHARED monolithic prefix. Bridge sessions across all roles see bit-identical BP1 + BP2. User-defined customizations (roles / schedules / webhooks) are baked into BP1 as a fixed-value block — a user edit invalidates BP1 once and the new prefix re-warms across every role together.
8
-
9
- The only per-call variance lives in BP4 (5m tail). Lead-only fields (e.g. memory recap) never enter bridge sessions.
10
-
11
- ## 4-Block Layout
12
-
13
- | Block | Role | Cache TTL | Hashed by registry | Content | Variability |
14
- |---|---|---|---|---|---|
15
- | BP1 baseRules | system | 1h | YES | bridge common rules + tool/memory/search/explore guidance + DATA_DIR roles/schedules/webhooks (monolithic) | Stable across all bridge calls. Invalidated only when a user edits roles/schedules/webhooks or plugin upgrades. |
16
- | BP2 roleCatalog | system | 1h | YES | scoped role catalog + project context | Stable for a given provider/project. Project context changes re-hash this block. |
17
- | BP3 sessionMarker | user (`<system-reminder>` with `<!-- bp3-sentinel -->` marker) | 1h | NO | role-specific task instructions, when present | Stable for that bridge session/task. Empty when no role-specific body is present. |
18
- | BP4 volatileTail | user (`<system-reminder>`, no sentinel) | 5m | NO | role / permission / task-brief | May vary per call. |
19
-
20
- **Note on tool schemas (Anthropic):** Anthropic's `cache_control` caches every block from the marked block back through the prefix (order: tools → system → messages). The system block's `cache_control` therefore covers the tool-schema array implicitly, so a separate dedicated tools breakpoint slot is not needed. This frees one of the 4 slots for the messages tail. See `anthropic.mjs:211-214` and `anthropic-oauth.mjs` for the layout decision.
21
-
22
- **Provider cache classes:** Anthropic uses explicit breakpoints and can be marked warm. OpenAI uses a provider cache key/session prefix and can be tracked as a reusable shard. Gemini uses implicit prompt caching only; hits are observed via `cachedContentTokenCount`, but the registry must not treat that as a guaranteed warm shard.
23
-
24
- ## Hash inputs
25
-
26
- `registry.markWarm` / `checkWarm` hash exactly two things:
27
-
28
- 1. `JSON.stringify(systemMessages)` — array of leading system-role messages from `session.messages` (BP1 + BP2 only)
29
- 2. `tools.map(t => ({ name, description, inputSchema }))` — the bridge tool array (sorted alphabetically by name for bridge sessions)
30
-
31
- Anything outside these two inputs MUST NOT influence the registry hash. cwd, role, permission, task-brief, memory recap, files, prompt text, tool results, provider/model/effort/fast — all excluded. Project context is part of BP2 when present, so it is included via the leading system-message hash.
32
-
33
- ## cwd policy
34
-
35
- - `cwd: null` is a fixed sentinel meaning "no caller workspace context". Internal callers (memory-cycle, scheduler, webhook) pass null deliberately to share one shard.
36
- - Never upgrade `null` to `process.cwd()` — that defeats fork suppression. The public bridge entry at `src/agent/index.mjs` MUST honor null.
37
- - Tilde (`~`) and relative paths must be normalized at the entry point. Once inside `prepareBridgeSession`, cwd is either an absolute path or null.
38
- - cwd does NOT enter the registry hash. cwd-aware tools receive cwd via tool args at call time, not via prompt injection.
39
-
40
- ## What goes where (must / must-not)
41
-
42
- **baseRules (BP1) MUST contain (monolithic, fixed value):**
43
- - `lib/rules-builder.cjs` static bridge injection (tool/memory/search/explore guidance)
44
- - `rules/bridge/00-common.md`
45
- - `DATA_DIR/roles/*.md` — every role definition aggregated
46
- - `DATA_DIR/schedules/*/instructions.md` — every schedule aggregated
47
- - `DATA_DIR/webhooks/*/instructions.md` — every webhook aggregated
48
-
49
- User edits to roles/schedules/webhooks invalidate BP1 once. This is acceptable because: (a) edits are infrequent, (b) every role re-warms together to the new prefix, (c) keeping all role policies in BP1 maximizes cross-role hit rate compared to per-call branching.
50
-
51
- **baseRules (BP1) MUST NOT contain:**
52
- - per-call values (role identity, permission, task brief, memory recap)
53
- - cwd, project context, file references
54
-
55
- **roleCatalog (BP2) MUST contain only:**
56
- - the scoped role catalog selected by `loadScopedRoleCatalog`
57
- - `# project-context` when project context is present
58
-
59
- **roleCatalog (BP2) MUST NOT contain:**
60
- - role / permission / task-brief markers
61
- - volatile tool results or user task text
62
-
63
- **sessionMarker (BP3) MUST contain only:**
64
- - `<!-- bp3-sentinel -->\n<roleSpecific>` when role-specific instructions are present
65
- - nothing when role-specific instructions are absent — emit no `<system-reminder>` at all in that case
66
-
67
- **volatileTail (BP4) MUST contain (any subset):**
68
- - `# role`, `# permission`, `# task-brief`
69
-
70
- **Lead-only fields — MUST NOT enter bridge sessions:**
71
- - `# memory-context` — recap / history context. Reserved for Lead session prompt only. Bridge `composeSystemPrompt` callers must not pass `opts.memoryContext` for `opts.owner === 'bridge'`.
72
-
73
- ## Provider Tier3 selection
74
-
75
- Anthropic provider wrapper auto-marks the first user `<system-reminder>` as BP3 (1h). To prevent volatileTail from being mistaken for BP3:
76
-
77
- - `sessionMarker` MUST carry the explicit BP3 sentinel `<!-- bp3-sentinel -->` at the head.
78
- - The provider wrapper MUST mark only sentinel-bearing reminders as 1h. Non-sentinel reminders ride 5m default.
79
- - When sessionMarker is empty, no BP3 mark is emitted; volatileTail stays at 5m.
80
-
81
- ## Tool list canonicalization
82
-
83
- Bridge sessions (`opts.owner === 'bridge'`) receive a tool array sorted alphabetically by `tool.name` after the deny-list filter. This eliminates incidental fragmentation from MCP/internal registration order changes.
84
-
85
- ## Entry-point checklist (cwd handling)
86
-
87
- Every external entry point that constructs a bridge session must satisfy:
88
-
89
- 1. `args.cwd` provided → `normalizeInputPath(args.cwd)` (expand `~`, resolve relative)
90
- 2. `args.cwd` absent and `callerCwd` available → use `callerCwd`
91
- 3. Both absent → `cwd: null`. NEVER fall back to `process.cwd()`.
92
-
93
- Current entry points (must remain compliant):
94
- - `src/agent/index.mjs` `case 'bridge'` (Lead-originated MCP dispatch; the unified `bridge` handler routes type=spawn/send/close/list)
95
- - `src/agent/orchestrator/smart-bridge/bridge-llm.mjs` `makeBridgeLlm` (internal callers)
96
-
97
- ## Trigger map (when prefix transitions)
98
-
99
- Single transition cause → effect:
100
-
101
- - Edit `lib/rules-builder.cjs` static block, `agents/*.md`, `rules/bridge/*.md`, or any `DATA_DIR/{roles,schedules,webhooks}/*.md` → BP1 or BP2 hash changes once → all roles/presets re-warm together (acceptable, infrequent)
102
- - Add/remove an MCP or internal tool → tool_schema_hash changes → all bridge sessions re-warm
103
- - Project switch → project context may change BP2 → provider shard re-warm/observe under a new prefix hash
104
- - Per-call (role / permission / task-brief change) → only BP4 5m tail differs; BP1/BP2/BP3 untouched
105
-
106
- If a single per-call change invalidates more than BP4, the policy has been violated.
107
-
108
- ## Forbidden patterns
109
-
110
- - per-role tool narrowing in bridge sessions (`opts.allowedTools` whitelist) — fragments BP2 by role group
111
- - `process.cwd()` fallback in any bridge entry point — breaks the null sentinel
112
- - emitting cwd or other variant data inside `<system-reminder>` blocks intended for BP3
113
- - mid-pipeline cwd normalization (do it once at entry)
114
- - routing memory-context into bridge sessions — Lead-only field
115
- - changing the registry hash inputs (additions or removals) without updating this document in the same change