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
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
// Per-session scratch directory under Mixdog's data directory. Processes the
|
|
2
2
|
// `shell` tool starts see it as TEMP/TMP/TMPDIR, so scratch files never land in
|
|
3
3
|
// the project, and it is removed with its session (session-delete.mjs).
|
|
4
|
+
import { createHash } from 'node:crypto';
|
|
4
5
|
import { mkdirSync, rmSync } from 'node:fs';
|
|
5
6
|
import { join } from 'node:path';
|
|
6
7
|
import { resolvePluginData } from './plugin-paths.mjs';
|
|
7
8
|
|
|
8
9
|
const SESSION_ID = /^[A-Za-z0-9_-]+$/;
|
|
9
10
|
|
|
11
|
+
// The folder is named by a short digest of the id, not the id itself: a desktop
|
|
12
|
+
// session id is 77 characters, and a TEMP that long leaves too little of
|
|
13
|
+
// Windows' 260-character path limit for what runs under it (Git refuses a
|
|
14
|
+
// $GIT_DIR over 220 characters, LibreOffice crashes on a profile past ~150).
|
|
15
|
+
// The "." is a character no session id has, so no id's legacy folder (named
|
|
16
|
+
// after the id itself) can ever be another session's digest folder.
|
|
17
|
+
const scratchName = (id) => `s.${createHash('sha256').update(id).digest('hex').slice(0, 16)}`;
|
|
18
|
+
|
|
10
19
|
/** The session's scratch path (not created), or '' for an unusable id. */
|
|
11
20
|
export function sessionScratchDir(sessionId) {
|
|
12
21
|
const id = typeof sessionId === 'string' ? sessionId : '';
|
|
13
|
-
return SESSION_ID.test(id) ? join(resolvePluginData(), 'scratch', id) : '';
|
|
22
|
+
return SESSION_ID.test(id) ? join(resolvePluginData(), 'scratch', scratchName(id)) : '';
|
|
14
23
|
}
|
|
15
24
|
|
|
16
25
|
/** Create the session's scratch directory if absent; returns its path ('' without a session id). */
|
|
@@ -22,7 +31,10 @@ export function ensureSessionScratchDir(sessionId) {
|
|
|
22
31
|
|
|
23
32
|
export function removeSessionScratchDir(sessionId) {
|
|
24
33
|
const dir = sessionScratchDir(sessionId);
|
|
25
|
-
if (dir)
|
|
34
|
+
if (!dir) return;
|
|
35
|
+
rmSync(dir, { recursive: true, force: true });
|
|
36
|
+
// Earlier versions named the folder after the full id.
|
|
37
|
+
rmSync(join(resolvePluginData(), 'scratch', sessionId), { recursive: true, force: true });
|
|
26
38
|
}
|
|
27
39
|
|
|
28
40
|
/** Point an env's temp variables at the session's scratch directory. */
|
|
@@ -9,7 +9,13 @@ import { dirname, join, relative } from 'node:path';
|
|
|
9
9
|
import { readMarkdownDocument } from './markdown-frontmatter.mjs';
|
|
10
10
|
|
|
11
11
|
export const SHIPPED_HISTORY_FILE = ['defaults', 'shipped-history.json'];
|
|
12
|
-
export const EMPTY_HISTORY = Object.freeze({
|
|
12
|
+
export const EMPTY_HISTORY = Object.freeze({
|
|
13
|
+
agents: {},
|
|
14
|
+
workflows: {},
|
|
15
|
+
outputStyles: {},
|
|
16
|
+
orchestration: {},
|
|
17
|
+
skills: {},
|
|
18
|
+
});
|
|
13
19
|
|
|
14
20
|
// Leftovers from hand edits or editors that never belong to a definition.
|
|
15
21
|
const IGNORABLE_STRAY = /(\.(bak|orig|tmp)|~)$/i;
|
|
@@ -6,8 +6,13 @@
|
|
|
6
6
|
* quitting mid-install. Does its work and exits; the swap happens on a later
|
|
7
7
|
* clean launch via performPendingSwap().
|
|
8
8
|
*/
|
|
9
|
+
import { adoptSystemProxy } from './llm/system-proxy.mjs';
|
|
9
10
|
import { runStagedInstall } from './staged-update.mjs';
|
|
10
11
|
|
|
12
|
+
// Consume the system proxy handed over by the launcher (removing it from this
|
|
13
|
+
// env); only the npm install below receives it, as npm settings.
|
|
14
|
+
adoptSystemProxy();
|
|
15
|
+
|
|
11
16
|
const version = process.argv[2] || process.env.MIXDOG_STAGE_VERSION || '';
|
|
12
17
|
runStagedInstall(version)
|
|
13
18
|
.then((r) => process.exit(r?.ok || r?.alreadyStaged || r?.inProgress ? 0 : 1))
|
|
@@ -46,6 +46,7 @@ import { dirname, basename, join } from 'node:path';
|
|
|
46
46
|
import { fileURLToPath } from 'node:url';
|
|
47
47
|
import { spawn } from 'node:child_process';
|
|
48
48
|
import { resolvePluginData } from './plugin-paths.mjs';
|
|
49
|
+
import { systemProxyHandoffEnv, systemProxyNpmEnv } from './llm/system-proxy.mjs';
|
|
49
50
|
// Same probe every discovery/lock reader uses; `process.pid` is trivially alive.
|
|
50
51
|
import { isPidAlive as pidAlive } from './pid-liveness.mjs';
|
|
51
52
|
import { sleepSync } from './sleep.mjs';
|
|
@@ -222,6 +223,38 @@ function releaseStagingLock(verDir) {
|
|
|
222
223
|
}
|
|
223
224
|
}
|
|
224
225
|
|
|
226
|
+
const DEFAULT_NPM_REGISTRY = 'https://registry.npmjs.org/';
|
|
227
|
+
|
|
228
|
+
/** The registry npm installs from (its .npmrc files included); npm's default when npm cannot say. */
|
|
229
|
+
function npmRegistry(cliJs) {
|
|
230
|
+
return new Promise((resolve) => {
|
|
231
|
+
let out = '';
|
|
232
|
+
let child;
|
|
233
|
+
try {
|
|
234
|
+
child = spawn(process.execPath, [cliJs, 'config', 'get', 'registry'], {
|
|
235
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
236
|
+
shell: false,
|
|
237
|
+
timeout: 10_000,
|
|
238
|
+
...hiddenSpawnOpts,
|
|
239
|
+
});
|
|
240
|
+
} catch {
|
|
241
|
+
resolve(DEFAULT_NPM_REGISTRY);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
child.stdout?.on('data', (chunk) => {
|
|
245
|
+
out += chunk;
|
|
246
|
+
});
|
|
247
|
+
child.once('error', () => resolve(DEFAULT_NPM_REGISTRY));
|
|
248
|
+
child.once('close', (code) => {
|
|
249
|
+
try {
|
|
250
|
+
resolve(code === 0 ? new URL(out.trim()).href : DEFAULT_NPM_REGISTRY);
|
|
251
|
+
} catch {
|
|
252
|
+
resolve(DEFAULT_NPM_REGISTRY);
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
225
258
|
/**
|
|
226
259
|
* runStagedInstall(version) — perform the full staging install for one version
|
|
227
260
|
* into ~/.mixdog/data/staging/<version>. Runs to completion (awaits the npm
|
|
@@ -259,10 +292,17 @@ export async function runStagedInstall(version) {
|
|
|
259
292
|
// shell spawn (AV constraint — no shell spawns).
|
|
260
293
|
const cliJs = npmCliJsPath();
|
|
261
294
|
if (!cliJs) return { ok: false, error: 'npm-cli.js unresolved — staging skipped' };
|
|
295
|
+
// The system proxy of npm's registry, as npm's own settings for this one install.
|
|
296
|
+
const npmProxyEnv = await systemProxyNpmEnv(() => npmRegistry(cliJs));
|
|
262
297
|
const code = await new Promise((res) => {
|
|
263
298
|
let child;
|
|
264
299
|
try {
|
|
265
|
-
child = spawn(process.execPath, [cliJs, ...installArgs], {
|
|
300
|
+
child = spawn(process.execPath, [cliJs, ...installArgs], {
|
|
301
|
+
stdio: 'ignore',
|
|
302
|
+
shell: false,
|
|
303
|
+
env: { ...process.env, ...npmProxyEnv },
|
|
304
|
+
...hiddenSpawnOpts,
|
|
305
|
+
});
|
|
266
306
|
} catch {
|
|
267
307
|
res(-1);
|
|
268
308
|
return;
|
|
@@ -319,7 +359,12 @@ export function spawnStagedInstall(version) {
|
|
|
319
359
|
if (isStagedComplete(v)) return false;
|
|
320
360
|
try {
|
|
321
361
|
const worker = join(_MODULE_DIR, 'staged-install-worker.mjs');
|
|
322
|
-
|
|
362
|
+
// The worker gets the system proxy decision privately (it consumes it).
|
|
363
|
+
const child = spawn(process.execPath, [worker, v], {
|
|
364
|
+
stdio: 'ignore',
|
|
365
|
+
env: { ...process.env, ...systemProxyHandoffEnv() },
|
|
366
|
+
...detachedSpawnOpts,
|
|
367
|
+
});
|
|
323
368
|
child.once?.('error', () => {});
|
|
324
369
|
child.unref?.();
|
|
325
370
|
return true;
|
|
@@ -513,10 +513,7 @@
|
|
|
513
513
|
"normalizedName": "load_tool",
|
|
514
514
|
"label": "Load Tools",
|
|
515
515
|
"parsedArgs": {
|
|
516
|
-
"names": [
|
|
517
|
-
"office",
|
|
518
|
-
"media"
|
|
519
|
-
]
|
|
516
|
+
"names": ["office", "media"]
|
|
520
517
|
},
|
|
521
518
|
"isShellSurface": false,
|
|
522
519
|
"isSkillSurface": false,
|
|
@@ -752,10 +749,7 @@
|
|
|
752
749
|
"normalizedName": "",
|
|
753
750
|
"label": "",
|
|
754
751
|
"parsedArgs": {
|
|
755
|
-
"categoryOrder": [
|
|
756
|
-
"read",
|
|
757
|
-
"search"
|
|
758
|
-
]
|
|
752
|
+
"categoryOrder": ["read", "search"]
|
|
759
753
|
},
|
|
760
754
|
"isShellSurface": false,
|
|
761
755
|
"isSkillSurface": false,
|
|
@@ -825,10 +819,7 @@
|
|
|
825
819
|
"normalizedName": "",
|
|
826
820
|
"label": "",
|
|
827
821
|
"parsedArgs": {
|
|
828
|
-
"loadingTargets": [
|
|
829
|
-
"office",
|
|
830
|
-
"media"
|
|
831
|
-
]
|
|
822
|
+
"loadingTargets": ["office", "media"]
|
|
832
823
|
},
|
|
833
824
|
"isShellSurface": false,
|
|
834
825
|
"isSkillSurface": false,
|
|
@@ -193,6 +193,8 @@ const TRANSCRIPT_HIDDEN_CONTROL_TOOL_NAMES = new Set([
|
|
|
193
193
|
'get_goal',
|
|
194
194
|
'set_goal_tasks',
|
|
195
195
|
'update_goal',
|
|
196
|
+
// The step list shows in its own composer panel, not as transcript cards.
|
|
197
|
+
'todo',
|
|
196
198
|
'load_tool',
|
|
197
199
|
'tool_search',
|
|
198
200
|
// A bot's reaction shows as its emoji under the user's message, not as a card.
|
|
@@ -83,7 +83,7 @@ export function isTaskWaitToolCall(name, args = {}) {
|
|
|
83
83
|
);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
function displayToolName(name, args = {}) {
|
|
87
87
|
if (isExternalMcpToolName(name)) {
|
|
88
88
|
const mcp = parseMcpToolName(name);
|
|
89
89
|
return `MCP ${titleCaseMcpServer(mcp.server)}`;
|
|
@@ -127,6 +127,8 @@ export function displayToolName(name, args = {}) {
|
|
|
127
127
|
case 'web_fetch':
|
|
128
128
|
case 'fetch':
|
|
129
129
|
return 'Fetch';
|
|
130
|
+
case 'explore':
|
|
131
|
+
return 'Explore';
|
|
130
132
|
case 'browser':
|
|
131
133
|
case 'browser_devtools':
|
|
132
134
|
return 'Browser';
|
|
@@ -213,18 +215,14 @@ export function summarizeToolArgs(name, args, { max = DEFAULT_SUMMARY_MAX } = {}
|
|
|
213
215
|
}
|
|
214
216
|
switch (normalized) {
|
|
215
217
|
case 'read':
|
|
216
|
-
if (!a.path && !a.file_path) return '';
|
|
217
|
-
if (Array.isArray(a.path) || Array.isArray(a.file_path)) {
|
|
218
|
-
return formatCountedUnit(collectionCount(a.path, a.file_path), 'file');
|
|
219
|
-
}
|
|
220
|
-
return compactParts([
|
|
221
|
-
displayToolPath(a.path ?? a.file_path),
|
|
222
|
-
a.pages ? `pages ${a.pages}` : summarizeLineWindow(a),
|
|
223
|
-
]);
|
|
224
218
|
case 'view_image':
|
|
225
|
-
return displayToolPath(a.path || a.file_path || '');
|
|
226
219
|
case 'apply_patch':
|
|
227
|
-
|
|
220
|
+
case 'list':
|
|
221
|
+
case 'ls':
|
|
222
|
+
case 'grep':
|
|
223
|
+
case 'glob':
|
|
224
|
+
case 'find':
|
|
225
|
+
return summarizeFileToolArgs(normalized, a, max);
|
|
228
226
|
case 'shell':
|
|
229
227
|
case 'bash':
|
|
230
228
|
case 'bash_session':
|
|
@@ -250,6 +248,82 @@ export function summarizeToolArgs(name, args, { max = DEFAULT_SUMMARY_MAX } = {}
|
|
|
250
248
|
.join(', '),
|
|
251
249
|
max
|
|
252
250
|
);
|
|
251
|
+
case 'search_query':
|
|
252
|
+
case 'image_query':
|
|
253
|
+
case 'web_search':
|
|
254
|
+
case 'web_search_call':
|
|
255
|
+
case 'load_tool':
|
|
256
|
+
case 'web_fetch':
|
|
257
|
+
case 'fetch':
|
|
258
|
+
return summarizeWebToolArgs(normalized, a, max);
|
|
259
|
+
case 'browser':
|
|
260
|
+
case 'browser_devtools':
|
|
261
|
+
case 'computer':
|
|
262
|
+
case 'terminal':
|
|
263
|
+
case 'visualize':
|
|
264
|
+
case 'office':
|
|
265
|
+
case 'media':
|
|
266
|
+
case 'tidy':
|
|
267
|
+
return summarizeInterfaceToolArgs(normalized, a, args, max);
|
|
268
|
+
case 'explore':
|
|
269
|
+
if (Array.isArray(a.query)) return formatCountedUnit(collectionCount(a.query), 'query', 'queries');
|
|
270
|
+
return truncateToolText(a.query || '', Math.min(max, 80));
|
|
271
|
+
case 'read_mcp_resource':
|
|
272
|
+
return truncateToolText(a.uri || '', max);
|
|
273
|
+
case 'list_mcp_resources':
|
|
274
|
+
case 'list_mcp_resource_templates':
|
|
275
|
+
return a.server ? `server "${truncateToolText(a.server, max)}"` : 'all servers';
|
|
276
|
+
case 'cwd':
|
|
277
|
+
case 'session':
|
|
278
|
+
case 'setup':
|
|
279
|
+
case 'memory':
|
|
280
|
+
case 'remember':
|
|
281
|
+
case 'save_memory':
|
|
282
|
+
case 'update_memory':
|
|
283
|
+
case 'recall_memory':
|
|
284
|
+
case 'recall':
|
|
285
|
+
case 'search_memories':
|
|
286
|
+
return summarizeStateToolArgs(normalized, a, max);
|
|
287
|
+
case 'bridge':
|
|
288
|
+
case 'agent': {
|
|
289
|
+
const agentModel = bridgeAgentModelSummary(a);
|
|
290
|
+
if (agentModel) return agentModel;
|
|
291
|
+
const bridgeAction = a.type || a.action || a.mode || '';
|
|
292
|
+
const showTarget = !/^(status|read)$/i.test(String(bridgeAction || ''));
|
|
293
|
+
return compactParts([bridgeAction, showTarget ? a.tag || a.sessionId || a.task_id || '' : '']);
|
|
294
|
+
}
|
|
295
|
+
case 'code_graph':
|
|
296
|
+
return codeGraphSummary(a, max);
|
|
297
|
+
case 'skill':
|
|
298
|
+
case 'skill_execute':
|
|
299
|
+
case 'skill_view':
|
|
300
|
+
case 'skills_list':
|
|
301
|
+
case 'use_skill':
|
|
302
|
+
return truncateToolText(
|
|
303
|
+
firstText(a.name, a.skill, a.skill_name, a.query, a.q, normalized === 'skills_list' ? 'all skills' : ''),
|
|
304
|
+
max
|
|
305
|
+
);
|
|
306
|
+
default:
|
|
307
|
+
return genericArgsSummary(a, max);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
// Files, directories and patches.
|
|
312
|
+
function summarizeFileToolArgs(normalized, a, max) {
|
|
313
|
+
switch (normalized) {
|
|
314
|
+
case 'read':
|
|
315
|
+
if (!a.path && !a.file_path) return '';
|
|
316
|
+
if (Array.isArray(a.path) || Array.isArray(a.file_path)) {
|
|
317
|
+
return formatCountedUnit(collectionCount(a.path, a.file_path), 'file');
|
|
318
|
+
}
|
|
319
|
+
return compactParts([
|
|
320
|
+
displayToolPath(a.path ?? a.file_path),
|
|
321
|
+
a.pages ? `pages ${a.pages}` : summarizeLineWindow(a),
|
|
322
|
+
]);
|
|
323
|
+
case 'view_image':
|
|
324
|
+
return displayToolPath(a.path || a.file_path || '');
|
|
325
|
+
case 'apply_patch':
|
|
326
|
+
return summarizePatch(a.patch, a.base_path);
|
|
253
327
|
case 'list':
|
|
254
328
|
case 'ls':
|
|
255
329
|
if (Array.isArray(a.path) || Array.isArray(a.dir) || Array.isArray(a.cwd)) {
|
|
@@ -284,6 +358,14 @@ export function summarizeToolArgs(name, args, { max = DEFAULT_SUMMARY_MAX } = {}
|
|
|
284
358
|
return formatCountedUnit(collectionCount(a.query, a.fuzzy), 'query', 'queries');
|
|
285
359
|
}
|
|
286
360
|
return compactParts([quoted(a.query ?? a.fuzzy, max), a.path ? `path: ${displayToolPath(a.path)}` : '']);
|
|
361
|
+
default:
|
|
362
|
+
return '';
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Search, fetch and tool-search loading.
|
|
367
|
+
function summarizeWebToolArgs(normalized, a, max) {
|
|
368
|
+
switch (normalized) {
|
|
287
369
|
case 'search_query':
|
|
288
370
|
case 'image_query':
|
|
289
371
|
case 'web_search':
|
|
@@ -303,6 +385,14 @@ export function summarizeToolArgs(name, args, { max = DEFAULT_SUMMARY_MAX } = {}
|
|
|
303
385
|
return formatCountedUnit(collectionCount(a.url, a.uri), 'URL', 'URLs');
|
|
304
386
|
}
|
|
305
387
|
return truncateToolText(a.url || a.uri || '', max);
|
|
388
|
+
default:
|
|
389
|
+
return '';
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Bridge and interface tools: browser, computer, terminal, visualize, office, media, tidy.
|
|
394
|
+
function summarizeInterfaceToolArgs(normalized, a, args, max) {
|
|
395
|
+
switch (normalized) {
|
|
306
396
|
case 'browser':
|
|
307
397
|
case 'browser_devtools': {
|
|
308
398
|
const call = bridgeToolCall(args);
|
|
@@ -342,11 +432,14 @@ export function summarizeToolArgs(name, args, { max = DEFAULT_SUMMARY_MAX } = {}
|
|
|
342
432
|
Array.isArray(a.paths) && a.paths.length ? truncateToolText(a.paths.join(' '), max) : '',
|
|
343
433
|
a.apply === true ? 'apply' : '',
|
|
344
434
|
]);
|
|
345
|
-
|
|
346
|
-
return
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
435
|
+
default:
|
|
436
|
+
return '';
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
// Sessions, setup and memory.
|
|
441
|
+
function summarizeStateToolArgs(normalized, a, max) {
|
|
442
|
+
switch (normalized) {
|
|
350
443
|
case 'cwd': // legacy: old transcripts
|
|
351
444
|
case 'session':
|
|
352
445
|
return compactParts([
|
|
@@ -396,27 +489,8 @@ export function summarizeToolArgs(name, args, { max = DEFAULT_SUMMARY_MAX } = {}
|
|
|
396
489
|
a.limit || a.topK ? `top ${a.limit ?? a.topK}` : '',
|
|
397
490
|
]);
|
|
398
491
|
}
|
|
399
|
-
case 'bridge':
|
|
400
|
-
case 'agent': {
|
|
401
|
-
const agentModel = bridgeAgentModelSummary(a);
|
|
402
|
-
if (agentModel) return agentModel;
|
|
403
|
-
const bridgeAction = a.type || a.action || a.mode || '';
|
|
404
|
-
const showTarget = !/^(status|read)$/i.test(String(bridgeAction || ''));
|
|
405
|
-
return compactParts([bridgeAction, showTarget ? a.tag || a.sessionId || a.task_id || '' : '']);
|
|
406
|
-
}
|
|
407
|
-
case 'code_graph':
|
|
408
|
-
return codeGraphSummary(a, max);
|
|
409
|
-
case 'skill':
|
|
410
|
-
case 'skill_execute':
|
|
411
|
-
case 'skill_view':
|
|
412
|
-
case 'skills_list':
|
|
413
|
-
case 'use_skill':
|
|
414
|
-
return truncateToolText(
|
|
415
|
-
firstText(a.name, a.skill, a.skill_name, a.query, a.q, normalized === 'skills_list' ? 'all skills' : ''),
|
|
416
|
-
max
|
|
417
|
-
);
|
|
418
492
|
default:
|
|
419
|
-
return
|
|
493
|
+
return '';
|
|
420
494
|
}
|
|
421
495
|
}
|
|
422
496
|
|
|
@@ -20,6 +20,7 @@ export const CATEGORY_ORDER = [
|
|
|
20
20
|
'Skill',
|
|
21
21
|
'Web Research',
|
|
22
22
|
'Memory',
|
|
23
|
+
'Explore',
|
|
23
24
|
'Patch',
|
|
24
25
|
'Git',
|
|
25
26
|
'Shell',
|
|
@@ -58,6 +59,7 @@ const TOOL_CATEGORY = new Map([
|
|
|
58
59
|
['save_memory', 'Memory'],
|
|
59
60
|
['update_memory', 'Memory'],
|
|
60
61
|
['memory', 'Memory'],
|
|
62
|
+
['explore', 'Explore'],
|
|
61
63
|
['apply_patch', 'Patch'],
|
|
62
64
|
['edit', 'Patch'],
|
|
63
65
|
['strreplace', 'Patch'],
|
|
@@ -116,6 +118,7 @@ const CATEGORY_COPY = new Map([
|
|
|
116
118
|
['Skill', { active: 'Loading', done: 'Loaded', noun: 'skill' }],
|
|
117
119
|
['Web Research', { active: 'Researching', done: 'Researched', noun: 'query', pluralNoun: 'queries' }],
|
|
118
120
|
['Memory', { active: 'Checking', done: 'Checked', noun: 'memory item' }],
|
|
121
|
+
['Explore', { active: 'Exploring', done: 'Explored', noun: 'query', pluralNoun: 'queries' }],
|
|
119
122
|
['Patch', { active: 'Editing', done: 'Edited', noun: 'file' }],
|
|
120
123
|
['Git', { active: 'Running', done: 'Ran', noun: 'Git command' }],
|
|
121
124
|
['Shell', { active: 'Running', done: 'Ran', noun: 'command' }],
|
|
@@ -417,13 +420,8 @@ function goalUnit(a) {
|
|
|
417
420
|
const verbs = {
|
|
418
421
|
status: ['Checking', 'Checked'],
|
|
419
422
|
create: ['Creating', 'Created'],
|
|
420
|
-
pause: ['Pausing', 'Paused'],
|
|
421
|
-
resume: ['Resuming', 'Resumed'],
|
|
422
|
-
set_tasks: ['Planning', 'Planned'],
|
|
423
|
-
update_tasks: ['Updating', 'Updated'],
|
|
424
423
|
complete: ['Completing', 'Completed'],
|
|
425
424
|
block: ['Blocking', 'Blocked'],
|
|
426
|
-
abandon: ['Abandoning', 'Abandoned'],
|
|
427
425
|
}[action] || ['Updating', 'Updated'];
|
|
428
426
|
return unitDescriptor('Setup', {
|
|
429
427
|
count: 1,
|
|
@@ -523,6 +521,14 @@ function agentUnit(a) {
|
|
|
523
521
|
if (/^(?:status|read|list)$/.test(type)) {
|
|
524
522
|
return unitDescriptor('Agent', { count, active: 'Checking', done: 'Checked', noun: 'agent' });
|
|
525
523
|
}
|
|
524
|
+
// Stopping an agent is not calling it, and ending a finished agent's
|
|
525
|
+
// session (close) is not cancelling its work.
|
|
526
|
+
if (type === 'cancel') {
|
|
527
|
+
return unitDescriptor('Agent', { count, active: 'Cancelling', done: 'Cancelled', noun: 'agent', effect: true });
|
|
528
|
+
}
|
|
529
|
+
if (type === 'close') {
|
|
530
|
+
return unitDescriptor('Agent', { count, active: 'Ending', done: 'Ended', noun: 'agent', effect: true });
|
|
531
|
+
}
|
|
526
532
|
return unitDescriptor('Agent', { count, noun: 'agent' });
|
|
527
533
|
}
|
|
528
534
|
|
|
@@ -625,6 +631,28 @@ function cwdUnit(a) {
|
|
|
625
631
|
});
|
|
626
632
|
}
|
|
627
633
|
|
|
634
|
+
/** The `session` tool: its session actions are about sessions, not the legacy
|
|
635
|
+
* `cwd` tool's working directory (which cwdUnit's fallback names). */
|
|
636
|
+
function sessionUnit(a) {
|
|
637
|
+
const action = String(a.action || a.type || '').toLowerCase();
|
|
638
|
+
if (action === 'create') {
|
|
639
|
+
return unitDescriptor('Setup', { active: 'Creating', done: 'Created', noun: 'session', effect: true });
|
|
640
|
+
}
|
|
641
|
+
if (action === 'send') {
|
|
642
|
+
return unitDescriptor('Setup', { active: 'Sending to', done: 'Sent to', noun: 'session', effect: true });
|
|
643
|
+
}
|
|
644
|
+
if (action === 'cancel') {
|
|
645
|
+
return unitDescriptor('Setup', { active: 'Cancelling', done: 'Cancelled', noun: 'session', effect: true });
|
|
646
|
+
}
|
|
647
|
+
if (action === 'delete') {
|
|
648
|
+
return unitDescriptor('Setup', { active: 'Deleting', done: 'Deleted', noun: 'session', effect: true });
|
|
649
|
+
}
|
|
650
|
+
if (/^(?:list|bots|read|suggest)$/.test(action)) {
|
|
651
|
+
return unitDescriptor('Setup', { active: 'Checking', done: 'Checked', noun: 'session' });
|
|
652
|
+
}
|
|
653
|
+
return cwdUnit(a);
|
|
654
|
+
}
|
|
655
|
+
|
|
628
656
|
const TOOL_UNITS = new Map([
|
|
629
657
|
[
|
|
630
658
|
'read',
|
|
@@ -689,6 +717,7 @@ const TOOL_UNITS = new Map([
|
|
|
689
717
|
pluralNoun: 'URLs',
|
|
690
718
|
}),
|
|
691
719
|
],
|
|
720
|
+
['explore', (a) => unitDescriptor('Explore', { count: queryCount(a, 'query') || 1 })],
|
|
692
721
|
['browser', browserUnit],
|
|
693
722
|
['browser_devtools', browserUnit],
|
|
694
723
|
['computer', () => unitDescriptor('Computer', { count: 1, active: 'Operating', done: 'Operated', noun: 'action' })],
|
|
@@ -743,7 +772,7 @@ const TOOL_UNITS = new Map([
|
|
|
743
772
|
() => unitDescriptor('Setup', { active: 'Listing', done: 'Listed', noun: 'MCP resource template' }),
|
|
744
773
|
],
|
|
745
774
|
['cwd', cwdUnit], // legacy: old transcripts
|
|
746
|
-
['session',
|
|
775
|
+
['session', sessionUnit],
|
|
747
776
|
]);
|
|
748
777
|
|
|
749
778
|
function mcpUnit(name, a) {
|
|
@@ -98,6 +98,9 @@ let _writeSeq = 0;
|
|
|
98
98
|
// `${sessionId}\0${checkpointId}` → seals in flight. A sealing turn's change
|
|
99
99
|
// record is `pending` and its session refuses Undo/Reapply until it lands.
|
|
100
100
|
const _pendingFreezes = new Map();
|
|
101
|
+
// `${sessionId}\0${checkpointId}` → getTurnChanges reads in flight. A seal of
|
|
102
|
+
// that checkpoint landing marks them: each may hold the record from before it.
|
|
103
|
+
const _changeReads = new Map();
|
|
101
104
|
// Per-session Undo/Reapply chain.
|
|
102
105
|
const _changeMutations = new Map();
|
|
103
106
|
// `${sessionId}\0${checkpointId}` → path keys whose worktree state is unknown
|
|
@@ -1241,6 +1244,7 @@ function sealTurn(ownerSessionId, tracker) {
|
|
|
1241
1244
|
const count = (_pendingFreezes.get(key) || 1) - 1;
|
|
1242
1245
|
if (count > 0) _pendingFreezes.set(key, count);
|
|
1243
1246
|
else _pendingFreezes.delete(key);
|
|
1247
|
+
for (const read of _changeReads.get(key) || []) read.sealLanded = true;
|
|
1244
1248
|
});
|
|
1245
1249
|
tracker.freezing = run;
|
|
1246
1250
|
return run;
|
|
@@ -1788,9 +1792,26 @@ function requiredCheckpointId(value) {
|
|
|
1788
1792
|
export async function getTurnChanges(sessionId, options = {}) {
|
|
1789
1793
|
const ownerSessionId = clean(sessionId);
|
|
1790
1794
|
const checkpointId = requiredCheckpointId(options?.checkpointId);
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1795
|
+
// Settled only when no seal of this checkpoint was in flight at any point of
|
|
1796
|
+
// the record read: one in flight before or after it (a completion wake
|
|
1797
|
+
// reopened the turn meanwhile), or one that landed during it, answers
|
|
1798
|
+
// pending instead of the record from before that seal.
|
|
1799
|
+
const inFlight = () => Boolean(ownerSessionId) && turnChangesPending(ownerSessionId, checkpointId);
|
|
1800
|
+
const key = pendingFreezeKey(ownerSessionId, checkpointId);
|
|
1801
|
+
const read = { sealLanded: false };
|
|
1802
|
+
const reads = _changeReads.get(key) || new Set();
|
|
1803
|
+
_changeReads.set(key, reads.add(read));
|
|
1804
|
+
let pending = inFlight();
|
|
1805
|
+
let record;
|
|
1806
|
+
try {
|
|
1807
|
+
record = ownerSessionId
|
|
1808
|
+
? withUnknownChangeStates(ownerSessionId, await loadTurnChangeRecord(ownerSessionId, checkpointId))
|
|
1809
|
+
: null;
|
|
1810
|
+
} finally {
|
|
1811
|
+
reads.delete(read);
|
|
1812
|
+
if (reads.size === 0 && _changeReads.get(key) === reads) _changeReads.delete(key);
|
|
1813
|
+
}
|
|
1814
|
+
pending ||= read.sealLanded || inFlight();
|
|
1794
1815
|
// An old record's outside-root file kept no counts: measure it so the card
|
|
1795
1816
|
// agrees with the session review and the island.
|
|
1796
1817
|
if (record?.files?.length) {
|
|
@@ -1801,7 +1822,7 @@ export async function getTurnChanges(sessionId, options = {}) {
|
|
|
1801
1822
|
};
|
|
1802
1823
|
}
|
|
1803
1824
|
let status = 'missing';
|
|
1804
|
-
if (
|
|
1825
|
+
if (pending) status = 'pending';
|
|
1805
1826
|
else if (record) status = record.files?.length || record.outside?.length ? 'ready' : 'none';
|
|
1806
1827
|
const reply = turnChangesReply({
|
|
1807
1828
|
status,
|
|
@@ -2083,6 +2104,7 @@ export function _resetTurnSnapshotForTest() {
|
|
|
2083
2104
|
_turnsBySession.clear();
|
|
2084
2105
|
_diffTrackersBySession.clear();
|
|
2085
2106
|
_pendingFreezes.clear();
|
|
2107
|
+
_changeReads.clear();
|
|
2086
2108
|
_changeMutations.clear();
|
|
2087
2109
|
_unknownChangeStates.clear();
|
|
2088
2110
|
_parkedWorkerReviews.clear();
|