mixdog 0.7.17 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (836) hide show
  1. package/README.md +37 -331
  2. package/package.json +67 -99
  3. package/scripts/boot-smoke.mjs +94 -0
  4. package/scripts/build-tui.mjs +52 -0
  5. package/scripts/compact-smoke.mjs +199 -0
  6. package/scripts/lead-workflow-smoke.mjs +598 -0
  7. package/scripts/live-worker-smoke.mjs +239 -0
  8. package/scripts/output-style-smoke.mjs +101 -0
  9. package/scripts/smoke-loop-report.mjs +221 -0
  10. package/scripts/smoke-loop.mjs +201 -0
  11. package/scripts/smoke.mjs +113 -0
  12. package/scripts/tool-failures.mjs +143 -0
  13. package/scripts/tool-smoke.mjs +456 -0
  14. package/src/agents/debugger/AGENT.md +3 -0
  15. package/src/agents/debugger/agent.json +6 -0
  16. package/src/agents/explore/AGENT.md +4 -0
  17. package/src/agents/explore/agent.json +6 -0
  18. package/src/agents/heavy-worker/AGENT.md +3 -0
  19. package/src/agents/heavy-worker/agent.json +6 -0
  20. package/src/agents/maintainer/AGENT.md +3 -0
  21. package/src/agents/maintainer/agent.json +6 -0
  22. package/src/agents/reviewer/AGENT.md +3 -0
  23. package/src/agents/reviewer/agent.json +6 -0
  24. package/src/agents/scheduler-task.md +3 -0
  25. package/src/agents/web-researcher/AGENT.md +3 -0
  26. package/src/agents/web-researcher/agent.json +6 -0
  27. package/src/agents/webhook-handler.md +3 -0
  28. package/src/agents/worker/AGENT.md +3 -0
  29. package/src/agents/worker/agent.json +6 -0
  30. package/src/app.mjs +90 -0
  31. package/src/cli.mjs +11 -0
  32. package/src/defaults/hidden-roles.json +72 -0
  33. package/src/defaults/mixdog-config.template.json +15 -0
  34. package/src/hooks/lib/permission-evaluator.cjs +488 -0
  35. package/src/hooks/lib/settings-loader.cjs +112 -0
  36. package/src/lib/keychain-cjs.cjs +332 -0
  37. package/src/lib/plugin-paths.cjs +28 -0
  38. package/src/lib/rules-builder.cjs +315 -0
  39. package/src/mixdog-session-runtime.mjs +3704 -0
  40. package/src/output-styles/default.md +38 -0
  41. package/src/output-styles/extreme-simple.md +17 -0
  42. package/src/output-styles/simple.md +17 -0
  43. package/src/repl.mjs +322 -0
  44. package/src/rules/bridge/00-common.md +5 -0
  45. package/src/rules/bridge/20-skip-protocol.md +11 -0
  46. package/src/rules/bridge/30-explorer.md +4 -0
  47. package/src/rules/bridge/40-cycle1-agent.md +28 -0
  48. package/src/rules/bridge/41-cycle2-agent.md +59 -0
  49. package/src/rules/lead/00-tool-lead.md +5 -0
  50. package/src/rules/lead/01-general.md +5 -0
  51. package/src/rules/lead/02-channels.md +3 -0
  52. package/src/rules/lead/04-workflow.md +12 -0
  53. package/src/rules/shared/00-language.md +3 -0
  54. package/src/rules/shared/01-tool.md +3 -0
  55. package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
  56. package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
  57. package/src/runtime/agent/orchestrator/config.mjs +446 -0
  58. package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
  59. package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
  60. package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
  61. package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
  62. package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
  63. package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
  64. package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
  65. package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
  66. package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
  67. package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
  68. package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
  69. package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
  70. package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
  71. package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
  72. package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
  73. package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
  74. package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
  75. package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
  76. package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
  77. package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
  78. package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
  79. package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
  80. package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
  81. package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
  82. package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
  83. package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  84. package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
  85. package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
  86. package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
  87. package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
  88. package/src/runtime/agent/orchestrator/session/loop.mjs +2320 -0
  89. package/src/runtime/agent/orchestrator/session/manager.mjs +2960 -0
  90. package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
  91. package/src/runtime/agent/orchestrator/session/store.mjs +663 -0
  92. package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  93. package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
  94. package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
  95. package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
  96. package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
  97. package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
  98. package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
  99. package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
  100. package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
  101. package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
  102. package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
  103. package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
  104. package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
  105. package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
  106. package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  107. package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
  108. package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
  109. package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
  110. package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  111. package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
  112. package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
  113. package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
  114. package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
  115. package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
  116. package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
  117. package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
  118. package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  119. package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
  120. package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  121. package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
  122. package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
  123. package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
  124. package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
  125. package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
  126. package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
  127. package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
  128. package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
  129. package/src/runtime/channels/backends/discord.mjs +781 -0
  130. package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
  131. package/src/runtime/channels/index.mjs +3309 -0
  132. package/src/runtime/channels/lib/config.mjs +285 -0
  133. package/src/runtime/channels/lib/drop-trace.mjs +71 -0
  134. package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
  135. package/src/runtime/channels/lib/holidays.mjs +138 -0
  136. package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
  137. package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
  138. package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
  139. package/src/runtime/channels/lib/scheduler.mjs +710 -0
  140. package/src/runtime/channels/lib/session-discovery.mjs +102 -0
  141. package/src/runtime/channels/lib/state-file.mjs +68 -0
  142. package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
  143. package/src/runtime/channels/lib/tool-format.mjs +124 -0
  144. package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
  145. package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
  146. package/src/runtime/channels/lib/webhook.mjs +1288 -0
  147. package/src/runtime/channels/tool-defs.mjs +177 -0
  148. package/src/runtime/lib/keychain-cjs.cjs +289 -0
  149. package/src/runtime/memory/data/runtime-manifest.json +40 -0
  150. package/src/runtime/memory/index.mjs +3600 -0
  151. package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
  152. package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
  153. package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
  154. package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
  155. package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
  156. package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
  157. package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
  158. package/src/runtime/memory/lib/memory-embed.mjs +300 -0
  159. package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
  160. package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
  161. package/src/runtime/memory/lib/memory.mjs +418 -0
  162. package/src/runtime/memory/lib/pg/adapter.mjs +314 -0
  163. package/src/runtime/memory/lib/pg/process.mjs +366 -0
  164. package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
  165. package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
  166. package/src/runtime/memory/lib/trace-store.mjs +734 -0
  167. package/src/runtime/memory/tool-defs.mjs +79 -0
  168. package/src/runtime/search/index.mjs +925 -0
  169. package/src/runtime/search/lib/config.mjs +61 -0
  170. package/src/runtime/search/lib/web-tools.mjs +1278 -0
  171. package/src/runtime/search/tool-defs.mjs +64 -0
  172. package/src/runtime/shared/atomic-file.mjs +435 -0
  173. package/src/runtime/shared/background-tasks.mjs +376 -0
  174. package/src/runtime/shared/child-guardian.mjs +98 -0
  175. package/src/runtime/shared/config.mjs +393 -0
  176. package/src/runtime/shared/err-text.mjs +121 -0
  177. package/src/runtime/shared/launcher-control.mjs +259 -0
  178. package/src/runtime/shared/llm/cost.mjs +66 -0
  179. package/src/runtime/shared/llm/http-agent.mjs +129 -0
  180. package/src/runtime/shared/open-url.mjs +37 -0
  181. package/src/runtime/shared/plugin-paths.mjs +25 -0
  182. package/src/runtime/shared/process-shutdown.mjs +147 -0
  183. package/src/runtime/shared/schedules-store.mjs +70 -0
  184. package/src/runtime/shared/tool-execution-contract.mjs +104 -0
  185. package/src/runtime/shared/tool-surface.mjs +950 -0
  186. package/src/runtime/shared/user-cwd.mjs +221 -0
  187. package/src/runtime/shared/user-data-guard.mjs +232 -0
  188. package/src/runtime/shared/workspace-router.mjs +259 -0
  189. package/src/standalone/bridge-tool.mjs +1414 -0
  190. package/src/standalone/channel-admin.mjs +366 -0
  191. package/src/standalone/channel-worker-preload.cjs +3 -0
  192. package/src/standalone/channel-worker.mjs +353 -0
  193. package/src/standalone/explore-tool.mjs +233 -0
  194. package/src/standalone/hook-bus.mjs +246 -0
  195. package/src/standalone/plugin-admin.mjs +247 -0
  196. package/src/standalone/provider-admin.mjs +338 -0
  197. package/src/standalone/seeds.mjs +94 -0
  198. package/src/standalone/usage-dashboard.mjs +510 -0
  199. package/src/tui/App.jsx +5438 -0
  200. package/src/tui/components/AnsiText.jsx +199 -0
  201. package/src/tui/components/ContextPanel.jsx +217 -0
  202. package/src/tui/components/Markdown.jsx +205 -0
  203. package/src/tui/components/MarkdownTable.jsx +204 -0
  204. package/src/tui/components/Message.jsx +103 -0
  205. package/src/tui/components/Picker.jsx +317 -0
  206. package/src/tui/components/PromptInput.jsx +584 -0
  207. package/src/tui/components/QueuedCommands.jsx +47 -0
  208. package/src/tui/components/SlashCommandPalette.jsx +114 -0
  209. package/src/tui/components/Spinner.jsx +317 -0
  210. package/src/tui/components/StatusLine.jsx +87 -0
  211. package/src/tui/components/TextEntryPanel.jsx +323 -0
  212. package/src/tui/components/ToolExecution.jsx +772 -0
  213. package/src/tui/components/TurnDone.jsx +78 -0
  214. package/src/tui/components/UsagePanel.jsx +331 -0
  215. package/src/tui/dist/index.mjs +12359 -0
  216. package/src/tui/engine.mjs +2410 -0
  217. package/src/tui/figures.mjs +50 -0
  218. package/src/tui/hooks/useEngine.mjs +16 -0
  219. package/src/tui/index.jsx +254 -0
  220. package/src/tui/input-editing.mjs +242 -0
  221. package/src/tui/markdown/format-token.mjs +194 -0
  222. package/src/tui/paste-attachments.mjs +198 -0
  223. package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
  224. package/src/tui/spinner-verbs.mjs +45 -0
  225. package/src/tui/theme.mjs +67 -0
  226. package/src/tui/time-format.mjs +53 -0
  227. package/src/ui/ansi.mjs +115 -0
  228. package/src/ui/markdown.mjs +195 -0
  229. package/src/ui/statusline.mjs +730 -0
  230. package/src/ui/tool-card.mjs +101 -0
  231. package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
  232. package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
  233. package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
  234. package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
  235. package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
  236. package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
  237. package/src/workflows/default/WORKFLOW.md +7 -0
  238. package/src/workflows/default/workflow.json +14 -0
  239. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  240. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  241. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  242. package/vendor/ink/build/colorize.d.ts +3 -0
  243. package/vendor/ink/build/colorize.js +48 -0
  244. package/vendor/ink/build/colorize.js.map +1 -0
  245. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  246. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  247. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  248. package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
  249. package/vendor/ink/build/components/AnimationContext.js +13 -0
  250. package/vendor/ink/build/components/AnimationContext.js.map +1 -0
  251. package/vendor/ink/build/components/App.d.ts +24 -0
  252. package/vendor/ink/build/components/App.js +554 -0
  253. package/vendor/ink/build/components/App.js.map +1 -0
  254. package/vendor/ink/build/components/AppContext.d.ts +80 -0
  255. package/vendor/ink/build/components/AppContext.js +25 -0
  256. package/vendor/ink/build/components/AppContext.js.map +1 -0
  257. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  258. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  259. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  260. package/vendor/ink/build/components/Box.d.ts +130 -0
  261. package/vendor/ink/build/components/Box.js +34 -0
  262. package/vendor/ink/build/components/Box.js.map +1 -0
  263. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  264. package/vendor/ink/build/components/CursorContext.js +8 -0
  265. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  266. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  267. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  268. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  269. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  270. package/vendor/ink/build/components/ErrorOverview.js +90 -0
  271. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  272. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  273. package/vendor/ink/build/components/FocusContext.js +17 -0
  274. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  275. package/vendor/ink/build/components/Newline.d.ts +13 -0
  276. package/vendor/ink/build/components/Newline.js +8 -0
  277. package/vendor/ink/build/components/Newline.js.map +1 -0
  278. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  279. package/vendor/ink/build/components/Spacer.js +11 -0
  280. package/vendor/ink/build/components/Spacer.js.map +1 -0
  281. package/vendor/ink/build/components/Static.d.ts +24 -0
  282. package/vendor/ink/build/components/Static.js +28 -0
  283. package/vendor/ink/build/components/Static.js.map +1 -0
  284. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  285. package/vendor/ink/build/components/StderrContext.js +13 -0
  286. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  287. package/vendor/ink/build/components/StdinContext.d.ts +28 -0
  288. package/vendor/ink/build/components/StdinContext.js +20 -0
  289. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  290. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  291. package/vendor/ink/build/components/StdoutContext.js +13 -0
  292. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  293. package/vendor/ink/build/components/Text.d.ts +55 -0
  294. package/vendor/ink/build/components/Text.js +50 -0
  295. package/vendor/ink/build/components/Text.js.map +1 -0
  296. package/vendor/ink/build/components/Transform.d.ts +16 -0
  297. package/vendor/ink/build/components/Transform.js +15 -0
  298. package/vendor/ink/build/components/Transform.js.map +1 -0
  299. package/vendor/ink/build/cursor-helpers.d.ts +39 -0
  300. package/vendor/ink/build/cursor-helpers.js +62 -0
  301. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  302. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  303. package/vendor/ink/build/devtools-window-polyfill.js +68 -0
  304. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  305. package/vendor/ink/build/devtools.d.ts +1 -0
  306. package/vendor/ink/build/devtools.js +36 -0
  307. package/vendor/ink/build/devtools.js.map +1 -0
  308. package/vendor/ink/build/dom.d.ts +62 -0
  309. package/vendor/ink/build/dom.js +143 -0
  310. package/vendor/ink/build/dom.js.map +1 -0
  311. package/vendor/ink/build/get-max-width.d.ts +3 -0
  312. package/vendor/ink/build/get-max-width.js +10 -0
  313. package/vendor/ink/build/get-max-width.js.map +1 -0
  314. package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
  315. package/vendor/ink/build/hooks/use-animation.js +87 -0
  316. package/vendor/ink/build/hooks/use-animation.js.map +1 -0
  317. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  318. package/vendor/ink/build/hooks/use-app.js +8 -0
  319. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  320. package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
  321. package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
  322. package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
  323. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  324. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  325. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  326. package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
  327. package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
  328. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  329. package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
  330. package/vendor/ink/build/hooks/use-focus.js +43 -0
  331. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  332. package/vendor/ink/build/hooks/use-input.d.ts +132 -0
  333. package/vendor/ink/build/hooks/use-input.js +126 -0
  334. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  335. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
  336. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
  337. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  338. package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
  339. package/vendor/ink/build/hooks/use-paste.js +62 -0
  340. package/vendor/ink/build/hooks/use-paste.js.map +1 -0
  341. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  342. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  343. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  344. package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
  345. package/vendor/ink/build/hooks/use-stdin.js +9 -0
  346. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  347. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  348. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  349. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  350. package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
  351. package/vendor/ink/build/hooks/use-window-size.js +22 -0
  352. package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
  353. package/vendor/ink/build/index.d.ts +42 -0
  354. package/vendor/ink/build/index.js +24 -0
  355. package/vendor/ink/build/index.js.map +1 -0
  356. package/vendor/ink/build/ink.d.ts +146 -0
  357. package/vendor/ink/build/ink.js +1022 -0
  358. package/vendor/ink/build/ink.js.map +1 -0
  359. package/vendor/ink/build/input-parser.d.ts +10 -0
  360. package/vendor/ink/build/input-parser.js +194 -0
  361. package/vendor/ink/build/input-parser.js.map +1 -0
  362. package/vendor/ink/build/instances.d.ts +3 -0
  363. package/vendor/ink/build/instances.js +8 -0
  364. package/vendor/ink/build/instances.js.map +1 -0
  365. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  366. package/vendor/ink/build/kitty-keyboard.js +32 -0
  367. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  368. package/vendor/ink/build/log-update.d.ts +20 -0
  369. package/vendor/ink/build/log-update.js +261 -0
  370. package/vendor/ink/build/log-update.js.map +1 -0
  371. package/vendor/ink/build/measure-element.d.ts +20 -0
  372. package/vendor/ink/build/measure-element.js +13 -0
  373. package/vendor/ink/build/measure-element.js.map +1 -0
  374. package/vendor/ink/build/measure-text.d.ts +6 -0
  375. package/vendor/ink/build/measure-text.js +21 -0
  376. package/vendor/ink/build/measure-text.js.map +1 -0
  377. package/vendor/ink/build/output.d.ts +35 -0
  378. package/vendor/ink/build/output.js +328 -0
  379. package/vendor/ink/build/output.js.map +1 -0
  380. package/vendor/ink/build/parse-keypress.d.ts +20 -0
  381. package/vendor/ink/build/parse-keypress.js +495 -0
  382. package/vendor/ink/build/parse-keypress.js.map +1 -0
  383. package/vendor/ink/build/reconciler.d.ts +4 -0
  384. package/vendor/ink/build/reconciler.js +306 -0
  385. package/vendor/ink/build/reconciler.js.map +1 -0
  386. package/vendor/ink/build/render-background.d.ts +4 -0
  387. package/vendor/ink/build/render-background.js +25 -0
  388. package/vendor/ink/build/render-background.js.map +1 -0
  389. package/vendor/ink/build/render-border.d.ts +4 -0
  390. package/vendor/ink/build/render-border.js +84 -0
  391. package/vendor/ink/build/render-border.js.map +1 -0
  392. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  393. package/vendor/ink/build/render-node-to-output.js +162 -0
  394. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  395. package/vendor/ink/build/render-to-string.d.ts +38 -0
  396. package/vendor/ink/build/render-to-string.js +116 -0
  397. package/vendor/ink/build/render-to-string.js.map +1 -0
  398. package/vendor/ink/build/render.d.ts +176 -0
  399. package/vendor/ink/build/render.js +71 -0
  400. package/vendor/ink/build/render.js.map +1 -0
  401. package/vendor/ink/build/renderer.d.ts +8 -0
  402. package/vendor/ink/build/renderer.js +64 -0
  403. package/vendor/ink/build/renderer.js.map +1 -0
  404. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  405. package/vendor/ink/build/sanitize-ansi.js +27 -0
  406. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  407. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  408. package/vendor/ink/build/squash-text-nodes.js +36 -0
  409. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  410. package/vendor/ink/build/styles.d.ts +302 -0
  411. package/vendor/ink/build/styles.js +303 -0
  412. package/vendor/ink/build/styles.js.map +1 -0
  413. package/vendor/ink/build/utils.d.ts +9 -0
  414. package/vendor/ink/build/utils.js +19 -0
  415. package/vendor/ink/build/utils.js.map +1 -0
  416. package/vendor/ink/build/wrap-text.d.ts +3 -0
  417. package/vendor/ink/build/wrap-text.js +38 -0
  418. package/vendor/ink/build/wrap-text.js.map +1 -0
  419. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  420. package/vendor/ink/build/write-synchronized.js +9 -0
  421. package/vendor/ink/build/write-synchronized.js.map +1 -0
  422. package/vendor/ink/license +10 -0
  423. package/vendor/ink/package.json +137 -0
  424. package/.claude-plugin/marketplace.json +0 -34
  425. package/.claude-plugin/plugin.json +0 -20
  426. package/.gitattributes +0 -34
  427. package/.mcp.json +0 -14
  428. package/ARCHITECTURE.md +0 -77
  429. package/CHANGELOG.md +0 -30
  430. package/CONTRIBUTING.md +0 -45
  431. package/DATA-FLOW.md +0 -79
  432. package/LICENSE +0 -21
  433. package/SECURITY.md +0 -138
  434. package/UNINSTALL.md +0 -112
  435. package/agents/maintenance.md +0 -5
  436. package/agents/memory-classification.md +0 -30
  437. package/agents/scheduler-task.md +0 -18
  438. package/agents/webhook-handler.md +0 -27
  439. package/agents/worker.md +0 -24
  440. package/bin/bridge +0 -133
  441. package/bin/statusline-launcher.mjs +0 -82
  442. package/bin/statusline-lib.mjs +0 -558
  443. package/bin/statusline.mjs +0 -615
  444. package/bun.lock +0 -927
  445. package/commands/config.md +0 -16
  446. package/commands/doctor.md +0 -13
  447. package/commands/setup.md +0 -17
  448. package/defaults/hidden-roles.json +0 -68
  449. package/defaults/memory-chunk-prompt.md +0 -63
  450. package/defaults/mixdog-config.template.json +0 -27
  451. package/defaults/user-workflow.json +0 -8
  452. package/defaults/user-workflow.md +0 -17
  453. package/hooks/hooks.json +0 -73
  454. package/hooks/lib/active-instance.cjs +0 -77
  455. package/hooks/lib/permission-evaluator.cjs +0 -411
  456. package/hooks/lib/permission-route.cjs +0 -63
  457. package/hooks/lib/settings-loader.cjs +0 -117
  458. package/hooks/post-tool-use.cjs +0 -84
  459. package/hooks/pre-mcp-sandbox.cjs +0 -158
  460. package/hooks/pre-tool-subagent.cjs +0 -258
  461. package/hooks/session-start.cjs +0 -1479
  462. package/hooks/shim-launcher.cjs +0 -65
  463. package/hooks/turn-timer.cjs +0 -82
  464. package/lib/claude-md-writer.cjs +0 -386
  465. package/lib/keychain-cjs.cjs +0 -290
  466. package/lib/plugin-paths.cjs +0 -69
  467. package/lib/rules-builder.cjs +0 -241
  468. package/native/README.md +0 -117
  469. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  470. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  471. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  472. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  473. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  474. package/prompts/code-review.txt +0 -16
  475. package/prompts/security-audit.txt +0 -17
  476. package/rules/bridge/00-common.md +0 -39
  477. package/rules/bridge/20-skip-protocol.md +0 -18
  478. package/rules/bridge/30-explorer.md +0 -33
  479. package/rules/bridge/40-cycle1-agent.md +0 -52
  480. package/rules/bridge/41-cycle2-agent.md +0 -62
  481. package/rules/lead/00-tool-lead.md +0 -61
  482. package/rules/lead/01-general.md +0 -23
  483. package/rules/lead/02-channels.md +0 -49
  484. package/rules/lead/03-team.md +0 -27
  485. package/rules/lead/04-workflow.md +0 -20
  486. package/rules/shared/00-language.md +0 -14
  487. package/rules/shared/01-tool.md +0 -138
  488. package/scripts/bootstrap.mjs +0 -130
  489. package/scripts/bridge-unify-smoke.mjs +0 -308
  490. package/scripts/build-runtime-linux.sh +0 -348
  491. package/scripts/build-runtime-macos.sh +0 -217
  492. package/scripts/build-runtime-windows.ps1 +0 -242
  493. package/scripts/builtin-utils-smoke.mjs +0 -398
  494. package/scripts/bump.mjs +0 -80
  495. package/scripts/check-json.mjs +0 -45
  496. package/scripts/check-syntax-changed.mjs +0 -102
  497. package/scripts/check-syntax.mjs +0 -58
  498. package/scripts/code-graph-batch.test.mjs +0 -33
  499. package/scripts/config-preserve-smoke.mjs +0 -180
  500. package/scripts/doctor.mjs +0 -489
  501. package/scripts/edit-normalize-fuzz.mjs +0 -130
  502. package/scripts/edit-normalize-smoke.mjs +0 -401
  503. package/scripts/edit-operation-smoke.mjs +0 -369
  504. package/scripts/edit2-smoke.mjs +0 -63
  505. package/scripts/ensure-deps.mjs +0 -259
  506. package/scripts/fuzzy-e2e.mjs +0 -28
  507. package/scripts/fuzzy-smoke.mjs +0 -26
  508. package/scripts/generate-runtime-manifest.mjs +0 -166
  509. package/scripts/guard-smoke.mjs +0 -66
  510. package/scripts/hidden-role-schema-smoke.mjs +0 -162
  511. package/scripts/hook-routing-smoke.mjs +0 -29
  512. package/scripts/inject-input.ps1 +0 -204
  513. package/scripts/io-complex-smoke.mjs +0 -667
  514. package/scripts/io-explore-bench.mjs +0 -424
  515. package/scripts/io-guardrails-smoke.mjs +0 -205
  516. package/scripts/io-mini-bench-baseline.json +0 -11
  517. package/scripts/io-mini-bench.mjs +0 -216
  518. package/scripts/io-route-harness.mjs +0 -933
  519. package/scripts/io-telemetry-report.mjs +0 -691
  520. package/scripts/mutation-bench.mjs +0 -564
  521. package/scripts/mutation-io-smoke.mjs +0 -1097
  522. package/scripts/native-patch-bridge-smoke.mjs +0 -288
  523. package/scripts/native-patch-smoke.mjs +0 -304
  524. package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
  525. package/scripts/patch-interior-context-smoke.mjs +0 -49
  526. package/scripts/patch-newline-utf8-smoke.mjs +0 -157
  527. package/scripts/perf-hook-smoke.mjs +0 -71
  528. package/scripts/permission-eval-smoke.mjs +0 -443
  529. package/scripts/prep-patch.mjs +0 -53
  530. package/scripts/prep-shim.mjs +0 -96
  531. package/scripts/provider-cache-smoke.mjs +0 -687
  532. package/scripts/report-runtime-health.mjs +0 -132
  533. package/scripts/resolve-bun.mjs +0 -60
  534. package/scripts/run-mcp.mjs +0 -1448
  535. package/scripts/salvage-v4a-shatter.test.mjs +0 -58
  536. package/scripts/scoped-cache-io-smoke.mjs +0 -103
  537. package/scripts/shell-policy-round3-smoke.mjs +0 -46
  538. package/scripts/smoke-runtime-negative.ps1 +0 -100
  539. package/scripts/smoke-runtime-negative.sh +0 -95
  540. package/scripts/stall-policy-smoke.mjs +0 -50
  541. package/scripts/start-memory-worker.mjs +0 -23
  542. package/scripts/statusline-launcher-smoke.mjs +0 -82
  543. package/scripts/stress-atomic-write.mjs +0 -1028
  544. package/scripts/test-fault-inject.mjs +0 -164
  545. package/scripts/test-large-file.mjs +0 -174
  546. package/scripts/tool-edge-smoke.mjs +0 -209
  547. package/scripts/uninstall.mjs +0 -201
  548. package/scripts/webhook-selfheal-smoke.mjs +0 -27
  549. package/scripts/write-overwrite-guard-smoke.mjs +0 -56
  550. package/server-main.mjs +0 -3109
  551. package/server.mjs +0 -468
  552. package/setup/config-merge.mjs +0 -246
  553. package/setup/install.mjs +0 -574
  554. package/setup/launch-core.mjs +0 -617
  555. package/setup/launch.mjs +0 -101
  556. package/setup/locate-claude.mjs +0 -56
  557. package/setup/mixdog-cli.mjs +0 -122
  558. package/setup/setup-server.mjs +0 -3305
  559. package/setup/setup.html +0 -3740
  560. package/setup/tui.mjs +0 -325
  561. package/skills/retro-skill-proposer/SKILL.md +0 -92
  562. package/skills/schedule-add/SKILL.md +0 -77
  563. package/skills/setup/SKILL.md +0 -356
  564. package/skills/webhook-add/SKILL.md +0 -81
  565. package/src/agent/bridge-stall-watchdog.mjs +0 -337
  566. package/src/agent/index.mjs +0 -2138
  567. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
  568. package/src/agent/orchestrator/bridge-retry.mjs +0 -220
  569. package/src/agent/orchestrator/bridge-trace.mjs +0 -583
  570. package/src/agent/orchestrator/cache-mtime.mjs +0 -58
  571. package/src/agent/orchestrator/config.mjs +0 -405
  572. package/src/agent/orchestrator/context/collect.mjs +0 -651
  573. package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
  574. package/src/agent/orchestrator/drain-registry.mjs +0 -50
  575. package/src/agent/orchestrator/explore-validator.mjs +0 -8
  576. package/src/agent/orchestrator/internal-roles.mjs +0 -118
  577. package/src/agent/orchestrator/internal-tools.mjs +0 -88
  578. package/src/agent/orchestrator/jobs.mjs +0 -116
  579. package/src/agent/orchestrator/mcp/client.mjs +0 -364
  580. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1881
  581. package/src/agent/orchestrator/providers/anthropic.mjs +0 -594
  582. package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
  583. package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
  584. package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
  585. package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
  586. package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
  587. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
  588. package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
  589. package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
  590. package/src/agent/orchestrator/providers/registry.mjs +0 -192
  591. package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
  592. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
  593. package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
  594. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
  595. package/src/agent/orchestrator/session/loop.mjs +0 -1478
  596. package/src/agent/orchestrator/session/manager.mjs +0 -1991
  597. package/src/agent/orchestrator/session/result-classification.mjs +0 -65
  598. package/src/agent/orchestrator/session/store.mjs +0 -632
  599. package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
  600. package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
  601. package/src/agent/orchestrator/session/trim.mjs +0 -491
  602. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
  603. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
  604. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
  605. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
  606. package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
  607. package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
  608. package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
  609. package/src/agent/orchestrator/stall-policy.mjs +0 -201
  610. package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
  611. package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
  612. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -455
  613. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
  614. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
  615. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
  616. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
  617. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
  618. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
  619. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
  620. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
  621. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
  622. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
  623. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
  624. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
  625. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
  626. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
  627. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
  628. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
  629. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
  630. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
  631. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
  632. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
  633. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
  634. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
  635. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
  636. package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
  637. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
  638. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
  639. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
  640. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
  641. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
  642. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
  643. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
  644. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
  645. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
  646. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
  647. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
  648. package/src/agent/orchestrator/tools/builtin.mjs +0 -503
  649. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
  650. package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
  651. package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
  652. package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
  653. package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
  654. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
  655. package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
  656. package/src/agent/orchestrator/tools/host-input.mjs +0 -204
  657. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
  658. package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
  659. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
  660. package/src/agent/orchestrator/tools/patch.mjs +0 -2754
  661. package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
  662. package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
  663. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
  664. package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
  665. package/src/agent/orchestrator/workflow-store.mjs +0 -93
  666. package/src/agent/tool-defs.mjs +0 -103
  667. package/src/channels/backends/discord.mjs +0 -784
  668. package/src/channels/data/voice-runtime-manifest.json +0 -138
  669. package/src/channels/index.mjs +0 -3268
  670. package/src/channels/lib/config.mjs +0 -292
  671. package/src/channels/lib/drop-trace.mjs +0 -71
  672. package/src/channels/lib/event-pipeline.mjs +0 -81
  673. package/src/channels/lib/holidays.mjs +0 -138
  674. package/src/channels/lib/hook-pipe-server.mjs +0 -822
  675. package/src/channels/lib/output-forwarder.mjs +0 -765
  676. package/src/channels/lib/runtime-paths.mjs +0 -517
  677. package/src/channels/lib/scheduler.mjs +0 -723
  678. package/src/channels/lib/session-discovery.mjs +0 -103
  679. package/src/channels/lib/state-file.mjs +0 -68
  680. package/src/channels/lib/status-snapshot.mjs +0 -219
  681. package/src/channels/lib/tool-format.mjs +0 -140
  682. package/src/channels/lib/transcript-discovery.mjs +0 -195
  683. package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
  684. package/src/channels/lib/webhook.mjs +0 -1318
  685. package/src/channels/tool-defs.mjs +0 -170
  686. package/src/daemon/host.mjs +0 -118
  687. package/src/daemon/mcp-transport.mjs +0 -47
  688. package/src/daemon/session.mjs +0 -100
  689. package/src/daemon/thin-client.mjs +0 -71
  690. package/src/daemon/transport.mjs +0 -163
  691. package/src/memory/data/runtime-manifest.json +0 -40
  692. package/src/memory/index.mjs +0 -3332
  693. package/src/memory/lib/core-memory-store.mjs +0 -330
  694. package/src/memory/lib/embedding-provider.mjs +0 -269
  695. package/src/memory/lib/embedding-worker.mjs +0 -323
  696. package/src/memory/lib/memory-cycle1.mjs +0 -645
  697. package/src/memory/lib/memory-cycle2.mjs +0 -1284
  698. package/src/memory/lib/memory-cycle3.mjs +0 -540
  699. package/src/memory/lib/memory-embed.mjs +0 -299
  700. package/src/memory/lib/memory-ops-policy.mjs +0 -190
  701. package/src/memory/lib/memory-recall-store.mjs +0 -638
  702. package/src/memory/lib/memory.mjs +0 -412
  703. package/src/memory/lib/pg/adapter.mjs +0 -308
  704. package/src/memory/lib/pg/process.mjs +0 -360
  705. package/src/memory/lib/pg/supervisor.mjs +0 -396
  706. package/src/memory/lib/runtime-fetcher.mjs +0 -458
  707. package/src/memory/lib/trace-store.mjs +0 -728
  708. package/src/memory/tool-defs.mjs +0 -79
  709. package/src/search/index.mjs +0 -1173
  710. package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
  711. package/src/search/lib/backends/exa.mjs +0 -50
  712. package/src/search/lib/backends/firecrawl.mjs +0 -61
  713. package/src/search/lib/backends/gemini-api.mjs +0 -83
  714. package/src/search/lib/backends/grok-oauth.mjs +0 -86
  715. package/src/search/lib/backends/index.mjs +0 -150
  716. package/src/search/lib/backends/openai-api.mjs +0 -144
  717. package/src/search/lib/backends/openai-oauth.mjs +0 -102
  718. package/src/search/lib/backends/openai-web-search.mjs +0 -76
  719. package/src/search/lib/backends/tavily.mjs +0 -55
  720. package/src/search/lib/backends/xai-api.mjs +0 -113
  721. package/src/search/lib/config.mjs +0 -192
  722. package/src/search/lib/provider-usage.mjs +0 -67
  723. package/src/search/lib/providers.mjs +0 -47
  724. package/src/search/lib/search-intent.mjs +0 -109
  725. package/src/search/lib/setup-handler.mjs +0 -261
  726. package/src/search/lib/web-tools.mjs +0 -1219
  727. package/src/search/tool-defs.mjs +0 -83
  728. package/src/setup/defender-exclusion.mjs +0 -183
  729. package/src/shared/atomic-file.mjs +0 -436
  730. package/src/shared/config.mjs +0 -372
  731. package/src/shared/daemon-recycle.mjs +0 -108
  732. package/src/shared/disable-claude-builtins.mjs +0 -91
  733. package/src/shared/err-text.mjs +0 -12
  734. package/src/shared/llm/cost.mjs +0 -66
  735. package/src/shared/llm/http-agent.mjs +0 -123
  736. package/src/shared/open-url.mjs +0 -62
  737. package/src/shared/plugin-paths.mjs +0 -58
  738. package/src/shared/schedules-store.mjs +0 -70
  739. package/src/shared/seed.mjs +0 -136
  740. package/src/shared/user-cwd.mjs +0 -225
  741. package/src/shared/user-data-guard.mjs +0 -244
  742. package/src/status/aggregator.mjs +0 -584
  743. package/src/status/server.mjs +0 -413
  744. package/tools.json +0 -1653
  745. /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
  746. /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
  747. /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
  748. /package/{lib → src/lib}/config-cjs.cjs +0 -0
  749. /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
  750. /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
  751. /package/{lib → src/lib}/text-utils.cjs +0 -0
  752. /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
  753. /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
  754. /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
  755. /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
  756. /package/src/{agent → runtime/agent}/orchestrator/session/cache/post-edit-marks.mjs +0 -0
  757. /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
  758. /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
  759. /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
  760. /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
  761. /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
  762. /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
  763. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/advisory-lock.mjs +0 -0
  764. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
  765. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
  766. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
  767. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
  768. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
  769. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
  770. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
  771. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
  772. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
  773. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
  774. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
  775. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
  776. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
  777. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
  778. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
  779. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
  780. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
  781. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
  782. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
  783. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
  784. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
  785. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
  786. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
  787. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
  788. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
  789. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
  790. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
  791. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
  792. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
  793. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
  794. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
  795. /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
  796. /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
  797. /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
  798. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
  799. /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
  800. /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
  801. /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
  802. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
  803. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
  804. /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
  805. /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
  806. /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
  807. /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
  808. /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
  809. /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
  810. /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
  811. /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
  812. /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
  813. /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
  814. /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
  815. /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
  816. /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
  817. /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
  818. /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
  819. /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
  820. /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
  821. /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
  822. /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
  823. /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
  824. /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
  825. /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
  826. /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
  827. /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
  828. /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
  829. /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
  830. /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
  831. /package/src/{search → runtime/search}/lib/state.mjs +0 -0
  832. /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
  833. /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
  834. /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
  835. /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
  836. /package/src/{shared → runtime/shared}/wsl.mjs +0 -0
