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,123 +0,0 @@
1
- /**
2
- * Shared HTTP connection pool for outbound LLM provider API calls.
3
- *
4
- * The provider modules (anthropic-oauth, openai-oauth, grok-oauth, gemini)
5
- * call the global `fetch()` with no dispatcher, so they ride Node's default
6
- * undici agent. That agent keeps connections alive only briefly, so after an
7
- * idle gap the first request to a provider pays a fresh TLS handshake — a
8
- * 100-300ms first-byte penalty observed on cold calls.
9
- *
10
- * This module exports ONE lazily-created singleton undici `Agent` with a long
11
- * keep-alive window and a sane connection cap, passed as the `dispatcher`
12
- * option on those providers' `fetch()` calls so warm sockets survive idle
13
- * gaps. `preconnect(origin)` opens a socket ahead of the first real request
14
- * (best-effort, errors swallowed) and is called once at provider construction.
15
- *
16
- * Scope note: this is deliberately NOT used by src/search/lib/web-tools.mjs,
17
- * whose per-request Agent pins a pre-validated DNS address for SSRF safety and
18
- * must own its own short-lived pool. LLM API origins are fixed, trusted hosts,
19
- * so a shared long-lived pool is appropriate here.
20
- */
21
-
22
- import { Agent, getGlobalDispatcher, request as undiciRequest } from 'undici'
23
-
24
- let _agent = null
25
-
26
- function envInt(name, fallback) {
27
- const raw = process.env[name]
28
- if (!raw) return fallback
29
- const n = Number(raw)
30
- return Number.isFinite(n) && n > 0 ? Math.trunc(n) : fallback
31
- }
32
-
33
- /**
34
- * Detect whether outbound HTTP is meant to flow through a proxy or any custom
35
- * global dispatcher. When so, pinning our own bare keep-alive `Agent` as the
36
- * per-request `dispatcher` would silently bypass `setGlobalDispatcher(...)` and
37
- * env-proxy wiring — so callers must fall back to the global dispatcher.
38
- *
39
- * What is preserved (we step aside): explicit proxy env vars, undici's built-in
40
- * `ProxyAgent`, and ANY non-default global dispatcher — i.e. any installed
41
- * global whose constructor name is not `Agent` (undici's default global is a
42
- * plain `Agent`). Our own singleton is never installed via
43
- * `setGlobalDispatcher`, so this never self-detects.
44
- *
45
- * Accepted gap: a custom dispatcher deliberately constructed AS a plain undici
46
- * `Agent` and set as the global is indistinguishable from the default here, so
47
- * we'd keep using our shared pool. That's tolerable — such a dispatcher is
48
- * itself a direct-connection pool (no proxy hop), so the bypass risk is minimal.
49
- */
50
- function proxyConfigured() {
51
- const env = process.env
52
- if (env.HTTP_PROXY || env.HTTPS_PROXY || env.http_proxy || env.https_proxy) return true
53
- if (env.NODE_USE_ENV_PROXY) return true
54
- try {
55
- const g = getGlobalDispatcher?.()
56
- // Any non-default global dispatcher (constructor name other than the plain
57
- // `Agent` undici installs by default) is treated as custom — ProxyAgent,
58
- // EnvHttpProxyAgent, MockAgent, or a user subclass — and we step aside.
59
- if (g && g.constructor && g.constructor.name !== 'Agent') return true
60
- } catch { /* getGlobalDispatcher unavailable — treat as no proxy */ }
61
- return false
62
- }
63
-
64
- /**
65
- * The shared singleton dispatcher for LLM API requests. Created on first use.
66
- *
67
- * keepAliveTimeout (~60s) keeps a socket warm across the typical idle gap
68
- * between bridge turns; connections caps concurrent sockets per origin so a
69
- * burst of parallel calls can't open an unbounded number of handshakes.
70
- *
71
- * Returns `undefined` when a proxy / any custom (non-default) global dispatcher
72
- * is configured, so `fetch({ dispatcher: undefined })` falls back to that
73
- * global dispatcher instead of bypassing it. `dispatcher: undefined` is a
74
- * harmless fetch option, so call sites need no change.
75
- */
76
- export function getLlmDispatcher() {
77
- if (proxyConfigured()) return undefined
78
- if (_agent) return _agent
79
- _agent = new Agent({
80
- keepAliveTimeout: envInt('MIXDOG_LLM_KEEPALIVE_MS', 60_000),
81
- // Cap the idle keep-alive bump the server may request, so a generous
82
- // upstream Keep-Alive header can't pin sockets open far longer than us.
83
- keepAliveMaxTimeout: envInt('MIXDOG_LLM_KEEPALIVE_MAX_MS', 90_000),
84
- connections: envInt('MIXDOG_LLM_CONNECTIONS', 16),
85
- })
86
- return _agent
87
- }
88
-
89
- // Origins already warmed (or warming) this process, so repeated provider
90
- // construction or multiple providers on the same host don't spam handshakes.
91
- const _preconnected = new Set()
92
-
93
- /**
94
- * Best-effort warm a kept-alive socket to `origin` so the first real request
95
- * skips the TLS handshake. Fire-and-forget: never throws, never returns a
96
- * pending promise the caller must await.
97
- *
98
- * @param {string} origin e.g. 'https://api.anthropic.com'
99
- */
100
- export function preconnect(origin) {
101
- try {
102
- // With a proxy / custom global dispatcher in play we deliberately don't own
103
- // the connection pool, so there's no warm socket to seed — no-op.
104
- if (proxyConfigured()) return
105
- if (!origin || typeof origin !== 'string') return
106
- let url
107
- try { url = new URL(origin) } catch { return }
108
- if (url.protocol !== 'https:' && url.protocol !== 'http:') return
109
- const key = url.origin
110
- if (_preconnected.has(key)) return
111
- _preconnected.add(key)
112
- // A throwaway HEAD lands a pooled socket without fetching a body. Any
113
- // failure (offline, DNS, 4xx/5xx) is irrelevant — the handshake is the
114
- // point, and the real request will surface genuine errors.
115
- undiciRequest(key, {
116
- method: 'HEAD',
117
- dispatcher: getLlmDispatcher(),
118
- signal: AbortSignal.timeout(10_000),
119
- })
120
- .then((res) => res.body?.dump?.())
121
- .catch(() => { /* best-effort warmup; ignore */ })
122
- } catch { /* never let warmup break construction */ }
123
- }
@@ -1,62 +0,0 @@
1
- import { spawn } from 'child_process';
2
- import { isWSL } from './wsl.mjs';
3
-
4
- /**
5
- * Open a URL in the user's default browser. Best-effort and non-blocking —
6
- * the caller always prints the URL too, so a failure here is never fatal.
7
- *
8
- * Platform dispatch (deterministic, not heuristic):
9
- * - Windows: `rundll32 url.dll,FileProtocolHandler <url>` passes the URL as a
10
- * single argv token, so query-string `&` separators are NOT re-parsed by a
11
- * shell. The old `start "<url>"` form is broken on Windows: cmd's `start`
12
- * treats the first quoted string as the WINDOW TITLE, so the URL is dropped
13
- * and nothing opens.
14
- * - macOS: `open <url>`.
15
- * - WSL: xdg-open usually fails (no Linux GUI), so reach the Windows-HOST
16
- * browser — prefer `wslview` (wslu), else `powershell.exe Start-Process`.
17
- * cmd.exe `start` is deliberately NOT used: cmd re-parses URL metacharacters
18
- * so a query-string `&` (e.g. `?a=1&b=2`) is treated as a command separator
19
- * and the URL truncates. PowerShell's Start-Process takes the URL as one
20
- * argument and does not reparse `&`; the URL is passed inside a single-quoted
21
- * PowerShell literal (single quotes doubled) so `&`, spaces and quotes
22
- * survive and no injection is possible. Falls back through the chain when an
23
- * opener is missing.
24
- * - Linux/other: `xdg-open <url>`.
25
- */
26
- export function openInBrowser(url) {
27
- const u = String(url);
28
- // Ordered [cmd, args] candidates. Every platform but WSL has exactly one;
29
- // WSL has a fallback chain since the first opener may be absent.
30
- let candidates;
31
- if (process.platform === 'win32') {
32
- candidates = [['rundll32', ['url.dll,FileProtocolHandler', u]]];
33
- } else if (process.platform === 'darwin') {
34
- candidates = [['open', [u]]];
35
- } else if (isWSL()) {
36
- // Single-quoted PowerShell literal: double any embedded single quote.
37
- // Everything else (incl. `&`) is literal inside a single-quoted string.
38
- const psUrl = `'${u.replace(/'/g, "''")}'`;
39
- candidates = [
40
- ['wslview', [u]],
41
- ['powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', `Start-Process -FilePath ${psUrl}`]],
42
- ];
43
- } else {
44
- candidates = [['xdg-open', [u]]];
45
- }
46
- tryOpenCandidates(candidates, 0);
47
- }
48
-
49
- // Spawn candidates[index]; on spawn error (opener missing) advance to the next.
50
- // Always non-blocking — the caller prints the URL, so exhausting the chain is
51
- // never fatal.
52
- function tryOpenCandidates(candidates, index) {
53
- if (index >= candidates.length) return;
54
- const [cmd, args] = candidates[index];
55
- try {
56
- const child = spawn(cmd, args, { stdio: 'ignore', detached: true, windowsHide: true });
57
- child.on('error', () => { tryOpenCandidates(candidates, index + 1); });
58
- child.unref();
59
- } catch {
60
- tryOpenCandidates(candidates, index + 1);
61
- }
62
- }
@@ -1,58 +0,0 @@
1
- /**
2
- * Canonical resolver for CLAUDE_PLUGIN_DATA (plugin data dir).
3
- *
4
- * Resolution order:
5
- * 1. process.env.CLAUDE_PLUGIN_DATA — set by Claude Code when spawning
6
- * the MCP server or a hook.
7
- * 2. Derive from CLAUDE_PLUGIN_ROOT — supports two real layouts:
8
- * cache: .../cache/{marketplace}/{plugin}/{version}/
9
- * marketplace: .../marketplaces/{marketplace}/ (root *is* the
10
- * marketplace dir; plugin name comes from
11
- * .claude-plugin/plugin.json or DEFAULT_PLUGIN)
12
- *
13
- * Throws if neither env var is present — the plugin always runs under
14
- * Claude Code, which sets one of them. Callers must not silently fall
15
- * back to a hardcoded path.
16
- *
17
- * DEFAULT_PLUGIN / DEFAULT_MARKETPLACE are exported so a handful of
18
- * callers (MCP client spawning sibling plugins, session-manager building
19
- * PLUGIN_ROOT for rule injection) can reference the canonical names
20
- * without re-hardcoding the strings. Update both in lockstep with
21
- * `.claude-plugin/marketplace.json` if the marketplace is ever renamed.
22
- */
23
-
24
- import { homedir } from 'os';
25
- import { join, basename } from 'path';
26
- import { readFileSync } from 'fs';
27
-
28
- export const DEFAULT_PLUGIN = 'mixdog';
29
- export const DEFAULT_MARKETPLACE = 'trib-plugin';
30
-
31
- function readPluginManifestName(root) {
32
- try {
33
- const manifest = JSON.parse(readFileSync(join(root, '.claude-plugin', 'plugin.json'), 'utf8'));
34
- if (manifest && typeof manifest.name === 'string' && manifest.name.trim()) return manifest.name.trim();
35
- } catch { /* fall through to default */ }
36
- return DEFAULT_PLUGIN;
37
- }
38
-
39
- export function resolvePluginData() {
40
- if (process.env.CLAUDE_PLUGIN_DATA) return process.env.CLAUDE_PLUGIN_DATA;
41
- const root = process.env.CLAUDE_PLUGIN_ROOT;
42
- if (root) {
43
- const dirName = basename(root);
44
- // Cache layout: .../cache/{marketplace}/{plugin}/{version}/
45
- if (/^\d+\.\d+\.\d+/.test(dirName)) {
46
- const pluginName = basename(join(root, '..'));
47
- const marketplace = basename(join(root, '..', '..'));
48
- return join(homedir(), '.claude', 'plugins', 'data', `${pluginName}-${marketplace}`);
49
- }
50
- // Marketplace layout: .../marketplaces/{marketplace}/
51
- // The root dir itself is the marketplace. Plugin name lives in the
52
- // manifest; fall back to DEFAULT_PLUGIN when it's unreadable.
53
- const marketplace = dirName;
54
- const pluginName = readPluginManifestName(root);
55
- return join(homedir(), '.claude', 'plugins', 'data', `${pluginName}-${marketplace}`);
56
- }
57
- throw new Error('[plugin-paths] CLAUDE_PLUGIN_DATA and CLAUDE_PLUGIN_ROOT are both unset — cannot resolve plugin data dir outside of Claude Code.');
58
- }
@@ -1,70 +0,0 @@
1
- /**
2
- * Canonical reader for registered schedules.
3
- *
4
- * `${CLAUDE_PLUGIN_DATA}/schedules/<name>/` is the single source of truth.
5
- * Each schedule directory contains `config.json` (metadata) and
6
- * `instructions.md` (prompt body). Both the setup UI (POST /schedules)
7
- * and the `schedule-add` skill write the same two files; every reader —
8
- * setup-server (GET /schedules), channels/lib/config.mjs (loadConfig),
9
- * status/aggregator.mjs — must go through listSchedules() so a single
10
- * entry shape is presented everywhere.
11
- *
12
- * The legacy `mixdog-config.json` `channels.schedules.items` /
13
- * `channels.nonInteractive` / `channels.interactive` arrays are no longer
14
- * consulted. Migration: rename any legacy `prompt.md` to `instructions.md`
15
- * — no in-code fallback.
16
- */
17
-
18
- import { readFileSync, readdirSync } from 'fs';
19
- import { join } from 'path';
20
- import { resolvePluginData } from './plugin-paths.mjs';
21
-
22
- function schedulesDir() {
23
- return join(resolvePluginData(), 'schedules');
24
- }
25
-
26
- function readJsonFile(path) {
27
- try { return JSON.parse(readFileSync(path, 'utf8')); }
28
- catch { return null; }
29
- }
30
-
31
- function readTextFile(path) {
32
- try { return readFileSync(path, 'utf8'); }
33
- catch { return ''; }
34
- }
35
-
36
- /**
37
- * List every registered schedule.
38
- *
39
- * Return shape per entry: `{ name, ...config, prompt }`.
40
- * - `name` is the directory name (slug).
41
- * - Spread of `config.json` keys (time/days/type/channel/model/enabled
42
- * when written by the setup UI; cron/timezone/mode/role when written
43
- * by the schedule-add skill).
44
- * - `prompt` carries `instructions.md` content (empty string when the
45
- * file is missing — caller decides whether that is a hard error).
46
- *
47
- * Returns an empty array when the directory does not exist (fresh
48
- * install with no schedules registered yet).
49
- */
50
- export function listSchedules() {
51
- const dir = schedulesDir();
52
- const out = [];
53
- let entries;
54
- try {
55
- entries = readdirSync(dir, { withFileTypes: true });
56
- } catch {
57
- // ENOENT (fresh install, no schedules/ yet) / EACCES -> empty list.
58
- // Replaces the previous existsSync check, which was racy: the dir
59
- // could disappear between existsSync and readdirSync.
60
- return out;
61
- }
62
- for (const ent of entries) {
63
- if (!ent.isDirectory()) continue;
64
- const name = ent.name;
65
- const cfg = readJsonFile(join(dir, name, 'config.json')) || {};
66
- const prompt = readTextFile(join(dir, name, 'instructions.md'));
67
- out.push({ name, ...cfg, prompt });
68
- }
69
- return out;
70
- }
@@ -1,136 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync } from 'fs';
2
- import { dirname, join } from 'path';
3
- import { fileURLToPath } from 'url';
4
- import { DEFAULT_PRESETS, DEFAULT_MAINTENANCE } from '../agent/orchestrator/config.mjs';
5
- import { writeFileAtomicSync, withFileLockSync } from './atomic-file.mjs';
6
- import { backupUserData, hasUserDataInitMarker, markUserDataInitialized, shouldSeedMissingUserData } from './user-data-guard.mjs';
7
- import { disableClaudeBuiltinsOnFirstInstall } from './disable-claude-builtins.mjs';
8
-
9
- const DEFAULTS_DIR = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'defaults');
10
-
11
- // Idempotent seed of the unified mixdog-config.json so first-time installs
12
- // land with the Config UI already populated with defaults (presets, search
13
- // scaffold, memory config) instead of presenting empty lists.
14
- //
15
- // Only plugin-owned paths under `<plugin-data>/` are seeded. User-owned
16
- // surfaces — global CLAUDE.md files, project repo files, etc. — are not
17
- // touched by seeding. `existsSync()` gates every write so a second boot
18
- // never overwrites user edits.
19
-
20
- //
21
- // Seed bodies are thunks so dynamic content (DEFAULT_PRESETS pulling
22
- // ANTHROPIC_DEFAULT_*_MODEL overrides at load time) resolves at seed time,
23
- // not at module-import time.
24
- const SEEDS = {
25
- // Single unified config file — all sections in one JSON.
26
- // Prompt injection is seeded under `channels`. New installs default to
27
- // CLAUDE.md mode so the managed global rule block is authoritative from
28
- // the next Claude Code session.
29
- // providers/mcpServers intentionally omitted from `agent` so runtime
30
- // auto-detect (buildDefaultConfig) decides based on env keys / OAuth.
31
- 'mixdog-config.json': () => {
32
- // Template carries the static channels/memory/search defaults; agent
33
- // section is composed at seed time so DEFAULT_PRESETS picks up the
34
- // ANTHROPIC_DEFAULT_*_MODEL env overrides resolved at boot. Top-level
35
- // key order is rebuilt explicitly so seed output stays
36
- // channels/memory/agent/search regardless of template author.
37
- const template = JSON.parse(
38
- readFileSync(join(DEFAULTS_DIR, 'mixdog-config.template.json'), 'utf8'),
39
- );
40
- const composed = {
41
- channels: template.channels,
42
- memory: template.memory,
43
- agent: {
44
- presets: DEFAULT_PRESETS.map((p) => ({ ...p })),
45
- maintenance: { ...DEFAULT_MAINTENANCE },
46
- default: 'opus-high',
47
- },
48
- search: template.search,
49
- };
50
- return JSON.stringify(composed, null, 2) + '\n';
51
- },
52
- // Role→preset mapping consumed by Smart Bridge (loadResolvedRoles); without
53
- // it on disk bridge roles fall back to the default preset. Baseline Lead
54
- // workflow description ships alongside. Seeded HERE (not in setup-server)
55
- // so this is the single first-install SSOT and the init marker is set once,
56
- // after the whole default set lands.
57
- 'user-workflow.json': () => readFileSync(join(DEFAULTS_DIR, 'user-workflow.json'), 'utf8'),
58
- 'user-workflow.md': () => readFileSync(join(DEFAULTS_DIR, 'user-workflow.md'), 'utf8'),
59
- };
60
-
61
- export function ensureDataSeeds(dataDir) {
62
- if (!dataDir) return { created: [], skipped: [] };
63
- const created = [];
64
- const skipped = [];
65
- // Capture fresh-install state ONCE, before the loop. The per-file
66
- // markUserDataInitialized() below sets the marker as soon as the first seed
67
- // lands; if we re-consulted the guard per file, every SUBSEQUENT first-time
68
- // seed in this same pass would be refused (treated as a post-init deletion),
69
- // which is exactly how user-workflow.json could end up permanently missing.
70
- // On a fresh dir we seed the whole default set; once initialized, the guard
71
- // governs (never recreate a file the user deleted on purpose).
72
- const freshInstall = !hasUserDataInitMarker(dataDir);
73
- for (const [rel, bodyFn] of Object.entries(SEEDS)) {
74
- const full = join(dataDir, rel);
75
- if (existsSync(full)) {
76
- markUserDataInitialized(dataDir);
77
- skipped.push(rel);
78
- continue;
79
- }
80
- if (!freshInstall && !shouldSeedMissingUserData(dataDir, rel)) {
81
- skipped.push(rel);
82
- continue;
83
- }
84
- // Body composition (template read / config build) errors are fatal —
85
- // a missing defaults/ file means the plugin install itself is
86
- // incomplete, and silently skipping the seed would leave the user
87
- // with an empty Config UI. Filesystem errors during the actual write
88
- // are non-fatal and only logged so a transient mkdir/write failure
89
- // does not block boot.
90
- const body = bodyFn();
91
- try {
92
- mkdirSync(dirname(full), { recursive: true });
93
- // Re-check existence under a file lock to serialize cooperating
94
- // seed writers, then use createOnly:true so the final commit
95
- // step (linkSync with O_EXCL semantics) refuses to overwrite a
96
- // file that a non-locking external writer (user/editor)
97
- // created in between. linkSync→EEXIST is caught inside
98
- // writeFileAtomicSync and reported as `false`; we treat that
99
- // as a clean skip rather than an overwrite, preserving the
100
- // "never overwrites user edits" invariant in the header.
101
- withFileLockSync(`${full}.lock`, () => {
102
- if (existsSync(full)) {
103
- markUserDataInitialized(dataDir);
104
- skipped.push(rel);
105
- return;
106
- }
107
- const wrote = writeFileAtomicSync(full, body, {
108
- fsyncDir: true,
109
- createOnly: true,
110
- });
111
- if (wrote) {
112
- markUserDataInitialized(dataDir);
113
- created.push(rel);
114
- // Fresh creation of mixdog-config.json is the first-install
115
- // signal: disable Claude Code's built-in memory/recap once
116
- // (restore snapshot captured first). Best-effort; never
117
- // breaks seeding.
118
- if (rel === 'mixdog-config.json') {
119
- disableClaudeBuiltinsOnFirstInstall();
120
- }
121
- } else {
122
- skipped.push(rel);
123
- }
124
- });
125
- } catch (e) {
126
- process.stderr.write(`[seed] ${rel} create failed: ${e.message}\n`);
127
- }
128
- }
129
- if (created.length > 0) {
130
- if (process.env.MIXDOG_SETUP_QUIET !== '1') {
131
- process.stderr.write(`[seed] created ${created.length} file(s): ${created.join(', ')}\n`);
132
- }
133
- try { backupUserData(dataDir, 'post-seed'); } catch {}
134
- }
135
- return { created, skipped };
136
- }
@@ -1,225 +0,0 @@
1
- /**
2
- * IMPORTANT — cwd model role:
3
- * pwd() resolves the user's working directory for RELATIVE PATH RESOLUTION only.
4
- * It is NOT a sandbox boundary. Sandbox decisions are governed by Claude Code's
5
- * settings.json permissions govern sandbox decisions.
6
- */
7
-
8
- /**
9
- * user-cwd.mjs — shared helper to resolve the user's working directory
10
- * from the persisted user-cwd.txt sentinel file, with an optional
11
- * session-cwd override (process.env.MIXDOG_SESSION_CWD) that takes
12
- * precedence when set.
13
- *
14
- * Single-source-of-truth model:
15
- * - captureOriginalUserCwd() reads MIXDOG_SESSION_CWD first (if set
16
- * to a valid directory), otherwise user-cwd.txt fresh on every
17
- * call. No in-memory freeze.
18
- * - rawUserCwd() reads ONLY user-cwd.txt (no env consult) — exposed
19
- * for the cwd-tool auto-init path so the env-var fallback cannot
20
- * become self-referential.
21
- * - AsyncLocalStorage override (runWithCwdOverride) isolates concurrent worker cwds.
22
- * - pwd() = override ?? originalCwd. Hot lookups short-circuit on the
23
- * override, so the no-override fallback path is cold and per-call
24
- * disk reads of user-cwd.txt are negligible.
25
- */
26
-
27
- import { AsyncLocalStorage } from 'async_hooks'
28
- import { readFileSync, statSync, writeFileSync } from 'fs'
29
- import { join, resolve } from 'path'
30
- import { homedir } from 'os'
31
-
32
- const _cwdOverride = new AsyncLocalStorage()
33
-
34
- // process.cwd() is the server's LAUNCH directory. In daemon mode that IS
35
- // CLAUDE_PLUGIN_ROOT (the plugin install/cache root), so using it as a
36
- // relative-path base silently resolves into the DEPLOYED plugin copy instead
37
- // of the user's working tree — the exact cause of stale reads in a worker that
38
- // inherited no explicit cwd. Treat that one case as "no usable cwd" and fall
39
- // back to the home dir: a missing session signal then surfaces as ENOENT
40
- // (absolute paths required) rather than a silent stale read. Invariant check
41
- // (exact path equality with the known root), not a path-substring heuristic.
42
- export function _safeProcessCwd() {
43
- const cwd = process.cwd()
44
- const pluginRoot = process.env.CLAUDE_PLUGIN_ROOT
45
- if (pluginRoot) {
46
- try { if (resolve(cwd) === resolve(pluginRoot)) return homedir() } catch { /* fall through to cwd */ }
47
- }
48
- return cwd
49
- }
50
-
51
- // Hook payloads can deliver POSIX paths on Windows (e.g. `/c/Project`); Node's
52
- // path.resolve does not map MSYS-style drive prefixes, so the value must be
53
- // rewritten to the platform-native shape before path resolution.
54
- function _normalizePlatformCwd(p) {
55
- if (!p || typeof p !== 'string') return p
56
- if (process.platform !== 'win32') return resolve(p)
57
- // Map all three POSIX drive-prefix shapes to native Windows paths before
58
- // resolution, aligned with path-utils.mjs posixPathToWindowsPath:
59
- // /cygdrive/c/... (Cygwin), /mnt/c/... (WSL), /c/... (MSYS/Git-Bash) → C:\...
60
- // Cygwin/WSL prefixes must be tested before the bare single-letter form
61
- // because their slice offsets differ.
62
- const cyg = p.match(/^\/cygdrive\/([a-zA-Z])\//)
63
- const wsl = p.match(/^\/mnt\/([a-zA-Z])\//)
64
- let native = p
65
- if (cyg) native = `${cyg[1].toUpperCase()}:\\${p.slice(11).replace(/\//g, '\\')}`
66
- else if (wsl) native = `${wsl[1].toUpperCase()}:\\${p.slice(7).replace(/\//g, '\\')}`
67
- else {
68
- const m = p.match(/^[\/\\]([a-zA-Z])[\/\\](.*)$/)
69
- if (m) native = `${m[1].toUpperCase()}:\\${m[2].replace(/\//g, '\\')}`
70
- }
71
- return resolve(native)
72
- }
73
-
74
- /**
75
- * Resolve the session cwd from EXPLICIT signals only:
76
- * 1. process.env.MIXDOG_SESSION_CWD — session-level override set via
77
- * the `cwd` MCP tool. Honoured only when non-empty AND the resolved
78
- * directory actually exists.
79
- * 2. user-cwd.txt — single source of truth maintained by claude-code
80
- * (rewritten at every session start).
81
- * Returns null when neither is available.
82
- *
83
- * Unlike captureOriginalUserCwd()/pwd(), this NEVER falls back to
84
- * process.cwd(): the server's launch directory is not a session signal,
85
- * and letting it leak into PROJECT CLASSIFICATION (resolveProjectScope)
86
- * would misclassify rows under the service/plugin cwd. Use this for
87
- * project_id resolution; use pwd() for relative-path resolution.
88
- */
89
- export function explicitSessionCwd() {
90
- const sessionRaw = process.env.MIXDOG_SESSION_CWD
91
- if (typeof sessionRaw === 'string' && sessionRaw.length > 0) {
92
- const normalized = _normalizePlatformCwd(sessionRaw)
93
- if (normalized) {
94
- try {
95
- const st = statSync(normalized)
96
- if (st.isDirectory()) return normalized
97
- } catch { /* fall through to user-cwd.txt */ }
98
- }
99
- }
100
- try {
101
- const txt = readFileSync(join(process.env.CLAUDE_PLUGIN_DATA || '', 'user-cwd.txt'), 'utf8').trim()
102
- return (txt && _normalizePlatformCwd(txt)) || null
103
- } catch {
104
- return null
105
- }
106
- }
107
-
108
- /**
109
- * Resolve the Claude Code SESSION ENTRY root from CLAUDE_PROJECT_DIR — the
110
- * directory the user launched Claude Code in, injected by the host on every
111
- * run. This is an explicit host-provided invariant (not a heuristic guess),
112
- * so it is the correct relative-path base when no session cwd has been set
113
- * yet AND user-cwd.txt is unwritten (e.g. a hook fired with an empty
114
- * _event.cwd). Returns null when the var is absent or not a live directory,
115
- * so callers chain it ahead of the process.cwd() last resort.
116
- */
117
- function startRootCwd() {
118
- const dir = process.env.CLAUDE_PROJECT_DIR
119
- if (typeof dir === 'string' && dir.length > 0) {
120
- const normalized = _normalizePlatformCwd(dir)
121
- if (normalized) {
122
- try {
123
- if (statSync(normalized).isDirectory()) return normalized
124
- } catch { /* not a live directory — fall through */ }
125
- }
126
- }
127
- return null
128
- }
129
-
130
- /**
131
- * Resolve the user's current working directory for RELATIVE PATH
132
- * RESOLUTION. Same explicit precedence as explicitSessionCwd(), then the
133
- * session-entry root (CLAUDE_PROJECT_DIR), with process.cwd() as the final
134
- * fallback when no explicit session cwd exists.
135
- *
136
- * Read fresh on every call: hot lookups inside a worker are short-
137
- * circuited by runWithCwdOverride AsyncLocalStorage long before reaching
138
- * this function, so the no-override fallback path is cold and per-call
139
- * disk reads are negligible.
140
- */
141
- export function captureOriginalUserCwd() {
142
- return explicitSessionCwd() ?? startRootCwd() ?? _safeProcessCwd()
143
- }
144
-
145
- /**
146
- * Read the user-cwd.txt sentinel directly, with NO env-var consult.
147
- * Used by the cwd-tool auto-init path to avoid self-reference when
148
- * deciding whether to seed MIXDOG_SESSION_CWD from disk.
149
- */
150
- export function rawUserCwd() {
151
- try {
152
- const txt = readFileSync(join(process.env.CLAUDE_PLUGIN_DATA || '', 'user-cwd.txt'), 'utf8').trim()
153
- return _normalizePlatformCwd(txt) || startRootCwd() || _safeProcessCwd()
154
- } catch {
155
- return startRootCwd() ?? _safeProcessCwd()
156
- }
157
- }
158
-
159
- /**
160
- * Path of the persisted last-session-cwd sentinel, KEYED by the supervisor
161
- * (run-mcp) PID injected as MIXDOG_SUPERVISOR_PID. The supervisor is one
162
- * per terminal/MCP client and is preserved across a dev-sync child restart
163
- * (only the child is killed + respawned), so its PID is a stable, per-
164
- * terminal key that survives the restart. Keying by it makes the restore
165
- * multi-terminal safe: terminal A's `cwd set` writes session-cwd-<pidA>.txt
166
- * and terminal B writes session-cwd-<pidB>.txt, so a restart in one terminal
167
- * can never restore the other terminal's cwd. When no supervisor PID is
168
- * present (direct launch with no respawn lifecycle) a single 'solo' file is
169
- * used — there is no cross-restart key in that mode, matching the absence of
170
- * a respawning supervisor.
171
- */
172
- function _lastSessionCwdFile(keyPid) {
173
- // Explicit keyPid (a connection's leadPid in daemon mode) wins; otherwise
174
- // fall back to this process's MIXDOG_SUPERVISOR_PID. Under the shared daemon
175
- // a single process serves N terminals, so keying writes by the per-connection
176
- // leadPid is what keeps one terminal's `cwd set` out of another's sentinel.
177
- const raw = (keyPid != null && keyPid !== '') ? String(keyPid) : process.env.MIXDOG_SUPERVISOR_PID
178
- const key = (typeof raw === 'string' && /^\d+$/.test(raw)) ? raw : 'solo'
179
- return join(process.env.CLAUDE_PLUGIN_DATA || '', `session-cwd-${key}.txt`)
180
- }
181
-
182
- /**
183
- * Best-effort persist the last session cwd to disk (keyed per supervisor —
184
- * see _lastSessionCwdFile) so the respawned child of the SAME terminal can
185
- * restore it. Errors are swallowed — a convenience signal, not a contract.
186
- */
187
- export function writeLastSessionCwd(cwd, keyPid) {
188
- try {
189
- writeFileSync(_lastSessionCwdFile(keyPid), String(cwd))
190
- } catch { /* best-effort */ }
191
- }
192
-
193
- /**
194
- * Read the persisted last session cwd for THIS terminal (keyed per supervisor
195
- * PID). Returns the normalized path only when the directory still exists;
196
- * otherwise null. Consulted by the boot-time cwd auto-init (server-main.mjs)
197
- * ahead of the user-cwd.txt seed so the last `cwd set` survives a dev-sync
198
- * child restart that dropped MIXDOG_SESSION_CWD.
199
- */
200
- export function readLastSessionCwd(keyPid) {
201
- try {
202
- const content = readFileSync(_lastSessionCwdFile(keyPid), 'utf8')
203
- const normalized = _normalizePlatformCwd(content.trim())
204
- if (normalized && statSync(normalized).isDirectory()) return normalized
205
- return null
206
- } catch {
207
- return null
208
- }
209
- }
210
-
211
- /**
212
- * Run fn inside an async context where pwd() returns cwd.
213
- * All descendant async calls within fn see cwd as their working directory.
214
- */
215
- export function runWithCwdOverride(cwd, fn) {
216
- return _cwdOverride.run(cwd, fn)
217
- }
218
-
219
- /**
220
- * Current effective working directory:
221
- * override set by runWithCwdOverride (innermost wins) ?? original user cwd.
222
- */
223
- export function pwd() {
224
- return _cwdOverride.getStore() ?? captureOriginalUserCwd()
225
- }