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,169 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: goal-management
|
|
3
|
-
description: Manage the task list of approved work carried across turns, its progress, approvals, and completion.
|
|
4
|
-
when_to_use: 'Explicit Goal (`goal` tool) requests, approved multi-turn work in progress (migrations, improvement passes); not single-turn tasks or recurring schedules.'
|
|
5
|
-
dependencies:
|
|
6
|
-
tools:
|
|
7
|
-
- type: tool
|
|
8
|
-
value: goal
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Goal management
|
|
12
|
-
|
|
13
|
-
Use `goal` to maintain durable tasks and their idle reminders. The tool schema
|
|
14
|
-
owns arguments and limits; this guide owns the lifecycle and completion policy.
|
|
15
|
-
|
|
16
|
-
## Admission and current state
|
|
17
|
-
|
|
18
|
-
Create a Goal for an explicit user or system/developer Goal request, or for
|
|
19
|
-
user delegation or approval of work that runs past a single turn: a staged
|
|
20
|
-
refactor or migration, repeated improvement passes, a partition list or
|
|
21
|
-
candidate inventory carried between turns, or an open-ended objective that
|
|
22
|
-
must be finished. A time budget is optional, and the user need not name Goal —
|
|
23
|
-
approval of an assistant-proposed scope also qualifies. Resolve a short
|
|
24
|
-
approval against the preceding proposal and retain any user constraints.
|
|
25
|
-
|
|
26
|
-
Create the Goal so that scope and state survive the turn boundary instead of
|
|
27
|
-
being rebuilt or dropped. A single-turn task, planning, estimates, and
|
|
28
|
-
deadlines alone do not qualify, and neither does an unaccepted assistant
|
|
29
|
-
proposal.
|
|
30
|
-
|
|
31
|
-
If work needs approval, obtain it first; then create the
|
|
32
|
-
Goal, or reconcile an existing one, before starting the approved work,
|
|
33
|
-
including execution-stage exploration. An existing Goal does not authorize
|
|
34
|
-
new scope.
|
|
35
|
-
|
|
36
|
-
For creation, use the requested or approved budget for `time_limit_minutes`;
|
|
37
|
-
omit it when no budget was agreed — an untimed Goal runs on its objective
|
|
38
|
-
alone. A stated budget commits that time: "a 5-hour Goal", "improvement
|
|
39
|
-
rounds for 3 hours", or polishing for a period use `time_mode: duration`, the
|
|
40
|
-
default when a budget is given. Use `time_mode: max` only when the user frames
|
|
41
|
-
the budget as an upper bound ("at most", "within", "최대", "안에").
|
|
42
|
-
|
|
43
|
-
Use the latest returned state and revision. If unknown or stale, read `status`
|
|
44
|
-
and reconcile before mutating. Never replay a stale mutation blindly.
|
|
45
|
-
For multi-step work, record the approved milestones and keep them durable.
|
|
46
|
-
One-step work does not need a ceremonial plan or a separate verification row.
|
|
47
|
-
|
|
48
|
-
## Additional rounds
|
|
49
|
-
|
|
50
|
-
An approved request to continue for another period changes the work commitment,
|
|
51
|
-
not just the conversation. Reconcile the Goal before research or execution:
|
|
52
|
-
|
|
53
|
-
- For the same unfinished objective, use `resume` with the approved remaining
|
|
54
|
-
budget in `time_limit_minutes` and new tasks or task updates in one call.
|
|
55
|
-
This also covers a paused Goal or exhausted budget with all old rows done.
|
|
56
|
-
Preserve completed rows and unfinished requirements; record the new round's
|
|
57
|
-
work rather than leaving the old completed checklist unchanged.
|
|
58
|
-
- The resume budget runs from now and retains elapsed work. Omit it for a
|
|
59
|
-
plain continuation with no approved time change. Preserve `time_mode`
|
|
60
|
-
unless the new request explicitly changes the time commitment.
|
|
61
|
-
- If the prior Goal is complete or stopped, create a new Goal for the approved
|
|
62
|
-
round; the runtime archives the prior record. Do not falsely complete or
|
|
63
|
-
abandon unfinished work merely to get a fresh clock.
|
|
64
|
-
- Proceed only after the returned state has the intended active status,
|
|
65
|
-
remaining budget, and tasks. A statement that work will continue is not a
|
|
66
|
-
substitute for the mutation. Reconcile a rejected update before continuing.
|
|
67
|
-
|
|
68
|
-
## Maintain progress
|
|
69
|
-
|
|
70
|
-
- Update tasks at meaningful milestones and scope changes. Preserve unfinished
|
|
71
|
-
requirements; drop a task only after the user changes its scope.
|
|
72
|
-
- Prefer `update_tasks` for changed items; `set_tasks` replaces the full list.
|
|
73
|
-
Serialize mutations to the same Goal. `resume` accepts updates and additions
|
|
74
|
-
atomically. `resume` a blocked Goal when the user's reply supplies what it
|
|
75
|
-
was waiting for or asks to continue, and a cancelled-turn pause when the next
|
|
76
|
-
instruction carries the objective forward; a user-initiated pause resumes
|
|
77
|
-
only when the user asks. Bookkeeping alone does not authorize execution.
|
|
78
|
-
- Batch related task changes and independent work. Creation, status, and resume return full state; other
|
|
79
|
-
successful replies are brief and need no confirmation read.
|
|
80
|
-
|
|
81
|
-
## Approval and waiting
|
|
82
|
-
|
|
83
|
-
Finish every approved step and decide choices within the objective yourself,
|
|
84
|
-
including any option you would recommend; state those decisions in the report
|
|
85
|
-
instead of asking. Park as `awaiting_approval` only work that needs the user's
|
|
86
|
-
own action (a sign-in, a device check) or scope outside the objective,
|
|
87
|
-
including a commit, push, release, deployment, or payment the user has not
|
|
88
|
-
requested, together with anything its answer could invalidate. Record additions
|
|
89
|
-
immediately and continue unaffected approved work.
|
|
90
|
-
|
|
91
|
-
Foreground app or window control, local and test-environment runs and the test
|
|
92
|
-
resources they consume, reversible changes, and time or cost belong to in-scope
|
|
93
|
-
work, not approval gates. Wanting confirmation for in-scope work is never a
|
|
94
|
-
reason to stop.
|
|
95
|
-
|
|
96
|
-
Never pause on your own initiative: `pause` is only for the user's explicit
|
|
97
|
-
request to pause this Goal. When no approved work can proceed without the user,
|
|
98
|
-
ask the parked questions together and report that impasse with `block`.
|
|
99
|
-
Respect a user-initiated pause until the user asks to continue; routine errors
|
|
100
|
-
and retries are not reasons to stop.
|
|
101
|
-
|
|
102
|
-
A cancelled turn pauses the Goal with `pauseReason: cancelled`. The user stopped
|
|
103
|
-
that turn, not the objective, and only the stop control retires a Goal. Judge the
|
|
104
|
-
next instruction: resume and continue the work when it carries this objective
|
|
105
|
-
forward or redirects it, and leave the Goal paused when it is unrelated or asks
|
|
106
|
-
you to stay stopped.
|
|
107
|
-
|
|
108
|
-
Each continuation should do concrete work or wait on a verified live handle.
|
|
109
|
-
Evidence that changes the next action is progress; repeated reports and plan
|
|
110
|
-
updates alone are not. Reassess a no-progress turn and take the next safe action.
|
|
111
|
-
Observation timeouts do not terminate the observed work or justify restarting it.
|
|
112
|
-
An automatic continuation that ends without a tool call stops automatic turns
|
|
113
|
-
until the task list changes, the user acts, or the time boundary arrives; end a
|
|
114
|
-
turn that way only when no safe action remains, not to idle out the clock.
|
|
115
|
-
|
|
116
|
-
## Completion and recovery
|
|
117
|
-
|
|
118
|
-
Distinguish a turn boundary, objective completion, and a budget stop. A Goal
|
|
119
|
-
can stay active across turn-ending progress reports; never present such a
|
|
120
|
-
report as completion of the whole objective.
|
|
121
|
-
|
|
122
|
-
Complete only after auditing every user condition against evidence. Reuse valid
|
|
123
|
-
checks; a separate verification task is optional, verification itself is not.
|
|
124
|
-
A maximum time budget allows verified early completion. A full-period
|
|
125
|
-
commitment does not. Preserve an existing Goal's time mode; never extend its
|
|
126
|
-
budget or change its meaning on your own.
|
|
127
|
-
Do not end a Goal merely because a partial result is available.
|
|
128
|
-
|
|
129
|
-
For an achieved objective, reconcile the task records, call `complete`, and
|
|
130
|
-
check the returned status before claiming Goal completion. A tool call or a
|
|
131
|
-
plausible final response is not itself confirmation.
|
|
132
|
-
|
|
133
|
-
### Time-budget extension
|
|
134
|
-
|
|
135
|
-
Elapsed-time budgets are a Mixdog extension to the persistent Goal lifecycle.
|
|
136
|
-
Keep `max` upper bounds distinct from explicitly requested `duration` periods.
|
|
137
|
-
An advance deadline warning does not stop the Goal or request an early final
|
|
138
|
-
report; prioritize bounded approved work and needed verification. Under a
|
|
139
|
-
`max` budget, do not invent unfinished tasks merely to fill remaining clock
|
|
140
|
-
time. Under a `duration` commitment, when the recorded rows are done, find the
|
|
141
|
-
next round's real improvements within the objective and record them as new
|
|
142
|
-
tasks instead of idling or reporting completion.
|
|
143
|
-
|
|
144
|
-
At the boundary, the runtime first records `duration_reached`, disables
|
|
145
|
-
automatic Goal work, and delivers closeout without cancelling the current
|
|
146
|
-
turn. Finish or safely park only in-flight work, then report once. The elapsed
|
|
147
|
-
period proves only that the time condition ended: call `complete` only if the
|
|
148
|
-
whole objective is verified; otherwise retain unfinished tasks and the limited
|
|
149
|
-
status. Do not resume or extend the Goal without the user's approval.
|
|
150
|
-
|
|
151
|
-
### Blocked and redirected work
|
|
152
|
-
|
|
153
|
-
`block` stops the Goal immediately, with a stable description of an impasse
|
|
154
|
-
that only external state or the user can clear. Do not block the first time a
|
|
155
|
-
blocker appears: block only after the same condition has repeated for three
|
|
156
|
-
consecutive Goal turns, counting the user-triggered turn and automatic
|
|
157
|
-
continuations; after a resume, count only turns since that resume. Until then,
|
|
158
|
-
continue any available work and re-check the blocker against current state with
|
|
159
|
-
a tool each turn rather than restating it. When current state verifies an
|
|
160
|
-
impasse that only the user can clear (their action, approval, credentials, or a
|
|
161
|
-
resource they control), block on that turn. Once the threshold is met, block
|
|
162
|
-
instead of reporting the same blocker again. Treat equivalent blockers as the
|
|
163
|
-
same condition even when their wording or stated next step changes. Never block for difficulty, slowness,
|
|
164
|
-
uncertainty, a choice you can make, confirmation for in-scope work, or
|
|
165
|
-
clarification that would only help. Use `abandon` only when the user redirects away from
|
|
166
|
-
the objective; it preserves a stopped record rather than declaring success.
|
|
167
|
-
|
|
168
|
-
Done when the returned Goal state accurately represents completed work,
|
|
169
|
-
remaining approved work, or the justified waiting/terminal condition.
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# Reviewing public skills
|
|
2
|
-
|
|
3
|
-
Use this reference to decide whether a public skill should be used as-is,
|
|
4
|
-
reimplemented, or rejected.
|
|
5
|
-
|
|
6
|
-
## Research order
|
|
7
|
-
|
|
8
|
-
Look for evidence in this order:
|
|
9
|
-
|
|
10
|
-
1. current first-party documentation;
|
|
11
|
-
2. the maintainer's source repository;
|
|
12
|
-
3. maintained community implementations;
|
|
13
|
-
4. indexes and lists for discovery only.
|
|
14
|
-
|
|
15
|
-
Stop when the decision has enough evidence. Popularity and search position do
|
|
16
|
-
not prove quality or compatibility.
|
|
17
|
-
|
|
18
|
-
## Candidate record
|
|
19
|
-
|
|
20
|
-
For each viable candidate, capture:
|
|
21
|
-
|
|
22
|
-
- the exact capability and trigger boundary;
|
|
23
|
-
- source URL plus release or commit when available;
|
|
24
|
-
- target agent and supported platforms;
|
|
25
|
-
- license and redistribution conditions;
|
|
26
|
-
- last meaningful maintenance;
|
|
27
|
-
- file layout and runtime assumptions;
|
|
28
|
-
- scripts, dependencies, network calls, secret access, and side effects;
|
|
29
|
-
- tests or examples that demonstrate behavior.
|
|
30
|
-
|
|
31
|
-
Compare candidates against the user's required outcome, not against each
|
|
32
|
-
other's feature count.
|
|
33
|
-
|
|
34
|
-
## Integration decision
|
|
35
|
-
|
|
36
|
-
### Reimplement the behavior
|
|
37
|
-
|
|
38
|
-
Prefer a local implementation when the useful part is a small set of ideas or
|
|
39
|
-
requirements. Write a new structure and new language from Mixdog constraints
|
|
40
|
-
and local evidence. Do not translate or lightly rearrange upstream text.
|
|
41
|
-
|
|
42
|
-
This path avoids carrying incompatible conventions and usually produces a
|
|
43
|
-
smaller skill. It does not permit copying protected prose or code without
|
|
44
|
-
following its license.
|
|
45
|
-
|
|
46
|
-
### Import third-party material
|
|
47
|
-
|
|
48
|
-
Use exact upstream material only when its implementation is necessary and its
|
|
49
|
-
license is acceptable. Preserve required notices, identify modifications, and
|
|
50
|
-
test the imported behavior in Mixdog. Upstream test results do not validate a
|
|
51
|
-
local adaptation.
|
|
52
|
-
|
|
53
|
-
### Reject the candidate
|
|
54
|
-
|
|
55
|
-
Reject it when:
|
|
56
|
-
|
|
57
|
-
- no usable license is present;
|
|
58
|
-
- executable behavior is unexplained or excessive;
|
|
59
|
-
- it depends on unavailable tools or private infrastructure;
|
|
60
|
-
- its trigger overlaps a stronger local owner;
|
|
61
|
-
- adapting it would cost more than a focused local design;
|
|
62
|
-
- maintenance or security evidence is insufficient.
|
|
63
|
-
|
|
64
|
-
## Executable-content audit
|
|
65
|
-
|
|
66
|
-
Read scripts rather than trusting their documentation. Look for:
|
|
67
|
-
|
|
68
|
-
- vendor-specific subprocesses;
|
|
69
|
-
- writes into hidden product directories;
|
|
70
|
-
- downloads, telemetry, or remote execution;
|
|
71
|
-
- environment and credential collection;
|
|
72
|
-
- package installation or privilege elevation;
|
|
73
|
-
- deletion, overwrite, publishing, deployment, or recurring scheduling;
|
|
74
|
-
- unbounded concurrency, retries, waits, or external spend;
|
|
75
|
-
- hard-coded local paths and platform-specific shell commands.
|
|
76
|
-
|
|
77
|
-
Removing an unnecessary executable is often safer than wrapping it in warnings.
|
|
78
|
-
When it is necessary, make its dependency and side effects visible in the main
|
|
79
|
-
skill.
|
|
80
|
-
|
|
81
|
-
## Extracting useful ideas safely
|
|
82
|
-
|
|
83
|
-
Record abstract lessons such as:
|
|
84
|
-
|
|
85
|
-
- a decision the workflow should make;
|
|
86
|
-
- a failure mode worth detecting;
|
|
87
|
-
- a completion condition;
|
|
88
|
-
- a useful separation of responsibilities;
|
|
89
|
-
- a test category or compatibility concern.
|
|
90
|
-
|
|
91
|
-
Then design the local workflow from those requirements without consulting the
|
|
92
|
-
source phrasing while drafting. Review the result for accidental product names,
|
|
93
|
-
foreign paths, commands, metadata, or structural assumptions.
|
|
94
|
-
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import { GOAL_TASK_SETTLED, GOAL_TASK_STATUSES, MAX_GOAL_TASKS, MAX_GOAL_TASK_TEXT_LENGTH } from './goal-tool-defs.mjs';
|
|
2
|
-
import { clean } from '../../../shared/clean.mjs';
|
|
3
|
-
|
|
4
|
-
// Fields a task entry or patch may carry. 'kind' is a retired field: stored
|
|
5
|
-
// records and frozen provider schemas still send it, so it is accepted and
|
|
6
|
-
// dropped on normalize rather than rejected.
|
|
7
|
-
const TASK_ENTRY_FIELDS = ['id', 'text', 'status', 'kind'];
|
|
8
|
-
|
|
9
|
-
// Dropped rows remain in the record but are no longer requested work. Every
|
|
10
|
-
// row, completed and dropped included, still fills one of the capped slots.
|
|
11
|
-
export function goalTaskProgress(tasks) {
|
|
12
|
-
return {
|
|
13
|
-
tasksCompleted: tasks.filter((task) => task?.status === 'completed').length,
|
|
14
|
-
tasksTotal: tasks.filter((task) => task?.status !== 'dropped').length,
|
|
15
|
-
taskSlotsUsed: tasks.length,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Frozen schemas can populate every optional array with an anonymous blank
|
|
20
|
-
// row. Only discard that filler for optional lifecycle changes; addressed,
|
|
21
|
-
// populated, or malformed rows must still reach the normal validators.
|
|
22
|
-
export function optionalGoalTaskChanges({ tasks, updates } = {}) {
|
|
23
|
-
const populated = (entry) =>
|
|
24
|
-
!entry ||
|
|
25
|
-
typeof entry !== 'object' ||
|
|
26
|
-
Array.isArray(entry) ||
|
|
27
|
-
clean(entry.id) ||
|
|
28
|
-
clean(entry.text) ||
|
|
29
|
-
Object.keys(entry).some((key) => !TASK_ENTRY_FIELDS.includes(key));
|
|
30
|
-
return {
|
|
31
|
-
tasks: Array.isArray(tasks) ? tasks.filter(populated) : tasks,
|
|
32
|
-
updates: Array.isArray(updates) ? updates.filter(populated) : updates,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function normalizeGoalTasks(input, previous = [], { strict = false } = {}) {
|
|
37
|
-
if (input == null) return previous.map((task) => ({ ...task }));
|
|
38
|
-
if (!Array.isArray(input)) throw new Error('goal tasks must be an array');
|
|
39
|
-
if (input.length > MAX_GOAL_TASKS) {
|
|
40
|
-
// Settled rows count toward the cap; set_tasks may omit them (only
|
|
41
|
-
// unfinished tasks must be retained), which is how a long Goal makes room.
|
|
42
|
-
const settled = previous.some((task) => GOAL_TASK_SETTLED.includes(task?.status));
|
|
43
|
-
throw new Error(
|
|
44
|
-
`goal tasks support at most ${MAX_GOAL_TASKS} entries${
|
|
45
|
-
settled
|
|
46
|
-
? '; completed and dropped tasks count, so to add more send set_tasks with only the unfinished tasks plus the new ones'
|
|
47
|
-
: ''
|
|
48
|
-
}`
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
const previousByText = new Map(previous.map((task) => [clean(task?.text), task]));
|
|
52
|
-
const reservedIds = new Set([...previous, ...input].map((task) => clean(task?.id)).filter(Boolean));
|
|
53
|
-
let nextId = 1;
|
|
54
|
-
for (const id of reservedIds) {
|
|
55
|
-
const match = /^task_(\d+)$/.exec(id);
|
|
56
|
-
if (
|
|
57
|
-
match &&
|
|
58
|
-
Number.isSafeInteger(Number(match[1])) &&
|
|
59
|
-
Number(match[1]) < Number.MAX_SAFE_INTEGER - MAX_GOAL_TASKS
|
|
60
|
-
) {
|
|
61
|
-
nextId = Math.max(nextId, Number(match[1]) + 1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
const seenText = new Set();
|
|
65
|
-
const seenIds = new Set();
|
|
66
|
-
return input.map((entry, index) => {
|
|
67
|
-
const source = typeof entry === 'string' ? { text: entry, status: 'pending' } : entry;
|
|
68
|
-
if (!source || typeof source !== 'object') throw new Error(`goal task ${index + 1} is invalid`);
|
|
69
|
-
const text = clean(source.text);
|
|
70
|
-
if (!text) throw new Error('goal task text is required');
|
|
71
|
-
if ([...text].length > MAX_GOAL_TASK_TEXT_LENGTH)
|
|
72
|
-
throw new Error(`goal task exceeds ${MAX_GOAL_TASK_TEXT_LENGTH} characters`);
|
|
73
|
-
if (seenText.has(text)) throw new Error(`duplicate goal task: ${text}`);
|
|
74
|
-
seenText.add(text);
|
|
75
|
-
const id = clean(source.id) || clean(previousByText.get(text)?.id) || `task_${nextId++}`;
|
|
76
|
-
if (seenIds.has(id)) throw new Error(`duplicate goal task id: ${id}`);
|
|
77
|
-
seenIds.add(id);
|
|
78
|
-
const rawStatus = clean(source.status).toLowerCase();
|
|
79
|
-
if (strict && !GOAL_TASK_STATUSES.includes(rawStatus))
|
|
80
|
-
throw new Error(`goal task ${index + 1} has an invalid status`);
|
|
81
|
-
let status = source.satisfied === true ? 'completed' : 'pending';
|
|
82
|
-
if (GOAL_TASK_STATUSES.includes(rawStatus)) status = rawStatus;
|
|
83
|
-
return { id, text, status };
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function taskInputRetains(entry, task) {
|
|
88
|
-
if (typeof entry === 'string') return clean(entry) === task.text;
|
|
89
|
-
if (!entry || typeof entry !== 'object') return false;
|
|
90
|
-
return clean(entry.id) ? clean(entry.id) === task.id : clean(entry.text) === task.text;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function patchGoalTasks(previous, { updates, tasks } = {}) {
|
|
94
|
-
const requested = updates ?? [];
|
|
95
|
-
const entries = tasks ?? [];
|
|
96
|
-
if (!Array.isArray(requested) || !Array.isArray(entries)) throw new Error('goal updates and tasks must be arrays');
|
|
97
|
-
const byId = new Map(previous.map((task) => [task.id, { ...task }]));
|
|
98
|
-
// A new-task entry naming an id this Goal already has can only mean that
|
|
99
|
-
// task, so it is applied as the task's update. An id the Goal does not have
|
|
100
|
-
// is still refused below.
|
|
101
|
-
const addressesExisting = (entry) => byId.has(clean(entry?.id));
|
|
102
|
-
const patches = [...requested, ...entries.filter(addressesExisting)];
|
|
103
|
-
const additions = entries.filter((entry) => !addressesExisting(entry));
|
|
104
|
-
if (!patches.length && !additions.length) throw new Error('goal update_tasks requires updates or new tasks');
|
|
105
|
-
if (patches.length > MAX_GOAL_TASKS) throw new Error(`goal updates support at most ${MAX_GOAL_TASKS} entries`);
|
|
106
|
-
const seen = new Set();
|
|
107
|
-
for (const patch of patches) {
|
|
108
|
-
const id = clean(patch?.id);
|
|
109
|
-
if (!id || !byId.has(id)) throw new Error(`unknown Goal task id: ${id || '(missing)'}`);
|
|
110
|
-
if (seen.has(id)) throw new Error(`duplicate Goal task update: ${id}`);
|
|
111
|
-
seen.add(id);
|
|
112
|
-
if (Object.keys(patch).some((key) => !TASK_ENTRY_FIELDS.includes(key)))
|
|
113
|
-
throw new Error(`unknown Goal task update field for ${id}`);
|
|
114
|
-
byId.set(id, { ...byId.get(id), ...patch, id });
|
|
115
|
-
}
|
|
116
|
-
if (additions.some((task) => clean(task?.id)))
|
|
117
|
-
throw new Error('new Goal tasks must omit ids; use updates for existing tasks');
|
|
118
|
-
return normalizeGoalTasks([...byId.values(), ...additions], previous, { strict: true });
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Prepare a working copy without publishing it. Lifecycle actions can include
|
|
122
|
-
// task changes in the same durable commit instead of exposing an intermediate
|
|
123
|
-
// paused/active snapshot or consuming two revisions.
|
|
124
|
-
export function applyGoalTaskChanges(goal, args = {}, { partial = false, at = Date.now() } = {}) {
|
|
125
|
-
if (['complete', 'stopped'].includes(goal.status))
|
|
126
|
-
throw new Error('cannot update tasks for a completed or stopped Goal');
|
|
127
|
-
if (!partial && (!Array.isArray(args.tasks) || args.tasks.length === 0)) {
|
|
128
|
-
throw new Error('goal set_tasks requires at least one task');
|
|
129
|
-
}
|
|
130
|
-
if (partial && goal.tasksObjectiveRevision !== goal.objectiveRevision) {
|
|
131
|
-
throw new Error(
|
|
132
|
-
'Goal objective changed; read status and reconcile the full task list with set_tasks before partial updates'
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
const previousTasks = normalizeGoalTasks(goal.tasks || []);
|
|
136
|
-
const input = partial ? patchGoalTasks(previousTasks, args) : args.tasks;
|
|
137
|
-
const omitted = previousTasks.filter(
|
|
138
|
-
(task) => !GOAL_TASK_SETTLED.includes(task.status) && !input.some((entry) => taskInputRetains(entry, task))
|
|
139
|
-
);
|
|
140
|
-
if (omitted.length > 0) {
|
|
141
|
-
const detail = omitted.map((task) => `${task.id} (${task.text})`).join(', ');
|
|
142
|
-
throw new Error(`cannot remove unfinished Goal tasks: ${detail}`);
|
|
143
|
-
}
|
|
144
|
-
const nextTasks = normalizeGoalTasks(input, previousTasks, { strict: true });
|
|
145
|
-
// Re-sending the same tasks is not progress. A newly dropped task must
|
|
146
|
-
// survive this turn before completion can retire the requested work.
|
|
147
|
-
if (JSON.stringify(nextTasks) !== JSON.stringify(previousTasks)) goal.tasksUpdatedAt = at;
|
|
148
|
-
const droppedNow = nextTasks.some(
|
|
149
|
-
(task) => task.status === 'dropped' && previousTasks.find((prev) => prev.id === task.id)?.status !== 'dropped'
|
|
150
|
-
);
|
|
151
|
-
if (droppedNow) goal.lastDropTurn = Math.max(0, Math.floor(Number(goal.turnCount) || 0));
|
|
152
|
-
goal.tasks = nextTasks;
|
|
153
|
-
goal.tasksObjectiveRevision = goal.objectiveRevision;
|
|
154
|
-
goal.updatedAt = at;
|
|
155
|
-
return goal;
|
|
156
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '../runtime/agent/orchestrator/runtime-core/goal-tasks.mjs';
|