mixdog 0.9.3 → 0.9.5
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 +112 -38
- package/package.json +10 -3
- package/scripts/bench/lead-review-tasks-r3.json +20 -0
- package/scripts/bench/lead-review-tasks.json +20 -0
- package/scripts/bench/r4-mixed-tasks.json +20 -0
- package/scripts/bench/r5-orchestrated-task.json +7 -0
- package/scripts/bench/review-tasks.json +20 -0
- package/scripts/bench/round-codex.json +114 -0
- package/scripts/bench/round-mixdog-lead-r3.json +269 -0
- package/scripts/bench/round-mixdog-lead.json +269 -0
- package/scripts/bench/round-mixdog.json +126 -0
- package/scripts/bench/round-r10-bigsample.json +679 -0
- package/scripts/bench/round-r11-codexalign.json +257 -0
- package/scripts/bench/round-r13-clientmeta.json +464 -0
- package/scripts/bench/round-r14-betafeatures.json +466 -0
- package/scripts/bench/round-r15-fulldefault.json +462 -0
- package/scripts/bench/round-r16-sessionid.json +466 -0
- package/scripts/bench/round-r17-wirebytes.json +456 -0
- package/scripts/bench/round-r18-prewarm.json +468 -0
- package/scripts/bench/round-r19-clean.json +472 -0
- package/scripts/bench/round-r20-prewarm-clean.json +475 -0
- package/scripts/bench/round-r21-delta-retry.json +473 -0
- package/scripts/bench/round-r22-full-probe.json +693 -0
- package/scripts/bench/round-r23-itemprobe.json +701 -0
- package/scripts/bench/round-r24-shapefix.json +677 -0
- package/scripts/bench/round-r25-serial.json +464 -0
- package/scripts/bench/round-r26-parallel3.json +671 -0
- package/scripts/bench/round-r27-parallel10.json +894 -0
- package/scripts/bench/round-r28-parallel10-stagger.json +882 -0
- package/scripts/bench/round-r29-parallel10-stagger166.json +886 -0
- package/scripts/bench/round-r30-instid.json +253 -0
- package/scripts/bench/round-r31-upgradeprobe.json +256 -0
- package/scripts/bench/round-r32-vs-codex-lead.json +254 -0
- package/scripts/bench/round-r33-vs-codex-codex.json +115 -0
- package/scripts/bench/round-r34-orchestrated.json +120 -0
- package/scripts/bench/round-r35-orchestrated-codex.json +61 -0
- package/scripts/bench/round-r36-orchestrated-capped.json +128 -0
- package/scripts/bench/round-r4-codex.json +114 -0
- package/scripts/bench/round-r4-mixed.json +225 -0
- package/scripts/bench/round-r5-gpt-lead.json +259 -0
- package/scripts/bench/round-r6-codex.json +114 -0
- package/scripts/bench/round-r6-solo.json +257 -0
- package/scripts/bench/round-r7-full.json +254 -0
- package/scripts/bench/round-r8-fulldefault.json +255 -0
- package/scripts/bench-run.mjs +251 -32
- package/scripts/freevar-smoke.mjs +95 -0
- package/scripts/internal-comms-bench.mjs +3 -4
- package/scripts/internal-comms-smoke.mjs +10 -9
- package/scripts/model-catalog-audit.mjs +209 -0
- package/scripts/model-list-sanitize-test.mjs +37 -0
- package/scripts/mouse-probe.mjs +45 -0
- package/scripts/output-style-bench.mjs +13 -6
- package/scripts/output-style-smoke.mjs +4 -4
- package/scripts/provider-toolcall-test.mjs +7 -3
- package/scripts/recall-bench.mjs +76 -13
- package/scripts/recall-quality-cases.json +12 -0
- package/scripts/recall-usecase-cases.json +18 -0
- package/scripts/session-bench.mjs +152 -6
- package/scripts/tool-smoke.mjs +25 -65
- package/scripts/tui-render-smoke.mjs +90 -0
- package/scripts/webhook-smoke.mjs +208 -0
- package/src/agents/debugger/AGENT.md +4 -1
- package/src/agents/heavy-worker/AGENT.md +9 -8
- package/src/agents/maintainer/AGENT.md +4 -0
- package/src/agents/reviewer/AGENT.md +2 -1
- package/src/agents/scheduler-task/AGENT.md +2 -3
- package/src/agents/webhook-handler/AGENT.md +2 -3
- package/src/agents/worker/AGENT.md +10 -7
- package/src/app.mjs +12 -1
- package/src/headless-role.mjs +7 -1
- package/src/lib/rules-builder.cjs +4 -0
- package/src/mixdog-session-runtime.mjs +647 -2056
- package/src/output-styles/default.md +30 -9
- package/src/output-styles/{oneline.md → extreme-minimal.md} +5 -4
- package/src/output-styles/minimal.md +8 -6
- package/src/output-styles/simple.md +21 -7
- package/src/rules/agent/00-common.md +6 -3
- package/src/rules/agent/30-explorer.md +16 -5
- package/src/rules/lead/01-general.md +5 -5
- package/src/rules/lead/lead-brief.md +15 -0
- package/src/rules/lead/lead-tool.md +6 -15
- package/src/rules/shared/01-tool.md +17 -21
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +8 -3
- package/src/runtime/agent/orchestrator/agent-runtime/agent-loop-policy.mjs +25 -0
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +100 -23
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +6 -15
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +362 -0
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +410 -0
- package/src/runtime/agent/orchestrator/agent-trace.mjs +16 -735
- package/src/runtime/agent/orchestrator/config.mjs +69 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-effort.mjs +62 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +209 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +489 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +81 -1281
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +607 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +32 -3
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +81 -0
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +248 -0
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +303 -0
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +505 -0
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +43 -1013
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +17 -3
- package/src/runtime/agent/orchestrator/providers/model-catalog.mjs +105 -11
- package/src/runtime/agent/orchestrator/providers/model-list-sanitize.mjs +356 -0
- package/src/runtime/agent/orchestrator/providers/openai-codex-model.mjs +108 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +58 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +368 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +760 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +40 -1143
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +740 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +193 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +349 -2131
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +143 -1002
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +229 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-events.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +465 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +1105 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/provider-catalog-cache.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/compact/budget.mjs +288 -0
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +85 -0
- package/src/runtime/agent/orchestrator/session/compact/engine.mjs +749 -0
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/compact/summary-schema.mjs +315 -0
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +643 -0
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +326 -0
- package/src/runtime/agent/orchestrator/session/compact.mjs +40 -2282
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +14 -2
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +61 -0
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +1 -3
- package/src/runtime/agent/orchestrator/session/loop/recall-fasttrack.mjs +275 -0
- package/src/runtime/agent/orchestrator/session/loop/steering-ladder.mjs +173 -0
- package/src/runtime/agent/orchestrator/session/loop/termination.mjs +58 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +239 -0
- package/src/runtime/agent/orchestrator/session/loop.mjs +278 -402
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +471 -0
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +7 -4
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +406 -0
- package/src/runtime/agent/orchestrator/session/manager/status-telemetry.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +210 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +166 -1087
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +189 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +74 -179
- package/src/runtime/agent/orchestrator/stall-policy.mjs +20 -1
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +70 -20
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +22 -2
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +35 -44
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +40 -0
- package/src/runtime/agent/orchestrator/tools/builtin/rg-runner.mjs +29 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-builders.mjs +8 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +126 -0
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +81 -92
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-paths.mjs +161 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-job-process.mjs +108 -0
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +28 -265
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +0 -6
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +57 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/keyword-match.mjs +82 -0
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +10 -122
- package/src/runtime/agent/orchestrator/tools/code-graph/text-columns.mjs +45 -0
- package/src/runtime/agent/orchestrator/tools/code-graph-tool-defs.mjs +6 -6
- package/src/runtime/agent/orchestrator/tools/graph-binary-fetcher.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/patch/constants.mjs +9 -0
- package/src/runtime/agent/orchestrator/tools/patch/dispatch.mjs +171 -0
- package/src/runtime/agent/orchestrator/tools/patch/matcher.mjs +471 -0
- package/src/runtime/agent/orchestrator/tools/patch/native-server.mjs +436 -0
- package/src/runtime/agent/orchestrator/tools/patch/orchestrator.mjs +342 -0
- package/src/runtime/agent/orchestrator/tools/patch/parsing.mjs +359 -0
- package/src/runtime/agent/orchestrator/tools/patch/paths.mjs +340 -0
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +643 -0
- package/src/runtime/agent/orchestrator/tools/patch.mjs +36 -2959
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +0 -21
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +9 -72
- package/src/runtime/agent/orchestrator/tools/shell-powershell.mjs +77 -0
- package/src/runtime/agent/orchestrator/tools/shell-state.mjs +154 -0
- package/src/runtime/channels/backends/discord-access.mjs +32 -0
- package/src/runtime/channels/backends/discord-attachments.mjs +65 -0
- package/src/runtime/channels/backends/discord-gateway.mjs +233 -0
- package/src/runtime/channels/backends/discord.mjs +27 -318
- package/src/runtime/channels/backends/telegram.mjs +8 -12
- package/src/runtime/channels/index.mjs +247 -701
- package/src/runtime/channels/lib/backend-dispatch.mjs +46 -0
- package/src/runtime/channels/lib/config.mjs +37 -149
- package/src/runtime/channels/lib/event-pipeline.mjs +22 -5
- package/src/runtime/channels/lib/event-queue.mjs +78 -13
- package/src/runtime/channels/lib/inbound-routing.mjs +74 -0
- package/src/runtime/channels/lib/interaction-workflows.mjs +5 -113
- package/src/runtime/channels/lib/output-forwarder.mjs +1 -1
- package/src/runtime/channels/lib/owner-heartbeat.mjs +75 -0
- package/src/runtime/channels/lib/parent-bridge.mjs +88 -0
- package/src/runtime/channels/lib/runtime-paths.mjs +14 -4
- package/src/runtime/channels/lib/scheduler.mjs +27 -113
- package/src/runtime/channels/lib/session-discovery.mjs +56 -4
- package/src/runtime/channels/lib/tool-dispatch.mjs +158 -0
- package/src/runtime/channels/lib/tool-format.mjs +1 -1
- package/src/runtime/channels/lib/transcript-discovery.mjs +4 -4
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +6 -3
- package/src/runtime/channels/lib/voice-transcription.mjs +179 -0
- package/src/runtime/channels/lib/webhook/deliveries.mjs +313 -0
- package/src/runtime/channels/lib/webhook/log.mjs +42 -0
- package/src/runtime/channels/lib/webhook/ngrok.mjs +181 -0
- package/src/runtime/channels/lib/webhook/signature.mjs +60 -0
- package/src/runtime/channels/lib/webhook.mjs +43 -616
- package/src/runtime/channels/tool-defs.mjs +11 -130
- package/src/runtime/memory/index.mjs +210 -1948
- package/src/runtime/memory/lib/core-memory-store.mjs +5 -1
- package/src/runtime/memory/lib/cycle-llm-adapters.mjs +58 -0
- package/src/runtime/memory/lib/cycle-scheduler.mjs +497 -0
- package/src/runtime/memory/lib/embedding-warmup.mjs +58 -0
- package/src/runtime/memory/lib/ko-morph.mjs +195 -0
- package/src/runtime/memory/lib/memory-config-flags.mjs +91 -0
- package/src/runtime/memory/lib/memory-cycle.mjs +1 -1
- package/src/runtime/memory/lib/memory-cycle2-gate.mjs +515 -0
- package/src/runtime/memory/lib/memory-cycle2-mutations.mjs +324 -0
- package/src/runtime/memory/lib/memory-cycle2-shared.mjs +18 -0
- package/src/runtime/memory/lib/memory-cycle2.mjs +24 -842
- package/src/runtime/memory/lib/memory-embed.mjs +149 -0
- package/src/runtime/memory/lib/memory-process-lock.mjs +162 -0
- package/src/runtime/memory/lib/memory-recall-store.mjs +69 -12
- package/src/runtime/memory/lib/memory-text-utils.mjs +46 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +1 -1
- package/src/runtime/memory/lib/query-handlers.mjs +802 -0
- package/src/runtime/memory/lib/recall-format.mjs +55 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +8 -3
- package/src/runtime/memory/lib/transcript-ingest.mjs +425 -0
- package/src/runtime/memory/tool-defs.mjs +5 -13
- package/src/runtime/search/lib/http-fetch.mjs +274 -0
- package/src/runtime/search/lib/ssrf-guard.mjs +333 -0
- package/src/runtime/search/lib/web-tools.mjs +24 -602
- package/src/runtime/shared/atomic-file.mjs +26 -1
- package/src/runtime/shared/config.mjs +14 -4
- package/src/runtime/shared/launcher-control.mjs +2 -2
- package/src/runtime/shared/markdown-frontmatter.mjs +19 -0
- package/src/runtime/shared/schedules-store.mjs +13 -3
- package/src/runtime/shared/tool-execution-contract.mjs +2 -2
- package/src/runtime/shared/tool-primitives.mjs +308 -0
- package/src/runtime/shared/tool-result-summary.mjs +515 -0
- package/src/runtime/shared/tool-surface.mjs +80 -898
- package/src/runtime/shared/transcript-writer.mjs +23 -0
- package/src/runtime/shared/update-checker.mjs +7 -4
- package/src/session-runtime/config-helpers.mjs +119 -2
- package/src/session-runtime/config-lifecycle.mjs +232 -0
- package/src/session-runtime/cwd-plugins.mjs +226 -0
- package/src/session-runtime/mcp-glue.mjs +177 -0
- package/src/session-runtime/model-recency.mjs +111 -0
- package/src/session-runtime/native-search.mjs +247 -0
- package/src/session-runtime/output-styles.mjs +11 -9
- package/src/session-runtime/prewarm.mjs +142 -0
- package/src/session-runtime/provider-models.mjs +278 -0
- package/src/session-runtime/provider-usage.mjs +120 -0
- package/src/session-runtime/quick-model-rows.mjs +205 -0
- package/src/session-runtime/quick-search-models.mjs +47 -0
- package/src/session-runtime/session-hooks.mjs +93 -0
- package/src/session-runtime/settings-api.mjs +352 -0
- package/src/session-runtime/tool-catalog.mjs +29 -29
- package/src/session-runtime/tool-defs.mjs +84 -0
- package/src/session-runtime/warmup-schedulers.mjs +201 -0
- package/src/session-runtime/workflow.mjs +1 -1
- package/src/standalone/agent-tool/helpers.mjs +237 -0
- package/src/standalone/agent-tool/notify.mjs +107 -0
- package/src/standalone/agent-tool/provider-init.mjs +143 -0
- package/src/standalone/agent-tool/render.mjs +152 -0
- package/src/standalone/agent-tool/tool-def.mjs +55 -0
- package/src/standalone/agent-tool.mjs +138 -669
- package/src/standalone/channel-admin.mjs +102 -90
- package/src/standalone/channel-worker.mjs +4 -7
- package/src/standalone/explore-tool.mjs +64 -14
- package/src/standalone/hook-bus/config.mjs +207 -0
- package/src/standalone/hook-bus/constants.mjs +90 -0
- package/src/standalone/hook-bus/handlers.mjs +481 -0
- package/src/standalone/hook-bus/payload.mjs +31 -0
- package/src/standalone/hook-bus/rules.mjs +77 -0
- package/src/standalone/hook-bus.mjs +77 -870
- package/src/standalone/memory-runtime-proxy.mjs +7 -0
- package/src/standalone/opencode-go-login.mjs +5 -1
- package/src/standalone/provider-admin.mjs +1 -16
- package/src/standalone/usage-dashboard.mjs +3 -1
- package/src/tui/App.jsx +1059 -8110
- package/src/tui/app/app-format.mjs +213 -0
- package/src/tui/app/channel-pickers.mjs +508 -0
- package/src/tui/app/clipboard.mjs +67 -0
- package/src/tui/app/core-memory-picker.mjs +210 -0
- package/src/tui/app/extension-pickers.mjs +506 -0
- package/src/tui/app/input-parsers.mjs +193 -0
- package/src/tui/app/maintenance-pickers.mjs +356 -0
- package/src/tui/app/model-options.mjs +334 -0
- package/src/tui/app/model-picker.mjs +365 -0
- package/src/tui/app/onboarding-steps.mjs +400 -0
- package/src/tui/app/project-picker.mjs +247 -0
- package/src/tui/app/provider-setup-picker.mjs +580 -0
- package/src/tui/app/resume-picker.mjs +55 -0
- package/src/tui/app/route-pickers.mjs +419 -0
- package/src/tui/app/settings-picker.mjs +489 -0
- package/src/tui/app/slash-commands.mjs +101 -0
- package/src/tui/app/slash-dispatch.mjs +427 -0
- package/src/tui/app/text-layout.mjs +46 -0
- package/src/tui/app/theme-effort-pickers.mjs +154 -0
- package/src/tui/app/transcript-window.mjs +677 -0
- package/src/tui/app/use-mouse-input.mjs +460 -0
- package/src/tui/app/use-prompt-handlers.mjs +310 -0
- package/src/tui/app/use-transcript-scroll.mjs +512 -0
- package/src/tui/app/use-transcript-window.mjs +607 -0
- package/src/tui/components/ConfirmBar.jsx +10 -7
- package/src/tui/components/Picker.jsx +64 -15
- package/src/tui/components/PromptInput.jsx +33 -102
- package/src/tui/components/SlashCommandPalette.jsx +8 -1
- package/src/tui/components/StatusLine.jsx +69 -15
- package/src/tui/components/TextEntryPanel.jsx +11 -0
- package/src/tui/components/ToolExecution.jsx +52 -594
- package/src/tui/components/TranscriptItem.jsx +105 -0
- package/src/tui/components/UsagePanel.jsx +18 -4
- package/src/tui/components/prompt-input/edit-helpers.mjs +72 -0
- package/src/tui/components/prompt-input/voice-indicator.mjs +39 -0
- package/src/tui/components/tool-execution/ResultBody.jsx +56 -0
- package/src/tui/components/tool-execution/surface-detail.mjs +405 -0
- package/src/tui/components/tool-execution/text-format.mjs +161 -0
- package/src/tui/display-width.mjs +20 -3
- package/src/tui/dist/index.mjs +13553 -12384
- package/src/tui/engine/agent-job-feed.mjs +133 -0
- package/src/tui/engine/notification-plan.mjs +76 -0
- package/src/tui/engine/render-timing.mjs +17 -0
- package/src/tui/engine/tool-approval.mjs +94 -0
- package/src/tui/engine/tool-card-results.mjs +234 -0
- package/src/tui/engine/tool-result-status.mjs +135 -0
- package/src/tui/engine.mjs +170 -574
- package/src/tui/figures.mjs +5 -0
- package/src/tui/index.jsx +65 -1
- package/src/tui/input-editing.mjs +2 -2
- package/src/tui/markdown/format-token.mjs +4 -1
- package/src/tui/statusline-ansi-bridge.mjs +11 -3
- package/src/tui/theme.mjs +6 -0
- package/src/ui/statusline-agents.mjs +213 -0
- package/src/ui/statusline-format.mjs +146 -0
- package/src/ui/statusline-segments.mjs +148 -0
- package/src/ui/statusline.mjs +77 -501
- package/src/ui/tool-card.mjs +0 -1
- package/src/vendor/statusline/bin/statusline-route.mjs +15 -2
- package/src/workflows/default/WORKFLOW.md +16 -18
- package/src/workflows/sequential/WORKFLOW.md +16 -18
- package/vendor/ink/build/display-width.js +19 -3
- package/vendor/ink/build/ink.js +112 -7
- package/vendor/ink/build/log-update.js +17 -3
- package/vendor/ink/build/wrap-text.js +125 -0
- package/scripts/_test-folder-dialog.mjs +0 -30
- package/scripts/fix-brief-fn.mjs +0 -35
- package/scripts/fix-format-tool-surface.mjs +0 -24
- package/scripts/fix-tool-exec-visible.mjs +0 -42
- package/scripts/patch-agent-brief.mjs +0 -48
- package/scripts/patch-app.mjs +0 -21
- package/scripts/patch-app2.mjs +0 -18
- package/scripts/patch-dist-brief.mjs +0 -96
- package/scripts/patch-tool-exec.mjs +0 -70
- package/src/examples/schedules/SCHEDULE.example.md +0 -32
- package/src/examples/webhooks/WEBHOOK.example.md +0 -40
- package/src/runtime/agent/orchestrator/session/manager.reactive-persist.test.mjs +0 -107
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.test.mjs +0 -143
- package/src/runtime/agent/orchestrator/tools/builtin/diagnostics-tool.mjs +0 -285
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.test.mjs +0 -162
- package/src/runtime/agent/orchestrator/tools/builtin/open-config-tool.mjs +0 -26
- package/src/runtime/channels/lib/holidays.mjs +0 -138
- package/src/runtime/shared/channel-notification-routing.test.mjs +0 -45
- package/src/runtime/shared/task-notification-envelope.test.mjs +0 -107
- package/src/runtime/shared/tool-execution-contract.test.mjs +0 -183
- package/src/standalone/agent-task-status.test.mjs +0 -76
- package/src/tui/components/tool-output-format.test.mjs +0 -399
- package/src/tui/display-width.test.mjs +0 -35
- package/src/tui/engine-runtime-notification.test.mjs +0 -115
- package/src/tui/engine-tool-result-text.test.mjs +0 -75
- package/src/tui/input-editing.selection.test.mjs +0 -75
- package/src/tui/markdown/format-token.test.mjs +0 -354
- package/src/tui/markdown/render-ansi.test.mjs +0 -108
- package/src/tui/markdown/stream-fence.test.mjs +0 -26
- package/src/tui/markdown/streaming-markdown.test.mjs +0 -70
- package/src/tui/paste-fix.test.mjs +0 -119
- package/src/tui/prompt-history-store.test.mjs +0 -52
- package/src/tui/statusline-ansi-bridge.test.mjs +0 -159
- package/src/tui/transcript-tool-failures.test.mjs +0 -111
- package/src/ui/markdown.test.mjs +0 -70
- package/src/ui/statusline-context-label.test.mjs +0 -15
- package/src/vendor/statusline/bin/statusline-lib.mjs +0 -186
- package/src/vendor/statusline/bin/statusline-route.test.mjs +0 -80
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Provider init de-dup, extracted from the agent-tool facade as a factory so
|
|
2
|
+
// the closure state (`_providerState` / `_providerInitPending`) stays private
|
|
3
|
+
// per agent instance. Behavior-preserving: function bodies are identical to the
|
|
4
|
+
// originals; only `reg` and the chain-gate timeout are injected.
|
|
5
|
+
//
|
|
6
|
+
// Provider init de-dup. Four goals that must not conflict:
|
|
7
|
+
// (a) a parallel spawn fanout that all targets the SAME provider with the
|
|
8
|
+
// SAME effective config performs at most ONE initProviders() pass
|
|
9
|
+
// instead of N serially-awaited registry rebuilds,
|
|
10
|
+
// (b) a provider CONFIG CHANGE still reaches initProviders() so the
|
|
11
|
+
// registry's own signature guard can re-initialize it,
|
|
12
|
+
// (c) two DIFFERENT config signatures for the same provider never init
|
|
13
|
+
// concurrently — otherwise a slow init of the OLD config could land
|
|
14
|
+
// after a fast init of the NEW config and revert the live registry to
|
|
15
|
+
// stale config, and
|
|
16
|
+
// (d) a SUPERSEDED request never resolves before the provider is actually
|
|
17
|
+
// ready: even when its own (stale) init is dropped to satisfy (c), the
|
|
18
|
+
// caller (a spawn about to run prepareSpawn) must still WAIT for the
|
|
19
|
+
// latest init to finish, or it would proceed against an unprepared /
|
|
20
|
+
// stale provider.
|
|
21
|
+
//
|
|
22
|
+
// Skip cache + in-flight collapse are keyed on `provider + signature(effective
|
|
23
|
+
// config)`. To satisfy (c) we SERIALIZE all inits per provider on a chain
|
|
24
|
+
// promise and re-check the latest-requested signature inside the chain: a
|
|
25
|
+
// request superseded by a newer signature drops its own init. To satisfy (d)
|
|
26
|
+
// such a dropped request does not resolve immediately — it awaits the
|
|
27
|
+
// provider's latest settled init (tracked as a rolling "ready" promise) so the
|
|
28
|
+
// caller only proceeds once the newest config is live.
|
|
29
|
+
export function createProviderInit(reg, providerChainGateMs) {
|
|
30
|
+
// Per-provider state. `chain` serializes the ACTUAL initProviders() calls so
|
|
31
|
+
// two different config signatures never run concurrently (goal c). `latestGen`
|
|
32
|
+
// / `latestSig` track the newest requested config. `ready` is a rolling
|
|
33
|
+
// deferred that resolves only when the LATEST requested init has completed —
|
|
34
|
+
// a superseded caller awaits the ready deferred captured at call time, and
|
|
35
|
+
// when a newer request arrives the older deferred ADOPTS the newer one, so a
|
|
36
|
+
// superseded caller transitively waits for the latest init (goal d).
|
|
37
|
+
const _providerState = new Map(); // provider -> state
|
|
38
|
+
const _providerInitPending = new Map(); // provider -> { sigKey, promise } identical-sig collapse
|
|
39
|
+
// Upper bound on how long a queued init waits for the PRIOR chain link before
|
|
40
|
+
// proceeding anyway. A prior init that HANGS (never settles) must not poison
|
|
41
|
+
// the chain and wedge every later request behind it. A hung init can never
|
|
42
|
+
// *complete* against the registry, so it cannot land-after and clobber a
|
|
43
|
+
// newer config (goal c only fears slow-but-completing inits) — so proceeding
|
|
44
|
+
// once the gate expires is safe. Defaults to the spawn-prep cap; 0 disables.
|
|
45
|
+
const PROVIDER_CHAIN_GATE_MS = providerChainGateMs;
|
|
46
|
+
function providerRegistered(provider) {
|
|
47
|
+
return typeof reg.getProvider !== 'function' || Boolean(reg.getProvider(provider));
|
|
48
|
+
}
|
|
49
|
+
function effectiveProviderConfig(config, provider) {
|
|
50
|
+
const providers = { ...(config.providers || {}) };
|
|
51
|
+
providers[provider] = { ...(providers[provider] || {}), enabled: true };
|
|
52
|
+
return providers;
|
|
53
|
+
}
|
|
54
|
+
function providerStateFor(provider) {
|
|
55
|
+
let s = _providerState.get(provider);
|
|
56
|
+
if (!s) {
|
|
57
|
+
s = { chain: Promise.resolve(), completedSig: null, latestSig: null, latestGen: 0, ready: null };
|
|
58
|
+
_providerState.set(provider, s);
|
|
59
|
+
}
|
|
60
|
+
return s;
|
|
61
|
+
}
|
|
62
|
+
function providerInitSignature(provider, effectiveProviders) {
|
|
63
|
+
let body;
|
|
64
|
+
try { body = JSON.stringify(effectiveProviders); }
|
|
65
|
+
catch { body = String(Date.now()); } // unserializable → force a fresh init
|
|
66
|
+
return `${provider}\u0000${body}`;
|
|
67
|
+
}
|
|
68
|
+
function gateOnPrior(prior) {
|
|
69
|
+
const settled = Promise.resolve(prior).catch(() => {});
|
|
70
|
+
if (!(PROVIDER_CHAIN_GATE_MS > 0)) return settled;
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
let done = false;
|
|
73
|
+
const finish = () => { if (!done) { done = true; resolve(); } };
|
|
74
|
+
const timer = setTimeout(finish, PROVIDER_CHAIN_GATE_MS);
|
|
75
|
+
timer.unref?.();
|
|
76
|
+
settled.then(() => { clearTimeout(timer); finish(); }, () => { clearTimeout(timer); finish(); });
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
function ensureProvider(config, provider) {
|
|
80
|
+
const effective = effectiveProviderConfig(config, provider);
|
|
81
|
+
const sigKey = providerInitSignature(provider, effective);
|
|
82
|
+
const registered = () => providerRegistered(provider);
|
|
83
|
+
const s = providerStateFor(provider);
|
|
84
|
+
// Completed-skip: this exact effective config is already live for this
|
|
85
|
+
// provider. A config change flips sigKey so we fall through; a torn-down
|
|
86
|
+
// provider (no longer registered) also does.
|
|
87
|
+
if (s.completedSig === sigKey && registered()) return Promise.resolve();
|
|
88
|
+
// Identical-sig collapse: a request with the SAME sigKey is already in
|
|
89
|
+
// flight — share its caller promise.
|
|
90
|
+
const pending = _providerInitPending.get(provider);
|
|
91
|
+
if (pending && pending.sigKey === sigKey) return pending.promise;
|
|
92
|
+
// New generation. Repoint the rolling `ready` deferred to THIS gen and make
|
|
93
|
+
// the previous gen's deferred ADOPT the new one, so any superseded caller
|
|
94
|
+
// awaiting an older deferred transitively waits for the newest init (d).
|
|
95
|
+
const gen = ++s.latestGen;
|
|
96
|
+
s.latestSig = sigKey;
|
|
97
|
+
const prevReady = s.ready;
|
|
98
|
+
let resolveReady;
|
|
99
|
+
const readyPromise = new Promise((r) => { resolveReady = r; });
|
|
100
|
+
s.ready = { gen, promise: readyPromise, resolve: resolveReady };
|
|
101
|
+
if (prevReady && prevReady.gen < gen) {
|
|
102
|
+
try { prevReady.resolve(readyPromise); } catch { /* already settled */ }
|
|
103
|
+
}
|
|
104
|
+
// Serialize the ACTUAL init behind the prior chain link (gated so a hung
|
|
105
|
+
// prior cannot wedge the chain). A superseded gen's chain link settles
|
|
106
|
+
// quickly — it never awaits a later gen — so there is no deadlock.
|
|
107
|
+
const prior = s.chain;
|
|
108
|
+
const chainLink = gateOnPrior(prior).then(async () => {
|
|
109
|
+
if (s.latestGen !== gen) {
|
|
110
|
+
// Superseded before we ran: drop our (stale) init entirely (goal c).
|
|
111
|
+
// Our `ready` deferred already adopts the newer gen, so the caller below
|
|
112
|
+
// still waits for the latest init. Settle now to release the chain.
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
if (!(s.completedSig === sigKey && registered())) {
|
|
117
|
+
await reg.initProviders(effective);
|
|
118
|
+
s.completedSig = sigKey;
|
|
119
|
+
}
|
|
120
|
+
} finally {
|
|
121
|
+
// ALWAYS release this gen's waiters once we are the latest — even on a
|
|
122
|
+
// registry init failure. Adopting (superseded) callers chained onto this
|
|
123
|
+
// deferred would otherwise hang forever; instead they proceed and their
|
|
124
|
+
// own createSession()/prep-timeout surfaces the unprepared provider.
|
|
125
|
+
resolveReady();
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
// Next chain link waits on us (settled, never poisoned).
|
|
129
|
+
s.chain = chainLink.catch(() => {});
|
|
130
|
+
// The CALLER awaits the ready deferred (resolves only when the LATEST init
|
|
131
|
+
// for this provider completes), not just the chain link — so a superseded
|
|
132
|
+
// caller blocks until the newest config is live (goal d). chainLink is
|
|
133
|
+
// awaited first so a registry init error surfaces to this caller.
|
|
134
|
+
const callerPromise = chainLink.then(() => readyPromise).finally(() => {
|
|
135
|
+
const cur = _providerInitPending.get(provider);
|
|
136
|
+
if (cur && cur.promise === callerPromise) _providerInitPending.delete(provider);
|
|
137
|
+
});
|
|
138
|
+
_providerInitPending.set(provider, { sigKey, promise: callerPromise });
|
|
139
|
+
return callerPromise;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return { ensureProvider };
|
|
143
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
// Result-rendering + finish-classification helpers extracted from the
|
|
2
|
+
// agent-tool facade. Pure functions; behavior-preserving (bodies identical to
|
|
3
|
+
// the originals, only cross-module deps are now imported).
|
|
4
|
+
import { appendAgentProgressKv } from '../agent-task-status.mjs';
|
|
5
|
+
import { compactIso, elapsedFromStamps, stripFinalAnswerWrapper } from './helpers.mjs';
|
|
6
|
+
|
|
7
|
+
// A worker that hits the loop iteration ceiling, gets truncated mid-synthesis,
|
|
8
|
+
// or produces an empty terminal turn returns content:'' but never throws — so
|
|
9
|
+
// the background task would otherwise reconcile as a benign `completed` empty
|
|
10
|
+
// success. That is wrong: an empty final answer is an error. loop.mjs is the
|
|
11
|
+
// single classifier: it tags result.terminationReason for abnormal finishes
|
|
12
|
+
// (carried through manager.mjs terminalResultPreview). We key purely off that
|
|
13
|
+
// here. iteration_cap / truncated are real problems for EVERY agent (hidden
|
|
14
|
+
// too). The plain `empty` case is tagged by the loop ONLY for public agents;
|
|
15
|
+
// hidden agents (explorer/cycle/…) legitimately emit empty terminal turns and
|
|
16
|
+
// are left untagged, so they stay benign.
|
|
17
|
+
export function abnormalEmptyFinishError(result, agent) {
|
|
18
|
+
// The loop (loop.mjs) is the single classifier: it tags terminationReason
|
|
19
|
+
// ONLY for abnormal finishes, and gates the `empty` case behind !hidden.
|
|
20
|
+
// So we key purely off terminationReason here — no separate content/hidden
|
|
21
|
+
// check, which previously (a) exempted hidden agents from cap/truncated and
|
|
22
|
+
// (b) let a capped tool-call turn with preamble text slip through as success.
|
|
23
|
+
const reason = result?.terminationReason;
|
|
24
|
+
if (!reason) return null;
|
|
25
|
+
const iterations = result?.iterations ?? 0;
|
|
26
|
+
const toolCallsTotal = result?.toolCallsTotal ?? 0;
|
|
27
|
+
const maxLoopIterations = result?.maxLoopIterations ?? 0;
|
|
28
|
+
const stopReason = result?.stopReason ?? result?.stop_reason ?? null;
|
|
29
|
+
switch (reason) {
|
|
30
|
+
case 'iteration_cap':
|
|
31
|
+
// Real problem for EVERY agent (hidden too): the loop never terminated on
|
|
32
|
+
// its own contract, so any preamble text is not a trustworthy final answer.
|
|
33
|
+
return `agent '${agent}' hit the loop iteration ceiling (${maxLoopIterations} iterations, ${toolCallsTotal} tool calls) without producing a final answer`;
|
|
34
|
+
case 'truncated':
|
|
35
|
+
return `agent '${agent}' response was truncated (stopReason=${stopReason}) before a final answer (${iterations} iterations, ${toolCallsTotal} tool calls)`;
|
|
36
|
+
case 'empty':
|
|
37
|
+
// Only tagged for PUBLIC agents (hidden agents legitimately emit empty
|
|
38
|
+
// terminal turns and are left untagged by the loop).
|
|
39
|
+
return `agent '${agent}' finished without a final answer (stopReason=${stopReason ?? 'none'}, ${iterations} iterations, ${toolCallsTotal} tool calls)`;
|
|
40
|
+
default:
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function renderResult(value) {
|
|
46
|
+
if (value === undefined || value === null) return '';
|
|
47
|
+
if (typeof value === 'string') return value;
|
|
48
|
+
if (value && typeof value === 'object') {
|
|
49
|
+
const lines = [];
|
|
50
|
+
|
|
51
|
+
if (Array.isArray(value.workers) || Array.isArray(value.jobs)) {
|
|
52
|
+
const workers = Array.isArray(value.workers) ? value.workers : [];
|
|
53
|
+
lines.push(`agents: ${workers.length}`);
|
|
54
|
+
for (const worker of workers) {
|
|
55
|
+
const tokens = worker.windowTokens ? ` ctx=${worker.windowTokens}${worker.windowCap ? `/${worker.windowCap}` : ''}` : '';
|
|
56
|
+
const terminal = worker.clientHostPid ? ` term=${worker.clientHostPid}` : '';
|
|
57
|
+
const base = `- ${worker.tag} ${worker.agent || 'agent'} ${worker.status || 'idle'}/${worker.worker_stage || worker.stage || 'idle'} ${worker.provider}/${worker.model}${terminal}${tokens}`;
|
|
58
|
+
lines.push(appendAgentProgressKv(base, worker));
|
|
59
|
+
}
|
|
60
|
+
const jobs = Array.isArray(value.jobs) ? value.jobs : [];
|
|
61
|
+
lines.push(`tasks: ${jobs.length}`);
|
|
62
|
+
for (const job of jobs) {
|
|
63
|
+
const target = job.tag || job.sessionId || '-';
|
|
64
|
+
const terminal = job.clientHostPid ? ` term=${job.clientHostPid}` : '';
|
|
65
|
+
const base = `- ${job.task_id} ${job.type} ${job.status} target=${target}${terminal}${job.error ? ` error=${job.error}` : ''}`;
|
|
66
|
+
lines.push(appendAgentProgressKv(base, job));
|
|
67
|
+
}
|
|
68
|
+
if (workers.length === 0 && jobs.length === 0) lines.push('(no agents or tasks)');
|
|
69
|
+
return lines.join('\n');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (value.task_id) {
|
|
73
|
+
// Spawn/send acks: the task just started, so runtime diagnostics
|
|
74
|
+
// (worker_stage/last_progress/diagnostic/watchdog/silent_for) are
|
|
75
|
+
// always in their "not started yet" placeholder state — pure token
|
|
76
|
+
// cost for the model. Keep the ack minimal (existing surface rule:
|
|
77
|
+
// minimum characters, maximum information); full diagnostics remain
|
|
78
|
+
// on explicit status/read recovery calls.
|
|
79
|
+
const isStartAck = value.status === 'running'
|
|
80
|
+
&& (value.type === 'spawn' || value.type === 'send');
|
|
81
|
+
lines.push(`agent task: ${value.task_id}`);
|
|
82
|
+
lines.push(`status: ${value.status}`);
|
|
83
|
+
if (value.type) lines.push(`type: ${value.type}`);
|
|
84
|
+
if (value.reused) lines.push('reused: true');
|
|
85
|
+
if (value.tag || value.sessionId) lines.push(`target: ${value.tag || '-'} ${value.sessionId || ''}`.trim());
|
|
86
|
+
if (value.agent) lines.push(`agent: ${value.agent}`);
|
|
87
|
+
if (value.provider && value.model) lines.push(`model: ${value.provider}/${value.model}`);
|
|
88
|
+
if (value.effort) lines.push(`effort: ${value.effort}`);
|
|
89
|
+
if (value.fast === true || value.fast === false) lines.push(`fast: ${value.fast ? 'on' : 'off'}`);
|
|
90
|
+
if (value.maxLoopIterations) {
|
|
91
|
+
const limitParts = [];
|
|
92
|
+
if (value.maxLoopIterations) limitParts.push(`loop=${value.maxLoopIterations}`);
|
|
93
|
+
lines.push(`limits: ${limitParts.join(' ')}`);
|
|
94
|
+
}
|
|
95
|
+
if (!isStartAck) {
|
|
96
|
+
if (value.stage || value.workerStatus) lines.push(`worker: ${value.workerStatus || 'unknown'}/${value.stage || 'unknown'}`);
|
|
97
|
+
if (value.worker_stage) lines.push(`worker_stage: ${value.worker_stage}`);
|
|
98
|
+
if (value.last_progress) lines.push(`last_progress: ${value.last_progress}`);
|
|
99
|
+
if (Number.isFinite(value.silent_for)) lines.push(`silent_for: ${value.silent_for}s`);
|
|
100
|
+
if (value.watchdog) lines.push(`watchdog: ${value.watchdog}`);
|
|
101
|
+
if (Number.isFinite(value.queued_followups)) lines.push(`queued_followups: ${value.queued_followups}`);
|
|
102
|
+
if (value.diagnostic) lines.push(`diagnostic: ${value.diagnostic}`);
|
|
103
|
+
if (value.startedAt) lines.push(`started: ${compactIso(value.startedAt)}`);
|
|
104
|
+
if (value.finishedAt) lines.push(`finished: ${compactIso(value.finishedAt)}`);
|
|
105
|
+
{
|
|
106
|
+
const elapsed = elapsedFromStamps(value.startedAt, value.finishedAt, value.status);
|
|
107
|
+
if (elapsed) lines.push(`elapsed: ${elapsed}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (value.error) lines.push(`error: ${value.error}`);
|
|
111
|
+
if (value.status === 'running') lines.push('notification: completion will be delivered; end the turn.');
|
|
112
|
+
if (value.result !== undefined) {
|
|
113
|
+
const result = value.result;
|
|
114
|
+
const content = typeof result === 'string' ? result : result?.content;
|
|
115
|
+
if (content) lines.push('', stripFinalAnswerWrapper(content));
|
|
116
|
+
else lines.push('', JSON.stringify(result, null, 2));
|
|
117
|
+
}
|
|
118
|
+
return lines.join('\n');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (value.queued) {
|
|
122
|
+
return [
|
|
123
|
+
'agent message queued',
|
|
124
|
+
value.reused ? 'reused: true' : null,
|
|
125
|
+
`target: ${value.tag || '-'} ${value.sessionId || ''}`.trim(),
|
|
126
|
+
value.agent ? `agent: ${value.agent}` : null,
|
|
127
|
+
`queueDepth: ${value.queueDepth ?? 1}`,
|
|
128
|
+
].filter(Boolean).join('\n');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (value.closed !== undefined) {
|
|
132
|
+
return [
|
|
133
|
+
`agent close: ${value.closed ? 'ok' : 'not closed'}`,
|
|
134
|
+
value.tag ? `tag: ${value.tag}` : null,
|
|
135
|
+
value.sessionId ? `sessionId: ${value.sessionId}` : null,
|
|
136
|
+
value.task_id ? `task_id: ${value.task_id}` : null,
|
|
137
|
+
value.forgotten ? 'forgotten: true' : null,
|
|
138
|
+
].filter(Boolean).join('\n');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (value.content !== undefined) {
|
|
142
|
+
const header = [
|
|
143
|
+
value.respawned ? 'agent respawned' : 'agent result',
|
|
144
|
+
value.tag ? `tag=${value.tag}` : null,
|
|
145
|
+
value.agent ? `agent=${value.agent}` : null,
|
|
146
|
+
value.provider && value.model ? `${value.provider}/${value.model}` : null,
|
|
147
|
+
].filter(Boolean).join(' ');
|
|
148
|
+
return `${header}\n${stripFinalAnswerWrapper(value.content)}`;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return JSON.stringify(value, null, 2);
|
|
152
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Static agent-tool descriptor + spawn/route constants. Extracted from the
|
|
2
|
+
// agent-tool facade as a behavior-preserving split; values are byte-identical
|
|
3
|
+
// to the originals.
|
|
4
|
+
|
|
5
|
+
export const PRESET_ALIASES = new Map([
|
|
6
|
+
['opus-xhigh', { base: 'opus-high', effort: 'xhigh', id: 'opus-xhigh', name: 'OPUS XHIGH' }],
|
|
7
|
+
]);
|
|
8
|
+
|
|
9
|
+
export const DEFAULT_AGENT_PRESETS = Object.freeze({
|
|
10
|
+
explore: 'sonnet-high',
|
|
11
|
+
maintainer: 'haiku',
|
|
12
|
+
worker: 'sonnet-high',
|
|
13
|
+
'heavy-worker': 'sonnet-high',
|
|
14
|
+
reviewer: 'opus-xhigh',
|
|
15
|
+
debugger: 'opus-xhigh',
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Mirrors DEFAULT_PROVIDER in mixdog-session-runtime.mjs. Used only as the
|
|
19
|
+
// last-resort fallback when a stored agent route omits its provider and the
|
|
20
|
+
// config carries no defaultProvider.
|
|
21
|
+
export const DEFAULT_PROVIDER = 'anthropic-oauth';
|
|
22
|
+
|
|
23
|
+
export const WORKER_INDEX_FILE = 'agent-workers.json';
|
|
24
|
+
|
|
25
|
+
export const ACTIVE_STAGES = new Set(['connecting', 'requesting', 'streaming', 'tool_running', 'running', 'cancelling']);
|
|
26
|
+
|
|
27
|
+
export const AGENT_TOOL = {
|
|
28
|
+
name: 'agent',
|
|
29
|
+
title: 'Agent',
|
|
30
|
+
annotations: {
|
|
31
|
+
title: 'Agent',
|
|
32
|
+
readOnlyHint: false,
|
|
33
|
+
destructiveHint: true,
|
|
34
|
+
idempotentHint: false,
|
|
35
|
+
openWorldHint: true,
|
|
36
|
+
agentHidden: true,
|
|
37
|
+
},
|
|
38
|
+
description: 'Delegate scoped work. Agent handoffs always start background tasks and return task IDs immediately. Spawn independent scopes in parallel with distinct tags; for the same scope, use send or spawn with the same tag to reuse the live session. Wait for the completion notification before dependent work. Do not call status/read after spawn; they are manual recovery only.',
|
|
39
|
+
inputSchema: {
|
|
40
|
+
type: 'object',
|
|
41
|
+
properties: {
|
|
42
|
+
type: { type: 'string', enum: ['spawn', 'send', 'list', 'close', 'cancel', 'status', 'read', 'cleanup'], description: 'Action. Default spawn.' },
|
|
43
|
+
task_id: { type: 'string', description: 'Manual recovery task ID.' },
|
|
44
|
+
agent: { type: 'string', description: 'Workflow agent id.' },
|
|
45
|
+
tag: { type: 'string', description: 'Stable scope handle. Reuse the same tag for follow-up on the same scope; use distinct tags only for independent scopes.' },
|
|
46
|
+
sessionId: { type: 'string', description: 'Raw sess_ id.' },
|
|
47
|
+
prompt: { type: 'string', description: 'Scoped task brief.' },
|
|
48
|
+
message: { type: 'string', description: 'Follow-up for send/reuse, or brief.' },
|
|
49
|
+
file: { type: 'string', description: 'Prompt file.' },
|
|
50
|
+
cwd: { type: 'string', description: 'Working directory.' },
|
|
51
|
+
context: { type: 'string', description: 'Extra agent context.' },
|
|
52
|
+
},
|
|
53
|
+
additionalProperties: true,
|
|
54
|
+
},
|
|
55
|
+
};
|