@@ -0,0 +1,314 @@
1
+ const __mixdogMemoryStderrWrite = process.stderr.write.bind(process.stderr);
2
+ function __mixdogMemoryLog(...args) {
3
+ if (process.env.MIXDOG_QUIET_MEMORY_LOG) return true;
4
+ return __mixdogMemoryStderrWrite(...args);
5
+ }
6
+
7
+ // pg-adapter.mjs — PG connection manager for mixdog 0.4.0
8
+ // Single owner: supervisor-pg.ensurePgInstance(dataDir) starts PG.
9
+ // pg-adapter calls supervisor-pg — never pg-process directly.
10
+ //
11
+ // Public API:
12
+ // ensurePgInstance(dataDir, { schema? }) → { db, pool, host, port, runtimeDir, pgdataDir }
13
+ // closePgInstance(dataDir) → void
14
+ //
15
+ // The returned `db` exposes the native PG query surface:
16
+ // db.query(sql, params?) → { rows, rowCount }
17
+ // db.exec(sql) → multi-statement; resolves on completion
18
+ // db.transaction(async tx => …) → auto BEGIN/COMMIT, ROLLBACK on throw
19
+
20
+ import { resolve } from 'path'
21
+ import { ensurePgInstance as supervisorEnsure } from './supervisor.mjs'
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // One-shot bootstrap guard — keyed by resolved dataDir (cluster-level, not schema)
25
+ // ---------------------------------------------------------------------------
26
+
27
+ const _bootstrapped = new Set()
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // Cross-process advisory-lock keys (two-int4 form: classid + objid).
31
+ //
32
+ // pg advisory locks are CLUSTER-global regardless of which database the session
33
+ // is connected to, so a single shared classid namespaces all mixdog first-boot
34
+ // locks; distinct objids separate the CREATE DATABASE race from the per-cluster
35
+ // extension/schema DDL race. Fixed app-specific keys → concurrent first-boot
36
+ // workers serialize on the exact same lock rather than racing the DDL path.
37
+ // ---------------------------------------------------------------------------
38
+
39
+ const ADVISORY_LOCK_CLASSID = 0x6d696478 // "midx" — mixdog bootstrap namespace
40
+ const ADVISORY_OBJID_CREATE_DB = 1 // CREATE DATABASE mixdog
41
+ export const ADVISORY_OBJID_SCHEMA_BOOTSTRAP = 2 // extensions + schema DDL
42
+
43
+ // ---------------------------------------------------------------------------
44
+ // In-process cache
45
+ // ---------------------------------------------------------------------------
46
+
47
+ const instances = new Map() // `${dataDir}|${schema}` → instance handle
48
+ const opening = new Map() // same key → Promise (dedupe concurrent calls)
49
+
50
+ // ---------------------------------------------------------------------------
51
+ // Per-connection init — WeakSet-guarded so settings run exactly once per client
52
+ // ---------------------------------------------------------------------------
53
+
54
+ const _clientInited = new WeakSet()
55
+
56
+ async function _initClient(client, schema) {
57
+ if (_clientInited.has(client)) return
58
+ // Set search_path so unqualified table names resolve to the correct schema.
59
+ //
60
+ // CROSS-SCHEMA QUERY RULE: search_path is per-connection and biases every
61
+ // unqualified table reference toward the connection's primary schema. Any
62
+ // query that intentionally touches the OTHER schema (e.g. orphan sweep on
63
+ // memory.entries from a trace-schema connection, or recall × trace JOIN
64
+ // analytics) MUST use fully-qualified names (memory.entries / trace.trace_events).
65
+ // Relying on search_path silently in cross-schema code = bug magnet.
66
+ const sp = schema === 'trace' ? 'trace, public' : 'memory, public'
67
+ await client.query(`SET search_path = ${sp}`)
68
+ // pg_trgm similarity threshold: session-local, must be set per connection.
69
+ await client.query(`SELECT set_limit(0.10)`)
70
+ await client.query(`SET default_transaction_isolation TO 'read committed'`)
71
+ // Mark seen only after all init statements succeed; failure leaves client
72
+ // unmarked so the next checkout retries init.
73
+ _clientInited.add(client)
74
+ }
75
+
76
+ // Wrapper around pool.connect() that runs per-client init before returning.
77
+ // Exported so external callers (e.g. trace-store.insertBridgeCalls) can obtain
78
+ // a connection with search_path already set; raw _pool.connect() leaves it at
79
+ // the PG default and unqualified table lookups resolve in the wrong schema.
80
+ export async function checkedConnect(pgPool, schema) {
81
+ const client = await pgPool.connect()
82
+ try {
83
+ await _initClient(client, schema)
84
+ } catch (e) {
85
+ client.release()
86
+ throw e
87
+ }
88
+ return client
89
+ }
90
+ const _checkedConnect = checkedConnect
91
+
92
+ // ---------------------------------------------------------------------------
93
+ // native PG db shim
94
+ // ---------------------------------------------------------------------------
95
+
96
+ function makeCompatDb(pgPool, schema) {
97
+ const db = {
98
+ // query: use pool directly for single-statement queries
99
+ query: async (sql, params) => {
100
+ const client = await _checkedConnect(pgPool, schema)
101
+ try {
102
+ return await client.query(sql, params)
103
+ } finally {
104
+ client.release()
105
+ }
106
+ },
107
+
108
+ // exec: multi-statement SQL (semicolon-separated); single client for session state
109
+ exec: async (sql) => {
110
+ const client = await _checkedConnect(pgPool, schema)
111
+ try {
112
+ await client.query(sql)
113
+ } finally {
114
+ client.release()
115
+ }
116
+ },
117
+
118
+ // transaction: check out one client, BEGIN, run callback(tx), COMMIT or ROLLBACK
119
+ transaction: async (fn) => {
120
+ const client = await _checkedConnect(pgPool, schema)
121
+ try {
122
+ await client.query('BEGIN')
123
+ const tx = {
124
+ query: (sql, params) => client.query(sql, params),
125
+ exec: (sql) => client.query(sql),
126
+ }
127
+ const result = await fn(tx)
128
+ await client.query('COMMIT')
129
+ return result
130
+ } catch (err) {
131
+ try { await client.query('ROLLBACK') } catch {}
132
+ throw err
133
+ } finally {
134
+ client.release()
135
+ }
136
+ },
137
+
138
+ // close: drain pool
139
+ close: () => pgPool.end(),
140
+
141
+ // Internal access for callers that need raw pool
142
+ _pool: pgPool,
143
+ }
144
+ return db
145
+ }
146
+
147
+ // ---------------------------------------------------------------------------
148
+ // Instance bootstrap — extensions + schemas (idempotent)
149
+ // ---------------------------------------------------------------------------
150
+
151
+ // Run `fn` while holding the cluster-global schema-bootstrap advisory lock on a
152
+ // dedicated client. Concurrent first-boot workers across processes serialize on
153
+ // the fixed key so the CREATE TYPE / CREATE EXTENSION / schema DDL path is never
154
+ // raced. The lock is session-scoped (held by this client) and released in
155
+ // finally; `fn`'s own DDL may run on other pool connections — the lock only has
156
+ // to provide cross-process mutual exclusion, not cover the same session.
157
+ export async function withSchemaBootstrapLock(pgPool, fn) {
158
+ const client = await pgPool.connect()
159
+ // Tracks whether the advisory lock is provably released. Stays false until a
160
+ // successful pg_advisory_unlock; any failure/uncertainty keeps it false so we
161
+ // never return a still-locked session to the pool.
162
+ let unlockErr = new Error('schema-bootstrap advisory lock release not attempted')
163
+ try {
164
+ await client.query(`SELECT pg_advisory_lock($1, $2)`, [
165
+ ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_SCHEMA_BOOTSTRAP,
166
+ ])
167
+ try {
168
+ return await fn()
169
+ } finally {
170
+ try {
171
+ await client.query(`SELECT pg_advisory_unlock($1, $2)`, [
172
+ ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_SCHEMA_BOOTSTRAP,
173
+ ])
174
+ unlockErr = null // lock provably released → client is clean to reuse
175
+ } catch (err) {
176
+ unlockErr = err instanceof Error ? err : new Error(String(err))
177
+ }
178
+ }
179
+ } finally {
180
+ // A client whose advisory-lock state is uncertain must never be reused:
181
+ // release(truthy) makes node-pg destroy it instead of pooling it.
182
+ client.release(unlockErr || undefined)
183
+ }
184
+ }
185
+
186
+ async function bootstrapInstance(pgPool, dataDirKey) {
187
+ if (_bootstrapped.has(dataDirKey)) return
188
+ // Serialize the cluster-level DDL across concurrent first-boot processes.
189
+ await withSchemaBootstrapLock(pgPool, async () => {
190
+ // Use a raw client bypassing per-client schema settings (bootstrap targets
191
+ // the cluster level, not a specific schema).
192
+ const client = await pgPool.connect()
193
+ try {
194
+ await client.query(`CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public`)
195
+ await client.query(`CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public`)
196
+ await client.query(`CREATE SCHEMA IF NOT EXISTS memory`)
197
+ await client.query(`CREATE SCHEMA IF NOT EXISTS trace`)
198
+ } finally {
199
+ client.release()
200
+ }
201
+ })
202
+ _bootstrapped.add(dataDirKey)
203
+ }
204
+
205
+ // ---------------------------------------------------------------------------
206
+ // ensurePgInstance — public API
207
+ // ---------------------------------------------------------------------------
208
+
209
+ /**
210
+ * Ensure a live PG instance and return a native PG db handle.
211
+ *
212
+ * @param {string} dataDir Plugin data directory.
213
+ * @param {{ schema?: 'memory' | 'trace' }} [opts]
214
+ * @returns {Promise<{ db, pool, host, port, runtimeDir, pgdataDir }>}
215
+ */
216
+ export async function ensurePgInstance(dataDir, opts = {}) {
217
+ const schema = opts.schema ?? 'memory'
218
+ const key = `${resolve(dataDir)}|${schema}`
219
+
220
+ if (instances.has(key)) return instances.get(key)
221
+ if (opening.has(key)) return opening.get(key)
222
+
223
+ const promise = (async () => {
224
+ // 1. Let supervisor-pg own PG startup and health-checking.
225
+ // Returns { host, port, runtimeDir, pgdataDir }.
226
+ const { host, port, runtimeDir, pgdataDir } = await supervisorEnsure(dataDir)
227
+
228
+ // 2. Connect via node-postgres; auto-create the mixdog database if absent.
229
+ const { default: pg } = await import('pg')
230
+
231
+ const PG_USER = 'postgres'
232
+ const PG_DB = 'mixdog'
233
+
234
+ const adminPool = new pg.Pool({
235
+ host, port, user: PG_USER, database: 'postgres',
236
+ password: '', max: 1, idleTimeoutMillis: 5_000,
237
+ })
238
+ try {
239
+ // CREATE DATABASE cannot run inside a transaction, so guard the
240
+ // check-then-create with a session-level advisory lock held on a single
241
+ // dedicated client. Concurrent first-boot workers block on the same
242
+ // cluster-global key here and only one issues the CREATE; the rest see
243
+ // the row present after the holder releases. Released in finally.
244
+ const adminClient = await adminPool.connect()
245
+ // Same invariant as withSchemaBootstrapLock: only reuse the client if the
246
+ // advisory lock is provably released.
247
+ let unlockErr = new Error('create-db advisory lock release not attempted')
248
+ try {
249
+ await adminClient.query(`SELECT pg_advisory_lock($1, $2)`, [
250
+ ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_CREATE_DB,
251
+ ])
252
+ try {
253
+ const r = await adminClient.query(`SELECT 1 FROM pg_database WHERE datname = $1`, [PG_DB])
254
+ if (r.rows.length === 0) {
255
+ await adminClient.query(`CREATE DATABASE ${PG_DB}`)
256
+ __mixdogMemoryLog(`[pg-adapter] created database ${PG_DB}\n`)
257
+ }
258
+ } finally {
259
+ try {
260
+ await adminClient.query(`SELECT pg_advisory_unlock($1, $2)`, [
261
+ ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_CREATE_DB,
262
+ ])
263
+ unlockErr = null // lock provably released → client is clean to reuse
264
+ } catch (err) {
265
+ unlockErr = err instanceof Error ? err : new Error(String(err))
266
+ }
267
+ }
268
+ } finally {
269
+ // Uncertain advisory-lock state → destroy the client (truthy release arg)
270
+ // so a still-locked session never re-enters the admin pool.
271
+ adminClient.release(unlockErr || undefined)
272
+ }
273
+ } finally {
274
+ await adminPool.end()
275
+ }
276
+
277
+ // 3. Production pool.
278
+ const pgPool = new pg.Pool({
279
+ host, port, user: PG_USER, database: PG_DB,
280
+ password: '', max: 5, idleTimeoutMillis: 30_000,
281
+ connectionTimeoutMillis: 10_000,
282
+ })
283
+
284
+ // 4. Bootstrap extensions + schemas once (idempotent).
285
+ await bootstrapInstance(pgPool, resolve(dataDir))
286
+
287
+ // 5. Build the compat db shim.
288
+ const db = makeCompatDb(pgPool, schema)
289
+
290
+ const result = { db, pool: pgPool, host, port, runtimeDir, pgdataDir }
291
+ instances.set(key, result)
292
+ return result
293
+ })()
294
+
295
+ opening.set(key, promise)
296
+ try {
297
+ return await promise
298
+ } finally {
299
+ opening.delete(key)
300
+ }
301
+ }
302
+
303
+ // ---------------------------------------------------------------------------
304
+ // closePgInstance — drain pool
305
+ // ---------------------------------------------------------------------------
306
+
307
+ export async function closePgInstance(dataDir, opts = {}) {
308
+ const schema = opts.schema ?? 'memory'
309
+ const key = `${resolve(dataDir)}|${schema}`
310
+ const inst = instances.get(key)
311
+ if (!inst) return
312
+ try { await inst.pool.end() } catch {}
313
+ instances.delete(key)
314
+ }
@@ -0,0 +1,366 @@
1
+ const __mixdogMemoryStderrWrite = process.stderr.write.bind(process.stderr);
2
+ function __mixdogMemoryLog(...args) {
3
+ if (process.env.MIXDOG_QUIET_MEMORY_LOG) return true;
4
+ return __mixdogMemoryStderrWrite(...args);
5
+ }
6
+
7
+ // pg-process.mjs — lower-level PG lifecycle helpers for mixdog 0.4.0
8
+ // Track B can wire these into the supervisor; pg-adapter calls them directly.
9
+ //
10
+ // Public API:
11
+ // startPg({ runtimeDir, pgdataDir, port?, logPath? }) → { pid, port }
12
+ // stopPg({ runtimeDir, pgdataDir }) → void
13
+ // healthcheckPg({ port, host? }) → boolean
14
+
15
+ import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs'
16
+ import { join } from 'path'
17
+ import { spawnSync } from 'child_process'
18
+ import { createConnection } from 'net'
19
+ import { createServer } from 'net'
20
+
21
+ // ---------------------------------------------------------------------------
22
+ // Helpers
23
+ // ---------------------------------------------------------------------------
24
+
25
+ function pgBin(runtimeDir, name) {
26
+ const ext = process.platform === 'win32' ? '.exe' : ''
27
+ return join(runtimeDir, 'bin', `${name}${ext}`)
28
+ }
29
+
30
+ function libEnv(runtimeDir) {
31
+ // Bundled shared libraries must be visible to the PG binaries at runtime.
32
+ const libDir = join(runtimeDir, 'lib')
33
+ if (process.platform === 'linux') {
34
+ return { ...process.env, LD_LIBRARY_PATH: libDir }
35
+ }
36
+ if (process.platform === 'darwin') {
37
+ return { ...process.env, DYLD_LIBRARY_PATH: libDir }
38
+ }
39
+ // win32: DLLs live in bin/ — add to PATH.
40
+ return { ...process.env, PATH: `${join(runtimeDir, 'bin')};${process.env.PATH}` }
41
+ }
42
+
43
+ // ---------------------------------------------------------------------------
44
+ // Free port detection
45
+ // ---------------------------------------------------------------------------
46
+
47
+ function isTcpPortFree(port) {
48
+ return new Promise(resolve => {
49
+ const srv = createServer()
50
+ srv.once('error', () => resolve(false))
51
+ srv.once('listening', () => { srv.close(); resolve(true) })
52
+ srv.listen(port, '127.0.0.1')
53
+ })
54
+ }
55
+
56
+ const PG_PORT_MIN = 55432
57
+ const PG_PORT_MAX = 55632
58
+
59
+ async function findFreePort(preferred) {
60
+ // I2: clamp out-of-range callers to the valid window.
61
+ if (preferred < PG_PORT_MIN || preferred > PG_PORT_MAX) preferred = PG_PORT_MIN
62
+ if (await isTcpPortFree(preferred)) return preferred
63
+ for (let p = preferred + 1; p <= PG_PORT_MAX; p++) {
64
+ if (await isTcpPortFree(p)) return p
65
+ }
66
+ throw new Error(`[pg-process] no free port found in range ${preferred}–${PG_PORT_MAX}`)
67
+ }
68
+
69
+ // ---------------------------------------------------------------------------
70
+ // postgresql.conf v2 reconcile — appended on every startPg call so existing
71
+ // pgdata directories pick up the bgwriter / checkpoint-distribution tuning
72
+ // without requiring a fresh initdb.
73
+ // ---------------------------------------------------------------------------
74
+
75
+ const MIXDOG_CONF_V2_MARKER = '# mixdog overrides v2 — bgwriter / checkpoint distribution'
76
+
77
+ // Lines emitted into postgresql.conf for v2. effective_io_concurrency is
78
+ // posix_fadvise-only; PG rejects non-zero values on Windows with an invalid-
79
+ // parameter error on every reload. Skip it there.
80
+ function buildV2Block() {
81
+ const lines = [
82
+ '',
83
+ MIXDOG_CONF_V2_MARKER,
84
+ 'checkpoint_completion_target = 0.9', // spread checkpoint write across 90% of timeout window
85
+ 'bgwriter_lru_maxpages = 1000', // up to 1000 dirty pages per round (default 100)
86
+ 'bgwriter_delay = 50ms', // wake bgwriter every 50ms (default 200ms)
87
+ ]
88
+ if (process.platform !== 'win32') {
89
+ lines.push('effective_io_concurrency = 32') // I/O concurrency hint (POSIX only)
90
+ }
91
+ return lines.join('\n') + '\n'
92
+ }
93
+
94
+ // Migration: an earlier v2 always emitted effective_io_concurrency. On Windows
95
+ // that line is invalid — strip it so pg_ctl reload stops logging a parse error
96
+ // every cycle.
97
+ function stripWindowsInvalidLines(conf) {
98
+ if (process.platform !== 'win32') return conf
99
+ return conf.replace(/^effective_io_concurrency\s*=\s*\d+\s*\r?\n/m, '')
100
+ }
101
+
102
+ function ensureConfV2(pgdataDir) {
103
+ const confPath = join(pgdataDir, 'postgresql.conf')
104
+ if (!existsSync(confPath)) return false
105
+ const original = readFileSync(confPath, 'utf8')
106
+ let conf = stripWindowsInvalidLines(original)
107
+ const stripped = conf !== original
108
+ const hasMarker = conf.includes(MIXDOG_CONF_V2_MARKER)
109
+ if (hasMarker && !stripped) return false
110
+ if (!hasMarker) conf = conf + buildV2Block()
111
+ writeFileSync(confPath, conf)
112
+ return true
113
+ }
114
+
115
+ // Public reconcile: idempotent conf v2 append + pg_ctl reload on a running
116
+ // instance. Single source of truth for v2 application — supervisor and other
117
+ // callers route through this rather than re-implementing the conf/reload pair.
118
+ // All v2 settings are reload-applicable (no restart required).
119
+ export function reconcileConfV2(runtimeDir, pgdataDir) {
120
+ const applied = ensureConfV2(pgdataDir)
121
+ if (!applied) return { applied: false, reloaded: false }
122
+ const reload = spawnSync(pgBin(runtimeDir, 'pg_ctl'), ['reload', '-D', pgdataDir], {
123
+ env: libEnv(runtimeDir), stdio: 'pipe', timeout: 5_000, windowsHide: true,
124
+ })
125
+ const reloaded = reload.status === 0
126
+ if (reloaded) {
127
+ __mixdogMemoryLog('[pg-process] postgresql.conf v2 overrides applied via pg_ctl reload\n')
128
+ } else {
129
+ __mixdogMemoryLog(`[pg-process] pg_ctl reload after v2 append failed (non-fatal): ${reload.stderr?.toString() || ''}\n`)
130
+ }
131
+ return { applied, reloaded }
132
+ }
133
+
134
+ // ---------------------------------------------------------------------------
135
+ // startPg
136
+ // ---------------------------------------------------------------------------
137
+
138
+ export async function startPg({ runtimeDir, pgdataDir, port: preferredPort = 55432, logPath }) {
139
+ mkdirSync(pgdataDir, { recursive: true })
140
+
141
+ if (process.platform === 'darwin') {
142
+ try { writeFileSync(join(pgdataDir, '.metadata_never_index'), '') } catch {}
143
+ }
144
+
145
+ // Idempotent v2 conf reconcile — runs before attach/init. Returns true if
146
+ // the block was just appended (so the attach path can trigger pg_ctl reload).
147
+ // Fresh-init path falls through to confAppend below which already includes v2.
148
+ const v2Applied = ensureConfV2(pgdataDir)
149
+
150
+ // Pre-check: if postmaster.pid exists and the instance is reachable, attach
151
+ // rather than attempting a second pg_ctl start (which would crash the worker).
152
+ const postmasterPidPath = join(pgdataDir, 'postmaster.pid')
153
+ if (existsSync(postmasterPidPath)) {
154
+ try {
155
+ const lines = readFileSync(postmasterPidPath, 'utf8').split('\n')
156
+ const existingPid = parseInt(lines[0], 10)
157
+ // Line 4 (index 3) in postmaster.pid holds the port number.
158
+ const existingPort = parseInt(lines[3], 10)
159
+ if (existingPid > 0 && existingPort > 0) {
160
+ // Liveness must be confirmed by pg_isready (status 0). A bare open TCP
161
+ // port is insufficient: any unrelated listener that happened to grab
162
+ // this port would be mistaken for our PG instance, causing a false
163
+ // attach. pg_isready performs a real PG protocol handshake, so a
164
+ // non-Postgres listener returns non-zero and we correctly fall through
165
+ // to normal startup (which reclaims the stale postmaster.pid).
166
+ const pgIsReady = pgBin(runtimeDir, 'pg_isready')
167
+ const probe = spawnSync(pgIsReady, ['-h', '127.0.0.1', '-p', String(existingPort)], {
168
+ env: libEnv(runtimeDir), stdio: 'pipe', timeout: 3_000, windowsHide: true,
169
+ })
170
+ const alive = probe.status === 0
171
+ if (alive) {
172
+ __mixdogMemoryLog(`[pg-process] attaching to existing PG pid=${existingPid} port=${existingPort}\n`)
173
+ // Route through the single reconcile entry point so v1 → v2 conf
174
+ // upgrades land on already-running instances without restart.
175
+ if (v2Applied) reconcileConfV2(runtimeDir, pgdataDir)
176
+ return { pid: existingPid, port: existingPort, attached: true }
177
+ }
178
+ // Dead instance — fall through to normal startup; pg_ctl will reclaim stale lock.
179
+ }
180
+ } catch {}
181
+ }
182
+
183
+ const env = libEnv(runtimeDir)
184
+ const initdb = pgBin(runtimeDir, 'initdb')
185
+ const pgctl = pgBin(runtimeDir, 'pg_ctl')
186
+
187
+ // initdb if pgdata is not yet initialised (no PG_VERSION file).
188
+ const pgVersionFile = join(pgdataDir, 'PG_VERSION')
189
+ if (!existsSync(pgVersionFile)) {
190
+ __mixdogMemoryLog(`[pg-process] initdb → ${pgdataDir}\n`)
191
+ const r = spawnSync(initdb, [
192
+ '-D', pgdataDir,
193
+ '--auth-local=trust',
194
+ '--no-locale',
195
+ '-E', 'UTF8',
196
+ '-U', 'postgres',
197
+ ], { env, stdio: 'pipe', windowsHide: true })
198
+
199
+ if (r.status !== 0) {
200
+ const detail = r.error?.message
201
+ || r.stderr?.toString()
202
+ || r.stdout?.toString()
203
+ || `status=${r.status} signal=${r.signal} (no captured output)`
204
+ throw new Error(`[pg-process] initdb failed: ${detail}`)
205
+ }
206
+
207
+ // Append mixdog-specific postgresql.conf overrides.
208
+ // default_transaction_isolation: native PG default is read committed.
209
+ // Native PG does not default to serializable; set isolation level explicitly
210
+ // so behaviour is unambiguous across PG major versions.
211
+ const confPath = join(pgdataDir, 'postgresql.conf')
212
+ const confAppend = [
213
+ '',
214
+ '# mixdog overrides — appended by pg-process.mjs',
215
+ "default_transaction_isolation = 'read committed'",
216
+ "listen_addresses = '127.0.0.1'",
217
+ 'log_min_messages = warning',
218
+ 'log_line_prefix = \'%t [%p]: \'',
219
+ '',
220
+ '# Defender/AV latency mitigations',
221
+ 'synchronous_commit = off', // defers fsync ack; trade-off: crash → latest async commits since last WAL flush may be lost; acceptable for local memory store
222
+ 'checkpoint_timeout = 15min', // halves checkpoint frequency vs 5min default; fewer sync storms
223
+ 'max_wal_size = 2GB', // suppresses forced checkpoints driven by WAL volume
224
+ 'wal_compression = on', // smaller WAL segments; fewer bytes for Defender to scan per segment
225
+ 'wal_init_zero = off', // skips zero-fill on new WAL segment; cuts Defender contact at segment creation
226
+ 'wal_recycle = off', // disables WAL rename/recycle loop; eliminates rename-storm EPERM pattern in pgdata
227
+ ].join('\n') + '\n' + buildV2Block()
228
+
229
+ try {
230
+ const existing = readFileSync(confPath, 'utf8')
231
+ writeFileSync(confPath, existing + confAppend)
232
+ } catch (e) {
233
+ __mixdogMemoryLog(`[pg-process] postgresql.conf append failed: ${e?.message}\n`)
234
+ }
235
+
236
+ if (process.platform === 'win32') {
237
+ __mixdogMemoryLog(
238
+ `[pg-process] Windows tip: if startup feels slow, add the data folder to Defender exclusions.\n` +
239
+ ` Folder: ${pgdataDir}\n` +
240
+ ` PowerShell (run as admin): Add-MpPreference -ExclusionPath '${pgdataDir}'\n`
241
+ )
242
+ }
243
+ }
244
+
245
+ // Choose a free port (guards against stale postmaster from prior crash).
246
+ const port = await findFreePort(preferredPort)
247
+ const logFile = logPath ?? join(pgdataDir, 'pg.log')
248
+
249
+ __mixdogMemoryLog(`[pg-process] pg_ctl start -D ${pgdataDir} -p ${port}\n`)
250
+
251
+ const r = spawnSync(pgctl, [
252
+ 'start', '-w',
253
+ '-D', pgdataDir,
254
+ '-l', logFile,
255
+ '-o', `-p ${port} -h 127.0.0.1`,
256
+ ], { env, stdio: 'pipe', timeout: 30_000, windowsHide: true })
257
+
258
+ if (r.status !== 0) {
259
+ const errText = r.stderr?.toString() || r.stdout?.toString() || ''
260
+ // "another server might be running" — try status + immediate stop before failing.
261
+ if (errText.includes('another server might be running')) {
262
+ __mixdogMemoryLog(`[pg-process] pg_ctl start: "another server might be running" — probing status\n`)
263
+ const statusR = spawnSync(pgctl, ['status', '-D', pgdataDir], { env, stdio: 'pipe', timeout: 3_000, windowsHide: true })
264
+ __mixdogMemoryLog(`[pg-process] pg_ctl status: ${statusR.stdout?.toString() || statusR.stderr?.toString() || 'no output'}\n`)
265
+ const stopR = spawnSync(pgctl, ['stop', '-m', 'immediate', '-D', pgdataDir], { env, stdio: 'pipe', timeout: 3_000, windowsHide: true })
266
+ if (stopR.status === 0) {
267
+ // Retry start once after clearing the stale instance.
268
+ const r2 = spawnSync(pgctl, [
269
+ 'start', '-w',
270
+ '-D', pgdataDir,
271
+ '-l', logPath ?? join(pgdataDir, 'pg.log'),
272
+ '-o', `-p ${port} -h 127.0.0.1`,
273
+ ], { env, stdio: 'pipe', timeout: 30_000, windowsHide: true })
274
+ if (r2.status === 0) {
275
+ let pid = null
276
+ try {
277
+ const pidFile = join(pgdataDir, 'postmaster.pid')
278
+ if (existsSync(pidFile)) pid = parseInt(readFileSync(pidFile, 'utf8').split('\n')[0], 10) || null
279
+ } catch {}
280
+ return { pid, port }
281
+ }
282
+ __mixdogMemoryLog(`[pg-process] retry start after stop also failed: ${r2.stderr?.toString() || ''}\n`)
283
+ } else {
284
+ __mixdogMemoryLog(`[pg-process] immediate stop failed: ${stopR.stderr?.toString() || ''} — treating as degraded\n`)
285
+ }
286
+ }
287
+ throw new Error(`[pg-process] pg_ctl start failed: ${errText}`)
288
+ }
289
+
290
+ // Read PID from postmaster.pid (first line).
291
+ let pid = null
292
+ try {
293
+ const pidFile = join(pgdataDir, 'postmaster.pid')
294
+ if (existsSync(pidFile)) {
295
+ pid = parseInt(readFileSync(pidFile, 'utf8').split('\n')[0], 10) || null
296
+ }
297
+ } catch {}
298
+
299
+ return { pid, port }
300
+ }
301
+
302
+ // ---------------------------------------------------------------------------
303
+ // stopPg
304
+ // ---------------------------------------------------------------------------
305
+
306
+ export async function stopPg({ runtimeDir, pgdataDir }) {
307
+ const pgctl = pgBin(runtimeDir, 'pg_ctl')
308
+ const env = libEnv(runtimeDir)
309
+
310
+ const r = spawnSync(pgctl, ['stop', '-m', 'fast', '-w', '-D', pgdataDir], {
311
+ env,
312
+ stdio: 'pipe',
313
+ timeout: 15_000,
314
+ windowsHide: true,
315
+ })
316
+
317
+ if (r.status !== 0) {
318
+ const msg = r.stderr?.toString() || r.stdout?.toString() || ''
319
+ // Stale postmaster.pid — PG is already down; clean up and continue.
320
+ if (
321
+ msg.includes('no server running') ||
322
+ msg.includes('PID file') ||
323
+ msg.includes('not running')
324
+ ) {
325
+ __mixdogMemoryLog(`[pg-process] stopPg: already stopped (${msg.slice(0, 80)})\n`)
326
+ try { rmSync(join(pgdataDir, 'postmaster.pid'), { force: true }) } catch {}
327
+ } else {
328
+ __mixdogMemoryLog(`[pg-process] pg_ctl stop warning: ${msg}\n`)
329
+ }
330
+ }
331
+ }
332
+
333
+ // ---------------------------------------------------------------------------
334
+ // healthcheckPg
335
+ // ---------------------------------------------------------------------------
336
+
337
+ export async function healthcheckPg({ port, host = '127.0.0.1' }) {
338
+ // Phase 1: TCP listen check (fast, no PG client dependency).
339
+ const tcpOk = await new Promise(resolve => {
340
+ const sock = createConnection({ host, port })
341
+ sock.setTimeout(1000)
342
+ sock.once('connect', () => { sock.destroy(); resolve(true) })
343
+ sock.once('error', () => { sock.destroy(); resolve(false) })
344
+ sock.once('timeout', () => { sock.destroy(); resolve(false) })
345
+ })
346
+ if (!tcpOk) return false
347
+
348
+ // Phase 2: SELECT 1 via a transient pg client.
349
+ let client
350
+ try {
351
+ const { default: pg } = await import('pg')
352
+ client = new pg.Client({
353
+ host, port, user: 'postgres', database: 'postgres', password: '',
354
+ connectionTimeoutMillis: 2000,
355
+ })
356
+ await client.connect()
357
+ await client.query('SELECT 1')
358
+ return true
359
+ } catch {
360
+ return false
361
+ } finally {
362
+ if (client) {
363
+ try { await client.end() } catch {}
364
+ }
365
+ }
366
+ }