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
@@ -0,0 +1,814 @@
1
+ import { readFileSync, existsSync, mkdirSync, appendFileSync, statSync, renameSync } from 'fs';
2
+ import { appendFile } from 'fs/promises';
3
+ import { dirname, join } from 'path';
4
+ import { createHash } from 'crypto';
5
+ import os from 'os';
6
+ import { getPluginData } from './config.mjs';
7
+ import { isInclusiveProvider } from '../../shared/llm/cost.mjs';
8
+ import { countJsonNextCalls } from './tools/next-call-utils.mjs';
9
+
10
+ const WARNED_KEYS = new Set();
11
+
12
+ // ---------------------------------------------------------------------------
13
+ // In-memory buffer + HTTP flush to memory-service /admin/trace-record
14
+ // ---------------------------------------------------------------------------
15
+ let _buffer = [];
16
+ const _BUFFER_MAX = 2000;
17
+ const _FLUSH_INTERVAL_MS = 5000;
18
+ const _FLUSH_BATCH_SIZE = 500;
19
+ let _flushTimer = null;
20
+ let _serviceUrl = null;
21
+ let _flushInFlight = false;
22
+ let _localTracePath = null;
23
+ let _localTraceBuffer = [];
24
+ let _localTraceTimer = null;
25
+ let _localTraceFlushInFlight = false;
26
+ let _toolFailurePath = null;
27
+ let _toolFailureBuffer = [];
28
+ let _toolFailureTimer = null;
29
+ let _toolFailureFlushInFlight = false;
30
+ const _LOCAL_TRACE_FLUSH_LINES = 100;
31
+ const _LOCAL_TRACE_FLUSH_MS = 1000;
32
+ const _LOCAL_TRACE_MAX_BYTES = 10 * 1024 * 1024; // 10 MB — rotate to .1 above this.
33
+ const _TOOL_FAILURE_FLUSH_LINES = 50;
34
+ const _TOOL_FAILURE_FLUSH_MS = 1000;
35
+ // Throttle interval for local rotation stat checks. statSync on every flush
36
+ // is unnecessary — rotation is a best-effort size guard. First flush always
37
+ // checks; subsequent checks wait at least this many ms. Tune via env
38
+ // MIXDOG_BRIDGE_TRACE_ROTATE_CHECK_MS (default 60000 ms, positive integer).
39
+ const MIXDOG_BRIDGE_TRACE_ROTATE_CHECK_MS = (() => {
40
+ const v = parseInt(process.env.MIXDOG_BRIDGE_TRACE_ROTATE_CHECK_MS, 10);
41
+ return Number.isFinite(v) && v > 0 ? v : 60000;
42
+ })();
43
+ let _lastRotateCheckMs = 0;
44
+ let _lastToolFailureRotateCheckMs = 0;
45
+
46
+ function _rotateLocalTraceIfNeeded(path) {
47
+ try {
48
+ const stat = statSync(path);
49
+ if (stat && stat.size > _LOCAL_TRACE_MAX_BYTES) {
50
+ try { renameSync(path, `${path}.1`); }
51
+ catch (err) {
52
+ warnBridgeOnce('bridge-trace:local-rotate', `[bridge-trace] local rotate failed (${err?.message})`);
53
+ }
54
+ }
55
+ } catch {
56
+ // File missing or unstattable — nothing to rotate.
57
+ }
58
+ }
59
+
60
+ function _resolveLocalTracePath() {
61
+ if (process.env.MIXDOG_BRIDGE_TRACE_LOCAL_DISABLE === '1') return null;
62
+ if (_localTracePath) return _localTracePath;
63
+ try {
64
+ _localTracePath = process.env.MIXDOG_BRIDGE_TRACE_PATH
65
+ || join(getPluginData(), 'history', 'bridge-trace.jsonl');
66
+ // R4 data-at-rest: trace rows may carry tool payloads / prompts;
67
+ // clamp dir to owner-only on POSIX (advisory on Windows).
68
+ mkdirSync(dirname(_localTracePath), { recursive: true, mode: 0o700 });
69
+ return _localTracePath;
70
+ } catch {
71
+ return null;
72
+ }
73
+ }
74
+
75
+ function _appendLocalTrace(row) {
76
+ if (!_resolveLocalTracePath()) return;
77
+ try {
78
+ _localTraceBuffer.push(`${JSON.stringify(row)}\n`);
79
+ if (_localTraceBuffer.length >= _LOCAL_TRACE_FLUSH_LINES) {
80
+ _flushLocalTrace();
81
+ } else if (!_localTraceTimer) {
82
+ _localTraceTimer = setTimeout(_flushLocalTrace, _LOCAL_TRACE_FLUSH_MS);
83
+ _localTraceTimer.unref?.();
84
+ }
85
+ } catch (err) {
86
+ warnBridgeOnce('bridge-trace:local-spool', `[bridge-trace] local spool failed (${err?.message})`);
87
+ }
88
+ }
89
+
90
+ function _flushLocalTrace() {
91
+ if (_localTraceTimer) {
92
+ clearTimeout(_localTraceTimer);
93
+ _localTraceTimer = null;
94
+ }
95
+ if (_localTraceBuffer.length === 0) return;
96
+ if (_localTraceFlushInFlight) {
97
+ _localTraceTimer = setTimeout(_flushLocalTrace, 25);
98
+ _localTraceTimer.unref?.();
99
+ return;
100
+ }
101
+ const path = _resolveLocalTracePath();
102
+ if (!path) return;
103
+ const chunk = _localTraceBuffer.join('');
104
+ _localTraceBuffer = [];
105
+ try {
106
+ // Throttle rotation stat checks to avoid unnecessary statSync calls
107
+ // on every flush. First flush (_lastRotateCheckMs === 0) always checks.
108
+ const now = Date.now();
109
+ if (_lastRotateCheckMs === 0 || now - _lastRotateCheckMs >= MIXDOG_BRIDGE_TRACE_ROTATE_CHECK_MS) {
110
+ _rotateLocalTraceIfNeeded(path);
111
+ _lastRotateCheckMs = now;
112
+ }
113
+ } catch (err) {
114
+ warnBridgeOnce('bridge-trace:local-spool', `[bridge-trace] local spool failed (${err?.message})`);
115
+ return;
116
+ }
117
+ // mode only applies on file creation; existing files keep their mode.
118
+ // Windows ignores POSIX bits — ACL governs there.
119
+ _localTraceFlushInFlight = true;
120
+ appendFile(path, chunk, { encoding: 'utf8', mode: 0o600 })
121
+ .catch((err) => {
122
+ warnBridgeOnce('bridge-trace:local-spool', `[bridge-trace] local spool failed (${err?.message})`);
123
+ })
124
+ .finally(() => {
125
+ _localTraceFlushInFlight = false;
126
+ if (_localTraceBuffer.length > 0) {
127
+ _localTraceTimer = setTimeout(_flushLocalTrace, 0);
128
+ _localTraceTimer.unref?.();
129
+ }
130
+ });
131
+ }
132
+
133
+ function _flushLocalTraceSync() {
134
+ if (_localTraceTimer) {
135
+ clearTimeout(_localTraceTimer);
136
+ _localTraceTimer = null;
137
+ }
138
+ if (_localTraceBuffer.length === 0) return;
139
+ const path = _resolveLocalTracePath();
140
+ if (!path) return;
141
+ const chunk = _localTraceBuffer.join('');
142
+ _localTraceBuffer = [];
143
+ try {
144
+ const now = Date.now();
145
+ if (_lastRotateCheckMs === 0 || now - _lastRotateCheckMs >= MIXDOG_BRIDGE_TRACE_ROTATE_CHECK_MS) {
146
+ _rotateLocalTraceIfNeeded(path);
147
+ _lastRotateCheckMs = now;
148
+ }
149
+ appendFileSync(path, chunk, { encoding: 'utf8', mode: 0o600 });
150
+ } catch (err) {
151
+ warnBridgeOnce('bridge-trace:local-spool', `[bridge-trace] local spool failed (${err?.message})`);
152
+ }
153
+ }
154
+
155
+ try {
156
+ process.on('beforeExit', () => {
157
+ _flushLocalTraceSync();
158
+ _flushToolFailuresSync();
159
+ });
160
+ process.on('exit', () => {
161
+ _flushLocalTraceSync();
162
+ _flushToolFailuresSync();
163
+ });
164
+ } catch {
165
+ // Ignore lifecycle hook failures in embedded runtimes.
166
+ }
167
+
168
+ function _resolveServiceUrl() {
169
+ if (_serviceUrl) return _serviceUrl;
170
+ try {
171
+ const runtimeRoot = process.env.MIXDOG_RUNTIME_ROOT
172
+ ? join(process.env.MIXDOG_RUNTIME_ROOT)
173
+ : join(os.tmpdir(), 'mixdog');
174
+ const activeFile = join(runtimeRoot, 'active-instance.json');
175
+ if (!existsSync(activeFile)) return null;
176
+ const active = JSON.parse(readFileSync(activeFile, 'utf-8'));
177
+ const port = Number(active && active.memory_port);
178
+ if (!Number.isFinite(port) || port <= 0) return null;
179
+ _serviceUrl = `http://127.0.0.1:${port}`;
180
+ return _serviceUrl;
181
+ } catch {
182
+ return null;
183
+ }
184
+ }
185
+
186
+ async function _flush() {
187
+ _flushTimer = null;
188
+ if (_buffer.length === 0) return;
189
+ if (_flushInFlight) {
190
+ if (!_flushTimer) _flushTimer = setTimeout(_flush, _FLUSH_INTERVAL_MS);
191
+ return;
192
+ }
193
+ _flushInFlight = true;
194
+ try {
195
+ const url = _resolveServiceUrl();
196
+ if (!url) {
197
+ // Service not up yet — keep buffer, retry next timer tick
198
+ if (!_flushTimer) _flushTimer = setTimeout(_flush, _FLUSH_INTERVAL_MS);
199
+ return;
200
+ }
201
+ const batch = _buffer.splice(0, _FLUSH_BATCH_SIZE);
202
+ try {
203
+ const resp = await fetch(`${url}/admin/trace-record`, {
204
+ method: 'POST',
205
+ headers: { 'Content-Type': 'application/json' },
206
+ body: JSON.stringify({ events: batch }),
207
+ signal: AbortSignal.timeout(5000),
208
+ });
209
+ if (!resp.ok) {
210
+ warnBridgeOnce('bridge-trace:flush-error', `[bridge-trace] /admin/trace-record returned ${resp.status} — dropping batch`);
211
+ }
212
+ } catch (err) {
213
+ _serviceUrl = null;
214
+ warnBridgeOnce('bridge-trace:flush-fetch', `[bridge-trace] flush fetch failed (${err?.message}) — dropping batch`);
215
+ }
216
+ if (_buffer.length >= _FLUSH_BATCH_SIZE) {
217
+ // More pending — schedule another flush immediately
218
+ setImmediate(_flush);
219
+ }
220
+ } finally {
221
+ _flushInFlight = false;
222
+ }
223
+ }
224
+
225
+ function _scheduleFlush(immediate = false) {
226
+ if (immediate) {
227
+ if (_flushTimer) { clearTimeout(_flushTimer); _flushTimer = null; }
228
+ setImmediate(_flush);
229
+ } else if (!_flushTimer) {
230
+ _flushTimer = setTimeout(_flush, _FLUSH_INTERVAL_MS);
231
+ }
232
+ }
233
+
234
+ async function drainBridgeTrace() {
235
+ if (!_resolveServiceUrl()) return;
236
+ if (_flushTimer) { clearTimeout(_flushTimer); _flushTimer = null; }
237
+ for (let i = 0; i < 10 && _buffer.length > 0; i++) {
238
+ await _flush();
239
+ }
240
+ }
241
+ process.on('exit', drainBridgeTrace);
242
+
243
+ function normalizeSessionId(sessionId) {
244
+ return sessionId ? String(sessionId) : 'no-session';
245
+ }
246
+
247
+ function appendBridgeTrace(record = {}) {
248
+ // Test isolation — when run-all-tests.mjs sets this env, skip entirely.
249
+ if (process.env.MIXDOG_BRIDGE_TRACE_DISABLE === '1') return;
250
+ try {
251
+ // Coerce ts to epoch ms integer at enqueue time
252
+ let ts = record.ts || Date.now();
253
+ if (typeof ts === 'string') ts = Date.parse(ts);
254
+ ts = Number(ts);
255
+ if (!Number.isFinite(ts)) ts = Date.now();
256
+
257
+ const row = {
258
+ ...record,
259
+ ts,
260
+ session_id: record.session_id ?? normalizeSessionId(record.sessionId),
261
+ payload: record.payload ?? {},
262
+ };
263
+ // Drop actor-facing alias to keep schema tidy
264
+ delete row.sessionId;
265
+
266
+ if (_buffer.length >= _BUFFER_MAX) {
267
+ _buffer.shift(); // drop oldest
268
+ warnBridgeOnce('bridge-trace:buffer-full', '[bridge-trace] buffer full (2000) — dropping oldest event');
269
+ }
270
+ _appendLocalTrace(row);
271
+ _buffer.push(row);
272
+ _scheduleFlush(_buffer.length >= _FLUSH_BATCH_SIZE);
273
+ }
274
+ catch {
275
+ // Never break bridge execution for telemetry
276
+ }
277
+ }
278
+
279
+ function estimateProviderPayloadBytes(messages, model, tools) {
280
+ try {
281
+ return Buffer.byteLength(JSON.stringify({ model, messages, tools: tools || [] }), 'utf8');
282
+ }
283
+ catch {
284
+ return null;
285
+ }
286
+ }
287
+
288
+ function extractCachedTokens(usage) {
289
+ const candidates = [
290
+ usage?.input_tokens_details?.cached_tokens,
291
+ usage?.prompt_tokens_details?.cached_tokens,
292
+ usage?.inputTokensDetails?.cachedTokens,
293
+ usage?.promptTokensDetails?.cachedTokens,
294
+ ];
295
+ for (const value of candidates) {
296
+ const n = Number(value);
297
+ if (Number.isFinite(n)) return n;
298
+ }
299
+ return 0;
300
+ }
301
+
302
+ function warnBridgeOnce(key, message) {
303
+ if (!key || WARNED_KEYS.has(key)) return;
304
+ WARNED_KEYS.add(key);
305
+ try {
306
+ process.stderr.write(`${message}\n`);
307
+ }
308
+ catch {
309
+ // Ignore logging failures.
310
+ }
311
+ }
312
+
313
+ function traceBridgeLoop({ sessionId, iteration, sendMs, messageCount, bodyBytesEst }) {
314
+ if (process.env.MIXDOG_BRIDGE_TRACE_VERBOSE !== '1') return;
315
+ appendBridgeTrace({
316
+ sessionId,
317
+ iteration,
318
+ kind: 'loop',
319
+ send_ms: sendMs,
320
+ message_count: messageCount,
321
+ body_bytes_est: bodyBytesEst,
322
+ });
323
+ }
324
+
325
+ // Lightweight fingerprint of the conversation prefix. Hashes the first 4096
326
+ // characters of JSON.stringify(messages) — enough to detect prefix mutation
327
+ // across iterations (which invalidates the provider prompt cache) without
328
+ // hashing megabytes per turn. Truncated SHA1 keeps the trace row compact.
329
+ function messagePrefixHash(messages) {
330
+ try {
331
+ const json = JSON.stringify(messages || []);
332
+ const slice = json.length > 4096 ? json.slice(0, 4096) : json;
333
+ return createHash('sha1').update(slice).digest('hex').slice(0, 12);
334
+ } catch {
335
+ return null;
336
+ }
337
+ }
338
+
339
+ function traceBridgeCompact({
340
+ sessionId,
341
+ iteration,
342
+ stage,
343
+ prune_count,
344
+ compact_changed,
345
+ input_prefix_hash,
346
+ before_count,
347
+ after_count,
348
+ before_bytes,
349
+ after_bytes,
350
+ context_window,
351
+ budget_tokens,
352
+ reserve_tokens,
353
+ message_tokens_est,
354
+ provider,
355
+ model,
356
+ error,
357
+ error_code,
358
+ }) {
359
+ if (process.env.MIXDOG_BRIDGE_TRACE_VERBOSE !== '1') return;
360
+ appendBridgeTrace({
361
+ sessionId,
362
+ iteration,
363
+ kind: 'compact_meta',
364
+ stage: stage || null,
365
+ prune_count: prune_count ?? 0,
366
+ compact_changed: !!compact_changed,
367
+ input_prefix_hash: input_prefix_hash || null,
368
+ before_count: before_count ?? null,
369
+ after_count: after_count ?? null,
370
+ before_bytes: before_bytes ?? null,
371
+ after_bytes: after_bytes ?? null,
372
+ context_window: context_window ?? null,
373
+ budget_tokens: budget_tokens ?? null,
374
+ reserve_tokens: reserve_tokens ?? null,
375
+ message_tokens_est: message_tokens_est ?? null,
376
+ provider: provider || null,
377
+ model: model || null,
378
+ error: error || null,
379
+ error_code: error_code || null,
380
+ });
381
+ }
382
+
383
+ const TOOL_ARG_KEYS = {
384
+ read: ['path', 'offset', 'limit', 'line', 'context', 'symbol'],
385
+ grep: ['pattern', 'path', 'glob', 'output_mode', 'head_limit', 'offset'],
386
+ glob: ['pattern', 'path', 'head_limit', 'offset'],
387
+ list: ['path', 'head_limit', 'offset', 'fuzzy'],
388
+ code_graph: ['mode', 'file', 'symbol', 'symbols', 'body', 'language', 'limit', 'depth', 'page', 'cwd'],
389
+ shell: ['command', 'cwd', 'timeout', 'mode', 'run_in_background', 'persistent', 'session_id'],
390
+ task: ['task_id', 'action', 'timeout_ms', 'poll_ms'],
391
+ edit: ['path', 'replace_all', 'edits'],
392
+ edit_many: ['edits'],
393
+ write: ['path'],
394
+ apply_patch: ['base_path', 'dry_run'],
395
+ };
396
+
397
+ const REDACT_KEY_RE = /token|secret|password|passwd|credential|authorization|api[_-]?key/i;
398
+ const BODY_KEY_RE = /content|old_string|new_string|patch|rewrite/i;
399
+ // Redact shell `command` values that look like they carry secrets. Covers
400
+ // assignment forms, Authorization headers, --password / -p flags, and
401
+ function _redactShellCommand(cmd) {
402
+ if (typeof cmd !== 'string') return cmd;
403
+ let out = cmd;
404
+ // Assignment RHS: PASSWORD=, SECRET=, TOKEN=, API_KEY=/APIKEY=.
405
+ out = out.replace(/((?:PASSWORD|SECRET|TOKEN|API_KEY|APIKEY)\s*=\s*)\S+/gi, '$1[redacted]');
406
+ // Authorization: Bearer <token>.
407
+ out = out.replace(/(Authorization:\s*Bearer\s+)\S+/gi, '$1[redacted]');
408
+ // Long flags: --password <v> / --password=<v> (also --token, --secret, --api-key).
409
+ out = out.replace(/(--(?:password|token|secret|api[-_]?key)(?:\s+|=))\S+/gi, '$1[redacted]');
410
+ // Short -p <v> flag (mysql/psql/curl style).
411
+ out = out.replace(/((?:^|\s)-p(?:\s+|=))\S+/g, '$1[redacted]');
412
+ // URL userinfo: scheme://user:secret@host -> scheme://user:[redacted]@host.
413
+ out = out.replace(/(:\/\/[^:\/\s@]+:)[^@\s]+(@)/g, '$1[redacted]$2');
414
+ // URL query params carrying tokens/keys.
415
+ out = out.replace(/([?&](?:token|api[-_]?key|access[-_]?token|auth|password|secret)=)[^&\s#]+/gi, '$1[redacted]');
416
+ return out;
417
+ }
418
+
419
+ function compactTraceArgValue(value, key = '', depth = 0) {
420
+ if (REDACT_KEY_RE.test(key)) return '[redacted]';
421
+ if (value === null || value === undefined) return value;
422
+ if (typeof value === 'string') {
423
+ // Redact shell commands that embed secrets before length-truncating.
424
+ if (key === 'command') {
425
+ value = _redactShellCommand(value);
426
+ }
427
+ const limit = BODY_KEY_RE.test(key) ? 60 : 180;
428
+ return value.length > limit ? `${value.slice(0, limit)}...` : value;
429
+ }
430
+ if (typeof value === 'number' || typeof value === 'boolean') return value;
431
+ if (Array.isArray(value)) {
432
+ if (depth >= 2) return `[${value.length} items]`;
433
+ return value.slice(0, 6).map((v) => compactTraceArgValue(v, key, depth + 1));
434
+ }
435
+ if (typeof value === 'object') {
436
+ if (depth >= 2) return '{...}';
437
+ const out = {};
438
+ for (const [k, v] of Object.entries(value).slice(0, 12)) {
439
+ out[k] = compactTraceArgValue(v, k, depth + 1);
440
+ }
441
+ return out;
442
+ }
443
+ return String(value);
444
+ }
445
+
446
+ function summarizeToolArgs(toolName, args) {
447
+ if (!args || typeof args !== 'object') return null;
448
+ const keys = TOOL_ARG_KEYS[String(toolName || '')] || Object.keys(args).slice(0, 8);
449
+ const out = {};
450
+ for (const key of keys) {
451
+ if (Object.prototype.hasOwnProperty.call(args, key)) out[key] = compactTraceArgValue(args[key], key);
452
+ }
453
+ for (const countKey of ['edits', 'writes']) {
454
+ if (Array.isArray(args[countKey])) out[`${countKey}_count`] = args[countKey].length;
455
+ }
456
+ if (toolName === 'read' && Array.isArray(args.path)) {
457
+ out.path_count = args.path.length;
458
+ }
459
+ return Object.keys(out).length ? out : null;
460
+ }
461
+
462
+ function _resolveToolFailurePath() {
463
+ if (process.env.MIXDOG_TOOL_FAILURE_LOG_DISABLE === '1') return null;
464
+ if (_toolFailurePath) return _toolFailurePath;
465
+ try {
466
+ _toolFailurePath = process.env.MIXDOG_TOOL_FAILURE_LOG_PATH
467
+ || join(getPluginData(), 'history', 'tool-failures.jsonl');
468
+ mkdirSync(dirname(_toolFailurePath), { recursive: true, mode: 0o700 });
469
+ return _toolFailurePath;
470
+ } catch {
471
+ return null;
472
+ }
473
+ }
474
+
475
+ function _scheduleToolFailureFlush(delayMs = _TOOL_FAILURE_FLUSH_MS) {
476
+ if (_toolFailureTimer) return;
477
+ _toolFailureTimer = setTimeout(_flushToolFailures, delayMs);
478
+ _toolFailureTimer.unref?.();
479
+ }
480
+
481
+ function _maybeRotateToolFailureLog(path) {
482
+ const now = Date.now();
483
+ if (_lastToolFailureRotateCheckMs !== 0 && now - _lastToolFailureRotateCheckMs < MIXDOG_BRIDGE_TRACE_ROTATE_CHECK_MS) return;
484
+ _rotateLocalTraceIfNeeded(path);
485
+ _lastToolFailureRotateCheckMs = now;
486
+ }
487
+
488
+ function _appendToolFailureRow(row) {
489
+ if (!_resolveToolFailurePath()) return;
490
+ try {
491
+ _toolFailureBuffer.push(`${JSON.stringify(row)}\n`);
492
+ if (_toolFailureBuffer.length >= _TOOL_FAILURE_FLUSH_LINES) {
493
+ _flushToolFailures();
494
+ } else {
495
+ _scheduleToolFailureFlush();
496
+ }
497
+ } catch (err) {
498
+ warnBridgeOnce('tool-failure-log:append', `[tool-failure-log] append failed (${err?.message})`);
499
+ }
500
+ }
501
+
502
+ function _flushToolFailures() {
503
+ if (_toolFailureTimer) {
504
+ clearTimeout(_toolFailureTimer);
505
+ _toolFailureTimer = null;
506
+ }
507
+ if (_toolFailureBuffer.length === 0) return;
508
+ if (_toolFailureFlushInFlight) {
509
+ _scheduleToolFailureFlush(25);
510
+ return;
511
+ }
512
+ const path = _resolveToolFailurePath();
513
+ if (!path) return;
514
+ const chunk = _toolFailureBuffer.join('');
515
+ _toolFailureBuffer = [];
516
+ try {
517
+ _maybeRotateToolFailureLog(path);
518
+ } catch (err) {
519
+ warnBridgeOnce('tool-failure-log:rotate', `[tool-failure-log] rotate check failed (${err?.message})`);
520
+ }
521
+ _toolFailureFlushInFlight = true;
522
+ appendFile(path, chunk, { encoding: 'utf8', mode: 0o600 })
523
+ .catch((err) => {
524
+ warnBridgeOnce('tool-failure-log:append', `[tool-failure-log] append failed (${err?.message})`);
525
+ })
526
+ .finally(() => {
527
+ _toolFailureFlushInFlight = false;
528
+ if (_toolFailureBuffer.length > 0) _scheduleToolFailureFlush(0);
529
+ });
530
+ }
531
+
532
+ function _flushToolFailuresSync() {
533
+ if (_toolFailureTimer) {
534
+ clearTimeout(_toolFailureTimer);
535
+ _toolFailureTimer = null;
536
+ }
537
+ if (_toolFailureBuffer.length === 0) return;
538
+ const path = _resolveToolFailurePath();
539
+ if (!path) return;
540
+ const chunk = _toolFailureBuffer.join('');
541
+ _toolFailureBuffer = [];
542
+ try {
543
+ _maybeRotateToolFailureLog(path);
544
+ appendFileSync(path, chunk, { encoding: 'utf8', mode: 0o600 });
545
+ } catch (err) {
546
+ warnBridgeOnce('tool-failure-log:append', `[tool-failure-log] append failed (${err?.message})`);
547
+ }
548
+ }
549
+
550
+ function _firstNonEmptyLine(text) {
551
+ return String(text ?? '').split(/\r?\n/).find((line) => line.trim())?.trim() || '';
552
+ }
553
+
554
+ function _redactLogText(text) {
555
+ if (typeof text !== 'string') return '';
556
+ let out = text;
557
+ out = out.replace(/(Authorization:\s*Bearer\s+)\S+/gi, '$1[redacted]');
558
+ out = out.replace(/([?&](?:token|api[-_]?key|access[-_]?token|auth|password|secret)=)[^&\s#]+/gi, '$1[redacted]');
559
+ out = out.replace(/((?:PASSWORD|SECRET|TOKEN|API_KEY|APIKEY)\s*=\s*)\S+/gi, '$1[redacted]');
560
+ return out;
561
+ }
562
+
563
+ function classifyToolFailure(resultText, toolName) {
564
+ const text = String(resultText ?? '').toLowerCase();
565
+ if (/requires either|invalid arguments|unknown parameter|must be|schema|expected|required|old_string is .*>=/.test(text)) return 'schema/args';
566
+ if (/enoent|cannot find|not found at this path|path does not exist|no such file|file not found in graph|unreadable/.test(text)) return 'path/cwd';
567
+ if (/timed out|timeout|interrupted|aborted/.test(text)) return 'timeout/abort';
568
+ if (/hunk rejected|patch failed|context mismatch|expected first old\/context|context not found/.test(text)) return 'patch/context';
569
+ if (/not in allow-list|permission|denied|forbidden|not allowed/.test(text)) return 'permission';
570
+ if (/unknown tool|tool.*not.*available|missing.*tool/.test(text)) return 'tool-surface';
571
+ if (String(toolName || '') === 'shell' || /^\s*\[exit code:\s*\d+\]/i.test(String(resultText ?? ''))) return 'command-exit';
572
+ return 'runtime/failure';
573
+ }
574
+
575
+ function traceBridgeToolFailure({ sessionId, iteration, toolName, toolKind, toolMs, toolArgs, role, model, cwd, resultText, resultKind = 'error' }) {
576
+ if (process.env.MIXDOG_BRIDGE_TRACE_DISABLE === '1') return;
577
+ if (!_resolveToolFailurePath()) return;
578
+ try {
579
+ const cleanText = _redactLogText(String(resultText ?? ''));
580
+ const row = {
581
+ ts: Date.now(),
582
+ session_id: normalizeSessionId(sessionId),
583
+ iteration: iteration ?? null,
584
+ tool_name: toolName || null,
585
+ tool_kind: toolKind || null,
586
+ result_kind: resultKind || 'error',
587
+ category: classifyToolFailure(cleanText, toolName),
588
+ role: role || null,
589
+ model: model || null,
590
+ cwd: cwd || null,
591
+ tool_ms: Number.isFinite(Number(toolMs)) ? Number(toolMs) : null,
592
+ tool_args: summarizeToolArgs(toolName, toolArgs),
593
+ error_first_line: _firstNonEmptyLine(cleanText).slice(0, 300),
594
+ error_preview: cleanText.slice(0, 1200),
595
+ result_bytes_est: Buffer.byteLength(cleanText, 'utf8'),
596
+ result_lines_est: cleanText.length > 0 ? cleanText.split('\n').length : 0,
597
+ };
598
+ _appendToolFailureRow(row);
599
+ } catch (err) {
600
+ warnBridgeOnce('tool-failure-log:append', `[tool-failure-log] append failed (${err?.message})`);
601
+ }
602
+ }
603
+
604
+ function traceBridgeTool({ sessionId, iteration, toolName, toolKind, toolMs, toolArgs, role, resultKind, model, resultText, cwd }) {
605
+ const nextCallCount = countJsonNextCalls(resultText);
606
+ // Flat shape — fields named exactly as the bridge_calls PG columns so
607
+ // insertBridgeCalls can pick them up by direct property access without
608
+ // a payload-unwrap step. result_kind has no column and rides as plain
609
+ // sibling metadata for downstream consumers.
610
+ appendBridgeTrace({
611
+ sessionId,
612
+ iteration,
613
+ kind: 'tool',
614
+ role: role || null,
615
+ model: model || null,
616
+ tool_name: toolName,
617
+ tool_kind: toolKind,
618
+ tool_ms: toolMs,
619
+ tool_args: summarizeToolArgs(toolName, toolArgs),
620
+ result_kind: resultKind || null,
621
+ result_has_next_call: nextCallCount > 0,
622
+ result_next_call_count: nextCallCount,
623
+ result_bytes_est: typeof resultText === 'string' ? Buffer.byteLength(resultText, 'utf8') : 0,
624
+ result_lines_est: typeof resultText === 'string' && resultText.length > 0 ? resultText.split('\n').length : 0,
625
+ });
626
+ if (resultKind === 'error') {
627
+ traceBridgeToolFailure({ sessionId, iteration, toolName, toolKind, toolMs, toolArgs, role, model, cwd, resultText, resultKind });
628
+ }
629
+ }
630
+
631
+ // Compression layer trace (result-compression.mjs). One row per tool call
632
+ // where compression actually changed the byte count, so `gain` analytics
633
+ // can sum savings_pct over a window (mirrors RTK's `rtk gain` model
634
+ // without an external binary). No-op rows are dropped at the call site.
635
+ export function traceBridgeCompress({ sessionId, toolName, before, after }) {
636
+ // bytes_before/after/savings_pct moved into payload because the
637
+ // trace_events table only carries known top-level columns (id, ts,
638
+ // session_id, kind, tool_name, payload, ...) — fields outside that
639
+ // set are silently dropped at insert time. payload is jsonb so any
640
+ // shape survives. Aggregation: SELECT (payload->>'bytes_before')::int.
641
+ appendBridgeTrace({
642
+ sessionId,
643
+ kind: 'compress',
644
+ tool_name: toolName,
645
+ payload: {
646
+ bytes_before: before,
647
+ bytes_after: after,
648
+ savings_pct: before > 0 ? Math.round((1 - after / before) * 100) : 0,
649
+ },
650
+ });
651
+ }
652
+
653
+ // Per-turn batch shape — one row per assistant turn with the number of
654
+ // tool calls observed. Lets a consumer compute Lead-side multi-tool
655
+ // adoption ratio (calls > 1 / total turns) directly from trace rows
656
+ // instead of re-parsing every assistant message body.
657
+ export function traceBridgeBatch({ sessionId, toolCallCount }) {
658
+ appendBridgeTrace({
659
+ sessionId,
660
+ kind: 'batch',
661
+ tool_call_count: toolCallCount,
662
+ });
663
+ }
664
+
665
+ function _sanitizeSample(sample) {
666
+ if (sample == null) return sample;
667
+ if (typeof sample === 'string' || typeof sample === 'object') {
668
+ return compactTraceArgValue(sample, '', 0);
669
+ }
670
+ return sample;
671
+ }
672
+
673
+ function traceStreamStalled({ sessionId, info }) {
674
+ appendBridgeTrace({
675
+ sessionId,
676
+ kind: 'stream_stalled',
677
+ stale_seconds: info.staleSeconds,
678
+ last_tool_call: info.lastToolCall,
679
+ stage: info.stage,
680
+ });
681
+ }
682
+
683
+ function traceStreamAborted({ sessionId, info }) {
684
+ appendBridgeTrace({
685
+ sessionId,
686
+ kind: 'stream_aborted',
687
+ stale_seconds: info.staleSeconds,
688
+ last_tool_call: info.lastToolCall,
689
+ stage: info.stage,
690
+ });
691
+ }
692
+
693
+ function traceBridgePreset({ sessionId, role, presetName, model, provider, parentSessionId }) {
694
+ // Fires once per dispatch right after the preset has been resolved and
695
+ // its runtime spec (provider/model) assembled. Useful for after-the-fact
696
+ // routing analysis: "which role landed on which preset / provider / model
697
+ // on this request?"
698
+ appendBridgeTrace({
699
+ sessionId,
700
+ kind: 'preset_assign',
701
+ role: role || null,
702
+ preset_name: presetName || null,
703
+ model: model || null,
704
+ provider: provider || null,
705
+ parent_session_id: parentSessionId || null,
706
+ });
707
+ }
708
+
709
+ function traceBridgeFetch({ sessionId, headersMs, httpStatus, handshakeRetries, handshakeRetryClassifiers, provider, model, transport }) {
710
+ const payload = {
711
+ headers_ms: headersMs,
712
+ http_status: httpStatus,
713
+ provider: provider || null,
714
+ model: model || null,
715
+ transport: transport || null,
716
+ };
717
+ if (Number.isFinite(Number(handshakeRetries))) {
718
+ payload.handshake_retries = Number(handshakeRetries);
719
+ }
720
+ if (Array.isArray(handshakeRetryClassifiers) && handshakeRetryClassifiers.length > 0) {
721
+ payload.handshake_retry_classifiers = handshakeRetryClassifiers;
722
+ }
723
+ appendBridgeTrace({
724
+ sessionId,
725
+ kind: 'fetch',
726
+ headers_ms: headersMs,
727
+ http_status: httpStatus,
728
+ provider: provider || null,
729
+ model: model || null,
730
+ transport: transport || null,
731
+ handshake_retries: payload.handshake_retries,
732
+ handshake_retry_classifiers: payload.handshake_retry_classifiers,
733
+ payload,
734
+ });
735
+ }
736
+
737
+ function traceBridgeSse({ sessionId, sseParseMs, ttftMs, provider, model, transport }) {
738
+ appendBridgeTrace({
739
+ sessionId,
740
+ kind: 'sse',
741
+ sse_parse_ms: sseParseMs,
742
+ ttft_ms: ttftMs,
743
+ provider: provider || null,
744
+ model: model || null,
745
+ transport: transport || null,
746
+ payload: {
747
+ sse_parse_ms: sseParseMs,
748
+ ttft_ms: ttftMs,
749
+ provider: provider || null,
750
+ model: model || null,
751
+ transport: transport || null,
752
+ },
753
+ });
754
+ }
755
+
756
+ function traceBridgeUsage({ sessionId, iteration, inputTokens, outputTokens, cachedTokens, cacheWriteTokens, promptTokens, model, modelDisplay, responseId, rawUsage, provider, serviceTier, requestKind }) {
757
+ const inclusive = isInclusiveProvider(provider);
758
+ const inTok = inputTokens || 0;
759
+ const cacheRead = cachedTokens || 0;
760
+ const cacheWrite = cacheWriteTokens || 0;
761
+ const uncachedInputTokens = inclusive ? Math.max(inTok - cacheRead - cacheWrite, 0) : inTok;
762
+ const promptTotal = typeof promptTokens === 'number'
763
+ ? promptTokens
764
+ : (inclusive
765
+ ? Math.max(inTok, cacheRead + cacheWrite)
766
+ : inTok + cacheRead + cacheWrite);
767
+ const resolvedServiceTier = serviceTier || rawUsage?.service_tier || rawUsage?.serviceTier || null;
768
+ appendBridgeTrace({
769
+ sessionId,
770
+ iteration,
771
+ kind: 'usage_raw',
772
+ input_tokens: inputTokens,
773
+ output_tokens: outputTokens,
774
+ cached_tokens: cachedTokens,
775
+ cache_write_tokens: cacheWrite,
776
+ uncached_input_tokens: uncachedInputTokens,
777
+ // Unified total-prompt field. Anthropic = input+cache_read+cache_write,
778
+ // OpenAI/Gemini = input_tokens (cached is already a subset).
779
+ prompt_tokens: promptTotal,
780
+ model: model || null,
781
+ model_display: modelDisplay || null,
782
+ response_id: responseId || null,
783
+ request_kind: typeof requestKind === 'string' && requestKind ? requestKind : null,
784
+ service_tier: resolvedServiceTier,
785
+ payload: {
786
+ provider: provider || null,
787
+ prompt_tokens: promptTotal,
788
+ uncached_input_tokens: uncachedInputTokens,
789
+ model_display: modelDisplay || null,
790
+ response_id: responseId || null,
791
+ service_tier: resolvedServiceTier,
792
+ raw_usage: rawUsage || null,
793
+ },
794
+ });
795
+ }
796
+
797
+ export {
798
+ appendBridgeTrace,
799
+ drainBridgeTrace,
800
+ estimateProviderPayloadBytes,
801
+ extractCachedTokens,
802
+ messagePrefixHash,
803
+ traceBridgeFetch,
804
+ traceBridgeLoop,
805
+ traceBridgePreset,
806
+ traceBridgeSse,
807
+ traceBridgeTool,
808
+ traceBridgeToolFailure,
809
+ traceBridgeCompact,
810
+ traceBridgeUsage,
811
+ traceStreamAborted,
812
+ traceStreamStalled,
813
+ warnBridgeOnce,
814
+ };