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
@@ -1,308 +0,0 @@
1
- // pg-adapter.mjs — PG connection manager for mixdog 0.4.0
2
- // Single owner: supervisor-pg.ensurePgInstance(dataDir) starts PG.
3
- // pg-adapter calls supervisor-pg — never pg-process directly.
4
- //
5
- // Public API:
6
- // ensurePgInstance(dataDir, { schema? }) → { db, pool, host, port, runtimeDir, pgdataDir }
7
- // closePgInstance(dataDir) → void
8
- //
9
- // The returned `db` exposes the native PG query surface:
10
- // db.query(sql, params?) → { rows, rowCount }
11
- // db.exec(sql) → multi-statement; resolves on completion
12
- // db.transaction(async tx => …) → auto BEGIN/COMMIT, ROLLBACK on throw
13
-
14
- import { resolve } from 'path'
15
- import { ensurePgInstance as supervisorEnsure } from './supervisor.mjs'
16
-
17
- // ---------------------------------------------------------------------------
18
- // One-shot bootstrap guard — keyed by resolved dataDir (cluster-level, not schema)
19
- // ---------------------------------------------------------------------------
20
-
21
- const _bootstrapped = new Set()
22
-
23
- // ---------------------------------------------------------------------------
24
- // Cross-process advisory-lock keys (two-int4 form: classid + objid).
25
- //
26
- // pg advisory locks are CLUSTER-global regardless of which database the session
27
- // is connected to, so a single shared classid namespaces all mixdog first-boot
28
- // locks; distinct objids separate the CREATE DATABASE race from the per-cluster
29
- // extension/schema DDL race. Fixed app-specific keys → concurrent first-boot
30
- // workers serialize on the exact same lock rather than racing the DDL path.
31
- // ---------------------------------------------------------------------------
32
-
33
- const ADVISORY_LOCK_CLASSID = 0x6d696478 // "midx" — mixdog bootstrap namespace
34
- const ADVISORY_OBJID_CREATE_DB = 1 // CREATE DATABASE mixdog
35
- export const ADVISORY_OBJID_SCHEMA_BOOTSTRAP = 2 // extensions + schema DDL
36
-
37
- // ---------------------------------------------------------------------------
38
- // In-process cache
39
- // ---------------------------------------------------------------------------
40
-
41
- const instances = new Map() // `${dataDir}|${schema}` → instance handle
42
- const opening = new Map() // same key → Promise (dedupe concurrent calls)
43
-
44
- // ---------------------------------------------------------------------------
45
- // Per-connection init — WeakSet-guarded so settings run exactly once per client
46
- // ---------------------------------------------------------------------------
47
-
48
- const _clientInited = new WeakSet()
49
-
50
- async function _initClient(client, schema) {
51
- if (_clientInited.has(client)) return
52
- // Set search_path so unqualified table names resolve to the correct schema.
53
- //
54
- // CROSS-SCHEMA QUERY RULE: search_path is per-connection and biases every
55
- // unqualified table reference toward the connection's primary schema. Any
56
- // query that intentionally touches the OTHER schema (e.g. orphan sweep on
57
- // memory.entries from a trace-schema connection, or recall × trace JOIN
58
- // analytics) MUST use fully-qualified names (memory.entries / trace.trace_events).
59
- // Relying on search_path silently in cross-schema code = bug magnet.
60
- const sp = schema === 'trace' ? 'trace, public' : 'memory, public'
61
- await client.query(`SET search_path = ${sp}`)
62
- // pg_trgm similarity threshold: session-local, must be set per connection.
63
- await client.query(`SELECT set_limit(0.10)`)
64
- await client.query(`SET default_transaction_isolation TO 'read committed'`)
65
- // Mark seen only after all init statements succeed; failure leaves client
66
- // unmarked so the next checkout retries init.
67
- _clientInited.add(client)
68
- }
69
-
70
- // Wrapper around pool.connect() that runs per-client init before returning.
71
- // Exported so external callers (e.g. trace-store.insertBridgeCalls) can obtain
72
- // a connection with search_path already set; raw _pool.connect() leaves it at
73
- // the PG default and unqualified table lookups resolve in the wrong schema.
74
- export async function checkedConnect(pgPool, schema) {
75
- const client = await pgPool.connect()
76
- try {
77
- await _initClient(client, schema)
78
- } catch (e) {
79
- client.release()
80
- throw e
81
- }
82
- return client
83
- }
84
- const _checkedConnect = checkedConnect
85
-
86
- // ---------------------------------------------------------------------------
87
- // native PG db shim
88
- // ---------------------------------------------------------------------------
89
-
90
- function makeCompatDb(pgPool, schema) {
91
- const db = {
92
- // query: use pool directly for single-statement queries
93
- query: async (sql, params) => {
94
- const client = await _checkedConnect(pgPool, schema)
95
- try {
96
- return await client.query(sql, params)
97
- } finally {
98
- client.release()
99
- }
100
- },
101
-
102
- // exec: multi-statement SQL (semicolon-separated); single client for session state
103
- exec: async (sql) => {
104
- const client = await _checkedConnect(pgPool, schema)
105
- try {
106
- await client.query(sql)
107
- } finally {
108
- client.release()
109
- }
110
- },
111
-
112
- // transaction: check out one client, BEGIN, run callback(tx), COMMIT or ROLLBACK
113
- transaction: async (fn) => {
114
- const client = await _checkedConnect(pgPool, schema)
115
- try {
116
- await client.query('BEGIN')
117
- const tx = {
118
- query: (sql, params) => client.query(sql, params),
119
- exec: (sql) => client.query(sql),
120
- }
121
- const result = await fn(tx)
122
- await client.query('COMMIT')
123
- return result
124
- } catch (err) {
125
- try { await client.query('ROLLBACK') } catch {}
126
- throw err
127
- } finally {
128
- client.release()
129
- }
130
- },
131
-
132
- // close: drain pool
133
- close: () => pgPool.end(),
134
-
135
- // Internal access for callers that need raw pool
136
- _pool: pgPool,
137
- }
138
- return db
139
- }
140
-
141
- // ---------------------------------------------------------------------------
142
- // Instance bootstrap — extensions + schemas (idempotent)
143
- // ---------------------------------------------------------------------------
144
-
145
- // Run `fn` while holding the cluster-global schema-bootstrap advisory lock on a
146
- // dedicated client. Concurrent first-boot workers across processes serialize on
147
- // the fixed key so the CREATE TYPE / CREATE EXTENSION / schema DDL path is never
148
- // raced. The lock is session-scoped (held by this client) and released in
149
- // finally; `fn`'s own DDL may run on other pool connections — the lock only has
150
- // to provide cross-process mutual exclusion, not cover the same session.
151
- export async function withSchemaBootstrapLock(pgPool, fn) {
152
- const client = await pgPool.connect()
153
- // Tracks whether the advisory lock is provably released. Stays false until a
154
- // successful pg_advisory_unlock; any failure/uncertainty keeps it false so we
155
- // never return a still-locked session to the pool.
156
- let unlockErr = new Error('schema-bootstrap advisory lock release not attempted')
157
- try {
158
- await client.query(`SELECT pg_advisory_lock($1, $2)`, [
159
- ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_SCHEMA_BOOTSTRAP,
160
- ])
161
- try {
162
- return await fn()
163
- } finally {
164
- try {
165
- await client.query(`SELECT pg_advisory_unlock($1, $2)`, [
166
- ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_SCHEMA_BOOTSTRAP,
167
- ])
168
- unlockErr = null // lock provably released → client is clean to reuse
169
- } catch (err) {
170
- unlockErr = err instanceof Error ? err : new Error(String(err))
171
- }
172
- }
173
- } finally {
174
- // A client whose advisory-lock state is uncertain must never be reused:
175
- // release(truthy) makes node-pg destroy it instead of pooling it.
176
- client.release(unlockErr || undefined)
177
- }
178
- }
179
-
180
- async function bootstrapInstance(pgPool, dataDirKey) {
181
- if (_bootstrapped.has(dataDirKey)) return
182
- // Serialize the cluster-level DDL across concurrent first-boot processes.
183
- await withSchemaBootstrapLock(pgPool, async () => {
184
- // Use a raw client bypassing per-client schema settings (bootstrap targets
185
- // the cluster level, not a specific schema).
186
- const client = await pgPool.connect()
187
- try {
188
- await client.query(`CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public`)
189
- await client.query(`CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public`)
190
- await client.query(`CREATE SCHEMA IF NOT EXISTS memory`)
191
- await client.query(`CREATE SCHEMA IF NOT EXISTS trace`)
192
- } finally {
193
- client.release()
194
- }
195
- })
196
- _bootstrapped.add(dataDirKey)
197
- }
198
-
199
- // ---------------------------------------------------------------------------
200
- // ensurePgInstance — public API
201
- // ---------------------------------------------------------------------------
202
-
203
- /**
204
- * Ensure a live PG instance and return a native PG db handle.
205
- *
206
- * @param {string} dataDir Plugin data directory.
207
- * @param {{ schema?: 'memory' | 'trace' }} [opts]
208
- * @returns {Promise<{ db, pool, host, port, runtimeDir, pgdataDir }>}
209
- */
210
- export async function ensurePgInstance(dataDir, opts = {}) {
211
- const schema = opts.schema ?? 'memory'
212
- const key = `${resolve(dataDir)}|${schema}`
213
-
214
- if (instances.has(key)) return instances.get(key)
215
- if (opening.has(key)) return opening.get(key)
216
-
217
- const promise = (async () => {
218
- // 1. Let supervisor-pg own PG startup and health-checking.
219
- // Returns { host, port, runtimeDir, pgdataDir }.
220
- const { host, port, runtimeDir, pgdataDir } = await supervisorEnsure(dataDir)
221
-
222
- // 2. Connect via node-postgres; auto-create the mixdog database if absent.
223
- const { default: pg } = await import('pg')
224
-
225
- const PG_USER = 'postgres'
226
- const PG_DB = 'mixdog'
227
-
228
- const adminPool = new pg.Pool({
229
- host, port, user: PG_USER, database: 'postgres',
230
- password: '', max: 1, idleTimeoutMillis: 5_000,
231
- })
232
- try {
233
- // CREATE DATABASE cannot run inside a transaction, so guard the
234
- // check-then-create with a session-level advisory lock held on a single
235
- // dedicated client. Concurrent first-boot workers block on the same
236
- // cluster-global key here and only one issues the CREATE; the rest see
237
- // the row present after the holder releases. Released in finally.
238
- const adminClient = await adminPool.connect()
239
- // Same invariant as withSchemaBootstrapLock: only reuse the client if the
240
- // advisory lock is provably released.
241
- let unlockErr = new Error('create-db advisory lock release not attempted')
242
- try {
243
- await adminClient.query(`SELECT pg_advisory_lock($1, $2)`, [
244
- ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_CREATE_DB,
245
- ])
246
- try {
247
- const r = await adminClient.query(`SELECT 1 FROM pg_database WHERE datname = $1`, [PG_DB])
248
- if (r.rows.length === 0) {
249
- await adminClient.query(`CREATE DATABASE ${PG_DB}`)
250
- process.stderr.write(`[pg-adapter] created database ${PG_DB}\n`)
251
- }
252
- } finally {
253
- try {
254
- await adminClient.query(`SELECT pg_advisory_unlock($1, $2)`, [
255
- ADVISORY_LOCK_CLASSID, ADVISORY_OBJID_CREATE_DB,
256
- ])
257
- unlockErr = null // lock provably released → client is clean to reuse
258
- } catch (err) {
259
- unlockErr = err instanceof Error ? err : new Error(String(err))
260
- }
261
- }
262
- } finally {
263
- // Uncertain advisory-lock state → destroy the client (truthy release arg)
264
- // so a still-locked session never re-enters the admin pool.
265
- adminClient.release(unlockErr || undefined)
266
- }
267
- } finally {
268
- await adminPool.end()
269
- }
270
-
271
- // 3. Production pool.
272
- const pgPool = new pg.Pool({
273
- host, port, user: PG_USER, database: PG_DB,
274
- password: '', max: 5, idleTimeoutMillis: 30_000,
275
- connectionTimeoutMillis: 10_000,
276
- })
277
-
278
- // 4. Bootstrap extensions + schemas once (idempotent).
279
- await bootstrapInstance(pgPool, resolve(dataDir))
280
-
281
- // 5. Build the compat db shim.
282
- const db = makeCompatDb(pgPool, schema)
283
-
284
- const result = { db, pool: pgPool, host, port, runtimeDir, pgdataDir }
285
- instances.set(key, result)
286
- return result
287
- })()
288
-
289
- opening.set(key, promise)
290
- try {
291
- return await promise
292
- } finally {
293
- opening.delete(key)
294
- }
295
- }
296
-
297
- // ---------------------------------------------------------------------------
298
- // closePgInstance — drain pool
299
- // ---------------------------------------------------------------------------
300
-
301
- export async function closePgInstance(dataDir, opts = {}) {
302
- const schema = opts.schema ?? 'memory'
303
- const key = `${resolve(dataDir)}|${schema}`
304
- const inst = instances.get(key)
305
- if (!inst) return
306
- try { await inst.pool.end() } catch {}
307
- instances.delete(key)
308
- }
@@ -1,360 +0,0 @@
1
- // pg-process.mjs — lower-level PG lifecycle helpers for mixdog 0.4.0
2
- // Track B can wire these into the supervisor; pg-adapter calls them directly.
3
- //
4
- // Public API:
5
- // startPg({ runtimeDir, pgdataDir, port?, logPath? }) → { pid, port }
6
- // stopPg({ runtimeDir, pgdataDir }) → void
7
- // healthcheckPg({ port, host? }) → boolean
8
-
9
- import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs'
10
- import { join } from 'path'
11
- import { spawnSync } from 'child_process'
12
- import { createConnection } from 'net'
13
- import { createServer } from 'net'
14
-
15
- // ---------------------------------------------------------------------------
16
- // Helpers
17
- // ---------------------------------------------------------------------------
18
-
19
- function pgBin(runtimeDir, name) {
20
- const ext = process.platform === 'win32' ? '.exe' : ''
21
- return join(runtimeDir, 'bin', `${name}${ext}`)
22
- }
23
-
24
- function libEnv(runtimeDir) {
25
- // Bundled shared libraries must be visible to the PG binaries at runtime.
26
- const libDir = join(runtimeDir, 'lib')
27
- if (process.platform === 'linux') {
28
- return { ...process.env, LD_LIBRARY_PATH: libDir }
29
- }
30
- if (process.platform === 'darwin') {
31
- return { ...process.env, DYLD_LIBRARY_PATH: libDir }
32
- }
33
- // win32: DLLs live in bin/ — add to PATH.
34
- return { ...process.env, PATH: `${join(runtimeDir, 'bin')};${process.env.PATH}` }
35
- }
36
-
37
- // ---------------------------------------------------------------------------
38
- // Free port detection
39
- // ---------------------------------------------------------------------------
40
-
41
- function isTcpPortFree(port) {
42
- return new Promise(resolve => {
43
- const srv = createServer()
44
- srv.once('error', () => resolve(false))
45
- srv.once('listening', () => { srv.close(); resolve(true) })
46
- srv.listen(port, '127.0.0.1')
47
- })
48
- }
49
-
50
- const PG_PORT_MIN = 55432
51
- const PG_PORT_MAX = 55632
52
-
53
- async function findFreePort(preferred) {
54
- // I2: clamp out-of-range callers to the valid window.
55
- if (preferred < PG_PORT_MIN || preferred > PG_PORT_MAX) preferred = PG_PORT_MIN
56
- if (await isTcpPortFree(preferred)) return preferred
57
- for (let p = preferred + 1; p <= PG_PORT_MAX; p++) {
58
- if (await isTcpPortFree(p)) return p
59
- }
60
- throw new Error(`[pg-process] no free port found in range ${preferred}–${PG_PORT_MAX}`)
61
- }
62
-
63
- // ---------------------------------------------------------------------------
64
- // postgresql.conf v2 reconcile — appended on every startPg call so existing
65
- // pgdata directories pick up the bgwriter / checkpoint-distribution tuning
66
- // without requiring a fresh initdb.
67
- // ---------------------------------------------------------------------------
68
-
69
- const MIXDOG_CONF_V2_MARKER = '# mixdog overrides v2 — bgwriter / checkpoint distribution'
70
-
71
- // Lines emitted into postgresql.conf for v2. effective_io_concurrency is
72
- // posix_fadvise-only; PG rejects non-zero values on Windows with an invalid-
73
- // parameter error on every reload. Skip it there.
74
- function buildV2Block() {
75
- const lines = [
76
- '',
77
- MIXDOG_CONF_V2_MARKER,
78
- 'checkpoint_completion_target = 0.9', // spread checkpoint write across 90% of timeout window
79
- 'bgwriter_lru_maxpages = 1000', // up to 1000 dirty pages per round (default 100)
80
- 'bgwriter_delay = 50ms', // wake bgwriter every 50ms (default 200ms)
81
- ]
82
- if (process.platform !== 'win32') {
83
- lines.push('effective_io_concurrency = 32') // I/O concurrency hint (POSIX only)
84
- }
85
- return lines.join('\n') + '\n'
86
- }
87
-
88
- // Migration: an earlier v2 always emitted effective_io_concurrency. On Windows
89
- // that line is invalid — strip it so pg_ctl reload stops logging a parse error
90
- // every cycle.
91
- function stripWindowsInvalidLines(conf) {
92
- if (process.platform !== 'win32') return conf
93
- return conf.replace(/^effective_io_concurrency\s*=\s*\d+\s*\r?\n/m, '')
94
- }
95
-
96
- function ensureConfV2(pgdataDir) {
97
- const confPath = join(pgdataDir, 'postgresql.conf')
98
- if (!existsSync(confPath)) return false
99
- const original = readFileSync(confPath, 'utf8')
100
- let conf = stripWindowsInvalidLines(original)
101
- const stripped = conf !== original
102
- const hasMarker = conf.includes(MIXDOG_CONF_V2_MARKER)
103
- if (hasMarker && !stripped) return false
104
- if (!hasMarker) conf = conf + buildV2Block()
105
- writeFileSync(confPath, conf)
106
- return true
107
- }
108
-
109
- // Public reconcile: idempotent conf v2 append + pg_ctl reload on a running
110
- // instance. Single source of truth for v2 application — supervisor and other
111
- // callers route through this rather than re-implementing the conf/reload pair.
112
- // All v2 settings are reload-applicable (no restart required).
113
- export function reconcileConfV2(runtimeDir, pgdataDir) {
114
- const applied = ensureConfV2(pgdataDir)
115
- if (!applied) return { applied: false, reloaded: false }
116
- const reload = spawnSync(pgBin(runtimeDir, 'pg_ctl'), ['reload', '-D', pgdataDir], {
117
- env: libEnv(runtimeDir), stdio: 'pipe', timeout: 5_000, windowsHide: true,
118
- })
119
- const reloaded = reload.status === 0
120
- if (reloaded) {
121
- process.stderr.write('[pg-process] postgresql.conf v2 overrides applied via pg_ctl reload\n')
122
- } else {
123
- process.stderr.write(`[pg-process] pg_ctl reload after v2 append failed (non-fatal): ${reload.stderr?.toString() || ''}\n`)
124
- }
125
- return { applied, reloaded }
126
- }
127
-
128
- // ---------------------------------------------------------------------------
129
- // startPg
130
- // ---------------------------------------------------------------------------
131
-
132
- export async function startPg({ runtimeDir, pgdataDir, port: preferredPort = 55432, logPath }) {
133
- mkdirSync(pgdataDir, { recursive: true })
134
-
135
- if (process.platform === 'darwin') {
136
- try { writeFileSync(join(pgdataDir, '.metadata_never_index'), '') } catch {}
137
- }
138
-
139
- // Idempotent v2 conf reconcile — runs before attach/init. Returns true if
140
- // the block was just appended (so the attach path can trigger pg_ctl reload).
141
- // Fresh-init path falls through to confAppend below which already includes v2.
142
- const v2Applied = ensureConfV2(pgdataDir)
143
-
144
- // Pre-check: if postmaster.pid exists and the instance is reachable, attach
145
- // rather than attempting a second pg_ctl start (which would crash the worker).
146
- const postmasterPidPath = join(pgdataDir, 'postmaster.pid')
147
- if (existsSync(postmasterPidPath)) {
148
- try {
149
- const lines = readFileSync(postmasterPidPath, 'utf8').split('\n')
150
- const existingPid = parseInt(lines[0], 10)
151
- // Line 4 (index 3) in postmaster.pid holds the port number.
152
- const existingPort = parseInt(lines[3], 10)
153
- if (existingPid > 0 && existingPort > 0) {
154
- // Liveness must be confirmed by pg_isready (status 0). A bare open TCP
155
- // port is insufficient: any unrelated listener that happened to grab
156
- // this port would be mistaken for our PG instance, causing a false
157
- // attach. pg_isready performs a real PG protocol handshake, so a
158
- // non-Postgres listener returns non-zero and we correctly fall through
159
- // to normal startup (which reclaims the stale postmaster.pid).
160
- const pgIsReady = pgBin(runtimeDir, 'pg_isready')
161
- const probe = spawnSync(pgIsReady, ['-h', '127.0.0.1', '-p', String(existingPort)], {
162
- env: libEnv(runtimeDir), stdio: 'pipe', timeout: 3_000, windowsHide: true,
163
- })
164
- const alive = probe.status === 0
165
- if (alive) {
166
- process.stderr.write(`[pg-process] attaching to existing PG pid=${existingPid} port=${existingPort}\n`)
167
- // Route through the single reconcile entry point so v1 → v2 conf
168
- // upgrades land on already-running instances without restart.
169
- if (v2Applied) reconcileConfV2(runtimeDir, pgdataDir)
170
- return { pid: existingPid, port: existingPort, attached: true }
171
- }
172
- // Dead instance — fall through to normal startup; pg_ctl will reclaim stale lock.
173
- }
174
- } catch {}
175
- }
176
-
177
- const env = libEnv(runtimeDir)
178
- const initdb = pgBin(runtimeDir, 'initdb')
179
- const pgctl = pgBin(runtimeDir, 'pg_ctl')
180
-
181
- // initdb if pgdata is not yet initialised (no PG_VERSION file).
182
- const pgVersionFile = join(pgdataDir, 'PG_VERSION')
183
- if (!existsSync(pgVersionFile)) {
184
- process.stderr.write(`[pg-process] initdb → ${pgdataDir}\n`)
185
- const r = spawnSync(initdb, [
186
- '-D', pgdataDir,
187
- '--auth-local=trust',
188
- '--no-locale',
189
- '-E', 'UTF8',
190
- '-U', 'postgres',
191
- ], { env, stdio: 'pipe', windowsHide: true })
192
-
193
- if (r.status !== 0) {
194
- const detail = r.error?.message
195
- || r.stderr?.toString()
196
- || r.stdout?.toString()
197
- || `status=${r.status} signal=${r.signal} (no captured output)`
198
- throw new Error(`[pg-process] initdb failed: ${detail}`)
199
- }
200
-
201
- // Append mixdog-specific postgresql.conf overrides.
202
- // default_transaction_isolation: native PG default is read committed.
203
- // Native PG does not default to serializable; set isolation level explicitly
204
- // so behaviour is unambiguous across PG major versions.
205
- const confPath = join(pgdataDir, 'postgresql.conf')
206
- const confAppend = [
207
- '',
208
- '# mixdog overrides — appended by pg-process.mjs',
209
- "default_transaction_isolation = 'read committed'",
210
- "listen_addresses = '127.0.0.1'",
211
- 'log_min_messages = warning',
212
- 'log_line_prefix = \'%t [%p]: \'',
213
- '',
214
- '# Defender/AV latency mitigations',
215
- 'synchronous_commit = off', // defers fsync ack; trade-off: crash → latest async commits since last WAL flush may be lost; acceptable for local memory store
216
- 'checkpoint_timeout = 15min', // halves checkpoint frequency vs 5min default; fewer sync storms
217
- 'max_wal_size = 2GB', // suppresses forced checkpoints driven by WAL volume
218
- 'wal_compression = on', // smaller WAL segments; fewer bytes for Defender to scan per segment
219
- 'wal_init_zero = off', // skips zero-fill on new WAL segment; cuts Defender contact at segment creation
220
- 'wal_recycle = off', // disables WAL rename/recycle loop; eliminates rename-storm EPERM pattern in pgdata
221
- ].join('\n') + '\n' + buildV2Block()
222
-
223
- try {
224
- const existing = readFileSync(confPath, 'utf8')
225
- writeFileSync(confPath, existing + confAppend)
226
- } catch (e) {
227
- process.stderr.write(`[pg-process] postgresql.conf append failed: ${e?.message}\n`)
228
- }
229
-
230
- if (process.platform === 'win32') {
231
- process.stderr.write(
232
- `[pg-process] Windows tip: if startup feels slow, add the data folder to Defender exclusions.\n` +
233
- ` Folder: ${pgdataDir}\n` +
234
- ` PowerShell (run as admin): Add-MpPreference -ExclusionPath '${pgdataDir}'\n`
235
- )
236
- }
237
- }
238
-
239
- // Choose a free port (guards against stale postmaster from prior crash).
240
- const port = await findFreePort(preferredPort)
241
- const logFile = logPath ?? join(pgdataDir, 'pg.log')
242
-
243
- process.stderr.write(`[pg-process] pg_ctl start -D ${pgdataDir} -p ${port}\n`)
244
-
245
- const r = spawnSync(pgctl, [
246
- 'start', '-w',
247
- '-D', pgdataDir,
248
- '-l', logFile,
249
- '-o', `-p ${port} -h 127.0.0.1`,
250
- ], { env, stdio: 'pipe', timeout: 30_000, windowsHide: true })
251
-
252
- if (r.status !== 0) {
253
- const errText = r.stderr?.toString() || r.stdout?.toString() || ''
254
- // "another server might be running" — try status + immediate stop before failing.
255
- if (errText.includes('another server might be running')) {
256
- process.stderr.write(`[pg-process] pg_ctl start: "another server might be running" — probing status\n`)
257
- const statusR = spawnSync(pgctl, ['status', '-D', pgdataDir], { env, stdio: 'pipe', timeout: 3_000, windowsHide: true })
258
- process.stderr.write(`[pg-process] pg_ctl status: ${statusR.stdout?.toString() || statusR.stderr?.toString() || 'no output'}\n`)
259
- const stopR = spawnSync(pgctl, ['stop', '-m', 'immediate', '-D', pgdataDir], { env, stdio: 'pipe', timeout: 3_000, windowsHide: true })
260
- if (stopR.status === 0) {
261
- // Retry start once after clearing the stale instance.
262
- const r2 = spawnSync(pgctl, [
263
- 'start', '-w',
264
- '-D', pgdataDir,
265
- '-l', logPath ?? join(pgdataDir, 'pg.log'),
266
- '-o', `-p ${port} -h 127.0.0.1`,
267
- ], { env, stdio: 'pipe', timeout: 30_000, windowsHide: true })
268
- if (r2.status === 0) {
269
- let pid = null
270
- try {
271
- const pidFile = join(pgdataDir, 'postmaster.pid')
272
- if (existsSync(pidFile)) pid = parseInt(readFileSync(pidFile, 'utf8').split('\n')[0], 10) || null
273
- } catch {}
274
- return { pid, port }
275
- }
276
- process.stderr.write(`[pg-process] retry start after stop also failed: ${r2.stderr?.toString() || ''}\n`)
277
- } else {
278
- process.stderr.write(`[pg-process] immediate stop failed: ${stopR.stderr?.toString() || ''} — treating as degraded\n`)
279
- }
280
- }
281
- throw new Error(`[pg-process] pg_ctl start failed: ${errText}`)
282
- }
283
-
284
- // Read PID from postmaster.pid (first line).
285
- let pid = null
286
- try {
287
- const pidFile = join(pgdataDir, 'postmaster.pid')
288
- if (existsSync(pidFile)) {
289
- pid = parseInt(readFileSync(pidFile, 'utf8').split('\n')[0], 10) || null
290
- }
291
- } catch {}
292
-
293
- return { pid, port }
294
- }
295
-
296
- // ---------------------------------------------------------------------------
297
- // stopPg
298
- // ---------------------------------------------------------------------------
299
-
300
- export async function stopPg({ runtimeDir, pgdataDir }) {
301
- const pgctl = pgBin(runtimeDir, 'pg_ctl')
302
- const env = libEnv(runtimeDir)
303
-
304
- const r = spawnSync(pgctl, ['stop', '-m', 'fast', '-w', '-D', pgdataDir], {
305
- env,
306
- stdio: 'pipe',
307
- timeout: 15_000,
308
- windowsHide: true,
309
- })
310
-
311
- if (r.status !== 0) {
312
- const msg = r.stderr?.toString() || r.stdout?.toString() || ''
313
- // Stale postmaster.pid — PG is already down; clean up and continue.
314
- if (
315
- msg.includes('no server running') ||
316
- msg.includes('PID file') ||
317
- msg.includes('not running')
318
- ) {
319
- process.stderr.write(`[pg-process] stopPg: already stopped (${msg.slice(0, 80)})\n`)
320
- try { rmSync(join(pgdataDir, 'postmaster.pid'), { force: true }) } catch {}
321
- } else {
322
- process.stderr.write(`[pg-process] pg_ctl stop warning: ${msg}\n`)
323
- }
324
- }
325
- }
326
-
327
- // ---------------------------------------------------------------------------
328
- // healthcheckPg
329
- // ---------------------------------------------------------------------------
330
-
331
- export async function healthcheckPg({ port, host = '127.0.0.1' }) {
332
- // Phase 1: TCP listen check (fast, no PG client dependency).
333
- const tcpOk = await new Promise(resolve => {
334
- const sock = createConnection({ host, port })
335
- sock.setTimeout(1000)
336
- sock.once('connect', () => { sock.destroy(); resolve(true) })
337
- sock.once('error', () => { sock.destroy(); resolve(false) })
338
- sock.once('timeout', () => { sock.destroy(); resolve(false) })
339
- })
340
- if (!tcpOk) return false
341
-
342
- // Phase 2: SELECT 1 via a transient pg client.
343
- let client
344
- try {
345
- const { default: pg } = await import('pg')
346
- client = new pg.Client({
347
- host, port, user: 'postgres', database: 'postgres', password: '',
348
- connectionTimeoutMillis: 2000,
349
- })
350
- await client.connect()
351
- await client.query('SELECT 1')
352
- return true
353
- } catch {
354
- return false
355
- } finally {
356
- if (client) {
357
- try { await client.end() } catch {}
358
- }
359
- }
360
- }