mixdog 0.7.17 → 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/cost.mjs +66 -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 -112
- 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 -558
- package/bin/statusline.mjs +0 -615
- package/bun.lock +0 -927
- package/commands/config.md +0 -16
- package/commands/doctor.md +0 -13
- 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 -1479
- 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 -23
- 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/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/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 -1448
- 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 -82
- 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 -201
- package/scripts/webhook-selfheal-smoke.mjs +0 -27
- package/scripts/write-overwrite-guard-smoke.mjs +0 -56
- package/server-main.mjs +0 -3109
- 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 -2138
- 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 -583
- 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 -1881
- package/src/agent/orchestrator/providers/anthropic.mjs +0 -594
- 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 -1478
- 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 -455
- 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 -103
- 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 -517
- 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/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/cost.mjs +0 -66
- 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 -136
- 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 -1653
- /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/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,256 +0,0 @@
|
|
|
1
|
-
// --- Tool definitions for external models ---
|
|
2
|
-
//
|
|
3
|
-
// Ordered to match the previous hand-maintained tools.json entries
|
|
4
|
-
// (read / edit / write / bash / grep / glob) so
|
|
5
|
-
// build-tools-manifest reproduces the legacy ordering.
|
|
6
|
-
// CANONICAL SOURCE for all tool annotations (compressible, readOnlyHint,
|
|
7
|
-
// destructiveHint, etc.). tools.json is GENERATED from this array by
|
|
8
|
-
// dev/scripts/build-tools-manifest.mjs — do not edit annotations in tools.json
|
|
9
|
-
// directly. To verify sync: node dev/scripts/check-tools-sync.mjs
|
|
10
|
-
export const BUILTIN_TOOLS = [
|
|
11
|
-
{
|
|
12
|
-
name: 'read',
|
|
13
|
-
title: 'Mixdog Read',
|
|
14
|
-
annotations: { title: 'Mixdog Read', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false, compressible: false },
|
|
15
|
-
description: 'Read file contents (path required). symbol=NAME = whole definition; offset/limit or line/context = window; mode/max_lines = whole-file glance. Batch all regions of a file in one call. Output is the file text verbatim (line-number prefix only, no character escaping) — a \\uXXXX you see is literally in the file.',
|
|
16
|
-
inputSchema: {
|
|
17
|
-
type: 'object',
|
|
18
|
-
properties: {
|
|
19
|
-
path: { type: 'string' },
|
|
20
|
-
offset: { type: 'number', description: 'Start line for a windowed read (1-based).' },
|
|
21
|
-
limit: { type: 'number', description: 'Max lines to read (default 2000; full:true uncaps).' },
|
|
22
|
-
line: { type: 'number' },
|
|
23
|
-
context: { type: 'number', description: 'Lines around `line` (default 20).' },
|
|
24
|
-
pages: { type: 'string' },
|
|
25
|
-
symbol: { type: 'string', description: 'Read a whole symbol body (function/class/const) via the code graph.' },
|
|
26
|
-
language: { type: 'string', description: 'Language hint for symbol resolution.' },
|
|
27
|
-
mode: { type: 'string', enum: ['head', 'tail', 'count', 'summary', 'hex'], description: 'Whole-file glance: head/tail (first/last n), count (line/word/byte stats), summary (stats+head), hex (binary preview). For a window use offset/limit.' },
|
|
28
|
-
n: { type: 'number', description: 'Line count for mode head/tail/summary (default 20).' },
|
|
29
|
-
full: { type: 'boolean', description: 'Default false. true = return whole file (bypass 2000-line cap; still byte-capped).' },
|
|
30
|
-
max_lines: { type: 'number', description: 'Whole-file read: cap output to ~N lines. Ignored with offset/limit/mode.' },
|
|
31
|
-
budget: { type: 'string', enum: ['compact'], description: 'Auto-shrink: whole-file -> count; line -> context<=20; range -> limit<=120.' },
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
name: 'edit',
|
|
37
|
-
title: 'Mixdog Edit',
|
|
38
|
-
annotations: { title: 'Mixdog Edit', readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
39
|
-
description: 'Exact-string editor for small known substitutions; for large or structural changes prefer apply_patch. operation: replace (default) | notebook | rename.',
|
|
40
|
-
inputSchema: {
|
|
41
|
-
type: 'object',
|
|
42
|
-
properties: {
|
|
43
|
-
operation: { type: 'string', enum: ['replace', 'notebook', 'rename'], description: 'Edit mode: "replace" (default, exact text edit), "notebook" (Jupyter cell edit), or "rename" (symbol rename).' },
|
|
44
|
-
path: { type: 'string' },
|
|
45
|
-
old_string: { type: 'string' },
|
|
46
|
-
new_string: { type: 'string' },
|
|
47
|
-
replace_all: { type: 'boolean' },
|
|
48
|
-
edits: {
|
|
49
|
-
type: 'array',
|
|
50
|
-
items: {
|
|
51
|
-
type: 'object',
|
|
52
|
-
properties: {
|
|
53
|
-
path: { type: 'string' },
|
|
54
|
-
old_string: { type: 'string' },
|
|
55
|
-
new_string: { type: 'string' },
|
|
56
|
-
replace_all: { type: 'boolean' },
|
|
57
|
-
},
|
|
58
|
-
required: ['old_string', 'new_string'],
|
|
59
|
-
additionalProperties: false,
|
|
60
|
-
},
|
|
61
|
-
minItems: 1,
|
|
62
|
-
description: 'Batch replacements (operation:"replace").',
|
|
63
|
-
},
|
|
64
|
-
notebook_path: { type: 'string', description: 'operation:"notebook" — path to the .ipynb notebook to edit.' },
|
|
65
|
-
cell_id: { type: 'string', description: 'operation:"notebook" — target cell: a real cell.id or a cell-N index. For insert, the new cell is placed after this cell (or at the start if omitted).' },
|
|
66
|
-
new_source: { type: 'string', description: 'operation:"notebook" — new source for the cell (not required for delete).' },
|
|
67
|
-
cell_type: { type: 'string', enum: ['code', 'markdown'], description: 'operation:"notebook" — cell type. Required for insert; otherwise defaults to the current cell type.' },
|
|
68
|
-
edit_mode: { type: 'string', enum: ['replace', 'insert', 'delete'], description: 'operation:"notebook" — replace (default), insert, or delete.' },
|
|
69
|
-
symbol: { type: 'string', description: 'operation:"rename" — identifier to rename.' },
|
|
70
|
-
new_name: { type: 'string', description: 'operation:"rename" — new identifier.' },
|
|
71
|
-
file: { type: 'string', description: 'operation:"rename" — optional file to scope the reference search.' },
|
|
72
|
-
apply: { type: 'boolean', description: 'operation:"rename" — default false (preview). Set true to perform the rename.' },
|
|
73
|
-
},
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
name: 'write',
|
|
78
|
-
title: 'Mixdog Write',
|
|
79
|
-
annotations: { title: 'Mixdog Write', readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: false },
|
|
80
|
-
description: 'Write a whole file — new, or a full rewrite of one already read. For partial edits use apply_patch; never overwrite an unread file.',
|
|
81
|
-
inputSchema: {
|
|
82
|
-
type: 'object',
|
|
83
|
-
properties: {
|
|
84
|
-
path: { type: 'string' },
|
|
85
|
-
content: { type: 'string' },
|
|
86
|
-
allow_unread_overwrite: { type: 'boolean', description: 'Default false. true = skip ONLY the read-before-overwrite snapshot gate when you already know the full intended content; all other write safety checks still apply.' },
|
|
87
|
-
writes: {
|
|
88
|
-
type: 'array',
|
|
89
|
-
items: {
|
|
90
|
-
type: 'object',
|
|
91
|
-
properties: {
|
|
92
|
-
path: { type: 'string' },
|
|
93
|
-
content: { type: 'string' },
|
|
94
|
-
},
|
|
95
|
-
required: ['path', 'content'],
|
|
96
|
-
additionalProperties: false,
|
|
97
|
-
},
|
|
98
|
-
minItems: 1,
|
|
99
|
-
description: 'Batch writes.',
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
name: 'diagnostics',
|
|
106
|
-
title: 'Mixdog Diagnostics',
|
|
107
|
-
annotations: { title: 'Mixdog Diagnostics', readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true, compressible: true },
|
|
108
|
-
description: 'Run the matching type/lint checker under path (tsc/eslint/ruff/etc.). Default cwd; no LSP.',
|
|
109
|
-
inputSchema: {
|
|
110
|
-
type: 'object',
|
|
111
|
-
properties: {
|
|
112
|
-
path: { type: 'string', description: 'File or directory to diagnose. Defaults to cwd.' },
|
|
113
|
-
},
|
|
114
|
-
required: [],
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
name: 'open_config',
|
|
119
|
-
title: 'Open Config UI',
|
|
120
|
-
annotations: { title: 'Open Config UI', readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
121
|
-
description: 'Open the mixdog settings UI (Providers + Presets) in the browser. Starts the resident config server if needed and returns the UI URL. No params.',
|
|
122
|
-
inputSchema: { type: 'object', properties: {} },
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
name: 'bash',
|
|
126
|
-
title: 'Mixdog Shell',
|
|
127
|
-
annotations: { title: 'Mixdog Shell', readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true, compressible: true },
|
|
128
|
-
description: "Shell for git/build/test/run. ALWAYS set `shell` explicitly ('bash' = POSIX via Git Bash, 'powershell' = PS cmdlets); omitting defaults to the OS shell (Windows = PowerShell, POSIX = /bin/sh) and mis-parses the other syntax. run_in_background works for both shells, including Windows shell:'bash' (Git Bash). Single shell entry point; not for inline code you were asked to return.",
|
|
129
|
-
inputSchema: {
|
|
130
|
-
type: 'object',
|
|
131
|
-
properties: {
|
|
132
|
-
command: { type: 'string' },
|
|
133
|
-
cwd: { type: 'string' },
|
|
134
|
-
timeout: { type: 'number', description: 'Timeout in ms, or seconds when <=600.' },
|
|
135
|
-
merge_stderr: { type: 'boolean' },
|
|
136
|
-
run_in_background: { type: 'boolean' },
|
|
137
|
-
persistent: { type: 'boolean' },
|
|
138
|
-
session_id: { type: 'string' },
|
|
139
|
-
create: { type: 'boolean', description: 'Allow creating a new persistent session for an explicit session_id.' },
|
|
140
|
-
close: { type: 'boolean' },
|
|
141
|
-
shell: { type: 'string', enum: ['bash', 'powershell'], description: "Force the shell. On Windows: 'bash' runs the command through Git Bash (POSIX syntax), 'powershell' forces PowerShell. On POSIX: 'powershell' resolves pwsh if installed (errors if absent); 'bash' is /bin/sh (already the default). Always set this explicitly; omitting uses the OS default (PowerShell on Windows), where POSIX syntax fails to parse." },
|
|
142
|
-
},
|
|
143
|
-
required: ['command'],
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
name: 'job_wait',
|
|
148
|
-
title: 'Background Job Control',
|
|
149
|
-
annotations: { title: 'Background Job Control', readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: false },
|
|
150
|
-
description: 'Control a bash run_in_background job by job_id. action: wait (default) | peek | kill. Not for bridge_*/sess_* ids.',
|
|
151
|
-
inputSchema: {
|
|
152
|
-
type: 'object',
|
|
153
|
-
properties: {
|
|
154
|
-
job_id: { type: 'string', description: 'job_id from bash with run_in_background:true.' },
|
|
155
|
-
action: { type: 'string', enum: ['wait', 'peek', 'kill'], description: 'wait (default) = block until done; peek = non-blocking status + output tail; kill = terminate.' },
|
|
156
|
-
timeout_ms: { type: 'number' },
|
|
157
|
-
poll_ms: { type: 'number' },
|
|
158
|
-
},
|
|
159
|
-
required: ['job_id'],
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
name: 'grep',
|
|
164
|
-
title: 'Mixdog Grep',
|
|
165
|
-
annotations: { title: 'Mixdog Grep', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false, compressible: true },
|
|
166
|
-
description: 'Search file contents (ripgrep): free-text / non-symbol content. For a symbol by name use code_graph, not grep. pattern (regex) or glob. output_mode: content (default) | files_with_matches | count. Array pattern matches several in ONE call. -A/-B/-C is line-based — useless on minified/single-line files; use -o or multiline.',
|
|
167
|
-
inputSchema: {
|
|
168
|
-
type: 'object',
|
|
169
|
-
properties: {
|
|
170
|
-
pattern: {
|
|
171
|
-
anyOf: [
|
|
172
|
-
{ type: 'string' },
|
|
173
|
-
{ type: 'array', items: { type: 'string' }, minItems: 1 },
|
|
174
|
-
],
|
|
175
|
-
description: 'Ripgrep regex, or an array of regexes (OR-matched; <=20, <=5 with multiline) to match several in one call.',
|
|
176
|
-
},
|
|
177
|
-
path: { type: 'string' },
|
|
178
|
-
glob: {
|
|
179
|
-
anyOf: [
|
|
180
|
-
{ type: 'string' },
|
|
181
|
-
{ type: 'array', items: { type: 'string' }, minItems: 1 },
|
|
182
|
-
],
|
|
183
|
-
description: 'Glob, or an array of globs, to filter files.',
|
|
184
|
-
},
|
|
185
|
-
output_mode: { type: 'string', enum: ['files_with_matches', 'content', 'count'], description: 'Default content (matching lines). files_with_matches = paths only; count = per-file counts.' },
|
|
186
|
-
head_limit: { type: 'number', description: 'Max result lines (default 80; 0 = unlimited). Truncated output says how many results remain.' },
|
|
187
|
-
offset: { type: 'number', description: 'Skip N result lines before head_limit applies — for paging large result sets.' },
|
|
188
|
-
'-i': { type: 'boolean' },
|
|
189
|
-
'-n': { type: 'boolean' },
|
|
190
|
-
'-A': { type: 'number' },
|
|
191
|
-
'-B': { type: 'number' },
|
|
192
|
-
'-C': { type: 'number', description: 'Context lines (with -A/-B). Line-based; no effect on single-line/minified files — use -o.' },
|
|
193
|
-
context: { type: 'number' },
|
|
194
|
-
multiline: { type: 'boolean', description: 'Dot matches newlines; patterns span lines (rg -U). Pair with -o on single-line/minified files.' },
|
|
195
|
-
'-o': { type: 'boolean', description: 'Only matching parts (rg --only-matching).' },
|
|
196
|
-
type: { type: 'string' },
|
|
197
|
-
},
|
|
198
|
-
required: [],
|
|
199
|
-
},
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
name: 'glob',
|
|
203
|
-
title: 'Mixdog Glob',
|
|
204
|
-
annotations: { title: 'Mixdog Glob', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false, compressible: true },
|
|
205
|
-
description: 'Find files by glob pattern (mtime-sorted). For name/size/date filters use list mode:find.',
|
|
206
|
-
inputSchema: {
|
|
207
|
-
type: 'object',
|
|
208
|
-
properties: {
|
|
209
|
-
pattern: {
|
|
210
|
-
anyOf: [
|
|
211
|
-
{ type: 'string' },
|
|
212
|
-
{ type: 'array', items: { type: 'string' }, minItems: 1 },
|
|
213
|
-
],
|
|
214
|
-
description: 'Glob or array.',
|
|
215
|
-
},
|
|
216
|
-
path: {
|
|
217
|
-
anyOf: [
|
|
218
|
-
{ type: 'string' },
|
|
219
|
-
{ type: 'array', items: { type: 'string' }, minItems: 1 },
|
|
220
|
-
],
|
|
221
|
-
description: 'Base dir or array.',
|
|
222
|
-
},
|
|
223
|
-
head_limit: { type: 'number', description: 'Max entries returned (mtime-sorted). A truncated listing ends with "pass offset:N to continue" — re-call with that offset to page.' },
|
|
224
|
-
offset: { type: 'number', description: 'Skip N entries before head_limit applies; use the footer-suggested value to page.' },
|
|
225
|
-
},
|
|
226
|
-
required: ['pattern'],
|
|
227
|
-
},
|
|
228
|
-
},
|
|
229
|
-
{
|
|
230
|
-
name: 'list',
|
|
231
|
-
title: 'Mixdog List Directory',
|
|
232
|
-
annotations: { title: 'Mixdog List Directory', readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false, compressible: true },
|
|
233
|
-
description: 'List or find directory entries. mode: list | tree | find (name/size/date filter). fuzzy ranks by partial name. Default cwd.',
|
|
234
|
-
inputSchema: {
|
|
235
|
-
type: 'object',
|
|
236
|
-
properties: {
|
|
237
|
-
path: { type: 'string' },
|
|
238
|
-
mode: { type: 'string', enum: ['list', 'tree', 'find'], description: 'Default list (flat dir). tree = recursive tree; find = name/size/date filter.' },
|
|
239
|
-
depth: { type: 'number' },
|
|
240
|
-
hidden: { type: 'boolean' },
|
|
241
|
-
sort: { type: 'string', enum: ['name', 'mtime', 'size'] },
|
|
242
|
-
type: { type: 'string', enum: ['any', 'file', 'dir'] },
|
|
243
|
-
head_limit: { type: 'number', description: 'Max entries returned. A truncated listing ends with "[entries X-Y of T; pass offset:N to continue]" — re-call with that offset to page.' },
|
|
244
|
-
offset: { type: 'number', description: 'Skip N entries before head_limit applies; use the footer-suggested value to page.' },
|
|
245
|
-
include_noise: { type: 'boolean' },
|
|
246
|
-
name: { type: 'string' },
|
|
247
|
-
min_size: { type: 'number' },
|
|
248
|
-
max_size: { type: 'number' },
|
|
249
|
-
modified_after: { type: 'string' },
|
|
250
|
-
modified_before: { type: 'string' },
|
|
251
|
-
fuzzy: { type: 'string', description: 'Rank files by subsequence match of this partial name; overrides mode. e.g. "edeng" -> edit-engine.mjs.' },
|
|
252
|
-
},
|
|
253
|
-
required: [],
|
|
254
|
-
},
|
|
255
|
-
},
|
|
256
|
-
];
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { readFileSync, statSync } from 'fs';
|
|
2
|
-
import { hashText } from './hash-utils.mjs';
|
|
3
|
-
import { statMatchesSnapshot } from './snapshot-helpers.mjs';
|
|
4
|
-
import { normalizeErrorMessage } from './path-diagnostics.mjs';
|
|
5
|
-
import { getPathMutationGeneration } from './cache-layers.mjs';
|
|
6
|
-
|
|
7
|
-
// Change detection: a full stat match (size + mtime±1 + ctime±1) is
|
|
8
|
-
// proof the file is untouched since the preflight snapshot — accept
|
|
9
|
-
// without re-reading the body (fast-path). Only when stat drifts do we
|
|
10
|
-
// fall back to the authoritative content-hash compare. Tradeoff
|
|
11
|
-
// (accepted policy, parity with write's isSnapshotStale): a size-
|
|
12
|
-
// preserving write that ALSO restores mtime AND ctime is not caught —
|
|
13
|
-
// vanishingly rare, since ctime is not userland-settable on the usual
|
|
14
|
-
// platforms.
|
|
15
|
-
export function validatePreparedEditBase(prepared) {
|
|
16
|
-
if (!prepared || !prepared.fullPath) return 'Error [code 7]: edit prewrite check failed — missing prepared file path';
|
|
17
|
-
// In-process CAS, checked before the stat fast-path below. Every committed
|
|
18
|
-
// write bumps the target's mutation generation (bumpPathMutationGeneration,
|
|
19
|
-
// reached via invalidateBuiltinResultCache after each atomic/byte write).
|
|
20
|
-
// If the generation captured at preflight no longer matches, a concurrent
|
|
21
|
-
// in-process edit committed between this edit's snapshot and now. This
|
|
22
|
-
// signal is deterministic and independent of mtime/size granularity — it
|
|
23
|
-
// closes the window where the stat fast-path (size + mtime±1 + ctime±1)
|
|
24
|
-
// false-negatives on a same-size write that lands within the mtime
|
|
25
|
-
// tolerance (e.g. two concurrent cross-file batches racing the same
|
|
26
|
-
// targets), which would otherwise wave drift through. Only enforced when a
|
|
27
|
-
// generation was captured (Number.isFinite) so callers that omit it keep
|
|
28
|
-
// their prior behavior; sequential edits capture and commit without an
|
|
29
|
-
// intervening write, so the generation is stable and never false-positives.
|
|
30
|
-
if (Number.isFinite(prepared.baseMutationGeneration)
|
|
31
|
-
&& getPathMutationGeneration(prepared.fullPath) !== prepared.baseMutationGeneration) {
|
|
32
|
-
return `Error [code 7]: file modified between edit preflight and write — read it again before editing: ${prepared.filePath}`;
|
|
33
|
-
}
|
|
34
|
-
let currentStat;
|
|
35
|
-
try { currentStat = statSync(prepared.fullPath); }
|
|
36
|
-
catch (err) {
|
|
37
|
-
return `Error [code 7]: file changed before edit write — read it again before editing: ${prepared.filePath} (${normalizeErrorMessage(err instanceof Error ? err.message : String(err))})`;
|
|
38
|
-
}
|
|
39
|
-
// Fast-path: clean stat match ⇒ untouched, accept without reading.
|
|
40
|
-
// statMatchesSnapshot returns false when baseStatSnapshot is missing
|
|
41
|
-
// or incomplete, so an incomplete snapshot falls through to the
|
|
42
|
-
// fail-closed / content-hash path below (no fail-open).
|
|
43
|
-
if (statMatchesSnapshot(currentStat, prepared.baseStatSnapshot)) return null;
|
|
44
|
-
// Stat drifted (or no stat material) → content hash is authoritative.
|
|
45
|
-
// Without baseContentHash we cannot prove identity, so fail closed.
|
|
46
|
-
if (!prepared.baseContentHash) {
|
|
47
|
-
return `Error [code 7]: file modified between edit preflight and write — read it again before editing: ${prepared.filePath}`;
|
|
48
|
-
}
|
|
49
|
-
let current;
|
|
50
|
-
try { current = readFileSync(prepared.fullPath); }
|
|
51
|
-
catch (err) {
|
|
52
|
-
return `Error [code 7]: file changed before edit write — read it again before editing: ${prepared.filePath} (${normalizeErrorMessage(err instanceof Error ? err.message : String(err))})`;
|
|
53
|
-
}
|
|
54
|
-
if (hashText(current) !== prepared.baseContentHash) {
|
|
55
|
-
return `Error [code 7]: file modified between edit preflight and write — read it again before editing: ${prepared.filePath}`;
|
|
56
|
-
}
|
|
57
|
-
return null;
|
|
58
|
-
}
|
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
import { stripTrailingWhitespaceForEdit } from '../edit-normalize.mjs';
|
|
2
|
-
import {
|
|
3
|
-
bufferWithTrailingLf,
|
|
4
|
-
concatByteReplacements,
|
|
5
|
-
hashBytesWithReplacements,
|
|
6
|
-
} from './edit-byte-utils.mjs';
|
|
7
|
-
import {
|
|
8
|
-
countLfInString,
|
|
9
|
-
maybeAutoStripLineNumberPrefixes,
|
|
10
|
-
} from './edit-context-utils.mjs';
|
|
11
|
-
import { replacementForOriginalSlice } from './edit-match-utils.mjs';
|
|
12
|
-
|
|
13
|
-
export function tryBuildExactEditBuffer(rawBuf, oldStr, newStr, replaceAll, snapshot, filePath) {
|
|
14
|
-
if (!Buffer.isBuffer(rawBuf) || typeof oldStr !== 'string' || oldStr.length === 0 || typeof newStr !== 'string') return null;
|
|
15
|
-
const oldBytes = Buffer.from(oldStr, 'utf-8');
|
|
16
|
-
if (oldBytes.length === 0) return null;
|
|
17
|
-
let eOldStr = oldStr;
|
|
18
|
-
let eOldBytes = oldBytes;
|
|
19
|
-
const _pureDeletion = newStr === '' && !oldStr.endsWith('\n') && !oldStr.endsWith('\r');
|
|
20
|
-
// Single-occurrence pure deletion: probe globally so the unique
|
|
21
|
-
// match also covers its trailing line terminator (CRLF first to
|
|
22
|
-
// avoid leaving a stray \r on CRLF files, then LF, then lone-CR).
|
|
23
|
-
// Replace-all pure deletion CANNOT use a single global rewrite of
|
|
24
|
-
// eOldBytes — when occurrences are mixed (some followed by \n, some
|
|
25
|
-
// bare / at EOF), an eOldBytes that includes the terminator would
|
|
26
|
-
// silently skip every bare occurrence. Per-occurrence absorption
|
|
27
|
-
// below extends each span over its own trailing \r\n / \n / \r so
|
|
28
|
-
// every match is removed regardless of what follows it.
|
|
29
|
-
if (_pureDeletion && !replaceAll) {
|
|
30
|
-
// Judge ambiguity on the BARE oldBytes BEFORE newline absorption.
|
|
31
|
-
// Absorbing a trailing terminator first can narrow a >1-occurrence
|
|
32
|
-
// bare match down to a unique extended span (e.g. 'X' present as
|
|
33
|
-
// 'X\r\n...X'), silently single-deleting instead of surfacing the
|
|
34
|
-
// ambiguous-match error. If the bare oldBytes occurs more than once
|
|
35
|
-
// return null — the same signal the spans.length>1 path emits (→ the
|
|
36
|
-
// caller's code-9 ambiguous-match error). Only absorb when the bare
|
|
37
|
-
// match is unique.
|
|
38
|
-
const _firstBare = rawBuf.indexOf(oldBytes);
|
|
39
|
-
if (_firstBare !== -1 && rawBuf.indexOf(oldBytes, _firstBare + 1) !== -1) {
|
|
40
|
-
return null;
|
|
41
|
-
}
|
|
42
|
-
const oldWithCrlf = Buffer.from(`${oldStr}\r\n`, 'utf-8');
|
|
43
|
-
const oldWithLf = bufferWithTrailingLf(oldBytes);
|
|
44
|
-
const oldWithCr = Buffer.from(`${oldStr}\r`, 'utf-8');
|
|
45
|
-
if (rawBuf.indexOf(oldWithCrlf) !== -1) {
|
|
46
|
-
eOldStr = `${oldStr}\r\n`;
|
|
47
|
-
eOldBytes = oldWithCrlf;
|
|
48
|
-
} else if (rawBuf.indexOf(oldWithLf) !== -1) {
|
|
49
|
-
eOldStr = `${oldStr}\n`;
|
|
50
|
-
eOldBytes = oldWithLf;
|
|
51
|
-
} else if (rawBuf.indexOf(oldWithCr) !== -1) {
|
|
52
|
-
eOldStr = `${oldStr}\r`;
|
|
53
|
-
eOldBytes = oldWithCr;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
const _perOccurrenceAbsorb = _pureDeletion && replaceAll;
|
|
57
|
-
if (!replaceAll) {
|
|
58
|
-
const _fb = rawBuf.indexOf(eOldBytes);
|
|
59
|
-
if (_fb !== -1 && rawBuf.indexOf(eOldBytes, _fb + 1) !== -1) return null;
|
|
60
|
-
}
|
|
61
|
-
const spans = [];
|
|
62
|
-
let idx = 0;
|
|
63
|
-
while ((idx = rawBuf.indexOf(eOldBytes, idx)) !== -1) {
|
|
64
|
-
let _end = idx + eOldBytes.length;
|
|
65
|
-
if (_perOccurrenceAbsorb) {
|
|
66
|
-
// CRLF (\r\n) first so we don't strand a stray \r; then LF;
|
|
67
|
-
// then lone-CR. Bare / EOF occurrences leave _end as-is.
|
|
68
|
-
if (rawBuf[_end] === 0x0d && rawBuf[_end + 1] === 0x0a) _end += 2;
|
|
69
|
-
else if (rawBuf[_end] === 0x0a) _end += 1;
|
|
70
|
-
else if (rawBuf[_end] === 0x0d) _end += 1;
|
|
71
|
-
}
|
|
72
|
-
spans.push({ start: idx, end: _end });
|
|
73
|
-
if (!replaceAll && spans.length > 1) return null;
|
|
74
|
-
idx += eOldBytes.length;
|
|
75
|
-
}
|
|
76
|
-
if (spans.length === 0) return null;
|
|
77
|
-
const fileUtf8 = rawBuf.toString('utf-8');
|
|
78
|
-
const replacements = spans.map((span) => ({
|
|
79
|
-
...span,
|
|
80
|
-
newBytes: Buffer.from(
|
|
81
|
-
replacementForOriginalSlice(newStr, rawBuf.subarray(span.start, span.end).toString('utf-8'), fileUtf8),
|
|
82
|
-
'utf-8',
|
|
83
|
-
),
|
|
84
|
-
}));
|
|
85
|
-
const sameSize = replacements.every((span) => span.end - span.start === span.newBytes.length);
|
|
86
|
-
if (spans.length === 1) {
|
|
87
|
-
const first = spans[0].start;
|
|
88
|
-
if (sameSize) {
|
|
89
|
-
return {
|
|
90
|
-
replacements,
|
|
91
|
-
sameSize: true,
|
|
92
|
-
contentHash: hashBytesWithReplacements(rawBuf, replacements),
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
96
|
-
replacements,
|
|
97
|
-
sameSize: false,
|
|
98
|
-
updated: Buffer.concat([
|
|
99
|
-
rawBuf.subarray(0, first),
|
|
100
|
-
replacements[0].newBytes,
|
|
101
|
-
rawBuf.subarray(spans[0].end),
|
|
102
|
-
], rawBuf.length - (spans[0].end - first) + replacements[0].newBytes.length),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
if (sameSize) {
|
|
106
|
-
return {
|
|
107
|
-
replacements,
|
|
108
|
-
sameSize: true,
|
|
109
|
-
contentHash: hashBytesWithReplacements(rawBuf, replacements),
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
return {
|
|
113
|
-
replacements,
|
|
114
|
-
sameSize: false,
|
|
115
|
-
updated: concatByteReplacements(rawBuf, replacements),
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function tryBuildMultiExactEditBuffer(rawBuf, edits, args, snapshot, filePath) {
|
|
120
|
-
if (!Buffer.isBuffer(rawBuf) || !Array.isArray(edits) || edits.length === 0) return null;
|
|
121
|
-
// Fast path treats every edit as locating its span in the ORIGINAL buffer
|
|
122
|
-
// and applies all replacements at once. Sequential-apply semantics differ
|
|
123
|
-
// whenever edit A's new_string can synthesise (or destroy) bytes that
|
|
124
|
-
// edit B's old_string would match. Disable the fast path unless edits
|
|
125
|
-
// are provably independent — no pair where one's new_string contains
|
|
126
|
-
// another's old_string. The slow path runs them sequentially.
|
|
127
|
-
if (edits.length > 1) {
|
|
128
|
-
for (let a = 0; a < edits.length; a++) {
|
|
129
|
-
const ea = edits[a];
|
|
130
|
-
if (!ea || typeof ea.old_string !== 'string' || typeof ea.new_string !== 'string') return null;
|
|
131
|
-
for (let b = 0; b < edits.length; b++) {
|
|
132
|
-
if (a === b) continue;
|
|
133
|
-
const eb = edits[b];
|
|
134
|
-
if (!eb || typeof eb.old_string !== 'string') return null;
|
|
135
|
-
if (eb.old_string.length === 0) continue;
|
|
136
|
-
if (ea.new_string.indexOf(eb.old_string) !== -1) return null;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
const isMarkdown = /\.(?:md|mdx)$/i.test(filePath);
|
|
141
|
-
const replacements = [];
|
|
142
|
-
const normalizedEdits = [];
|
|
143
|
-
for (let i = 0; i < edits.length; i++) {
|
|
144
|
-
const entry = edits[i];
|
|
145
|
-
if (!entry || typeof entry.old_string !== 'string' || typeof entry.new_string !== 'string') return null;
|
|
146
|
-
let oldString = entry.old_string;
|
|
147
|
-
let newString = entry.new_string;
|
|
148
|
-
{
|
|
149
|
-
const _nulIdx = newString.indexOf('\u0000');
|
|
150
|
-
if (_nulIdx !== -1) {
|
|
151
|
-
return { error: `Error [code 11]: edit ${i} — new_string contains NUL byte (U+0000) at offset ${_nulIdx} — source text must not contain NUL: ${filePath}` };
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
const replaceAll = entry.replace_all === true;
|
|
155
|
-
// Size gate moved out of the pre-loop guard: the exact byte
|
|
156
|
-
// path proves uniqueness below (spans.length === 1 for
|
|
157
|
-
// !replaceAll), so an exact-unique multi edit applies at any
|
|
158
|
-
// size. The fold-fallback path in edit-engine still enforces
|
|
159
|
-
// the >=30-line code-10 wording for genuine fold-misses.
|
|
160
|
-
if (/^\s*\d+[\t│→]/.test(oldString)) {
|
|
161
|
-
const stripped = maybeAutoStripLineNumberPrefixes(oldString);
|
|
162
|
-
if (stripped === null) return null;
|
|
163
|
-
oldString = stripped;
|
|
164
|
-
}
|
|
165
|
-
// Final-line-aware hygiene — same rule as the edit-engine slow path
|
|
166
|
-
// (stripTrailingWhitespaceForEdit), so fast/slow paths cannot diverge
|
|
167
|
-
// on identical inputs.
|
|
168
|
-
if (!isMarkdown) newString = stripTrailingWhitespaceForEdit(newString, oldString);
|
|
169
|
-
if (oldString.length === 0) {
|
|
170
|
-
return { error: `Error: edit ${i} — old_string must be non-empty` };
|
|
171
|
-
}
|
|
172
|
-
if (oldString === newString) {
|
|
173
|
-
return { error: `Error: edit ${i} — new_string must differ from old_string` };
|
|
174
|
-
}
|
|
175
|
-
if (newString === '' || countLfInString(oldString) !== countLfInString(newString)) return null;
|
|
176
|
-
const oldBytes = Buffer.from(oldString, 'utf-8');
|
|
177
|
-
const fileUtf8 = rawBuf.toString('utf-8');
|
|
178
|
-
if (oldBytes.length === 0) return null;
|
|
179
|
-
if (!replaceAll) {
|
|
180
|
-
const _fb = rawBuf.indexOf(oldBytes);
|
|
181
|
-
if (_fb !== -1 && rawBuf.indexOf(oldBytes, _fb + 1) !== -1) return null;
|
|
182
|
-
}
|
|
183
|
-
normalizedEdits.push({ oldString, newString, replaceAll });
|
|
184
|
-
const spans = [];
|
|
185
|
-
let idx = 0;
|
|
186
|
-
while ((idx = rawBuf.indexOf(oldBytes, idx)) !== -1) {
|
|
187
|
-
const spanEnd = idx + oldBytes.length;
|
|
188
|
-
const sliceText = rawBuf.subarray(idx, spanEnd).toString('utf-8');
|
|
189
|
-
const newBytes = Buffer.from(
|
|
190
|
-
replacementForOriginalSlice(newString, sliceText, fileUtf8),
|
|
191
|
-
'utf-8',
|
|
192
|
-
);
|
|
193
|
-
spans.push({ start: idx, end: spanEnd, editIndex: i, newBytes });
|
|
194
|
-
if (!replaceAll && spans.length > 1) return null;
|
|
195
|
-
idx += oldBytes.length;
|
|
196
|
-
}
|
|
197
|
-
if (spans.length === 0) return null;
|
|
198
|
-
replacements.push(...spans);
|
|
199
|
-
}
|
|
200
|
-
replacements.sort((a, b) => a.start - b.start || a.end - b.end);
|
|
201
|
-
for (let i = 1; i < replacements.length; i++) {
|
|
202
|
-
if (replacements[i].start < replacements[i - 1].end) return null;
|
|
203
|
-
}
|
|
204
|
-
// Independence guard (above) only checks new_string-contains-old_string; it
|
|
205
|
-
// misses old_strings SYNTHESISED across edit boundaries (e.g. "A"->"y" turns
|
|
206
|
-
// "Az yz" into "yz yz", making a later "yz"->Q match twice — which sequential
|
|
207
|
-
// apply would reject as ambiguous). Verify the fast (apply-in-original)
|
|
208
|
-
// result equals an in-order SEQUENTIAL replay; on any divergence or
|
|
209
|
-
// sequential-reject, return null so the caller runs the slow sequential
|
|
210
|
-
// path. Fail-safe: a false mismatch only costs a fallback, never corruption.
|
|
211
|
-
{
|
|
212
|
-
const _fastBytes = concatByteReplacements(rawBuf, replacements);
|
|
213
|
-
let seq = rawBuf.toString('utf-8');
|
|
214
|
-
for (const { oldString: _o, newString: _n, replaceAll: _ra } of normalizedEdits) {
|
|
215
|
-
const repl = replacementForOriginalSlice(_n, _o, seq);
|
|
216
|
-
if (_ra) {
|
|
217
|
-
if (!seq.includes(_o)) return null;
|
|
218
|
-
seq = seq.split(_o).join(repl);
|
|
219
|
-
} else {
|
|
220
|
-
const first = seq.indexOf(_o);
|
|
221
|
-
if (first === -1 || seq.indexOf(_o, first + _o.length) !== -1) return null;
|
|
222
|
-
seq = seq.slice(0, first) + repl + seq.slice(first + _o.length);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
if (!Buffer.from(seq, 'utf-8').equals(_fastBytes)) return null;
|
|
226
|
-
}
|
|
227
|
-
const sameSize = replacements.every((span) => span.end - span.start === span.newBytes.length);
|
|
228
|
-
if (sameSize) {
|
|
229
|
-
return {
|
|
230
|
-
replacements,
|
|
231
|
-
sameSize: true,
|
|
232
|
-
contentHash: hashBytesWithReplacements(rawBuf, replacements),
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
return {
|
|
236
|
-
replacements,
|
|
237
|
-
sameSize: false,
|
|
238
|
-
updated: concatByteReplacements(rawBuf, replacements),
|
|
239
|
-
};
|
|
240
|
-
}
|