mixdog 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (404) hide show
  1. package/.claude-plugin/marketplace.json +31 -0
  2. package/.claude-plugin/plugin.json +20 -0
  3. package/.gitattributes +34 -0
  4. package/.mcp.json +14 -0
  5. package/ARCHITECTURE.md +77 -0
  6. package/CHANGELOG.md +7 -0
  7. package/CONTRIBUTING.md +45 -0
  8. package/DATA-FLOW.md +79 -0
  9. package/LICENSE +21 -0
  10. package/README.md +389 -0
  11. package/SECURITY.md +138 -0
  12. package/UNINSTALL.md +112 -0
  13. package/agents/maintenance.md +5 -0
  14. package/agents/memory-classification.md +30 -0
  15. package/agents/scheduler-task.md +18 -0
  16. package/agents/webhook-handler.md +27 -0
  17. package/agents/worker.md +24 -0
  18. package/bin/bridge +133 -0
  19. package/bin/statusline-launcher.mjs +78 -0
  20. package/bin/statusline-lib.mjs +550 -0
  21. package/bin/statusline.mjs +607 -0
  22. package/bun.lock +802 -0
  23. package/commands/config.md +16 -0
  24. package/commands/doctor.md +13 -0
  25. package/commands/setup.md +17 -0
  26. package/defaults/cycle3-review-prompt.md +90 -0
  27. package/defaults/hidden-roles.json +65 -0
  28. package/defaults/memory-chunk-prompt.md +63 -0
  29. package/defaults/memory-promote-prompt.md +135 -0
  30. package/defaults/mixdog-config.template.json +27 -0
  31. package/defaults/user-workflow.json +8 -0
  32. package/defaults/user-workflow.md +12 -0
  33. package/hooks/hooks.json +73 -0
  34. package/hooks/lib/active-instance.cjs +77 -0
  35. package/hooks/lib/permission-evaluator.cjs +411 -0
  36. package/hooks/lib/permission-route.cjs +63 -0
  37. package/hooks/lib/permission-rules.cjs +170 -0
  38. package/hooks/lib/settings-loader.cjs +116 -0
  39. package/hooks/post-tool-use.cjs +84 -0
  40. package/hooks/pre-mcp-sandbox.cjs +158 -0
  41. package/hooks/pre-tool-subagent.cjs +253 -0
  42. package/hooks/session-start.cjs +1372 -0
  43. package/hooks/turn-timer.cjs +82 -0
  44. package/lib/claude-md-writer.cjs +386 -0
  45. package/lib/config-cjs.cjs +61 -0
  46. package/lib/hook-pipe-path.cjs +10 -0
  47. package/lib/keychain-cjs.cjs +263 -0
  48. package/lib/plugin-paths.cjs +61 -0
  49. package/lib/rules-builder.cjs +241 -0
  50. package/lib/text-utils.cjs +61 -0
  51. package/native/README.md +117 -0
  52. package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
  53. package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
  54. package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
  55. package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
  56. package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
  57. package/package.json +107 -0
  58. package/prompts/code-review.txt +16 -0
  59. package/prompts/security-audit.txt +17 -0
  60. package/rules/bridge/00-common.md +39 -0
  61. package/rules/bridge/20-skip-protocol.md +18 -0
  62. package/rules/bridge/30-explorer.md +33 -0
  63. package/rules/bridge/40-cycle1-agent.md +52 -0
  64. package/rules/bridge/41-cycle2-agent.md +62 -0
  65. package/rules/bridge/42-cycle3-agent.md +44 -0
  66. package/rules/lead/00-tool-lead.md +61 -0
  67. package/rules/lead/01-general.md +23 -0
  68. package/rules/lead/02-channels.md +49 -0
  69. package/rules/lead/03-team.md +27 -0
  70. package/rules/lead/04-workflow.md +20 -0
  71. package/rules/shared/00-language.md +14 -0
  72. package/rules/shared/01-tool.md +138 -0
  73. package/scripts/bootstrap.mjs +184 -0
  74. package/scripts/bridge-unify-smoke.mjs +308 -0
  75. package/scripts/build-runtime-linux.sh +348 -0
  76. package/scripts/build-runtime-macos.sh +217 -0
  77. package/scripts/build-runtime-windows.ps1 +242 -0
  78. package/scripts/builtin-utils-smoke.mjs +392 -0
  79. package/scripts/check-json.mjs +45 -0
  80. package/scripts/check-syntax-changed.mjs +102 -0
  81. package/scripts/check-syntax.mjs +58 -0
  82. package/scripts/code-graph-batch.test.mjs +33 -0
  83. package/scripts/config-preserve-smoke.mjs +180 -0
  84. package/scripts/doctor.mjs +484 -0
  85. package/scripts/edit-normalize-fuzz.mjs +130 -0
  86. package/scripts/edit-normalize-smoke.mjs +401 -0
  87. package/scripts/edit-operation-smoke.mjs +369 -0
  88. package/scripts/edit2-smoke.mjs +63 -0
  89. package/scripts/fuzzy-e2e.mjs +28 -0
  90. package/scripts/fuzzy-smoke.mjs +26 -0
  91. package/scripts/generate-runtime-manifest.mjs +166 -0
  92. package/scripts/guard-smoke.mjs +66 -0
  93. package/scripts/hidden-role-schema-smoke.mjs +162 -0
  94. package/scripts/hook-routing-smoke.mjs +29 -0
  95. package/scripts/inject-input.ps1 +204 -0
  96. package/scripts/io-complex-smoke.mjs +667 -0
  97. package/scripts/io-explore-bench.mjs +424 -0
  98. package/scripts/io-guardrails-smoke.mjs +205 -0
  99. package/scripts/io-mini-bench-baseline.json +11 -0
  100. package/scripts/io-mini-bench.mjs +216 -0
  101. package/scripts/io-route-harness.mjs +933 -0
  102. package/scripts/io-telemetry-report.mjs +691 -0
  103. package/scripts/mutation-bench.mjs +564 -0
  104. package/scripts/mutation-io-smoke.mjs +1081 -0
  105. package/scripts/native-patch-bridge-smoke.mjs +288 -0
  106. package/scripts/native-patch-smoke.mjs +304 -0
  107. package/scripts/patch-interior-context-smoke.mjs +49 -0
  108. package/scripts/patch-newline-utf8-smoke.mjs +157 -0
  109. package/scripts/perf-hook-smoke.mjs +71 -0
  110. package/scripts/permission-eval-smoke.mjs +426 -0
  111. package/scripts/prep-patch.mjs +53 -0
  112. package/scripts/prep-shim.mjs +96 -0
  113. package/scripts/provider-cache-smoke.mjs +687 -0
  114. package/scripts/report-runtime-health.mjs +132 -0
  115. package/scripts/run-mcp.mjs +1547 -0
  116. package/scripts/salvage-v4a-shatter.test.mjs +58 -0
  117. package/scripts/scoped-cache-io-smoke.mjs +103 -0
  118. package/scripts/shell-policy-round3-smoke.mjs +46 -0
  119. package/scripts/smoke-runtime-negative.ps1 +100 -0
  120. package/scripts/smoke-runtime-negative.sh +95 -0
  121. package/scripts/stall-policy-smoke.mjs +50 -0
  122. package/scripts/start-memory-worker.mjs +23 -0
  123. package/scripts/statusline-launcher-smoke.mjs +82 -0
  124. package/scripts/stress-atomic-write.mjs +1028 -0
  125. package/scripts/test-config-rmw-restore.mjs +122 -0
  126. package/scripts/test-fault-inject.mjs +164 -0
  127. package/scripts/test-large-file.mjs +174 -0
  128. package/scripts/tool-edge-smoke.mjs +209 -0
  129. package/scripts/uninstall.mjs +201 -0
  130. package/scripts/webhook-selfheal-smoke.mjs +29 -0
  131. package/scripts/write-overwrite-guard-smoke.mjs +56 -0
  132. package/server-main.mjs +3055 -0
  133. package/server.mjs +468 -0
  134. package/setup/config-merge.mjs +254 -0
  135. package/setup/install.mjs +120 -0
  136. package/setup/launch-core.mjs +507 -0
  137. package/setup/launch.mjs +101 -0
  138. package/setup/setup-server.mjs +3206 -0
  139. package/setup/setup.html +3693 -0
  140. package/skills/retro-skill-proposer/SKILL.md +92 -0
  141. package/skills/schedule-add/SKILL.md +77 -0
  142. package/skills/setup/SKILL.md +346 -0
  143. package/skills/webhook-add/SKILL.md +81 -0
  144. package/src/agent/bridge-stall-watchdog.mjs +337 -0
  145. package/src/agent/index.mjs +2138 -0
  146. package/src/agent/orchestrator/activity-bus.mjs +38 -0
  147. package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +1010 -0
  148. package/src/agent/orchestrator/bridge-retry.mjs +220 -0
  149. package/src/agent/orchestrator/bridge-trace.mjs +583 -0
  150. package/src/agent/orchestrator/cache-mtime.mjs +58 -0
  151. package/src/agent/orchestrator/config.mjs +358 -0
  152. package/src/agent/orchestrator/context/collect.mjs +651 -0
  153. package/src/agent/orchestrator/dispatch-persist.mjs +549 -0
  154. package/src/agent/orchestrator/drain-registry.mjs +50 -0
  155. package/src/agent/orchestrator/explore-validator.mjs +8 -0
  156. package/src/agent/orchestrator/internal-roles.mjs +118 -0
  157. package/src/agent/orchestrator/internal-tools.mjs +88 -0
  158. package/src/agent/orchestrator/jobs.mjs +116 -0
  159. package/src/agent/orchestrator/mcp/client.mjs +364 -0
  160. package/src/agent/orchestrator/providers/anthropic-betas.mjs +21 -0
  161. package/src/agent/orchestrator/providers/anthropic-oauth.mjs +1745 -0
  162. package/src/agent/orchestrator/providers/anthropic.mjs +437 -0
  163. package/src/agent/orchestrator/providers/gemini.mjs +1175 -0
  164. package/src/agent/orchestrator/providers/grok-oauth.mjs +782 -0
  165. package/src/agent/orchestrator/providers/model-catalog.mjs +241 -0
  166. package/src/agent/orchestrator/providers/openai-compat.mjs +1467 -0
  167. package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +1890 -0
  168. package/src/agent/orchestrator/providers/openai-oauth.mjs +1307 -0
  169. package/src/agent/orchestrator/providers/openai-ws.mjs +104 -0
  170. package/src/agent/orchestrator/providers/registry.mjs +192 -0
  171. package/src/agent/orchestrator/providers/retry-classifier.mjs +325 -0
  172. package/src/agent/orchestrator/session/abort-lookup.mjs +13 -0
  173. package/src/agent/orchestrator/session/cache/post-edit-marks.mjs +42 -0
  174. package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
  175. package/src/agent/orchestrator/session/cache/read-cache.mjs +319 -0
  176. package/src/agent/orchestrator/session/cache/scoped-cache-outcome.mjs +11 -0
  177. package/src/agent/orchestrator/session/cache/scoped-cache.mjs +361 -0
  178. package/src/agent/orchestrator/session/cache/util.mjs +49 -0
  179. package/src/agent/orchestrator/session/loop.mjs +1478 -0
  180. package/src/agent/orchestrator/session/manager.mjs +1975 -0
  181. package/src/agent/orchestrator/session/read-dedup.mjs +6 -0
  182. package/src/agent/orchestrator/session/result-classification.mjs +65 -0
  183. package/src/agent/orchestrator/session/save-session-worker.mjs +18 -0
  184. package/src/agent/orchestrator/session/store.mjs +624 -0
  185. package/src/agent/orchestrator/session/stream-watchdog.mjs +130 -0
  186. package/src/agent/orchestrator/session/tool-result-offload.mjs +166 -0
  187. package/src/agent/orchestrator/session/trim.mjs +491 -0
  188. package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +115 -0
  189. package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +327 -0
  190. package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +150 -0
  191. package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +228 -0
  192. package/src/agent/orchestrator/smart-bridge/index.mjs +215 -0
  193. package/src/agent/orchestrator/smart-bridge/profiles.mjs +37 -0
  194. package/src/agent/orchestrator/smart-bridge/registry.mjs +348 -0
  195. package/src/agent/orchestrator/smart-bridge/session-builder.mjs +116 -0
  196. package/src/agent/orchestrator/stall-policy.mjs +195 -0
  197. package/src/agent/orchestrator/tool-loop-guard.mjs +75 -0
  198. package/src/agent/orchestrator/tools/bash-policy-scan.mjs +77 -0
  199. package/src/agent/orchestrator/tools/bash-session.mjs +721 -0
  200. package/src/agent/orchestrator/tools/builtin/advisory-lock.mjs +171 -0
  201. package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +455 -0
  202. package/src/agent/orchestrator/tools/builtin/atomic-write.mjs +236 -0
  203. package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +480 -0
  204. package/src/agent/orchestrator/tools/builtin/binary-file.mjs +76 -0
  205. package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +256 -0
  206. package/src/agent/orchestrator/tools/builtin/cache-layers.mjs +386 -0
  207. package/src/agent/orchestrator/tools/builtin/cwd-utils.mjs +37 -0
  208. package/src/agent/orchestrator/tools/builtin/device-paths.mjs +154 -0
  209. package/src/agent/orchestrator/tools/builtin/diagnostics-tool.mjs +292 -0
  210. package/src/agent/orchestrator/tools/builtin/diff-utils.mjs +109 -0
  211. package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +58 -0
  212. package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +240 -0
  213. package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +113 -0
  214. package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +74 -0
  215. package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +242 -0
  216. package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +211 -0
  217. package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +1364 -0
  218. package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +126 -0
  219. package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +141 -0
  220. package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +194 -0
  221. package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +60 -0
  222. package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +168 -0
  223. package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +173 -0
  224. package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +48 -0
  225. package/src/agent/orchestrator/tools/builtin/fs-reachability.mjs +48 -0
  226. package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +99 -0
  227. package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +170 -0
  228. package/src/agent/orchestrator/tools/builtin/grep-formatting.mjs +113 -0
  229. package/src/agent/orchestrator/tools/builtin/hash-utils.mjs +6 -0
  230. package/src/agent/orchestrator/tools/builtin/list-formatting.mjs +7 -0
  231. package/src/agent/orchestrator/tools/builtin/list-tool.mjs +593 -0
  232. package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +89 -0
  233. package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +300 -0
  234. package/src/agent/orchestrator/tools/builtin/open-config-tool.mjs +26 -0
  235. package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +152 -0
  236. package/src/agent/orchestrator/tools/builtin/path-locks.mjs +35 -0
  237. package/src/agent/orchestrator/tools/builtin/path-utils.mjs +201 -0
  238. package/src/agent/orchestrator/tools/builtin/read-args.mjs +103 -0
  239. package/src/agent/orchestrator/tools/builtin/read-batch.mjs +172 -0
  240. package/src/agent/orchestrator/tools/builtin/read-constants.mjs +40 -0
  241. package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
  242. package/src/agent/orchestrator/tools/builtin/read-image-resize.mjs +189 -0
  243. package/src/agent/orchestrator/tools/builtin/read-image.mjs +88 -0
  244. package/src/agent/orchestrator/tools/builtin/read-lines.mjs +12 -0
  245. package/src/agent/orchestrator/tools/builtin/read-mode-tool.mjs +455 -0
  246. package/src/agent/orchestrator/tools/builtin/read-open.mjs +190 -0
  247. package/src/agent/orchestrator/tools/builtin/read-range-index.mjs +271 -0
  248. package/src/agent/orchestrator/tools/builtin/read-ranges.mjs +26 -0
  249. package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +728 -0
  250. package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +173 -0
  251. package/src/agent/orchestrator/tools/builtin/read-special-files.mjs +268 -0
  252. package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
  253. package/src/agent/orchestrator/tools/builtin/read-tool.mjs +530 -0
  254. package/src/agent/orchestrator/tools/builtin/read-windows.mjs +107 -0
  255. package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +196 -0
  256. package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +422 -0
  257. package/src/agent/orchestrator/tools/builtin/search-builders.mjs +158 -0
  258. package/src/agent/orchestrator/tools/builtin/search-tool.mjs +869 -0
  259. package/src/agent/orchestrator/tools/builtin/shell-analysis.mjs +653 -0
  260. package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +936 -0
  261. package/src/agent/orchestrator/tools/builtin/shell-output.mjs +36 -0
  262. package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +214 -0
  263. package/src/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +143 -0
  264. package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +206 -0
  265. package/src/agent/orchestrator/tools/builtin/snapshot-validation.mjs +98 -0
  266. package/src/agent/orchestrator/tools/builtin/text-stats.mjs +69 -0
  267. package/src/agent/orchestrator/tools/builtin/windows-roots.mjs +23 -0
  268. package/src/agent/orchestrator/tools/builtin/write-tool.mjs +401 -0
  269. package/src/agent/orchestrator/tools/builtin.mjs +500 -0
  270. package/src/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +39 -0
  271. package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
  272. package/src/agent/orchestrator/tools/code-graph.mjs +4095 -0
  273. package/src/agent/orchestrator/tools/cwd-tool.mjs +298 -0
  274. package/src/agent/orchestrator/tools/destructive-warning.mjs +323 -0
  275. package/src/agent/orchestrator/tools/edit-normalize.mjs +603 -0
  276. package/src/agent/orchestrator/tools/env-scrub.mjs +100 -0
  277. package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +144 -0
  278. package/src/agent/orchestrator/tools/graph-manifest.json +26 -0
  279. package/src/agent/orchestrator/tools/host-input.mjs +204 -0
  280. package/src/agent/orchestrator/tools/mutation-content-cache.mjs +67 -0
  281. package/src/agent/orchestrator/tools/mutation-planner.mjs +75 -0
  282. package/src/agent/orchestrator/tools/next-call-utils.mjs +48 -0
  283. package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +133 -0
  284. package/src/agent/orchestrator/tools/patch-manifest.json +26 -0
  285. package/src/agent/orchestrator/tools/patch-tool-defs.mjs +20 -0
  286. package/src/agent/orchestrator/tools/patch.mjs +2754 -0
  287. package/src/agent/orchestrator/tools/progress-message.mjs +118 -0
  288. package/src/agent/orchestrator/tools/result-compression.mjs +279 -0
  289. package/src/agent/orchestrator/tools/shell-command.mjs +865 -0
  290. package/src/agent/orchestrator/tools/shell-exec-policy.mjs +89 -0
  291. package/src/agent/orchestrator/tools/shell-policy-danger-target.mjs +27 -0
  292. package/src/agent/orchestrator/tools/shell-policy-imports.mjs +7 -0
  293. package/src/agent/orchestrator/tools/shell-policy.mjs +345 -0
  294. package/src/agent/orchestrator/tools/shell-snapshot.mjs +313 -0
  295. package/src/agent/orchestrator/workflow-store.mjs +93 -0
  296. package/src/agent/tool-defs.mjs +103 -0
  297. package/src/channels/backends/discord.mjs +784 -0
  298. package/src/channels/data/voice-runtime-manifest.json +138 -0
  299. package/src/channels/index.mjs +3229 -0
  300. package/src/channels/lib/cli-worker-host.mjs +12 -0
  301. package/src/channels/lib/config-lock.mjs +13 -0
  302. package/src/channels/lib/config.mjs +292 -0
  303. package/src/channels/lib/drop-trace.mjs +71 -0
  304. package/src/channels/lib/event-pipeline.mjs +81 -0
  305. package/src/channels/lib/event-queue.mjs +345 -0
  306. package/src/channels/lib/executor.mjs +168 -0
  307. package/src/channels/lib/format.mjs +188 -0
  308. package/src/channels/lib/holidays.mjs +138 -0
  309. package/src/channels/lib/hook-pipe-server.mjs +802 -0
  310. package/src/channels/lib/interaction-workflows.mjs +184 -0
  311. package/src/channels/lib/memory-client.mjs +149 -0
  312. package/src/channels/lib/output-forwarder.mjs +765 -0
  313. package/src/channels/lib/runtime-paths.mjs +479 -0
  314. package/src/channels/lib/scheduler.mjs +723 -0
  315. package/src/channels/lib/session-control.mjs +36 -0
  316. package/src/channels/lib/session-discovery.mjs +103 -0
  317. package/src/channels/lib/settings.mjs +11 -0
  318. package/src/channels/lib/state-file.mjs +68 -0
  319. package/src/channels/lib/status-snapshot.mjs +219 -0
  320. package/src/channels/lib/tool-format.mjs +140 -0
  321. package/src/channels/lib/transcript-discovery.mjs +195 -0
  322. package/src/channels/lib/voice-runtime-fetcher.mjs +734 -0
  323. package/src/channels/lib/webhook.mjs +1179 -0
  324. package/src/channels/lib/whisper-server.mjs +477 -0
  325. package/src/channels/tool-defs.mjs +170 -0
  326. package/src/daemon/host.mjs +118 -0
  327. package/src/daemon/mcp-transport.mjs +47 -0
  328. package/src/daemon/session.mjs +100 -0
  329. package/src/daemon/thin-client.mjs +71 -0
  330. package/src/daemon/transport.mjs +163 -0
  331. package/src/memory/data/runtime-manifest.json +40 -0
  332. package/src/memory/index.mjs +3305 -0
  333. package/src/memory/lib/agent-ipc.mjs +93 -0
  334. package/src/memory/lib/bridge-trace-queries.mjs +120 -0
  335. package/src/memory/lib/core-memory-store.mjs +330 -0
  336. package/src/memory/lib/embedding-provider.mjs +269 -0
  337. package/src/memory/lib/embedding-worker.mjs +323 -0
  338. package/src/memory/lib/llm-worker-host.mjs +17 -0
  339. package/src/memory/lib/memory-cycle.mjs +11 -0
  340. package/src/memory/lib/memory-cycle1.mjs +641 -0
  341. package/src/memory/lib/memory-cycle2.mjs +1284 -0
  342. package/src/memory/lib/memory-cycle3.mjs +540 -0
  343. package/src/memory/lib/memory-embed.mjs +299 -0
  344. package/src/memory/lib/memory-extraction.mjs +5 -0
  345. package/src/memory/lib/memory-maintenance-store.mjs +32 -0
  346. package/src/memory/lib/memory-ops-policy.mjs +190 -0
  347. package/src/memory/lib/memory-recall-id-patch.mjs +15 -0
  348. package/src/memory/lib/memory-recall-read-query.mjs +7 -0
  349. package/src/memory/lib/memory-recall-scope-filter.mjs +63 -0
  350. package/src/memory/lib/memory-recall-store.mjs +621 -0
  351. package/src/memory/lib/memory-retrievers.mjs +112 -0
  352. package/src/memory/lib/memory-score.mjs +71 -0
  353. package/src/memory/lib/memory-text-utils.mjs +58 -0
  354. package/src/memory/lib/memory.mjs +412 -0
  355. package/src/memory/lib/model-profile.mjs +85 -0
  356. package/src/memory/lib/pg/adapter.mjs +308 -0
  357. package/src/memory/lib/pg/process.mjs +360 -0
  358. package/src/memory/lib/pg/supervisor.mjs +396 -0
  359. package/src/memory/lib/project-id-resolver.mjs +86 -0
  360. package/src/memory/lib/runtime-fetcher.mjs +442 -0
  361. package/src/memory/lib/trace-store.mjs +728 -0
  362. package/src/memory/tool-defs.mjs +79 -0
  363. package/src/search/index.mjs +1173 -0
  364. package/src/search/lib/backends/anthropic-oauth.mjs +98 -0
  365. package/src/search/lib/backends/exa.mjs +50 -0
  366. package/src/search/lib/backends/firecrawl.mjs +61 -0
  367. package/src/search/lib/backends/gemini-api.mjs +83 -0
  368. package/src/search/lib/backends/grok-oauth.mjs +86 -0
  369. package/src/search/lib/backends/index.mjs +150 -0
  370. package/src/search/lib/backends/openai-api.mjs +144 -0
  371. package/src/search/lib/backends/openai-oauth.mjs +98 -0
  372. package/src/search/lib/backends/openai-web-search.mjs +76 -0
  373. package/src/search/lib/backends/tavily.mjs +55 -0
  374. package/src/search/lib/backends/xai-api.mjs +113 -0
  375. package/src/search/lib/cache.mjs +131 -0
  376. package/src/search/lib/config.mjs +192 -0
  377. package/src/search/lib/formatter.mjs +115 -0
  378. package/src/search/lib/provider-usage.mjs +67 -0
  379. package/src/search/lib/providers.mjs +47 -0
  380. package/src/search/lib/search-intent.mjs +109 -0
  381. package/src/search/lib/setup-handler.mjs +261 -0
  382. package/src/search/lib/state.mjs +201 -0
  383. package/src/search/lib/web-tools.mjs +1207 -0
  384. package/src/search/tool-defs.mjs +83 -0
  385. package/src/setup/defender-exclusion.mjs +183 -0
  386. package/src/shared/abort-controller.mjs +15 -0
  387. package/src/shared/atomic-file.mjs +420 -0
  388. package/src/shared/config.mjs +350 -0
  389. package/src/shared/daemon-recycle.mjs +108 -0
  390. package/src/shared/disable-claude-builtins.mjs +88 -0
  391. package/src/shared/err-text.mjs +12 -0
  392. package/src/shared/llm/cost.mjs +66 -0
  393. package/src/shared/llm/http-agent.mjs +123 -0
  394. package/src/shared/llm/index.mjs +41 -0
  395. package/src/shared/llm/pid-cleanup.mjs +27 -0
  396. package/src/shared/llm/usage-log.mjs +47 -0
  397. package/src/shared/plugin-paths.mjs +58 -0
  398. package/src/shared/schedules-store.mjs +70 -0
  399. package/src/shared/seed.mjs +119 -0
  400. package/src/shared/user-cwd.mjs +213 -0
  401. package/src/shared/user-data-guard.mjs +238 -0
  402. package/src/status/aggregator.mjs +584 -0
  403. package/src/status/server.mjs +413 -0
  404. package/tools.json +1653 -0
