mixdog 1.3.1 → 1.3.3
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 +8 -4
- package/package.json +8 -8
- package/scripts/native-release-status.mjs +238 -0
- package/scripts/verify-runtime-dependency-versions.mjs +158 -0
- package/src/agents/reviewer/AGENT.md +5 -7
- package/src/agents/reviewer/agent.json +1 -1
- package/src/defaults/shipped-history.json +9 -1
- package/src/defaults/skills/browser-use/SKILL.md +6 -3
- package/src/defaults/skills/local-provider/SKILL.md +33 -6
- package/src/defaults/skills/pptx/scripts/qc-pages.mjs +3 -2
- package/src/defaults/skills/setup/SKILL.md +23 -1
- package/src/defaults/skills/setup/references/actions.md +50 -3
- package/src/defaults/skills/setup/references/surfaces.md +23 -3
- package/src/defaults/skills/setup-guide/SKILL.md +7 -3
- package/src/defaults/skills/visualize/SKILL.md +9 -6
- package/src/defaults/skills/visualize/references/craft.md +8 -1
- package/src/help.mjs +1 -1
- package/src/lib/keychain-cjs.cjs +4 -1
- package/src/lib/rules-builder.cjs +14 -7
- package/src/rules/agent-mode/AGENT_MODE.md +8 -5
- package/src/rules/agent-mode/MIXY.md +6 -8
- package/src/rules/lead/LEAD.md +7 -10
- package/src/rules/shared/10-tool-workflow.md +4 -0
- package/src/rules/shared/20-research.md +2 -0
- package/src/rules/shared/45-destructive.md +5 -1
- package/src/rules/shared/60-verification.md +6 -4
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +5 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +8 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -1
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +114 -26
- package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +8 -0
- package/src/runtime/agent/orchestrator/agent-runtime/room-supervisor-completion.mjs +5 -4
- package/src/runtime/agent/orchestrator/agent-trace.mjs +3 -0
- package/src/runtime/agent/orchestrator/cache-break-trace.mjs +4 -0
- package/src/runtime/agent/orchestrator/config-presets.mjs +2 -0
- package/src/runtime/agent/orchestrator/config-storage.mjs +10 -3
- package/src/runtime/agent/orchestrator/config.mjs +11 -0
- package/src/runtime/agent/orchestrator/context/role-instructions.mjs +9 -2
- package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +97 -5
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +6 -10
- package/src/runtime/agent/orchestrator/mcp/client.mjs +7 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +84 -32
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +38 -11
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +15 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +84 -42
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +14 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +6 -2
- package/src/runtime/agent/orchestrator/providers/auto-effort.mjs +27 -8
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +31 -4
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +14 -1
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +11 -8
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-prefix-trace.mjs +76 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +16 -0
- package/src/runtime/agent/orchestrator/providers/lib/tail-reminder-split.mjs +13 -0
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +16 -1
- package/src/runtime/agent/orchestrator/providers/mixdog-local.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +5 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +9 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +30 -3
- package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +61 -8
- package/src/runtime/agent/orchestrator/providers/registry.mjs +19 -0
- package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +13 -1
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +90 -24
- package/src/runtime/agent/orchestrator/runtime-core/fs-utils.mjs +8 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-mutations.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-runtime.mjs +5 -0
- package/src/runtime/agent/orchestrator/runtime-core/goal-storage.mjs +68 -22
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-exec.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +10 -1
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +4 -6
- package/src/runtime/agent/orchestrator/runtime-core/route-context-state.mjs +81 -0
- package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +2 -1
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +52 -6
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +35 -13
- package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +7 -6
- package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/workflow/packs.mjs +8 -4
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +8 -3
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/agent-mode.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/agent-room-supervisor.d.mts +1 -1
- package/src/runtime/agent/orchestrator/session/agent-room-supervisor.mjs +22 -4
- package/src/runtime/agent/orchestrator/session/agent-room.d.mts +30 -2
- package/src/runtime/agent/orchestrator/session/agent-room.mjs +196 -45
- package/src/runtime/agent/orchestrator/session/attachment-preflight.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/compact/continuation.mjs +15 -6
- package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +45 -19
- package/src/runtime/agent/orchestrator/session/compact/forked-summary.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +44 -0
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +185 -37
- package/src/runtime/agent/orchestrator/session/compact/summary-mode.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/compact/summary-route.mjs +87 -0
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +6 -2
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +41 -10
- package/src/runtime/agent/orchestrator/session/human-gate/delegation.mjs +240 -0
- package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +102 -35
- package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +20 -0
- package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +19 -9
- package/src/runtime/agent/orchestrator/session/human-gate/run-policy.mjs +73 -0
- package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +55 -27
- package/src/runtime/agent/orchestrator/session/human-gate/unattended-port.mjs +15 -0
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +199 -109
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/continuation.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/empty-nudge.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +62 -13
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +22 -6
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +6 -2
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +5 -5
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +33 -8
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/call-prep.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +27 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +11 -5
- package/src/runtime/agent/orchestrator/session/manager/agent-listing-notice.mjs +102 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-queue.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +13 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +13 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +27 -14
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +14 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-steering-drain.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +44 -18
- package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +32 -1
- package/src/runtime/agent/orchestrator/session/manager/orchestration-mode-switch-notice.mjs +115 -0
- package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +42 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +3 -9
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +5 -3
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +36 -0
- package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +40 -1
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +20 -0
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +28 -9
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +55 -27
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +4 -9
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +14 -1
- package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +7 -3
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +6 -15
- package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +24 -8
- package/src/runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs +94 -13
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +52 -11
- package/src/runtime/agent/orchestrator/session/provider-prefix-guard.mjs +21 -3
- package/src/runtime/agent/orchestrator/session/routine-result.d.mts +18 -3
- package/src/runtime/agent/orchestrator/session/routine-result.mjs +126 -12
- package/src/runtime/agent/orchestrator/session/runtime-user-context.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +16 -3
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +41 -7
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +10 -2
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +14 -2
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +15 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +5 -4
- package/src/runtime/agent/orchestrator/session/store/sweep/sub-agent-retention.mjs +140 -0
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-plan.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +15 -5
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +49 -1
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +80 -1
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +40 -5
- package/src/runtime/agent/orchestrator/session/store-summary-last-message.mjs +47 -2
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +33 -1
- package/src/runtime/agent/orchestrator/session/store-summary-visibility.d.mts +5 -0
- package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +37 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +125 -0
- package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +78 -43
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +35 -5
- package/src/runtime/agent/orchestrator/session/transcript-restore/user-text.mjs +42 -2
- package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +47 -14
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +25 -5
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +13 -14
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/transport-artifacts.mjs +9 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +19 -14
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +7 -1
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +127 -20
- package/src/runtime/agent/orchestrator/tools/builtin/git-worktree-tool.mjs +557 -0
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +10 -12
- package/src/runtime/agent/orchestrator/tools/builtin/pdf-test-fixtures.mjs +5 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-image.mjs +4 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-media.mjs +47 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +264 -87
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +10 -4
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +42 -23
- package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +8 -4
- package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +9 -30
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +24 -12
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/patch/delete-quarantine.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/patch/replay-capture.mjs +4 -2
- package/src/runtime/agent/orchestrator/tools/patch/rollback-state.mjs +33 -2
- package/src/runtime/agent/orchestrator/tools/patch-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +5 -3
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +3 -1
- package/src/runtime/attachments/attachment-reference.mjs +155 -0
- package/src/runtime/attachments/legacy-office.mjs +110 -0
- package/src/runtime/attachments/limits.mjs +5 -1
- package/src/runtime/attachments/office-extract.mjs +3 -6
- package/src/runtime/attachments/pdf-extract.mjs +84 -10
- package/src/runtime/attachments/prompt-restore.mjs +70 -0
- package/src/runtime/attachments/store.mjs +109 -33
- package/src/runtime/browser-bridge/client.mjs +73 -20
- package/src/runtime/channels/lib/runtime-paths.mjs +1 -1
- package/src/runtime/channels/lib/scheduler.mjs +14 -7
- package/src/runtime/channels/lib/state-file.mjs +15 -15
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +14 -13
- package/src/runtime/channels/lib/webhook/relay-tunnel.mjs +22 -18
- package/src/runtime/channels/lib/webhook/session-dispatch.mjs +14 -36
- package/src/runtime/channels/lib/worker-main.mjs +3 -2
- package/src/runtime/effort-judge/compact-tokenizer.mjs +8 -2
- package/src/runtime/effort-judge/judge-client.mjs +66 -16
- package/src/runtime/effort-judge/model-install.mjs +47 -7
- package/src/runtime/local-provider/asset-installer.mjs +10 -4
- package/src/runtime/local-provider/catalog.mjs +5 -2
- package/src/runtime/local-provider/registered-models.mjs +64 -27
- package/src/runtime/local-provider/server.mjs +2 -3
- package/src/runtime/media/adapters/image-api.mjs +89 -0
- package/src/runtime/media/auth.mjs +64 -1
- package/src/runtime/media/catalog.mjs +66 -4
- package/src/runtime/media/jobs.mjs +4 -0
- package/src/runtime/media/lanes.mjs +46 -5
- package/src/runtime/media/media-usage.mjs +17 -0
- package/src/runtime/media/renditions.mjs +15 -15
- package/src/runtime/media/store.mjs +36 -35
- package/src/runtime/media/tool.mjs +8 -1
- package/src/runtime/memory/lib/cycle-scheduler/health-ledger.mjs +8 -2
- package/src/runtime/memory/lib/embedding-model-files.mjs +30 -7
- package/src/runtime/memory/lib/ingest/transcript-tail.mjs +16 -7
- package/src/runtime/memory/lib/memory-chunk-quality.mjs +14 -2
- package/src/runtime/memory/lib/pg/process.mjs +8 -4
- package/src/runtime/memory/lib/project-id-resolver.mjs +5 -1
- package/src/runtime/memory/lib/runtime-fetcher.mjs +6 -1
- package/src/runtime/office/core/journal.mjs +7 -14
- package/src/runtime/office/design/library/design-library-core.mjs +4 -16
- package/src/runtime/office/pdf/ocr-engine-worker.mjs +37 -0
- package/src/runtime/office/pdf/ocr-engine.mjs +146 -0
- package/src/runtime/office/pdf/pdf-ocr.mjs +51 -21
- package/src/runtime/office/pdf/pdf-render.mjs +30 -18
- package/src/runtime/office/portable/ooxml-validator.mjs +2 -2
- package/src/runtime/office/portable/portable-soffice.mjs +135 -29
- package/src/runtime/shared/agent-avatar-sprites.mjs +23 -8
- package/src/runtime/shared/agent-avatar.mjs +3 -2
- package/src/runtime/shared/agent-kind-migration.mjs +200 -0
- package/src/runtime/shared/agent-message-envelope.d.mts +6 -0
- package/src/runtime/shared/agent-message-envelope.mjs +44 -0
- package/src/runtime/shared/agent-reap-state.d.mts +4 -0
- package/src/runtime/shared/agent-room-host.d.mts +31 -0
- package/src/runtime/shared/agent-room-host.mjs +58 -0
- package/src/runtime/shared/agent-store.mjs +24 -7
- package/src/runtime/shared/agent-task-starts.mjs +27 -0
- package/src/runtime/shared/atomic-file.d.mts +50 -0
- package/src/runtime/shared/atomic-file.mjs +394 -132
- package/src/runtime/shared/background-tasks.mjs +7 -4
- package/src/runtime/shared/bot-hops.mjs +35 -0
- package/src/runtime/shared/bot-split-migration.mjs +1 -1
- package/src/runtime/shared/bounded-download.mjs +4 -2
- package/src/runtime/shared/config.mjs +39 -9
- package/src/runtime/shared/defaults-separation.mjs +6 -2
- package/src/runtime/shared/delegated-approval-host.mjs +74 -0
- package/src/runtime/shared/err-text.mjs +4 -0
- package/src/runtime/shared/error-presentation.mjs +22 -4
- package/src/runtime/shared/file-has-data.mjs +28 -0
- package/src/runtime/shared/llm/usage-ledger-import.mjs +37 -18
- package/src/runtime/shared/pending-agent-work.mjs +54 -0
- package/src/runtime/shared/process-lifecycle.mjs +8 -12
- package/src/runtime/shared/projects.mjs +50 -41
- package/src/runtime/shared/provider-accounts.mjs +17 -12
- package/src/runtime/shared/redact-directories.mjs +18 -0
- package/src/runtime/shared/remove-directory.mjs +28 -0
- package/src/runtime/shared/routine-trigger.d.mts +6 -1
- package/src/runtime/shared/routine-trigger.mjs +14 -6
- package/src/runtime/shared/run-child.d.mts +3 -0
- package/src/runtime/shared/run-child.mjs +24 -3
- package/src/runtime/shared/session-baseline-store.mjs +8 -2
- package/src/runtime/shared/session-sidebar-host.d.mts +11 -2
- package/src/runtime/shared/session-sidebar-host.mjs +16 -3
- package/src/runtime/shared/singleton-owner.mjs +7 -6
- package/src/runtime/shared/skill-tool-dependencies.mjs +4 -10
- package/src/runtime/shared/staged-update.mjs +4 -2
- package/src/runtime/shared/statusline/statusline-segments.mjs +4 -15
- package/src/runtime/shared/tool-execution-contract.mjs +10 -0
- package/src/runtime/shared/tool-work-units.mjs +12 -9
- package/src/runtime/shared/transcript-metadata.mjs +28 -3
- package/src/runtime/shared/transcript-writer/session-record.mjs +7 -6
- package/src/runtime/shared/turn-snapshot-store.mjs +5 -4
- package/src/runtime/shared/turn-snapshot.mjs +277 -124
- package/src/runtime/shared/user-cwd.mjs +9 -4
- package/src/runtime/shared/user-data-guard.mjs +92 -61
- package/src/runtime/shared/utf8-cut.mjs +10 -0
- package/src/runtime/shared/worktrees/activity-gate.mjs +251 -61
- package/src/runtime/shared/worktrees/contract.mjs +11 -3
- package/src/runtime/shared/worktrees/maintenance.mjs +11 -2
- package/src/runtime/shared/worktrees/manager.mjs +419 -52
- package/src/runtime/shared/worktrees/registry.mjs +29 -27
- package/src/runtime/shared/worktrees/tool-host.mjs +39 -0
- package/src/runtime/tidy/core-install.mjs +26 -4
- package/src/runtime/tidy/install.mjs +91 -23
- package/src/runtime/tidy/process.mjs +41 -8
- package/src/runtime/tidy/resolve.mjs +10 -7
- package/src/runtime/web-search/lib/config.mjs +4 -16
- package/src/session-runtime/agent-home-delivery.mjs +542 -204
- package/src/session-runtime/agent-profile-changes.mjs +16 -0
- package/src/session-runtime/agent-room-delivery.mjs +81 -35
- package/src/session-runtime/agent-task-sessions.mjs +811 -179
- package/src/session-runtime/agent-tool-routing.mjs +1 -0
- package/src/session-runtime/boot/apis.mjs +48 -24
- package/src/session-runtime/boot/config.mjs +1 -0
- package/src/session-runtime/boot/facade.mjs +16 -7
- package/src/session-runtime/boot/infrastructure.mjs +14 -2
- package/src/session-runtime/boot/providers.mjs +2 -2
- package/src/session-runtime/boot/shared.mjs +12 -6
- package/src/session-runtime/boot/tools.mjs +23 -3
- package/src/session-runtime/bot-status.mjs +432 -0
- package/src/session-runtime/config-lifecycle/lead-route-sync.mjs +29 -0
- package/src/session-runtime/config-lifecycle.mjs +60 -55
- package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -4
- package/src/session-runtime/held-requests.mjs +31 -33
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +10 -1
- package/src/session-runtime/internal-tool-executor/feature-tools.mjs +2 -2
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +24 -26
- package/src/session-runtime/lifecycle/session-catalog.mjs +12 -2
- package/src/session-runtime/lifecycle/teardown.mjs +11 -3
- package/src/session-runtime/mcp-glue/connect.mjs +100 -186
- package/src/session-runtime/mcp-glue/initial-connect-gate.mjs +57 -0
- package/src/session-runtime/mcp-glue/server-connection.mjs +71 -0
- package/src/session-runtime/media-api.mjs +5 -2
- package/src/session-runtime/model-recency.mjs +1 -0
- package/src/session-runtime/model-route/route-tuning.mjs +4 -1
- package/src/session-runtime/model-route/set-route.mjs +61 -1
- package/src/session-runtime/owned-automation-run.mjs +8 -1
- package/src/session-runtime/provider-models/row-hydration.mjs +8 -1
- package/src/session-runtime/quick-model-rows/model-meta.mjs +2 -0
- package/src/session-runtime/quick-model-rows/provider-rows.mjs +7 -1
- package/src/session-runtime/route-resolution.mjs +16 -8
- package/src/session-runtime/route-state.mjs +1 -59
- package/src/session-runtime/routine-home-turn.mjs +5 -3
- package/src/session-runtime/runtime-bootstrap.mjs +5 -3
- package/src/session-runtime/runtime-paths.mjs +11 -5
- package/src/session-runtime/runtime-review-api.mjs +4 -1
- package/src/session-runtime/runtime-tunables.mjs +6 -0
- package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +11 -2
- package/src/session-runtime/services/agent-tool/close-flow.mjs +4 -2
- package/src/session-runtime/services/agent-tool/execute-send.mjs +1 -0
- package/src/session-runtime/services/agent-tool/execute-spawn.mjs +1 -0
- package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +34 -19
- package/src/session-runtime/services/agent-tool/restart-notify.mjs +10 -0
- package/src/session-runtime/services/agent-tool/send-flow.mjs +25 -21
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +7 -0
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +6 -3
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +8 -5
- package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +22 -2
- package/src/session-runtime/services/agent-tool/worker-index.mjs +4 -6
- package/src/session-runtime/services/agent-tool.mjs +6 -0
- package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +1 -1
- package/src/session-runtime/services/daemon-crash-capture/retention.mjs +4 -3
- package/src/session-runtime/services/hook-bus/config-loader.mjs +14 -5
- package/src/session-runtime/services/hook-bus/rule-file.mjs +49 -11
- package/src/session-runtime/services/plugin-admin.mjs +26 -26
- package/src/session-runtime/services/provider-admin.mjs +26 -6
- package/src/session-runtime/services/schedule-access.mjs +33 -4
- package/src/session-runtime/services/seeds.mjs +4 -3
- package/src/session-runtime/services/usage-dashboard.mjs +1 -1
- package/src/session-runtime/services/usage-stats-model.mjs +2 -1
- package/src/session-runtime/services/worktree-access.mjs +27 -0
- package/src/session-runtime/session-create/materialize.mjs +2 -3
- package/src/session-runtime/session-create/session-options.mjs +15 -2
- package/src/session-runtime/session-hooks.mjs +9 -17
- package/src/session-runtime/settings-builtin-tools-api.mjs +65 -1
- package/src/session-runtime/settings-compaction-api.mjs +86 -39
- package/src/session-runtime/setup-tool/executor.mjs +12 -2
- package/src/session-runtime/setup-tool/settings-contract.mjs +34 -1
- package/src/session-runtime/setup-tool/tool-defs.mjs +20 -3
- package/src/session-runtime/skills-api.mjs +12 -5
- package/src/session-runtime/tool-policy/agent-profile-fold.mjs +349 -0
- package/src/session-runtime/tool-policy/mode-switch.mjs +54 -0
- package/src/session-runtime/tool-policy/pending-switches.mjs +59 -0
- package/src/session-runtime/tool-policy/policy-stage.mjs +183 -0
- package/src/session-runtime/tool-policy/session-switches.mjs +169 -0
- package/src/session-runtime/tool-policy/surface-helpers.mjs +114 -0
- package/src/session-runtime/tool-policy/workflow-overlay.mjs +145 -0
- package/src/session-runtime/tool-policy-refresh.mjs +48 -369
- package/src/session-runtime/tool-surface.mjs +10 -4
- package/src/session-runtime/turn/session-ops.mjs +8 -0
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +95 -88
- package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
- package/src/session-runtime/turn/turn-run.mjs +7 -2
- package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +54 -7
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +527 -333
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +85 -63
- package/src/session-runtime/workflow-agents-api/shared.mjs +5 -1
- package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +14 -1
- package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +6 -3
- package/src/session-runtime/workspace/transition-steps.mjs +1 -18
- package/src/session-runtime/workspace/transitions.mjs +279 -67
- package/src/session-runtime/workspace/workspace-state.mjs +7 -6
- package/src/session-runtime/workspace/worktree-tool.mjs +194 -0
- package/src/standalone/daemon-agent-control.mjs +4 -1
- package/src/standalone/daemon-lag-profiler.mjs +3 -1
- package/src/standalone/daemon-session-control.mjs +173 -15
- package/src/standalone/daemon-telemetry.mjs +9 -0
- package/src/standalone/daemon.mjs +33 -10
- package/src/standalone/local-session-runtime.mjs +33 -16
- package/src/standalone/session-client.mjs +7 -2
- package/src/standalone/session-protocol.mjs +8 -0
- package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +2 -0
- package/src/standalone/session-service/agent-route-follow.mjs +69 -0
- package/src/standalone/session-service/session-calls/session-turns.mjs +33 -4
- package/src/standalone/session-service.mjs +21 -0
- package/src/standalone/session-state-projection.mjs +19 -9
- package/src/standalone/session-tool-output.mjs +36 -9
- package/src/standalone/staged-import.mjs +47 -0
- package/src/tui/App.jsx +2 -0
- package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +19 -13
- package/src/tui/app/message-selector.mjs +15 -2
- package/src/tui/app/model-options.mjs +16 -2
- package/src/tui/app/model-picker.mjs +2 -1
- package/src/tui/app/route-pickers.mjs +3 -1
- package/src/tui/app/settings-picker/settings-rows.mjs +2 -2
- package/src/tui/app/slash-commands.mjs +1 -1
- package/src/tui/app/usage-context-panels/context-model.mjs +8 -2
- package/src/tui/dist/index.mjs +617 -369
- package/src/tui/paste-attachments.mjs +0 -1
- package/src/tui/paste-text-policy.mjs +4 -5
- package/src/tui/prompt-history-store.mjs +16 -21
- package/src/tui/session/agent-job-feed/execution-delivery.mjs +4 -1
- package/src/tui/session/context-state.mjs +4 -0
- package/src/tui/session/notice-surface.mjs +3 -0
- package/src/tui/session/session-api/intake/abort.mjs +52 -18
- package/src/tui/session/session-api/intake/rewind.mjs +39 -4
- package/src/tui/session/session-api/media.mjs +2 -1
- package/src/tui/session/session-api/routes-agent-definitions.mjs +76 -0
- package/src/tui/session/session-api/routes-write.mjs +203 -0
- package/src/tui/session/session-api/routes.mjs +23 -247
- package/src/tui/session/session-api/settings.mjs +14 -1
- package/src/tui/session/session-flow/drain.mjs +28 -3
- package/src/tui/session/session-flow/failed-turn-rewind.mjs +4 -2
- package/src/tui/session/session-flow/queue/take-entries.mjs +8 -0
- package/src/tui/session/session-flow/steering.mjs +8 -3
- package/src/tui/session/tool-approval.mjs +142 -14
- package/src/tui/session/transcript-intake.mjs +2 -0
- package/src/tui/session/turn.mjs +23 -14
- package/src/tui/transcript-tool-failures.mjs +8 -2
- package/src/vendor/statusline/src/gateway/route-meta.mjs +7 -8
- package/src/vendor/statusline/src/gateway/session-routes.mjs +6 -7
- package/src/rules/agent-mode/ROUTINE.md +0 -6
- package/src/session-runtime/room-member-gate.mjs +0 -48
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
1
2
|
import { clean } from '../../runtime/agent/orchestrator/runtime-core/session-text.mjs';
|
|
2
3
|
import { hasOwn } from '../../runtime/shared/object.mjs';
|
|
3
4
|
import { isHiddenAgent } from '../../runtime/agent/orchestrator/internal-agents.mjs';
|
|
@@ -10,6 +11,7 @@ import {
|
|
|
10
11
|
withAgentDisabled,
|
|
11
12
|
} from '../../runtime/shared/agent-route-config.mjs';
|
|
12
13
|
import { agentEditorId, resolveDataDir } from './shared.mjs';
|
|
14
|
+
import { publishAgentRouteChange } from '../agent-profile-changes.mjs';
|
|
13
15
|
import {
|
|
14
16
|
isStoreBot,
|
|
15
17
|
readBotRoute,
|
|
@@ -29,9 +31,52 @@ import { routeChain, validateRouteChainProviders } from '../../runtime/shared/mo
|
|
|
29
31
|
// lead preset, so an agent that reused it silently rewrote Main's effort/fast
|
|
30
32
|
// for the next session. The agent's own stored route is the fallback instead,
|
|
31
33
|
// and the bucket is never written here.
|
|
34
|
+
// Tuning-only edits keep the stored model's effort/fast/modelParameters;
|
|
35
|
+
// a model change starts from the resolved defaults. Fast is then clamped
|
|
36
|
+
// to what the selected model supports. The ONE normalizer of a chain entry:
|
|
37
|
+
// agents, bots, Mixy and the Lead's fallbacks all pass through it.
|
|
38
|
+
export async function resolveChainEntry(deps, requested, stored) {
|
|
39
|
+
const { getConfig, resolveRoute, lookupModelMeta, ensureProvidersReady } = deps;
|
|
40
|
+
let selectedRoute = resolveRoute(getConfig(), requested);
|
|
41
|
+
const sameModel =
|
|
42
|
+
clean(selectedRoute.provider) === clean(stored.provider) && clean(selectedRoute.model) === clean(stored.model);
|
|
43
|
+
const inheritedEffort = sameModel ? stored.effort || null : null;
|
|
44
|
+
const inheritedModelParameters = sameModel ? stored.modelParameters || {} : {};
|
|
45
|
+
// A requested percent replaces the stored exact window and requested
|
|
46
|
+
// tokens replace the stored percent.
|
|
47
|
+
const requestsPercent = requested.contextPercent !== undefined;
|
|
48
|
+
const requestsTokens = requested.contextTokens !== undefined;
|
|
49
|
+
const inheritedContextPercent = sameModel && !requestsTokens ? stored.contextPercent : undefined;
|
|
50
|
+
const inheritedContextTokens = sameModel && !requestsPercent ? stored.contextTokens : undefined;
|
|
51
|
+
selectedRoute = {
|
|
52
|
+
...selectedRoute,
|
|
53
|
+
effort: requested.effort !== undefined ? selectedRoute.effort : inheritedEffort,
|
|
54
|
+
fast: requested.fast !== undefined ? selectedRoute.fast === true : sameModel && stored.fast === true,
|
|
55
|
+
// Main's modelSettings bucket must not decide an agent's Auto effort.
|
|
56
|
+
autoEffort:
|
|
57
|
+
requested.autoEffort !== undefined ? requested.autoEffort !== false : !sameModel || stored.autoEffort !== false,
|
|
58
|
+
modelParameters: requested.modelParameters !== undefined ? selectedRoute.modelParameters : inheritedModelParameters,
|
|
59
|
+
// resolveRoute reads contextPercent from Main's modelSettings bucket;
|
|
60
|
+
// an agent route owns its own.
|
|
61
|
+
contextPercent: requestsPercent ? requested.contextPercent : inheritedContextPercent,
|
|
62
|
+
contextTokens: requestsTokens ? requested.contextTokens : inheritedContextTokens,
|
|
63
|
+
};
|
|
64
|
+
await ensureProvidersReady(ensureProviderEnabled(getConfig(), selectedRoute.provider));
|
|
65
|
+
const modelMeta = await lookupModelMeta(selectedRoute.provider, selectedRoute.model);
|
|
66
|
+
// Stored clamped, and not at all at the default window, as for Main.
|
|
67
|
+
const contextState = resolveRouteContextState(selectedRoute, modelMeta);
|
|
68
|
+
if (contextState.contextDefaultPercent !== undefined) selectedRoute.contextTokens = contextState.contextTokens;
|
|
69
|
+
const fastCapable = selectionFastCapable(
|
|
70
|
+
selectedRoute.provider,
|
|
71
|
+
modelMeta,
|
|
72
|
+
selectedRoute.effort,
|
|
73
|
+
selectedRoute.modelParameters
|
|
74
|
+
);
|
|
75
|
+
return { ...selectedRoute, fast: fastCapable ? selectedRoute.fast === true : false };
|
|
76
|
+
}
|
|
77
|
+
|
|
32
78
|
export function createAgentRouteApi(deps) {
|
|
33
|
-
const { getConfig, resolveRoute,
|
|
34
|
-
deps;
|
|
79
|
+
const { getConfig, resolveRoute, saveConfigAndAdopt, agentRouteFromConfig } = deps;
|
|
35
80
|
|
|
36
81
|
function saveDisabled(id, disabled) {
|
|
37
82
|
saveConfigAndAdopt(canonicalizeAgentRouteStorage(withAgentDisabled(getConfig(), id, disabled)));
|
|
@@ -58,67 +103,41 @@ export function createAgentRouteApi(deps) {
|
|
|
58
103
|
saveConfigAndAdopt(canonicalizeAgentRouteStorage(nextConfig));
|
|
59
104
|
}
|
|
60
105
|
|
|
106
|
+
// The route a bot saved of its own ({} when none).
|
|
107
|
+
function ownRoute(id) {
|
|
108
|
+
if (isMixy(id)) return readMixyRoute(dataDir()) || {};
|
|
109
|
+
if (storeBot(id)) return readBotRoute(dataDir(), id) || {};
|
|
110
|
+
return agentRouteFromConfig(getConfig(), id) || {};
|
|
111
|
+
}
|
|
112
|
+
// The route a bot's chats run on: its own, else Main's.
|
|
113
|
+
const chatRoute = (id) => {
|
|
114
|
+
const own = ownRoute(id);
|
|
115
|
+
return normalizeWorkflowRoute(own.provider ? own : resolveRoute(getConfig(), {}));
|
|
116
|
+
};
|
|
117
|
+
// Structural, so equivalent parameter objects in another key order are the same route.
|
|
118
|
+
const plainRoute = (route) => JSON.parse(JSON.stringify(normalizeWorkflowRoute(route) ?? null));
|
|
119
|
+
const sameRoute = (a, b) => isDeepStrictEqual(plainRoute(a), plainRoute(b));
|
|
120
|
+
|
|
61
121
|
// Only an explicitly empty provider removes an override: the agent inherits Main.
|
|
62
|
-
function clearOverride(id) {
|
|
122
|
+
async function clearOverride(id) {
|
|
123
|
+
const before = chatRoute(id);
|
|
63
124
|
if (isMixy(id) || storeBot(id)) {
|
|
64
125
|
if (isMixy(id)) writeMixyRoute(dataDir(), null);
|
|
65
126
|
else writeBotRoute(dataDir(), id, null);
|
|
66
|
-
|
|
67
|
-
|
|
127
|
+
} else {
|
|
128
|
+
const nextConfig = { ...getConfig() };
|
|
129
|
+
const agents = { ...(nextConfig.agents || {}) };
|
|
130
|
+
const hadOverride = Object.hasOwn(agents, id);
|
|
131
|
+
delete agents[id];
|
|
132
|
+
nextConfig.agents = agents;
|
|
133
|
+
if (hadOverride) saveConfigAndAdopt(canonicalizeAgentRouteStorage(nextConfig));
|
|
68
134
|
}
|
|
69
|
-
const nextConfig = { ...getConfig() };
|
|
70
|
-
const agents = { ...(nextConfig.agents || {}) };
|
|
71
|
-
const hadOverride = Object.hasOwn(agents, id);
|
|
72
|
-
delete agents[id];
|
|
73
|
-
nextConfig.agents = agents;
|
|
74
|
-
if (hadOverride) saveConfigAndAdopt(canonicalizeAgentRouteStorage(nextConfig));
|
|
75
135
|
const inherited = normalizeWorkflowRoute(resolveRoute(getConfig(), {}));
|
|
136
|
+
// The bot's chats follow Main from their next turn (unless they already do).
|
|
137
|
+
if (inherited && !sameRoute(before, inherited)) await publishAgentRouteChange(id, inherited);
|
|
76
138
|
return { ...(inherited || {}), inherited: true };
|
|
77
139
|
}
|
|
78
140
|
|
|
79
|
-
// Tuning-only edits keep the stored model's effort/fast/modelParameters;
|
|
80
|
-
// a model change starts from the resolved defaults. Fast is then clamped
|
|
81
|
-
// to what the selected model supports.
|
|
82
|
-
async function resolveSelectedRoute(requested, stored) {
|
|
83
|
-
let selectedRoute = resolveRoute(getConfig(), requested);
|
|
84
|
-
const sameModel =
|
|
85
|
-
clean(selectedRoute.provider) === clean(stored.provider) && clean(selectedRoute.model) === clean(stored.model);
|
|
86
|
-
const inheritedEffort = sameModel ? stored.effort || null : null;
|
|
87
|
-
const inheritedModelParameters = sameModel ? stored.modelParameters || {} : {};
|
|
88
|
-
// A requested percent replaces the stored exact window and requested
|
|
89
|
-
// tokens replace the stored percent.
|
|
90
|
-
const requestsPercent = requested.contextPercent !== undefined;
|
|
91
|
-
const requestsTokens = requested.contextTokens !== undefined;
|
|
92
|
-
const inheritedContextPercent = sameModel && !requestsTokens ? stored.contextPercent : undefined;
|
|
93
|
-
const inheritedContextTokens = sameModel && !requestsPercent ? stored.contextTokens : undefined;
|
|
94
|
-
selectedRoute = {
|
|
95
|
-
...selectedRoute,
|
|
96
|
-
effort: requested.effort !== undefined ? selectedRoute.effort : inheritedEffort,
|
|
97
|
-
fast: requested.fast !== undefined ? selectedRoute.fast === true : sameModel && stored.fast === true,
|
|
98
|
-
// Main's modelSettings bucket must not decide an agent's Auto effort.
|
|
99
|
-
autoEffort:
|
|
100
|
-
requested.autoEffort !== undefined ? requested.autoEffort !== false : !sameModel || stored.autoEffort !== false,
|
|
101
|
-
modelParameters:
|
|
102
|
-
requested.modelParameters !== undefined ? selectedRoute.modelParameters : inheritedModelParameters,
|
|
103
|
-
// resolveRoute reads contextPercent from Main's modelSettings bucket;
|
|
104
|
-
// an agent route owns its own.
|
|
105
|
-
contextPercent: requestsPercent ? requested.contextPercent : inheritedContextPercent,
|
|
106
|
-
contextTokens: requestsTokens ? requested.contextTokens : inheritedContextTokens,
|
|
107
|
-
};
|
|
108
|
-
await ensureProvidersReady(ensureProviderEnabled(getConfig(), selectedRoute.provider));
|
|
109
|
-
const modelMeta = await lookupModelMeta(selectedRoute.provider, selectedRoute.model);
|
|
110
|
-
// Stored clamped, and not at all at the default window, as for Main.
|
|
111
|
-
const contextState = resolveRouteContextState(selectedRoute, modelMeta);
|
|
112
|
-
if (contextState.contextDefaultPercent !== undefined) selectedRoute.contextTokens = contextState.contextTokens;
|
|
113
|
-
const fastCapable = selectionFastCapable(
|
|
114
|
-
selectedRoute.provider,
|
|
115
|
-
modelMeta,
|
|
116
|
-
selectedRoute.effort,
|
|
117
|
-
selectedRoute.modelParameters
|
|
118
|
-
);
|
|
119
|
-
return { ...selectedRoute, fast: fastCapable ? selectedRoute.fast === true : false };
|
|
120
|
-
}
|
|
121
|
-
|
|
122
141
|
async function setAgentRoute(agentId, next) {
|
|
123
142
|
const id = agentEditorId(agentId);
|
|
124
143
|
if (!id) throw new Error(`unknown agent "${agentId}"`);
|
|
@@ -128,16 +147,16 @@ export function createAgentRouteApi(deps) {
|
|
|
128
147
|
// picked while the model resolved below stays (answered with `skipped`).
|
|
129
148
|
const onlyIfEmpty = requested.onlyIfEmpty === true;
|
|
130
149
|
delete requested.onlyIfEmpty;
|
|
131
|
-
const readStored = () =>
|
|
132
|
-
if (isMixy(id)) return readMixyRoute(dataDir()) || {};
|
|
133
|
-
if (storeBot(id)) return readBotRoute(dataDir(), id) || {};
|
|
134
|
-
return agentRouteFromConfig(getConfig(), id) || {};
|
|
135
|
-
};
|
|
150
|
+
const readStored = () => ownRoute(id);
|
|
136
151
|
const kept = () => ({ ...readStored(), id, skipped: true });
|
|
137
152
|
const stored = readStored();
|
|
138
153
|
if (onlyIfEmpty && clean(stored.provider)) return kept();
|
|
139
|
-
// Mixy is never off: its route request is a model pick alone
|
|
140
|
-
|
|
154
|
+
// Mixy is never off: its route request is a model pick alone, and an
|
|
155
|
+
// on/off request alone changes nothing.
|
|
156
|
+
if (isMixy(id) && hasOwn(requested, 'disabled')) {
|
|
157
|
+
delete requested.disabled;
|
|
158
|
+
if (!Object.keys(requested).length) return { ...stored, id };
|
|
159
|
+
}
|
|
141
160
|
// Off is an explicit state, stored apart from the route so the model the
|
|
142
161
|
// user picked survives and comes back when the agent is switched on. An
|
|
143
162
|
// off request that also carries a model saves that model and stays off.
|
|
@@ -147,7 +166,7 @@ export function createAgentRouteApi(deps) {
|
|
|
147
166
|
// An explicitly empty provider still asks to drop the override, as it
|
|
148
167
|
// does for an agent that stays on: off and inheriting Main.
|
|
149
168
|
if (hasOwn(requested, 'provider') && !clean(requested.provider)) {
|
|
150
|
-
return { ...clearOverride(id), id, disabled: true };
|
|
169
|
+
return { ...(await clearOverride(id)), id, disabled: true };
|
|
151
170
|
}
|
|
152
171
|
return { ...stored, id, disabled: true };
|
|
153
172
|
}
|
|
@@ -175,7 +194,7 @@ export function createAgentRouteApi(deps) {
|
|
|
175
194
|
const previous = storedChain.find(
|
|
176
195
|
(candidate) => candidate.provider === entry.provider && candidate.model === entry.model
|
|
177
196
|
);
|
|
178
|
-
resolved.push(await
|
|
197
|
+
resolved.push(await resolveChainEntry(deps, entry, previous || {}));
|
|
179
198
|
}
|
|
180
199
|
const [primary, ...fallbacks] = resolved;
|
|
181
200
|
const routeToSave = normalizeWorkflowRoute({ ...primary, fallbacks });
|
|
@@ -189,7 +208,10 @@ export function createAgentRouteApi(deps) {
|
|
|
189
208
|
if (onlyIfEmpty && clean(readStored().provider)) return kept();
|
|
190
209
|
const stayOff = onlyIfEmpty ? isAgentDisabled(getConfig(), id) : keepOff;
|
|
191
210
|
// Picking a model is also the "on" switch unless the request keeps it off.
|
|
211
|
+
const before = chatRoute(id);
|
|
192
212
|
saveRoute(id, routeToSave, stayOff);
|
|
213
|
+
// The bot's existing chats move onto it from their next turn (unless they already run it).
|
|
214
|
+
if (!sameRoute(before, routeToSave)) await publishAgentRouteChange(id, routeToSave);
|
|
193
215
|
return stayOff ? { ...routeToSave, id, disabled: true } : routeToSave;
|
|
194
216
|
}
|
|
195
217
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { oneLine } from '../../runtime/shared/clean.mjs';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
normalizeAgentId,
|
|
4
|
+
normalizeWorkflowId,
|
|
5
|
+
normalizeWorkflowRoute,
|
|
6
|
+
} from '../../runtime/agent/orchestrator/runtime-core/workflow.mjs';
|
|
3
7
|
|
|
4
8
|
export function resolveDataDir({ cfgMod, STANDALONE_DATA_DIR }) {
|
|
5
9
|
return cfgMod.getPluginData?.() || STANDALONE_DATA_DIR;
|
|
@@ -35,10 +35,23 @@ export function createStyleAndModeApi(deps) {
|
|
|
35
35
|
return { ...freshStatus, appliedToCurrentSession };
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
// `{ scope: 'session' }` (the composer's selector in a session), like
|
|
39
|
+
// setWorkflow: a session with a conversation switches alone
|
|
40
|
+
// (switchSessionOrchestrationMode; deferred to its next turn while one
|
|
41
|
+
// runs) and the configured mode — the default for new sessions — stays.
|
|
42
|
+
// Otherwise the choice becomes the configured mode and an empty session
|
|
43
|
+
// picks it up in place.
|
|
44
|
+
async function setOrchestrationMode(mode, options = {}) {
|
|
39
45
|
if (!ORCHESTRATION_MODES.includes(mode)) {
|
|
40
46
|
throw new Error(`orchestration mode must be one of ${ORCHESTRATION_MODES.join(', ')}`);
|
|
41
47
|
}
|
|
48
|
+
if (options?.scope === 'session') {
|
|
49
|
+
const switched = await deps.switchSessionOrchestrationMode?.(mode);
|
|
50
|
+
if (switched) {
|
|
51
|
+
invalidateContextStatusCache();
|
|
52
|
+
return switched;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
42
55
|
saveConfigAndAdopt({ ...getConfig(), orchestrationMode: mode });
|
|
43
56
|
const applied = await deps.refreshEmptySessionToolPolicy?.();
|
|
44
57
|
deps.invalidatePreSessionToolSurface?.();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
|
-
import { existsSync, mkdirSync, rmSync
|
|
2
|
+
import { existsSync, mkdirSync, rmSync } from 'node:fs';
|
|
3
|
+
import { writeFileAtomicSync } from '../../runtime/shared/atomic-file.mjs';
|
|
3
4
|
import { serializeFrontmatterDoc } from '../../runtime/shared/markdown-frontmatter.mjs';
|
|
4
5
|
import {
|
|
5
6
|
normalizeWorkflowId,
|
|
@@ -44,6 +45,7 @@ export function createWorkflowPacksApi(deps) {
|
|
|
44
45
|
name: workflow.name,
|
|
45
46
|
description: workflow.description,
|
|
46
47
|
source: workflow.source,
|
|
48
|
+
...(workflow.overridesBuiltIn ? { overridesBuiltIn: true } : {}),
|
|
47
49
|
active: workflow.id === active,
|
|
48
50
|
}));
|
|
49
51
|
}
|
|
@@ -106,9 +108,10 @@ export function createWorkflowPacksApi(deps) {
|
|
|
106
108
|
if (!absorbed) {
|
|
107
109
|
const dir = join(dataDir, 'workflows', id);
|
|
108
110
|
mkdirSync(dir, { recursive: true });
|
|
109
|
-
|
|
111
|
+
writeFileAtomicSync(
|
|
110
112
|
join(dir, 'WORKFLOW.md'),
|
|
111
|
-
serializeFrontmatterDoc({ id, name, ...(description ? { description } : {}) }, body)
|
|
113
|
+
serializeFrontmatterDoc({ id, name, ...(description ? { description } : {}) }, body),
|
|
114
|
+
{ backup: true, mode: 0o644 }
|
|
112
115
|
);
|
|
113
116
|
}
|
|
114
117
|
return getWorkflowPack(id);
|
|
@@ -251,7 +251,6 @@ export function createTransitionSteps({
|
|
|
251
251
|
const projectPath = previous.projectPath;
|
|
252
252
|
const project = await inspectProject(projectPath, { signal });
|
|
253
253
|
let entry = await backendApi.getSessionWorktree(session.id);
|
|
254
|
-
const created = !entry;
|
|
255
254
|
if (entry) {
|
|
256
255
|
if (!existsSync(entry.path)) {
|
|
257
256
|
throw worktreeError('WORKTREE_MISSING', undefined, { worktreeId: entry.id, path: entry.path });
|
|
@@ -333,18 +332,9 @@ export function createTransitionSteps({
|
|
|
333
332
|
await backendApi.dropCarryRecoveryRef({ projectPath, recoveryRef: entry.changes.recoveryRef }).catch(() => {});
|
|
334
333
|
}
|
|
335
334
|
// Creation notes (submodules, include entries missing or already present).
|
|
336
|
-
//
|
|
337
|
-
// (`prepared`: what creation did and what the turn still has to run).
|
|
335
|
+
// A new checkout's first-turn preparation stays pending in its registry entry.
|
|
338
336
|
return {
|
|
339
337
|
...entered,
|
|
340
|
-
...(created
|
|
341
|
-
? {
|
|
342
|
-
created: {
|
|
343
|
-
prepared: entry.prepared ?? null,
|
|
344
|
-
root: entry.prepared?.root || project.topLevel || projectPath,
|
|
345
|
-
},
|
|
346
|
-
}
|
|
347
|
-
: {}),
|
|
348
338
|
warnings: Array.isArray(entry.warnings) ? [...entry.warnings] : [],
|
|
349
339
|
...(entry.changes ? { changes: { mode: entry.changes.mode, count: entry.changes.count } } : {}),
|
|
350
340
|
};
|
|
@@ -395,13 +385,6 @@ export function createTransitionSteps({
|
|
|
395
385
|
journal.push(() => backendApi.claimWorktreeOwner(previous.worktreeId, owner(session.id)));
|
|
396
386
|
await releaseOwner(backendApi, previous.worktreeId, session.id, { forgetReference: true });
|
|
397
387
|
}
|
|
398
|
-
// A managed worktree made for the branch: its first-turn preparation awaits.
|
|
399
|
-
if (resolved.created === true && entry) {
|
|
400
|
-
return {
|
|
401
|
-
...result,
|
|
402
|
-
created: { prepared: entry.prepared ?? null, root: entry.prepared?.root || project.topLevel || projectPath },
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
388
|
return result;
|
|
406
389
|
}
|
|
407
390
|
|