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
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// Cross-platform managed-launcher control channel.
|
|
2
|
+
//
|
|
3
|
+
// Replaces the Windows-only AttachConsole + WriteConsoleInputW front-injection
|
|
4
|
+
// path. A `mixdog`-launched session can be "managed": the launcher
|
|
5
|
+
// (setup/mixdog.mjs) owns the child process and exposes a file-based
|
|
6
|
+
// command queue under the runtime root. Internal commands (/clear,
|
|
7
|
+
// /reload-plugins) are enqueued by the MCP server (inject_command / inject_input)
|
|
8
|
+
// and the launcher delivers them to the child's stdin — no terminal keystroke
|
|
9
|
+
// injection, no new window. Works on Windows / macOS / Linux.
|
|
10
|
+
//
|
|
11
|
+
// Native backend (CANONICAL): Rust is canonical for mixdog's native
|
|
12
|
+
// functionality. The enqueue/drain primitives and the managed terminal bridge
|
|
13
|
+
// are owned by the Rust crate native/mixdog-launch. The pure-JS queue path below
|
|
14
|
+
// is only a wire-compatible fallback for queue writes/drains when the binary has
|
|
15
|
+
// not landed; managed terminal ownership never falls back to JS/node-pty.
|
|
16
|
+
//
|
|
17
|
+
// Wire-up:
|
|
18
|
+
// • The launcher sets MIXDOG_LAUNCH_ID (and MIXDOG_MANAGED_LAUNCH=1) on the
|
|
19
|
+
// child env ONLY when it has actually engaged the stdin control bridge.
|
|
20
|
+
// • The MCP server (a descendant of the child) inherits that env, so
|
|
21
|
+
// managedLaunchId() is the single source of truth for "am I managed?".
|
|
22
|
+
// • enqueueLauncherCommand() publishes one command file atomically; the
|
|
23
|
+
// launcher's watchLauncherCommands() drains + delivers them in order.
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
mkdirSync,
|
|
27
|
+
readdirSync,
|
|
28
|
+
readFileSync,
|
|
29
|
+
writeFileSync,
|
|
30
|
+
rmSync,
|
|
31
|
+
renameSync,
|
|
32
|
+
existsSync,
|
|
33
|
+
statSync,
|
|
34
|
+
} from 'node:fs';
|
|
35
|
+
import { spawnSync } from 'node:child_process';
|
|
36
|
+
import { tmpdir } from 'node:os';
|
|
37
|
+
import { dirname, join, resolve } from 'node:path';
|
|
38
|
+
import { fileURLToPath } from 'node:url';
|
|
39
|
+
import { randomUUID } from 'node:crypto';
|
|
40
|
+
|
|
41
|
+
const ENV_LAUNCH_ID = 'MIXDOG_LAUNCH_ID';
|
|
42
|
+
const ENV_MANAGED = 'MIXDOG_MANAGED_LAUNCH';
|
|
43
|
+
|
|
44
|
+
// 0x1E (ASCII Record Separator): how `mixdog-launch drain` joins multiple
|
|
45
|
+
// command bodies on stdout so embedded newlines in a command survive transport.
|
|
46
|
+
const RECORD_SEP = '\x1e';
|
|
47
|
+
|
|
48
|
+
// Names the env vars the launcher must set on the child so this module's
|
|
49
|
+
// managedLaunchId() resolves inside the MCP server.
|
|
50
|
+
export const LAUNCHER_ENV = Object.freeze({ ENV_LAUNCH_ID, ENV_MANAGED });
|
|
51
|
+
|
|
52
|
+
// Mirror of channels/lib/runtime-paths.mjs RUNTIME_ROOT resolution so the
|
|
53
|
+
// launcher and the MCP server agree on the queue location without importing
|
|
54
|
+
// the channels layer into setup/.
|
|
55
|
+
export function launcherRuntimeRoot() {
|
|
56
|
+
return process.env.MIXDOG_RUNTIME_ROOT
|
|
57
|
+
? resolve(process.env.MIXDOG_RUNTIME_ROOT)
|
|
58
|
+
: join(tmpdir(), 'mixdog');
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function sanitize(value) {
|
|
62
|
+
return String(value).replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function launcherQueueDir(launchId) {
|
|
66
|
+
return join(launcherRuntimeRoot(), `launch-cmds-${sanitize(launchId)}`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// ── Native backend resolution (canonical) ──────────────────────────────────
|
|
70
|
+
// Locate the Rust mixdog-launch binary built by dev-sync / cargo. Resolution
|
|
71
|
+
// order: explicit override → fresh live build → local cargo release build →
|
|
72
|
+
// shipped prebuilt.
|
|
73
|
+
// Returns an absolute path when present, else null (JS fallback engages).
|
|
74
|
+
const PLUGIN_ROOT = process.env.MIXDOG_ROOT
|
|
75
|
+
|| resolve(dirname(fileURLToPath(import.meta.url)), '../..');
|
|
76
|
+
const NATIVE_LAUNCH_DEFAULT_BIN = join(
|
|
77
|
+
PLUGIN_ROOT,
|
|
78
|
+
'native/mixdog-launch/target/release',
|
|
79
|
+
process.platform === 'win32' ? 'mixdog-launch.exe' : 'mixdog-launch',
|
|
80
|
+
);
|
|
81
|
+
const NATIVE_LAUNCH_LIVE_BIN = join(
|
|
82
|
+
PLUGIN_ROOT,
|
|
83
|
+
'native/mixdog-launch/target-live/release',
|
|
84
|
+
process.platform === 'win32' ? 'mixdog-launch.exe' : 'mixdog-launch',
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
function nativeLaunchSourceMtime() {
|
|
88
|
+
let mtime = 0;
|
|
89
|
+
for (const rel of ['native/mixdog-launch/Cargo.toml', 'native/mixdog-launch/src/main.rs']) {
|
|
90
|
+
try { mtime = Math.max(mtime, statSync(join(PLUGIN_ROOT, rel)).mtimeMs); } catch {}
|
|
91
|
+
}
|
|
92
|
+
return mtime;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function freshNativeLaunchBin(path) {
|
|
96
|
+
try {
|
|
97
|
+
const binMtime = statSync(path).mtimeMs;
|
|
98
|
+
const srcMtime = nativeLaunchSourceMtime();
|
|
99
|
+
return binMtime > 0 && binMtime >= srcMtime ? path : null;
|
|
100
|
+
} catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Shipped prebuilt path under native/prebuilt/<os-arch>/mixdog-launch(.exe)
|
|
106
|
+
function nativeLaunchPrebuiltPath() {
|
|
107
|
+
const arch =
|
|
108
|
+
process.arch === 'x64' ? 'x86_64'
|
|
109
|
+
: process.arch === 'arm64' ? 'aarch64'
|
|
110
|
+
: process.arch === 'ia32' ? 'i686'
|
|
111
|
+
: process.arch;
|
|
112
|
+
const os =
|
|
113
|
+
process.platform === 'win32' ? 'windows'
|
|
114
|
+
: process.platform === 'darwin' ? 'macos'
|
|
115
|
+
: 'linux';
|
|
116
|
+
const ext = process.platform === 'win32' ? '.exe' : '';
|
|
117
|
+
return join(PLUGIN_ROOT, 'native', 'prebuilt', `${os}-${arch}`, `mixdog-launch${ext}`);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
let _nativeBinCache; // undefined = unresolved, string|null = resolved
|
|
121
|
+
export function nativeLaunchBin() {
|
|
122
|
+
if (_nativeBinCache !== undefined) return _nativeBinCache;
|
|
123
|
+
// Opt-out for tests / forced-JS parity checks.
|
|
124
|
+
if (/^(0|false|no|off|js)$/i.test(String(process.env.MIXDOG_LAUNCH_NATIVE || ''))) {
|
|
125
|
+
_nativeBinCache = null;
|
|
126
|
+
return _nativeBinCache;
|
|
127
|
+
}
|
|
128
|
+
const override = process.env.MIXDOG_LAUNCH_NATIVE_BIN;
|
|
129
|
+
if (override && existsSync(override)) { _nativeBinCache = override; return _nativeBinCache; }
|
|
130
|
+
const live = freshNativeLaunchBin(NATIVE_LAUNCH_LIVE_BIN);
|
|
131
|
+
if (live) { _nativeBinCache = live; return _nativeBinCache; }
|
|
132
|
+
const release = freshNativeLaunchBin(NATIVE_LAUNCH_DEFAULT_BIN);
|
|
133
|
+
if (release) { _nativeBinCache = release; return _nativeBinCache; }
|
|
134
|
+
// Shipped prebuilt fallback (under native/prebuilt/<os-arch>/)
|
|
135
|
+
const prebuilt = nativeLaunchPrebuiltPath();
|
|
136
|
+
if (prebuilt && existsSync(prebuilt)) { _nativeBinCache = prebuilt; return _nativeBinCache; }
|
|
137
|
+
_nativeBinCache = null;
|
|
138
|
+
return _nativeBinCache;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Returns true when the native mixdog-launch binary's `bridge` subcommand is
|
|
142
|
+
// available for this platform (exit 0). The launcher uses this to gate the
|
|
143
|
+
// managed-launch interactive path — no JS stdin pipe bridge fallback.
|
|
144
|
+
export function nativeBridgeAvailable() {
|
|
145
|
+
const bin = nativeLaunchBin();
|
|
146
|
+
if (!bin) return false;
|
|
147
|
+
const r = spawnSync(bin, ['bridge', '--probe'], {
|
|
148
|
+
encoding: 'utf8', windowsHide: true,
|
|
149
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
150
|
+
});
|
|
151
|
+
return r.status === 0;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
export function newLaunchId() {
|
|
155
|
+
return `${process.pid}-${randomUUID().slice(0, 8)}`;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// MCP-server side: returns the managed launch id when this process belongs to a
|
|
159
|
+
// `mixdog`-launched session that engaged the control bridge, else null. The
|
|
160
|
+
// launcher only sets MIXDOG_LAUNCH_ID once the bridge is live, so presence is
|
|
161
|
+
// sufficient — there is no half-managed state to disambiguate.
|
|
162
|
+
export function managedLaunchId() {
|
|
163
|
+
const id = process.env[ENV_LAUNCH_ID];
|
|
164
|
+
return id && String(id).length > 0 ? String(id) : null;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
let enqueueSequence = 0;
|
|
168
|
+
|
|
169
|
+
// Writer side (inject_command / inject_input): publish one command for the
|
|
170
|
+
// launcher to deliver. Prefers the canonical Rust backend; the JS writer (temp
|
|
171
|
+
// name + rename so the watcher never sees a partial file) is the fallback.
|
|
172
|
+
// Returns the published path.
|
|
173
|
+
export function enqueueLauncherCommand(launchId, command) {
|
|
174
|
+
const dir = launcherQueueDir(launchId);
|
|
175
|
+
mkdirSync(dir, { recursive: true });
|
|
176
|
+
const bin = nativeLaunchBin();
|
|
177
|
+
if (bin) {
|
|
178
|
+
const r = spawnSync(bin, ['enqueue', '--dir', dir, '--command', String(command)], {
|
|
179
|
+
encoding: 'utf8', windowsHide: true,
|
|
180
|
+
});
|
|
181
|
+
if (r.status === 0) {
|
|
182
|
+
const out = String(r.stdout || '').trim();
|
|
183
|
+
if (out) return out;
|
|
184
|
+
}
|
|
185
|
+
// Native spawn failed / non-zero → fall through to the JS writer.
|
|
186
|
+
}
|
|
187
|
+
const seq = String(enqueueSequence++).padStart(6, '0');
|
|
188
|
+
const base = `${Date.now()}-${seq}-${randomUUID().slice(0, 8)}.cmd`;
|
|
189
|
+
const tmp = join(dir, `.${base}.tmp`);
|
|
190
|
+
const dst = join(dir, base);
|
|
191
|
+
writeFileSync(tmp, String(command), 'utf8');
|
|
192
|
+
renameSync(tmp, dst);
|
|
193
|
+
return dst;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Launcher side: drain queued commands oldest-first (lexical sort on the
|
|
197
|
+
// timestamp-prefixed name), deleting each as it is read. Prefers the canonical
|
|
198
|
+
// Rust backend; the JS reader is the fallback.
|
|
199
|
+
export function drainLauncherCommands(launchId) {
|
|
200
|
+
const dir = launcherQueueDir(launchId);
|
|
201
|
+
const bin = nativeLaunchBin();
|
|
202
|
+
if (bin) {
|
|
203
|
+
const r = spawnSync(bin, ['drain', '--dir', dir], {
|
|
204
|
+
encoding: 'utf8', windowsHide: true,
|
|
205
|
+
});
|
|
206
|
+
if (r.status === 0) {
|
|
207
|
+
const out = String(r.stdout || '');
|
|
208
|
+
return out.length === 0 ? [] : out.split(RECORD_SEP);
|
|
209
|
+
}
|
|
210
|
+
// Native spawn failed / non-zero → fall through to the JS reader.
|
|
211
|
+
}
|
|
212
|
+
let entries;
|
|
213
|
+
try {
|
|
214
|
+
entries = readdirSync(dir);
|
|
215
|
+
} catch {
|
|
216
|
+
return [];
|
|
217
|
+
}
|
|
218
|
+
const out = [];
|
|
219
|
+
for (const name of entries.filter((f) => f.endsWith('.cmd')).sort()) {
|
|
220
|
+
const full = join(dir, name);
|
|
221
|
+
let text;
|
|
222
|
+
try {
|
|
223
|
+
text = readFileSync(full, 'utf8');
|
|
224
|
+
} catch {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
rmSync(full, { force: true });
|
|
229
|
+
} catch {}
|
|
230
|
+
out.push(text);
|
|
231
|
+
}
|
|
232
|
+
return out;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Launcher side: poll-based watcher. fs.watch semantics differ enough across
|
|
236
|
+
// platforms (and miss atomic-rename publishes on some) that a short poll is the
|
|
237
|
+
// robust choice for this low-rate control path. Returns a stop() that also
|
|
238
|
+
// removes the queue directory.
|
|
239
|
+
export function watchLauncherCommands(launchId, onCommand, { intervalMs = 150 } = {}) {
|
|
240
|
+
mkdirSync(launcherQueueDir(launchId), { recursive: true });
|
|
241
|
+
let stopped = false;
|
|
242
|
+
const timer = setInterval(() => {
|
|
243
|
+
if (stopped) return;
|
|
244
|
+
for (const cmd of drainLauncherCommands(launchId)) {
|
|
245
|
+
try {
|
|
246
|
+
onCommand(cmd);
|
|
247
|
+
} catch {}
|
|
248
|
+
}
|
|
249
|
+
}, intervalMs);
|
|
250
|
+
if (typeof timer.unref === 'function') timer.unref();
|
|
251
|
+
return () => {
|
|
252
|
+
if (stopped) return;
|
|
253
|
+
stopped = true;
|
|
254
|
+
clearInterval(timer);
|
|
255
|
+
try {
|
|
256
|
+
rmSync(launcherQueueDir(launchId), { recursive: true, force: true });
|
|
257
|
+
} catch {}
|
|
258
|
+
};
|
|
259
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-call cost estimator for bridge-trace usage rows.
|
|
3
|
+
*
|
|
4
|
+
* Pricing is pulled from the LiteLLM catalog (already warmed by providers/
|
|
5
|
+
* agent bootstrap). All four token slots — input / output / cacheRead /
|
|
6
|
+
* cacheWrite — are multiplied by their matching $/M rate from the catalog
|
|
7
|
+
* and summed. Missing rates are treated as 0 (no extrapolation).
|
|
8
|
+
*
|
|
9
|
+
* The catalog is looked up synchronously: if it has not been warmed yet
|
|
10
|
+
* (fresh process, first call), this returns 0 without blocking. The next
|
|
11
|
+
* call will pick up the cache.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { getModelMetadataSync } from '../../agent/orchestrator/providers/model-catalog.mjs';
|
|
15
|
+
|
|
16
|
+
// OpenAI / Codex / Gemini report `input_tokens` as the total prompt token
|
|
17
|
+
// count *including* the cached portion (inclusive). Anthropic reports the
|
|
18
|
+
// uncached remainder only and bills cached_read / cached_write as separate
|
|
19
|
+
// additive slots (additive). Cost and prompt-total math has to branch on this.
|
|
20
|
+
// OpenAI-compatible direct providers (deepseek / ollama / lmstudio)
|
|
21
|
+
// go through the OpenAI SDK and likewise report an inclusive prompt_tokens
|
|
22
|
+
// with a separate cached-tokens detail — so they are inclusive too. Omitting
|
|
23
|
+
// them bills the cached portion at the full input rate AND re-adds it as a
|
|
24
|
+
// cacheRead slot, double-billing the cache (e.g. a ~10k-token cached system
|
|
25
|
+
// prompt charged ~25x its real cost on every DeepSeek call).
|
|
26
|
+
export function isInclusiveProvider(provider) {
|
|
27
|
+
if (!provider) return false;
|
|
28
|
+
const p = String(provider).toLowerCase();
|
|
29
|
+
// 'grok' covers grok-oauth, which delegates inference to the xai compat
|
|
30
|
+
// provider (inclusive input_tokens) but reports its own provider id on
|
|
31
|
+
// usage rows — without it, cached tokens would be double-billed in the
|
|
32
|
+
// cost fallback and prompt totals.
|
|
33
|
+
return p.includes('openai') || p.includes('codex') || p.includes('gemini') || p.includes('google') || p.includes('xai') || p.includes('grok')
|
|
34
|
+
|| p.includes('deepseek') || p.includes('ollama') || p.includes('lmstudio') || p.includes('groq') || p.includes('openrouter');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* @param {object} args
|
|
39
|
+
* @param {string} args.model
|
|
40
|
+
* @param {string} [args.provider]
|
|
41
|
+
* @param {number} [args.inputTokens]
|
|
42
|
+
* @param {number} [args.outputTokens]
|
|
43
|
+
* @param {number} [args.cacheReadTokens]
|
|
44
|
+
* @param {number} [args.cacheWriteTokens]
|
|
45
|
+
* @returns {number} USD, rounded to 6 decimal places.
|
|
46
|
+
*/
|
|
47
|
+
export function computeCostUsd(args) {
|
|
48
|
+
const meta = getModelMetadataSync(args?.model, args?.provider);
|
|
49
|
+
if (!meta) return 0;
|
|
50
|
+
const inputTokens = args.inputTokens || 0;
|
|
51
|
+
const outputTokens = args.outputTokens || 0;
|
|
52
|
+
const cacheReadTokens = args.cacheReadTokens || 0;
|
|
53
|
+
const cacheWriteTokens = args.cacheWriteTokens || 0;
|
|
54
|
+
const billableInput = isInclusiveProvider(args.provider)
|
|
55
|
+
? Math.max(inputTokens - cacheReadTokens - cacheWriteTokens, 0)
|
|
56
|
+
: inputTokens;
|
|
57
|
+
const parts = [
|
|
58
|
+
billableInput * (meta.inputCostPerM || 0),
|
|
59
|
+
outputTokens * (meta.outputCostPerM || 0),
|
|
60
|
+
cacheReadTokens * (meta.cacheReadCostPerM || 0),
|
|
61
|
+
cacheWriteTokens * (meta.cacheWriteCostPerM || 0),
|
|
62
|
+
];
|
|
63
|
+
const total = parts.reduce((s, x) => s + x, 0) / 1_000_000;
|
|
64
|
+
if (!Number.isFinite(total) || total <= 0) return 0;
|
|
65
|
+
return Number(total.toFixed(6));
|
|
66
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTTP connection pool for outbound LLM provider API calls.
|
|
3
|
+
*
|
|
4
|
+
* The provider modules (anthropic-oauth, openai-oauth, grok-oauth, gemini)
|
|
5
|
+
* call the global `fetch()` with no dispatcher, so they ride Node's default
|
|
6
|
+
* undici agent. That agent keeps connections alive only briefly, so after an
|
|
7
|
+
* idle gap the first request to a provider pays a fresh TLS handshake — a
|
|
8
|
+
* 100-300ms first-byte penalty observed on cold calls.
|
|
9
|
+
*
|
|
10
|
+
* This module exports ONE lazily-created singleton undici `Agent` with a long
|
|
11
|
+
* keep-alive window and a sane connection cap, passed as the `dispatcher`
|
|
12
|
+
* option on those providers' `fetch()` calls so warm sockets survive idle
|
|
13
|
+
* gaps. `preconnect(origin)` opens a socket ahead of the first real request
|
|
14
|
+
* (best-effort, errors swallowed) and is called once at provider construction.
|
|
15
|
+
*
|
|
16
|
+
* Scope note: this is deliberately NOT used by src/search/lib/web-tools.mjs,
|
|
17
|
+
* whose per-request Agent pins a pre-validated DNS address for SSRF safety and
|
|
18
|
+
* must own its own short-lived pool. LLM API origins are fixed, trusted hosts,
|
|
19
|
+
* so a shared long-lived pool is appropriate here.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { Agent, getGlobalDispatcher, setGlobalDispatcher, request as undiciRequest } from 'undici'
|
|
23
|
+
|
|
24
|
+
let _agent = null
|
|
25
|
+
let _globalInstalled = false
|
|
26
|
+
|
|
27
|
+
function envInt(name, fallback) {
|
|
28
|
+
const raw = process.env[name]
|
|
29
|
+
if (!raw) return fallback
|
|
30
|
+
const n = Number(raw)
|
|
31
|
+
return Number.isFinite(n) && n > 0 ? Math.trunc(n) : fallback
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Detect whether outbound HTTP is meant to flow through a proxy or any custom
|
|
36
|
+
* global dispatcher. When so, pinning our own bare keep-alive `Agent` as the
|
|
37
|
+
* per-request `dispatcher` would silently bypass `setGlobalDispatcher(...)` and
|
|
38
|
+
* env-proxy wiring — so callers must fall back to the global dispatcher.
|
|
39
|
+
*
|
|
40
|
+
* What is preserved (we step aside): explicit proxy env vars, undici's built-in
|
|
41
|
+
* `ProxyAgent`, and ANY non-default global dispatcher — i.e. any installed
|
|
42
|
+
* global whose constructor name is not `Agent` (undici's default global is a
|
|
43
|
+
* plain `Agent`). Our own singleton is never installed via
|
|
44
|
+
* `setGlobalDispatcher`, so this never self-detects.
|
|
45
|
+
*
|
|
46
|
+
* Accepted gap: a custom dispatcher deliberately constructed AS a plain undici
|
|
47
|
+
* `Agent` and set as the global is indistinguishable from the default here, so
|
|
48
|
+
* we'd keep using our shared pool. That's tolerable — such a dispatcher is
|
|
49
|
+
* itself a direct-connection pool (no proxy hop), so the bypass risk is minimal.
|
|
50
|
+
*/
|
|
51
|
+
function proxyConfigured() {
|
|
52
|
+
const env = process.env
|
|
53
|
+
if (env.HTTP_PROXY || env.HTTPS_PROXY || env.http_proxy || env.https_proxy) return true
|
|
54
|
+
if (env.NODE_USE_ENV_PROXY) return true
|
|
55
|
+
try {
|
|
56
|
+
const g = getGlobalDispatcher?.()
|
|
57
|
+
// Any non-default global dispatcher (constructor name other than the plain
|
|
58
|
+
// `Agent` undici installs by default) is treated as custom — ProxyAgent,
|
|
59
|
+
// EnvHttpProxyAgent, MockAgent, or a user subclass — and we step aside.
|
|
60
|
+
if (g && g.constructor && g.constructor.name !== 'Agent') return true
|
|
61
|
+
} catch { /* getGlobalDispatcher unavailable — treat as no proxy */ }
|
|
62
|
+
return false
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The shared singleton dispatcher for LLM API requests. Created on first use.
|
|
67
|
+
*
|
|
68
|
+
* keepAliveTimeout (~60s) keeps a socket warm across the typical idle gap
|
|
69
|
+
* between bridge turns; connections caps concurrent sockets per origin so a
|
|
70
|
+
* burst of parallel calls can't open an unbounded number of handshakes.
|
|
71
|
+
*
|
|
72
|
+
* Returns `undefined` when a proxy / any custom (non-default) global dispatcher
|
|
73
|
+
* is configured, so `fetch({ dispatcher: undefined })` falls back to that
|
|
74
|
+
* global dispatcher instead of bypassing it. `dispatcher: undefined` is a
|
|
75
|
+
* harmless fetch option, so call sites need no change.
|
|
76
|
+
*/
|
|
77
|
+
export function getLlmDispatcher() {
|
|
78
|
+
if (proxyConfigured()) return undefined
|
|
79
|
+
if (!_agent) {
|
|
80
|
+
_agent = new Agent({
|
|
81
|
+
keepAliveTimeout: envInt('MIXDOG_LLM_KEEPALIVE_MS', 60_000),
|
|
82
|
+
keepAliveMaxTimeout: envInt('MIXDOG_LLM_KEEPALIVE_MAX_MS', 90_000),
|
|
83
|
+
connections: envInt('MIXDOG_LLM_CONNECTIONS', 16),
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
// mixdog standalone: separate undici instance from Node's fetch undici, so
|
|
87
|
+
// a per-request dispatcher throws UND_ERR_INVALID_ARG. Install globally once
|
|
88
|
+
// and omit the per-request dispatcher. See port-plan D7.
|
|
89
|
+
if (!_globalInstalled) {
|
|
90
|
+
try { setGlobalDispatcher(_agent); _globalInstalled = true } catch { /* fall back */ }
|
|
91
|
+
}
|
|
92
|
+
return _globalInstalled ? undefined : _agent
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Origins already warmed (or warming) this process, so repeated provider
|
|
96
|
+
// construction or multiple providers on the same host don't spam handshakes.
|
|
97
|
+
const _preconnected = new Set()
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Best-effort warm a kept-alive socket to `origin` so the first real request
|
|
101
|
+
* skips the TLS handshake. Fire-and-forget: never throws, never returns a
|
|
102
|
+
* pending promise the caller must await.
|
|
103
|
+
*
|
|
104
|
+
* @param {string} origin e.g. 'https://api.anthropic.com'
|
|
105
|
+
*/
|
|
106
|
+
export function preconnect(origin) {
|
|
107
|
+
try {
|
|
108
|
+
// With a proxy / custom global dispatcher in play we deliberately don't own
|
|
109
|
+
// the connection pool, so there's no warm socket to seed — no-op.
|
|
110
|
+
if (proxyConfigured()) return
|
|
111
|
+
if (!origin || typeof origin !== 'string') return
|
|
112
|
+
let url
|
|
113
|
+
try { url = new URL(origin) } catch { return }
|
|
114
|
+
if (url.protocol !== 'https:' && url.protocol !== 'http:') return
|
|
115
|
+
const key = url.origin
|
|
116
|
+
if (_preconnected.has(key)) return
|
|
117
|
+
_preconnected.add(key)
|
|
118
|
+
// A throwaway HEAD lands a pooled socket without fetching a body. Any
|
|
119
|
+
// failure (offline, DNS, 4xx/5xx) is irrelevant — the handshake is the
|
|
120
|
+
// point, and the real request will surface genuine errors.
|
|
121
|
+
undiciRequest(key, {
|
|
122
|
+
method: 'HEAD',
|
|
123
|
+
dispatcher: getLlmDispatcher(),
|
|
124
|
+
signal: AbortSignal.timeout(10_000),
|
|
125
|
+
})
|
|
126
|
+
.then((res) => res.body?.dump?.())
|
|
127
|
+
.catch(() => { /* best-effort warmup; ignore */ })
|
|
128
|
+
} catch { /* never let warmup break construction */ }
|
|
129
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { isWSL } from './wsl.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Open a URL in the user's default browser. Best-effort and non-blocking.
|
|
6
|
+
* Callers also print the URL, so opener failure should never block OAuth.
|
|
7
|
+
*/
|
|
8
|
+
export function openInBrowser(url) {
|
|
9
|
+
const u = String(url);
|
|
10
|
+
let candidates;
|
|
11
|
+
if (process.platform === 'win32') {
|
|
12
|
+
candidates = [['rundll32', ['url.dll,FileProtocolHandler', u]]];
|
|
13
|
+
} else if (process.platform === 'darwin') {
|
|
14
|
+
candidates = [['open', [u]]];
|
|
15
|
+
} else if (isWSL()) {
|
|
16
|
+
const psUrl = `'${u.replace(/'/g, "''")}'`;
|
|
17
|
+
candidates = [
|
|
18
|
+
['wslview', [u]],
|
|
19
|
+
['powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', `Start-Process -FilePath ${psUrl}`]],
|
|
20
|
+
];
|
|
21
|
+
} else {
|
|
22
|
+
candidates = [['xdg-open', [u]]];
|
|
23
|
+
}
|
|
24
|
+
tryOpenCandidates(candidates, 0);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function tryOpenCandidates(candidates, index) {
|
|
28
|
+
if (index >= candidates.length) return;
|
|
29
|
+
const [cmd, args] = candidates[index];
|
|
30
|
+
try {
|
|
31
|
+
const child = spawn(cmd, args, { stdio: 'ignore', detached: true, windowsHide: true });
|
|
32
|
+
child.on('error', () => { tryOpenCandidates(candidates, index + 1); });
|
|
33
|
+
child.unref();
|
|
34
|
+
} catch {
|
|
35
|
+
tryOpenCandidates(candidates, index + 1);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical resolver for the Mixdog data dir.
|
|
3
|
+
*
|
|
4
|
+
* Resolution order:
|
|
5
|
+
* 1. MIXDOG_DATA_DIR
|
|
6
|
+
* 2. <MIXDOG_HOME|~/.mixdog>/data
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
import { dirname, join } from 'path';
|
|
11
|
+
import { fileURLToPath } from 'url';
|
|
12
|
+
|
|
13
|
+
const DEFAULT_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
14
|
+
|
|
15
|
+
export function mixdogHome() {
|
|
16
|
+
return process.env.MIXDOG_HOME || join(homedir(), '.mixdog');
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function mixdogRoot() {
|
|
20
|
+
return process.env.MIXDOG_ROOT || DEFAULT_ROOT;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function resolvePluginData() {
|
|
24
|
+
return process.env.MIXDOG_DATA_DIR || join(mixdogHome(), 'data');
|
|
25
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const SIGNAL_EXIT_CODES = {
|
|
4
|
+
SIGINT: 130,
|
|
5
|
+
SIGTERM: 143,
|
|
6
|
+
SIGHUP: 129,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
function errorText(error) {
|
|
10
|
+
return error?.stack || error?.message || String(error);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function writeStderr(line) {
|
|
14
|
+
try { process.stderr.write(`${line}\n`); } catch {}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function signalExitCode(signal, fallback = 1) {
|
|
18
|
+
return SIGNAL_EXIT_CODES[signal] || fallback;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function waitWithTimeout(promise, timeoutMs, label = 'cleanup') {
|
|
22
|
+
const ms = Math.max(1, Math.floor(Number(timeoutMs) || 1));
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
let settled = false;
|
|
25
|
+
const timer = setTimeout(() => {
|
|
26
|
+
if (settled) return;
|
|
27
|
+
settled = true;
|
|
28
|
+
reject(new Error(`${label} timed out after ${ms}ms`));
|
|
29
|
+
}, ms);
|
|
30
|
+
if (typeof timer.unref === 'function') timer.unref();
|
|
31
|
+
Promise.resolve(promise)
|
|
32
|
+
.then((value) => {
|
|
33
|
+
if (settled) return;
|
|
34
|
+
settled = true;
|
|
35
|
+
clearTimeout(timer);
|
|
36
|
+
resolve(value);
|
|
37
|
+
})
|
|
38
|
+
.catch((error) => {
|
|
39
|
+
if (settled) return;
|
|
40
|
+
settled = true;
|
|
41
|
+
clearTimeout(timer);
|
|
42
|
+
reject(error);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function installProcessSignalCleanup({
|
|
48
|
+
name = 'mixdog',
|
|
49
|
+
signals = ['SIGINT', 'SIGTERM', 'SIGHUP'],
|
|
50
|
+
timeoutMs = 6500,
|
|
51
|
+
exit = true,
|
|
52
|
+
fatal = true,
|
|
53
|
+
beforeCleanup,
|
|
54
|
+
cleanup,
|
|
55
|
+
afterCleanup,
|
|
56
|
+
log = writeStderr,
|
|
57
|
+
} = {}) {
|
|
58
|
+
let installed = true;
|
|
59
|
+
let running = false;
|
|
60
|
+
let hardExitTimer = null;
|
|
61
|
+
const handlers = [];
|
|
62
|
+
|
|
63
|
+
const removeHandlers = () => {
|
|
64
|
+
for (const [event, handler] of handlers.splice(0)) {
|
|
65
|
+
try { process.removeListener(event, handler); } catch {}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const hardExit = (code) => {
|
|
70
|
+
try { process.exit(code); } catch {}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const run = async (reason = 'process-exit', {
|
|
74
|
+
code = 0,
|
|
75
|
+
shouldExit = false,
|
|
76
|
+
error = null,
|
|
77
|
+
} = {}) => {
|
|
78
|
+
if (running) {
|
|
79
|
+
if (shouldExit) hardExit(code);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
running = true;
|
|
83
|
+
removeHandlers();
|
|
84
|
+
|
|
85
|
+
if (shouldExit) {
|
|
86
|
+
hardExitTimer = setTimeout(() => hardExit(code), Math.max(1000, Number(timeoutMs) + 1000));
|
|
87
|
+
if (typeof hardExitTimer.unref === 'function') hardExitTimer.unref();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (error && typeof log === 'function') {
|
|
91
|
+
log(`[${name}] ${reason}: ${errorText(error)}`);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
try { beforeCleanup?.(reason, { code, error }); } catch {}
|
|
95
|
+
try {
|
|
96
|
+
if (typeof cleanup === 'function') {
|
|
97
|
+
await waitWithTimeout(cleanup(reason, { code, error }), timeoutMs, `${name} shutdown`);
|
|
98
|
+
}
|
|
99
|
+
} catch (cleanupError) {
|
|
100
|
+
if (typeof log === 'function') log(`[${name}] cleanup failed: ${errorText(cleanupError)}`);
|
|
101
|
+
}
|
|
102
|
+
try { afterCleanup?.(reason, { code, error }); } catch {}
|
|
103
|
+
if (hardExitTimer) {
|
|
104
|
+
clearTimeout(hardExitTimer);
|
|
105
|
+
hardExitTimer = null;
|
|
106
|
+
}
|
|
107
|
+
running = false;
|
|
108
|
+
if (shouldExit) hardExit(code);
|
|
109
|
+
return true;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const add = (event, handler) => {
|
|
113
|
+
try {
|
|
114
|
+
process.once(event, handler);
|
|
115
|
+
handlers.push([event, handler]);
|
|
116
|
+
} catch {}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
for (const signal of signals) {
|
|
120
|
+
if (!signal) continue;
|
|
121
|
+
add(signal, () => {
|
|
122
|
+
void run(signal, { code: signalExitCode(signal), shouldExit: exit });
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (fatal) {
|
|
127
|
+
add('uncaughtException', (error) => {
|
|
128
|
+
void run('uncaughtException', { code: 1, shouldExit: exit, error });
|
|
129
|
+
});
|
|
130
|
+
add('unhandledRejection', (error) => {
|
|
131
|
+
void run('unhandledRejection', { code: 1, shouldExit: exit, error });
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
run,
|
|
137
|
+
uninstall() {
|
|
138
|
+
if (!installed) return;
|
|
139
|
+
installed = false;
|
|
140
|
+
removeHandlers();
|
|
141
|
+
if (hardExitTimer) {
|
|
142
|
+
clearTimeout(hardExitTimer);
|
|
143
|
+
hardExitTimer = null;
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|