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
|
@@ -10,6 +10,7 @@ import { acknowledgePendingDeferredToolDelta } from '../../runtime-core/deferred
|
|
|
10
10
|
import { acknowledgePendingGoalReminder } from '../../runtime-core/goal-reminder.mjs';
|
|
11
11
|
import { acknowledgePendingSetupNotice, acknowledgePendingWorkspaceNotice } from './prompt-utils.mjs';
|
|
12
12
|
import { acknowledgePendingWorkflowNotice } from './workflow-switch-notice.mjs';
|
|
13
|
+
import { acknowledgePendingPromptSettingsNotice } from './prompt-settings.mjs';
|
|
13
14
|
import { acknowledgePendingOrchestrationModeNotice } from './orchestration-mode-switch-notice.mjs';
|
|
14
15
|
import {
|
|
15
16
|
finalizePendingMessageDelivery,
|
|
@@ -20,7 +21,7 @@ import { applyAskTerminalUsageTotals } from './usage-metrics.mjs';
|
|
|
20
21
|
import { markSessionDone, markSessionEmptyFinal, _getRuntimeEntry } from './runtime-liveness.mjs';
|
|
21
22
|
import { SessionClosedError } from './session-errors.mjs';
|
|
22
23
|
import { filterModelVisibleSessionMessages } from './message-sanitize.mjs';
|
|
23
|
-
import {
|
|
24
|
+
import { holdTurnUntilDurable } from './turn-durability.mjs';
|
|
24
25
|
import { recordProviderContextBaseline } from '../loop/compact-policy.mjs';
|
|
25
26
|
import { throwIfAborted } from '../../../../shared/abort-race.mjs';
|
|
26
27
|
import { appendAssistantTurnMessage, persistProviderState, recordAskUsage } from './ask-turn-commit.mjs';
|
|
@@ -94,7 +95,7 @@ export function attachFailedTurnCompletion(messages, completion) {
|
|
|
94
95
|
/** Commits the loop result into the session: messages, usage, provider state
|
|
95
96
|
* and queue acknowledgements. Returns the terminal result preview. */
|
|
96
97
|
export async function commitAskTurn({ sessionId, opened, prepared, result, rawTranscriptMeta, askStartedAt }) {
|
|
97
|
-
const { turn, runtime, turnSignal, askGeneration,
|
|
98
|
+
const { turn, runtime, turnSignal, askGeneration, prepareCloseSnapshot } = opened;
|
|
98
99
|
const session = turn.session;
|
|
99
100
|
throwIfAborted(turnSignal);
|
|
100
101
|
// Post-loop validation: if closeSession() landed while we were awaiting,
|
|
@@ -111,7 +112,8 @@ export async function commitAskTurn({ sessionId, opened, prepared, result, rawTr
|
|
|
111
112
|
// Turn committed into session.messages; drop the live-turn alias so
|
|
112
113
|
// contextStatus() reverts to the authoritative committed transcript.
|
|
113
114
|
session.liveTurnMessages = null;
|
|
114
|
-
checkpoint
|
|
115
|
+
// The checkpoint keeps recording until publishAskTurn seals the finished
|
|
116
|
+
// transcript into it.
|
|
115
117
|
delete session.activeTurnCheckpoint;
|
|
116
118
|
appendAssistantTurnMessage({
|
|
117
119
|
session,
|
|
@@ -142,6 +144,9 @@ export async function commitAskTurn({ sessionId, opened, prepared, result, rawTr
|
|
|
142
144
|
acknowledgePendingGoalReminder(session, prepared.goalReminder.revision);
|
|
143
145
|
}
|
|
144
146
|
if (prepared.workflowNotice) acknowledgePendingWorkflowNotice(session, prepared.workflowNotice.revision);
|
|
147
|
+
if (prepared.promptSettingsNotice) {
|
|
148
|
+
acknowledgePendingPromptSettingsNotice(session, prepared.promptSettingsNotice.revision);
|
|
149
|
+
}
|
|
145
150
|
if (prepared.orchestrationModeNotice) {
|
|
146
151
|
acknowledgePendingOrchestrationModeNotice(session, prepared.orchestrationModeNotice.revision);
|
|
147
152
|
}
|
|
@@ -160,7 +165,7 @@ export async function commitAskTurn({ sessionId, opened, prepared, result, rawTr
|
|
|
160
165
|
* starts the durable save and marks the session done. Returns the
|
|
161
166
|
* follow-up entries drained right after the provider accepted the turn. */
|
|
162
167
|
export function publishAskTurn({ sessionId, opened, terminalResultPreview, askOpts, rawTranscriptMeta, askStartedAt }) {
|
|
163
|
-
const { turn, runtime, askGeneration, turnToken } = opened;
|
|
168
|
+
const { turn, runtime, askGeneration, turnToken, checkpoint } = opened;
|
|
164
169
|
const session = turn.session;
|
|
165
170
|
// The provider accepted this queued turn: only now remove its
|
|
166
171
|
// durable ids. A crash before here leaves them for at-least-once
|
|
@@ -197,19 +202,23 @@ export function publishAskTurn({ sessionId, opened, terminalResultPreview, askOp
|
|
|
197
202
|
// query/provider send (agentLoop pre-send), not after the previous
|
|
198
203
|
// answer. This lets queued follow-up prompts resume immediately;
|
|
199
204
|
// if they need compaction, their own spinner shows compacting first.
|
|
200
|
-
//
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
|
|
205
|
+
// The finished transcript (final assistant message, completion) is sealed
|
|
206
|
+
// into the checkpoint, and the record the terminal save writes names the
|
|
207
|
+
// turn it covers: a crash before that save lands replays the sealed turn,
|
|
208
|
+
// one after it deletes the checkpoint without a duplicate.
|
|
209
|
+
session.turnCoverage = turnToken;
|
|
210
|
+
checkpoint.seal();
|
|
211
|
+
// Terminal save. The result is already produced and (for agent surfaces)
|
|
212
|
+
// relayed via onTerminalResult above. When completion was relayed to the
|
|
213
|
+
// UI, yield before postMessage structured-clones the full session. Queued
|
|
214
|
+
// follow-up turns retain the original immediate-save ordering. Its landed
|
|
215
|
+
// acknowledgement is this session's next-turn gate (turn-durability.mjs),
|
|
216
|
+
// which alone deletes the checkpoint.
|
|
206
217
|
const saveTerminalSession = terminalRelayed ? saveSessionAsyncDeferred : saveSessionAsync;
|
|
207
218
|
const terminalSave = saveTerminalSession(session, { expectedGeneration: askGeneration });
|
|
219
|
+
holdTurnUntilDurable({ sessionId, session, turnToken, generation: askGeneration, save: terminalSave });
|
|
208
220
|
terminalSave.then(
|
|
209
|
-
() =>
|
|
210
|
-
clearTurnCheckpoint(sessionId, turnToken);
|
|
211
|
-
ingestSessionTurn(session);
|
|
212
|
-
},
|
|
221
|
+
() => ingestSessionTurn(session),
|
|
213
222
|
() => {}
|
|
214
223
|
);
|
|
215
224
|
finalizePendingMessageDelivery(session, turn.pendingEntries, terminalSave, () =>
|
|
@@ -227,7 +236,8 @@ export function publishAskTurn({ sessionId, opened, terminalResultPreview, askOp
|
|
|
227
236
|
const isEmptyFinal =
|
|
228
237
|
!terminalResultPreview.content &&
|
|
229
238
|
!terminalResultPreview.reasoningContent &&
|
|
230
|
-
!terminalResultPreview.reactionCompleted
|
|
239
|
+
!terminalResultPreview.reactionCompleted &&
|
|
240
|
+
!terminalResultPreview.reportContent;
|
|
231
241
|
if (isEmptyFinal) {
|
|
232
242
|
markSessionEmptyFinal(sessionId);
|
|
233
243
|
}
|
|
@@ -6,6 +6,7 @@ import { captureTurnCheckpointContextState, createTurnCheckpointRecorder } from
|
|
|
6
6
|
import { finalizeTurnInterruptionSnapshot } from './turn-interruption.mjs';
|
|
7
7
|
import { onSensitiveValuesMarked } from '../sensitive-values.mjs';
|
|
8
8
|
import { saveSessionAsync } from '../store.mjs';
|
|
9
|
+
import { setTranscriptSnapshotHook } from '../store/transcript-durability.mjs';
|
|
9
10
|
import { ingestSessionTurn } from '../../../../session-search/session-search-ingest.mjs';
|
|
10
11
|
|
|
11
12
|
// Coalescing window for streaming-delta flushes. Each flush journals only the
|
|
@@ -22,6 +23,8 @@ export function createAskTurnState(session) {
|
|
|
22
23
|
outgoing: null,
|
|
23
24
|
/** The user turn exactly as sent, kept for interruption finalization. */
|
|
24
25
|
userTurnContent: '',
|
|
26
|
+
/** Index of the user turn in `outgoing` when it was assembled. */
|
|
27
|
+
boundary: null,
|
|
25
28
|
/** Queue entries this turn consumed: acked on commit, released on failure. */
|
|
26
29
|
pendingEntries: [],
|
|
27
30
|
};
|
|
@@ -29,34 +32,60 @@ export function createAskTurnState(session) {
|
|
|
29
32
|
|
|
30
33
|
/** The recorder writes this turn's header synchronously on its first flush
|
|
31
34
|
* (the crash-durability anchor for the prompt, landing before the provider
|
|
32
|
-
* runs) and appends bounded deltas afterwards.
|
|
33
|
-
|
|
35
|
+
* runs) and appends bounded deltas afterwards. `base` is the durable
|
|
36
|
+
* transcript the turn opens on (store/transcript-durability.mjs). Every
|
|
37
|
+
* save of the session flushes first, so a history rewrite is in the
|
|
38
|
+
* checkpoint before any record carries its new epoch. */
|
|
39
|
+
export function createTurnCheckpointScheduler({
|
|
40
|
+
sessionId,
|
|
41
|
+
generation,
|
|
42
|
+
turnToken,
|
|
43
|
+
startedAt,
|
|
44
|
+
turn,
|
|
45
|
+
interruption,
|
|
46
|
+
base,
|
|
47
|
+
}) {
|
|
34
48
|
let timer = null;
|
|
35
49
|
let stopped = false;
|
|
36
50
|
let lastAt = 0;
|
|
37
51
|
let warned = false;
|
|
38
|
-
let
|
|
39
|
-
const recorder = createTurnCheckpointRecorder({
|
|
52
|
+
let contextDirty = false;
|
|
53
|
+
const recorder = createTurnCheckpointRecorder({
|
|
54
|
+
session: turn.session,
|
|
55
|
+
sessionId,
|
|
56
|
+
generation,
|
|
57
|
+
turnToken,
|
|
58
|
+
startedAt,
|
|
59
|
+
base,
|
|
60
|
+
});
|
|
61
|
+
const record = (messages, extra = {}) =>
|
|
62
|
+
recorder.record({
|
|
63
|
+
boundary: turn.boundary,
|
|
64
|
+
currentUserContent: turn.userTurnContent,
|
|
65
|
+
turnOutgoing: messages,
|
|
66
|
+
interruption,
|
|
67
|
+
captureContext: (boundary) => captureTurnCheckpointContextState(turn.session, messages, boundary),
|
|
68
|
+
contextDirty,
|
|
69
|
+
...extra,
|
|
70
|
+
});
|
|
71
|
+
const warn = (error) => {
|
|
72
|
+
if (warned) return;
|
|
73
|
+
warned = true;
|
|
74
|
+
try {
|
|
75
|
+
process.stderr.write(`[turn-checkpoint] write failed session=${sessionId}: ${error?.message || error}\n`);
|
|
76
|
+
} catch {
|
|
77
|
+
// stderr may be closed; the checkpoint failure is only reported
|
|
78
|
+
}
|
|
79
|
+
};
|
|
40
80
|
const flush = () => {
|
|
41
81
|
if (stopped || !turn.outgoing || !turn.userTurnContent) return false;
|
|
42
82
|
try {
|
|
43
|
-
const written =
|
|
44
|
-
|
|
45
|
-
turnOutgoing: turn.outgoing,
|
|
46
|
-
interruption,
|
|
47
|
-
contextState,
|
|
48
|
-
});
|
|
83
|
+
const written = record(turn.outgoing);
|
|
84
|
+
contextDirty = false;
|
|
49
85
|
if (written) lastAt = Date.now();
|
|
50
86
|
return written;
|
|
51
87
|
} catch (error) {
|
|
52
|
-
|
|
53
|
-
warned = true;
|
|
54
|
-
try {
|
|
55
|
-
process.stderr.write(`[turn-checkpoint] write failed session=${sessionId}: ${error?.message || error}\n`);
|
|
56
|
-
} catch {
|
|
57
|
-
// stderr may be closed; the checkpoint failure is only reported
|
|
58
|
-
}
|
|
59
|
-
}
|
|
88
|
+
warn(error);
|
|
60
89
|
return false;
|
|
61
90
|
}
|
|
62
91
|
};
|
|
@@ -83,9 +112,20 @@ export function createTurnCheckpointScheduler({ sessionId, generation, turnToken
|
|
|
83
112
|
});
|
|
84
113
|
ingestSessionTurn(turn.session);
|
|
85
114
|
});
|
|
115
|
+
const unhookSaves = setTranscriptSnapshotHook(turn.session, () => {
|
|
116
|
+
if (!stopped && turn.outgoing) flushNow();
|
|
117
|
+
});
|
|
118
|
+
const halt = (options) => {
|
|
119
|
+
stopped = true;
|
|
120
|
+
stopMarks();
|
|
121
|
+
unhookSaves();
|
|
122
|
+
if (timer) clearTimeout(timer);
|
|
123
|
+
timer = null;
|
|
124
|
+
recorder.stop(options);
|
|
125
|
+
};
|
|
86
126
|
return {
|
|
87
127
|
refreshContextState() {
|
|
88
|
-
|
|
128
|
+
contextDirty = true;
|
|
89
129
|
},
|
|
90
130
|
schedule(immediate = false) {
|
|
91
131
|
if (stopped || !turn.outgoing) return;
|
|
@@ -101,12 +141,27 @@ export function createTurnCheckpointScheduler({ sessionId, generation, turnToken
|
|
|
101
141
|
}, waitMs);
|
|
102
142
|
timer.unref?.();
|
|
103
143
|
},
|
|
144
|
+
/** Record the finished transcript (`turn.session.messages`, with the
|
|
145
|
+
* final assistant message and its completion) as sealed, then stop: a
|
|
146
|
+
* crash before a save covers the turn replays it as finished, not as
|
|
147
|
+
* interrupted. */
|
|
148
|
+
seal() {
|
|
149
|
+
if (stopped) return false;
|
|
150
|
+
let written = false;
|
|
151
|
+
if (turn.outgoing && turn.userTurnContent) {
|
|
152
|
+
try {
|
|
153
|
+
contextDirty = true;
|
|
154
|
+
written = record(turn.session.messages, { sealed: true });
|
|
155
|
+
} catch (error) {
|
|
156
|
+
warn(error);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
halt({ keepQueued: true });
|
|
160
|
+
return written;
|
|
161
|
+
},
|
|
104
162
|
stop() {
|
|
105
|
-
stopped
|
|
106
|
-
|
|
107
|
-
if (timer) clearTimeout(timer);
|
|
108
|
-
timer = null;
|
|
109
|
-
recorder.stop();
|
|
163
|
+
if (stopped) return;
|
|
164
|
+
halt();
|
|
110
165
|
},
|
|
111
166
|
};
|
|
112
167
|
}
|
|
@@ -44,6 +44,9 @@ export function createAskSteeringDrain({ sessionId, turn, askOpts }) {
|
|
|
44
44
|
// nothing. Entries consumed here join the turn's pending entries: their
|
|
45
45
|
// delivery/ack (and release on failure) rides this turn, and the
|
|
46
46
|
// post-loop drain can no longer see them.
|
|
47
|
+
// A route saved while this turn runs (session.heldRoute) leaves the
|
|
48
|
+
// queued entries to the next turn, which opens on that route.
|
|
49
|
+
if (turn.session?.heldRoute) return out;
|
|
47
50
|
if (drainOptions?.stage === 'terminal' || pendingQueueHoldsOnlyNotifications(sessionId)) {
|
|
48
51
|
const pendingNow = drainPendingMessages(sessionId);
|
|
49
52
|
if (pendingNow.length > 0) {
|
|
@@ -36,7 +36,8 @@ import {
|
|
|
36
36
|
resolveWorkerCompactPolicy,
|
|
37
37
|
shouldCompactForRequestMedia,
|
|
38
38
|
} from '../loop/compact-policy.mjs';
|
|
39
|
-
import { snapshotProviderRequestTools } from '../../runtime-core/tool-catalog.mjs';
|
|
39
|
+
import { rearmLateDeferredTools, snapshotProviderRequestTools } from '../../runtime-core/tool-catalog.mjs';
|
|
40
|
+
import { rearmPromptSettingsNotice } from './prompt-settings.mjs';
|
|
40
41
|
import { prepareCompactionArchive, stampCompactionMessageIds } from '../compaction-archive-capture.mjs';
|
|
41
42
|
|
|
42
43
|
// 'compacting' is a transient in-flight stage written just before Compact
|
|
@@ -724,6 +725,16 @@ async function commitSessionCompaction(plan, run, compactStartedAt) {
|
|
|
724
725
|
// break instead of logging an unexplained input_prefix_mismatch.
|
|
725
726
|
if (changed) {
|
|
726
727
|
session.pendingCacheBreakIntent = mode === 'auto' ? 'post_turn_compaction' : 'manual_compaction';
|
|
728
|
+
// The compacted history no longer holds the late-tool announcements
|
|
729
|
+
// (connected MCP tools, built-ins a setting opened); a worker gets no
|
|
730
|
+
// prompt fold to list them, so they ride the next prompt again, as the
|
|
731
|
+
// pre-send compaction does.
|
|
732
|
+
try {
|
|
733
|
+
rearmLateDeferredTools(session);
|
|
734
|
+
rearmPromptSettingsNotice(session);
|
|
735
|
+
} catch {
|
|
736
|
+
/* a tool reminder never fails the compaction */
|
|
737
|
+
}
|
|
727
738
|
}
|
|
728
739
|
recordCompactionTiming(plan, freshContextResult, { startedAt: compactStartedAt, commitStartedAt, afterTokens });
|
|
729
740
|
return compactionResult(
|
|
@@ -154,7 +154,7 @@ export function resolveSessionContextMeta(provider, model, seed = {}, { wholeWin
|
|
|
154
154
|
// Legacy-data migration: old implementations derived autoCompactTokenLimit
|
|
155
155
|
// from the full effective/raw window and persisted it onto the session.
|
|
156
156
|
// A resumed session therefore re-seeds autoCompactTokenLimit == boundary
|
|
157
|
-
// (or the raw window), which compactTriggerForSession / loop policy
|
|
157
|
+
// (or the raw window), which compactTriggerForSession / loop policy would
|
|
158
158
|
// honor as an explicit trigger, collapsing the compaction buffer to 0. Only
|
|
159
159
|
// accept an explicit limit that is STRICTLY BELOW the boundary; a value at
|
|
160
160
|
// or above the boundary is a derived full-window artifact and is dropped to
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
evictIdleLiveSessions,
|
|
10
10
|
} from '../store.mjs';
|
|
11
11
|
import { sweepOrphanedPendingMessages } from './pending-messages.mjs';
|
|
12
|
+
import { sweepOrphanTurnJournals } from './turn-checkpoint-recovery.mjs';
|
|
12
13
|
import { applySessionSidebarChange, readSessionSidebarState } from '../../../../shared/session-sidebar-host.mjs';
|
|
13
14
|
import {
|
|
14
15
|
IN_FLIGHT_STAGES,
|
|
@@ -184,7 +185,7 @@ function _runCleanupCycle() {
|
|
|
184
185
|
await sweepOrphanedPendingMessages();
|
|
185
186
|
await sweepIdleSessions({ includeTombstones: true });
|
|
186
187
|
// Reclaim same-process session snapshots whose state is durable on disk
|
|
187
|
-
// (memory-leak guard: _liveSessions
|
|
188
|
+
// (memory-leak guard: _liveSessions would otherwise grow for process lifetime).
|
|
188
189
|
try {
|
|
189
190
|
evictIdleLiveSessions({ isSessionLive: _isSessionLive });
|
|
190
191
|
} catch {
|
|
@@ -213,6 +214,10 @@ function _startCleanupInterval() {
|
|
|
213
214
|
|
|
214
215
|
export function startIdleCleanup() {
|
|
215
216
|
if (_cleanupTimer || _cleanupInitialTimer) return;
|
|
217
|
+
// Once per start, ahead of the first delayed cycle: checkpoint journals a
|
|
218
|
+
// previous run could not delete (their sessions may never be reopened).
|
|
219
|
+
// Only the daemon owner sweeps (it checks); the daemon runs in worker mode.
|
|
220
|
+
void sweepOrphanTurnJournals().catch(() => {});
|
|
216
221
|
if (CLEANUP_INITIAL_DELAY_MS <= 0) {
|
|
217
222
|
void _runCleanupCycle();
|
|
218
223
|
_startCleanupInterval();
|
|
@@ -490,6 +490,14 @@ registerTaskWaitSteeringCheck((sessionId) => {
|
|
|
490
490
|
return wake;
|
|
491
491
|
});
|
|
492
492
|
|
|
493
|
+
/** Whether anything waits in this session's queue (memory or takeover-hydrated). */
|
|
494
|
+
export function hasPendingMessages(sessionId) {
|
|
495
|
+
return (
|
|
496
|
+
(_sessionPendingMessages.get(sessionId)?.length ?? 0) > 0 ||
|
|
497
|
+
(_hydratedPendingMessages.get(sessionId)?.length ?? 0) > 0
|
|
498
|
+
);
|
|
499
|
+
}
|
|
500
|
+
|
|
493
501
|
// True when this session's queue holds task notifications and nothing else:
|
|
494
502
|
// the mid-chain boundary may then take the whole queue without bypassing the
|
|
495
503
|
// prompt filters that keep queued prompts for the terminal boundary.
|
|
@@ -583,7 +591,7 @@ export function drainPendingMessages(sessionId) {
|
|
|
583
591
|
);
|
|
584
592
|
}
|
|
585
593
|
// Only materialize the ledger when there is an id to suppress: an empty
|
|
586
|
-
// drain
|
|
594
|
+
// drain would leave a dead Set behind on every call.
|
|
587
595
|
const claimedIds = accepted.filter((entry) => entry.id);
|
|
588
596
|
if (claimedIds.length > 0) {
|
|
589
597
|
const inDelivery = pendingIdSet(_inDeliveryPendingIds, sessionId);
|
|
@@ -9,8 +9,8 @@ export const PENDING_MESSAGES_MODE = 0o600;
|
|
|
9
9
|
// Layout: one file (and one lock) per pending key under `session-pending/`.
|
|
10
10
|
// A key is an orchestrator session id or a `tui_<lead session id>` steering
|
|
11
11
|
// bucket, so operations on different sessions never share a lock.
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const PENDING_SHARD_DIR_NAME = 'session-pending';
|
|
13
|
+
const LEGACY_PENDING_FILE_NAME = 'session-pending-messages.json';
|
|
14
14
|
|
|
15
15
|
export function pendingShardDir() {
|
|
16
16
|
return join(resolvePluginData(), PENDING_SHARD_DIR_NAME);
|
|
@@ -9,7 +9,7 @@ import { legacyPendingMessagesPath, pendingMessagesPath, PENDING_MESSAGES_MODE }
|
|
|
9
9
|
const SHARD_KEY_RE = /^[A-Za-z0-9_-]+$/;
|
|
10
10
|
const MIGRATION_LOCK_TIMEOUT_MS = 15_000;
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
function isShardKey(key) {
|
|
13
13
|
return typeof key === 'string' && SHARD_KEY_RE.test(key);
|
|
14
14
|
}
|
|
15
15
|
|