mixdog 0.7.18 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -331
- package/package.json +67 -99
- package/scripts/boot-smoke.mjs +94 -0
- package/scripts/build-tui.mjs +52 -0
- package/scripts/compact-smoke.mjs +199 -0
- package/scripts/lead-workflow-smoke.mjs +598 -0
- package/scripts/live-worker-smoke.mjs +239 -0
- package/scripts/output-style-smoke.mjs +101 -0
- package/scripts/smoke-loop-report.mjs +221 -0
- package/scripts/smoke-loop.mjs +201 -0
- package/scripts/smoke.mjs +113 -0
- package/scripts/tool-failures.mjs +143 -0
- package/scripts/tool-smoke.mjs +456 -0
- package/src/agents/debugger/AGENT.md +3 -0
- package/src/agents/debugger/agent.json +6 -0
- package/src/agents/explore/AGENT.md +4 -0
- package/src/agents/explore/agent.json +6 -0
- package/src/agents/heavy-worker/AGENT.md +3 -0
- package/src/agents/heavy-worker/agent.json +6 -0
- package/src/agents/maintainer/AGENT.md +3 -0
- package/src/agents/maintainer/agent.json +6 -0
- package/src/agents/reviewer/AGENT.md +3 -0
- package/src/agents/reviewer/agent.json +6 -0
- package/src/agents/scheduler-task.md +3 -0
- package/src/agents/web-researcher/AGENT.md +3 -0
- package/src/agents/web-researcher/agent.json +6 -0
- package/src/agents/webhook-handler.md +3 -0
- package/src/agents/worker/AGENT.md +3 -0
- package/src/agents/worker/agent.json +6 -0
- package/src/app.mjs +90 -0
- package/src/cli.mjs +11 -0
- package/src/defaults/hidden-roles.json +72 -0
- package/src/defaults/mixdog-config.template.json +15 -0
- package/src/hooks/lib/permission-evaluator.cjs +488 -0
- package/src/hooks/lib/settings-loader.cjs +112 -0
- package/src/lib/keychain-cjs.cjs +332 -0
- package/src/lib/plugin-paths.cjs +28 -0
- package/src/lib/rules-builder.cjs +315 -0
- package/src/mixdog-session-runtime.mjs +3704 -0
- package/src/output-styles/default.md +38 -0
- package/src/output-styles/extreme-simple.md +17 -0
- package/src/output-styles/simple.md +17 -0
- package/src/repl.mjs +322 -0
- package/src/rules/bridge/00-common.md +5 -0
- package/src/rules/bridge/20-skip-protocol.md +11 -0
- package/src/rules/bridge/30-explorer.md +4 -0
- package/src/rules/bridge/40-cycle1-agent.md +28 -0
- package/src/rules/bridge/41-cycle2-agent.md +59 -0
- package/src/rules/lead/00-tool-lead.md +5 -0
- package/src/rules/lead/01-general.md +5 -0
- package/src/rules/lead/02-channels.md +3 -0
- package/src/rules/lead/04-workflow.md +12 -0
- package/src/rules/shared/00-language.md +3 -0
- package/src/rules/shared/01-tool.md +3 -0
- package/src/runtime/agent/orchestrator/bridge-trace.mjs +814 -0
- package/src/runtime/agent/orchestrator/cache-mtime.mjs +60 -0
- package/src/runtime/agent/orchestrator/config.mjs +446 -0
- package/src/runtime/agent/orchestrator/context/collect.mjs +796 -0
- package/src/runtime/agent/orchestrator/dispatch-persist.mjs +417 -0
- package/src/runtime/agent/orchestrator/internal-roles.mjs +188 -0
- package/src/runtime/agent/orchestrator/internal-tools.mjs +88 -0
- package/src/runtime/agent/orchestrator/mcp/client.mjs +345 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +2104 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +784 -0
- package/src/runtime/agent/orchestrator/providers/api-usage.mjs +341 -0
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +1679 -0
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +959 -0
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +213 -0
- package/src/runtime/agent/orchestrator/providers/model-cache.mjs +38 -0
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +471 -0
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +615 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +808 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +1719 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +2587 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +1953 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +136 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +317 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +109 -0
- package/src/runtime/agent/orchestrator/providers/registry.mjs +247 -0
- package/src/runtime/agent/orchestrator/providers/retry-classifier.mjs +332 -0
- package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +11 -0
- package/src/runtime/agent/orchestrator/providers/trace-utils.mjs +50 -0
- package/src/runtime/agent/orchestrator/session/cache/prefetch-cache.mjs +142 -0
- package/src/runtime/agent/orchestrator/session/cache/read-cache.mjs +318 -0
- package/src/runtime/agent/orchestrator/session/cache/scoped-cache.mjs +367 -0
- package/src/runtime/agent/orchestrator/session/compact.mjs +882 -0
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +233 -0
- package/src/runtime/agent/orchestrator/session/loop.mjs +2320 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +2960 -0
- package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +663 -0
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +166 -0
- package/src/runtime/agent/orchestrator/smart-bridge/bridge-llm.mjs +339 -0
- package/src/runtime/agent/orchestrator/smart-bridge/cache-strategy.mjs +419 -0
- package/src/runtime/agent/orchestrator/stall-policy.mjs +227 -0
- package/src/runtime/agent/orchestrator/tool-loop-guard.mjs +235 -0
- package/src/runtime/agent/orchestrator/tools/bash-session.mjs +723 -0
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +389 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +637 -0
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +165 -0
- package/src/runtime/agent/orchestrator/tools/builtin/fuzzy-match.mjs +104 -0
- package/src/runtime/agent/orchestrator/tools/builtin/glob-walk.mjs +194 -0
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +596 -0
- package/src/runtime/agent/orchestrator/tools/builtin/native-edit-runner.mjs +110 -0
- package/src/runtime/agent/orchestrator/tools/builtin/path-diagnostics.mjs +153 -0
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +118 -0
- package/src/runtime/agent/orchestrator/tools/builtin/read-open.mjs +189 -0
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-tool.mjs +731 -0
- package/src/runtime/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +168 -0
- package/src/runtime/agent/orchestrator/tools/builtin/read-streaming.mjs +602 -0
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +465 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +160 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +982 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +1087 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +231 -0
- package/src/runtime/agent/orchestrator/tools/builtin/snapshot-store.mjs +223 -0
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +478 -0
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +24 -0
- package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4102 -0
- package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +323 -0
- package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +154 -0
- package/src/runtime/agent/orchestrator/tools/graph-manifest.json +26 -0
- package/src/runtime/agent/orchestrator/tools/patch-binary-fetcher.mjs +143 -0
- package/src/runtime/agent/orchestrator/tools/patch-tool-defs.mjs +18 -0
- package/src/runtime/agent/orchestrator/tools/patch.mjs +2772 -0
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +114 -0
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +880 -0
- package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +312 -0
- package/src/runtime/channels/backends/discord.mjs +781 -0
- package/src/runtime/channels/data/voice-runtime-manifest.json +138 -0
- package/src/runtime/channels/index.mjs +3309 -0
- package/src/runtime/channels/lib/config.mjs +285 -0
- package/src/runtime/channels/lib/drop-trace.mjs +71 -0
- package/src/runtime/channels/lib/event-pipeline.mjs +81 -0
- package/src/runtime/channels/lib/holidays.mjs +138 -0
- package/src/runtime/channels/lib/hook-pipe-server.mjs +671 -0
- package/src/runtime/channels/lib/output-forwarder.mjs +765 -0
- package/src/runtime/channels/lib/runtime-paths.mjs +497 -0
- package/src/runtime/channels/lib/scheduler.mjs +710 -0
- package/src/runtime/channels/lib/session-discovery.mjs +102 -0
- package/src/runtime/channels/lib/state-file.mjs +68 -0
- package/src/runtime/channels/lib/status-snapshot.mjs +224 -0
- package/src/runtime/channels/lib/tool-format.mjs +124 -0
- package/src/runtime/channels/lib/transcript-discovery.mjs +195 -0
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +734 -0
- package/src/runtime/channels/lib/webhook.mjs +1288 -0
- package/src/runtime/channels/tool-defs.mjs +177 -0
- package/src/runtime/lib/keychain-cjs.cjs +289 -0
- package/src/runtime/memory/data/runtime-manifest.json +40 -0
- package/src/runtime/memory/index.mjs +3600 -0
- package/src/runtime/memory/lib/core-memory-store.mjs +336 -0
- package/src/runtime/memory/lib/embedding-provider.mjs +275 -0
- package/src/runtime/memory/lib/embedding-worker.mjs +331 -0
- package/src/runtime/memory/lib/memory-cycle-requests.mjs +276 -0
- package/src/runtime/memory/lib/memory-cycle1.mjs +783 -0
- package/src/runtime/memory/lib/memory-cycle2.mjs +1389 -0
- package/src/runtime/memory/lib/memory-cycle3.mjs +646 -0
- package/src/runtime/memory/lib/memory-embed.mjs +300 -0
- package/src/runtime/memory/lib/memory-ops-policy.mjs +149 -0
- package/src/runtime/memory/lib/memory-recall-store.mjs +644 -0
- package/src/runtime/memory/lib/memory.mjs +418 -0
- package/src/runtime/memory/lib/pg/adapter.mjs +314 -0
- package/src/runtime/memory/lib/pg/process.mjs +366 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +495 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +464 -0
- package/src/runtime/memory/lib/trace-store.mjs +734 -0
- package/src/runtime/memory/tool-defs.mjs +79 -0
- package/src/runtime/search/index.mjs +925 -0
- package/src/runtime/search/lib/config.mjs +61 -0
- package/src/runtime/search/lib/web-tools.mjs +1278 -0
- package/src/runtime/search/tool-defs.mjs +64 -0
- package/src/runtime/shared/atomic-file.mjs +435 -0
- package/src/runtime/shared/background-tasks.mjs +376 -0
- package/src/runtime/shared/child-guardian.mjs +98 -0
- package/src/runtime/shared/config.mjs +393 -0
- package/src/runtime/shared/err-text.mjs +121 -0
- package/src/runtime/shared/launcher-control.mjs +259 -0
- package/src/runtime/shared/llm/http-agent.mjs +129 -0
- package/src/runtime/shared/open-url.mjs +37 -0
- package/src/runtime/shared/plugin-paths.mjs +25 -0
- package/src/runtime/shared/process-shutdown.mjs +147 -0
- package/src/runtime/shared/schedules-store.mjs +70 -0
- package/src/runtime/shared/tool-execution-contract.mjs +104 -0
- package/src/runtime/shared/tool-surface.mjs +950 -0
- package/src/runtime/shared/user-cwd.mjs +221 -0
- package/src/runtime/shared/user-data-guard.mjs +232 -0
- package/src/runtime/shared/workspace-router.mjs +259 -0
- package/src/standalone/bridge-tool.mjs +1414 -0
- package/src/standalone/channel-admin.mjs +366 -0
- package/src/standalone/channel-worker-preload.cjs +3 -0
- package/src/standalone/channel-worker.mjs +353 -0
- package/src/standalone/explore-tool.mjs +233 -0
- package/src/standalone/hook-bus.mjs +246 -0
- package/src/standalone/plugin-admin.mjs +247 -0
- package/src/standalone/provider-admin.mjs +338 -0
- package/src/standalone/seeds.mjs +94 -0
- package/src/standalone/usage-dashboard.mjs +510 -0
- package/src/tui/App.jsx +5438 -0
- package/src/tui/components/AnsiText.jsx +199 -0
- package/src/tui/components/ContextPanel.jsx +217 -0
- package/src/tui/components/Markdown.jsx +205 -0
- package/src/tui/components/MarkdownTable.jsx +204 -0
- package/src/tui/components/Message.jsx +103 -0
- package/src/tui/components/Picker.jsx +317 -0
- package/src/tui/components/PromptInput.jsx +584 -0
- package/src/tui/components/QueuedCommands.jsx +47 -0
- package/src/tui/components/SlashCommandPalette.jsx +114 -0
- package/src/tui/components/Spinner.jsx +317 -0
- package/src/tui/components/StatusLine.jsx +87 -0
- package/src/tui/components/TextEntryPanel.jsx +323 -0
- package/src/tui/components/ToolExecution.jsx +772 -0
- package/src/tui/components/TurnDone.jsx +78 -0
- package/src/tui/components/UsagePanel.jsx +331 -0
- package/src/tui/dist/index.mjs +12359 -0
- package/src/tui/engine.mjs +2410 -0
- package/src/tui/figures.mjs +50 -0
- package/src/tui/hooks/useEngine.mjs +16 -0
- package/src/tui/index.jsx +254 -0
- package/src/tui/input-editing.mjs +242 -0
- package/src/tui/markdown/format-token.mjs +194 -0
- package/src/tui/paste-attachments.mjs +198 -0
- package/src/tui/runtime/shared/process-shutdown.mjs +1 -0
- package/src/tui/spinner-verbs.mjs +45 -0
- package/src/tui/theme.mjs +67 -0
- package/src/tui/time-format.mjs +53 -0
- package/src/ui/ansi.mjs +115 -0
- package/src/ui/markdown.mjs +195 -0
- package/src/ui/statusline.mjs +730 -0
- package/src/ui/tool-card.mjs +101 -0
- package/src/vendor/statusline/bin/statusline-lib.mjs +805 -0
- package/src/vendor/statusline/bin/statusline-route.mjs +596 -0
- package/src/vendor/statusline/scripts/lib/gateway-settings.mjs +285 -0
- package/src/vendor/statusline/src/gateway/claude-current.mjs +320 -0
- package/src/vendor/statusline/src/gateway/route-meta.mjs +753 -0
- package/src/vendor/statusline/src/gateway/session-routes.mjs +244 -0
- package/src/workflows/default/WORKFLOW.md +7 -0
- package/src/workflows/default/workflow.json +14 -0
- package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
- package/vendor/ink/build/ansi-tokenizer.js +316 -0
- package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
- package/vendor/ink/build/colorize.d.ts +3 -0
- package/vendor/ink/build/colorize.js +48 -0
- package/vendor/ink/build/colorize.js.map +1 -0
- package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
- package/vendor/ink/build/components/AccessibilityContext.js +5 -0
- package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
- package/vendor/ink/build/components/AnimationContext.d.ts +9 -0
- package/vendor/ink/build/components/AnimationContext.js +13 -0
- package/vendor/ink/build/components/AnimationContext.js.map +1 -0
- package/vendor/ink/build/components/App.d.ts +24 -0
- package/vendor/ink/build/components/App.js +554 -0
- package/vendor/ink/build/components/App.js.map +1 -0
- package/vendor/ink/build/components/AppContext.d.ts +80 -0
- package/vendor/ink/build/components/AppContext.js +25 -0
- package/vendor/ink/build/components/AppContext.js.map +1 -0
- package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
- package/vendor/ink/build/components/BackgroundContext.js +3 -0
- package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
- package/vendor/ink/build/components/Box.d.ts +130 -0
- package/vendor/ink/build/components/Box.js +34 -0
- package/vendor/ink/build/components/Box.js.map +1 -0
- package/vendor/ink/build/components/CursorContext.d.ts +11 -0
- package/vendor/ink/build/components/CursorContext.js +8 -0
- package/vendor/ink/build/components/CursorContext.js.map +1 -0
- package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
- package/vendor/ink/build/components/ErrorBoundary.js +23 -0
- package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
- package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
- package/vendor/ink/build/components/ErrorOverview.js +90 -0
- package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
- package/vendor/ink/build/components/FocusContext.d.ts +16 -0
- package/vendor/ink/build/components/FocusContext.js +17 -0
- package/vendor/ink/build/components/FocusContext.js.map +1 -0
- package/vendor/ink/build/components/Newline.d.ts +13 -0
- package/vendor/ink/build/components/Newline.js +8 -0
- package/vendor/ink/build/components/Newline.js.map +1 -0
- package/vendor/ink/build/components/Spacer.d.ts +7 -0
- package/vendor/ink/build/components/Spacer.js +11 -0
- package/vendor/ink/build/components/Spacer.js.map +1 -0
- package/vendor/ink/build/components/Static.d.ts +24 -0
- package/vendor/ink/build/components/Static.js +28 -0
- package/vendor/ink/build/components/Static.js.map +1 -0
- package/vendor/ink/build/components/StderrContext.d.ts +15 -0
- package/vendor/ink/build/components/StderrContext.js +13 -0
- package/vendor/ink/build/components/StderrContext.js.map +1 -0
- package/vendor/ink/build/components/StdinContext.d.ts +28 -0
- package/vendor/ink/build/components/StdinContext.js +20 -0
- package/vendor/ink/build/components/StdinContext.js.map +1 -0
- package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
- package/vendor/ink/build/components/StdoutContext.js +13 -0
- package/vendor/ink/build/components/StdoutContext.js.map +1 -0
- package/vendor/ink/build/components/Text.d.ts +55 -0
- package/vendor/ink/build/components/Text.js +50 -0
- package/vendor/ink/build/components/Text.js.map +1 -0
- package/vendor/ink/build/components/Transform.d.ts +16 -0
- package/vendor/ink/build/components/Transform.js +15 -0
- package/vendor/ink/build/components/Transform.js.map +1 -0
- package/vendor/ink/build/cursor-helpers.d.ts +39 -0
- package/vendor/ink/build/cursor-helpers.js +62 -0
- package/vendor/ink/build/cursor-helpers.js.map +1 -0
- package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
- package/vendor/ink/build/devtools-window-polyfill.js +68 -0
- package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
- package/vendor/ink/build/devtools.d.ts +1 -0
- package/vendor/ink/build/devtools.js +36 -0
- package/vendor/ink/build/devtools.js.map +1 -0
- package/vendor/ink/build/dom.d.ts +62 -0
- package/vendor/ink/build/dom.js +143 -0
- package/vendor/ink/build/dom.js.map +1 -0
- package/vendor/ink/build/get-max-width.d.ts +3 -0
- package/vendor/ink/build/get-max-width.js +10 -0
- package/vendor/ink/build/get-max-width.js.map +1 -0
- package/vendor/ink/build/hooks/use-animation.d.ts +49 -0
- package/vendor/ink/build/hooks/use-animation.js +87 -0
- package/vendor/ink/build/hooks/use-animation.js.map +1 -0
- package/vendor/ink/build/hooks/use-app.d.ts +5 -0
- package/vendor/ink/build/hooks/use-app.js +8 -0
- package/vendor/ink/build/hooks/use-app.js.map +1 -0
- package/vendor/ink/build/hooks/use-box-metrics.d.ts +59 -0
- package/vendor/ink/build/hooks/use-box-metrics.js +81 -0
- package/vendor/ink/build/hooks/use-box-metrics.js.map +1 -0
- package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
- package/vendor/ink/build/hooks/use-cursor.js +29 -0
- package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
- package/vendor/ink/build/hooks/use-focus-manager.d.ts +43 -0
- package/vendor/ink/build/hooks/use-focus-manager.js +18 -0
- package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
- package/vendor/ink/build/hooks/use-focus.d.ts +30 -0
- package/vendor/ink/build/hooks/use-focus.js +43 -0
- package/vendor/ink/build/hooks/use-focus.js.map +1 -0
- package/vendor/ink/build/hooks/use-input.d.ts +132 -0
- package/vendor/ink/build/hooks/use-input.js +126 -0
- package/vendor/ink/build/hooks/use-input.js.map +1 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +6 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +12 -0
- package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
- package/vendor/ink/build/hooks/use-paste.d.ts +35 -0
- package/vendor/ink/build/hooks/use-paste.js +62 -0
- package/vendor/ink/build/hooks/use-paste.js.map +1 -0
- package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stderr.js +8 -0
- package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
- package/vendor/ink/build/hooks/use-stdin.d.ts +7 -0
- package/vendor/ink/build/hooks/use-stdin.js +9 -0
- package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
- package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
- package/vendor/ink/build/hooks/use-stdout.js +8 -0
- package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
- package/vendor/ink/build/hooks/use-window-size.d.ts +18 -0
- package/vendor/ink/build/hooks/use-window-size.js +22 -0
- package/vendor/ink/build/hooks/use-window-size.js.map +1 -0
- package/vendor/ink/build/index.d.ts +42 -0
- package/vendor/ink/build/index.js +24 -0
- package/vendor/ink/build/index.js.map +1 -0
- package/vendor/ink/build/ink.d.ts +146 -0
- package/vendor/ink/build/ink.js +1022 -0
- package/vendor/ink/build/ink.js.map +1 -0
- package/vendor/ink/build/input-parser.d.ts +10 -0
- package/vendor/ink/build/input-parser.js +194 -0
- package/vendor/ink/build/input-parser.js.map +1 -0
- package/vendor/ink/build/instances.d.ts +3 -0
- package/vendor/ink/build/instances.js +8 -0
- package/vendor/ink/build/instances.js.map +1 -0
- package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
- package/vendor/ink/build/kitty-keyboard.js +32 -0
- package/vendor/ink/build/kitty-keyboard.js.map +1 -0
- package/vendor/ink/build/log-update.d.ts +20 -0
- package/vendor/ink/build/log-update.js +261 -0
- package/vendor/ink/build/log-update.js.map +1 -0
- package/vendor/ink/build/measure-element.d.ts +20 -0
- package/vendor/ink/build/measure-element.js +13 -0
- package/vendor/ink/build/measure-element.js.map +1 -0
- package/vendor/ink/build/measure-text.d.ts +6 -0
- package/vendor/ink/build/measure-text.js +21 -0
- package/vendor/ink/build/measure-text.js.map +1 -0
- package/vendor/ink/build/output.d.ts +35 -0
- package/vendor/ink/build/output.js +328 -0
- package/vendor/ink/build/output.js.map +1 -0
- package/vendor/ink/build/parse-keypress.d.ts +20 -0
- package/vendor/ink/build/parse-keypress.js +495 -0
- package/vendor/ink/build/parse-keypress.js.map +1 -0
- package/vendor/ink/build/reconciler.d.ts +4 -0
- package/vendor/ink/build/reconciler.js +306 -0
- package/vendor/ink/build/reconciler.js.map +1 -0
- package/vendor/ink/build/render-background.d.ts +4 -0
- package/vendor/ink/build/render-background.js +25 -0
- package/vendor/ink/build/render-background.js.map +1 -0
- package/vendor/ink/build/render-border.d.ts +4 -0
- package/vendor/ink/build/render-border.js +84 -0
- package/vendor/ink/build/render-border.js.map +1 -0
- package/vendor/ink/build/render-node-to-output.d.ts +14 -0
- package/vendor/ink/build/render-node-to-output.js +162 -0
- package/vendor/ink/build/render-node-to-output.js.map +1 -0
- package/vendor/ink/build/render-to-string.d.ts +38 -0
- package/vendor/ink/build/render-to-string.js +116 -0
- package/vendor/ink/build/render-to-string.js.map +1 -0
- package/vendor/ink/build/render.d.ts +176 -0
- package/vendor/ink/build/render.js +71 -0
- package/vendor/ink/build/render.js.map +1 -0
- package/vendor/ink/build/renderer.d.ts +8 -0
- package/vendor/ink/build/renderer.js +64 -0
- package/vendor/ink/build/renderer.js.map +1 -0
- package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
- package/vendor/ink/build/sanitize-ansi.js +27 -0
- package/vendor/ink/build/sanitize-ansi.js.map +1 -0
- package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
- package/vendor/ink/build/squash-text-nodes.js +36 -0
- package/vendor/ink/build/squash-text-nodes.js.map +1 -0
- package/vendor/ink/build/styles.d.ts +302 -0
- package/vendor/ink/build/styles.js +303 -0
- package/vendor/ink/build/styles.js.map +1 -0
- package/vendor/ink/build/utils.d.ts +9 -0
- package/vendor/ink/build/utils.js +19 -0
- package/vendor/ink/build/utils.js.map +1 -0
- package/vendor/ink/build/wrap-text.d.ts +3 -0
- package/vendor/ink/build/wrap-text.js +38 -0
- package/vendor/ink/build/wrap-text.js.map +1 -0
- package/vendor/ink/build/write-synchronized.d.ts +4 -0
- package/vendor/ink/build/write-synchronized.js +9 -0
- package/vendor/ink/build/write-synchronized.js.map +1 -0
- package/vendor/ink/license +10 -0
- package/vendor/ink/package.json +137 -0
- package/.claude-plugin/marketplace.json +0 -34
- package/.claude-plugin/plugin.json +0 -20
- package/.gitattributes +0 -34
- package/.mcp.json +0 -14
- package/ARCHITECTURE.md +0 -77
- package/CHANGELOG.md +0 -30
- package/CONTRIBUTING.md +0 -45
- package/DATA-FLOW.md +0 -79
- package/LICENSE +0 -21
- package/SECURITY.md +0 -138
- package/UNINSTALL.md +0 -115
- package/agents/maintenance.md +0 -5
- package/agents/memory-classification.md +0 -30
- package/agents/scheduler-task.md +0 -18
- package/agents/webhook-handler.md +0 -27
- package/agents/worker.md +0 -24
- package/bin/bridge +0 -133
- package/bin/statusline-launcher.mjs +0 -82
- package/bin/statusline-lib.mjs +0 -581
- package/bin/statusline-route.mjs +0 -273
- package/bin/statusline.mjs +0 -638
- package/bun.lock +0 -927
- package/commands/config.md +0 -16
- package/commands/doctor.md +0 -13
- package/commands/model.md +0 -61
- package/commands/setup.md +0 -17
- package/defaults/hidden-roles.json +0 -68
- package/defaults/memory-chunk-prompt.md +0 -63
- package/defaults/mixdog-config.template.json +0 -27
- package/defaults/user-workflow.json +0 -8
- package/defaults/user-workflow.md +0 -17
- package/hooks/hooks.json +0 -73
- package/hooks/lib/active-instance.cjs +0 -77
- package/hooks/lib/permission-evaluator.cjs +0 -411
- package/hooks/lib/permission-route.cjs +0 -63
- package/hooks/lib/settings-loader.cjs +0 -117
- package/hooks/post-tool-use.cjs +0 -84
- package/hooks/pre-mcp-sandbox.cjs +0 -158
- package/hooks/pre-tool-subagent.cjs +0 -258
- package/hooks/session-start.cjs +0 -1493
- package/hooks/shim-launcher.cjs +0 -65
- package/hooks/turn-timer.cjs +0 -82
- package/lib/claude-md-writer.cjs +0 -386
- package/lib/keychain-cjs.cjs +0 -290
- package/lib/plugin-paths.cjs +0 -69
- package/lib/rules-builder.cjs +0 -241
- package/native/README.md +0 -117
- 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/prompts/code-review.txt +0 -16
- package/prompts/security-audit.txt +0 -17
- package/rules/bridge/00-common.md +0 -39
- package/rules/bridge/20-skip-protocol.md +0 -18
- package/rules/bridge/30-explorer.md +0 -33
- package/rules/bridge/40-cycle1-agent.md +0 -52
- package/rules/bridge/41-cycle2-agent.md +0 -62
- package/rules/lead/00-tool-lead.md +0 -61
- package/rules/lead/01-general.md +0 -26
- package/rules/lead/02-channels.md +0 -49
- package/rules/lead/03-team.md +0 -27
- package/rules/lead/04-workflow.md +0 -20
- package/rules/shared/00-language.md +0 -14
- package/rules/shared/01-tool.md +0 -138
- package/scripts/bootstrap.mjs +0 -130
- package/scripts/bridge-unify-smoke.mjs +0 -308
- package/scripts/build-runtime-linux.sh +0 -348
- package/scripts/build-runtime-macos.sh +0 -217
- package/scripts/build-runtime-windows.ps1 +0 -242
- package/scripts/builtin-utils-smoke.mjs +0 -398
- package/scripts/bump.mjs +0 -80
- package/scripts/check-json.mjs +0 -45
- package/scripts/check-syntax-changed.mjs +0 -102
- package/scripts/check-syntax.mjs +0 -58
- package/scripts/code-graph-batch.test.mjs +0 -33
- package/scripts/config-preserve-smoke.mjs +0 -180
- package/scripts/doctor.mjs +0 -489
- package/scripts/edit-normalize-fuzz.mjs +0 -130
- package/scripts/edit-normalize-smoke.mjs +0 -401
- package/scripts/edit-operation-smoke.mjs +0 -369
- package/scripts/edit2-smoke.mjs +0 -63
- package/scripts/ensure-deps.mjs +0 -259
- package/scripts/fuzzy-e2e.mjs +0 -28
- package/scripts/fuzzy-smoke.mjs +0 -26
- package/scripts/gateway-model.mjs +0 -596
- package/scripts/generate-runtime-manifest.mjs +0 -166
- package/scripts/guard-smoke.mjs +0 -66
- package/scripts/hidden-role-schema-smoke.mjs +0 -162
- package/scripts/hook-routing-smoke.mjs +0 -29
- package/scripts/inject-input.ps1 +0 -204
- package/scripts/io-complex-smoke.mjs +0 -667
- package/scripts/io-explore-bench.mjs +0 -424
- package/scripts/io-guardrails-smoke.mjs +0 -205
- package/scripts/io-mini-bench-baseline.json +0 -11
- package/scripts/io-mini-bench.mjs +0 -216
- package/scripts/io-route-harness.mjs +0 -933
- package/scripts/io-telemetry-report.mjs +0 -691
- package/scripts/lib/gateway-inventory.mjs +0 -178
- package/scripts/lib/gateway-settings.mjs +0 -78
- package/scripts/mutation-bench.mjs +0 -564
- package/scripts/mutation-io-smoke.mjs +0 -1097
- package/scripts/native-patch-bridge-smoke.mjs +0 -288
- package/scripts/native-patch-smoke.mjs +0 -304
- package/scripts/openai-oauth-catalog-smoke.mjs +0 -53
- package/scripts/patch-interior-context-smoke.mjs +0 -49
- package/scripts/patch-newline-utf8-smoke.mjs +0 -157
- package/scripts/perf-hook-smoke.mjs +0 -71
- package/scripts/permission-eval-smoke.mjs +0 -443
- package/scripts/prep-patch.mjs +0 -53
- package/scripts/prep-shim.mjs +0 -96
- package/scripts/provider-cache-smoke.mjs +0 -687
- package/scripts/report-runtime-health.mjs +0 -132
- package/scripts/resolve-bun.mjs +0 -60
- package/scripts/run-mcp.mjs +0 -1473
- package/scripts/salvage-v4a-shatter.test.mjs +0 -58
- package/scripts/scoped-cache-io-smoke.mjs +0 -103
- package/scripts/shell-policy-round3-smoke.mjs +0 -46
- package/scripts/smoke-runtime-negative.ps1 +0 -100
- package/scripts/smoke-runtime-negative.sh +0 -95
- package/scripts/stall-policy-smoke.mjs +0 -50
- package/scripts/start-memory-worker.mjs +0 -23
- package/scripts/statusline-launcher-smoke.mjs +0 -235
- package/scripts/stress-atomic-write.mjs +0 -1028
- package/scripts/test-fault-inject.mjs +0 -164
- package/scripts/test-large-file.mjs +0 -174
- package/scripts/tool-edge-smoke.mjs +0 -209
- package/scripts/uninstall.mjs +0 -238
- package/scripts/webhook-selfheal-smoke.mjs +0 -27
- package/scripts/write-overwrite-guard-smoke.mjs +0 -56
- package/server-main.mjs +0 -3350
- package/server.mjs +0 -468
- package/setup/config-merge.mjs +0 -246
- package/setup/install.mjs +0 -574
- package/setup/launch-core.mjs +0 -617
- package/setup/launch.mjs +0 -101
- package/setup/locate-claude.mjs +0 -56
- package/setup/mixdog-cli.mjs +0 -122
- package/setup/setup-server.mjs +0 -3305
- package/setup/setup.html +0 -3740
- package/setup/tui.mjs +0 -325
- package/skills/retro-skill-proposer/SKILL.md +0 -92
- package/skills/schedule-add/SKILL.md +0 -77
- package/skills/setup/SKILL.md +0 -356
- package/skills/webhook-add/SKILL.md +0 -81
- package/src/agent/bridge-stall-watchdog.mjs +0 -337
- package/src/agent/index.mjs +0 -2229
- package/src/agent/orchestrator/ai-wrapped-dispatch.mjs +0 -1010
- package/src/agent/orchestrator/bridge-retry.mjs +0 -220
- package/src/agent/orchestrator/bridge-trace.mjs +0 -601
- package/src/agent/orchestrator/cache-mtime.mjs +0 -58
- package/src/agent/orchestrator/config.mjs +0 -405
- package/src/agent/orchestrator/context/collect.mjs +0 -651
- package/src/agent/orchestrator/dispatch-persist.mjs +0 -549
- package/src/agent/orchestrator/drain-registry.mjs +0 -50
- package/src/agent/orchestrator/explore-validator.mjs +0 -8
- package/src/agent/orchestrator/internal-roles.mjs +0 -118
- package/src/agent/orchestrator/internal-tools.mjs +0 -88
- package/src/agent/orchestrator/jobs.mjs +0 -116
- package/src/agent/orchestrator/mcp/client.mjs +0 -364
- package/src/agent/orchestrator/providers/anthropic-oauth.mjs +0 -1884
- package/src/agent/orchestrator/providers/anthropic.mjs +0 -598
- package/src/agent/orchestrator/providers/gemini.mjs +0 -1530
- package/src/agent/orchestrator/providers/grok-oauth.mjs +0 -779
- package/src/agent/orchestrator/providers/model-catalog.mjs +0 -374
- package/src/agent/orchestrator/providers/openai-compat-stream.mjs +0 -366
- package/src/agent/orchestrator/providers/openai-compat.mjs +0 -1511
- package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +0 -1891
- package/src/agent/orchestrator/providers/openai-oauth.mjs +0 -1456
- package/src/agent/orchestrator/providers/openai-ws.mjs +0 -127
- package/src/agent/orchestrator/providers/registry.mjs +0 -192
- package/src/agent/orchestrator/providers/retry-classifier.mjs +0 -325
- package/src/agent/orchestrator/session/cache/prefetch-cache.mjs +0 -142
- package/src/agent/orchestrator/session/cache/read-cache.mjs +0 -319
- package/src/agent/orchestrator/session/cache/scoped-cache.mjs +0 -361
- package/src/agent/orchestrator/session/loop.mjs +0 -1619
- package/src/agent/orchestrator/session/manager.mjs +0 -1991
- package/src/agent/orchestrator/session/result-classification.mjs +0 -65
- package/src/agent/orchestrator/session/store.mjs +0 -632
- package/src/agent/orchestrator/session/stream-watchdog.mjs +0 -130
- package/src/agent/orchestrator/session/tool-result-offload.mjs +0 -166
- package/src/agent/orchestrator/session/trim.mjs +0 -491
- package/src/agent/orchestrator/smart-bridge/CACHE-SHARD.md +0 -115
- package/src/agent/orchestrator/smart-bridge/bridge-llm.mjs +0 -331
- package/src/agent/orchestrator/smart-bridge/cache-obs.mjs +0 -150
- package/src/agent/orchestrator/smart-bridge/cache-strategy.mjs +0 -228
- package/src/agent/orchestrator/smart-bridge/index.mjs +0 -215
- package/src/agent/orchestrator/smart-bridge/profiles.mjs +0 -37
- package/src/agent/orchestrator/smart-bridge/registry.mjs +0 -348
- package/src/agent/orchestrator/stall-policy.mjs +0 -201
- package/src/agent/orchestrator/tool-loop-guard.mjs +0 -75
- package/src/agent/orchestrator/tools/bash-session.mjs +0 -722
- package/src/agent/orchestrator/tools/builtin/arg-guard.mjs +0 -511
- package/src/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -480
- package/src/agent/orchestrator/tools/builtin/builtin-tools.mjs +0 -256
- package/src/agent/orchestrator/tools/builtin/edit-base-guard.mjs +0 -58
- package/src/agent/orchestrator/tools/builtin/edit-byte-plan.mjs +0 -240
- package/src/agent/orchestrator/tools/builtin/edit-byte-utils.mjs +0 -113
- package/src/agent/orchestrator/tools/builtin/edit-commit.mjs +0 -74
- package/src/agent/orchestrator/tools/builtin/edit-context-utils.mjs +0 -242
- package/src/agent/orchestrator/tools/builtin/edit-diagnostics.mjs +0 -211
- package/src/agent/orchestrator/tools/builtin/edit-engine.mjs +0 -1364
- package/src/agent/orchestrator/tools/builtin/edit-failure-context.mjs +0 -126
- package/src/agent/orchestrator/tools/builtin/edit-hint.mjs +0 -141
- package/src/agent/orchestrator/tools/builtin/edit-match-utils.mjs +0 -194
- package/src/agent/orchestrator/tools/builtin/edit-partial-write.mjs +0 -60
- package/src/agent/orchestrator/tools/builtin/edit-stale-refresh.mjs +0 -168
- package/src/agent/orchestrator/tools/builtin/edit-tool.mjs +0 -173
- package/src/agent/orchestrator/tools/builtin/edit-utf8-guard.mjs +0 -48
- package/src/agent/orchestrator/tools/builtin/fuzzy-match.mjs +0 -99
- package/src/agent/orchestrator/tools/builtin/glob-walk.mjs +0 -193
- package/src/agent/orchestrator/tools/builtin/list-tool.mjs +0 -597
- package/src/agent/orchestrator/tools/builtin/native-edit-runner.mjs +0 -110
- package/src/agent/orchestrator/tools/builtin/notebook-edit-tool.mjs +0 -300
- package/src/agent/orchestrator/tools/builtin/path-diagnostics.mjs +0 -152
- package/src/agent/orchestrator/tools/builtin/read-formatting.mjs +0 -118
- package/src/agent/orchestrator/tools/builtin/read-open.mjs +0 -190
- package/src/agent/orchestrator/tools/builtin/read-single-tool.mjs +0 -728
- package/src/agent/orchestrator/tools/builtin/read-snapshot-runtime.mjs +0 -173
- package/src/agent/orchestrator/tools/builtin/read-streaming.mjs +0 -602
- package/src/agent/orchestrator/tools/builtin/rename-tool.mjs +0 -196
- package/src/agent/orchestrator/tools/builtin/rg-runner.mjs +0 -422
- package/src/agent/orchestrator/tools/builtin/search-builders.mjs +0 -158
- package/src/agent/orchestrator/tools/builtin/search-tool.mjs +0 -869
- package/src/agent/orchestrator/tools/builtin/shell-jobs.mjs +0 -962
- package/src/agent/orchestrator/tools/builtin/shell-runtime.mjs +0 -223
- package/src/agent/orchestrator/tools/builtin/snapshot-store.mjs +0 -206
- package/src/agent/orchestrator/tools/builtin/write-tool.mjs +0 -401
- package/src/agent/orchestrator/tools/builtin.mjs +0 -503
- package/src/agent/orchestrator/tools/code-graph-tool-defs.mjs +0 -24
- package/src/agent/orchestrator/tools/code-graph.mjs +0 -4095
- package/src/agent/orchestrator/tools/cwd-tool.mjs +0 -298
- package/src/agent/orchestrator/tools/destructive-warning.mjs +0 -323
- package/src/agent/orchestrator/tools/edit-normalize.mjs +0 -603
- package/src/agent/orchestrator/tools/graph-binary-fetcher.mjs +0 -154
- package/src/agent/orchestrator/tools/graph-manifest.json +0 -26
- package/src/agent/orchestrator/tools/host-input.mjs +0 -204
- package/src/agent/orchestrator/tools/patch-binary-fetcher.mjs +0 -143
- package/src/agent/orchestrator/tools/patch-manifest.json +0 -26
- package/src/agent/orchestrator/tools/patch-tool-defs.mjs +0 -20
- package/src/agent/orchestrator/tools/patch.mjs +0 -2754
- package/src/agent/orchestrator/tools/progress-message.mjs +0 -118
- package/src/agent/orchestrator/tools/shell-command.mjs +0 -865
- package/src/agent/orchestrator/tools/shell-policy-imports.mjs +0 -7
- package/src/agent/orchestrator/tools/shell-snapshot.mjs +0 -313
- package/src/agent/orchestrator/workflow-store.mjs +0 -93
- package/src/agent/tool-defs.mjs +0 -110
- package/src/channels/backends/discord.mjs +0 -784
- package/src/channels/data/voice-runtime-manifest.json +0 -138
- package/src/channels/index.mjs +0 -3268
- package/src/channels/lib/config.mjs +0 -292
- package/src/channels/lib/drop-trace.mjs +0 -71
- package/src/channels/lib/event-pipeline.mjs +0 -81
- package/src/channels/lib/holidays.mjs +0 -138
- package/src/channels/lib/hook-pipe-server.mjs +0 -822
- package/src/channels/lib/output-forwarder.mjs +0 -765
- package/src/channels/lib/runtime-paths.mjs +0 -552
- package/src/channels/lib/scheduler.mjs +0 -723
- package/src/channels/lib/session-discovery.mjs +0 -103
- package/src/channels/lib/state-file.mjs +0 -68
- package/src/channels/lib/status-snapshot.mjs +0 -219
- package/src/channels/lib/tool-format.mjs +0 -140
- package/src/channels/lib/transcript-discovery.mjs +0 -195
- package/src/channels/lib/voice-runtime-fetcher.mjs +0 -734
- package/src/channels/lib/webhook.mjs +0 -1318
- package/src/channels/tool-defs.mjs +0 -170
- package/src/daemon/host.mjs +0 -118
- package/src/daemon/mcp-transport.mjs +0 -47
- package/src/daemon/session.mjs +0 -100
- package/src/daemon/thin-client.mjs +0 -71
- package/src/daemon/transport.mjs +0 -163
- package/src/gateway/claude-current.mjs +0 -255
- package/src/gateway/oauth-usage.mjs +0 -598
- package/src/gateway/route-meta.mjs +0 -629
- package/src/gateway/server.mjs +0 -713
- package/src/memory/data/runtime-manifest.json +0 -40
- package/src/memory/index.mjs +0 -3332
- package/src/memory/lib/core-memory-store.mjs +0 -330
- package/src/memory/lib/embedding-provider.mjs +0 -269
- package/src/memory/lib/embedding-worker.mjs +0 -323
- package/src/memory/lib/memory-cycle1.mjs +0 -645
- package/src/memory/lib/memory-cycle2.mjs +0 -1284
- package/src/memory/lib/memory-cycle3.mjs +0 -540
- package/src/memory/lib/memory-embed.mjs +0 -299
- package/src/memory/lib/memory-ops-policy.mjs +0 -190
- package/src/memory/lib/memory-recall-store.mjs +0 -638
- package/src/memory/lib/memory.mjs +0 -412
- package/src/memory/lib/pg/adapter.mjs +0 -308
- package/src/memory/lib/pg/process.mjs +0 -360
- package/src/memory/lib/pg/supervisor.mjs +0 -396
- package/src/memory/lib/runtime-fetcher.mjs +0 -458
- package/src/memory/lib/trace-store.mjs +0 -728
- package/src/memory/tool-defs.mjs +0 -79
- package/src/search/index.mjs +0 -1173
- package/src/search/lib/backends/anthropic-oauth.mjs +0 -98
- package/src/search/lib/backends/exa.mjs +0 -50
- package/src/search/lib/backends/firecrawl.mjs +0 -61
- package/src/search/lib/backends/gemini-api.mjs +0 -83
- package/src/search/lib/backends/grok-oauth.mjs +0 -86
- package/src/search/lib/backends/index.mjs +0 -150
- package/src/search/lib/backends/openai-api.mjs +0 -144
- package/src/search/lib/backends/openai-oauth.mjs +0 -102
- package/src/search/lib/backends/openai-web-search.mjs +0 -76
- package/src/search/lib/backends/tavily.mjs +0 -55
- package/src/search/lib/backends/xai-api.mjs +0 -113
- package/src/search/lib/config.mjs +0 -192
- package/src/search/lib/provider-usage.mjs +0 -67
- package/src/search/lib/providers.mjs +0 -47
- package/src/search/lib/search-intent.mjs +0 -109
- package/src/search/lib/setup-handler.mjs +0 -261
- package/src/search/lib/web-tools.mjs +0 -1219
- package/src/search/tool-defs.mjs +0 -83
- package/src/setup/defender-exclusion.mjs +0 -183
- package/src/shared/atomic-file.mjs +0 -436
- package/src/shared/config.mjs +0 -372
- package/src/shared/daemon-recycle.mjs +0 -108
- package/src/shared/disable-claude-builtins.mjs +0 -91
- package/src/shared/err-text.mjs +0 -12
- package/src/shared/llm/http-agent.mjs +0 -123
- package/src/shared/open-url.mjs +0 -62
- package/src/shared/plugin-paths.mjs +0 -58
- package/src/shared/schedules-store.mjs +0 -70
- package/src/shared/seed.mjs +0 -161
- package/src/shared/user-cwd.mjs +0 -225
- package/src/shared/user-data-guard.mjs +0 -244
- package/src/status/aggregator.mjs +0 -584
- package/src/status/server.mjs +0 -413
- package/tools.json +0 -1671
- /package/{defaults → src/defaults}/cycle3-review-prompt.md +0 -0
- /package/{defaults → src/defaults}/memory-promote-prompt.md +0 -0
- /package/{hooks → src/hooks}/lib/permission-rules.cjs +0 -0
- /package/{lib → src/lib}/config-cjs.cjs +0 -0
- /package/{lib → src/lib}/hook-pipe-path.cjs +0 -0
- /package/{lib → src/lib}/mixdog-debug.cjs +0 -0
- /package/{lib → src/lib}/text-utils.cjs +0 -0
- /package/{rules → src/rules}/bridge/42-cycle3-agent.md +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/activity-bus.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/providers/anthropic-betas.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/session/abort-lookup.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/session/cache/post-edit-marks.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/session/cache/scoped-cache-outcome.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/session/cache/util.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/session/read-dedup.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/session/save-session-worker.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/smart-bridge/session-builder.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/bash-policy-scan.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/advisory-lock.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/atomic-write.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/binary-file.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cache-layers.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/cwd-utils.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/device-paths.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/diff-utils.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/fs-reachability.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/grep-formatting.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/hash-utils.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/list-formatting.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/open-config-tool.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-locks.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/path-utils.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-args.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-batch.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-constants.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image-resize.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-image.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-lines.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-mode-tool.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-range-index.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-ranges.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-special-files.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-tool.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/read-windows.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-analysis.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/shell-output.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-helpers.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/snapshot-validation.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/text-stats.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/builtin/windows-roots.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/code-graph-prewarm-worker.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/env-scrub.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-content-cache.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/mutation-planner.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/next-call-utils.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/result-compression.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/shell-exec-policy.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy-danger-target.mjs +0 -0
- /package/src/{agent → runtime/agent}/orchestrator/tools/shell-policy.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/cli-worker-host.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/config-lock.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/event-queue.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/executor.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/format.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/interaction-workflows.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/memory-client.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/session-control.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/settings.mjs +0 -0
- /package/src/{channels → runtime/channels}/lib/whisper-server.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/agent-ipc.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/bridge-trace-queries.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/llm-worker-host.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-cycle.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-extraction.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-maintenance-store.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-recall-id-patch.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-recall-read-query.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-recall-scope-filter.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-retrievers.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-score.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/memory-text-utils.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/model-profile.mjs +0 -0
- /package/src/{memory → runtime/memory}/lib/project-id-resolver.mjs +0 -0
- /package/src/{search → runtime/search}/lib/cache.mjs +0 -0
- /package/src/{search → runtime/search}/lib/formatter.mjs +0 -0
- /package/src/{search → runtime/search}/lib/state.mjs +0 -0
- /package/src/{shared → runtime/shared}/abort-controller.mjs +0 -0
- /package/src/{shared → runtime/shared}/llm/cost.mjs +0 -0
- /package/src/{shared → runtime/shared}/llm/index.mjs +0 -0
- /package/src/{shared → runtime/shared}/llm/pid-cleanup.mjs +0 -0
- /package/src/{shared → runtime/shared}/llm/usage-log.mjs +0 -0
- /package/src/{shared → runtime/shared}/wsl.mjs +0 -0
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import {
|
|
3
|
-
diagnoseFoldTierAmbiguity,
|
|
4
|
-
findActualString,
|
|
5
|
-
formatStageInline,
|
|
6
|
-
} from '../edit-normalize.mjs';
|
|
7
|
-
import { assertEditTargetUtf8 } from './edit-utf8-guard.mjs';
|
|
8
|
-
import { hashText } from './hash-utils.mjs';
|
|
9
|
-
import { normalizeOutputPath } from './path-utils.mjs';
|
|
10
|
-
import { recordReadSnapshot } from './read-snapshot-runtime.mjs';
|
|
11
|
-
import {
|
|
12
|
-
countLiteralOccurrences,
|
|
13
|
-
findCrlfNormalisedMatches,
|
|
14
|
-
findLiteralOccurrenceState,
|
|
15
|
-
formatMatchLines,
|
|
16
|
-
occurrenceLinesCrlf,
|
|
17
|
-
occurrenceLinesPlain,
|
|
18
|
-
} from './edit-match-utils.mjs';
|
|
19
|
-
import { buildStaleEditRecovery } from './edit-failure-context.mjs';
|
|
20
|
-
|
|
21
|
-
function normalizeOldStringEntries(oldStrings) {
|
|
22
|
-
const out = [];
|
|
23
|
-
const src = Array.isArray(oldStrings) ? oldStrings : [];
|
|
24
|
-
for (let i = 0; i < src.length; i++) {
|
|
25
|
-
const entry = src[i];
|
|
26
|
-
if (typeof entry === 'string') {
|
|
27
|
-
out.push({ old_string: entry, replace_all: false, label: `edit ${i}` });
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
if (!entry || typeof entry.old_string !== 'string') continue;
|
|
31
|
-
out.push({
|
|
32
|
-
old_string: entry.old_string,
|
|
33
|
-
replace_all: entry.replace_all === true,
|
|
34
|
-
label: entry.label || `edit ${i}`,
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
return out;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function foldTierAmbiguityError(content, oldString, filePath, editPrefix = '') {
|
|
41
|
-
const amb = diagnoseFoldTierAmbiguity(content, oldString);
|
|
42
|
-
if (!amb || amb.count <= 1) return null;
|
|
43
|
-
const stageNote = formatStageInline(amb.stage);
|
|
44
|
-
return `Error [code 9]: ${editPrefix}old_string found ${amb.count} times in ${filePath}${stageNote};${formatMatchLines(amb.lines, amb.count)} set replace_all:true or provide more unique context`;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function oldStringMatchableOnCurrent(content, oldStr, replaceAll, { filePath, editPrefix }) {
|
|
48
|
-
const literal = findLiteralOccurrenceState(content, oldStr);
|
|
49
|
-
if (literal.count === 1) return { ok: true };
|
|
50
|
-
if (literal.count > 1) {
|
|
51
|
-
if (replaceAll) return { ok: true };
|
|
52
|
-
const count = countLiteralOccurrences(content, oldStr);
|
|
53
|
-
return {
|
|
54
|
-
ok: false,
|
|
55
|
-
error: `Error [code 9]: ${editPrefix}old_string found ${count} times in ${filePath} (exact);${formatMatchLines(occurrenceLinesPlain(content, oldStr), count)} set replace_all:true or provide more unique context`,
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const matchInfo = {};
|
|
60
|
-
const matched = findActualString(content, oldStr, matchInfo) || null;
|
|
61
|
-
if (matched) {
|
|
62
|
-
const occ = findLiteralOccurrenceState(content, matched);
|
|
63
|
-
if (occ.count === 1 || replaceAll) return { ok: true };
|
|
64
|
-
const count = countLiteralOccurrences(content, matched);
|
|
65
|
-
return {
|
|
66
|
-
ok: false,
|
|
67
|
-
error: `Error [code 9]: ${editPrefix}old_string found ${count} times in ${filePath}${formatStageInline(matchInfo.stage)};${formatMatchLines(occurrenceLinesPlain(content, matched), count)} set replace_all:true or provide more unique context`,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const crlfMatch = findCrlfNormalisedMatches(content, oldStr);
|
|
72
|
-
const crlfCount = crlfMatch ? crlfMatch.ranges.length : 0;
|
|
73
|
-
if (crlfCount === 1 || (crlfCount > 1 && replaceAll)) return { ok: true };
|
|
74
|
-
if (crlfCount > 1) {
|
|
75
|
-
return {
|
|
76
|
-
ok: false,
|
|
77
|
-
error: `Error [code 9]: ${editPrefix}old_string found ${crlfCount} times in ${filePath} (via crlf-fold);${formatMatchLines(occurrenceLinesCrlf(content, crlfMatch.ranges), crlfCount)} set replace_all:true or provide more unique context`,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const foldAmb = foldTierAmbiguityError(content, oldStr, filePath, editPrefix);
|
|
82
|
-
if (foldAmb) return { ok: false, error: foldAmb };
|
|
83
|
-
|
|
84
|
-
return { ok: false, notFound: true };
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* When a read snapshot is stale and bytes no longer match the snapshot hash,
|
|
89
|
-
* re-load current disk and allow the edit only if every old_string is
|
|
90
|
-
* matchable on current content (unique unless replace_all). On success,
|
|
91
|
-
* refresh the read snapshot to current bytes.
|
|
92
|
-
*/
|
|
93
|
-
export function attemptStaleEditAutoRefresh({
|
|
94
|
-
fullPath,
|
|
95
|
-
filePath,
|
|
96
|
-
scope = null,
|
|
97
|
-
stat = null,
|
|
98
|
-
readRanges = [],
|
|
99
|
-
oldStrings = [],
|
|
100
|
-
readCache = null,
|
|
101
|
-
recordPreviewSnapshot = false,
|
|
102
|
-
} = {}) {
|
|
103
|
-
if (!fullPath) return null;
|
|
104
|
-
|
|
105
|
-
let rawBuf;
|
|
106
|
-
try {
|
|
107
|
-
rawBuf = readFileSync(fullPath);
|
|
108
|
-
} catch {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
if (!Buffer.isBuffer(rawBuf)) return null;
|
|
112
|
-
|
|
113
|
-
const displayPath = filePath || normalizeOutputPath(fullPath);
|
|
114
|
-
const utf8Err = assertEditTargetUtf8(rawBuf, displayPath);
|
|
115
|
-
if (utf8Err) return { ok: false, error: utf8Err };
|
|
116
|
-
|
|
117
|
-
const content = rawBuf.toString('utf-8');
|
|
118
|
-
const entries = normalizeOldStringEntries(oldStrings);
|
|
119
|
-
if (entries.length === 0) return null;
|
|
120
|
-
|
|
121
|
-
for (const entry of entries) {
|
|
122
|
-
const editPrefix = entries.length > 1 ? `${entry.label} — ` : '';
|
|
123
|
-
const verdict = oldStringMatchableOnCurrent(content, entry.old_string, entry.replace_all, {
|
|
124
|
-
filePath: displayPath,
|
|
125
|
-
editPrefix,
|
|
126
|
-
});
|
|
127
|
-
if (verdict.error) return { ok: false, error: verdict.error };
|
|
128
|
-
if (verdict.notFound) {
|
|
129
|
-
// Friction fix (Codex-style): the snapshot is stale AND the
|
|
130
|
-
// old_string is absent from CURRENT disk bytes. Don't force a
|
|
131
|
-
// wasteful re-read turn — report a plain not-found against current
|
|
132
|
-
// content (code 8) with recovery context, so the model can correct
|
|
133
|
-
// the string in place without a separate Read call. Commit-time
|
|
134
|
-
// race protection (validatePreparedEditBase / atomicWrite) is
|
|
135
|
-
// unchanged.
|
|
136
|
-
const recovery = buildStaleEditRecovery({
|
|
137
|
-
fullPath,
|
|
138
|
-
scope,
|
|
139
|
-
oldStrings: entries,
|
|
140
|
-
recordPreviewSnapshot,
|
|
141
|
-
});
|
|
142
|
-
return {
|
|
143
|
-
ok: false,
|
|
144
|
-
error: `Error [code 8]: old_string not found in ${displayPath} (file changed since read; matched against current content)${recovery}`,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
try {
|
|
150
|
-
recordReadSnapshot(fullPath, stat || undefined, scope, {
|
|
151
|
-
source: 'stale_auto_refresh',
|
|
152
|
-
contentHash: hashText(content),
|
|
153
|
-
ranges: Array.isArray(readRanges) ? readRanges : [],
|
|
154
|
-
replaceExisting: true,
|
|
155
|
-
});
|
|
156
|
-
} catch {
|
|
157
|
-
return null;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
if (readCache && typeof readCache.seedBuffer === 'function') {
|
|
161
|
-
readCache.seedBuffer(fullPath, rawBuf);
|
|
162
|
-
} else if (readCache) {
|
|
163
|
-
readCache.rawBuf = rawBuf;
|
|
164
|
-
readCache.content = content;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
return { ok: true, content, rawBuf };
|
|
168
|
-
}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
appendMutationPlanFailure,
|
|
3
|
-
executeMutationPlan,
|
|
4
|
-
isMutationPlanRoutable,
|
|
5
|
-
planEditMutationRoute,
|
|
6
|
-
} from '../mutation-planner.mjs';
|
|
7
|
-
import { resolveAgainstCwd, normalizeInputPath } from './path-utils.mjs';
|
|
8
|
-
import { normalizeErrorMessage } from './path-diagnostics.mjs';
|
|
9
|
-
import { assertPathsReachable } from './fs-reachability.mjs';
|
|
10
|
-
import { isUncPath, isWindowsDevicePath, hasUnsafeWin32Component, isBlockedDevicePath } from './device-paths.mjs';
|
|
11
|
-
|
|
12
|
-
function editItemsFromBatchArgs(args) {
|
|
13
|
-
return args.edits.map((edit) => ({
|
|
14
|
-
path: edit?.path || args.path,
|
|
15
|
-
old_string: edit?.old_string,
|
|
16
|
-
new_string: edit?.new_string,
|
|
17
|
-
replace_all: edit?.replace_all,
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function editItemFromSingleArgs(args) {
|
|
22
|
-
return {
|
|
23
|
-
path: args.path,
|
|
24
|
-
old_string: args.old_string,
|
|
25
|
-
new_string: args.new_string,
|
|
26
|
-
replace_all: args.replace_all,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async function maybeExecutePlannedMutation(items, workDir, readStateScope, options, routeOptions) {
|
|
31
|
-
const plan = planEditMutationRoute(items, routeOptions);
|
|
32
|
-
if (!isMutationPlanRoutable(plan)) return null;
|
|
33
|
-
return executeMutationPlan(plan, { workDir, readStateScope, options });
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Strip a trailing line coordinate (`:N`, `:N-M`, `#LN`) using a PURE regex —
|
|
37
|
-
// no filesystem access. The real edit path does precise line-vs-colon
|
|
38
|
-
// disambiguation later (which needs FS); the reachability preflight only needs
|
|
39
|
-
// a statable base path, and using existsSync here would itself block on a dead
|
|
40
|
-
// mount BEFORE the async reachability check could run. A Windows drive colon
|
|
41
|
-
// (`C:\...`) is not a trailing `:digits`, so it is unaffected.
|
|
42
|
-
function stripLineCoordForReach(p) {
|
|
43
|
-
return String(p)
|
|
44
|
-
.replace(/#L\d+(?:-L?\d+)?(?:\b.*)?$/i, '')
|
|
45
|
-
.replace(/:\d+(?:-\d+)?(?::.*)?$/, '');
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Reject UNC/device/ADS/blocked paths BEFORE the reachability stat — statting
|
|
49
|
-
// a UNC/device path would itself trigger the network/raw-device access (NTLM
|
|
50
|
-
// leak) the edit engine's own guards prevent. edit-engine guards run only
|
|
51
|
-
// after this preflight, so we mirror them here to avoid the stat entirely.
|
|
52
|
-
function _guardedEditError(p) {
|
|
53
|
-
if (isUncPath(p)) return `Error: cannot edit UNC / SMB path (network credential leak risk): ${p}`;
|
|
54
|
-
if (isWindowsDevicePath(p)) return `Error: cannot edit Windows device path (reserved name or raw-device namespace): ${p}`;
|
|
55
|
-
if (hasUnsafeWin32Component(p)) return `Error: cannot edit Windows path with trailing dot/space or NTFS ADS suffix (bypasses device guard): ${p}`;
|
|
56
|
-
if (isBlockedDevicePath(p)) return `Error: cannot edit device file: ${p}`;
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async function assertEditTargetsReachable(args, workDir) {
|
|
61
|
-
const fullPaths = [];
|
|
62
|
-
const seen = new Set();
|
|
63
|
-
let guardErr = null;
|
|
64
|
-
const addPath = (raw) => {
|
|
65
|
-
if (typeof raw !== 'string' || !raw) return;
|
|
66
|
-
// normalizeInputPath FIRST (FS-pure: trim/~/win32-mount/NFC) so we stat
|
|
67
|
-
// the same path the edit engine later opens; then strip line coord.
|
|
68
|
-
const norm = stripLineCoordForReach(normalizeInputPath(raw));
|
|
69
|
-
if (!norm) return;
|
|
70
|
-
const fullPath = resolveAgainstCwd(norm, workDir);
|
|
71
|
-
if (seen.has(fullPath)) return;
|
|
72
|
-
seen.add(fullPath);
|
|
73
|
-
// Guarded paths are rejected (not stat'd) — see _guardedEditError.
|
|
74
|
-
if (!guardErr) guardErr = _guardedEditError(norm) || _guardedEditError(fullPath);
|
|
75
|
-
fullPaths.push(fullPath);
|
|
76
|
-
};
|
|
77
|
-
if (Array.isArray(args.edits) && args.edits.length > 0) {
|
|
78
|
-
for (const item of editItemsFromBatchArgs(args)) addPath(item.path);
|
|
79
|
-
} else {
|
|
80
|
-
addPath(args.path);
|
|
81
|
-
}
|
|
82
|
-
if (guardErr) return guardErr;
|
|
83
|
-
try {
|
|
84
|
-
await assertPathsReachable(fullPaths);
|
|
85
|
-
} catch (err) {
|
|
86
|
-
return `Error: ${normalizeErrorMessage(err instanceof Error ? err.message : String(err))}`;
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export async function executeEditTool(args, workDir, readStateScope, executeChildBuiltinTool, options = {}, handlers = {}) {
|
|
92
|
-
const result = await _executeEditToolImpl(args, workDir, readStateScope, executeChildBuiltinTool, options, handlers);
|
|
93
|
-
// ② completion progress (claude "Found N" parity). Best-effort, no-op when
|
|
94
|
-
// onProgress is absent (no progressToken). Never throws — only emits on a
|
|
95
|
-
// successful edit (an "Error:" body is left to the tool result alone).
|
|
96
|
-
if (typeof options?.onProgress === 'function') {
|
|
97
|
-
try {
|
|
98
|
-
const _body = String(result);
|
|
99
|
-
if (!/^Error[\s[]/.test(_body)) {
|
|
100
|
-
const _rep = /\((\d+) replacements applied\)/.exec(_body);
|
|
101
|
-
if (_rep) options.onProgress(`edited ${_rep[1]} replacements`);
|
|
102
|
-
else {
|
|
103
|
-
const _one = /^Edited:\s+(.+?)(?:\s+\((?:native|\d+)\))?$/m.exec(_body);
|
|
104
|
-
if (_one) options.onProgress(`edited ${_one[1].trim()}`);
|
|
105
|
-
else {
|
|
106
|
-
const _ok = (_body.match(/^OK\s/gm) || []).length;
|
|
107
|
-
if (_ok) options.onProgress(`edited ${_ok} files`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
} catch { /* best-effort */ }
|
|
112
|
-
}
|
|
113
|
-
return result;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
async function _executeEditToolImpl(args, workDir, readStateScope, executeChildBuiltinTool, options = {}, handlers = {}) {
|
|
117
|
-
if (typeof args.file_path === 'string' && !args.path) args.path = args.file_path;
|
|
118
|
-
if (Array.isArray(args.edits)) {
|
|
119
|
-
for (const edit of args.edits) {
|
|
120
|
-
if (edit && typeof edit.file_path === 'string' && !edit.path) edit.path = edit.file_path;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (Array.isArray(args.edits) && args.edits.length > 0) {
|
|
125
|
-
const items = editItemsFromBatchArgs(args);
|
|
126
|
-
const paths = new Set(items.map((item) => item.path).filter(Boolean));
|
|
127
|
-
if (paths.size === 0) return 'Error: each edit requires a path (either on the item or at top level)';
|
|
128
|
-
|
|
129
|
-
const reachErr = await assertEditTargetsReachable(args, workDir);
|
|
130
|
-
if (reachErr) return reachErr;
|
|
131
|
-
|
|
132
|
-
const planned = await maybeExecutePlannedMutation(items, workDir, readStateScope, options);
|
|
133
|
-
if (planned?.ok) return planned.text;
|
|
134
|
-
|
|
135
|
-
let result;
|
|
136
|
-
if (paths.size === 1) {
|
|
137
|
-
const onePath = [...paths][0];
|
|
138
|
-
result = await handlers.runMultiEdit({
|
|
139
|
-
path: onePath,
|
|
140
|
-
edits: items.map(({ path: _path, ...rest }) => rest),
|
|
141
|
-
}, workDir, readStateScope, null, options);
|
|
142
|
-
} else {
|
|
143
|
-
result = await handlers.runBatchEdit({
|
|
144
|
-
edits: items.map((item) => ({
|
|
145
|
-
path: item.path,
|
|
146
|
-
old_string: item.old_string,
|
|
147
|
-
new_string: item.new_string,
|
|
148
|
-
replace_all: item.replace_all,
|
|
149
|
-
})),
|
|
150
|
-
}, workDir, readStateScope, null, executeChildBuiltinTool, options);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
const fallback = await maybeExecutePlannedMutation(items, workDir, readStateScope, options, {
|
|
154
|
-
priorResult: result,
|
|
155
|
-
});
|
|
156
|
-
if (fallback?.ok) return fallback.text;
|
|
157
|
-
return appendMutationPlanFailure(appendMutationPlanFailure(result, planned), fallback);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const item = editItemFromSingleArgs(args);
|
|
161
|
-
const reachErr = await assertEditTargetsReachable(args, workDir);
|
|
162
|
-
if (reachErr) return reachErr;
|
|
163
|
-
|
|
164
|
-
const planned = await maybeExecutePlannedMutation([item], workDir, readStateScope, options);
|
|
165
|
-
if (planned?.ok) return planned.text;
|
|
166
|
-
|
|
167
|
-
const result = await handlers.runSingleEdit(args, workDir, readStateScope, options);
|
|
168
|
-
const fallback = await maybeExecutePlannedMutation([item], workDir, readStateScope, options, {
|
|
169
|
-
priorResult: result,
|
|
170
|
-
});
|
|
171
|
-
if (fallback?.ok) return fallback.text;
|
|
172
|
-
return appendMutationPlanFailure(appendMutationPlanFailure(result, planned), fallback);
|
|
173
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { isValidUtf8Buffer } from '../mutation-content-cache.mjs';
|
|
2
|
-
|
|
3
|
-
// Shared guard. Centralises the UTF-8 check so every byte-exact write
|
|
4
|
-
// path (native-exact dispatch, single-edit byte-exact buffer,
|
|
5
|
-
// multi-edit byte-exact buffer, AND the stale-auto-refresh path)
|
|
6
|
-
// refuses non-UTF-8 targets with identical wording. Without a single
|
|
7
|
-
// shared hook the stale-refresh path read with 'utf-8' encoding,
|
|
8
|
-
// silently replacing invalid sequences with U+FFFD and bypassing the
|
|
9
|
-
// downstream guards that only saw the re-encoded decoded text.
|
|
10
|
-
export function assertEditTargetUtf8(rawBuf, filePath) {
|
|
11
|
-
if (isValidUtf8Buffer(rawBuf)) return null;
|
|
12
|
-
// UTF-16 BOM detection BEFORE the generic message: a UTF-16 file is a
|
|
13
|
-
// recognizable, recoverable case (read decodes it; write preserves the
|
|
14
|
-
// BOM round-trip) — calling it "Shift-JIS/Latin-1/binary mix" sends the
|
|
15
|
-
// caller down the wrong recovery path.
|
|
16
|
-
if (rawBuf.length >= 2 && rawBuf[0] === 0xFF && rawBuf[1] === 0xFE) {
|
|
17
|
-
return `Error: file is UTF-16LE (BOM FF FE) — edit only supports UTF-8; use write (preserves UTF-16) or convert the file. Path: ${filePath}`;
|
|
18
|
-
}
|
|
19
|
-
if (rawBuf.length >= 2 && rawBuf[0] === 0xFE && rawBuf[1] === 0xFF) {
|
|
20
|
-
return `Error: file is UTF-16BE (BOM FE FF) — edit only supports UTF-8; convert the file first. Path: ${filePath}`;
|
|
21
|
-
}
|
|
22
|
-
// Strict manual UTF-8 walk for Node <18 / environments where
|
|
23
|
-
// Buffer.isUtf8 is unavailable. Rejects overlong sequences,
|
|
24
|
-
// surrogates, out-of-range code points, and 5/6-byte sequences
|
|
25
|
-
// (Unicode §3.9 Table 3-7).
|
|
26
|
-
let idx2 = 0;
|
|
27
|
-
while (idx2 < rawBuf.length) {
|
|
28
|
-
const b0 = rawBuf[idx2];
|
|
29
|
-
if (b0 < 0x80) { idx2++; continue; }
|
|
30
|
-
let seqLen = 0;
|
|
31
|
-
if ((b0 & 0xE0) === 0xC0) seqLen = 2;
|
|
32
|
-
else if ((b0 & 0xF0) === 0xE0) seqLen = 3;
|
|
33
|
-
else if ((b0 & 0xF8) === 0xF0) seqLen = 4;
|
|
34
|
-
else return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
35
|
-
if (idx2 + seqLen > rawBuf.length) return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
36
|
-
if (seqLen === 2 && b0 <= 0xC1) return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
37
|
-
const b1 = rawBuf[idx2 + 1];
|
|
38
|
-
if (seqLen === 3 && b0 === 0xE0 && b1 < 0xA0) return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
39
|
-
if (seqLen === 3 && b0 === 0xED && b1 >= 0xA0) return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
40
|
-
if (seqLen === 4 && b0 === 0xF0 && b1 < 0x90) return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
41
|
-
if (seqLen === 4 && (b0 > 0xF4 || (b0 === 0xF4 && b1 >= 0x90))) return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
42
|
-
for (let k = 1; k < seqLen; k++) {
|
|
43
|
-
if ((rawBuf[idx2 + k] & 0xC0) !== 0x80) return `Error: file appears to be non-UTF-8 (Shift-JIS/Latin-1/binary mix). Edit aborted to prevent silent corruption. Path: ${filePath}`;
|
|
44
|
-
}
|
|
45
|
-
idx2 += seqLen;
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
// fuzzy-match.mjs — lightweight subsequence fuzzy scorer for filename / path
|
|
2
|
-
// search (codex file-search / nucleo style, in JS). Returns a score where a
|
|
3
|
-
// higher value is a better match, or null when the query is not a subsequence
|
|
4
|
-
// of the candidate.
|
|
5
|
-
//
|
|
6
|
-
// Scoring favors, in rough order of weight:
|
|
7
|
-
// - matches at the START of the basename (last path segment)
|
|
8
|
-
// - matches at a word boundary (/, \, _, -, ., space, or camelCase hump)
|
|
9
|
-
// - contiguous runs of matched characters
|
|
10
|
-
// - exact-case hits (small tie-break)
|
|
11
|
-
// - shorter / earlier candidates (mild brevity + earliness pull)
|
|
12
|
-
//
|
|
13
|
-
// Matching is case-insensitive. The query is matched as an ordered subsequence
|
|
14
|
-
// (the chars must appear in order but need not be contiguous), which is what
|
|
15
|
-
// lets "edeng" find "edit-engine.mjs".
|
|
16
|
-
|
|
17
|
-
function isBoundaryChar(ch) {
|
|
18
|
-
return ch === '/' || ch === '\\' || ch === '_' || ch === '-' || ch === '.' || ch === ' ';
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// A camelCase hump (lower/digit followed by upper) is also a word boundary.
|
|
22
|
-
function isHump(prevCh, ch) {
|
|
23
|
-
return prevCh !== undefined
|
|
24
|
-
&& /[a-z0-9]/.test(prevCh)
|
|
25
|
-
&& /[A-Z]/.test(ch);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* @param {string} query user query (partial name)
|
|
30
|
-
* @param {string} str candidate path (relative)
|
|
31
|
-
* @returns {number|null} score, or null if `query` is not a subsequence
|
|
32
|
-
*/
|
|
33
|
-
export function fuzzyScore(query, str) {
|
|
34
|
-
if (!query) return 0;
|
|
35
|
-
const q = query.toLowerCase();
|
|
36
|
-
const s = str.toLowerCase();
|
|
37
|
-
const qlen = q.length;
|
|
38
|
-
const slen = s.length;
|
|
39
|
-
if (qlen === 0) return 0;
|
|
40
|
-
if (qlen > slen) return null;
|
|
41
|
-
|
|
42
|
-
const lastSep = Math.max(str.lastIndexOf('/'), str.lastIndexOf('\\'));
|
|
43
|
-
|
|
44
|
-
let score = 0;
|
|
45
|
-
let si = 0;
|
|
46
|
-
let prevMatch = -2;
|
|
47
|
-
let firstMatchIdx = -1;
|
|
48
|
-
|
|
49
|
-
for (let qi = 0; qi < qlen; qi++) {
|
|
50
|
-
const qc = q[qi];
|
|
51
|
-
let found = -1;
|
|
52
|
-
for (let k = si; k < slen; k++) {
|
|
53
|
-
if (s[k] === qc) { found = k; break; }
|
|
54
|
-
}
|
|
55
|
-
if (found === -1) return null;
|
|
56
|
-
if (firstMatchIdx === -1) firstMatchIdx = found;
|
|
57
|
-
|
|
58
|
-
score += 1; // base point per matched char
|
|
59
|
-
|
|
60
|
-
if (found === prevMatch + 1) score += 5; // contiguous run
|
|
61
|
-
|
|
62
|
-
const prevCh = found > 0 ? str[found - 1] : undefined;
|
|
63
|
-
if (prevCh === undefined || isBoundaryChar(prevCh) || isHump(prevCh, str[found])) {
|
|
64
|
-
score += 8; // word-boundary start
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (str[found] === query[qi]) score += 1; // exact-case tie-break
|
|
68
|
-
|
|
69
|
-
prevMatch = found;
|
|
70
|
-
si = found + 1;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Matches that begin inside the basename (after the last separator) are far
|
|
74
|
-
// more relevant than ones buried in directory components.
|
|
75
|
-
if (firstMatchIdx > lastSep) score += 10;
|
|
76
|
-
|
|
77
|
-
// Mild pulls: shorter candidates and earlier first matches rank higher.
|
|
78
|
-
score -= Math.floor(slen / 16);
|
|
79
|
-
score -= Math.floor(firstMatchIdx / 8);
|
|
80
|
-
|
|
81
|
-
return score;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Rank candidates by fuzzy score against `query`, dropping non-matches.
|
|
86
|
-
* @param {string} query
|
|
87
|
-
* @param {Array<{path:string}>} items each must expose a `path` string
|
|
88
|
-
* @param {number} [limit]
|
|
89
|
-
* @returns {Array<{item:object, score:number}>} sorted desc, then path asc
|
|
90
|
-
*/
|
|
91
|
-
export function fuzzyRank(query, items, limit = 0) {
|
|
92
|
-
const scored = [];
|
|
93
|
-
for (const item of items) {
|
|
94
|
-
const sc = fuzzyScore(query, item.path);
|
|
95
|
-
if (sc !== null) scored.push({ item, score: sc });
|
|
96
|
-
}
|
|
97
|
-
scored.sort((a, b) => (b.score - a.score) || (a.item.path < b.item.path ? -1 : a.item.path > b.item.path ? 1 : 0));
|
|
98
|
-
return limit > 0 ? scored.slice(0, limit) : scored;
|
|
99
|
-
}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
import { readdir } from 'fs/promises';
|
|
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
|
-
export const MAX_WALK_ENTRIES = 200_000;
|
|
129
|
-
|
|
130
|
-
// Unified directory walk used by list / tree / find_files. The visitor
|
|
131
|
-
// callback owns the "should I record this entry?" decision; returning
|
|
132
|
-
// literal false aborts the whole walk.
|
|
133
|
-
// `onWarn(dir, err)` (optional) is invoked for any readdir failure so
|
|
134
|
-
// callers can surface skipped paths instead of silently dropping them.
|
|
135
|
-
export async function walkDir(root, { hidden = false, maxDepth = Infinity, visit, sort, excludeDirNames, onWarn, maxEntries = MAX_WALK_ENTRIES, signal } = {}) {
|
|
136
|
-
// Windows filesystems are case-insensitive — match exclusion names the
|
|
137
|
-
// same way so e.g. Node_Modules is pruned like node_modules.
|
|
138
|
-
const _exclCI = process.platform === 'win32' && excludeDirNames && excludeDirNames.size > 0
|
|
139
|
-
? new Set([...excludeDirNames].map((n) => n.toLowerCase()))
|
|
140
|
-
: null;
|
|
141
|
-
let truncated = false;
|
|
142
|
-
const cap = maxEntries;
|
|
143
|
-
let entriesVisited = 0;
|
|
144
|
-
const _walk = async (dir, depth) => {
|
|
145
|
-
if (signal?.aborted) {
|
|
146
|
-
truncated = true;
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
if (entriesVisited >= cap) {
|
|
150
|
-
truncated = true;
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
|
-
if (depth > maxDepth) return true;
|
|
154
|
-
let entries;
|
|
155
|
-
try { entries = await readdir(dir, { withFileTypes: true }); }
|
|
156
|
-
catch (err) {
|
|
157
|
-
if (typeof onWarn === 'function') {
|
|
158
|
-
try { onWarn(dir, err); } catch { /* warning sink must not abort */ }
|
|
159
|
-
}
|
|
160
|
-
return true;
|
|
161
|
-
}
|
|
162
|
-
if (!hidden) entries = entries.filter(e => !e.name.startsWith('.'));
|
|
163
|
-
if (excludeDirNames && excludeDirNames.size > 0) {
|
|
164
|
-
entries = entries.filter(e => !(e.isDirectory() && (_exclCI
|
|
165
|
-
? _exclCI.has(e.name.toLowerCase())
|
|
166
|
-
: excludeDirNames.has(e.name))));
|
|
167
|
-
}
|
|
168
|
-
if (sort) entries.sort(sort);
|
|
169
|
-
const total = entries.length;
|
|
170
|
-
for (let i = 0; i < total; i++) {
|
|
171
|
-
if (signal?.aborted) {
|
|
172
|
-
truncated = true;
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
if (entriesVisited >= cap) {
|
|
176
|
-
truncated = true;
|
|
177
|
-
return false;
|
|
178
|
-
}
|
|
179
|
-
entriesVisited += 1;
|
|
180
|
-
const ent = entries[i];
|
|
181
|
-
const entPath = join(dir, ent.name);
|
|
182
|
-
const ctx = { depth, index: i, total, isLast: i === total - 1 };
|
|
183
|
-
const cont = visit(ent, entPath, ctx);
|
|
184
|
-
if (cont === false) return false;
|
|
185
|
-
if (ent.isDirectory()) {
|
|
186
|
-
if ((await _walk(entPath, depth + 1)) === false) return false;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return true;
|
|
190
|
-
};
|
|
191
|
-
await _walk(root, 1);
|
|
192
|
-
return { truncated, entriesVisited };
|
|
193
|
-
}
|