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,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* bridge-retry — provider-agnostic auto-retry for detached bridge workers.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a runFn (returns askSession result) with bounded auto-retry when the
|
|
5
|
+
* failure is a TRANSIENT NETWORK fault (Axis R). STALL failures do NOT retry.
|
|
6
|
+
* Fresh session per attempt — no message-history carry-over.
|
|
7
|
+
*
|
|
8
|
+
* Cap: NETWORK_MAX_ATTEMPTS total tries for network (default 3 = 2 retries),
|
|
9
|
+
* STALL_MAX_ATTEMPTS = 1 (0 retries). Cap is in-memory only; dispatch-persist
|
|
10
|
+
* stores no attempt counter, so a supervisor restart resets the attempt index
|
|
11
|
+
* to startAttempt (caller-supplied).
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
// STALL auto-retry stays removed by decision: a stall retry re-issued against
|
|
15
|
+
// the SAME provider only re-poked a slow/wedged endpoint and raced a manual
|
|
16
|
+
// re-dispatch into duplicate results; the 300s first-byte stall window
|
|
17
|
+
// (stall-policy.mjs DEFAULT_STALL_FIRST_BYTE_ABORT_S) is the stall backstop.
|
|
18
|
+
// NETWORK-transient retry is restored separately (Axis R, below) — safe because
|
|
19
|
+
// a connect failure never reaches the provider, so it cannot duplicate.
|
|
20
|
+
import { isContextOverflowError } from './providers/retry-classifier.mjs';
|
|
21
|
+
|
|
22
|
+
// Axis R — bounded NETWORK-transient retry restored; STALL retry stays OFF.
|
|
23
|
+
// A connect/socket failure means the request never reached the provider (no
|
|
24
|
+
// tool emission, no partial result) → a fresh-session retry cannot duplicate,
|
|
25
|
+
// so network errors are safe to retry. A stall is mid-stream (already emitted)
|
|
26
|
+
// and re-poking a wedged endpoint risks duplicates → stall stays at 0 retries.
|
|
27
|
+
const NETWORK_MAX_ATTEMPTS = (() => {
|
|
28
|
+
const v = parseInt(process.env.MIXDOG_BRIDGE_NETWORK_MAX_ATTEMPTS, 10);
|
|
29
|
+
return Number.isFinite(v) ? Math.min(Math.max(v, 1), 5) : 3;
|
|
30
|
+
})();
|
|
31
|
+
const STALL_MAX_ATTEMPTS = 1; // intentional: stall auto-retry disabled (0 retries)
|
|
32
|
+
|
|
33
|
+
// Short backoff between network-transient retries. The socket already paid the
|
|
34
|
+
// connect timeout, so keep pauses small; index by attempt, clamp at the tail.
|
|
35
|
+
const NETWORK_RETRY_BACKOFF_MS = [0, 500, 1000, 2000, 4000];
|
|
36
|
+
|
|
37
|
+
// Small whitelist of Node.js / undici error codes that represent transient
|
|
38
|
+
// network conditions safe to retry with a fresh session. Kept as a flat Set
|
|
39
|
+
// so the lookup is O(1) and the full table is visible in one place.
|
|
40
|
+
const TRANSIENT_NETWORK_CODES = new Set([
|
|
41
|
+
'ECONNRESET',
|
|
42
|
+
'ECONNREFUSED',
|
|
43
|
+
'ETIMEDOUT',
|
|
44
|
+
'ENOTFOUND',
|
|
45
|
+
'EAI_AGAIN',
|
|
46
|
+
// undici (Node 18+ fetch) emits its own timeout / socket-teardown codes.
|
|
47
|
+
// Each is an explicit transient signal from the HTTP client — not a
|
|
48
|
+
// heuristic — and is safe to retry against a fresh session.
|
|
49
|
+
'UND_ERR_HEADERS_TIMEOUT',
|
|
50
|
+
'UND_ERR_BODY_TIMEOUT',
|
|
51
|
+
'UND_ERR_CONNECT_TIMEOUT',
|
|
52
|
+
'UND_ERR_SOCKET',
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
// Transient WS close codes (abnormal close / server restart / overload).
|
|
56
|
+
const TRANSIENT_WS_CODES = new Set([1006, 1011, 1012, 4000]);
|
|
57
|
+
|
|
58
|
+
// Transient HTTP statuses: timeout (408), gateway faults (502/503/504).
|
|
59
|
+
// 500 (Internal Server Error) is excluded — almost always an application-layer
|
|
60
|
+
// problem (prompt invalid, tool schema mismatch) where retry amplifies load and
|
|
61
|
+
// can double-bill tokens without changing the outcome. 502/503/504 are network
|
|
62
|
+
// edge faults safe to retry with a fresh session.
|
|
63
|
+
const TRANSIENT_HTTP_STATUS = new Set([408, 502, 503, 504]);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Returns true when `err` represents a transient network or provider fault
|
|
67
|
+
* that is safe to retry with a fresh session. Walks err.cause and
|
|
68
|
+
* err.response.data up to depth 2 so wrapped errors (axios / fetch / sdk)
|
|
69
|
+
* are detected without unbounded recursion.
|
|
70
|
+
*
|
|
71
|
+
* Classification order (first match wins):
|
|
72
|
+
* 1. err.retryable === true — provider explicitly marks the error retryable.
|
|
73
|
+
* 2. err.code in TRANSIENT_NETWORK_CODES — raw socket / DNS transient.
|
|
74
|
+
* 3. err.wsCloseCode in TRANSIENT_WS_CODES — WS abnormal / server restart.
|
|
75
|
+
* 4. err.httpStatus or err.response.status in TRANSIENT_HTTP_STATUS — gateway fault.
|
|
76
|
+
* @param {unknown} err
|
|
77
|
+
* @returns {boolean}
|
|
78
|
+
*/
|
|
79
|
+
export function isTransientNetworkError(err, _depth = 0) {
|
|
80
|
+
if (!err || _depth > 2) return false;
|
|
81
|
+
if (err.retryable === true) return true;
|
|
82
|
+
if (err.code != null && TRANSIENT_NETWORK_CODES.has(err.code)) return true;
|
|
83
|
+
if (err.wsCloseCode != null && TRANSIENT_WS_CODES.has(err.wsCloseCode)) return true;
|
|
84
|
+
if (err.wsCloseCode === 1000) {
|
|
85
|
+
const msg = (err instanceof Error ? err.message : String(err)) || '';
|
|
86
|
+
if (/before response\.completed/i.test(msg)) return true;
|
|
87
|
+
}
|
|
88
|
+
if (err.httpStatus != null && TRANSIENT_HTTP_STATUS.has(err.httpStatus)) return true;
|
|
89
|
+
if (err.response?.status != null && TRANSIENT_HTTP_STATUS.has(err.response.status)) return true;
|
|
90
|
+
if (err.cause != null) return isTransientNetworkError(err.cause, _depth + 1);
|
|
91
|
+
if (err.response?.data != null) return isTransientNetworkError(err.response.data, _depth + 1);
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Returns true when `err` represents a bridge-stall-watchdog abort
|
|
97
|
+
* (no-first-byte, no-SSE-delta, tool-runtime-exceeded). The watchdog at
|
|
98
|
+
* src/agent/bridge-stall-watchdog.mjs constructs an Error with
|
|
99
|
+
* name='BridgeStallAbortError' and message='bridge stall watchdog: <N>s',
|
|
100
|
+
* then passes the message string to closeSession() so SessionClosedError's
|
|
101
|
+
* structured `reason` field (manager.mjs:1412) carries the same marker.
|
|
102
|
+
*
|
|
103
|
+
* Detection covers three surfaces in priority order:
|
|
104
|
+
* 1. err.name === 'BridgeStallAbortError' — provider rejected the
|
|
105
|
+
* underlying promise with signal.reason verbatim before the race
|
|
106
|
+
* rejector fired.
|
|
107
|
+
* 2. err.reason starts with 'bridge stall watchdog' — SessionClosedError
|
|
108
|
+
* from post-loop validation (manager.mjs:1412) where closeReason was
|
|
109
|
+
* threaded through closeSession().
|
|
110
|
+
* 3. err.cause walked one level for wrapped abort errors.
|
|
111
|
+
*
|
|
112
|
+
* The race-rejector path (manager.mjs:1232) loses the marker (closes with
|
|
113
|
+
* a generic 'aborted during call' reason, reason=null). For that case the
|
|
114
|
+
* caller supplies an `isStallAbort` predicate (e.g. `stallWatch.fired()`).
|
|
115
|
+
*
|
|
116
|
+
* @param {unknown} err
|
|
117
|
+
* @returns {boolean}
|
|
118
|
+
*/
|
|
119
|
+
export function isRetryableStall(err, _depth = 0) {
|
|
120
|
+
if (!err || _depth > 2) return false;
|
|
121
|
+
if (err.name === 'BridgeStallAbortError') return true;
|
|
122
|
+
const reasonStr = typeof err.reason === 'string' ? err.reason : '';
|
|
123
|
+
if (reasonStr.startsWith('bridge stall watchdog')) return true;
|
|
124
|
+
if (err.cause != null && err.cause !== err) return isRetryableStall(err.cause, _depth + 1);
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Run `runFn(attempt)` with automatic retry on transient network errors.
|
|
129
|
+
*
|
|
130
|
+
* @param {object} opts
|
|
131
|
+
* @param {string} opts.role - role label (for stderr logging)
|
|
132
|
+
* @param {string} opts.jobId - jobId (for stderr logging)
|
|
133
|
+
* @param {number} [opts.startAttempt=0] - initial attempt counter (from persisted state)
|
|
134
|
+
* @param {(attempt: number) => Promise<*>} opts.runFn
|
|
135
|
+
* Called with the current attempt index. Must return the askSession result
|
|
136
|
+
* or throw. A fresh session must be created by the caller inside runFn
|
|
137
|
+
* when attempt > 0 (the wrapper does NOT manage session lifecycle).
|
|
138
|
+
* @param {AbortSignal} [opts.externalSignal=null]
|
|
139
|
+
* Caller's abort signal; checked at every attempt boundary so request
|
|
140
|
+
* cancellation surfaces immediately instead of paying another provider call.
|
|
141
|
+
* @param {() => boolean} [opts.isStallAbort=null]
|
|
142
|
+
* Optional predicate the caller can wire to `stallWatch.fired()` so the
|
|
143
|
+
* wrapper can identify a stall abort even when the race rejector
|
|
144
|
+
* (_api_call_with_interrupt in manager.mjs:1232) strips the structured
|
|
145
|
+
* closeReason from the SessionClosedError that surfaces here.
|
|
146
|
+
* @returns {Promise<{ result: *, attempt: number }>}
|
|
147
|
+
* Resolves with the successful result and the attempt index that succeeded.
|
|
148
|
+
* Rejects with the last error when all attempts are exhausted or the error
|
|
149
|
+
* is non-recoverable.
|
|
150
|
+
*/
|
|
151
|
+
export async function runWithDispatchRetry({ role, jobId, startAttempt = 0, runFn, externalSignal = null, isStallAbort = null }) {
|
|
152
|
+
let attempt = typeof startAttempt === 'number' && startAttempt >= 0 ? startAttempt : 0;
|
|
153
|
+
|
|
154
|
+
while (attempt < NETWORK_MAX_ATTEMPTS) {
|
|
155
|
+
// Abort fence at every attempt boundary — uninterruptible retry loops are
|
|
156
|
+
// a request-cancellation invariant violation; if the caller's signal aborts
|
|
157
|
+
// mid-retry, surface immediately instead of paying another provider call.
|
|
158
|
+
if (externalSignal?.aborted) {
|
|
159
|
+
throw new Error('[bridge-retry] aborted by caller signal');
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const result = await runFn(attempt);
|
|
163
|
+
return { result, attempt };
|
|
164
|
+
} catch (err) {
|
|
165
|
+
const nextAttempt = attempt + 1;
|
|
166
|
+
// Stall classification — checked BEFORE network classification because a
|
|
167
|
+
// BridgeStallAbortError can technically carry a transient-looking cause
|
|
168
|
+
// (e.g. underlying socket close after the watchdog abort propagated).
|
|
169
|
+
// The watchdog is the authoritative signal; do not let the cause walk
|
|
170
|
+
// re-classify it as a network retry.
|
|
171
|
+
// Context-window-exceeded is a deterministic refusal: re-issuing the
|
|
172
|
+
// SAME oversized input against a fresh session (this wrapper carries no
|
|
173
|
+
// history) cannot change the outcome. The trim-and-retry fix lives in
|
|
174
|
+
// the agent loop's send path (loop.mjs), which shrinks the transcript
|
|
175
|
+
// before re-sending. Never classify it as a retryable transient here.
|
|
176
|
+
const contextOverflow = isContextOverflowError(err);
|
|
177
|
+
const stalled =
|
|
178
|
+
!contextOverflow
|
|
179
|
+
&& (isRetryableStall(err)
|
|
180
|
+
|| (typeof isStallAbort === 'function' && (() => {
|
|
181
|
+
try { return !!isStallAbort(); } catch { return false; }
|
|
182
|
+
})()));
|
|
183
|
+
const networkTransient = !contextOverflow && !stalled && isTransientNetworkError(err);
|
|
184
|
+
|
|
185
|
+
// Network retries up to NETWORK_MAX_ATTEMPTS (safe: no duplicate, request
|
|
186
|
+
// never reached the provider). Stall does NOT retry (STALL_MAX_ATTEMPTS=1
|
|
187
|
+
// → 0 retries) — intentional decision preserved.
|
|
188
|
+
const networkCanRetry = networkTransient && nextAttempt < NETWORK_MAX_ATTEMPTS;
|
|
189
|
+
const stallCanRetry = stalled && nextAttempt < STALL_MAX_ATTEMPTS;
|
|
190
|
+
if (networkCanRetry || stallCanRetry) {
|
|
191
|
+
const reasonLabel = stalled ? 'stall' : 'network';
|
|
192
|
+
const waitMs = networkCanRetry
|
|
193
|
+
? NETWORK_RETRY_BACKOFF_MS[Math.min(attempt, NETWORK_RETRY_BACKOFF_MS.length - 1)]
|
|
194
|
+
: 0;
|
|
195
|
+
const waitedSeconds = (waitMs / 1000).toFixed(1);
|
|
196
|
+
const msg = (err instanceof Error ? err.message : String(err)) || '';
|
|
197
|
+
try {
|
|
198
|
+
process.stderr.write(
|
|
199
|
+
`[bridge-retry] role=${role} job=${jobId} attempt=${attempt} reason=${reasonLabel} waitedSeconds=${waitedSeconds} error="${msg.slice(0, 160)}"\n` +
|
|
200
|
+
`[bridge-retry] role=${role} job=${jobId} → retrying as attempt=${nextAttempt}\n`,
|
|
201
|
+
);
|
|
202
|
+
} catch { /* best-effort */ }
|
|
203
|
+
if (waitMs > 0) {
|
|
204
|
+
await new Promise((r) => setTimeout(r, waitMs));
|
|
205
|
+
}
|
|
206
|
+
attempt = nextAttempt;
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Non-recoverable, stall (0 retries), or network cap reached — surface the
|
|
211
|
+
// original error. A stall lands here on first occurrence; the outer catch
|
|
212
|
+
// in src/agent/index.mjs observes stallWatch.fired() and routes through
|
|
213
|
+
// the abort path.
|
|
214
|
+
throw err;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Unreachable, but TypeScript / linters are happier.
|
|
219
|
+
throw new Error('[bridge-retry] exhausted attempts without resolution');
|
|
220
|
+
}
|