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,170 @@
1
+ import { readdirSync } from 'fs';
2
+ import { join } from 'path';
3
+
4
+ // Glob-to-RegExp compiler for name filters used by find_files and the
5
+ // list-tool family. Supported syntax:
6
+ // * — matches any run of non-separator chars within one segment
7
+ // ** — matches across `/` boundaries (any depth)
8
+ // ? — matches one non-separator char
9
+ // {a,b,c} — brace alternation (no nesting)
10
+ // Regex metacharacters in literal positions are escaped per-char. The
11
+ // per-character loop replaces an older .replace-based pipeline whose
12
+ // substitution-string form silently corrupted patterns containing `$`
13
+ // sequences (see B35, v0.6.216); the loop avoids substitution entirely.
14
+ // DoS caps for brace expansion + compiled regex. A crafted pattern
15
+ // such as `{a,b}` repeated 25 times would Cartesian-multiply to ~33M
16
+ // variants and produce a multi-megabyte regex; both the recursive
17
+ // expansion and the `new RegExp` call would burn CPU/memory before
18
+ // any caller-side check. These ceilings are well above realistic user
19
+ // globs. Limits are surfaced as Error strings so the tool layer can
20
+ // convert them to a tool error instead of crashing the worker.
21
+ const MAX_BRACE_VARIANTS = 256;
22
+ const MAX_PATTERN_LENGTH = 1024;
23
+ const MAX_REGEX_BODY_LENGTH = 16384;
24
+ function expandBraces(pattern) {
25
+ const m = pattern.match(/\{([^{}]*)\}/);
26
+ if (!m) return [pattern];
27
+ const before = pattern.slice(0, m.index);
28
+ const after = pattern.slice(m.index + m[0].length);
29
+ const parts = m[1].split(',');
30
+ const out = [];
31
+ for (const p of parts) {
32
+ for (const rest of expandBraces(after)) {
33
+ if (out.length >= MAX_BRACE_VARIANTS) {
34
+ throw new Error(`glob brace expansion exceeds ${MAX_BRACE_VARIANTS} variants`);
35
+ }
36
+ out.push(before + p + rest);
37
+ }
38
+ }
39
+ return out;
40
+ }
41
+ const REGEX_META = /[.+^${}()|[\]\\]/;
42
+ function compileVariant(variant) {
43
+ let body = '';
44
+ for (let i = 0; i < variant.length; i++) {
45
+ const ch = variant[i];
46
+ if (ch === '*') {
47
+ // `**/` (at any position, including leading) means "zero-or-more
48
+ // directory segments" so `src/**/foo` matches both `src/foo` and
49
+ // `src/a/b/foo`. The older compile emitted `.*/` which forced at
50
+ // least one path char between, breaking the zero-dir case.
51
+ if (variant[i + 1] === '*' && variant[i + 2] === '/') {
52
+ body += '(?:.*/)?';
53
+ i += 2;
54
+ } else if (variant[i + 1] === '*') {
55
+ body += '.*';
56
+ i++;
57
+ } else {
58
+ body += '[^/]*';
59
+ }
60
+ } else if (ch === '?') {
61
+ body += '[^/]';
62
+ } else if (ch === '[') {
63
+ // Glob bracket class: [abc], [!abc], [a-z]. Parse forward to the
64
+ // closing `]`; only when a well-formed class is found do we emit
65
+ // a regex character class. Malformed/unclosed `[` falls back to
66
+ // a literal escape so REGEX_META semantics still hold.
67
+ let j = i + 1;
68
+ let negate = false;
69
+ if (variant[j] === '!' || variant[j] === '^') { negate = true; j++; }
70
+ // POSIX-style: a `]` as the first class char is a literal.
71
+ const innerStart = j;
72
+ if (variant[j] === ']') j++;
73
+ while (j < variant.length && variant[j] !== ']') j++;
74
+ if (j < variant.length && j > innerStart) {
75
+ // Escape backslashes inside the class; hyphens and other
76
+ // chars are passed through so `[a-z]` ranges still work.
77
+ const inner = variant.slice(innerStart, j).replace(/\\/g, '\\\\');
78
+ body += '[' + (negate ? '^' : '') + inner + ']';
79
+ i = j;
80
+ } else {
81
+ body += '\\[';
82
+ }
83
+ } else if (REGEX_META.test(ch)) {
84
+ body += '\\' + ch;
85
+ } else {
86
+ body += ch;
87
+ }
88
+ }
89
+ return body;
90
+ }
91
+ export function compileSimpleGlob(pattern) {
92
+ if (!pattern) return null;
93
+ // On Windows, treat backslashes as path separators — candidate paths are
94
+ // forward-slash normalized, so a literal-escaped `\` (REGEX_META) in e.g.
95
+ // `**\*.mjs` would never match a `/`-joined path. Mirrors the win32 `\`->`/`
96
+ // canonicalization the grep tool already applies.
97
+ if (process.platform === 'win32') pattern = pattern.replace(/\\/g, '/');
98
+ if (pattern.length > MAX_PATTERN_LENGTH) {
99
+ throw new Error(`glob pattern length ${pattern.length} exceeds limit ${MAX_PATTERN_LENGTH}`);
100
+ }
101
+ const variants = expandBraces(pattern).map(compileVariant);
102
+ const DOLLAR = '\x24';
103
+ const body = variants.length === 1 ? variants[0] : `(?:${variants.join('|')})`;
104
+ if (body.length > MAX_REGEX_BODY_LENGTH) {
105
+ throw new Error(`glob regex body length ${body.length} exceeds limit ${MAX_REGEX_BODY_LENGTH}`);
106
+ }
107
+ return new RegExp('^' + body + DOLLAR, 'i');
108
+ }
109
+
110
+ // Directory names that are dependency / build / cache artifacts. Skipped
111
+ // by default in list / tree / find_files traversal so the response shape
112
+ // reflects user code, not transitive tooling output. Pass
113
+ // `include_noise:true` on the tool call to traverse them.
114
+ // Policy note: exclusion is basename-only at every depth — a directory
115
+ // literally named e.g. `dist` is skipped regardless of where in the tree
116
+ // it appears. Context-aware exclusion (e.g. only skip `dist` adjacent to
117
+ // a package.json) is intentionally not implemented; the basename rule is
118
+ // simpler and matches the noise patterns developers actually create.
119
+ export const NOISE_DIR_NAMES = new Set([
120
+ 'node_modules', '.git',
121
+ 'dist', 'build', 'out', 'target',
122
+ '.next', '.nuxt', '.svelte-kit',
123
+ '.cache', '.parcel-cache', '.turbo',
124
+ 'venv', '.venv', '__pycache__', '.pytest_cache',
125
+ '.gradle', 'coverage',
126
+ ]);
127
+
128
+ // Unified directory walk used by list / tree / find_files. The visitor
129
+ // callback owns the "should I record this entry?" decision; returning
130
+ // literal false aborts the whole walk.
131
+ // `onWarn(dir, err)` (optional) is invoked for any readdir failure so
132
+ // callers can surface skipped paths instead of silently dropping them.
133
+ export function walkDir(root, { hidden = false, maxDepth = Infinity, visit, sort, excludeDirNames, onWarn } = {}) {
134
+ // Windows filesystems are case-insensitive — match exclusion names the
135
+ // same way so e.g. Node_Modules is pruned like node_modules.
136
+ const _exclCI = process.platform === 'win32' && excludeDirNames && excludeDirNames.size > 0
137
+ ? new Set([...excludeDirNames].map((n) => n.toLowerCase()))
138
+ : null;
139
+ const _walk = (dir, depth) => {
140
+ if (depth > maxDepth) return true;
141
+ let entries;
142
+ try { entries = readdirSync(dir, { withFileTypes: true }); }
143
+ catch (err) {
144
+ if (typeof onWarn === 'function') {
145
+ try { onWarn(dir, err); } catch { /* warning sink must not abort */ }
146
+ }
147
+ return true;
148
+ }
149
+ if (!hidden) entries = entries.filter(e => !e.name.startsWith('.'));
150
+ if (excludeDirNames && excludeDirNames.size > 0) {
151
+ entries = entries.filter(e => !(e.isDirectory() && (_exclCI
152
+ ? _exclCI.has(e.name.toLowerCase())
153
+ : excludeDirNames.has(e.name))));
154
+ }
155
+ if (sort) entries.sort(sort);
156
+ const total = entries.length;
157
+ for (let i = 0; i < total; i++) {
158
+ const ent = entries[i];
159
+ const entPath = join(dir, ent.name);
160
+ const ctx = { depth, index: i, total, isLast: i === total - 1 };
161
+ const cont = visit(ent, entPath, ctx);
162
+ if (cont === false) return false;
163
+ if (ent.isDirectory()) {
164
+ if (_walk(entPath, depth + 1) === false) return false;
165
+ }
166
+ }
167
+ return true;
168
+ };
169
+ _walk(root, 1);
170
+ }
@@ -0,0 +1,113 @@
1
+ export function splitGrepLineNumberOnlyPrefix(line) {
2
+ const text = String(line || '');
3
+ const m = /^(\d+)([:\-])/.exec(text);
4
+ if (!m) return null;
5
+ return {
6
+ markerEnd: m[0].length,
7
+ delimiter: m[2],
8
+ lineNo: Number(m[1]),
9
+ };
10
+ }
11
+
12
+ export function splitGrepLinePrefix(line) {
13
+ const text = String(line || '');
14
+ if (!text) return null;
15
+ const searchFrom = /^[A-Za-z]:/.test(text) ? 2 : 0;
16
+ // content/count modes — rg emits, after any optional drive-letter prefix:
17
+ // match: path:lineNo:content (output_mode content default)
18
+ // context: path-lineNo-content (-A / -B / -C context lines)
19
+ // Caller context decides whether line-number-only output is possible. A
20
+ // relative path may itself start with digits + '-' (e.g. `12-x\path.txt`),
21
+ // so this parser must not reject `^\d+[:\-]` by shape alone.
22
+ const delim = text.slice(searchFrom).match(/([:\-])(\d+)\1/);
23
+ if (!delim) return null;
24
+ const pathEnd = searchFrom + delim.index;
25
+ if (pathEnd <= 0) return null;
26
+ return {
27
+ path: text.slice(0, pathEnd),
28
+ pathEnd,
29
+ markerEnd: pathEnd + delim[0].length,
30
+ delimiter: delim[1],
31
+ lineNo: Number(delim[2]),
32
+ };
33
+ }
34
+
35
+ export function splitGrepCountPrefix(line) {
36
+ const text = String(line || '');
37
+ if (!text || /^\d+$/.test(text)) return null;
38
+ const searchFrom = /^[A-Za-z]:/.test(text) ? 2 : 0;
39
+ const idx = text.lastIndexOf(':');
40
+ if (idx <= searchFrom) return null;
41
+ const count = text.slice(idx + 1);
42
+ if (!/^\d+$/.test(count)) return null;
43
+ return { path: text.slice(0, idx), pathEnd: idx, count: Number(count) };
44
+ }
45
+
46
+ export function normalizeGrepLine(line, pathOnly = false, outputMode = 'content', filenameOmitted = false) {
47
+ if (process.platform !== 'win32') return line;
48
+ // files_with_matches mode: the WHOLE line is a path, so every separator is
49
+ // a path separator and a full `\`->`/` normalisation is correct.
50
+ if (pathOnly) return line.replace(/\\/g, '/');
51
+ // Single-file rg omits the filename entirely:
52
+ // match: N:content
53
+ // context: N-content
54
+ // There is no path prefix to normalise; everything after ^\d+[:\-] is
55
+ // source content and must remain byte-exact.
56
+ if (filenameOmitted && splitGrepLineNumberOnlyPrefix(line)) return line;
57
+ const split = splitGrepLinePrefix(line);
58
+ if (split) {
59
+ return line.slice(0, split.pathEnd).replace(/\\/g, '/') + line.slice(split.pathEnd);
60
+ }
61
+ if (outputMode === 'count') {
62
+ const countSplit = splitGrepCountPrefix(line);
63
+ if (countSplit) {
64
+ return line.slice(0, countSplit.pathEnd).replace(/\\/g, '/') + line.slice(countSplit.pathEnd);
65
+ }
66
+ }
67
+ // No confirmed path prefix. Do not fall back to "first colon" slicing:
68
+ // single-file context lines are `N-content`, so their first colon may be a
69
+ // ternary/object literal inside CONTENT. Replacing `\` before that colon
70
+ // corrupts source anchors (`\n` -> `/n`).
71
+ return line;
72
+ }
73
+
74
+ function parseGrepContentLine(line) {
75
+ const text = String(line || '');
76
+ if (!text || text === '--' || text.startsWith('... [')) return null;
77
+ const split = splitGrepLinePrefix(text);
78
+ if (!split || split.delimiter !== ':') return null;
79
+ const content = text.slice(split.markerEnd);
80
+ return { path: split.path, lineNo: split.lineNo, content };
81
+ }
82
+
83
+ export function groupGrepContentByFile(lines) {
84
+ const groupOrder = [];
85
+ const groups = new Map();
86
+ const others = [];
87
+ for (const line of lines) {
88
+ const parsed = parseGrepContentLine(line);
89
+ if (!parsed) {
90
+ others.push(line);
91
+ continue;
92
+ }
93
+ if (!groups.has(parsed.path)) {
94
+ groups.set(parsed.path, []);
95
+ groupOrder.push(parsed.path);
96
+ }
97
+ groups.get(parsed.path).push(parsed);
98
+ }
99
+ if (groupOrder.length === 0) return others.join('\n');
100
+ const out = [];
101
+ for (const path of groupOrder) {
102
+ const hits = groups.get(path);
103
+ out.push(hits.length === 1 ? path : `${path} (${hits.length} hits)`);
104
+ for (const hit of hits) {
105
+ out.push(` ${hit.lineNo}: ${hit.content}`);
106
+ }
107
+ }
108
+ if (others.length) {
109
+ out.push('');
110
+ out.push(...others);
111
+ }
112
+ return out.join('\n');
113
+ }
@@ -0,0 +1,6 @@
1
+ import { createHash } from 'crypto';
2
+
3
+ export function hashText(text) {
4
+ if (Buffer.isBuffer(text)) return createHash('sha256').update(text).digest('hex');
5
+ return createHash('sha256').update(String(text ?? '')).digest('hex');
6
+ }
@@ -0,0 +1,7 @@
1
+ // ISO-ish mtime formatter shared by list / find_files. A single hyphen is
2
+ // used for zero/missing mtime so entries that failed stat still render a
3
+ // stable column.
4
+ export function formatMtime(mtimeMs) {
5
+ if (!mtimeMs) return '-';
6
+ return new Date(mtimeMs).toISOString().slice(0, 19).replace('T', ' ');
7
+ }