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.
- package/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +20 -0
- package/.gitattributes +34 -0
- package/.mcp.json +14 -0
- package/ARCHITECTURE.md +77 -0
- package/CHANGELOG.md +7 -0
- package/CONTRIBUTING.md +45 -0
- package/DATA-FLOW.md +79 -0
- package/LICENSE +21 -0
- package/README.md +389 -0
- package/SECURITY.md +138 -0
- package/UNINSTALL.md +112 -0
- package/agents/maintenance.md +5 -0
- package/agents/memory-classification.md +30 -0
- package/agents/scheduler-task.md +18 -0
- package/agents/webhook-handler.md +27 -0
- package/agents/worker.md +24 -0
- package/bin/bridge +133 -0
- package/bin/statusline-launcher.mjs +78 -0
- package/bin/statusline-lib.mjs +550 -0
- package/bin/statusline.mjs +607 -0
- package/bun.lock +802 -0
- package/commands/config.md +16 -0
- package/commands/doctor.md +13 -0
- package/commands/setup.md +17 -0
- package/defaults/cycle3-review-prompt.md +90 -0
- package/defaults/hidden-roles.json +65 -0
- package/defaults/memory-chunk-prompt.md +63 -0
- package/defaults/memory-promote-prompt.md +135 -0
- package/defaults/mixdog-config.template.json +27 -0
- package/defaults/user-workflow.json +8 -0
- package/defaults/user-workflow.md +12 -0
- package/hooks/hooks.json +73 -0
- package/hooks/lib/active-instance.cjs +77 -0
- package/hooks/lib/permission-evaluator.cjs +411 -0
- package/hooks/lib/permission-route.cjs +63 -0
- package/hooks/lib/permission-rules.cjs +170 -0
- package/hooks/lib/settings-loader.cjs +116 -0
- package/hooks/post-tool-use.cjs +84 -0
- package/hooks/pre-mcp-sandbox.cjs +158 -0
- package/hooks/pre-tool-subagent.cjs +253 -0
- package/hooks/session-start.cjs +1372 -0
- package/hooks/turn-timer.cjs +82 -0
- package/lib/claude-md-writer.cjs +386 -0
- package/lib/config-cjs.cjs +61 -0
- package/lib/hook-pipe-path.cjs +10 -0
- package/lib/keychain-cjs.cjs +263 -0
- package/lib/plugin-paths.cjs +61 -0
- package/lib/rules-builder.cjs +241 -0
- package/lib/text-utils.cjs +61 -0
- package/native/README.md +117 -0
- package/native/prebuilt/linux-aarch64/mixdog-shim +0 -0
- package/native/prebuilt/linux-x86_64/mixdog-shim +0 -0
- package/native/prebuilt/macos-aarch64/mixdog-shim +0 -0
- package/native/prebuilt/macos-x86_64/mixdog-shim +0 -0
- package/native/prebuilt/windows-x86_64/mixdog-shim.exe +0 -0
- package/package.json +107 -0
- package/prompts/code-review.txt +16 -0
- package/prompts/security-audit.txt +17 -0
- package/rules/bridge/00-common.md +39 -0
- package/rules/bridge/20-skip-protocol.md +18 -0
- package/rules/bridge/30-explorer.md +33 -0
- package/rules/bridge/40-cycle1-agent.md +52 -0
- package/rules/bridge/41-cycle2-agent.md +62 -0
- package/rules/bridge/42-cycle3-agent.md +44 -0
- package/rules/lead/00-tool-lead.md +61 -0
- package/rules/lead/01-general.md +23 -0
- package/rules/lead/02-channels.md +49 -0
- package/rules/lead/03-team.md +27 -0
- package/rules/lead/04-workflow.md +20 -0
- package/rules/shared/00-language.md +14 -0
- package/rules/shared/01-tool.md +138 -0
- package/scripts/bootstrap.mjs +184 -0
- package/scripts/bridge-unify-smoke.mjs +308 -0
- package/scripts/build-runtime-linux.sh +348 -0
- package/scripts/build-runtime-macos.sh +217 -0
- package/scripts/build-runtime-windows.ps1 +242 -0
- package/scripts/builtin-utils-smoke.mjs +392 -0
- package/scripts/check-json.mjs +45 -0
- package/scripts/check-syntax-changed.mjs +102 -0
- package/scripts/check-syntax.mjs +58 -0
- package/scripts/code-graph-batch.test.mjs +33 -0
- package/scripts/config-preserve-smoke.mjs +180 -0
- package/scripts/doctor.mjs +484 -0
- package/scripts/edit-normalize-fuzz.mjs +130 -0
- package/scripts/edit-normalize-smoke.mjs +401 -0
- package/scripts/edit-operation-smoke.mjs +369 -0
- package/scripts/edit2-smoke.mjs +63 -0
- package/scripts/fuzzy-e2e.mjs +28 -0
- package/scripts/fuzzy-smoke.mjs +26 -0
- package/scripts/generate-runtime-manifest.mjs +166 -0
- package/scripts/guard-smoke.mjs +66 -0
- package/scripts/hidden-role-schema-smoke.mjs +162 -0
- package/scripts/hook-routing-smoke.mjs +29 -0
- package/scripts/inject-input.ps1 +204 -0
- package/scripts/io-complex-smoke.mjs +667 -0
- package/scripts/io-explore-bench.mjs +424 -0
- package/scripts/io-guardrails-smoke.mjs +205 -0
- package/scripts/io-mini-bench-baseline.json +11 -0
- package/scripts/io-mini-bench.mjs +216 -0
- package/scripts/io-route-harness.mjs +933 -0
- package/scripts/io-telemetry-report.mjs +691 -0
- package/scripts/mutation-bench.mjs +564 -0
- package/scripts/mutation-io-smoke.mjs +1081 -0
- package/scripts/native-patch-bridge-smoke.mjs +288 -0
- package/scripts/native-patch-smoke.mjs +304 -0
- package/scripts/patch-interior-context-smoke.mjs +49 -0
- package/scripts/patch-newline-utf8-smoke.mjs +157 -0
- package/scripts/perf-hook-smoke.mjs +71 -0
- package/scripts/permission-eval-smoke.mjs +426 -0
- package/scripts/prep-patch.mjs +53 -0
- package/scripts/prep-shim.mjs +96 -0
- package/scripts/provider-cache-smoke.mjs +687 -0
- package/scripts/report-runtime-health.mjs +132 -0
- package/scripts/run-mcp.mjs +1547 -0
- package/scripts/salvage-v4a-shatter.test.mjs +58 -0
- package/scripts/scoped-cache-io-smoke.mjs +103 -0
- package/scripts/shell-policy-round3-smoke.mjs +46 -0
- package/scripts/smoke-runtime-negative.ps1 +100 -0
- package/scripts/smoke-runtime-negative.sh +95 -0
- package/scripts/stall-policy-smoke.mjs +50 -0
- package/scripts/start-memory-worker.mjs +23 -0
- package/scripts/statusline-launcher-smoke.mjs +82 -0
- package/scripts/stress-atomic-write.mjs +1028 -0
- package/scripts/test-config-rmw-restore.mjs +122 -0
- package/scripts/test-fault-inject.mjs +164 -0
- package/scripts/test-large-file.mjs +174 -0
- package/scripts/tool-edge-smoke.mjs +209 -0
- package/scripts/uninstall.mjs +201 -0
- package/scripts/webhook-selfheal-smoke.mjs +29 -0
- package/scripts/write-overwrite-guard-smoke.mjs +56 -0
- package/server-main.mjs +3055 -0
- package/server.mjs +468 -0
- package/setup/config-merge.mjs +254 -0
- package/setup/install.mjs +120 -0
- package/setup/launch-core.mjs +507 -0
- package/setup/launch.mjs +101 -0
- package/setup/setup-server.mjs +3206 -0
- package/setup/setup.html +3693 -0
- package/skills/retro-skill-proposer/SKILL.md +92 -0
- package/skills/schedule-add/SKILL.md +77 -0
- package/skills/setup/SKILL.md +346 -0
- package/skills/webhook-add/SKILL.md +81 -0
- package/src/agent/bridge-stall-watchdog.mjs +337 -0
- package/src/agent/index.mjs +2138 -0
- package/src/agent/orchestrator/activity-bus.mjs +38 -0
- package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +1010 -0
- package/src/agent/orchestrator/bridge-retry.mjs +220 -0
- package/src/agent/orchestrator/bridge-trace.mjs +583 -0
- package/src/agent/orchestrator/cache-mtime.mjs +58 -0
- package/src/agent/orchestrator/config.mjs +358 -0
- package/src/agent/orchestrator/context/collect.mjs +651 -0
- package/src/agent/orchestrator/dispatch-persist.mjs +549 -0
- package/src/agent/orchestrator/drain-registry.mjs +50 -0
- package/src/agent/orchestrator/explore-validator.mjs +8 -0
- package/src/agent/orchestrator/internal-roles.mjs +118 -0
- package/src/agent/orchestrator/internal-tools.mjs +88 -0
- package/src/agent/orchestrator/jobs.mjs +116 -0
- package/src/agent/orchestrator/mcp/client.mjs +364 -0
- package/src/agent/orchestrator/providers/anthropic-betas.mjs +21 -0
- package/src/agent/orchestrator/providers/anthropic-oauth.mjs +1745 -0
- package/src/agent/orchestrator/providers/anthropic.mjs +437 -0
- package/src/agent/orchestrator/providers/gemini.mjs +1175 -0
- package/src/agent/orchestrator/providers/grok-oauth.mjs +782 -0
- package/src/agent/orchestrator/providers/model-catalog.mjs +241 -0
- package/src/agent/orchestrator/providers/openai-compat.mjs +1467 -0
- package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +1890 -0
- package/src/agent/orchestrator/providers/openai-oauth.mjs +1307 -0
- package/src/agent/orchestrator/providers/openai-ws.mjs +104 -0
- package/src/agent/orchestrator/providers/registry.mjs +192 -0
- package/src/agent/orchestrator/providers/retry-classifier.mjs +325 -0
- package/src/agent/orchestrator/session/abort-lookup.mjs +13 -0
- package/src/agent/orchestrator/session/cache/post-edit-marks.mjs +42 -0
- package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
- package/src/agent/orchestrator/session/cache/read-cache.mjs +319 -0
- package/src/agent/orchestrator/session/cache/scoped-cache-outcome.mjs +11 -0
- package/src/agent/orchestrator/session/cache/scoped-cache.mjs +361 -0
- package/src/agent/orchestrator/session/cache/util.mjs +49 -0
- package/src/agent/orchestrator/session/loop.mjs +1478 -0
- package/src/agent/orchestrator/session/manager.mjs +1975 -0
- package/src/agent/orchestrator/session/read-dedup.mjs +6 -0
- package/src/agent/orchestrator/session/result-classification.mjs +65 -0
- package/src/agent/orchestrator/session/save-session-worker.mjs +18 -0
- package/src/agent/orchestrator/session/store.mjs +624 -0
- package/src/agent/orchestrator/session/stream-watchdog.mjs +130 -0
- package/src/agent/orchestrator/session/tool-result-offload.mjs +166 -0
- package/src/agent/orchestrator/session/trim.mjs +491 -0
- package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +115 -0
- package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +327 -0
- package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +150 -0
- package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +228 -0
- package/src/agent/orchestrator/smart-bridge/index.mjs +215 -0
- package/src/agent/orchestrator/smart-bridge/profiles.mjs +37 -0
- package/src/agent/orchestrator/smart-bridge/registry.mjs +348 -0
- package/src/agent/orchestrator/smart-bridge/session-builder.mjs +116 -0
- package/src/agent/orchestrator/stall-policy.mjs +195 -0
- package/src/agent/orchestrator/tool-loop-guard.mjs +75 -0
- package/src/agent/orchestrator/tools/bash-policy-scan.mjs +77 -0
- package/src/agent/orchestrator/tools/bash-session.mjs +721 -0
- package/src/agent/orchestrator/tools/builtin/advisory-lock.mjs +171 -0
- package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +455 -0
- package/src/agent/orchestrator/tools/builtin/atomic-write.mjs +236 -0
- package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +480 -0
- package/src/agent/orchestrator/tools/builtin/binary-file.mjs +76 -0
- package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +256 -0
- package/src/agent/orchestrator/tools/builtin/cache-layers.mjs +386 -0
- package/src/agent/orchestrator/tools/builtin/cwd-utils.mjs +37 -0
- package/src/agent/orchestrator/tools/builtin/device-paths.mjs +154 -0
- package/src/agent/orchestrator/tools/builtin/diagnostics-tool.mjs +292 -0
- package/src/agent/orchestrator/tools/builtin/diff-utils.mjs +109 -0
- package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +58 -0
- package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +240 -0
- package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +113 -0
- package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +74 -0
- package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +242 -0
- package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +211 -0
- package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +1364 -0
- package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +126 -0
- package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +141 -0
- package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +194 -0
- package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +60 -0
- package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +168 -0
- package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +173 -0
- package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +48 -0
- package/src/agent/orchestrator/tools/builtin/fs-reachability.mjs +48 -0
- package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +99 -0
- package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +170 -0
- package/src/agent/orchestrator/tools/builtin/grep-formatting.mjs +113 -0
- package/src/agent/orchestrator/tools/builtin/hash-utils.mjs +6 -0
- package/src/agent/orchestrator/tools/builtin/list-formatting.mjs +7 -0
- package/src/agent/orchestrator/tools/builtin/list-tool.mjs +593 -0
- package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +89 -0
- package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +300 -0
- package/src/agent/orchestrator/tools/builtin/open-config-tool.mjs +26 -0
- package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +152 -0
- package/src/agent/orchestrator/tools/builtin/path-locks.mjs +35 -0
- package/src/agent/orchestrator/tools/builtin/path-utils.mjs +201 -0
- package/src/agent/orchestrator/tools/builtin/read-args.mjs +103 -0
- package/src/agent/orchestrator/tools/builtin/read-batch.mjs +172 -0
- package/src/agent/orchestrator/tools/builtin/read-constants.mjs +40 -0
- package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
- package/src/agent/orchestrator/tools/builtin/read-image-resize.mjs +189 -0
- package/src/agent/orchestrator/tools/builtin/read-image.mjs +88 -0
- package/src/agent/orchestrator/tools/builtin/read-lines.mjs +12 -0
- package/src/agent/orchestrator/tools/builtin/read-mode-tool.mjs +455 -0
- package/src/agent/orchestrator/tools/builtin/read-open.mjs +190 -0
- package/src/agent/orchestrator/tools/builtin/read-range-index.mjs +271 -0
- package/src/agent/orchestrator/tools/builtin/read-ranges.mjs +26 -0
- package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +728 -0
- package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +173 -0
- package/src/agent/orchestrator/tools/builtin/read-special-files.mjs +268 -0
- package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
- package/src/agent/orchestrator/tools/builtin/read-tool.mjs +530 -0
- package/src/agent/orchestrator/tools/builtin/read-windows.mjs +107 -0
- package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +196 -0
- package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +422 -0
- package/src/agent/orchestrator/tools/builtin/search-builders.mjs +158 -0
- package/src/agent/orchestrator/tools/builtin/search-tool.mjs +869 -0
- package/src/agent/orchestrator/tools/builtin/shell-analysis.mjs +653 -0
- package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +936 -0
- package/src/agent/orchestrator/tools/builtin/shell-output.mjs +36 -0
- package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +214 -0
- package/src/agent/orchestrator/tools/builtin/snapshot-helpers.mjs +143 -0
- package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +206 -0
- package/src/agent/orchestrator/tools/builtin/snapshot-validation.mjs +98 -0
- package/src/agent/orchestrator/tools/builtin/text-stats.mjs +69 -0
- package/src/agent/orchestrator/tools/builtin/windows-roots.mjs +23 -0
- package/src/agent/orchestrator/tools/builtin/write-tool.mjs +401 -0
- package/src/agent/orchestrator/tools/builtin.mjs +500 -0
- package/src/agent/orchestrator/tools/code-graph-prewarm-worker.mjs +39 -0
- package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
- package/src/agent/orchestrator/tools/code-graph.mjs +4095 -0
- package/src/agent/orchestrator/tools/cwd-tool.mjs +298 -0
- package/src/agent/orchestrator/tools/destructive-warning.mjs +323 -0
- package/src/agent/orchestrator/tools/edit-normalize.mjs +603 -0
- package/src/agent/orchestrator/tools/env-scrub.mjs +100 -0
- package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +144 -0
- package/src/agent/orchestrator/tools/graph-manifest.json +26 -0
- package/src/agent/orchestrator/tools/host-input.mjs +204 -0
- package/src/agent/orchestrator/tools/mutation-content-cache.mjs +67 -0
- package/src/agent/orchestrator/tools/mutation-planner.mjs +75 -0
- package/src/agent/orchestrator/tools/next-call-utils.mjs +48 -0
- package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +133 -0
- package/src/agent/orchestrator/tools/patch-manifest.json +26 -0
- package/src/agent/orchestrator/tools/patch-tool-defs.mjs +20 -0
- package/src/agent/orchestrator/tools/patch.mjs +2754 -0
- package/src/agent/orchestrator/tools/progress-message.mjs +118 -0
- package/src/agent/orchestrator/tools/result-compression.mjs +279 -0
- package/src/agent/orchestrator/tools/shell-command.mjs +865 -0
- package/src/agent/orchestrator/tools/shell-exec-policy.mjs +89 -0
- package/src/agent/orchestrator/tools/shell-policy-danger-target.mjs +27 -0
- package/src/agent/orchestrator/tools/shell-policy-imports.mjs +7 -0
- package/src/agent/orchestrator/tools/shell-policy.mjs +345 -0
- package/src/agent/orchestrator/tools/shell-snapshot.mjs +313 -0
- package/src/agent/orchestrator/workflow-store.mjs +93 -0
- package/src/agent/tool-defs.mjs +103 -0
- package/src/channels/backends/discord.mjs +784 -0
- package/src/channels/data/voice-runtime-manifest.json +138 -0
- package/src/channels/index.mjs +3229 -0
- package/src/channels/lib/cli-worker-host.mjs +12 -0
- package/src/channels/lib/config-lock.mjs +13 -0
- package/src/channels/lib/config.mjs +292 -0
- package/src/channels/lib/drop-trace.mjs +71 -0
- package/src/channels/lib/event-pipeline.mjs +81 -0
- package/src/channels/lib/event-queue.mjs +345 -0
- package/src/channels/lib/executor.mjs +168 -0
- package/src/channels/lib/format.mjs +188 -0
- package/src/channels/lib/holidays.mjs +138 -0
- package/src/channels/lib/hook-pipe-server.mjs +802 -0
- package/src/channels/lib/interaction-workflows.mjs +184 -0
- package/src/channels/lib/memory-client.mjs +149 -0
- package/src/channels/lib/output-forwarder.mjs +765 -0
- package/src/channels/lib/runtime-paths.mjs +479 -0
- package/src/channels/lib/scheduler.mjs +723 -0
- package/src/channels/lib/session-control.mjs +36 -0
- package/src/channels/lib/session-discovery.mjs +103 -0
- package/src/channels/lib/settings.mjs +11 -0
- package/src/channels/lib/state-file.mjs +68 -0
- package/src/channels/lib/status-snapshot.mjs +219 -0
- package/src/channels/lib/tool-format.mjs +140 -0
- package/src/channels/lib/transcript-discovery.mjs +195 -0
- package/src/channels/lib/voice-runtime-fetcher.mjs +734 -0
- package/src/channels/lib/webhook.mjs +1179 -0
- package/src/channels/lib/whisper-server.mjs +477 -0
- package/src/channels/tool-defs.mjs +170 -0
- package/src/daemon/host.mjs +118 -0
- package/src/daemon/mcp-transport.mjs +47 -0
- package/src/daemon/session.mjs +100 -0
- package/src/daemon/thin-client.mjs +71 -0
- package/src/daemon/transport.mjs +163 -0
- package/src/memory/data/runtime-manifest.json +40 -0
- package/src/memory/index.mjs +3305 -0
- package/src/memory/lib/agent-ipc.mjs +93 -0
- package/src/memory/lib/bridge-trace-queries.mjs +120 -0
- package/src/memory/lib/core-memory-store.mjs +330 -0
- package/src/memory/lib/embedding-provider.mjs +269 -0
- package/src/memory/lib/embedding-worker.mjs +323 -0
- package/src/memory/lib/llm-worker-host.mjs +17 -0
- package/src/memory/lib/memory-cycle.mjs +11 -0
- package/src/memory/lib/memory-cycle1.mjs +641 -0
- package/src/memory/lib/memory-cycle2.mjs +1284 -0
- package/src/memory/lib/memory-cycle3.mjs +540 -0
- package/src/memory/lib/memory-embed.mjs +299 -0
- package/src/memory/lib/memory-extraction.mjs +5 -0
- package/src/memory/lib/memory-maintenance-store.mjs +32 -0
- package/src/memory/lib/memory-ops-policy.mjs +190 -0
- package/src/memory/lib/memory-recall-id-patch.mjs +15 -0
- package/src/memory/lib/memory-recall-read-query.mjs +7 -0
- package/src/memory/lib/memory-recall-scope-filter.mjs +63 -0
- package/src/memory/lib/memory-recall-store.mjs +621 -0
- package/src/memory/lib/memory-retrievers.mjs +112 -0
- package/src/memory/lib/memory-score.mjs +71 -0
- package/src/memory/lib/memory-text-utils.mjs +58 -0
- package/src/memory/lib/memory.mjs +412 -0
- package/src/memory/lib/model-profile.mjs +85 -0
- package/src/memory/lib/pg/adapter.mjs +308 -0
- package/src/memory/lib/pg/process.mjs +360 -0
- package/src/memory/lib/pg/supervisor.mjs +396 -0
- package/src/memory/lib/project-id-resolver.mjs +86 -0
- package/src/memory/lib/runtime-fetcher.mjs +442 -0
- package/src/memory/lib/trace-store.mjs +728 -0
- package/src/memory/tool-defs.mjs +79 -0
- package/src/search/index.mjs +1173 -0
- package/src/search/lib/backends/anthropic-oauth.mjs +98 -0
- package/src/search/lib/backends/exa.mjs +50 -0
- package/src/search/lib/backends/firecrawl.mjs +61 -0
- package/src/search/lib/backends/gemini-api.mjs +83 -0
- package/src/search/lib/backends/grok-oauth.mjs +86 -0
- package/src/search/lib/backends/index.mjs +150 -0
- package/src/search/lib/backends/openai-api.mjs +144 -0
- package/src/search/lib/backends/openai-oauth.mjs +98 -0
- package/src/search/lib/backends/openai-web-search.mjs +76 -0
- package/src/search/lib/backends/tavily.mjs +55 -0
- package/src/search/lib/backends/xai-api.mjs +113 -0
- package/src/search/lib/cache.mjs +131 -0
- package/src/search/lib/config.mjs +192 -0
- package/src/search/lib/formatter.mjs +115 -0
- package/src/search/lib/provider-usage.mjs +67 -0
- package/src/search/lib/providers.mjs +47 -0
- package/src/search/lib/search-intent.mjs +109 -0
- package/src/search/lib/setup-handler.mjs +261 -0
- package/src/search/lib/state.mjs +201 -0
- package/src/search/lib/web-tools.mjs +1207 -0
- package/src/search/tool-defs.mjs +83 -0
- package/src/setup/defender-exclusion.mjs +183 -0
- package/src/shared/abort-controller.mjs +15 -0
- package/src/shared/atomic-file.mjs +420 -0
- package/src/shared/config.mjs +350 -0
- package/src/shared/daemon-recycle.mjs +108 -0
- package/src/shared/disable-claude-builtins.mjs +88 -0
- package/src/shared/err-text.mjs +12 -0
- package/src/shared/llm/cost.mjs +66 -0
- package/src/shared/llm/http-agent.mjs +123 -0
- package/src/shared/llm/index.mjs +41 -0
- package/src/shared/llm/pid-cleanup.mjs +27 -0
- package/src/shared/llm/usage-log.mjs +47 -0
- package/src/shared/plugin-paths.mjs +58 -0
- package/src/shared/schedules-store.mjs +70 -0
- package/src/shared/seed.mjs +119 -0
- package/src/shared/user-cwd.mjs +213 -0
- package/src/shared/user-data-guard.mjs +238 -0
- package/src/status/aggregator.mjs +584 -0
- package/src/status/server.mjs +413 -0
- 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,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
|
+
}
|