@@ -0,0 +1,83 @@
1
+ import { z } from 'zod'
2
+ import { zodToJsonSchema } from 'zod-to-json-schema'
3
+
4
+ const crawlArgsSchema = z.object({
5
+ url: z.string().url().describe('Starting URL to begin crawling from.'),
6
+ maxPages: z.number().int().min(1).max(200).optional().describe('Maximum number of pages to visit (1-200).'),
7
+ maxDepth: z.number().int().min(0).max(5).optional().describe('Maximum link depth to follow (0-5).'),
8
+ sameDomainOnly: z.boolean().optional().describe('If true, only follow links on the same domain.'),
9
+ })
10
+
11
+ function buildInputSchema(zodSchema) {
12
+ const jsonSchema = zodToJsonSchema(zodSchema, { target: 'openApi3' })
13
+ delete jsonSchema.$schema
14
+ return jsonSchema
15
+ }
16
+
17
+ export const TOOL_DEFS = [
18
+ {
19
+ name: 'search',
20
+ title: 'Mixdog Web Search',
21
+ description: 'Web search (SERP) for external/current info. Requires query (string|array). Snippets+URLs; web_fetch for bodies.',
22
+ inputSchema: {
23
+ type: 'object',
24
+ properties: {
25
+ query: { anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' }, minItems: 1 }] },
26
+ site: { type: 'string' },
27
+ type: { type: 'string', enum: ['web', 'news', 'images'] },
28
+ maxResults: { type: 'number', minimum: 1, maximum: 20 },
29
+ locale: {
30
+ anyOf: [
31
+ { type: 'string' },
32
+ {
33
+ type: 'object',
34
+ properties: {
35
+ country: { type: 'string' },
36
+ language: { type: 'string' },
37
+ region: { type: 'string' },
38
+ city: { type: 'string' },
39
+ timezone: { type: 'string' },
40
+ },
41
+ additionalProperties: false,
42
+ },
43
+ ],
44
+ },
45
+ contextSize: { type: 'string', enum: ['low', 'medium', 'high'] },
46
+ },
47
+ required: ['query'],
48
+ additionalProperties: false,
49
+ },
50
+ annotations: { title: 'Mixdog Web Search', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
51
+ },
52
+ {
53
+ name: 'web_fetch',
54
+ title: 'Mixdog Web Fetch',
55
+ description: 'Fetch full page body from a URL (web page, article, docs). Requires url. Use after search to read a result.',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ url: { anyOf: [{ type: 'string' }, { type: 'array', items: { type: 'string' }, minItems: 1 }] },
60
+ startIndex: { type: 'number', minimum: 0 },
61
+ maxLength: { type: 'number', minimum: 0 },
62
+ },
63
+ required: ['url'],
64
+ additionalProperties: false,
65
+ },
66
+ annotations: { title: 'Mixdog Web Fetch', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
67
+ },
68
+ {
69
+ name: 'crawl',
70
+ title: 'Crawl',
71
+ public: false,
72
+ description: 'Crawl a website starting from a URL, following links up to a configured depth. Collects page summaries from each visited page.',
73
+ inputSchema: buildInputSchema(crawlArgsSchema),
74
+ annotations: { title: 'Crawl', readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: true },
75
+ },
76
+ {
77
+ name: 'setup',
78
+ public: false,
79
+ description: 'Open interactive setup form to configure search providers, API keys, and options.',
80
+ inputSchema: { type: 'object', properties: {} },
81
+ annotations: { title: 'Setup' },
82
+ },
83
+ ]
@@ -0,0 +1,183 @@
1
+ // Windows Defender exclusion auto-registration.
2
+ //
3
+ // On Windows, NTFS file read latency on ~/.claude/plugins (cache + node_modules
4
+ // + 1.5GB ONNX model) and ~/.claude/projects (CC transcript jsonl) is heavily
5
+ // affected by Defender real-time scanning. AV stalls have been observed to
6
+ // produce multi-minute readFileSync hangs in the read tool, blocking mcp
7
+ // dispatch. Adding both directories to the Defender exclusion list removes
8
+ // the scan-on-access cost.
9
+ //
10
+ // Invariant: paths required for hot mcp / memory / transcript IO must be
11
+ // excluded from real-time AV scanning. When not excluded, trigger an
12
+ // elevated PowerShell once per 24h to request the user's UAC approval.
13
+ // The 24h cooldown prevents UAC spam if the user declines.
14
+ //
15
+ // Non-Windows platforms: no-op (other AV solutions handled elsewhere).
16
+
17
+ import os from 'os'
18
+ import fs from 'fs'
19
+ import path from 'path'
20
+ import { spawn, spawnSync } from 'child_process'
21
+ import { randomBytes } from 'crypto'
22
+
23
+ const COOLDOWN_MS = 24 * 60 * 60 * 1000
24
+ const TRIGGER_DELAY_MS = 5000 // let boot logs settle before UAC popup
25
+
26
+ function _wantedPaths() {
27
+ const home = os.homedir()
28
+ return [
29
+ path.join(home, '.claude', 'plugins'),
30
+ path.join(home, '.claude', 'projects'),
31
+ ]
32
+ }
33
+
34
+ function _readFlag(flagPath) {
35
+ try { return JSON.parse(fs.readFileSync(flagPath, 'utf-8')) }
36
+ catch { return null }
37
+ }
38
+
39
+ function _writeFlag(flagPath, payload) {
40
+ try { fs.writeFileSync(flagPath, JSON.stringify({ ...payload, checkedAt: Date.now() })) }
41
+ catch { /* best-effort */ }
42
+ }
43
+
44
+ function _currentExclusions() {
45
+ // Get-MpPreference reads exclusions without elevation.
46
+ const r = spawnSync('powershell', [
47
+ '-NoProfile', '-NonInteractive', '-Command',
48
+ 'Get-MpPreference | Select-Object -ExpandProperty ExclusionPath',
49
+ ], { encoding: 'utf8', timeout: 5000, windowsHide: true })
50
+ if (r.status !== 0) return null
51
+ return (r.stdout || '').split(/\r?\n/).map(s => s.trim()).filter(Boolean)
52
+ }
53
+
54
+ function _allCovered(existing, want) {
55
+ const lower = existing.map(s => s.toLowerCase())
56
+ return want.every(p => {
57
+ const pl = p.toLowerCase()
58
+ return lower.some(e => pl === e || pl.startsWith(e + path.sep.toLowerCase()))
59
+ })
60
+ }
61
+
62
+ function _triggerElevatedAdd(want) {
63
+ // Write a temp .ps1 file with the Add-MpPreference commands, then launch it
64
+ // elevated via Start-Process -Verb RunAs. Using a file avoids the nested
65
+ // quote-escaping mess of inlining everything on the command line.
66
+ //
67
+ // Security:
68
+ // - The .ps1 is the body that will run *elevated*, so it's a juicy
69
+ // TOCTOU target: a predictable per-pid filename in os.tmpdir() is
70
+ // user-writable from any other process running as the same user
71
+ // (or under a writable %TEMP% on shared hosts), and the original
72
+ // code never deleted it — leaving a tamper window between write
73
+ // and UAC-prompted execution.
74
+ // - Mitigation: create a fresh randomized subdirectory under tmpdir
75
+ // (mkdtempSync gives us an exclusive directory; on POSIX it's
76
+ // 0o700, on Windows the per-user temp ACL governs), write the
77
+ // .ps1 there with 0o600, chain a deletion command into the
78
+ // elevated script so the privileged side removes it after use,
79
+ // and best-effort rmdir the wrapper dir after the spawn returns.
80
+ // - Residual risk (intentionally unmitigated — fundamental OS
81
+ // limit, not a defect): a hostile process running as THE SAME
82
+ // USER can still race the file between fs.writeFileSync and
83
+ // Start-Process consuming it (or replace the dir+file after we
84
+ // spawn powershell.exe but before UAC consents). The 0o600 / per-
85
+ // user-temp-ACL boundary only protects against OTHER users; the
86
+ // same-user attacker already has our token, can read this very
87
+ // .mjs, and can directly call Add-MpPreference via their own
88
+ // Start-Process -Verb RunAs — exploiting *us* offers no privilege
89
+ // they did not already have. No same-user mitigation (chmod
90
+ // games, signing the .ps1, hashing-then-verifying in the elevated
91
+ // wrapper) actually closes this — the verifier itself runs from
92
+ // the same user-writable tree. Adding such a check would be
93
+ // security theatre; intentionally not implemented. The TOCTOU
94
+ // fixes above target the cross-user / world-writable-tmp class,
95
+ // which IS a real and closable gap.
96
+ const escapePath = p => p.replace(/'/g, "''")
97
+ let tmpDir
98
+ try {
99
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'mixdog-defender-'))
100
+ } catch { return false }
101
+ const tmpPs1 = path.join(tmpDir, `run-${randomBytes(8).toString('hex')}.ps1`)
102
+ const addLines = want.map(p => `Add-MpPreference -ExclusionPath '${escapePath(p)}'`).join('\n')
103
+ // Self-delete at the tail of the elevated script so the .ps1 doesn't
104
+ // outlive its single intended execution. `Remove-Item -Force` runs
105
+ // inside the same elevated PowerShell that read the file, so even if
106
+ // the wrapper dir was somehow locked we still get the file cleaned.
107
+ const script =
108
+ addLines + '\n' +
109
+ `try { Remove-Item -LiteralPath '${escapePath(tmpPs1)}' -Force -ErrorAction SilentlyContinue } catch {}\n`
110
+ try {
111
+ fs.writeFileSync(tmpPs1, script, { encoding: 'utf-8', mode: 0o600 })
112
+ } catch {
113
+ try { fs.rmSync(tmpDir, { recursive: true, force: true }) } catch {}
114
+ return false
115
+ }
116
+ // Spawn detached so the parent process exits cleanly even if the user takes
117
+ // a while to click through the UAC prompt.
118
+ const child = spawn('powershell', [
119
+ '-NoProfile', '-NonInteractive', '-WindowStyle', 'Hidden', '-Command',
120
+ `Start-Process powershell -Verb RunAs -WindowStyle Hidden -ArgumentList '-NoProfile','-WindowStyle','Hidden','-File','${tmpPs1.replace(/'/g, "''")}'`,
121
+ ], { detached: true, stdio: 'ignore', windowsHide: true })
122
+ // Detached + stdio:'ignore' means an ENOENT (powershell missing) or
123
+ // EPERM would normally surface as an unhandled 'error' event and
124
+ // crash the process. Swallow it; the manualCmd log line is the
125
+ // fallback path the user already sees.
126
+ child.on('error', () => {})
127
+ child.unref()
128
+ // Best-effort: schedule a wrapper-dir cleanup after the elevated
129
+ // script has had a chance to run. We can't synchronously wait for
130
+ // UAC (could be minutes if the user is AFK), so leave a long delay
131
+ // and a recursive rmSync; the elevated script already removed the
132
+ // .ps1 itself by then.
133
+ setTimeout(() => {
134
+ try { fs.rmSync(tmpDir, { recursive: true, force: true }) } catch {}
135
+ }, 10 * 60 * 1000).unref?.()
136
+ return true
137
+ }
138
+
139
+ export function maybeRequestDefenderExclusion(pluginDataDir, log = () => {}) {
140
+ if (process.platform !== 'win32') return
141
+ if (!pluginDataDir) return
142
+ const flagPath = path.join(pluginDataDir, 'defender-exclusion-checked.json')
143
+ const prev = _readFlag(flagPath)
144
+ if (prev && typeof prev.checkedAt === 'number' && Date.now() - prev.checkedAt < COOLDOWN_MS) {
145
+ return // recent attempt; respect cooldown
146
+ }
147
+
148
+ const want = _wantedPaths()
149
+ const existing = _currentExclusions()
150
+ // Distinguish "known-missing" from "unknown" (Get-MpPreference timed out,
151
+ // returned non-zero, or PowerShell was unavailable). An unknown read
152
+ // result must NOT trigger a UAC elevation — the exclusions might already
153
+ // be in place, and prompting on every transient read failure is the
154
+ // exact UAC spam the cooldown was added to avoid. On unknown, skip this
155
+ // attempt without writing the cooldown flag so the next boot retries.
156
+ if (existing === null) {
157
+ log('[defender] could not read current exclusions (Get-MpPreference unavailable/timed out) — skipping UAC prompt; will retry on next boot')
158
+ return
159
+ }
160
+ if (_allCovered(existing, want)) {
161
+ _writeFlag(flagPath, { status: 'already-excluded', want })
162
+ log('[defender] paths already excluded from real-time AV scan')
163
+ return
164
+ }
165
+
166
+ // Surface the missing exclusion BEFORE attempting the UAC prompt so the
167
+ // user sees both the auto-trigger and a manual fallback even if they
168
+ // decline UAC or run on a locked-down host. This is the highest-leverage
169
+ // I/O fix on Windows (multi-minute readFileSync stalls when scanning hot
170
+ // paths), so make it impossible to miss in supervisor.log.
171
+ const manualCmd = want.map(p => `Add-MpPreference -ExclusionPath '${p.replace(/'/g, "''")}'`).join('; ')
172
+ log('[defender] MISSING exclusions for hot IO paths: ' + want.join(', '))
173
+ log('[defender] manual fallback (elevated PowerShell, copy/paste):')
174
+ log('[defender] ' + manualCmd)
175
+
176
+ // Delay so boot logs flush before the UAC prompt steals focus.
177
+ setTimeout(() => {
178
+ const ok = _triggerElevatedAdd(want)
179
+ if (ok) log('[defender] UAC requested — if you decline, run the manual command above')
180
+ else log('[defender] failed to write trigger script — use the manual command above')
181
+ }, TRIGGER_DELAY_MS)
182
+ _writeFlag(flagPath, { status: 'triggered', want })
183
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * AbortController helpers — ported from the Claude Code CLI pattern.
3
+ *
4
+ * `createAbortController()` raises the signal's max listener cap so long-running
5
+ * sessions with many per-iteration handlers don't trip Node's default warning.
6
+ */
7
+ import { setMaxListeners } from 'events';
8
+
9
+ const DEFAULT_MAX_LISTENERS = 50;
10
+
11
+ export function createAbortController(maxListeners = DEFAULT_MAX_LISTENERS) {
12
+ const controller = new AbortController();
13
+ try { setMaxListeners(maxListeners, controller.signal); } catch { /* node < 19 fallback */ }
14
+ return controller;
15
+ }