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
|
@@ -17,9 +17,19 @@ import {
|
|
|
17
17
|
} from '../../runtime/agent/orchestrator/context/collect.mjs';
|
|
18
18
|
import {
|
|
19
19
|
_buildBaseRules,
|
|
20
|
+
_buildLeadLanguage,
|
|
21
|
+
_buildLeadLanguageContext,
|
|
20
22
|
_buildLeadMetaContext,
|
|
21
23
|
} from '../../runtime/agent/orchestrator/session/manager/rules-cache.mjs';
|
|
22
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
notePromptSettingsPresented,
|
|
26
|
+
promptConfigSlice,
|
|
27
|
+
} from '../../runtime/agent/orchestrator/session/manager/prompt-settings.mjs';
|
|
28
|
+
import { normalizeInstructionFilesMode } from '../../runtime/shared/instruction-files-mode.mjs';
|
|
29
|
+
import {
|
|
30
|
+
buildWorkspacePromptContext,
|
|
31
|
+
sessionRolePromptFields,
|
|
32
|
+
} from '../../runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs';
|
|
23
33
|
import {
|
|
24
34
|
delegationDisabled,
|
|
25
35
|
honoredSchemaAllowlist,
|
|
@@ -32,14 +42,19 @@ import { AGENT_MODE, sessionModeOf } from '../../runtime/agent/orchestrator/sess
|
|
|
32
42
|
import { unusedModelEditToolName } from '../../runtime/shared/edit-tool-dialect.mjs';
|
|
33
43
|
import {
|
|
34
44
|
presentedAgentCatalogSlice,
|
|
45
|
+
refreshSessionBp3Environment,
|
|
46
|
+
replaceLanguageBlock,
|
|
47
|
+
replaceWorkspaceCoreSlices,
|
|
48
|
+
replaceWorkspaceEnvironment,
|
|
35
49
|
withPresentedWorkspaceSlices,
|
|
36
50
|
} from '../../runtime/agent/orchestrator/session/manager/prompt-utils.mjs';
|
|
37
|
-
import { leadPartsFor, rewriteSystemHeading, toolNames } from './surface-helpers.mjs';
|
|
51
|
+
import { leadPartsFor, rewriteConversationBp3Core, rewriteSystemHeading, toolNames } from './surface-helpers.mjs';
|
|
38
52
|
|
|
39
53
|
export function createPolicyStage({
|
|
40
54
|
getRoute,
|
|
41
55
|
getMode,
|
|
42
56
|
getDataDir,
|
|
57
|
+
getConfig,
|
|
43
58
|
modelStandaloneTools,
|
|
44
59
|
featureDisallowedTools,
|
|
45
60
|
loadCoreMemoryContext,
|
|
@@ -96,17 +111,58 @@ export function createPolicyStage({
|
|
|
96
111
|
}
|
|
97
112
|
}
|
|
98
113
|
|
|
114
|
+
// The prompt-shaping settings sections `session` renders from `config` (the
|
|
115
|
+
// runtime's in-memory config) and `coreMemoryContext`, as session creation
|
|
116
|
+
// composes them (session-prompt-composition.mjs composeSessionSystem).
|
|
117
|
+
// `language` is the response language block closing the environment.
|
|
118
|
+
function promptSettingsSections(session, identity, config, coreMemoryContext) {
|
|
119
|
+
const ownerIsAgent = isAgentOwner(session);
|
|
120
|
+
const schemaAllowedTools = honoredSchemaAllowlist(session.schemaAllowedTools, {
|
|
121
|
+
ownerIsAgent,
|
|
122
|
+
agent: identity.agent,
|
|
123
|
+
});
|
|
124
|
+
const toolFreeRole = ownerIsAgent && schemaAllowedTools?.length === 0;
|
|
125
|
+
const agentMode = sessionModeOf(session) === AGENT_MODE;
|
|
126
|
+
const lead = !identity.skipAgentRules && !toolFreeRole && !ownerIsAgent;
|
|
127
|
+
const slice = promptConfigSlice(config);
|
|
128
|
+
const skip = identity.profileSkip || {};
|
|
129
|
+
const skills = schemaAllowedTools?.length === 0 ? [] : collectPromptSkillsCached(session.cwd, config);
|
|
130
|
+
const { packContext, summary, leadPromptParts, orchestrationMode } = activeWorkflowContext(config, getDataDir());
|
|
131
|
+
// A coding Lead's mode text, as session creation records it.
|
|
132
|
+
const codingLead = !ownerIsAgent && !agentMode;
|
|
133
|
+
return {
|
|
134
|
+
meta: lead ? _buildLeadMetaContext({ includeOutputStyle: !agentMode, config: slice }) : '',
|
|
135
|
+
// The workflow pack and the skill listing BP2 carries.
|
|
136
|
+
workflow: String(packContext || ''),
|
|
137
|
+
workflowName: summary?.name || summary?.id || null,
|
|
138
|
+
orchestration: codingLead ? String(leadPartsFor(session, leadPromptParts).orchestrationContext || '') : '',
|
|
139
|
+
orchestrationMode: codingLead ? orchestrationMode || '' : '',
|
|
140
|
+
skills: buildSkillManifest(skills),
|
|
141
|
+
instructionFilesMode: normalizeInstructionFilesMode(slice?.instructionFiles),
|
|
142
|
+
language: lead ? _buildLeadLanguageContext({ includeOutputStyle: !agentMode, config: slice }) : '',
|
|
143
|
+
instructionFiles:
|
|
144
|
+
toolFreeRole || agentMode || skip.claudemd ? '' : String(loadInstructionFilesContext?.(session) || ''),
|
|
145
|
+
coreMemory: skip.memory ? '' : String(coreMemoryContext || ''),
|
|
146
|
+
// Not a section: the language per-request rules match (tail-reminder-rules.mjs).
|
|
147
|
+
responseLanguage: lead ? _buildLeadLanguage({ config: slice }) || null : null,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
99
151
|
// The policy `config` gives `session`, computed without touching the
|
|
100
152
|
// session, so a turn that starts during the async rebuild cannot lose tools
|
|
101
153
|
// to it. `conversation`: the rebuilt BP3 core keeps the instruction files
|
|
102
154
|
// and core memory the prompt presents now (withPresentedWorkspaceSlices).
|
|
103
|
-
|
|
155
|
+
// `settings`: the prompt settings sections as they stand (a fold or an
|
|
156
|
+
// empty rebuild presents them); `coreMemoryContext` a snapshot already read.
|
|
157
|
+
async function stagePolicy(session, identity, config, { conversation = false, coreMemoryContext: memory } = {}) {
|
|
104
158
|
const ownerIsAgent = isAgentOwner(session);
|
|
105
159
|
const schemaAllowedTools = honoredSchemaAllowlist(session.schemaAllowedTools, {
|
|
106
160
|
ownerIsAgent,
|
|
107
161
|
agent: identity.agent,
|
|
108
162
|
});
|
|
109
163
|
const toolFreeRole = ownerIsAgent && schemaAllowedTools?.length === 0;
|
|
164
|
+
const freshMemory = memory ?? (await leadCoreMemoryContext());
|
|
165
|
+
const settings = promptSettingsSections(session, identity, config, freshMemory);
|
|
110
166
|
|
|
111
167
|
const {
|
|
112
168
|
summary: workflow,
|
|
@@ -139,12 +195,11 @@ export function createPolicyStage({
|
|
|
139
195
|
provider: getRoute()?.provider,
|
|
140
196
|
model: getRoute()?.model,
|
|
141
197
|
});
|
|
142
|
-
const coreMemoryContext = conversation ? '' :
|
|
198
|
+
const coreMemoryContext = conversation ? '' : freshMemory;
|
|
143
199
|
// BP2's stable part as session creation composes it
|
|
144
200
|
// (session-prompt-composition.mjs): the Lead meta context and the skill
|
|
145
201
|
// manifest of the skills in scope now.
|
|
146
202
|
const skipRules = identity.skipAgentRules || toolFreeRole;
|
|
147
|
-
const skills = schemaAllowedTools?.length === 0 ? [] : collectPromptSkillsCached(session.cwd);
|
|
148
203
|
const { sessionMarkerCore, stableSystemContext } = composeSystemPrompt({
|
|
149
204
|
...sessionRolePromptFields(identity, {
|
|
150
205
|
ownerIsAgent,
|
|
@@ -160,8 +215,8 @@ export function createPolicyStage({
|
|
|
160
215
|
// setting; agent mode carries none.
|
|
161
216
|
instructionFilesContext:
|
|
162
217
|
conversation || toolFreeRole || agentMode ? null : loadInstructionFilesContext?.(session) || null,
|
|
163
|
-
metaContext:
|
|
164
|
-
skillManifest:
|
|
218
|
+
metaContext: settings.meta || undefined,
|
|
219
|
+
skillManifest: settings.skills,
|
|
165
220
|
});
|
|
166
221
|
return {
|
|
167
222
|
workflow,
|
|
@@ -174,9 +229,44 @@ export function createPolicyStage({
|
|
|
174
229
|
core: conversation ? withPresentedWorkspaceSlices(session, sessionMarkerCore) : sessionMarkerCore,
|
|
175
230
|
// Without BP1 the BP2 block cannot be located: null leaves it as it is.
|
|
176
231
|
stableContext: skipRules ? null : stableSystemContext,
|
|
232
|
+
settings,
|
|
177
233
|
};
|
|
178
234
|
}
|
|
179
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Make the prompt present `staged.settings` (an empty session's rebuild, a
|
|
238
|
+
* fold): the BP3 core's instruction files and core memory and the language
|
|
239
|
+
* block closing the environment; the caller has written BP2 and the core.
|
|
240
|
+
* A staged workspace re-root keeps the slices it will replace itself.
|
|
241
|
+
*/
|
|
242
|
+
function presentPromptSettings(session, staged) {
|
|
243
|
+
const { settings } = staged;
|
|
244
|
+
if (!session.workspaceReroot) {
|
|
245
|
+
rewriteConversationBp3Core(
|
|
246
|
+
session,
|
|
247
|
+
replaceWorkspaceCoreSlices(staged.core, {
|
|
248
|
+
coreMemoryContext: settings.coreMemory,
|
|
249
|
+
instructionFilesContext: settings.instructionFiles,
|
|
250
|
+
})
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
if (typeof session.bp3EnvironmentContext === 'string') {
|
|
254
|
+
session.bp3EnvironmentContext = replaceLanguageBlock(session.bp3EnvironmentContext, settings.language);
|
|
255
|
+
refreshSessionBp3Environment(session, session.cwd);
|
|
256
|
+
}
|
|
257
|
+
notePromptSettingsPresented(session, settings);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** An empty session's rebuild: the shell, git and listing facts as they stand. */
|
|
261
|
+
function refreshEnvironmentFacts(session) {
|
|
262
|
+
if (typeof session.bp3EnvironmentContext !== 'string' || !session.cwd || session.workspaceReroot) return;
|
|
263
|
+
const { environmentContext } = buildWorkspacePromptContext(session, session.cwd, {
|
|
264
|
+
instructionFilesMode: promptConfigSlice(getConfig?.())?.instructionFiles,
|
|
265
|
+
});
|
|
266
|
+
session.bp3EnvironmentContext = replaceWorkspaceEnvironment(session.bp3EnvironmentContext, environmentContext);
|
|
267
|
+
refreshSessionBp3Environment(session, session.cwd);
|
|
268
|
+
}
|
|
269
|
+
|
|
180
270
|
// Apply a staged policy synchronously; the BP3 core is the caller's. The
|
|
181
271
|
// prompt then carries the session's workflow and tools as they stand.
|
|
182
272
|
function applyPolicy(session, staged) {
|
|
@@ -184,6 +274,7 @@ export function createPolicyStage({
|
|
|
184
274
|
delete session.orchestrationModeOverlay;
|
|
185
275
|
delete session.workflowOpenedTools;
|
|
186
276
|
delete session.promptFoldPending;
|
|
277
|
+
delete session.compactionFoldPending;
|
|
187
278
|
session.workflow = toSessionWorkflowMeta(staged.workflow);
|
|
188
279
|
session.orchestrationMode = staged.orchestrationMode;
|
|
189
280
|
session.sessionMode = staged.sessionMode;
|
|
@@ -197,5 +288,12 @@ export function createPolicyStage({
|
|
|
197
288
|
session.updatedAt = Date.now();
|
|
198
289
|
}
|
|
199
290
|
|
|
200
|
-
return {
|
|
291
|
+
return {
|
|
292
|
+
liveDeniedTools,
|
|
293
|
+
stagePolicy,
|
|
294
|
+
applyPolicy,
|
|
295
|
+
promptSettingsSections,
|
|
296
|
+
presentPromptSettings,
|
|
297
|
+
refreshEnvironmentFacts,
|
|
298
|
+
};
|
|
201
299
|
}
|
|
@@ -78,7 +78,8 @@ export function createWorkflowOverlay({ liveDeniedTools, modelStandaloneTools })
|
|
|
78
78
|
if (!loadableTools.length) return;
|
|
79
79
|
const opened = session.workflowOpenedTools || [];
|
|
80
80
|
session.workflowOpenedTools = [...new Set([...opened, ...loadableTools])];
|
|
81
|
-
|
|
81
|
+
// The late pool, never the boot catalog a native request keeps byte-stable.
|
|
82
|
+
if (fresh.length) session.deferredLateToolCatalog = [...(session.deferredLateToolCatalog || []), ...fresh];
|
|
82
83
|
session.disallowedTools = (session.disallowedTools || []).filter((name) => !loadableTools.includes(String(name)));
|
|
83
84
|
const byName = new Map(schemaTools(session).map((tool) => [toolName(tool), tool]));
|
|
84
85
|
// Announced on every switch that opens them: a pending removal (a switch
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
1
|
+
// Bring a session to the settings as they stand at each turn start
|
|
2
|
+
// (reconcileTurnSettings): an empty session's tool surface and BP1/BP3 are
|
|
3
|
+
// rebuilt; a conversation keeps its prefix and takes moved tool gates live.
|
|
4
|
+
// Setters only save config. The exceptions are a workflow or orchestration mode switch
|
|
5
5
|
// made in the session itself (switchSessionWorkflow,
|
|
6
6
|
// switchSessionOrchestrationMode), which that conversation takes as an overlay.
|
|
7
7
|
import { sessionHasConversationMessages } from '../runtime/agent/orchestrator/runtime-core/session-text.mjs';
|
|
@@ -9,6 +9,17 @@ import { createAgentProfileFold } from './tool-policy/agent-profile-fold.mjs';
|
|
|
9
9
|
import { createPolicyStage } from './tool-policy/policy-stage.mjs';
|
|
10
10
|
import { createSessionSwitches } from './tool-policy/session-switches.mjs';
|
|
11
11
|
import { rewriteBp3Core } from './tool-policy/surface-helpers.mjs';
|
|
12
|
+
import {
|
|
13
|
+
stageConnectorAvailability,
|
|
14
|
+
stageToolAvailability,
|
|
15
|
+
} from '../runtime/agent/orchestrator/runtime-core/tool-availability.mjs';
|
|
16
|
+
import { resetBp2StableContext } from '../runtime/agent/orchestrator/context/collect.mjs';
|
|
17
|
+
import {
|
|
18
|
+
promptSettingsRecord,
|
|
19
|
+
stagePromptSettingsNotice,
|
|
20
|
+
} from '../runtime/agent/orchestrator/session/manager/prompt-settings.mjs';
|
|
21
|
+
import { isAgentOwner } from '../runtime/agent/orchestrator/agent-owner.mjs';
|
|
22
|
+
import { configForSession, currentMode } from './tool-policy/surface-helpers.mjs';
|
|
12
23
|
|
|
13
24
|
export function createToolPolicyRefresh({
|
|
14
25
|
getSession,
|
|
@@ -24,11 +35,21 @@ export function createToolPolicyRefresh({
|
|
|
24
35
|
activeWorkflowContext,
|
|
25
36
|
invalidatePreSessionToolSurface,
|
|
26
37
|
persistSession,
|
|
38
|
+
toolDefinitionsFor = () => [],
|
|
39
|
+
getSurfaceGeneration,
|
|
27
40
|
}) {
|
|
28
|
-
const {
|
|
41
|
+
const {
|
|
42
|
+
liveDeniedTools,
|
|
43
|
+
stagePolicy,
|
|
44
|
+
applyPolicy,
|
|
45
|
+
promptSettingsSections,
|
|
46
|
+
presentPromptSettings,
|
|
47
|
+
refreshEnvironmentFacts,
|
|
48
|
+
} = createPolicyStage({
|
|
29
49
|
getRoute,
|
|
30
50
|
getMode,
|
|
31
51
|
getDataDir,
|
|
52
|
+
getConfig,
|
|
32
53
|
modelStandaloneTools,
|
|
33
54
|
featureDisallowedTools,
|
|
34
55
|
loadCoreMemoryContext,
|
|
@@ -55,6 +76,153 @@ export function createToolPolicyRefresh({
|
|
|
55
76
|
);
|
|
56
77
|
}
|
|
57
78
|
|
|
79
|
+
// What the gates a surface is built from read: the config object (replaced,
|
|
80
|
+
// never mutated, on every adopt and every reload of a change made
|
|
81
|
+
// elsewhere), the surface generation (skills/plugins invalidate it) and the
|
|
82
|
+
// live gate list (which carries bridge presence).
|
|
83
|
+
const configGenerations = new WeakMap();
|
|
84
|
+
let configCount = 0;
|
|
85
|
+
function availabilityKey() {
|
|
86
|
+
const config = getConfig?.() || {};
|
|
87
|
+
let generation = configGenerations.get(config);
|
|
88
|
+
if (generation === undefined) {
|
|
89
|
+
generation = ++configCount;
|
|
90
|
+
configGenerations.set(config, generation);
|
|
91
|
+
}
|
|
92
|
+
return `${generation}|${getSurfaceGeneration?.() || 0}|${featureDisallowedTools().join(',')}`;
|
|
93
|
+
}
|
|
94
|
+
// Session → the key it was last brought to (process-local, so a session
|
|
95
|
+
// first seen here, e.g. resumed, is checked once).
|
|
96
|
+
const appliedKeys = new WeakMap();
|
|
97
|
+
|
|
98
|
+
const conversationEmpty = (session) =>
|
|
99
|
+
!sessionHasConversationMessages(session) && !sessionHasConversationMessages({ messages: session.liveTurnMessages });
|
|
100
|
+
|
|
101
|
+
// The revision of the prompt settings `session` would be built from now.
|
|
102
|
+
function settingsRevision(session, coreMemory) {
|
|
103
|
+
const identity = session.promptIdentity;
|
|
104
|
+
if (!identity) return undefined;
|
|
105
|
+
const config = configForSession(getConfig(), session.workflow?.id, currentMode(session));
|
|
106
|
+
return promptSettingsRecord(promptSettingsSections(session, identity, config, coreMemory)).revision;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** A session just built from the current settings (`coreMemory`: the
|
|
110
|
+
* snapshot its prompt was composed with). */
|
|
111
|
+
function noteToolAvailability(session, coreMemory = '') {
|
|
112
|
+
if (session) {
|
|
113
|
+
appliedKeys.set(session, {
|
|
114
|
+
gates: availabilityKey(),
|
|
115
|
+
settings: settingsRevision(session, String(coreMemory || '')),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Whether a settings change reaches the current session's whole prompt
|
|
121
|
+
* (no session yet, or one without a conversation, rebuilt at its turn). */
|
|
122
|
+
function settingsReachCurrentSession() {
|
|
123
|
+
const session = getSession?.();
|
|
124
|
+
return !session?.id || (Boolean(session.promptIdentity) && conversationEmpty(session));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async function readCoreMemory() {
|
|
128
|
+
try {
|
|
129
|
+
return String((await loadCoreMemoryContext?.()) || '');
|
|
130
|
+
} catch {
|
|
131
|
+
return '';
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async function reconcileSession(session) {
|
|
136
|
+
// Connector switches are read from their (stat-cached) files every turn.
|
|
137
|
+
const connectors = stageConnectorAvailability(session);
|
|
138
|
+
const coreMemory = await readCoreMemory();
|
|
139
|
+
const gates = availabilityKey();
|
|
140
|
+
const identity = session.promptIdentity;
|
|
141
|
+
// The prompt settings as they stand, file-based ones included (core
|
|
142
|
+
// memory, instruction files, output-style files, the workflow pack, the
|
|
143
|
+
// skill listing): their revision is part of the key.
|
|
144
|
+
const sections = identity
|
|
145
|
+
? promptSettingsSections(
|
|
146
|
+
session,
|
|
147
|
+
identity,
|
|
148
|
+
configForSession(getConfig(), session.workflow?.id, currentMode(session)),
|
|
149
|
+
coreMemory
|
|
150
|
+
)
|
|
151
|
+
: null;
|
|
152
|
+
const settings = sections ? promptSettingsRecord(sections).revision : undefined;
|
|
153
|
+
const applied = appliedKeys.get(session);
|
|
154
|
+
if (applied?.gates === gates && applied.settings === settings && !session.promptSettingsRecheck) {
|
|
155
|
+
return connectors ? { rebuilt: false, ...connectors } : null;
|
|
156
|
+
}
|
|
157
|
+
let rebuilt = false;
|
|
158
|
+
let settingsChanged = [];
|
|
159
|
+
if (identity && conversationEmpty(session)) {
|
|
160
|
+
// Nothing was sent: the whole prompt is rebuilt in place.
|
|
161
|
+
const staged = await stagePolicy(session, identity, getConfig(), { coreMemoryContext: coreMemory });
|
|
162
|
+
if (getSession?.() === session && conversationEmpty(session)) {
|
|
163
|
+
if (typeof staged.stableContext === 'string') resetBp2StableContext(session, staged.stableContext);
|
|
164
|
+
applyPolicy(session, staged);
|
|
165
|
+
rewriteBp3Core(session, staged.core);
|
|
166
|
+
presentPromptSettings(session, staged);
|
|
167
|
+
refreshEnvironmentFacts(session);
|
|
168
|
+
// The first-turn MCP fold may rebuild it in place too (an empty
|
|
169
|
+
// session reopened from disk was never marked).
|
|
170
|
+
session.deferredInitialRefreshPending = true;
|
|
171
|
+
rebuilt = true;
|
|
172
|
+
}
|
|
173
|
+
} else if (identity) {
|
|
174
|
+
// A conversation keeps its prefix: told once, folded at the next cold point.
|
|
175
|
+
settingsChanged = stagePromptSettingsNotice(session, sections);
|
|
176
|
+
// A delegated worker is never folded: after a compaction it is told
|
|
177
|
+
// again instead (rearmPromptSettingsNotice).
|
|
178
|
+
if (settingsChanged.length && !isAgentOwner(session)) session.promptFoldPending = true;
|
|
179
|
+
}
|
|
180
|
+
const staged = stageToolAvailability(session, featureDisallowedTools(), toolDefinitionsFor);
|
|
181
|
+
appliedKeys.set(session, { gates, settings: rebuilt ? session.promptSettings?.revision : settings });
|
|
182
|
+
const tools = staged || connectors;
|
|
183
|
+
const merged =
|
|
184
|
+
staged && connectors
|
|
185
|
+
? { added: [...staged.added, ...connectors.added], removed: [...staged.removed, ...connectors.removed] }
|
|
186
|
+
: tools;
|
|
187
|
+
return rebuilt || tools || settingsChanged.length
|
|
188
|
+
? { rebuilt, ...(merged || {}), ...(settingsChanged.length ? { settingsChanged } : {}) }
|
|
189
|
+
: null;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// One reconcile per session at a time: a turn start and a surface read of
|
|
193
|
+
// the same empty session share it.
|
|
194
|
+
const inflight = new WeakMap();
|
|
195
|
+
|
|
196
|
+
/** Turn start, any session kind: an empty session is rebuilt from current
|
|
197
|
+
* settings; a conversation keeps its prefix, takes moved tool gates live
|
|
198
|
+
* (stageToolAvailability) and prompt settings as a one-time notice. */
|
|
199
|
+
function reconcileTurnSettings() {
|
|
200
|
+
const session = getSession?.();
|
|
201
|
+
if (!session?.id) return Promise.resolve(null);
|
|
202
|
+
let running = inflight.get(session);
|
|
203
|
+
if (!running) {
|
|
204
|
+
running = reconcileSession(session).finally(() => inflight.delete(session));
|
|
205
|
+
inflight.set(session, running);
|
|
206
|
+
}
|
|
207
|
+
return running;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** A read of an empty session's surface or status: the same reconcile, so
|
|
211
|
+
* what is shown is what its first turn will send. A conversation (or a
|
|
212
|
+
* running turn) is left to its turn start. */
|
|
213
|
+
function reconcileEmptySession() {
|
|
214
|
+
const session = getSession?.();
|
|
215
|
+
if (!session?.id || turnInFlight(session) || !conversationEmpty(session)) return Promise.resolve(null);
|
|
216
|
+
return reconcileTurnSettings();
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/** Sync: whether an empty session's surface lags the settings gates. */
|
|
220
|
+
function emptySessionStale() {
|
|
221
|
+
const session = getSession?.();
|
|
222
|
+
if (!session?.id || turnInFlight(session) || !conversationEmpty(session)) return false;
|
|
223
|
+
return appliedKeys.get(session)?.gates !== availabilityKey();
|
|
224
|
+
}
|
|
225
|
+
|
|
58
226
|
async function refreshEmptySessionToolPolicy() {
|
|
59
227
|
invalidatePreSessionToolSurface?.();
|
|
60
228
|
const session = getSession?.();
|
|
@@ -67,8 +235,11 @@ export function createToolPolicyRefresh({
|
|
|
67
235
|
const staged = await stagePolicy(session, identity, getConfig());
|
|
68
236
|
// Apply: re-check admission after the await, then mutate synchronously.
|
|
69
237
|
if (!admitsRefresh(session)) return { appliedToCurrentSession: false };
|
|
238
|
+
if (typeof staged.stableContext === 'string') resetBp2StableContext(session, staged.stableContext);
|
|
70
239
|
applyPolicy(session, staged);
|
|
71
240
|
rewriteBp3Core(session, staged.core);
|
|
241
|
+
presentPromptSettings(session, staged);
|
|
242
|
+
refreshEnvironmentFacts(session);
|
|
72
243
|
return { appliedToCurrentSession: true };
|
|
73
244
|
}
|
|
74
245
|
|
|
@@ -91,10 +262,16 @@ export function createToolPolicyRefresh({
|
|
|
91
262
|
liveDeniedTools,
|
|
92
263
|
stagePolicy,
|
|
93
264
|
applyPolicy,
|
|
265
|
+
presentPromptSettings,
|
|
94
266
|
turnInFlight,
|
|
95
267
|
});
|
|
96
268
|
|
|
97
269
|
return {
|
|
270
|
+
reconcileTurnSettings,
|
|
271
|
+
reconcileEmptySession,
|
|
272
|
+
emptySessionStale,
|
|
273
|
+
noteToolAvailability,
|
|
274
|
+
settingsReachCurrentSession,
|
|
98
275
|
refreshEmptySessionToolPolicy,
|
|
99
276
|
switchSessionWorkflow: switches.switchSessionWorkflow,
|
|
100
277
|
switchSessionOrchestrationMode: switches.switchSessionOrchestrationMode,
|
|
@@ -6,7 +6,10 @@ import {
|
|
|
6
6
|
filterDisallowedTools,
|
|
7
7
|
selectDeferredTools,
|
|
8
8
|
} from '../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
AGENT_WORKER_DENIED_TOOLS,
|
|
11
|
+
finalizeSessionToolList,
|
|
12
|
+
} from '../runtime/agent/orchestrator/session/manager/tool-resolution.mjs';
|
|
10
13
|
import { LEAD_DISALLOWED_TOOLS } from '../runtime/agent/orchestrator/runtime-core/tool-defs.mjs';
|
|
11
14
|
import { deferredSurfaceModeForLead, toolSpecForMode } from '../runtime/agent/orchestrator/runtime-core/effort.mjs';
|
|
12
15
|
import { loadSkillToolDependencies } from '../runtime/agent/orchestrator/runtime-core/skill-tool-loading.mjs';
|
|
@@ -39,6 +42,11 @@ export function createToolSurface({
|
|
|
39
42
|
getFeatureDisallowedTools = () => [],
|
|
40
43
|
}) {
|
|
41
44
|
let preSessionSurface = null;
|
|
45
|
+
// The inputs the cached preview was built from (setters no longer
|
|
46
|
+
// invalidate it; a config adopt or reload replaces the config object).
|
|
47
|
+
let preSessionInputs = '';
|
|
48
|
+
let preSessionConfig = null;
|
|
49
|
+
let surfaceGeneration = 0;
|
|
42
50
|
|
|
43
51
|
// A coding Lead keeps `agent` whichever agents exist (the agents reach it as
|
|
44
52
|
// a listing reminder); Solo still offers it (deferred) for explicit user
|
|
@@ -122,16 +130,45 @@ export function createToolSurface({
|
|
|
122
130
|
return selectDeferredTools(session, names, surfaceMode);
|
|
123
131
|
}
|
|
124
132
|
|
|
133
|
+
/** Definitions the current session's kind may hold — built-ins included —
|
|
134
|
+
* for tools a settings gate opened mid-conversation. */
|
|
135
|
+
function toolDefinitionsFor(names) {
|
|
136
|
+
const wanted = new Set((names || []).map(String));
|
|
137
|
+
const session = getSession();
|
|
138
|
+
const ownerIsAgent = isAgentOwner(session);
|
|
139
|
+
const previewTools =
|
|
140
|
+
typeof mgr.previewSessionTools === 'function'
|
|
141
|
+
? mgr.previewSessionTools(toolSpecForMode(mode), [], {
|
|
142
|
+
mcpScopeId: getMcpScopeId(),
|
|
143
|
+
modelName: getRoute().model,
|
|
144
|
+
cwd: getCurrentCwd?.() || null,
|
|
145
|
+
})
|
|
146
|
+
: [];
|
|
147
|
+
const byName = new Map();
|
|
148
|
+
for (const tool of [...modelStandaloneTools(), ...filterModelToolsForProfile(previewTools, getToolProfile())]) {
|
|
149
|
+
const name = String(tool?.name || '');
|
|
150
|
+
if (wanted.has(name) && !byName.has(name)) byName.set(name, tool);
|
|
151
|
+
}
|
|
152
|
+
return finalizeSessionToolList([...byName.values()], { ownerIsAgent });
|
|
153
|
+
}
|
|
154
|
+
|
|
125
155
|
return {
|
|
126
156
|
modelStandaloneTools,
|
|
127
157
|
activateTools,
|
|
158
|
+
toolDefinitionsFor,
|
|
159
|
+
surfaceGeneration: () => surfaceGeneration,
|
|
128
160
|
invalidatePreSessionToolSurface() {
|
|
129
161
|
preSessionSurface = null;
|
|
162
|
+
surfaceGeneration += 1;
|
|
130
163
|
},
|
|
131
164
|
/** The live session once it exists; the preview surface until then. */
|
|
132
165
|
activeToolSurface() {
|
|
133
166
|
const session = getSession();
|
|
134
167
|
if (session) return session;
|
|
168
|
+
const inputs = getFeatureDisallowedTools().join(',');
|
|
169
|
+
if (preSessionConfig !== getConfig() || preSessionInputs !== inputs) preSessionSurface = null;
|
|
170
|
+
preSessionConfig = getConfig();
|
|
171
|
+
preSessionInputs = inputs;
|
|
135
172
|
preSessionSurface ??= buildPreSessionSurface();
|
|
136
173
|
return preSessionSurface;
|
|
137
174
|
},
|
|
@@ -31,6 +31,7 @@ export function createAgentOps(deps) {
|
|
|
31
31
|
subscribeRuntimeNotification,
|
|
32
32
|
agentTool,
|
|
33
33
|
activeToolSurface,
|
|
34
|
+
reconcileEmptySession,
|
|
34
35
|
notificationListeners,
|
|
35
36
|
getReservedSessionId,
|
|
36
37
|
} = deps;
|
|
@@ -72,6 +73,27 @@ export function createAgentOps(deps) {
|
|
|
72
73
|
});
|
|
73
74
|
}
|
|
74
75
|
|
|
76
|
+
// `/stop`: the background shells this session would stop, then stopping all
|
|
77
|
+
// of them through the same per-task cancel.
|
|
78
|
+
async function listStoppableShellJobs() {
|
|
79
|
+
const session = getSession();
|
|
80
|
+
const { listStoppableShellJobs: list } = await import(
|
|
81
|
+
'../../runtime/agent/orchestrator/tools/builtin/task-tool.mjs'
|
|
82
|
+
);
|
|
83
|
+
return {
|
|
84
|
+
jobs: list({ callerSessionId: session?.id || null, clientHostPid: session?.clientHostPid || process.pid }),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async function stopShellJobs() {
|
|
89
|
+
const session = getSession();
|
|
90
|
+
const { stopBackgroundShellJobs } = await import('../../runtime/agent/orchestrator/tools/builtin/task-tool.mjs');
|
|
91
|
+
return stopBackgroundShellJobs({
|
|
92
|
+
callerSessionId: session?.id || null,
|
|
93
|
+
clientHostPid: session?.clientHostPid || process.pid,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
75
97
|
// Explicit user force-release ("Release anyway") of a shell job whose
|
|
76
98
|
// termination is unconfirmed: drops its workspace hold. The surface has
|
|
77
99
|
// already asked the user to confirm. The caller session's own holds, and
|
|
@@ -115,7 +137,14 @@ export function createAgentOps(deps) {
|
|
|
115
137
|
return () => notificationListeners.delete(listener);
|
|
116
138
|
}
|
|
117
139
|
|
|
118
|
-
|
|
140
|
+
// An empty session has nothing cached: it is brought to the settings first
|
|
141
|
+
// (the turn-start reconcile), so the list is what its first turn sends.
|
|
142
|
+
async function toolsStatus(query = '') {
|
|
143
|
+
await reconcileEmptySession?.();
|
|
144
|
+
return toolsStatusNow(query);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function toolsStatusNow(query = '') {
|
|
119
148
|
const surface = activeToolSurface();
|
|
120
149
|
let catalog = [];
|
|
121
150
|
if (Array.isArray(surface?.deferredToolCatalog)) catalog = surface.deferredToolCatalog;
|
|
@@ -140,13 +169,15 @@ export function createAgentOps(deps) {
|
|
|
140
169
|
function selectTools(names) {
|
|
141
170
|
const list = Array.isArray(names) ? names : String(names || '').split(/[,\s]+/);
|
|
142
171
|
const result = selectDeferredTools(activeToolSurface(), list, getMode());
|
|
143
|
-
return { ...result, status:
|
|
172
|
+
return { ...result, status: toolsStatusNow() };
|
|
144
173
|
}
|
|
145
174
|
|
|
146
175
|
return {
|
|
147
176
|
agentControl,
|
|
148
177
|
taskControl,
|
|
149
178
|
stopShellJob,
|
|
179
|
+
listStoppableShellJobs,
|
|
180
|
+
stopShellJobs,
|
|
150
181
|
releaseShellJob,
|
|
151
182
|
listShellJobs,
|
|
152
183
|
onNotification,
|
|
@@ -6,6 +6,7 @@ import { normalizeToolMode } from '../../runtime/agent/orchestrator/runtime-core
|
|
|
6
6
|
import { interruptTaskWaitForSession } from '../../runtime/agent/orchestrator/session/task-wait-control.mjs';
|
|
7
7
|
import { markPendingGoalReminder } from '../../runtime/agent/orchestrator/runtime-core/goal-reminder.mjs';
|
|
8
8
|
import { rearmLateDeferredTools } from '../../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';
|
|
9
|
+
import { rearmPromptSettingsNotice } from '../../runtime/agent/orchestrator/session/manager/prompt-settings.mjs';
|
|
9
10
|
|
|
10
11
|
export function createSessionOps(deps) {
|
|
11
12
|
const {
|
|
@@ -101,6 +102,7 @@ export function createSessionOps(deps) {
|
|
|
101
102
|
// The same compaction strips late MCP tool announcements from older turns.
|
|
102
103
|
try {
|
|
103
104
|
rearmLateDeferredTools(getSession());
|
|
105
|
+
rearmPromptSettingsNotice(getSession());
|
|
104
106
|
} catch {
|
|
105
107
|
/* best-effort: a tool reminder must never break manual compact */
|
|
106
108
|
}
|
|
@@ -90,6 +90,7 @@ export function createTurnPreparation({
|
|
|
90
90
|
applyPendingRoute,
|
|
91
91
|
applyPendingAgentProfile,
|
|
92
92
|
applyPendingSessionSwitches,
|
|
93
|
+
reconcileTurnSettings,
|
|
93
94
|
}) {
|
|
94
95
|
async function admitWorkspace(turn, prompt, options) {
|
|
95
96
|
// Turn admission: waits while this session's workspace transitions or
|
|
@@ -149,6 +150,10 @@ export function createTurnPreparation({
|
|
|
149
150
|
// An orchestration mode or workflow chosen while the previous turn ran
|
|
150
151
|
// applies from this one (before a cold-cache fold can take it in).
|
|
151
152
|
const sessionSwitches = applyPendingSessionSwitches?.();
|
|
153
|
+
// Settings saved since this session last ran (here or in any other
|
|
154
|
+
// runtime): an empty session is rebuilt, a conversation takes moved tool
|
|
155
|
+
// gates live — before a cold-cache fold below can take them in.
|
|
156
|
+
await reconcileTurnSettings?.();
|
|
152
157
|
// An agent profile saved while the previous turn ran applies from this one.
|
|
153
158
|
await applyPendingAgentProfile?.();
|
|
154
159
|
options.onRouteApplied?.(getSession());
|
|
@@ -85,7 +85,7 @@ export function createTurnRunner(deps) {
|
|
|
85
85
|
// The agents enabled now (coding Leads), asked for each user turn
|
|
86
86
|
// the ask prepares, for its agent list reminder
|
|
87
87
|
// (manager/agent-listing-notice.mjs).
|
|
88
|
-
{ ...callbacks, agentsNow: currentAgents }
|
|
88
|
+
{ ...callbacks, agentsNow: currentAgents, agentConfig: getConfig }
|
|
89
89
|
);
|
|
90
90
|
} finally {
|
|
91
91
|
releaseWebSearchUsage?.();
|
|
@@ -43,6 +43,7 @@ function runWebhookTurn({
|
|
|
43
43
|
name,
|
|
44
44
|
prompt,
|
|
45
45
|
ownerAgentId = null,
|
|
46
|
+
executorAgentId = null,
|
|
46
47
|
cwd = null,
|
|
47
48
|
attachments = null,
|
|
48
49
|
event = '',
|
|
@@ -55,6 +56,7 @@ function runWebhookTurn({
|
|
|
55
56
|
kind: 'webhook',
|
|
56
57
|
name: endpoint,
|
|
57
58
|
ownerAgentId,
|
|
59
|
+
executorAgentId: executorAgentId || null,
|
|
58
60
|
prompt,
|
|
59
61
|
skillSelection: String(skillSelection ?? ''),
|
|
60
62
|
attachments,
|