mixdog 0.7.18 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/session-context-bench.mjs +172 -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 +452 -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 +3813 -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 +330 -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/post-edit-marks.mjs +42 -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 +2269 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +2972 -0
- package/src/runtime/agent/orchestrator/session/result-classification.mjs +65 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +870 -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/advisory-lock.mjs +171 -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 +122 -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 +3706 -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 +328 -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 +947 -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 +5446 -0
- package/src/tui/components/AnsiText.jsx +199 -0
- package/src/tui/components/ContextPanel.jsx +265 -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 +791 -0
- package/src/tui/components/TurnDone.jsx +78 -0
- package/src/tui/components/UsagePanel.jsx +331 -0
- package/src/tui/dist/index.mjs +12420 -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 +99 -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/post-edit-marks.mjs +0 -42
- 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/advisory-lock.mjs +0 -171
- 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/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/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
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
2
|
+
import { readdir, rmdir, unlink, writeFile } from 'fs/promises';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { getPluginData } from '../config.mjs';
|
|
5
|
+
import { normalizeOutputPath } from '../tools/builtin/path-utils.mjs';
|
|
6
|
+
import { classifyResultKind } from './result-classification.mjs';
|
|
7
|
+
|
|
8
|
+
const TOOL_RESULT_OFFLOAD_THRESHOLD_CHARS = 50_000;
|
|
9
|
+
const TOOL_RESULT_PREVIEW_CHARS = 2_000;
|
|
10
|
+
const TOOL_RESULT_SHELL_THRESHOLD_CHARS = 30_000;
|
|
11
|
+
const TOOL_RESULT_SEARCH_THRESHOLD_CHARS = 50_000;
|
|
12
|
+
const TOOL_RESULT_GREP_THRESHOLD_CHARS = 20_000;
|
|
13
|
+
export const TOOL_RESULT_OFFLOAD_PREFIX = '[tool output offloaded:';
|
|
14
|
+
|
|
15
|
+
// Per-tool persistence limits mirror Claude Code's per-tool maxResultSizeChars
|
|
16
|
+
// rather than a single global value: Grep persists at 20k (CC GrepTool), Glob
|
|
17
|
+
// and list/find_* at the 50k system default (CC DEFAULT_MAX_RESULT_SIZE_CHARS;
|
|
18
|
+
// tighter than CC Glob's 100k by design), and shell/bash_session/task at 30k
|
|
19
|
+
// (CC BASH_MAX_OUTPUT_LENGTH default). Read/head/tail/diff stay inline
|
|
20
|
+
// (Infinity) — they are self-bound by FileRead semantics and the upstream
|
|
21
|
+
// READ_MAX_SIZE_BYTES cap, so persisting to a sidecar to be re-read would be
|
|
22
|
+
// circular. These values keep context-rich IO tools from turning into "read
|
|
23
|
+
// saved output" loops while bounding the per-call inline footprint per CC.
|
|
24
|
+
const INLINE_THRESHOLD_BY_TOOL = new Map([
|
|
25
|
+
['read', Infinity],
|
|
26
|
+
['head', Infinity],
|
|
27
|
+
['tail', Infinity],
|
|
28
|
+
['diff', Infinity],
|
|
29
|
+
['grep', TOOL_RESULT_GREP_THRESHOLD_CHARS],
|
|
30
|
+
['glob', TOOL_RESULT_SEARCH_THRESHOLD_CHARS],
|
|
31
|
+
['list', TOOL_RESULT_SEARCH_THRESHOLD_CHARS],
|
|
32
|
+
['tree', TOOL_RESULT_SEARCH_THRESHOLD_CHARS],
|
|
33
|
+
['find_files', TOOL_RESULT_SEARCH_THRESHOLD_CHARS],
|
|
34
|
+
['code_graph', TOOL_RESULT_SEARCH_THRESHOLD_CHARS],
|
|
35
|
+
['shell', TOOL_RESULT_SHELL_THRESHOLD_CHARS],
|
|
36
|
+
['bash_session', TOOL_RESULT_SHELL_THRESHOLD_CHARS],
|
|
37
|
+
['task', TOOL_RESULT_SHELL_THRESHOLD_CHARS],
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
function getOffloadThreshold(toolName) {
|
|
41
|
+
const key = String(toolName || '').toLowerCase();
|
|
42
|
+
return INLINE_THRESHOLD_BY_TOOL.get(key) ?? TOOL_RESULT_OFFLOAD_THRESHOLD_CHARS;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Sanitize sessionId before using it as a path segment. A raw `..` or slash
|
|
46
|
+
// would let the sidecar dir — and clearOffloadSession's readdir+unlink — escape
|
|
47
|
+
// the tool-results root (arbitrary .txt deletion). Strip to [A-Za-z0-9_-];
|
|
48
|
+
// dropping '.' collapses '..' to '__'. Real ids are sess_<digits>, unaffected.
|
|
49
|
+
function safeSessionSegment(sessionId) {
|
|
50
|
+
return String(sessionId ?? '').replace(/[^A-Za-z0-9_-]/g, '_').slice(0, 200) || '_invalid';
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function ensureToolResultsDir(sessionId) {
|
|
54
|
+
const dir = join(getPluginData(), 'tool-results', safeSessionSegment(sessionId));
|
|
55
|
+
// R4 data-at-rest: offloaded tool output may contain secrets / file
|
|
56
|
+
// contents; clamp dir to owner-only on POSIX (advisory on Windows).
|
|
57
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
58
|
+
return dir;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Map tool-call IDs to safe generated filenames. toolCallId arrives from
|
|
62
|
+
// the provider and may contain path-unsafe characters (slashes, dots, etc.).
|
|
63
|
+
// Use a monotonic counter keyed by sessionId so the sidecar path is
|
|
64
|
+
// deterministic-ish within a session but never tainted by provider input.
|
|
65
|
+
const _offloadCounters = new Map();
|
|
66
|
+
|
|
67
|
+
function buildPreview(text, maxChars = TOOL_RESULT_PREVIEW_CHARS) {
|
|
68
|
+
if (text.length <= maxChars) {
|
|
69
|
+
return { preview: text, truncated: false };
|
|
70
|
+
}
|
|
71
|
+
const headBudget = Math.floor(maxChars * 0.6);
|
|
72
|
+
const tailBudget = maxChars - headBudget;
|
|
73
|
+
let head = text.slice(0, headBudget);
|
|
74
|
+
const headCut = head.lastIndexOf('\n');
|
|
75
|
+
if (headCut > Math.floor(headBudget * 0.6)) head = head.slice(0, headCut);
|
|
76
|
+
let tail = text.slice(Math.max(0, text.length - tailBudget));
|
|
77
|
+
const tailCut = tail.indexOf('\n');
|
|
78
|
+
if (tailCut !== -1 && tailCut < Math.floor(tailBudget * 0.4)) tail = tail.slice(tailCut + 1);
|
|
79
|
+
const omittedKb = Math.max(1, Math.round((text.length - head.length - tail.length) / 1024));
|
|
80
|
+
return {
|
|
81
|
+
preview: `${head}\n\n... [preview middle omitted — ${omittedKb} KB] ...\n\n${tail}`,
|
|
82
|
+
truncated: true,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function countLines(text) {
|
|
87
|
+
if (!text) return 0;
|
|
88
|
+
let lines = 1;
|
|
89
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
90
|
+
if (text.charCodeAt(i) === 10) lines += 1;
|
|
91
|
+
}
|
|
92
|
+
return lines;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export async function maybeOffloadToolResult(sessionId, toolCallId, toolName, result) {
|
|
96
|
+
if (!sessionId || !toolCallId) return result;
|
|
97
|
+
if (typeof result !== 'string') return result;
|
|
98
|
+
if (result.length <= getOffloadThreshold(toolName)) return result;
|
|
99
|
+
// Keep error surfaces inline so the model can self-correct without an
|
|
100
|
+
// extra read turn — but only up to the global default. A giant error
|
|
101
|
+
// (e.g. a megabyte of stack/diff/dump) still offloads so it can't blow up
|
|
102
|
+
// context; small errors (the overwhelming majority) stay inline.
|
|
103
|
+
if (classifyResultKind(result) === 'error'
|
|
104
|
+
&& result.length <= TOOL_RESULT_OFFLOAD_THRESHOLD_CHARS) return result;
|
|
105
|
+
|
|
106
|
+
// Generate a safe filename — never trust toolCallId as a path component.
|
|
107
|
+
const count = (_offloadCounters.get(sessionId) ?? 0) + 1;
|
|
108
|
+
_offloadCounters.set(sessionId, count);
|
|
109
|
+
const safeId = `r${count}`;
|
|
110
|
+
|
|
111
|
+
const dir = ensureToolResultsDir(sessionId);
|
|
112
|
+
const filePath = join(dir, `${safeId}.txt`);
|
|
113
|
+
|
|
114
|
+
// Count lines while the string is in hand — single pass, no re-read.
|
|
115
|
+
const lines = countLines(result);
|
|
116
|
+
await writeFile(filePath, result, { encoding: 'utf-8', mode: 0o600 });
|
|
117
|
+
|
|
118
|
+
const { preview, truncated } = buildPreview(result);
|
|
119
|
+
const sizeKb = Math.max(1, Math.round(result.length / 1024));
|
|
120
|
+
const displayPath = normalizeOutputPath(filePath);
|
|
121
|
+
const header = `${TOOL_RESULT_OFFLOAD_PREFIX} ${toolName} → ${displayPath} (${sizeKb} KB, ${lines} lines)]`;
|
|
122
|
+
const suffix = truncated ? '\n... [preview truncated — use read on the saved path for full output]' : '';
|
|
123
|
+
return `${header}\n\n${preview}${suffix}`;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Drop a session's offload sidecars on session close. Unlinks every
|
|
127
|
+
// tool-results/<sessionId>/*.txt entry, rmdirs the directory, and drops
|
|
128
|
+
// the sessionId entry from the module-level counter Map so a long-running
|
|
129
|
+
// mcp-server process doesn't accumulate per-session state across the
|
|
130
|
+
// lifetime of the bridge.
|
|
131
|
+
export async function clearOffloadSession(sessionId) {
|
|
132
|
+
if (!sessionId) return;
|
|
133
|
+
_offloadCounters.delete(sessionId);
|
|
134
|
+
const dir = join(getPluginData(), 'tool-results', safeSessionSegment(sessionId));
|
|
135
|
+
if (!existsSync(dir)) return;
|
|
136
|
+
try {
|
|
137
|
+
const entries = await readdir(dir);
|
|
138
|
+
await Promise.all(entries
|
|
139
|
+
.filter((name) => name.endsWith('.txt'))
|
|
140
|
+
.map((name) => unlink(join(dir, name)).catch(() => { /* best-effort */ })));
|
|
141
|
+
await rmdir(dir).catch(() => { /* best-effort: non-empty / already gone */ });
|
|
142
|
+
} catch { /* best-effort */ }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export function isOffloadedToolResultText(text) {
|
|
146
|
+
return typeof text === 'string' && text.startsWith(TOOL_RESULT_OFFLOAD_PREFIX);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function compactOffloadedToolResultText(text) {
|
|
150
|
+
if (!isOffloadedToolResultText(text)) return text;
|
|
151
|
+
const value = String(text);
|
|
152
|
+
const lineEnd = value.indexOf('\n');
|
|
153
|
+
const firstLine = lineEnd === -1 ? value : value.slice(0, lineEnd);
|
|
154
|
+
return `${firstLine}\n[preview omitted — use read on the saved path if needed]`;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export const _internals = {
|
|
158
|
+
TOOL_RESULT_OFFLOAD_THRESHOLD_CHARS,
|
|
159
|
+
TOOL_RESULT_SHELL_THRESHOLD_CHARS,
|
|
160
|
+
TOOL_RESULT_SEARCH_THRESHOLD_CHARS,
|
|
161
|
+
TOOL_RESULT_GREP_THRESHOLD_CHARS,
|
|
162
|
+
getOffloadThreshold,
|
|
163
|
+
TOOL_RESULT_PREVIEW_CHARS,
|
|
164
|
+
buildPreview,
|
|
165
|
+
countLines,
|
|
166
|
+
};
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart Bridge — Internal LLM Helper (session-based).
|
|
3
|
+
*
|
|
4
|
+
* Every one-shot LLM dispatch from internal callers (memory-cycle,
|
|
5
|
+
* scheduler, webhook) now flows through the SAME session pipeline as the
|
|
6
|
+
* MCP `bridge` tool. No more parallel `provider.send()` helper — one code
|
|
7
|
+
* path = one message shape = one usage log = "bridge single path".
|
|
8
|
+
*
|
|
9
|
+
* The returned function uses the existing caller signature, so call sites
|
|
10
|
+
* do not need changes:
|
|
11
|
+
*
|
|
12
|
+
* const llm = makeBridgeLlm({ role: 'maintenance', preset: 'haiku' });
|
|
13
|
+
* const text = await llm({ prompt });
|
|
14
|
+
*
|
|
15
|
+
* Internally it:
|
|
16
|
+
* 1. Resolves the preset (explicit arg > opts.preset > user-workflow.json[role])
|
|
17
|
+
* 2. Creates or reuses a session via the session manager
|
|
18
|
+
* 3. Applies stateless-reset for stateless profiles so the prefix handle
|
|
19
|
+
* stays warm while per-dispatch transcripts never leak
|
|
20
|
+
* 4. Calls `askSession` → provider.send() → usage logged via
|
|
21
|
+
* `session/manager.mjs` (mode='active')
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { readFileSync } from 'fs';
|
|
25
|
+
import { join } from 'path';
|
|
26
|
+
import { loadConfig } from '../config.mjs';
|
|
27
|
+
import { resolveRuntimeSpec } from '../config.mjs';
|
|
28
|
+
import { getHiddenRole, resolveBridgeSessionPermission } from '../internal-roles.mjs';
|
|
29
|
+
import { prepareBridgeSession } from './session-builder.mjs';
|
|
30
|
+
import { resolvePluginData } from '../../../shared/plugin-paths.mjs';
|
|
31
|
+
import {
|
|
32
|
+
askSession,
|
|
33
|
+
updateSessionStatus,
|
|
34
|
+
closeSession,
|
|
35
|
+
} from '../session/manager.mjs';
|
|
36
|
+
|
|
37
|
+
// Cap bridge role synthesis to ~3000 tokens (~12 KB at the 4 B/tok
|
|
38
|
+
// working average). Pool B explore/recall/search answers occasionally land
|
|
39
|
+
// 8-10k-token walls that then ride in the Lead context for the rest of the
|
|
40
|
+
// turn; the cap keeps those outliers bounded without touching the 95%+ of
|
|
41
|
+
// answers already under the threshold.
|
|
42
|
+
const BRIEF_CAP_BYTES = 12 * 1024;
|
|
43
|
+
function envTimeoutMs(name, fallback) {
|
|
44
|
+
const raw = process.env[name];
|
|
45
|
+
if (raw === undefined || raw === '') return fallback;
|
|
46
|
+
const n = Number(raw);
|
|
47
|
+
return Number.isFinite(n) && n >= 0 ? Math.floor(n) : fallback;
|
|
48
|
+
}
|
|
49
|
+
const DEFAULT_FIRST_RESPONSE_TIMEOUT_MS = envTimeoutMs('MIXDOG_BRIDGE_FIRST_RESPONSE_TIMEOUT_MS', 120_000);
|
|
50
|
+
const DEFAULT_STALE_TIMEOUT_MS = envTimeoutMs('MIXDOG_BRIDGE_STALE_TIMEOUT_MS', 30 * 60_000);
|
|
51
|
+
function applyBriefCap(text) {
|
|
52
|
+
if (typeof text !== 'string') return text;
|
|
53
|
+
if (text.length <= BRIEF_CAP_BYTES) return text;
|
|
54
|
+
const head = text.slice(0, BRIEF_CAP_BYTES);
|
|
55
|
+
const approxTokens = Math.round(text.length / 4);
|
|
56
|
+
return `${head}\n\n... [TRUNCATED — full answer was ~${approxTokens} tokens / ${Math.round(text.length / 1024)} KB. Re-run with brief:false for the complete synthesis]`;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Unified-shard policy — most bridge sessions (Pool B + Pool C) share the
|
|
60
|
+
// same tool schema so BP_1 is bit-identical across roles and one provider-side
|
|
61
|
+
// cache shard serves every caller. Per-role behaviour is steered by:
|
|
62
|
+
// 1. rules/bridge/*.md concatenated into BP2 roleCatalog (via
|
|
63
|
+
// loadScopedRoleCatalog — every bridge session carries the full
|
|
64
|
+
// hidden-role catalog so the shard stays bit-identical across roles)
|
|
65
|
+
// 2. call-time guards (loop.mjs write-block + ai-wrapped-dispatch
|
|
66
|
+
// recursion break)
|
|
67
|
+
// Hidden-role exceptions are declarative: defaults/hidden-roles.json may set
|
|
68
|
+
// toolSchemaProfile when first-turn routing quality is worth a separate tool
|
|
69
|
+
// prefix. Keep "unified" as the default; new profiles must justify the cache
|
|
70
|
+
// shard split.
|
|
71
|
+
// See manager.mjs resolveSessionTools for the single source of truth;
|
|
72
|
+
// bridge visibility is declared via annotations.bridgeHidden on each tool def.
|
|
73
|
+
const HIDDEN_ROLE_TOOL_SCHEMA_PROFILES = Object.freeze({
|
|
74
|
+
unified: null,
|
|
75
|
+
'llm-only': Object.freeze([]),
|
|
76
|
+
'filesystem-read': Object.freeze([
|
|
77
|
+
'code_graph',
|
|
78
|
+
'glob',
|
|
79
|
+
'list',
|
|
80
|
+
'grep',
|
|
81
|
+
'read',
|
|
82
|
+
]),
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export function resolveHiddenRoleSchemaAllowedTools(hidden) {
|
|
86
|
+
if (!hidden) return null;
|
|
87
|
+
if (Array.isArray(hidden.schemaAllowedTools)) {
|
|
88
|
+
return hidden.schemaAllowedTools.map((name) => String(name || '').trim()).filter(Boolean);
|
|
89
|
+
}
|
|
90
|
+
const profile = String(hidden.toolSchemaProfile || 'unified').trim() || 'unified';
|
|
91
|
+
if (Object.prototype.hasOwnProperty.call(HIDDEN_ROLE_TOOL_SCHEMA_PROFILES, profile)) {
|
|
92
|
+
return HIDDEN_ROLE_TOOL_SCHEMA_PROFILES[profile];
|
|
93
|
+
}
|
|
94
|
+
process.stderr.write(`[bridge-llm] unknown hidden-role toolSchemaProfile="${profile}" role="${hidden.name || 'unknown'}"; using unified schema\n`);
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Resolve a preset name from (preset arg | opts.preset | hidden-role | user-workflow).
|
|
100
|
+
*
|
|
101
|
+
* Hidden roles (explorer, cycle1/cycle2, scheduler-task, etc.) are
|
|
102
|
+
* Mixdog-managed and take precedence over user-workflow.json — users cannot
|
|
103
|
+
* override them by redefining the same name.
|
|
104
|
+
*/
|
|
105
|
+
export function resolvePresetName({ preset, optsPreset, role, config: cfgIn = null }) {
|
|
106
|
+
if (preset) return preset;
|
|
107
|
+
if (optsPreset) return optsPreset;
|
|
108
|
+
if (!role) return null;
|
|
109
|
+
// Hidden roles resolve their maintenance preset by SLOT. Every slot carries
|
|
110
|
+
// a concrete default in DEFAULT_MAINTENANCE, so `maint[slot]` resolves
|
|
111
|
+
// directly; the Setup panel can still tune each slot independently.
|
|
112
|
+
// (explorer.slot = 'explore', cycle1-agent.slot = 'cycle1', …). A hidden
|
|
113
|
+
// role may override which maintenance key it reads via `maintKey`
|
|
114
|
+
// (e.g. the cycle1/2/3 agents all read `maint.memory` instead of their
|
|
115
|
+
// own slot) so several agents can share one model knob while keeping
|
|
116
|
+
// distinct slots/identity.
|
|
117
|
+
const hidden = getHiddenRole(role);
|
|
118
|
+
if (hidden) {
|
|
119
|
+
try {
|
|
120
|
+
const config = cfgIn || loadConfig();
|
|
121
|
+
const maint = config?.maintenance || {};
|
|
122
|
+
return maint[hidden.maintKey || hidden.slot] || null;
|
|
123
|
+
} catch { return null; }
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
const pluginData = resolvePluginData();
|
|
127
|
+
if (!pluginData) return null;
|
|
128
|
+
const wf = JSON.parse(readFileSync(join(pluginData, 'user-workflow.json'), 'utf8'));
|
|
129
|
+
if (!Array.isArray(wf.roles)) return null;
|
|
130
|
+
const entry = wf.roles.find((r) => r.name === role);
|
|
131
|
+
return entry ? entry.preset : null;
|
|
132
|
+
} catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Build a bridge-backed LLM callback.
|
|
139
|
+
*
|
|
140
|
+
* @param {object} opts
|
|
141
|
+
* @param {string} opts.role — REQUIRED; canonical role name (worker, cycle1-agent, scheduler-task, ...)
|
|
142
|
+
* @param {string} [opts.taskType] — optional internal classification stamped on the session
|
|
143
|
+
* @param {string} [opts.preset] — explicit preset override (bypasses role → preset lookup)
|
|
144
|
+
* @param {string} [opts.parentSessionId] — parent bridge session for trace aggregation
|
|
145
|
+
* @param {string|null} [opts.ownerSessionId] — owning Mixdog session for statusline isolation
|
|
146
|
+
* @param {AbortSignal} [opts.parentSignal] — optional AbortSignal from the fan-out coordinator;
|
|
147
|
+
* when aborted the bridge role session's own controller is also aborted so the
|
|
148
|
+
* provider call tears down promptly (parent→child cascade).
|
|
149
|
+
* @returns {(args: { prompt, preset?, sourceName? }) => Promise<string>}
|
|
150
|
+
*/
|
|
151
|
+
export function makeBridgeLlm(opts = {}) {
|
|
152
|
+
if (!opts.role || typeof opts.role !== 'string') {
|
|
153
|
+
throw new Error('[bridge-llm] opts.role is required');
|
|
154
|
+
}
|
|
155
|
+
const role = opts.role;
|
|
156
|
+
|
|
157
|
+
return async function bridgeLlm({ prompt, preset: presetArg, sourceName: sourceNameArg, parentSignal: callParentSignal, idleTimeoutMs: callIdleTimeoutMs }) {
|
|
158
|
+
if (typeof prompt !== 'string' || !prompt) {
|
|
159
|
+
throw new Error(`[bridge-llm] prompt required for role "${role}"`);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const config = opts.config || loadConfig();
|
|
163
|
+
const presetName = resolvePresetName({
|
|
164
|
+
preset: presetArg,
|
|
165
|
+
optsPreset: opts.preset,
|
|
166
|
+
role,
|
|
167
|
+
config,
|
|
168
|
+
});
|
|
169
|
+
if (!presetName) {
|
|
170
|
+
throw new Error(
|
|
171
|
+
`[bridge-llm] preset unresolved for role "${role}" `
|
|
172
|
+
+ `(preset="${presetArg || opts.preset || ''}")`,
|
|
173
|
+
);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const preset = config.presets?.find((p) => p.id === presetName || p.name === presetName);
|
|
177
|
+
if (!preset) {
|
|
178
|
+
throw new Error(`[bridge-llm] preset "${presetName}" not found in mixdog-config.json`);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const runtimeSpec = resolveRuntimeSpec(preset, {
|
|
182
|
+
lane: 'bridge',
|
|
183
|
+
agentId: role,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// Callers (e.g. aiWrapped explore dispatch) may pass an explicit
|
|
187
|
+
// `cwd` to scope the agent's filesystem view. Absolute path expected
|
|
188
|
+
// (aiWrapped already expands `~` and resolves relatives). When unset
|
|
189
|
+
// we pass `null` through instead of falling back to `process.cwd()`
|
|
190
|
+
// — the MCP server's launch dir is not deterministic across callers,
|
|
191
|
+
// and the downstream skill-discovery path tolerates null. Combined
|
|
192
|
+
// with the frozen bridge skill meta-tools (collect.mjs) this keeps
|
|
193
|
+
// every caller on the same provider cache shard.
|
|
194
|
+
const cwd = (typeof opts.cwd === 'string' && opts.cwd) ? opts.cwd : null;
|
|
195
|
+
|
|
196
|
+
// Unified dispatch: Pool B/C share bit-identical tools + system prompt
|
|
197
|
+
// unless a hidden role declares a narrow toolSchemaProfile. Per-role
|
|
198
|
+
// differentiation rides in the user-message header (permission + role
|
|
199
|
+
// line) plus an optional short Pool C snippet. The read-only contract
|
|
200
|
+
// is still enforced at call time via loop.mjs's READ_BLOCKED_TOOLS
|
|
201
|
+
// guard; schema profiles are a routing-efficiency layer, not safety.
|
|
202
|
+
const hidden = getHiddenRole(role);
|
|
203
|
+
const isPoolC = Boolean(hidden);
|
|
204
|
+
// Permission: read-declared hidden roles are locked in
|
|
205
|
+
// resolveBridgeSessionPermission (prepareBridgeSession applies the same).
|
|
206
|
+
const permission = resolveBridgeSessionPermission(
|
|
207
|
+
role,
|
|
208
|
+
opts.permission ?? (isPoolC ? (hidden?.permission || 'read') : null),
|
|
209
|
+
);
|
|
210
|
+
// Pool C hidden-role instructions live in BP2 roleCatalog (loaded
|
|
211
|
+
// by loadScopedRoleCatalog from rules/bridge/*.md) — the Tier 3
|
|
212
|
+
// reminder is suppressed so the shard stays bit-identical across
|
|
213
|
+
// every bridge role.
|
|
214
|
+
//
|
|
215
|
+
// User message = pure query. Permission / role ride in BP3
|
|
216
|
+
// sessionMarker (composeSystemPrompt) — only the query varies per
|
|
217
|
+
// call, so provider cache reuses the shared prefix.
|
|
218
|
+
//
|
|
219
|
+
// Stateless ephemeral session — created fresh per call, never
|
|
220
|
+
// pooled or resumed. Cache prefix matching happens at the provider
|
|
221
|
+
// layer (account-level), not the session level.
|
|
222
|
+
const finalPrompt = prompt;
|
|
223
|
+
const { session } = prepareBridgeSession({
|
|
224
|
+
role,
|
|
225
|
+
presetName,
|
|
226
|
+
preset,
|
|
227
|
+
runtimeSpec,
|
|
228
|
+
permission,
|
|
229
|
+
cwd,
|
|
230
|
+
sourceType: opts.sourceType,
|
|
231
|
+
sourceName: sourceNameArg || opts.sourceName,
|
|
232
|
+
parentSessionId: opts.parentSessionId || null,
|
|
233
|
+
ownerSessionId: opts.ownerSessionId === undefined ? (opts.parentSessionId || null) : opts.ownerSessionId,
|
|
234
|
+
clientHostPid: opts.clientHostPid,
|
|
235
|
+
skipRoleReminder: isPoolC,
|
|
236
|
+
schemaAllowedTools: resolveHiddenRoleSchemaAllowedTools(hidden),
|
|
237
|
+
taskType: opts.taskType,
|
|
238
|
+
maxLoopIterations: opts.maxLoopIterations,
|
|
239
|
+
});
|
|
240
|
+
// Diagnostic — dump the actual tool names exposed to this LLM call,
|
|
241
|
+
// visible from the worker log instead of being hidden behind a
|
|
242
|
+
// count-only "tools=N" line.
|
|
243
|
+
try {
|
|
244
|
+
const _toolNames = (session.tools || []).map((t) => t?.name).filter(Boolean);
|
|
245
|
+
process.stderr.write(`[bridge-llm] role=${role} tool-list (${_toolNames.length}): ${_toolNames.join(',')}\n`);
|
|
246
|
+
} catch { /* best-effort diagnostic */ }
|
|
247
|
+
|
|
248
|
+
await updateSessionStatus(session.id, 'running');
|
|
249
|
+
// Parent→child abort cascade: when opts.parentSignal (factory) or
|
|
250
|
+
// callParentSignal (per-call) fires, abort the sub-session's own
|
|
251
|
+
// controller so the provider call tears down promptly. Best-effort:
|
|
252
|
+
// if the session/manager import is unavailable we fall back silently.
|
|
253
|
+
const _managerMod = await import('../session/manager.mjs').catch(() => null);
|
|
254
|
+
const _linkSignal = _managerMod?.linkParentSignalToSession;
|
|
255
|
+
const _getProgressSnapshot = _managerMod?.getSessionProgressSnapshot;
|
|
256
|
+
const _getLastProgressAt = _managerMod?.getSessionLastProgressAt;
|
|
257
|
+
if (_linkSignal) {
|
|
258
|
+
if (opts.parentSignal instanceof AbortSignal) {
|
|
259
|
+
try { _linkSignal(session.id, opts.parentSignal); } catch { /* ignore */ }
|
|
260
|
+
}
|
|
261
|
+
if (callParentSignal instanceof AbortSignal) {
|
|
262
|
+
try { _linkSignal(session.id, callParentSignal); } catch { /* ignore */ }
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Watchdog policy is split:
|
|
266
|
+
// - firstResponseTimeoutMs cuts quickly only when the model produces no
|
|
267
|
+
// first stream/tool activity at all.
|
|
268
|
+
// - idleTimeoutMs is a stale watchdog after work has started.
|
|
269
|
+
// 0 disables that stale abort; default is 30 minutes.
|
|
270
|
+
const _staleMs = Number.isFinite(callIdleTimeoutMs)
|
|
271
|
+
? callIdleTimeoutMs
|
|
272
|
+
: (Number.isFinite(opts.idleTimeoutMs) ? opts.idleTimeoutMs : DEFAULT_STALE_TIMEOUT_MS);
|
|
273
|
+
const _firstMs = Number.isFinite(opts.firstResponseTimeoutMs)
|
|
274
|
+
? opts.firstResponseTimeoutMs
|
|
275
|
+
: DEFAULT_FIRST_RESPONSE_TIMEOUT_MS;
|
|
276
|
+
const _idleController = ((_staleMs > 0 || _firstMs > 0) && _linkSignal) ? new AbortController() : null;
|
|
277
|
+
if (_idleController) {
|
|
278
|
+
try { _linkSignal(session.id, _idleController.signal); } catch { /* ignore */ }
|
|
279
|
+
}
|
|
280
|
+
const _idleTimer = (_idleController && (typeof _getProgressSnapshot === 'function' || typeof _getLastProgressAt === 'function'))
|
|
281
|
+
? setInterval(() => {
|
|
282
|
+
const now = Date.now();
|
|
283
|
+
const snapshot = typeof _getProgressSnapshot === 'function' ? _getProgressSnapshot(session.id) : null;
|
|
284
|
+
if (snapshot) {
|
|
285
|
+
if (snapshot.waitingForFirstActivity) {
|
|
286
|
+
const startedAt = snapshot.modelRequestStartedAt || snapshot.askStartedAt;
|
|
287
|
+
if (_firstMs > 0 && startedAt && now - startedAt > _firstMs) {
|
|
288
|
+
try { _idleController.abort(new Error(`first response stale (${_firstMs}ms)`)); } catch { /* ignore */ }
|
|
289
|
+
}
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
const last = snapshot.lastProgressAt || snapshot.firstActivityAt;
|
|
293
|
+
if (_staleMs > 0 && last && now - last > _staleMs) {
|
|
294
|
+
try { _idleController.abort(new Error(`bridge task stale (${_staleMs}ms without stream/tool progress)`)); } catch { /* ignore */ }
|
|
295
|
+
}
|
|
296
|
+
return;
|
|
297
|
+
}
|
|
298
|
+
const last = _getLastProgressAt?.(session.id);
|
|
299
|
+
if (_staleMs > 0 && last && now - last > _staleMs) {
|
|
300
|
+
try { _idleController.abort(new Error(`bridge task stale (${_staleMs}ms without progress)`)); } catch { /* ignore */ }
|
|
301
|
+
}
|
|
302
|
+
}, 1000)
|
|
303
|
+
: null;
|
|
304
|
+
if (_idleTimer && typeof _idleTimer.unref === 'function') _idleTimer.unref();
|
|
305
|
+
let terminalStatus = 'idle';
|
|
306
|
+
process.stderr.write(`[bridge-llm] role=${role} preset=${presetName} model=${preset.model} provider=${preset.provider} session=${session.id}\n`);
|
|
307
|
+
const _bridgeT0 = Date.now();
|
|
308
|
+
try {
|
|
309
|
+
const result = await askSession(session.id, finalPrompt, null, null, cwd);
|
|
310
|
+
process.stderr.write(`[bridge-llm] role=${role} session=${session.id} elapsed=${Date.now() - _bridgeT0}ms\n`);
|
|
311
|
+
const raw = result?.content || '';
|
|
312
|
+
// Brief cap. Bridge role answers (explore/recall/search)
|
|
313
|
+
// occasionally balloon to 8-10k token walls that then ride in the
|
|
314
|
+
// parent Lead's context for the rest of the turn. A 3000-token
|
|
315
|
+
// (~12 KB) ceiling trims the long tail while leaving the vast
|
|
316
|
+
// majority of answers untouched. Opt-out via `brief:false` when
|
|
317
|
+
// the caller explicitly wants the full synthesis.
|
|
318
|
+
if (opts.brief === false) {
|
|
319
|
+
try { closeSession(session.id, 'ephemeral-done'); } catch { /* ignore */ }
|
|
320
|
+
return raw;
|
|
321
|
+
}
|
|
322
|
+
const out = applyBriefCap(raw);
|
|
323
|
+
try { closeSession(session.id, 'ephemeral-done'); } catch { /* ignore */ }
|
|
324
|
+
return out;
|
|
325
|
+
} catch (err) {
|
|
326
|
+
terminalStatus = 'error';
|
|
327
|
+
try { closeSession(session.id, 'ephemeral-error'); } catch { /* ignore */ }
|
|
328
|
+
throw err;
|
|
329
|
+
} finally {
|
|
330
|
+
if (_idleTimer) {
|
|
331
|
+
try { clearInterval(_idleTimer); } catch { /* ignore */ }
|
|
332
|
+
}
|
|
333
|
+
// Always flip out of 'running' before returning so the sweep never
|
|
334
|
+
// leaves a stateless Pool C session stuck in 'running' when the
|
|
335
|
+
// try/catch falls through in unexpected ways.
|
|
336
|
+
try { await updateSessionStatus(session.id, terminalStatus); } catch { /* ignore */ }
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
}
|