mixdog 1.4.1 → 1.4.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/package.json +4 -3
- package/scripts/build-shipped-history.mjs +125 -33
- package/scripts/gate-local.mjs +220 -63
- package/scripts/graph-parity.mjs +8 -3
- package/scripts/lib/gate-scheduler.mjs +139 -32
- package/scripts/lib/gate-timing-reporter.mjs +16 -0
- package/scripts/lib/run-node-tests.mjs +71 -34
- package/scripts/lib/scoped-temp.mjs +1 -0
- package/scripts/lib/test-failure-records.mjs +14 -1
- package/scripts/lib/test-failure-summary.mjs +9 -4
- package/scripts/lib/test-spawn-ledger.mjs +43 -3
- package/scripts/post-release-check.mjs +26 -16
- package/scripts/pptx-kit-index.mjs +5 -6
- package/scripts/provider-pingpong-live.mjs +1 -1
- package/scripts/prune-embedding-runtime.mjs +3 -1
- package/scripts/release-paths.mjs +7 -1
- package/scripts/suite-health.mjs +110 -28
- package/scripts/test.mjs +9 -14
- package/src/agents/advisor/AGENT.md +4 -4
- package/src/agents/advisor/agent.json +1 -1
- package/src/agents/explore/AGENT.md +22 -0
- package/src/agents/explore/agent.json +6 -0
- package/src/cli.mjs +7 -0
- package/src/defaults/agents.json +7 -0
- package/src/defaults/shipped-history.json +38 -2
- package/src/defaults/skills/browser-use/SKILL.md +4 -1
- package/src/defaults/skills/code-tidy/SKILL.md +71 -102
- package/src/defaults/skills/code-tidy/references/agent-cleanup.md +66 -114
- package/src/defaults/skills/code-tidy/references/cleanup-report.md +19 -35
- package/src/defaults/skills/code-tidy/references/dead-code.md +3 -9
- package/src/defaults/skills/code-tidy/references/test-suite-slop.md +16 -27
- package/src/defaults/skills/computer-use/SKILL.md +12 -2
- package/src/defaults/skills/setup/SKILL.md +2 -2
- package/src/defaults/skills/setup/references/actions.md +28 -9
- package/src/defaults/skills/setup/references/surfaces.md +5 -2
- package/src/defaults/skills/setup-guide/SKILL.md +11 -3
- package/src/defaults/skills/setup-guide/model-recommendations.json +13 -0
- package/src/defaults/skills/skill-creator/SKILL.md +85 -190
- package/src/defaults/skills/skill-creator/references/design.md +70 -162
- package/src/defaults/skills/skill-creator/references/evaluation.md +33 -92
- package/src/defaults/skills/test-suite/SKILL.md +194 -0
- package/src/defaults/skills/test-suite/references/case-management.md +51 -0
- package/src/defaults/skills/test-suite/references/flaky-policy.md +39 -0
- package/src/defaults/skills/test-suite/references/reliability.md +49 -0
- package/src/defaults/skills/test-suite/references/suite-design.md +78 -0
- package/src/defaults/skills/test-suite/scripts/inventory.mjs +335 -0
- package/src/defaults/skills/visualize/SKILL.md +6 -2
- package/src/lib/instruction-text.cjs +36 -0
- package/src/lib/rules-builder.cjs +40 -50
- package/src/orchestration/balanced.md +23 -0
- package/src/orchestration/focused.md +22 -0
- package/src/orchestration/none.md +5 -0
- package/src/orchestration/swarm.md +24 -0
- package/src/rules/agent-mode/AGENT_MODE.md +3 -1
- package/src/rules/agent-mode/MIXY.md +2 -2
- package/src/rules/lead/LEAD.md +3 -3
- package/src/rules/shared/20-research.md +3 -6
- package/src/rules/shared/40-editing.md +1 -0
- package/src/rules/shared/60-verification.md +10 -9
- package/src/rules/shared/70-delivery.md +4 -3
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/abort-link.mjs +5 -1
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +3 -3
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch.mjs +10 -2
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +132 -21
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +13 -9
- package/src/runtime/agent/orchestrator/agent-runtime/heartbeat-completion.mjs +2 -2
- package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +4 -1
- package/src/runtime/agent/orchestrator/agent-runtime/session-builder.mjs +67 -0
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +1 -0
- package/src/runtime/agent/orchestrator/config.mjs +12 -7
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +7 -7
- package/src/runtime/agent/orchestrator/context/role-instructions.mjs +9 -30
- package/src/runtime/agent/orchestrator/internal-agents.mjs +3 -14
- package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +124 -12
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +204 -49
- package/src/runtime/agent/orchestrator/mcp/client-config.mjs +16 -7
- package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +157 -57
- package/src/runtime/agent/orchestrator/mcp/client.mjs +54 -23
- package/src/runtime/agent/orchestrator/mcp/oauth-client.mjs +1 -1
- package/src/runtime/agent/orchestrator/mcp/oauth-credentials.mjs +8 -2
- package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +83 -52
- package/src/runtime/agent/orchestrator/mcp/oauth-probe.mjs +1 -1
- package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +14 -0
- package/src/runtime/agent/orchestrator/mcp/oauth.mjs +43 -27
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +43 -8
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +30 -28
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +31 -21
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-stop.mjs +3 -3
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +40 -0
- package/src/runtime/agent/orchestrator/providers/custom-provider-keys.mjs +34 -0
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/devin-auth.mjs +14 -7
- package/src/runtime/agent/orchestrator/providers/devin-wire-transport.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/gemini-response.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +2 -2
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +48 -31
- package/src/runtime/agent/orchestrator/providers/lib/oauth-page.mjs +0 -18
- package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +138 -6
- package/src/runtime/agent/orchestrator/providers/mimo-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/model-cache.mjs +100 -33
- package/src/runtime/agent/orchestrator/providers/muse-code-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/oauth-secret-fields.fixtures.mjs +45 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +4 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-head-parity.json +2784 -2872
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +5 -8
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +26 -28
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +288 -300
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-watchdogs.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/registry.mjs +33 -2
- package/src/runtime/agent/orchestrator/providers/vertex-ai-auth.mjs +622 -0
- package/src/runtime/agent/orchestrator/providers/vertex-ai-maas.mjs +185 -0
- package/src/runtime/agent/orchestrator/providers/vertex-ai-models.mjs +445 -0
- package/src/runtime/agent/orchestrator/providers/vertex-ai.mjs +576 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search-head-parity.json +10 -30
- package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +32 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +0 -11
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +8 -0
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +17 -3
- package/src/runtime/agent/orchestrator/runtime-core/goal-control.mjs +47 -27
- package/src/runtime/agent/orchestrator/runtime-core/goal-deadlines.mjs +141 -10
- package/src/runtime/agent/orchestrator/runtime-core/goal-mutations.mjs +26 -63
- package/src/runtime/agent/orchestrator/runtime-core/goal-reminder.mjs +28 -3
- package/src/runtime/agent/orchestrator/runtime-core/goal-runtime.mjs +36 -11
- package/src/runtime/agent/orchestrator/runtime-core/goal-state.mjs +88 -56
- package/src/runtime/agent/orchestrator/runtime-core/goal-storage.mjs +4 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-store.mjs +51 -32
- package/src/runtime/agent/orchestrator/runtime-core/goal-text.mjs +45 -145
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-defs.mjs +15 -98
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-exec.mjs +32 -99
- package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +23 -78
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +69 -47
- package/src/runtime/agent/orchestrator/runtime-core/todo-list.mjs +367 -0
- package/src/runtime/agent/orchestrator/runtime-core/todo-tool-defs.mjs +47 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-availability.mjs +155 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +12 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +119 -35
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +4 -1
- package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +15 -6
- package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +28 -22
- package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +30 -0
- package/src/runtime/agent/orchestrator/session/agent-room.d.mts +30 -5
- package/src/runtime/agent/orchestrator/session/agent-room.mjs +171 -37
- package/src/runtime/agent/orchestrator/session/attachment-preflight.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/cache-warm.mjs +94 -10
- package/src/runtime/agent/orchestrator/session/catalog-db/index.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/compact/summary-route.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +8 -12
- package/src/runtime/agent/orchestrator/session/conversation-import/claude.mjs +4 -4
- package/src/runtime/agent/orchestrator/session/conversation-import/codex.mjs +11 -6
- package/src/runtime/agent/orchestrator/session/conversation-import/convert.mjs +6 -6
- package/src/runtime/agent/orchestrator/session/conversation-import/imported-session.mjs +7 -3
- package/src/runtime/agent/orchestrator/session/conversation-import/turns.mjs +11 -1
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +4 -3
- package/src/runtime/agent/orchestrator/session/human-gate/held-message.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +37 -8
- package/src/runtime/agent/orchestrator/session/human-gate/run-policy.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/image-strip-recovery.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +11 -1
- package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +5 -3
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +8 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/todo-check.mjs +196 -0
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +116 -50
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +8 -1
- package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/loop/stored-tool-args.mjs +5 -6
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +27 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +18 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +23 -1
- package/src/runtime/agent/orchestrator/session/loop/turn-limits.mjs +13 -8
- package/src/runtime/agent/orchestrator/session/loop/turn-report.mjs +35 -0
- package/src/runtime/agent/orchestrator/session/loop/usage.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +103 -50
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +9 -7
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +21 -3
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-failure.mjs +27 -11
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-open.mjs +37 -34
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +15 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +25 -15
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +79 -24
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-steering-drain.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +12 -1
- package/src/runtime/agent/orchestrator/session/manager/context-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +6 -1
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +9 -1
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-path.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/prompt-settings.mjs +598 -0
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +20 -0
- package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +22 -14
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +15 -0
- package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +56 -14
- package/src/runtime/agent/orchestrator/session/manager/session-lock.mjs +31 -0
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +59 -20
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/manager/session-scratch-environment.mjs +70 -0
- package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +0 -3
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +18 -4
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-context.mjs +8 -9
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +339 -88
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-recovery.mjs +135 -11
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +377 -104
- package/src/runtime/agent/orchestrator/session/manager/turn-durability.mjs +144 -0
- package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +48 -30
- package/src/runtime/agent/orchestrator/session/manager/turn-reap.mjs +125 -0
- package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/mixy-name.mjs +12 -6
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +8 -1
- package/src/runtime/agent/orchestrator/session/restart-prefix-parity.fixture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/save-session-worker.mjs +5 -1
- package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store/liveness-veto.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/store/save-worker.mjs +23 -2
- package/src/runtime/agent/orchestrator/session/store/sweep/sub-agent-retention.mjs +3 -3
- package/src/runtime/agent/orchestrator/session/store/transcript-durability.mjs +88 -0
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/store-summary-log.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +243 -38
- package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +163 -64
- package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +177 -8
- package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +142 -18
- package/src/runtime/agent/orchestrator/session/store.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/synthetic-user-envelope.mjs +7 -1
- package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +9 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/agent-envelope.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/user-text.mjs +2 -2
- package/src/runtime/agent/orchestrator/stall-policy.mjs +3 -5
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/misuse-guard.mjs +21 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/result-format.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/worktree-add-guard.mjs +77 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +0 -1
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +42 -28
- package/src/runtime/agent/orchestrator/tools/builtin/git-worktree-tool.mjs +30 -14
- package/src/runtime/agent/orchestrator/tools/builtin/lib/search-input-helpers.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +58 -20
- package/src/runtime/agent/orchestrator/tools/builtin/read-range-index.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-fast-paths.mjs +0 -1
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +20 -15
- package/src/runtime/agent/orchestrator/tools/builtin/search-tool.mjs +0 -10
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +95 -20
- package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +59 -10
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +1 -24
- package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary/child-kill.mjs +4 -3
- package/src/runtime/agent/orchestrator/tools/code-graph/graph-binary.mjs +1 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/modes/calls.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/modes/symbols.mjs +2 -2
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +4 -5
- package/src/runtime/agent/orchestrator/tools/code-graph/symbol-index.mjs +3 -4
- package/src/runtime/agent/orchestrator/tools/code-graph.mjs +4 -22
- package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/lib/native-spawn-client.mjs +99 -2
- package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +2 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +105 -15
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +3 -1
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +49 -15
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +45 -27
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +35 -11
- package/src/runtime/agent/orchestrator/tools/lib/shell-warm-standby.mjs +2 -0
- package/src/runtime/agent/orchestrator/tools/lib/wait-until-fixture.mjs +26 -0
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -6
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +0 -1
- package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
- package/src/runtime/attachments/attachment-reference.mjs +1 -1
- package/src/runtime/attachments/pdf-extract.mjs +1 -1
- package/src/runtime/attachments/store.d.mts +1 -0
- package/src/runtime/attachments/store.mjs +2 -2
- package/src/runtime/channels/lib/config-reload-watch.mjs +42 -0
- package/src/runtime/channels/lib/owned-runtime/config-reload.mjs +29 -9
- package/src/runtime/channels/lib/scheduler.mjs +33 -0
- package/src/runtime/channels/lib/schedules-db.mjs +11 -4
- package/src/runtime/channels/lib/webhook/session-dispatch.mjs +4 -1
- package/src/runtime/channels/lib/webhooks-db.mjs +9 -3
- package/src/runtime/channels/lib/whisper-port.mjs +19 -10
- package/src/runtime/channels/lib/whisper-server.mjs +22 -13
- package/src/runtime/channels/lib/worker-main.mjs +9 -31
- package/src/runtime/computer-bridge/linux-readiness.mjs +10 -14
- package/src/runtime/connectors/connector-accounts-mcp.mjs +372 -103
- package/src/runtime/connectors/gmail-app-password.mjs +4 -4
- package/src/runtime/connectors/google-mcp.mjs +1 -1
- package/src/runtime/effort-judge/judge-client.mjs +2 -2
- package/src/runtime/effort-judge/judge-input.mjs +4 -4
- package/src/runtime/explore/explorer.mjs +88 -0
- package/src/runtime/explore/tool-defs.mjs +35 -0
- package/src/runtime/explore/tool.mjs +123 -0
- package/src/runtime/local-provider/hardware.mjs +1 -1
- package/src/runtime/media/adapters/codex-image.mjs +3 -3
- package/src/runtime/media/adapters/gemini-video.mjs +1 -1
- package/src/runtime/media/media-usage.mjs +1 -1
- package/src/runtime/media/store.mjs +1 -1
- package/src/runtime/memory/index.mjs +15 -1
- package/src/runtime/memory/lib/embedding-provider.mjs +4 -1
- package/src/runtime/memory/lib/embedding-reindex.mjs +27 -0
- package/src/runtime/memory/lib/embedding-worker.mjs +4 -0
- package/src/runtime/memory/lib/memory-embed.mjs +83 -14
- package/src/runtime/memory/lib/memory-process-lock.mjs +159 -36
- package/src/runtime/memory/lib/memory-text-utils.mjs +6 -1
- package/src/runtime/memory/lib/memory.mjs +17 -0
- package/src/runtime/memory/lib/pg/process.mjs +1 -1
- package/src/runtime/memory/lib/pg/supervisor.mjs +16 -96
- package/src/runtime/memory/lib/recall-hybrid/hybrid-sql.mjs +12 -3
- package/src/runtime/office/authoring/docx-html-runner.mjs +1 -1
- package/src/runtime/office/authoring/pptx-author-action.mjs +1 -1
- package/src/runtime/office/authoring/xlsx-html-build.mjs +1 -1
- package/src/runtime/office/authoring/xlsx-html-runner.mjs +1 -1
- package/src/runtime/office/capabilities.mjs +1 -1
- package/src/runtime/office/core/office-core.mjs +1 -1
- package/src/runtime/office/design/content-model.mjs +3 -3
- package/src/runtime/office/design/docx/design-docx/section.mjs +6 -6
- package/src/runtime/office/design/xlsx/design-xlsx-components.mjs +1 -1
- package/src/runtime/office/design/xlsx/design-xlsx.mjs +1 -1
- package/src/runtime/office/pdf/ocr-engine.mjs +1 -1
- package/src/runtime/office/pdf/pdf-writer.mjs +4 -4
- package/src/runtime/office/portable/portable-docx-operations.mjs +2 -2
- package/src/runtime/office/portable/portable-soffice.mjs +8 -6
- package/src/runtime/office/portable/xlsx-contract.mjs +1 -1
- package/src/runtime/office/quality/assurance-structure-docx.mjs +1 -1
- package/src/runtime/shared/agent-route-config.mjs +17 -2
- package/src/runtime/shared/atomic-file.d.mts +8 -0
- package/src/runtime/shared/atomic-file.mjs +103 -2
- package/src/runtime/shared/background-tasks.mjs +37 -10
- package/src/runtime/shared/background-wait.mjs +66 -0
- package/src/runtime/shared/child-guardian.mjs +17 -7
- package/src/runtime/shared/config.mjs +313 -16
- package/src/runtime/shared/connector-accounts.mjs +5 -5
- package/src/runtime/shared/connector-catalog.d.mts +14 -8
- package/src/runtime/shared/connector-catalog.mjs +70 -52
- package/src/runtime/shared/custom-provider-keys.mjs +20 -0
- package/src/runtime/shared/file-has-data.mjs +26 -2
- package/src/runtime/shared/file-lock.mjs +21 -18
- package/src/runtime/shared/git-launch.d.mts +9 -0
- package/src/runtime/shared/git-launch.mjs +213 -0
- package/src/runtime/shared/git-runner-worker.mjs +2 -1
- package/src/runtime/shared/git-runner.mjs +7 -2
- package/src/runtime/shared/idle-gc.mjs +30 -7
- package/src/runtime/shared/llm/cost.mjs +6 -1
- package/src/runtime/shared/llm/http-agent.mjs +316 -29
- package/src/runtime/shared/llm/model-catalog-projection.mjs +3 -2
- package/src/runtime/shared/llm/model-catalog.mjs +46 -6
- package/src/runtime/shared/llm/provider-catalog-registry.mjs +3 -0
- package/src/runtime/shared/llm/system-proxy.mjs +453 -0
- package/src/runtime/shared/llm/usage-ledger-quota.mjs +31 -12
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +84 -8
- package/src/runtime/shared/llm/usage-ledger.mjs +3 -0
- package/src/runtime/shared/llm/usage-rollup.mjs +48 -0
- package/src/runtime/shared/maintenance-schedule.mjs +109 -0
- package/src/runtime/shared/process-runner.mjs +8 -4
- package/src/runtime/shared/provider-accounts.mjs +52 -2
- package/src/runtime/shared/routine-trigger.d.mts +13 -0
- package/src/runtime/shared/routine-trigger.mjs +34 -0
- package/src/runtime/shared/run-child.d.mts +2 -1
- package/src/runtime/shared/run-child.mjs +70 -18
- package/src/runtime/shared/session-scratch.mjs +14 -2
- package/src/runtime/shared/shipped-definitions.mjs +7 -1
- package/src/runtime/shared/staged-install-worker.mjs +5 -0
- package/src/runtime/shared/staged-update.mjs +47 -2
- package/src/runtime/shared/tool-card-model.golden.json +3 -12
- package/src/runtime/shared/tool-execution-contract.mjs +2 -0
- package/src/runtime/shared/tool-surface.mjs +110 -36
- package/src/runtime/shared/tool-work-units.mjs +35 -6
- package/src/runtime/shared/turn-snapshot.mjs +26 -4
- package/src/runtime/shared/turn-worktree-snapshot.mjs +409 -54
- package/src/runtime/shared/worker-requests.mjs +17 -3
- package/src/runtime/shared/worktrees/activity-gate.mjs +215 -318
- package/src/runtime/shared/worktrees/activity-ledger-worker.mjs +56 -0
- package/src/runtime/shared/worktrees/activity-ledger.mjs +391 -0
- package/src/runtime/shared/worktrees/branch-management.mjs +5 -3
- package/src/runtime/shared/worktrees/contract.mjs +16 -6
- package/src/runtime/shared/worktrees/dependencies.mjs +127 -89
- package/src/runtime/shared/worktrees/disk.mjs +79 -2
- package/src/runtime/shared/worktrees/git.mjs +97 -7
- package/src/runtime/shared/worktrees/include.mjs +6 -4
- package/src/runtime/shared/worktrees/maintenance.mjs +422 -30
- package/src/runtime/shared/worktrees/manager.mjs +962 -197
- package/src/runtime/shared/worktrees/settings.mjs +33 -7
- package/src/runtime/shared/worktrees/test-support.mjs +5 -1
- package/src/runtime/shared/worktrees/worker-snapshots.mjs +82 -0
- package/src/runtime/tidy/install.mjs +95 -15
- package/src/runtime/tidy/languages.mjs +17 -15
- package/src/runtime/tidy/process.mjs +9 -5
- package/src/runtime/tidy/resolve.mjs +19 -16
- package/src/runtime/tidy/runners/biome.mjs +3 -3
- package/src/runtime/tidy/tool.mjs +1 -1
- package/src/runtime/tidy/worktree.mjs +10 -6
- package/src/runtime/visualize-bridge/client.mjs +4 -1
- package/src/runtime/visualize-bridge/tool-defs.mjs +7 -2
- package/src/runtime/web-search/index.mjs +4 -23
- package/src/runtime/web-search/lib/web-tools.mjs +2 -2
- package/src/runtime/web-search/tool-defs.mjs +17 -26
- package/src/session-runtime/agent-profile-changes.mjs +55 -4
- package/src/session-runtime/agent-task-sessions.mjs +410 -353
- package/src/session-runtime/boot/apis.mjs +27 -4
- package/src/session-runtime/boot/begin.mjs +2 -0
- package/src/session-runtime/boot/config.mjs +10 -1
- package/src/session-runtime/boot/facade.mjs +1 -0
- package/src/session-runtime/boot/providers.mjs +70 -3
- package/src/session-runtime/boot/session.mjs +2 -0
- package/src/session-runtime/boot/tools.mjs +71 -25
- package/src/session-runtime/bot-status.mjs +103 -103
- package/src/session-runtime/channel-config-api.mjs +1 -0
- package/src/session-runtime/config-change-effects.mjs +179 -0
- package/src/session-runtime/config-lifecycle/config-writers.mjs +1 -0
- package/src/session-runtime/config-lifecycle.mjs +160 -24
- package/src/session-runtime/connector-merge-migration.mjs +18 -15
- package/src/session-runtime/conversation-import/discovery.mjs +245 -47
- package/src/session-runtime/conversation-import/service.mjs +12 -5
- package/src/session-runtime/goal-facade-api.mjs +49 -3
- package/src/session-runtime/handoff-attachments.mjs +1 -1
- package/src/session-runtime/held-requests.mjs +3 -1
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +3 -0
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -2
- package/src/session-runtime/internal-tool-executor/feature-tools.mjs +5 -11
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +8 -0
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +161 -120
- package/src/session-runtime/internal-tool-executor.mjs +12 -19
- package/src/session-runtime/lifecycle/cold-heir.mjs +7 -0
- package/src/session-runtime/lifecycle/memory-ingest.mjs +3 -3
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +53 -5
- package/src/session-runtime/lifecycle/session-switch.mjs +13 -2
- package/src/session-runtime/lifecycle/teardown/session-close.mjs +10 -5
- package/src/session-runtime/lifecycle/teardown.mjs +1 -1
- package/src/session-runtime/lifecycle-api.mjs +1 -0
- package/src/session-runtime/mcp-glue/server-catalog.mjs +27 -10
- package/src/session-runtime/mcp-glue/server-connection.mjs +34 -8
- package/src/session-runtime/mcp-glue/server-input.mjs +4 -1
- package/src/session-runtime/mixy-heartbeat.mjs +1 -1
- package/src/session-runtime/model-route/set-route.mjs +40 -7
- package/src/session-runtime/native-web-search/routes.mjs +3 -3
- package/src/session-runtime/provider-auth/login.mjs +2 -2
- package/src/session-runtime/provider-auth/refresh.mjs +6 -3
- package/src/session-runtime/provider-auth/setup.mjs +1 -1
- package/src/session-runtime/provider-readiness.mjs +53 -4
- package/src/session-runtime/resource-api.mjs +1 -1
- package/src/session-runtime/resource-extension-sync.mjs +4 -8
- package/src/session-runtime/resource-mcp-api.mjs +98 -35
- package/src/session-runtime/resource-mcp-connector-accounts.mjs +49 -32
- package/src/session-runtime/resource-mcp-secrets.mjs +27 -10
- package/src/session-runtime/resource-mcp-servers.mjs +5 -4
- package/src/session-runtime/resource-plugins-api.mjs +4 -0
- package/src/session-runtime/routine-executor.mjs +152 -0
- package/src/session-runtime/routine-home-turn.mjs +46 -5
- package/src/session-runtime/runtime-facade.mjs +5 -0
- package/src/session-runtime/runtime-feature-gates.mjs +2 -11
- package/src/session-runtime/schedule-session-run.mjs +1 -0
- package/src/session-runtime/services/agent-tool/job-task-reconcile.mjs +6 -1
- package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +7 -0
- package/src/session-runtime/services/agent-tool/send-flow.mjs +120 -8
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +12 -0
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-plan.mjs +5 -0
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +8 -3
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +28 -7
- package/src/session-runtime/services/agent-tool.mjs +51 -1
- package/src/session-runtime/services/agent-watchdog-registry.mjs +32 -4
- package/src/session-runtime/services/channel-admin.mjs +18 -0
- package/src/session-runtime/services/channel-worker/daemon-spawn.mjs +2 -0
- package/src/session-runtime/services/daemon-candidate.mjs +4 -1
- package/src/session-runtime/services/hook-bus/command-handler.mjs +7 -11
- package/src/session-runtime/services/memory-runtime-proxy/daemon-spawn.mjs +4 -0
- package/src/session-runtime/services/plugin-admin.mjs +14 -6
- package/src/session-runtime/services/provider-admin.mjs +281 -10
- package/src/session-runtime/services/seeds.mjs +7 -0
- package/src/session-runtime/services/usage-stats-model.mjs +32 -11
- package/src/session-runtime/session-create/materialize.mjs +4 -2
- package/src/session-runtime/session-create/session-options.mjs +2 -0
- package/src/session-runtime/session-turn-api.mjs +2 -0
- package/src/session-runtime/settings-builtin-tools-api.mjs +5 -10
- package/src/session-runtime/settings-system-api.mjs +1 -1
- package/src/session-runtime/setup-tool/agent-settings-actions.mjs +13 -3
- package/src/session-runtime/setup-tool/connector-widen-approval.mjs +96 -0
- package/src/session-runtime/setup-tool/executor.mjs +14 -3
- package/src/session-runtime/setup-tool/extended-actions.mjs +2 -0
- package/src/session-runtime/setup-tool/settings-contract.mjs +28 -0
- package/src/session-runtime/setup-tool/tool-defs.mjs +28 -2
- package/src/session-runtime/tool-policy/agent-profile-fold.mjs +40 -43
- package/src/session-runtime/tool-policy/mode-switch.mjs +1 -1
- package/src/session-runtime/tool-policy/policy-stage.mjs +106 -8
- package/src/session-runtime/tool-policy/workflow-overlay.mjs +2 -1
- package/src/session-runtime/tool-policy-refresh.mjs +182 -5
- package/src/session-runtime/tool-surface.mjs +38 -1
- package/src/session-runtime/turn/agent-ops.mjs +33 -2
- package/src/session-runtime/turn/session-ops.mjs +2 -0
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +5 -0
- package/src/session-runtime/turn/turn-run.mjs +1 -1
- package/src/session-runtime/webhook-session-run.mjs +2 -0
- package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +46 -11
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +2 -0
- package/src/session-runtime/workflow-agents-api/instruction-files.mjs +165 -0
- package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +5 -4
- package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +2 -3
- package/src/session-runtime/workflow-agents-api.mjs +2 -0
- package/src/session-runtime/workspace/activity-guards.mjs +176 -0
- package/src/session-runtime/workspace/project-branches.mjs +1 -1
- package/src/session-runtime/workspace/session-view.mjs +149 -0
- package/src/session-runtime/workspace/side-checkouts.mjs +203 -0
- package/src/session-runtime/workspace/transition-runner.mjs +188 -0
- package/src/session-runtime/workspace/transitions.mjs +128 -1070
- package/src/session-runtime/workspace/workspace-merge.mjs +132 -0
- package/src/session-runtime/workspace/worktree-intents.mjs +242 -0
- package/src/session-runtime/workspace/worktree-maintenance.mjs +200 -0
- package/src/session-runtime/workspace/worktree-setup.mjs +97 -0
- package/src/session-runtime/workspace/worktree-tool.mjs +70 -54
- package/src/standalone/daemon-agent-control.mjs +25 -8
- package/src/standalone/daemon-desktop-runtime.mjs +8 -2
- package/src/standalone/daemon-lag-profiler.mjs +7 -7
- package/src/standalone/daemon-session-control.mjs +151 -136
- package/src/standalone/daemon.mjs +61 -2
- package/src/standalone/desktop-service-registry.mjs +9 -0
- package/src/standalone/local-session-runtime.mjs +21 -1
- package/src/standalone/session-client/daemon-unavailable.mjs +4 -1
- package/src/standalone/session-client.mjs +5 -1
- package/src/standalone/session-frame-stream.mjs +83 -11
- package/src/standalone/session-protocol.mjs +15 -0
- package/src/standalone/session-service/agent-route-follow.mjs +23 -20
- package/src/standalone/session-service/agent-tree/agent-turns.mjs +18 -6
- package/src/standalone/session-service/agent-tree.mjs +45 -9
- package/src/standalone/session-service/projection/transcript-window.mjs +700 -64
- package/src/standalone/session-service/quota-resume.mjs +9 -0
- package/src/standalone/session-service/session-calls/session-action.mjs +51 -1
- package/src/standalone/session-service/session-calls/session-turns.mjs +37 -18
- package/src/standalone/session-service/session-calls/session-views.mjs +160 -104
- package/src/standalone/session-service/session-calls/turn-gate.mjs +34 -0
- package/src/standalone/session-service/session-calls.mjs +2 -1
- package/src/standalone/session-service/stored-reader.mjs +127 -40
- package/src/tui/App.jsx +162 -164
- package/src/tui/app/app-view/floating-panel.jsx +3 -0
- package/src/tui/app/app-view/text-entry-labels.mjs +1 -0
- package/src/tui/app/clipboard.mjs +22 -11
- package/src/tui/app/create-app-pickers.mjs +2 -0
- package/src/tui/app/doctor.mjs +2 -2
- package/src/tui/app/panel-signature.mjs +1 -1
- package/src/tui/app/prompt-handlers/use-prompt-history-nav.mjs +1 -1
- package/src/tui/app/prompt-handlers/use-prompt-interrupt.mjs +3 -0
- package/src/tui/app/prompt-submit/provider-prompts.mjs +3 -1
- package/src/tui/app/provider-setup/api-key-actions.mjs +31 -1
- package/src/tui/app/provider-setup/oauth-actions.mjs +25 -6
- package/src/tui/app/provider-setup-picker.mjs +20 -13
- package/src/tui/app/settings-picker.mjs +53 -8
- package/src/tui/app/shell-layout/row-budgets.mjs +14 -12
- package/src/tui/app/slash-commands.mjs +2 -1
- package/src/tui/app/slash-dispatch/route-commands.mjs +1 -1
- package/src/tui/app/slash-dispatch/session-commands.mjs +47 -1
- package/src/tui/app/slash-dispatch.mjs +1 -1
- package/src/tui/app/use-btw-panel.mjs +29 -0
- package/src/tui/app/use-context-panel-refresh.mjs +31 -0
- package/src/tui/app/use-model-catalog-cache.mjs +13 -10
- package/src/tui/app/use-mouse-input.mjs +11 -0
- package/src/tui/app/use-onboarding-start.mjs +8 -3
- package/src/tui/app/use-panel-transition.mjs +10 -1
- package/src/tui/app/use-pasted-buffers.mjs +28 -20
- package/src/tui/app/use-prompt-draft-flow.mjs +7 -0
- package/src/tui/app/use-prompt-layout-rows.mjs +3 -3
- package/src/tui/app/use-prompt-queue-history.mjs +5 -4
- package/src/tui/app/use-selection-focus.mjs +11 -2
- package/src/tui/app/use-selection-geometry.mjs +18 -9
- package/src/tui/app/use-selection-paint.mjs +4 -4
- package/src/tui/app/use-selection-stitch.mjs +3 -3
- package/src/tui/app/use-slash-palette.mjs +62 -0
- package/src/tui/app/use-terminal-chrome.mjs +2 -2
- package/src/tui/app/use-transcript-activity.mjs +48 -33
- package/src/tui/app/use-transcript-follow.mjs +12 -4
- package/src/tui/app/use-transcript-scroll.mjs +46 -17
- package/src/tui/app/use-transcript-swap-reset.mjs +27 -0
- package/src/tui/app/use-transcript-window/geometry.mjs +20 -6
- package/src/tui/app/use-transcript-window/instance-state.mjs +4 -0
- package/src/tui/app/use-transcript-window/selection-shift.mjs +5 -1
- package/src/tui/app/use-transcript-window.mjs +21 -11
- package/src/tui/app/use-tui-ready.mjs +18 -0
- package/src/tui/app/use-welcome-prompt-hint.mjs +5 -0
- package/src/tui/app/use-workflow-tab-cycle.mjs +5 -3
- package/src/tui/components/Picker.jsx +27 -3
- package/src/tui/components/SignInUrl.jsx +68 -0
- package/src/tui/components/TextEntryPanel.jsx +76 -46
- package/src/tui/components/prompt-input/escape-policy.d.mts +0 -1
- package/src/tui/components/prompt-input/escape-policy.mjs +1 -1
- package/src/tui/components/question-panel-model.mjs +4 -4
- package/src/tui/components/sign-in-url-layout.mjs +24 -0
- package/src/tui/components/tool-execution/standard-card.jsx +3 -4
- package/src/tui/components/user-message-skills.mjs +1 -1
- package/src/tui/dist/index.mjs +2205 -1371
- package/src/tui/markdown/render-ansi.mjs +1 -1
- package/src/tui/session/agent-job-feed/notification-router.mjs +10 -0
- package/src/tui/session/agent-job-feed.mjs +2 -0
- package/src/tui/session/context-state.mjs +3 -0
- package/src/tui/session/goal-turn-state.mjs +6 -2
- package/src/tui/session/quota-resume.mjs +1 -1
- package/src/tui/session/session-api/controls.mjs +4 -0
- package/src/tui/session/session-api/extensions.mjs +8 -0
- package/src/tui/session/session-api/intake/abort.mjs +2 -1
- package/src/tui/session/session-api/intake.mjs +2 -0
- package/src/tui/session/session-api/integrations.mjs +2 -2
- package/src/tui/session/session-api/lifecycle/dispose.mjs +1 -0
- package/src/tui/session/session-api/lifecycle/session-reset.mjs +7 -0
- package/src/tui/session/session-api/routes-agent-definitions.mjs +6 -0
- package/src/tui/session/session-api/settings.mjs +2 -2
- package/src/tui/session/session-api/worktree.mjs +13 -1
- package/src/tui/session/session-flow/drain.mjs +11 -14
- package/src/tui/session/tool-card-results/grouped-result.mjs +2 -2
- package/src/tui/session/transcript-spill/spill-writer.mjs +15 -0
- package/src/tui/session/transcript-spill.mjs +92 -4
- package/src/tui/session/transcript-store.mjs +2 -0
- package/src/tui/session/turn-quiet.mjs +1 -1
- package/src/tui/session/turn.mjs +3 -0
- package/src/tui/session/worktree-setup-notice.mjs +1 -1
- package/src/tui/spinner-meta.mjs +3 -3
- package/src/tui/spinner-verbs.mjs +2 -2
- package/src/defaults/skills/goal-management/SKILL.md +0 -169
- package/src/defaults/skills/skill-creator/references/source-review.md +0 -94
- package/src/runtime/agent/orchestrator/runtime-core/goal-tasks.mjs +0 -156
- package/src/session-runtime/goal-tasks.mjs +0 -1
|
@@ -117,8 +117,7 @@ export function _buildBaseRules({
|
|
|
117
117
|
.join('\n\n---\n\n');
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
export function _buildAgentRules(
|
|
121
|
-
const key = String(profile || 'full');
|
|
120
|
+
export function _buildAgentRules() {
|
|
122
121
|
const PLUGIN_ROOT = mixdogRoot();
|
|
123
122
|
const DATA_DIR = resolvePluginData();
|
|
124
123
|
const RULES_DIR = join(PLUGIN_ROOT, 'rules');
|
|
@@ -126,8 +125,8 @@ export function _buildAgentRules(profile = 'full') {
|
|
|
126
125
|
'buildAgentRoleContent',
|
|
127
126
|
'agent role rules',
|
|
128
127
|
[join(RULES_DIR, 'agent'), join(DATA_DIR, 'mixdog-config.json')],
|
|
129
|
-
{ PLUGIN_ROOT, DATA_DIR
|
|
130
|
-
|
|
128
|
+
{ PLUGIN_ROOT, DATA_DIR },
|
|
129
|
+
'full'
|
|
131
130
|
);
|
|
132
131
|
}
|
|
133
132
|
|
|
@@ -184,7 +183,12 @@ export function promptRulesRevision() {
|
|
|
184
183
|
return hash.digest('hex').slice(0, 24);
|
|
185
184
|
}
|
|
186
185
|
|
|
187
|
-
|
|
186
|
+
// `config`: the prompt settings slice of the runtime's in-memory config
|
|
187
|
+
// (prompt-settings.mjs promptConfigSlice); it keys the cache. Without it the
|
|
188
|
+
// builders read the config file.
|
|
189
|
+
const configVariant = (config) => (config ? JSON.stringify(config) : 'disk');
|
|
190
|
+
|
|
191
|
+
export function _buildLeadMetaContext({ includeOutputStyle = true, config = null } = {}) {
|
|
188
192
|
const PLUGIN_ROOT = mixdogRoot();
|
|
189
193
|
const DATA_DIR = resolvePluginData();
|
|
190
194
|
const RULES_DIR = join(PLUGIN_ROOT, 'rules');
|
|
@@ -197,8 +201,8 @@ export function _buildLeadMetaContext({ includeOutputStyle = true } = {}) {
|
|
|
197
201
|
join(PLUGIN_ROOT, 'output-styles'),
|
|
198
202
|
join(DATA_DIR, 'output-styles'),
|
|
199
203
|
],
|
|
200
|
-
{ PLUGIN_ROOT, DATA_DIR, includeOutputStyle },
|
|
201
|
-
includeOutputStyle ? 'style' : 'no-style'
|
|
204
|
+
{ PLUGIN_ROOT, DATA_DIR, CONFIG: config, includeOutputStyle },
|
|
205
|
+
`${includeOutputStyle ? 'style' : 'no-style'}\n${configVariant(config)}`
|
|
202
206
|
);
|
|
203
207
|
}
|
|
204
208
|
|
|
@@ -207,21 +211,25 @@ export function _buildLeadMetaContext({ includeOutputStyle = true } = {}) {
|
|
|
207
211
|
// rules-builder.cjs buildLeadLanguageContent).
|
|
208
212
|
// The configured response language as {id, name}, or null (a rule's `language`
|
|
209
213
|
// condition compares the id; its text's {language} is the name).
|
|
210
|
-
export function _buildLeadLanguage() {
|
|
214
|
+
export function _buildLeadLanguage({ config = null } = {}) {
|
|
211
215
|
const DATA_DIR = resolvePluginData();
|
|
212
|
-
return buildCachedRules(
|
|
213
|
-
|
|
214
|
-
|
|
216
|
+
return buildCachedRules(
|
|
217
|
+
'buildLeadLanguage',
|
|
218
|
+
'lead language',
|
|
219
|
+
[join(DATA_DIR, 'mixdog-config.json')],
|
|
220
|
+
{ DATA_DIR, CONFIG: config },
|
|
221
|
+
configVariant(config)
|
|
222
|
+
);
|
|
215
223
|
}
|
|
216
224
|
|
|
217
|
-
export function _buildLeadLanguageContext({ includeOutputStyle = true } = {}) {
|
|
225
|
+
export function _buildLeadLanguageContext({ includeOutputStyle = true, config = null } = {}) {
|
|
218
226
|
const PLUGIN_ROOT = mixdogRoot();
|
|
219
227
|
const DATA_DIR = resolvePluginData();
|
|
220
228
|
return buildCachedRules(
|
|
221
229
|
'buildLeadLanguageContent',
|
|
222
230
|
'lead language context',
|
|
223
231
|
[join(DATA_DIR, 'mixdog-config.json'), join(PLUGIN_ROOT, 'output-styles'), join(DATA_DIR, 'output-styles')],
|
|
224
|
-
{ PLUGIN_ROOT, DATA_DIR, includeOutputStyle },
|
|
225
|
-
includeOutputStyle ? 'style' : 'no-style'
|
|
232
|
+
{ PLUGIN_ROOT, DATA_DIR, CONFIG: config, includeOutputStyle },
|
|
233
|
+
`${includeOutputStyle ? 'style' : 'no-style'}\n${configVariant(config)}`
|
|
226
234
|
);
|
|
227
235
|
}
|
|
@@ -35,6 +35,7 @@ import { registerSessionPurgeHook } from '../store.mjs';
|
|
|
35
35
|
import { finishComputerTurn } from '../../../../computer-bridge/client.mjs';
|
|
36
36
|
import { configureUsageMetricsRuntime, dropMetricSeenState, bumpUsageMetricsTurnId } from './usage-metrics.mjs';
|
|
37
37
|
import { runtimeState as _runtimeState, isTurnInFlight } from './runtime-state.mjs';
|
|
38
|
+
import { resetTurnShellReap } from './turn-reap.mjs';
|
|
38
39
|
|
|
39
40
|
export { IN_FLIGHT_STAGES, inFlightSessionActivity } from './runtime-state.mjs';
|
|
40
41
|
|
|
@@ -216,6 +217,7 @@ export function markSessionAskStart(id) {
|
|
|
216
217
|
// after provider admission (the scheduler emits stage=requesting).
|
|
217
218
|
const now = Date.now();
|
|
218
219
|
entry.askStartedAt = now;
|
|
220
|
+
resetTurnShellReap(id, entry);
|
|
219
221
|
_setLogicalModelRequest(entry, null);
|
|
220
222
|
entry.lastProgressAt = now;
|
|
221
223
|
entry.updatedAt = now;
|
|
@@ -23,6 +23,7 @@ import {
|
|
|
23
23
|
_clearSessionRuntime,
|
|
24
24
|
} from './runtime-liveness.mjs';
|
|
25
25
|
import { clearTurnCheckpoint } from './turn-checkpoint.mjs';
|
|
26
|
+
import { forgetUnsettledTurn } from './turn-durability.mjs';
|
|
26
27
|
import { forgetSessionSaveBaseline } from '../store/save-worker.mjs';
|
|
27
28
|
import { publishSessionPersistence } from '../store/session-persistence-events.mjs';
|
|
28
29
|
import { forgetSessionLoadCache } from '../store/load-cache.mjs';
|
|
@@ -30,6 +31,8 @@ import { releaseReadSnapshotScope } from '../../tools/builtin/snapshot-store.mjs
|
|
|
30
31
|
import { cancelOwnedShellTrees } from '../../tools/lib/owned-shell-trees.mjs';
|
|
31
32
|
import { noteShellOwnerSessionClosed } from '../../tools/builtin/lib/shell-job-records.mjs';
|
|
32
33
|
import { forgetSideQuestion } from '../side-question-store.mjs';
|
|
34
|
+
import { cancelBackgroundTasks } from '../../../../shared/background-tasks.mjs';
|
|
35
|
+
import { releaseWorkerSnapshots } from '../../../../shared/worktrees/worker-snapshots.mjs';
|
|
33
36
|
|
|
34
37
|
/**
|
|
35
38
|
* Close a session. Plants a `closed=true` tombstone on disk with a bumped
|
|
@@ -147,6 +150,7 @@ function finishClose({ id, reason, tombstone, entry, closeSnapshot, newGen, outc
|
|
|
147
150
|
_stopToolActivityHeartbeat(id);
|
|
148
151
|
cancelOwnedShellProcesses({ id, reason, tombstone });
|
|
149
152
|
clearTurnCheckpoint(id);
|
|
153
|
+
forgetUnsettledTurn(id);
|
|
150
154
|
teardownSessionRuntime({ id, entry, reason, tombstone, newGen });
|
|
151
155
|
return true;
|
|
152
156
|
}
|
|
@@ -214,6 +218,12 @@ function cancelOwnedShellProcesses({ id, reason, tombstone }) {
|
|
|
214
218
|
} catch {
|
|
215
219
|
unconfirmed();
|
|
216
220
|
}
|
|
221
|
+
// What a finished command left running is a tracked task, not an owned tree.
|
|
222
|
+
try {
|
|
223
|
+
cancelBackgroundTasks({ surface: 'shell', executionSessionId: id, reason, notify: false });
|
|
224
|
+
} catch {
|
|
225
|
+
unconfirmed();
|
|
226
|
+
}
|
|
217
227
|
noteShellOwnerSessionClosed(id);
|
|
218
228
|
}
|
|
219
229
|
|
|
@@ -370,6 +380,8 @@ export function unloadSessionRuntime(id, reason = 'runtime-unload') {
|
|
|
370
380
|
closeProviderConnections(id, `runtime-unload:${reason}`);
|
|
371
381
|
releaseSessionReadCaches(id);
|
|
372
382
|
_clearSessionRuntime(id);
|
|
383
|
+
// A settled worker turn's read-only snapshots go with it (only ones it made).
|
|
384
|
+
void releaseWorkerSnapshots(id).catch(() => {});
|
|
373
385
|
if (process.env.MIXDOG_DEBUG_SESSION_LOG) {
|
|
374
386
|
try {
|
|
375
387
|
process.stderr.write(`[agent-unload] session=${id} reason=${reason}\n`);
|
|
@@ -14,6 +14,7 @@ import { runSessionCompaction, resolveSessionCompactionPolicy } from './compacti
|
|
|
14
14
|
import {
|
|
15
15
|
currentContextEstimateTokens,
|
|
16
16
|
invalidateContextUsageSnapshot,
|
|
17
|
+
invalidateProviderContextBaseline,
|
|
17
18
|
recordContextUsageSnapshot,
|
|
18
19
|
resolveGaugeContextTokens,
|
|
19
20
|
} from '../loop/compact-policy.mjs';
|
|
@@ -26,6 +27,8 @@ import {
|
|
|
26
27
|
import { getProvider } from '../../providers/registry.mjs';
|
|
27
28
|
import { isSessionCompactionBlocked, getSessionAbortSignal, _runtimeEntries } from './runtime-liveness.mjs';
|
|
28
29
|
import { mintSessionId } from './session-id.mjs';
|
|
30
|
+
import { useOwnScratchEnvironment } from './session-scratch-environment.mjs';
|
|
31
|
+
import { rebindToChangedPrefix } from '../thinking-binding.mjs';
|
|
29
32
|
import { hideCompactionArchive } from '../compaction-archive-capture.mjs';
|
|
30
33
|
import { writeStderrBestEffort } from '../../../../shared/best-effort-stderr.mjs';
|
|
31
34
|
import { forgetSideQuestion } from '../side-question-store.mjs';
|
|
@@ -234,6 +237,18 @@ function forkOutgoingTranscript(session, messages, now, archiveAs = '') {
|
|
|
234
237
|
...clearedTokenAccounting(now),
|
|
235
238
|
};
|
|
236
239
|
delete fork.liveTurnMessages;
|
|
240
|
+
// The spread copied the source's environment: the fork names its own
|
|
241
|
+
// scratch directory (its shell commands use it), not the source's.
|
|
242
|
+
if (useOwnScratchEnvironment(fork)) {
|
|
243
|
+
// The system prefix changed: thinking stored in the copy was bound to the
|
|
244
|
+
// source's prefix (and an open tool round ended), and every measurement
|
|
245
|
+
// taken against it is stale. Resume then finds a matching prefix and
|
|
246
|
+
// would repair nothing.
|
|
247
|
+
fork.messages = rebindToChangedPrefix(fork.messages);
|
|
248
|
+
delete fork._providerPrefixGuardState;
|
|
249
|
+
invalidateContextUsageSnapshot(fork);
|
|
250
|
+
invalidateProviderContextBaseline(fork);
|
|
251
|
+
}
|
|
237
252
|
// The archive sidecar belongs to the source id; the fork has none.
|
|
238
253
|
if (fork.compaction?.archive) {
|
|
239
254
|
fork.compaction = { ...fork.compaction };
|
|
@@ -68,7 +68,7 @@ export function fallbackTitleFromMessages(messages) {
|
|
|
68
68
|
/** Fills `session.title` only when missing. Never touches a locked (manual/AI)
|
|
69
69
|
* or generated title, and leaves generatedTitleStage unset so
|
|
70
70
|
* updateSessionGeneratedTitle can still upgrade it. The caller persists. */
|
|
71
|
-
|
|
71
|
+
function applyFallbackSessionTitle(session, title) {
|
|
72
72
|
if (!session || !isUsableTitle(title) || isUsableTitle(session.title)) return false;
|
|
73
73
|
if (session.titleLocked === true || session.generatedTitleStage) return false;
|
|
74
74
|
session.title = title;
|
|
@@ -7,6 +7,7 @@ import { getProvider } from '../../providers/registry.mjs';
|
|
|
7
7
|
import { invalidateContextUsageSnapshot, invalidateProviderContextBaseline } from '../loop/compact-policy.mjs';
|
|
8
8
|
import { saveSession, saveSessionAsync, saveSessionAsyncDeferred, loadSession, setLiveSession } from '../store.mjs';
|
|
9
9
|
import { _liveSessions } from '../store/live-state.mjs';
|
|
10
|
+
import { _getRuntimeEntry } from './runtime-liveness.mjs';
|
|
10
11
|
import { _recoverTurnCheckpointDurably } from './turn-checkpoint-recovery.mjs';
|
|
11
12
|
import { isAgentOwner } from '../../agent-owner.mjs';
|
|
12
13
|
import { AGENT_MODE, resolveSessionMode, sessionModeOf } from '../agent-mode.mjs';
|
|
@@ -46,7 +47,8 @@ import { executionFallbacks } from '../../../../shared/model-route-chain.mjs';
|
|
|
46
47
|
import { ownerRouteFallbacks } from './owner-route-fallbacks.mjs';
|
|
47
48
|
import { applyPendingWorkspaceReroot, refreshSessionBp3Environment } from './prompt-utils.mjs';
|
|
48
49
|
import { isWorktreeBound } from '../../../../shared/worktrees/contract.mjs';
|
|
49
|
-
import { applyAgentToolExposure } from '../loop/tool-exposure-migration.mjs';
|
|
50
|
+
import { applyAgentToolExposure, markToolSurfaceMigrated } from '../loop/tool-exposure-migration.mjs';
|
|
51
|
+
import { useOwnScratchEnvironment } from './session-scratch-environment.mjs';
|
|
50
52
|
import { prewarmSessionAutoEffort } from './ask-turn-auto-effort.mjs';
|
|
51
53
|
import { cancelCacheWarm } from '../cache-warm.mjs';
|
|
52
54
|
|
|
@@ -164,9 +166,9 @@ function resolveSessionRoute(opts, presetObj, profile) {
|
|
|
164
166
|
const modelName = opts.model || presetObj?.model;
|
|
165
167
|
// opts.tools (caller-supplied) wins over presetObj.tools — caller
|
|
166
168
|
// intent ('tools:readonly' from Pool C, etc.) must override the
|
|
167
|
-
// preset's default 'full'
|
|
168
|
-
//
|
|
169
|
-
//
|
|
169
|
+
// preset's default 'full'; otherwise a preset's tools='full' would shadow
|
|
170
|
+
// an explicit readonly request and leak write tools and bash into a
|
|
171
|
+
// read-only agent.
|
|
170
172
|
const toolPreset = opts.tools || presetObj?.tools || (typeof opts.preset === 'string' ? opts.preset : null) || 'full';
|
|
171
173
|
const effort = Object.hasOwn(opts, 'effort') ? opts.effort || null : presetObj?.effort || null;
|
|
172
174
|
const fast = presetObj?.fast === true || opts.fast === true;
|
|
@@ -237,17 +239,21 @@ export function createSession(createOpts) {
|
|
|
237
239
|
: { ...createOpts, sessionMode };
|
|
238
240
|
// A Lead-class session (actingAgent set) takes its owner's chain while it
|
|
239
241
|
// runs on the owner's primary model; an agent keeps its preset's.
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
+
const explicitRouteFallbacks = Object.hasOwn(opts, 'routeFallbacks');
|
|
243
|
+
let routeFallbacks;
|
|
244
|
+
if (actingAgent) {
|
|
245
|
+
routeFallbacks = explicitRouteFallbacks
|
|
242
246
|
? opts.routeFallbacks
|
|
243
|
-
: ownerRouteFallbacks({ sessionMode, agentId: actingAgent, provider: providerName, model: modelName })
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
)
|
|
247
|
+
: ownerRouteFallbacks({ sessionMode, agentId: actingAgent, provider: providerName, model: modelName });
|
|
248
|
+
} else {
|
|
249
|
+
routeFallbacks = executionFallbacks(
|
|
250
|
+
normalizeWorkflowRoute({
|
|
251
|
+
provider: providerName,
|
|
252
|
+
model: modelName,
|
|
253
|
+
fallbacks: explicitRouteFallbacks ? opts.routeFallbacks : presetObj?.fallbacks,
|
|
254
|
+
})
|
|
255
|
+
);
|
|
256
|
+
}
|
|
251
257
|
// Provider cache strategy — agentRuntime.resolveSync() above is a
|
|
252
258
|
// best-effort injection point (setAgentRuntime() has no live caller
|
|
253
259
|
// today, so that branch never fires); build it directly here so every
|
|
@@ -517,6 +523,36 @@ export function updateSessionRoute(id, route = {}, options = {}) {
|
|
|
517
523
|
return session;
|
|
518
524
|
}
|
|
519
525
|
|
|
526
|
+
/**
|
|
527
|
+
* A route saved for a session while its turn runs: held as
|
|
528
|
+
* `session.heldRoute` (on the object the running turn commits, so its save
|
|
529
|
+
* persists it) and applied at the session's next turn boundary
|
|
530
|
+
* (applyHeldSessionRoute). A later hold replaces an earlier one; `route`
|
|
531
|
+
* null drops the hold (the route was saved back to the running one).
|
|
532
|
+
*/
|
|
533
|
+
export function holdSessionRoute(id, route = {}) {
|
|
534
|
+
if (!id) return null;
|
|
535
|
+
const targets = new Set([_getRuntimeEntry(id)?.session, loadSession(id)]);
|
|
536
|
+
let held = null;
|
|
537
|
+
for (const session of targets) {
|
|
538
|
+
if (session?.id !== id || session.closed === true) continue;
|
|
539
|
+
if (route) session.heldRoute = { ...route };
|
|
540
|
+
else delete session.heldRoute;
|
|
541
|
+
held = session;
|
|
542
|
+
}
|
|
543
|
+
return held;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/** A held route takes effect before the turn opens on `session`. */
|
|
547
|
+
export function applyHeldSessionRoute(session) {
|
|
548
|
+
const route = session?.heldRoute;
|
|
549
|
+
if (!route) return session;
|
|
550
|
+
delete session.heldRoute;
|
|
551
|
+
const crossProvider =
|
|
552
|
+
(route.provider && route.provider !== session.provider) || (route.model && route.model !== session.model);
|
|
553
|
+
return updateSessionRoute(session.id, route, { session, crossProvider }) || session;
|
|
554
|
+
}
|
|
555
|
+
|
|
520
556
|
// --- resume (reload tools for a stored session) ---
|
|
521
557
|
// Interrupted-turn recovery lives in turn-checkpoint-recovery.mjs; the
|
|
522
558
|
// prepared tool surface it consumes is cached in prepared-resume-cache.mjs.
|
|
@@ -594,6 +630,12 @@ export async function resumeSession(sessionId, preset, options = {}) {
|
|
|
594
630
|
_recoverTurnCheckpointDurably(session, sessionId);
|
|
595
631
|
_refreshResumedTools(session, sessionId, preset);
|
|
596
632
|
refreshSessionProviderCacheOpts(session);
|
|
633
|
+
// An archive saved before clear learned to rename it still names the
|
|
634
|
+
// session it was copied from: a changed prefix is one cache break.
|
|
635
|
+
if (useOwnScratchEnvironment(session)) {
|
|
636
|
+
invalidateContextUsageSnapshot(session);
|
|
637
|
+
markToolSurfaceMigrated(session, 'prompt_fold');
|
|
638
|
+
}
|
|
597
639
|
// The live session already owns the refreshed tools and desktop scope.
|
|
598
640
|
// Defer the structured clone + worker round-trip so opening a conversation
|
|
599
641
|
// is not blocked on persisting the same in-memory state back to disk.
|
|
@@ -29,7 +29,38 @@ export function acquireSessionLock(sessionId, signal = null) {
|
|
|
29
29
|
};
|
|
30
30
|
const unlock = () => releaseSlot();
|
|
31
31
|
if (!signal) return previousReady.then(() => unlock);
|
|
32
|
+
return waitForSlot(sessionId, signal, previousReady, releaseSlot, unlock);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** The lock only when nobody holds it or waits for it: the unlock now, or
|
|
36
|
+
* null. Synchronous, so a caller can check and act with no turn starting
|
|
37
|
+
* in between (askSession takes this lock for every turn). */
|
|
38
|
+
export function tryAcquireSessionLock(sessionId) {
|
|
39
|
+
if (_sessionLocks.has(sessionId)) return null;
|
|
40
|
+
let release;
|
|
41
|
+
const entry = {
|
|
42
|
+
promise: new Promise((r) => {
|
|
43
|
+
release = r;
|
|
44
|
+
}),
|
|
45
|
+
count: 1,
|
|
46
|
+
};
|
|
47
|
+
_sessionLocks.set(sessionId, entry);
|
|
48
|
+
let released = false;
|
|
49
|
+
return () => {
|
|
50
|
+
if (released) return;
|
|
51
|
+
released = true;
|
|
52
|
+
entry.count--;
|
|
53
|
+
if (entry.count === 0 && _sessionLocks.get(sessionId) === entry) _sessionLocks.delete(sessionId);
|
|
54
|
+
release();
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Someone waits for the lock behind its holder (a turn about to start). */
|
|
59
|
+
export function sessionLockContended(sessionId) {
|
|
60
|
+
return (_sessionLocks.get(sessionId)?.count ?? 0) > 1;
|
|
61
|
+
}
|
|
32
62
|
|
|
63
|
+
function waitForSlot(sessionId, signal, previousReady, releaseSlot, unlock) {
|
|
33
64
|
// A cancelled waiter must reject immediately without opening a hole in the
|
|
34
65
|
// mutex. Its reserved slot is skipped only after the previous holder exits,
|
|
35
66
|
// so later waiters still cannot overlap the live owner.
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
// carry all four to the provider with their cache tiers.
|
|
5
5
|
import { buildSkillManifest, composeSystemPrompt } from '../../context/collect.mjs';
|
|
6
6
|
import { configuredInstructionFilesMode, loadInstructionFilesContext } from '../../context/instruction-files.mjs';
|
|
7
|
+
import { normalizeInstructionFilesMode } from '../../../../shared/instruction-files-mode.mjs';
|
|
8
|
+
import { promptConfigSlice, promptSettingsRecord } from './prompt-settings.mjs';
|
|
7
9
|
import { agentModeIdentityLine } from '../../context/role-instructions.mjs';
|
|
8
10
|
import { AGENT_MODE, sessionModeOf } from '../agent-mode.mjs';
|
|
9
11
|
import { MIXY_AGENT_ID } from '../agent-home.mjs';
|
|
@@ -13,6 +15,7 @@ import {
|
|
|
13
15
|
_buildAgentModeRules,
|
|
14
16
|
_buildLeadRules,
|
|
15
17
|
_buildLeadMetaContext,
|
|
18
|
+
_buildLeadLanguage,
|
|
16
19
|
_buildLeadLanguageContext,
|
|
17
20
|
} from './rules-cache.mjs';
|
|
18
21
|
import {
|
|
@@ -25,6 +28,18 @@ import { sessionScratchDir } from '../../../../shared/session-scratch.mjs';
|
|
|
25
28
|
import { delegationDisabled } from './session-tool-surface.mjs';
|
|
26
29
|
import { contextAckMessage } from '../compact/user-message-kind.mjs';
|
|
27
30
|
|
|
31
|
+
/** What the generated scratch line starts with; the one place that line is recognised. */
|
|
32
|
+
export const SCRATCH_LINE_PREFIX = '- Scratch: ';
|
|
33
|
+
|
|
34
|
+
/** The environment line naming `sessionId`'s scratch directory, '' without one. */
|
|
35
|
+
export function scratchEnvironmentLine(sessionId) {
|
|
36
|
+
// Fixed per session id and data dir, so the line never changes across turns.
|
|
37
|
+
const scratchDir = sessionScratchDir(sessionId);
|
|
38
|
+
return scratchDir
|
|
39
|
+
? `${SCRATCH_LINE_PREFIX}${scratchDir} — this session's scratch directory; TEMP, TMP and TMPDIR in shell commands point here.`
|
|
40
|
+
: '';
|
|
41
|
+
}
|
|
42
|
+
|
|
28
43
|
// Preserve the exact pre-layout environment payload: Lead carried the
|
|
29
44
|
// shell preference in Profile Preferences, while any routing surface with
|
|
30
45
|
// shell carried the startup capability line in BP1.
|
|
@@ -33,8 +48,6 @@ import { contextAckMessage } from '../compact/user-message-kind.mjs';
|
|
|
33
48
|
// resolves explicit session signals first and never leaks the daemon's
|
|
34
49
|
// install root (user-cwd.mjs safe fallback chain).
|
|
35
50
|
function buildShellEnvironmentContext(opts, ownerIsAgent, toolsForRouting, sessionId = null) {
|
|
36
|
-
// Fixed per session id and data dir, so the line never changes across turns.
|
|
37
|
-
const scratchDir = sessionScratchDir(sessionId);
|
|
38
51
|
const sessionCwdLine = opts.cwd || captureOriginalUserCwd();
|
|
39
52
|
const wantsGitStartupLine = toolsForRouting.some((tool) => tool?.name === 'git');
|
|
40
53
|
let cwdContextLine = '';
|
|
@@ -48,9 +61,7 @@ function buildShellEnvironmentContext(opts, ownerIsAgent, toolsForRouting, sessi
|
|
|
48
61
|
return [
|
|
49
62
|
cwdContextLine,
|
|
50
63
|
`- Shell: ${shellName}. Use ${shellName} syntax unless the user specifies otherwise.`,
|
|
51
|
-
|
|
52
|
-
? `- Scratch: ${scratchDir} — this session's scratch directory; TEMP, TMP and TMPDIR in shell commands point here.`
|
|
53
|
-
: '',
|
|
64
|
+
scratchEnvironmentLine(sessionId),
|
|
54
65
|
// Which common tools the shell can run, measured where commands run
|
|
55
66
|
// (login shell on POSIX, this process's PATH on Windows); see
|
|
56
67
|
// runtime-capabilities.mjs. Recorded runs spent a round per session
|
|
@@ -80,7 +91,7 @@ function buildShellEnvironmentContext(opts, ownerIsAgent, toolsForRouting, sessi
|
|
|
80
91
|
* none.
|
|
81
92
|
* @returns {{ environmentContext: string|undefined, instructionFilesContext: string|undefined }}
|
|
82
93
|
*/
|
|
83
|
-
export function buildWorkspacePromptContext(session, cwd) {
|
|
94
|
+
export function buildWorkspacePromptContext(session, cwd, { instructionFilesMode } = {}) {
|
|
84
95
|
const ownerIsAgent = session?.owner === 'agent';
|
|
85
96
|
const toolFreeRole =
|
|
86
97
|
ownerIsAgent && Array.isArray(session?.schemaAllowedTools) && session.schemaAllowedTools.length === 0;
|
|
@@ -95,7 +106,14 @@ export function buildWorkspacePromptContext(session, cwd) {
|
|
|
95
106
|
instructionFilesContext:
|
|
96
107
|
session?.skipInstructionFiles === true || sessionModeOf(session) === AGENT_MODE
|
|
97
108
|
? undefined
|
|
98
|
-
: loadInstructionFilesContext({
|
|
109
|
+
: loadInstructionFilesContext({
|
|
110
|
+
// A session runtime passes its in-memory setting; others read the file.
|
|
111
|
+
mode:
|
|
112
|
+
instructionFilesMode === undefined
|
|
113
|
+
? configuredInstructionFilesMode()
|
|
114
|
+
: normalizeInstructionFilesMode(instructionFilesMode),
|
|
115
|
+
cwd,
|
|
116
|
+
}),
|
|
99
117
|
};
|
|
100
118
|
}
|
|
101
119
|
|
|
@@ -113,15 +131,11 @@ export function sessionRolePromptFields(identity, { ownerIsAgent, toolFreeRole,
|
|
|
113
131
|
const mixy = (identity.agent || MIXY_AGENT_ID) === MIXY_AGENT_ID;
|
|
114
132
|
let roleRules = '';
|
|
115
133
|
if (!skipRules) {
|
|
116
|
-
roleRules = ownerIsAgent
|
|
117
|
-
? _buildAgentRules(identity.agentRulesProfile)
|
|
118
|
-
: _buildLeadRules({ includeLeadBrief: !delegationFree });
|
|
134
|
+
roleRules = ownerIsAgent ? _buildAgentRules() : _buildLeadRules({ includeLeadBrief: !delegationFree });
|
|
119
135
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
? _buildLeadRules({ includeLeadBrief: !delegationFree, part: 'identity' })
|
|
124
|
-
: '';
|
|
136
|
+
let identityLine = '';
|
|
137
|
+
if (agentMode) identityLine = agentModeIdentityLine(identity.agent || MIXY_AGENT_ID);
|
|
138
|
+
else if (lead) identityLine = _buildLeadRules({ includeLeadBrief: !delegationFree, part: 'identity' });
|
|
125
139
|
return {
|
|
126
140
|
roleRules,
|
|
127
141
|
...(lead
|
|
@@ -172,7 +186,6 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
|
|
|
172
186
|
skipAgentRules: opts.skipAgentRules === true,
|
|
173
187
|
profileSkip: { ...profile?.skip },
|
|
174
188
|
agent: resolvedAgent,
|
|
175
|
-
agentRulesProfile: surface.agentRulesProfile,
|
|
176
189
|
};
|
|
177
190
|
const roleFields = sessionRolePromptFields(promptIdentity, {
|
|
178
191
|
ownerIsAgent,
|
|
@@ -181,10 +194,13 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
|
|
|
181
194
|
sessionMode,
|
|
182
195
|
});
|
|
183
196
|
const leadOnly = !skipAgentRules && !ownerIsAgent;
|
|
184
|
-
|
|
197
|
+
// The runtime's in-memory settings (a session runtime passes its config;
|
|
198
|
+
// other callers read the config file).
|
|
199
|
+
const config = promptConfigSlice(opts.promptConfig);
|
|
200
|
+
const metaContext = leadOnly ? _buildLeadMetaContext({ includeOutputStyle: !agentMode, config }) : '';
|
|
185
201
|
// Lead-only response language; closes the environment block so no English
|
|
186
202
|
// system text (session/shell/git lines) follows it.
|
|
187
|
-
const languageContext = leadOnly ? _buildLeadLanguageContext({ includeOutputStyle: !agentMode }) : '';
|
|
203
|
+
const languageContext = leadOnly ? _buildLeadLanguageContext({ includeOutputStyle: !agentMode, config }) : '';
|
|
188
204
|
// Cwd, shell and repository facts only serve tool calls; a tool-free role
|
|
189
205
|
// gets none, which also keeps its prompt identical across projects.
|
|
190
206
|
const shellEnvironmentContext = toolFreeRole
|
|
@@ -200,7 +216,10 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
|
|
|
200
216
|
const instructionFilesContext =
|
|
201
217
|
toolFreeRole || profile?.skip?.claudemd || agentMode
|
|
202
218
|
? ''
|
|
203
|
-
: loadInstructionFilesContext({
|
|
219
|
+
: loadInstructionFilesContext({
|
|
220
|
+
mode: config ? normalizeInstructionFilesMode(config.instructionFiles) : configuredInstructionFilesMode(),
|
|
221
|
+
cwd: opts.cwd,
|
|
222
|
+
});
|
|
204
223
|
const composed = composeSystemPrompt({
|
|
205
224
|
...roleFields,
|
|
206
225
|
agentRules: injectedRules || undefined,
|
|
@@ -215,7 +234,27 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
|
|
|
215
234
|
environmentContext: shellEnvironmentContext,
|
|
216
235
|
provider: providerName || null,
|
|
217
236
|
});
|
|
218
|
-
|
|
237
|
+
// What the prompt presents of the prompt settings (prompt-settings.mjs).
|
|
238
|
+
const promptSettings = promptSettingsRecord({
|
|
239
|
+
meta: metaContext,
|
|
240
|
+
workflow: opts.workflowContext || '',
|
|
241
|
+
// A coding Lead's mode text (an agent-mode Lead's delegation block is fixed).
|
|
242
|
+
...(ownerIsAgent || agentMode
|
|
243
|
+
? {}
|
|
244
|
+
: {
|
|
245
|
+
orchestration: String(opts.leadWorkflowParts?.orchestrationContext || ''),
|
|
246
|
+
orchestrationMode: opts.orchestrationMode || '',
|
|
247
|
+
}),
|
|
248
|
+
skills: buildSkillManifest(skills),
|
|
249
|
+
language: languageContext,
|
|
250
|
+
instructionFiles: profile?.skip?.claudemd ? '' : instructionFilesContext,
|
|
251
|
+
coreMemory: profile?.skip?.memory ? '' : opts.coreMemoryContext || '',
|
|
252
|
+
instructionFilesMode: config
|
|
253
|
+
? normalizeInstructionFilesMode(config.instructionFiles)
|
|
254
|
+
: configuredInstructionFilesMode(),
|
|
255
|
+
});
|
|
256
|
+
const responseLanguage = leadOnly ? _buildLeadLanguage({ config }) || null : null;
|
|
257
|
+
return { ...composed, environmentTailContext, promptIdentity, promptSettings, responseLanguage };
|
|
219
258
|
}
|
|
220
259
|
|
|
221
260
|
// 4-BP layout (see composeSystemPrompt docs):
|
|
@@ -168,6 +168,8 @@ export function buildSessionRecord({ opts, route, presetObj, surface, prompt, me
|
|
|
168
168
|
sessionMode: opts.sessionMode,
|
|
169
169
|
bp3CoreContext: prompt.sessionMarkerCore,
|
|
170
170
|
promptIdentity: prompt.promptIdentity,
|
|
171
|
+
...(prompt.promptSettings ? { promptSettings: prompt.promptSettings } : {}),
|
|
172
|
+
...(prompt.responseLanguage !== undefined ? { responseLanguage: prompt.responseLanguage } : {}),
|
|
171
173
|
callerDisallowedTools: [...(opts.callerDisallowedTools ?? opts.disallowedTools ?? [])],
|
|
172
174
|
bp3EnvironmentContext: prompt.environmentTailContext,
|
|
173
175
|
// BP3 core and the volatile environment live in SEPARATE system
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
// manager/session-scratch-environment.mjs
|
|
2
|
+
// A session record that was copied from another session (a clear archive)
|
|
3
|
+
// still names the SOURCE's scratch directory in its generated environment,
|
|
4
|
+
// while its shell commands use its own. This rewrites only that line.
|
|
5
|
+
import {
|
|
6
|
+
BP3_PART_SEPARATOR,
|
|
7
|
+
bp3SystemMessage,
|
|
8
|
+
bpEnvSystemMessage,
|
|
9
|
+
replaceSystemMessageContent,
|
|
10
|
+
replaceWorkspaceEnvironment,
|
|
11
|
+
} from './prompt-utils.mjs';
|
|
12
|
+
import { SCRATCH_LINE_PREFIX, scratchEnvironmentLine } from './session-prompt-composition.mjs';
|
|
13
|
+
|
|
14
|
+
// The first line the generator's own prefix starts is the scratch line.
|
|
15
|
+
function withLine(text, line) {
|
|
16
|
+
if (typeof text !== 'string') return text;
|
|
17
|
+
const rows = text.split('\n');
|
|
18
|
+
const at = rows.findIndex((row) => row.startsWith(SCRATCH_LINE_PREFIX));
|
|
19
|
+
if (at < 0) return text;
|
|
20
|
+
rows[at] = line;
|
|
21
|
+
return rows.join('\n');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Only the generated environment facts (the first part of the environment
|
|
25
|
+
// tail) hold the line; memory and instruction files never do.
|
|
26
|
+
function tailWithLine(tail, line) {
|
|
27
|
+
if (typeof tail !== 'string') return tail;
|
|
28
|
+
const facts = tail.split(BP3_PART_SEPARATOR)[0];
|
|
29
|
+
const fixed = withLine(facts, line);
|
|
30
|
+
return fixed === facts ? tail : replaceWorkspaceEnvironment(tail, fixed);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Make `session`'s generated environment name its own scratch directory:
|
|
35
|
+
* the persisted environment tail, the system block carrying it and the
|
|
36
|
+
* environment facts of a staged workspace change. Instruction files, memory
|
|
37
|
+
* and every conversation message stay as they are; a session that already
|
|
38
|
+
* names its own directory is left byte-identical (message objects included).
|
|
39
|
+
* System messages are replaced in the session's own array, never mutated.
|
|
40
|
+
* @returns {boolean} whether the system prefix changed
|
|
41
|
+
*/
|
|
42
|
+
export function useOwnScratchEnvironment(session) {
|
|
43
|
+
const line = scratchEnvironmentLine(session?.id);
|
|
44
|
+
if (!line) return false;
|
|
45
|
+
const oldTail = session.bp3EnvironmentContext;
|
|
46
|
+
const newTail = tailWithLine(oldTail, line);
|
|
47
|
+
session.bp3EnvironmentContext = newTail;
|
|
48
|
+
const pending = session.workspaceReroot;
|
|
49
|
+
const seen = tailWithLine(pending?.seen?.environmentContext, line);
|
|
50
|
+
const target = tailWithLine(pending?.target?.environmentContext, line);
|
|
51
|
+
if (seen !== pending?.seen?.environmentContext || target !== pending?.target?.environmentContext) {
|
|
52
|
+
// The staged state may be shared with the session this one was copied
|
|
53
|
+
// from: replace it, never edit it.
|
|
54
|
+
session.workspaceReroot = {
|
|
55
|
+
...pending,
|
|
56
|
+
seen: { ...pending.seen, environmentContext: seen },
|
|
57
|
+
target: { ...pending.target, environmentContext: target },
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (newTail === oldTail || typeof oldTail !== 'string') return false;
|
|
61
|
+
// The generated environment closes its block (split env block, or the
|
|
62
|
+
// combined tier3 block after core + session start): swap that suffix.
|
|
63
|
+
const block = session.bp3EnvSplit === true ? bpEnvSystemMessage(session) : bp3SystemMessage(session);
|
|
64
|
+
const content = block?.content;
|
|
65
|
+
const suffix = oldTail.trim();
|
|
66
|
+
if (typeof content !== 'string' || !suffix || !content.endsWith(suffix)) return false;
|
|
67
|
+
const next = content.slice(0, -suffix.length) + newTail.trim();
|
|
68
|
+
// The prefix changed exactly when the system block's text did.
|
|
69
|
+
return replaceSystemMessageContent(session, block, next) && next !== content;
|
|
70
|
+
}
|
|
@@ -74,8 +74,6 @@ function schemaOmittedToolNames(toolsForRouting, tools) {
|
|
|
74
74
|
export function resolveSessionToolSurface(opts, { profile, toolPreset, modelName }) {
|
|
75
75
|
const ownerIsAgent = isAgentOwner(opts.owner);
|
|
76
76
|
const resolvedAgent = opts.agent || opts.role || profile?.taskType || null;
|
|
77
|
-
const hiddenAgent = getHiddenAgent(resolvedAgent);
|
|
78
|
-
const isRetrievalAgent = hiddenAgent?.kind === 'retrieval';
|
|
79
77
|
const hasCallerAllow = Array.isArray(opts.schemaAllowedTools);
|
|
80
78
|
const schemaAllowedTools = honoredSchemaAllowlist(opts.schemaAllowedTools, { ownerIsAgent, agent: resolvedAgent });
|
|
81
79
|
// Lead and Agent share the same cwd-scoped Skill inventory. A session that
|
|
@@ -112,7 +110,6 @@ export function resolveSessionToolSurface(opts, { profile, toolPreset, modelName
|
|
|
112
110
|
return {
|
|
113
111
|
ownerIsAgent,
|
|
114
112
|
resolvedAgent,
|
|
115
|
-
agentRulesProfile: isRetrievalAgent ? 'retrieval' : 'full',
|
|
116
113
|
skills,
|
|
117
114
|
sessionDeny,
|
|
118
115
|
toolPermission,
|