mixdog 1.3.1 → 1.3.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/README.md +8 -4
- package/package.json +8 -8
- package/scripts/native-release-status.mjs +238 -0
- package/scripts/verify-runtime-dependency-versions.mjs +158 -0
- package/src/agents/reviewer/AGENT.md +5 -7
- package/src/agents/reviewer/agent.json +1 -1
- package/src/defaults/shipped-history.json +9 -1
- package/src/defaults/skills/browser-use/SKILL.md +6 -3
- package/src/defaults/skills/local-provider/SKILL.md +33 -6
- package/src/defaults/skills/pptx/scripts/qc-pages.mjs +3 -2
- package/src/defaults/skills/setup/SKILL.md +23 -1
- package/src/defaults/skills/setup/references/actions.md +50 -3
- package/src/defaults/skills/setup/references/surfaces.md +23 -3
- package/src/defaults/skills/setup-guide/SKILL.md +7 -3
- package/src/defaults/skills/visualize/SKILL.md +9 -6
- package/src/defaults/skills/visualize/references/craft.md +8 -1
- package/src/help.mjs +1 -1
- package/src/lib/keychain-cjs.cjs +4 -1
- package/src/lib/rules-builder.cjs +14 -7
- package/src/rules/agent-mode/AGENT_MODE.md +8 -5
- package/src/rules/agent-mode/MIXY.md +6 -8
- package/src/rules/lead/LEAD.md +7 -10
- package/src/rules/shared/10-tool-workflow.md +4 -0
- package/src/rules/shared/20-research.md +2 -0
- package/src/rules/shared/45-destructive.md +5 -1
- package/src/rules/shared/60-verification.md +6 -4
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/preset.mjs +5 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-dispatch/session-prep.mjs +8 -0
- package/src/runtime/agent/orchestrator/agent-runtime/agent-progress-watchdog.mjs +6 -1
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +114 -26
- package/src/runtime/agent/orchestrator/agent-runtime/maintenance-route.mjs +8 -0
- package/src/runtime/agent/orchestrator/agent-runtime/room-supervisor-completion.mjs +5 -4
- package/src/runtime/agent/orchestrator/agent-trace.mjs +3 -0
- package/src/runtime/agent/orchestrator/cache-break-trace.mjs +4 -0
- package/src/runtime/agent/orchestrator/config-presets.mjs +2 -0
- package/src/runtime/agent/orchestrator/config-storage.mjs +10 -3
- package/src/runtime/agent/orchestrator/config.mjs +11 -0
- package/src/runtime/agent/orchestrator/context/role-instructions.mjs +9 -2
- package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +97 -5
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +6 -10
- package/src/runtime/agent/orchestrator/mcp/client.mjs +7 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +84 -32
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +38 -11
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +15 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-model-resolve.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +84 -42
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +14 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +6 -2
- package/src/runtime/agent/orchestrator/providers/auto-effort.mjs +27 -8
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +31 -4
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +14 -1
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +11 -8
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-prefix-trace.mjs +76 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +16 -0
- package/src/runtime/agent/orchestrator/providers/lib/tail-reminder-split.mjs +13 -0
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +16 -1
- package/src/runtime/agent/orchestrator/providers/mixdog-local.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +5 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +9 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +30 -3
- package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +61 -8
- package/src/runtime/agent/orchestrator/providers/registry.mjs +19 -0
- package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +13 -1
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +90 -24
- package/src/runtime/agent/orchestrator/runtime-core/fs-utils.mjs +8 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-mutations.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-runtime.mjs +5 -0
- package/src/runtime/agent/orchestrator/runtime-core/goal-storage.mjs +68 -22
- package/src/runtime/agent/orchestrator/runtime-core/goal-tool-exec.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/goal-turns.mjs +10 -1
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +4 -6
- package/src/runtime/agent/orchestrator/runtime-core/route-context-state.mjs +81 -0
- package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +2 -1
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +52 -6
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +35 -13
- package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +7 -6
- package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +1 -1
- package/src/runtime/agent/orchestrator/runtime-core/workflow/packs.mjs +8 -4
- package/src/runtime/agent/orchestrator/runtime-core/workflow.mjs +8 -3
- package/src/runtime/agent/orchestrator/session/agent-loop.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/agent-mode.mjs +0 -6
- package/src/runtime/agent/orchestrator/session/agent-room-supervisor.d.mts +1 -1
- package/src/runtime/agent/orchestrator/session/agent-room-supervisor.mjs +22 -4
- package/src/runtime/agent/orchestrator/session/agent-room.d.mts +30 -2
- package/src/runtime/agent/orchestrator/session/agent-room.mjs +196 -45
- package/src/runtime/agent/orchestrator/session/attachment-preflight.mjs +80 -0
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/compact/continuation.mjs +15 -6
- package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +45 -19
- package/src/runtime/agent/orchestrator/session/compact/forked-summary.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +44 -0
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +185 -37
- package/src/runtime/agent/orchestrator/session/compact/summary-mode.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/compact/summary-route.mjs +87 -0
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/compact/text-utils.mjs +6 -2
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +41 -10
- package/src/runtime/agent/orchestrator/session/human-gate/delegation.mjs +240 -0
- package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +102 -35
- package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +20 -0
- package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +19 -9
- package/src/runtime/agent/orchestrator/session/human-gate/run-policy.mjs +73 -0
- package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +55 -27
- package/src/runtime/agent/orchestrator/session/human-gate/unattended-port.mjs +15 -0
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +199 -109
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/continuation.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/empty-nudge.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn/output-limit.mjs +62 -13
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +22 -6
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +6 -2
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +5 -5
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/loop/steering.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +33 -8
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/call-prep.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +27 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +11 -5
- package/src/runtime/agent/orchestrator/session/manager/agent-listing-notice.mjs +102 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-queue.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +13 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +13 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +27 -14
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +14 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-steering-drain.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +44 -18
- package/src/runtime/agent/orchestrator/session/manager/idle-cleanup.mjs +32 -1
- package/src/runtime/agent/orchestrator/session/manager/orchestration-mode-switch-notice.mjs +115 -0
- package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +42 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +3 -9
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-file.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/pending-spool-shard.mjs +5 -3
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +36 -0
- package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +40 -1
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/manager/runtime-state.mjs +20 -0
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +28 -9
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +55 -27
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +4 -9
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +14 -1
- package/src/runtime/agent/orchestrator/session/manager/session-tool-surface.mjs +7 -3
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +6 -15
- package/src/runtime/agent/orchestrator/session/manager/turn-interruption.mjs +24 -8
- package/src/runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs +94 -13
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +52 -11
- package/src/runtime/agent/orchestrator/session/provider-prefix-guard.mjs +21 -3
- package/src/runtime/agent/orchestrator/session/routine-result.d.mts +18 -3
- package/src/runtime/agent/orchestrator/session/routine-result.mjs +126 -12
- package/src/runtime/agent/orchestrator/session/runtime-user-context.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +16 -3
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/store/canonical-reader.mjs +41 -7
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +10 -2
- package/src/runtime/agent/orchestrator/session/store/load-cache.mjs +14 -2
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +15 -1
- package/src/runtime/agent/orchestrator/session/store/sweep/stale-sweep.mjs +5 -4
- package/src/runtime/agent/orchestrator/session/store/sweep/sub-agent-retention.mjs +140 -0
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-plan.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-record.mjs +15 -5
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +49 -1
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +80 -1
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +40 -5
- package/src/runtime/agent/orchestrator/session/store-summary-last-message.mjs +47 -2
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +33 -1
- package/src/runtime/agent/orchestrator/session/store-summary-visibility.d.mts +5 -0
- package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +37 -0
- package/src/runtime/agent/orchestrator/session/store.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/tail-reminder-rules.mjs +125 -0
- package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +78 -43
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +35 -5
- package/src/runtime/agent/orchestrator/session/transcript-restore/user-text.mjs +42 -2
- package/src/runtime/agent/orchestrator/tools/builtin/advisory-lock.mjs +47 -14
- package/src/runtime/agent/orchestrator/tools/builtin/atomic-write.mjs +25 -5
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +6 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +13 -14
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/transport-artifacts.mjs +9 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +19 -14
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +7 -1
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +127 -20
- package/src/runtime/agent/orchestrator/tools/builtin/git-worktree-tool.mjs +557 -0
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +10 -12
- package/src/runtime/agent/orchestrator/tools/builtin/pdf-test-fixtures.mjs +5 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-image.mjs +4 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-media.mjs +47 -2
- package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +264 -87
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +10 -4
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +42 -23
- package/src/runtime/agent/orchestrator/tools/code-graph/constants.mjs +8 -4
- package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +9 -30
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +24 -12
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-spawn.mjs +3 -2
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/patch/delete-quarantine.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/patch/replay-capture.mjs +4 -2
- package/src/runtime/agent/orchestrator/tools/patch/rollback-state.mjs +33 -2
- package/src/runtime/agent/orchestrator/tools/patch-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +5 -3
- package/src/runtime/agent/orchestrator/tools/shell-exec-output.mjs +3 -1
- package/src/runtime/attachments/attachment-reference.mjs +155 -0
- package/src/runtime/attachments/legacy-office.mjs +110 -0
- package/src/runtime/attachments/limits.mjs +5 -1
- package/src/runtime/attachments/office-extract.mjs +3 -6
- package/src/runtime/attachments/pdf-extract.mjs +84 -10
- package/src/runtime/attachments/prompt-restore.mjs +70 -0
- package/src/runtime/attachments/store.mjs +109 -33
- package/src/runtime/browser-bridge/client.mjs +73 -20
- package/src/runtime/channels/lib/runtime-paths.mjs +1 -1
- package/src/runtime/channels/lib/scheduler.mjs +14 -7
- package/src/runtime/channels/lib/state-file.mjs +15 -15
- package/src/runtime/channels/lib/voice-runtime-fetcher.mjs +14 -13
- package/src/runtime/channels/lib/webhook/relay-tunnel.mjs +22 -18
- package/src/runtime/channels/lib/webhook/session-dispatch.mjs +14 -36
- package/src/runtime/channels/lib/worker-main.mjs +3 -2
- package/src/runtime/effort-judge/compact-tokenizer.mjs +8 -2
- package/src/runtime/effort-judge/judge-client.mjs +66 -16
- package/src/runtime/effort-judge/model-install.mjs +47 -7
- package/src/runtime/local-provider/asset-installer.mjs +10 -4
- package/src/runtime/local-provider/catalog.mjs +5 -2
- package/src/runtime/local-provider/registered-models.mjs +64 -27
- package/src/runtime/local-provider/server.mjs +2 -3
- package/src/runtime/media/adapters/image-api.mjs +89 -0
- package/src/runtime/media/auth.mjs +64 -1
- package/src/runtime/media/catalog.mjs +66 -4
- package/src/runtime/media/jobs.mjs +4 -0
- package/src/runtime/media/lanes.mjs +46 -5
- package/src/runtime/media/media-usage.mjs +17 -0
- package/src/runtime/media/renditions.mjs +15 -15
- package/src/runtime/media/store.mjs +36 -35
- package/src/runtime/media/tool.mjs +8 -1
- package/src/runtime/memory/lib/cycle-scheduler/health-ledger.mjs +8 -2
- package/src/runtime/memory/lib/embedding-model-files.mjs +30 -7
- package/src/runtime/memory/lib/ingest/transcript-tail.mjs +16 -7
- package/src/runtime/memory/lib/memory-chunk-quality.mjs +14 -2
- package/src/runtime/memory/lib/pg/process.mjs +8 -4
- package/src/runtime/memory/lib/project-id-resolver.mjs +5 -1
- package/src/runtime/memory/lib/runtime-fetcher.mjs +6 -1
- package/src/runtime/office/core/journal.mjs +7 -14
- package/src/runtime/office/design/library/design-library-core.mjs +4 -16
- package/src/runtime/office/pdf/ocr-engine-worker.mjs +37 -0
- package/src/runtime/office/pdf/ocr-engine.mjs +146 -0
- package/src/runtime/office/pdf/pdf-ocr.mjs +51 -21
- package/src/runtime/office/pdf/pdf-render.mjs +30 -18
- package/src/runtime/office/portable/ooxml-validator.mjs +2 -2
- package/src/runtime/office/portable/portable-soffice.mjs +135 -29
- package/src/runtime/shared/agent-avatar-sprites.mjs +23 -8
- package/src/runtime/shared/agent-avatar.mjs +3 -2
- package/src/runtime/shared/agent-kind-migration.mjs +200 -0
- package/src/runtime/shared/agent-message-envelope.d.mts +6 -0
- package/src/runtime/shared/agent-message-envelope.mjs +44 -0
- package/src/runtime/shared/agent-reap-state.d.mts +4 -0
- package/src/runtime/shared/agent-room-host.d.mts +31 -0
- package/src/runtime/shared/agent-room-host.mjs +58 -0
- package/src/runtime/shared/agent-store.mjs +24 -7
- package/src/runtime/shared/agent-task-starts.mjs +27 -0
- package/src/runtime/shared/atomic-file.d.mts +50 -0
- package/src/runtime/shared/atomic-file.mjs +394 -132
- package/src/runtime/shared/background-tasks.mjs +7 -4
- package/src/runtime/shared/bot-hops.mjs +35 -0
- package/src/runtime/shared/bot-split-migration.mjs +1 -1
- package/src/runtime/shared/bounded-download.mjs +4 -2
- package/src/runtime/shared/config.mjs +39 -9
- package/src/runtime/shared/defaults-separation.mjs +6 -2
- package/src/runtime/shared/delegated-approval-host.mjs +74 -0
- package/src/runtime/shared/err-text.mjs +4 -0
- package/src/runtime/shared/error-presentation.mjs +22 -4
- package/src/runtime/shared/file-has-data.mjs +28 -0
- package/src/runtime/shared/llm/usage-ledger-import.mjs +37 -18
- package/src/runtime/shared/pending-agent-work.mjs +54 -0
- package/src/runtime/shared/process-lifecycle.mjs +8 -12
- package/src/runtime/shared/projects.mjs +50 -41
- package/src/runtime/shared/provider-accounts.mjs +17 -12
- package/src/runtime/shared/redact-directories.mjs +18 -0
- package/src/runtime/shared/remove-directory.mjs +28 -0
- package/src/runtime/shared/routine-trigger.d.mts +6 -1
- package/src/runtime/shared/routine-trigger.mjs +14 -6
- package/src/runtime/shared/run-child.d.mts +3 -0
- package/src/runtime/shared/run-child.mjs +24 -3
- package/src/runtime/shared/session-baseline-store.mjs +8 -2
- package/src/runtime/shared/session-sidebar-host.d.mts +11 -2
- package/src/runtime/shared/session-sidebar-host.mjs +16 -3
- package/src/runtime/shared/singleton-owner.mjs +7 -6
- package/src/runtime/shared/skill-tool-dependencies.mjs +4 -10
- package/src/runtime/shared/staged-update.mjs +4 -2
- package/src/runtime/shared/statusline/statusline-segments.mjs +4 -15
- package/src/runtime/shared/tool-execution-contract.mjs +10 -0
- package/src/runtime/shared/tool-work-units.mjs +12 -9
- package/src/runtime/shared/transcript-metadata.mjs +28 -3
- package/src/runtime/shared/transcript-writer/session-record.mjs +7 -6
- package/src/runtime/shared/turn-snapshot-store.mjs +5 -4
- package/src/runtime/shared/turn-snapshot.mjs +277 -124
- package/src/runtime/shared/user-cwd.mjs +9 -4
- package/src/runtime/shared/user-data-guard.mjs +92 -61
- package/src/runtime/shared/utf8-cut.mjs +10 -0
- package/src/runtime/shared/worktrees/activity-gate.mjs +251 -61
- package/src/runtime/shared/worktrees/contract.mjs +11 -3
- package/src/runtime/shared/worktrees/maintenance.mjs +11 -2
- package/src/runtime/shared/worktrees/manager.mjs +419 -52
- package/src/runtime/shared/worktrees/registry.mjs +29 -27
- package/src/runtime/shared/worktrees/tool-host.mjs +39 -0
- package/src/runtime/tidy/core-install.mjs +26 -4
- package/src/runtime/tidy/install.mjs +91 -23
- package/src/runtime/tidy/process.mjs +41 -8
- package/src/runtime/tidy/resolve.mjs +10 -7
- package/src/runtime/web-search/lib/config.mjs +4 -16
- package/src/session-runtime/agent-home-delivery.mjs +542 -204
- package/src/session-runtime/agent-profile-changes.mjs +16 -0
- package/src/session-runtime/agent-room-delivery.mjs +81 -35
- package/src/session-runtime/agent-task-sessions.mjs +811 -179
- package/src/session-runtime/agent-tool-routing.mjs +1 -0
- package/src/session-runtime/boot/apis.mjs +48 -24
- package/src/session-runtime/boot/config.mjs +1 -0
- package/src/session-runtime/boot/facade.mjs +16 -7
- package/src/session-runtime/boot/infrastructure.mjs +14 -2
- package/src/session-runtime/boot/providers.mjs +2 -2
- package/src/session-runtime/boot/shared.mjs +12 -6
- package/src/session-runtime/boot/tools.mjs +23 -3
- package/src/session-runtime/bot-status.mjs +432 -0
- package/src/session-runtime/config-lifecycle/lead-route-sync.mjs +29 -0
- package/src/session-runtime/config-lifecycle.mjs +60 -55
- package/src/session-runtime/cwd-plugins/core-memory-context.mjs +2 -4
- package/src/session-runtime/held-requests.mjs +31 -33
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +10 -1
- package/src/session-runtime/internal-tool-executor/feature-tools.mjs +2 -2
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +24 -26
- package/src/session-runtime/lifecycle/session-catalog.mjs +12 -2
- package/src/session-runtime/lifecycle/teardown.mjs +11 -3
- package/src/session-runtime/mcp-glue/connect.mjs +100 -186
- package/src/session-runtime/mcp-glue/initial-connect-gate.mjs +57 -0
- package/src/session-runtime/mcp-glue/server-connection.mjs +71 -0
- package/src/session-runtime/media-api.mjs +5 -2
- package/src/session-runtime/model-recency.mjs +1 -0
- package/src/session-runtime/model-route/route-tuning.mjs +4 -1
- package/src/session-runtime/model-route/set-route.mjs +61 -1
- package/src/session-runtime/owned-automation-run.mjs +8 -1
- package/src/session-runtime/provider-models/row-hydration.mjs +8 -1
- package/src/session-runtime/quick-model-rows/model-meta.mjs +2 -0
- package/src/session-runtime/quick-model-rows/provider-rows.mjs +7 -1
- package/src/session-runtime/route-resolution.mjs +16 -8
- package/src/session-runtime/route-state.mjs +1 -59
- package/src/session-runtime/routine-home-turn.mjs +5 -3
- package/src/session-runtime/runtime-bootstrap.mjs +5 -3
- package/src/session-runtime/runtime-paths.mjs +11 -5
- package/src/session-runtime/runtime-review-api.mjs +4 -1
- package/src/session-runtime/runtime-tunables.mjs +6 -0
- package/src/session-runtime/services/agent-tool/close-flow/close-all.mjs +11 -2
- package/src/session-runtime/services/agent-tool/close-flow.mjs +4 -2
- package/src/session-runtime/services/agent-tool/execute-send.mjs +1 -0
- package/src/session-runtime/services/agent-tool/execute-spawn.mjs +1 -0
- package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +34 -19
- package/src/session-runtime/services/agent-tool/restart-notify.mjs +10 -0
- package/src/session-runtime/services/agent-tool/send-flow.mjs +25 -21
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +7 -0
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +6 -3
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +8 -5
- package/src/session-runtime/services/agent-tool/worker-index/row-liveness.mjs +22 -2
- package/src/session-runtime/services/agent-tool/worker-index.mjs +4 -6
- package/src/session-runtime/services/agent-tool.mjs +6 -0
- package/src/session-runtime/services/daemon-crash-capture/daemon-exit-record.mjs +1 -1
- package/src/session-runtime/services/daemon-crash-capture/retention.mjs +4 -3
- package/src/session-runtime/services/hook-bus/config-loader.mjs +14 -5
- package/src/session-runtime/services/hook-bus/rule-file.mjs +49 -11
- package/src/session-runtime/services/plugin-admin.mjs +26 -26
- package/src/session-runtime/services/provider-admin.mjs +26 -6
- package/src/session-runtime/services/schedule-access.mjs +33 -4
- package/src/session-runtime/services/seeds.mjs +4 -3
- package/src/session-runtime/services/usage-dashboard.mjs +1 -1
- package/src/session-runtime/services/usage-stats-model.mjs +2 -1
- package/src/session-runtime/services/worktree-access.mjs +27 -0
- package/src/session-runtime/session-create/materialize.mjs +2 -3
- package/src/session-runtime/session-create/session-options.mjs +15 -2
- package/src/session-runtime/session-hooks.mjs +9 -17
- package/src/session-runtime/settings-builtin-tools-api.mjs +65 -1
- package/src/session-runtime/settings-compaction-api.mjs +86 -39
- package/src/session-runtime/setup-tool/executor.mjs +12 -2
- package/src/session-runtime/setup-tool/settings-contract.mjs +34 -1
- package/src/session-runtime/setup-tool/tool-defs.mjs +20 -3
- package/src/session-runtime/skills-api.mjs +12 -5
- package/src/session-runtime/tool-policy/agent-profile-fold.mjs +349 -0
- package/src/session-runtime/tool-policy/mode-switch.mjs +54 -0
- package/src/session-runtime/tool-policy/pending-switches.mjs +59 -0
- package/src/session-runtime/tool-policy/policy-stage.mjs +183 -0
- package/src/session-runtime/tool-policy/session-switches.mjs +169 -0
- package/src/session-runtime/tool-policy/surface-helpers.mjs +114 -0
- package/src/session-runtime/tool-policy/workflow-overlay.mjs +145 -0
- package/src/session-runtime/tool-policy-refresh.mjs +48 -369
- package/src/session-runtime/tool-surface.mjs +10 -4
- package/src/session-runtime/turn/session-ops.mjs +8 -0
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +95 -88
- package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
- package/src/session-runtime/turn/turn-run.mjs +7 -2
- package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +54 -7
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +527 -333
- package/src/session-runtime/workflow-agents-api/agent-route.mjs +85 -63
- package/src/session-runtime/workflow-agents-api/shared.mjs +5 -1
- package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +14 -1
- package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +6 -3
- package/src/session-runtime/workspace/transition-steps.mjs +1 -18
- package/src/session-runtime/workspace/transitions.mjs +279 -67
- package/src/session-runtime/workspace/workspace-state.mjs +7 -6
- package/src/session-runtime/workspace/worktree-tool.mjs +194 -0
- package/src/standalone/daemon-agent-control.mjs +4 -1
- package/src/standalone/daemon-lag-profiler.mjs +3 -1
- package/src/standalone/daemon-session-control.mjs +173 -15
- package/src/standalone/daemon-telemetry.mjs +9 -0
- package/src/standalone/daemon.mjs +33 -10
- package/src/standalone/local-session-runtime.mjs +33 -16
- package/src/standalone/session-client.mjs +7 -2
- package/src/standalone/session-protocol.mjs +8 -0
- package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +2 -0
- package/src/standalone/session-service/agent-route-follow.mjs +69 -0
- package/src/standalone/session-service/session-calls/session-turns.mjs +33 -4
- package/src/standalone/session-service.mjs +21 -0
- package/src/standalone/session-state-projection.mjs +19 -9
- package/src/standalone/session-tool-output.mjs +36 -9
- package/src/standalone/staged-import.mjs +47 -0
- package/src/tui/App.jsx +2 -0
- package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +19 -13
- package/src/tui/app/message-selector.mjs +15 -2
- package/src/tui/app/model-options.mjs +16 -2
- package/src/tui/app/model-picker.mjs +2 -1
- package/src/tui/app/route-pickers.mjs +3 -1
- package/src/tui/app/settings-picker/settings-rows.mjs +2 -2
- package/src/tui/app/slash-commands.mjs +1 -1
- package/src/tui/app/usage-context-panels/context-model.mjs +8 -2
- package/src/tui/dist/index.mjs +617 -369
- package/src/tui/paste-attachments.mjs +0 -1
- package/src/tui/paste-text-policy.mjs +4 -5
- package/src/tui/prompt-history-store.mjs +16 -21
- package/src/tui/session/agent-job-feed/execution-delivery.mjs +4 -1
- package/src/tui/session/context-state.mjs +4 -0
- package/src/tui/session/notice-surface.mjs +3 -0
- package/src/tui/session/session-api/intake/abort.mjs +52 -18
- package/src/tui/session/session-api/intake/rewind.mjs +39 -4
- package/src/tui/session/session-api/media.mjs +2 -1
- package/src/tui/session/session-api/routes-agent-definitions.mjs +76 -0
- package/src/tui/session/session-api/routes-write.mjs +203 -0
- package/src/tui/session/session-api/routes.mjs +23 -247
- package/src/tui/session/session-api/settings.mjs +14 -1
- package/src/tui/session/session-flow/drain.mjs +28 -3
- package/src/tui/session/session-flow/failed-turn-rewind.mjs +4 -2
- package/src/tui/session/session-flow/queue/take-entries.mjs +8 -0
- package/src/tui/session/session-flow/steering.mjs +8 -3
- package/src/tui/session/tool-approval.mjs +142 -14
- package/src/tui/session/transcript-intake.mjs +2 -0
- package/src/tui/session/turn.mjs +23 -14
- package/src/tui/transcript-tool-failures.mjs +8 -2
- package/src/vendor/statusline/src/gateway/route-meta.mjs +7 -8
- package/src/vendor/statusline/src/gateway/session-routes.mjs +6 -7
- package/src/rules/agent-mode/ROUTINE.md +0 -6
- package/src/session-runtime/room-member-gate.mjs +0 -48
|
@@ -1,125 +1,14 @@
|
|
|
1
1
|
// Refresh the empty Lead session's model-facing tool surface and BP1/BP3
|
|
2
2
|
// layers after workflow or search/memory settings change. Conversation
|
|
3
3
|
// sessions keep their frozen schema; the next new session picks up the
|
|
4
|
-
// updated policy. The
|
|
5
|
-
// itself (switchSessionWorkflow
|
|
4
|
+
// updated policy. The exceptions are a workflow or orchestration mode switch
|
|
5
|
+
// made in the session itself (switchSessionWorkflow,
|
|
6
|
+
// switchSessionOrchestrationMode), which that conversation takes as an overlay.
|
|
6
7
|
import { sessionHasConversationMessages } from '../runtime/agent/orchestrator/runtime-core/session-text.mjs';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
} from '../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';
|
|
12
|
-
import { deferredSurfaceModeForLead } from '../runtime/agent/orchestrator/runtime-core/effort.mjs';
|
|
13
|
-
import {
|
|
14
|
-
applyInitialDeferredToolManifestToBp2,
|
|
15
|
-
composeSystemPrompt,
|
|
16
|
-
} from '../runtime/agent/orchestrator/context/collect.mjs';
|
|
17
|
-
import { _buildBaseRules } from '../runtime/agent/orchestrator/session/manager/rules-cache.mjs';
|
|
18
|
-
import { sessionRolePromptFields } from '../runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs';
|
|
19
|
-
import {
|
|
20
|
-
delegationDisabled,
|
|
21
|
-
honoredSchemaAllowlist,
|
|
22
|
-
} from '../runtime/agent/orchestrator/session/manager/session-tool-surface.mjs';
|
|
23
|
-
import { finalizeSessionToolList } from '../runtime/agent/orchestrator/session/manager/tool-resolution.mjs';
|
|
24
|
-
import { isAgentOwner } from '../runtime/agent/orchestrator/agent-owner.mjs';
|
|
25
|
-
import {
|
|
26
|
-
AGENT_MODE,
|
|
27
|
-
isRoutineSource,
|
|
28
|
-
resolveSessionMode,
|
|
29
|
-
sessionModeOf,
|
|
30
|
-
} from '../runtime/agent/orchestrator/session/agent-mode.mjs';
|
|
31
|
-
import { unusedModelEditToolName } from '../runtime/shared/edit-tool-dialect.mjs';
|
|
32
|
-
import { MIXY_AGENT_ID } from '../runtime/agent/orchestrator/session/agent-home.mjs';
|
|
33
|
-
import {
|
|
34
|
-
refreshSessionBp3Environment,
|
|
35
|
-
withPresentedWorkspaceSlices,
|
|
36
|
-
} from '../runtime/agent/orchestrator/session/manager/prompt-utils.mjs';
|
|
37
|
-
import { stageWorkflowSwitchNotice } from '../runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs';
|
|
38
|
-
import { markToolSurfaceMigrated } from '../runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs';
|
|
39
|
-
import { agentProfileRevision, leadRosterRevision } from '../runtime/agent/orchestrator/context/role-instructions.mjs';
|
|
40
|
-
import { recordTranscriptBoundary } from './model-route/set-route.mjs';
|
|
41
|
-
|
|
42
|
-
const WORKFLOW_SWITCH_BUSY = 'The session is running a turn; wait for it to finish.';
|
|
43
|
-
const AGENT_PROFILE_INTENT = 'agent_profile';
|
|
44
|
-
|
|
45
|
-
function toolNames(list) {
|
|
46
|
-
return (Array.isArray(list) ? list : [])
|
|
47
|
-
.map((item) => (typeof item === 'string' ? item : item?.name))
|
|
48
|
-
.filter(Boolean);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function replaceMessageContent(messages, target, content) {
|
|
52
|
-
const index = messages.indexOf(target);
|
|
53
|
-
if (index < 0) return false;
|
|
54
|
-
messages[index] = { ...target, content };
|
|
55
|
-
return true;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function rewriteSystemHeading(session, heading, nextContent) {
|
|
59
|
-
if (!nextContent) return;
|
|
60
|
-
const messages = Array.isArray(session.messages) ? session.messages : [];
|
|
61
|
-
const target = messages.find(
|
|
62
|
-
(message) =>
|
|
63
|
-
message?.role === 'system' && typeof message.content === 'string' && message.content.startsWith(heading)
|
|
64
|
-
);
|
|
65
|
-
if (target) replaceMessageContent(messages, target, nextContent);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
function bp3Message(session) {
|
|
69
|
-
const messages = Array.isArray(session.messages) ? session.messages : [];
|
|
70
|
-
return (
|
|
71
|
-
messages.find((message) => message?.role === 'system' && message.cacheTier === 'tier3') ||
|
|
72
|
-
messages.find(
|
|
73
|
-
(message) =>
|
|
74
|
-
message?.role === 'system' &&
|
|
75
|
-
typeof message.content === 'string' &&
|
|
76
|
-
message.content.startsWith('# Active Workflow:')
|
|
77
|
-
)
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// The BP3 core the session's prompt carries now (split layout: the whole
|
|
82
|
-
// tier3 block; combined: the stored core beside the environment).
|
|
83
|
-
function presentedBp3Core(session) {
|
|
84
|
-
return session.bp3EnvSplit === true ? bp3Message(session)?.content : session.bp3CoreContext;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function rewriteBp3Core(session, nextCore) {
|
|
88
|
-
const messages = Array.isArray(session.messages) ? session.messages : [];
|
|
89
|
-
const bp3 = bp3Message(session);
|
|
90
|
-
if (!bp3 || typeof bp3.content !== 'string') return;
|
|
91
|
-
if (session.bp3EnvSplit === true) {
|
|
92
|
-
// Split layout: the environment lives in its own cacheTier:'env' system
|
|
93
|
-
// block — the tier3 block carries the core only.
|
|
94
|
-
replaceMessageContent(messages, bp3, nextCore || '');
|
|
95
|
-
session.bp3CoreContext = nextCore || '';
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
const env = session.bp3EnvironmentContext || '';
|
|
99
|
-
replaceMessageContent(messages, bp3, [nextCore, env].filter((part) => String(part || '').trim()).join('\n\n---\n\n'));
|
|
100
|
-
session.bp3CoreContext = nextCore || '';
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// A Lead's workflow slices (orchestration, agent and contact catalogs) for its
|
|
104
|
-
// mode, Mixy's with the contacts.
|
|
105
|
-
function leadPartsFor(session, leadPromptParts) {
|
|
106
|
-
return leadPromptParts({
|
|
107
|
-
agentMode: sessionModeOf(session) === AGENT_MODE,
|
|
108
|
-
mixy: resolveSessionMode({ session }).agentId === MIXY_AGENT_ID,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
// A conversation keeps its `# Session` block: the legacy combined layout
|
|
113
|
-
// rebuilds the tier3 block from the new core (rooted where it was).
|
|
114
|
-
function rewriteConversationBp3Core(session, nextCore) {
|
|
115
|
-
if (session.bp3EnvSplit !== true && typeof session.bp3CoreContext === 'string') {
|
|
116
|
-
const previous = session.bp3CoreContext;
|
|
117
|
-
session.bp3CoreContext = nextCore;
|
|
118
|
-
if (refreshSessionBp3Environment(session, session.cwd)) return;
|
|
119
|
-
session.bp3CoreContext = previous;
|
|
120
|
-
}
|
|
121
|
-
rewriteBp3Core(session, nextCore);
|
|
122
|
-
}
|
|
8
|
+
import { createAgentProfileFold } from './tool-policy/agent-profile-fold.mjs';
|
|
9
|
+
import { createPolicyStage } from './tool-policy/policy-stage.mjs';
|
|
10
|
+
import { createSessionSwitches } from './tool-policy/session-switches.mjs';
|
|
11
|
+
import { rewriteBp3Core } from './tool-policy/surface-helpers.mjs';
|
|
123
12
|
|
|
124
13
|
export function createToolPolicyRefresh({
|
|
125
14
|
getSession,
|
|
@@ -134,41 +23,18 @@ export function createToolPolicyRefresh({
|
|
|
134
23
|
loadInstructionFilesContext,
|
|
135
24
|
activeWorkflowContext,
|
|
136
25
|
invalidatePreSessionToolSurface,
|
|
26
|
+
persistSession,
|
|
137
27
|
}) {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
disallowedTools: denied,
|
|
149
|
-
ownerIsAgent,
|
|
150
|
-
});
|
|
151
|
-
session.tools = finalizeSessionToolList(session.tools, {
|
|
152
|
-
schemaAllowedTools,
|
|
153
|
-
disallowedTools: denied,
|
|
154
|
-
ownerIsAgent,
|
|
155
|
-
});
|
|
156
|
-
applyDeferredToolSurface(session, deferredSurfaceModeForLead(getMode()), catalogTools, {
|
|
157
|
-
provider: getRoute()?.provider,
|
|
158
|
-
});
|
|
159
|
-
const catalog = Array.isArray(session.deferredToolCatalog) ? session.deferredToolCatalog : [];
|
|
160
|
-
const active = new Set(toolNames(session.tools).concat(toolNames(session.deferredCallableTools)));
|
|
161
|
-
const pool = catalog.map((tool) => String(tool?.name || '')).filter((name) => name && !active.has(name));
|
|
162
|
-
applyInitialDeferredToolManifestToBp2(session, pool, { rebuild: true });
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
async function leadCoreMemoryContext() {
|
|
166
|
-
try {
|
|
167
|
-
return await loadCoreMemoryContext();
|
|
168
|
-
} catch {
|
|
169
|
-
return '';
|
|
170
|
-
}
|
|
171
|
-
}
|
|
28
|
+
const { liveDeniedTools, stagePolicy, applyPolicy } = createPolicyStage({
|
|
29
|
+
getRoute,
|
|
30
|
+
getMode,
|
|
31
|
+
getDataDir,
|
|
32
|
+
modelStandaloneTools,
|
|
33
|
+
featureDisallowedTools,
|
|
34
|
+
loadCoreMemoryContext,
|
|
35
|
+
loadInstructionFilesContext,
|
|
36
|
+
activeWorkflowContext,
|
|
37
|
+
});
|
|
172
38
|
|
|
173
39
|
// A turn is executing from the moment it opens until it settles, even when
|
|
174
40
|
// its transcript holds only notifications (which are not conversation
|
|
@@ -189,84 +55,6 @@ export function createToolPolicyRefresh({
|
|
|
189
55
|
);
|
|
190
56
|
}
|
|
191
57
|
|
|
192
|
-
// The policy `config` gives `session`, computed without touching the
|
|
193
|
-
// session, so a turn that starts during the async rebuild cannot lose tools
|
|
194
|
-
// to it. `conversation`: the rebuilt BP3 core keeps the instruction files
|
|
195
|
-
// and core memory the prompt presents now (withPresentedWorkspaceSlices).
|
|
196
|
-
async function stagePolicy(session, identity, config, { conversation = false } = {}) {
|
|
197
|
-
const ownerIsAgent = isAgentOwner(session);
|
|
198
|
-
const schemaAllowedTools = honoredSchemaAllowlist(session.schemaAllowedTools, {
|
|
199
|
-
ownerIsAgent,
|
|
200
|
-
agent: identity.agent,
|
|
201
|
-
});
|
|
202
|
-
const toolFreeRole = ownerIsAgent && schemaAllowedTools?.length === 0;
|
|
203
|
-
|
|
204
|
-
const {
|
|
205
|
-
summary: workflow,
|
|
206
|
-
leadPromptParts,
|
|
207
|
-
packContext: workflowContext,
|
|
208
|
-
orchestrationMode,
|
|
209
|
-
} = activeWorkflowContext(config, getDataDir());
|
|
210
|
-
const sessionMode = sessionModeOf(session);
|
|
211
|
-
const agentMode = sessionMode === AGENT_MODE;
|
|
212
|
-
const leadWorkflowParts = ownerIsAgent ? {} : leadPartsFor(session, leadPromptParts);
|
|
213
|
-
const denied = [
|
|
214
|
-
...session.callerDisallowedTools,
|
|
215
|
-
...featureDisallowedTools(),
|
|
216
|
-
...(workflow?.delegatesAgents === false ? ['agent'] : []),
|
|
217
|
-
]
|
|
218
|
-
.map((name) => String(name || ''))
|
|
219
|
-
.filter(Boolean);
|
|
220
|
-
|
|
221
|
-
const baseRules =
|
|
222
|
-
identity.skipAgentRules || toolFreeRole
|
|
223
|
-
? ''
|
|
224
|
-
: _buildBaseRules({
|
|
225
|
-
omitTools: [...denied, unusedModelEditToolName(getRoute()?.model)],
|
|
226
|
-
allowTools: schemaAllowedTools,
|
|
227
|
-
provider: getRoute()?.provider,
|
|
228
|
-
model: getRoute()?.model,
|
|
229
|
-
});
|
|
230
|
-
const coreMemoryContext = conversation ? '' : await leadCoreMemoryContext();
|
|
231
|
-
const { sessionMarkerCore } = composeSystemPrompt({
|
|
232
|
-
...sessionRolePromptFields(identity, {
|
|
233
|
-
ownerIsAgent,
|
|
234
|
-
toolFreeRole,
|
|
235
|
-
delegationFree: delegationDisabled(session, ownerIsAgent),
|
|
236
|
-
sessionMode,
|
|
237
|
-
routine: isRoutineSource(session.sourceType),
|
|
238
|
-
}),
|
|
239
|
-
provider: getRoute()?.provider,
|
|
240
|
-
workflowContext,
|
|
241
|
-
...leadWorkflowParts,
|
|
242
|
-
coreMemoryContext,
|
|
243
|
-
// The rebuilt core keeps (or newly applies) the instruction-files
|
|
244
|
-
// setting; agent mode carries none.
|
|
245
|
-
instructionFilesContext:
|
|
246
|
-
conversation || toolFreeRole || agentMode ? null : loadInstructionFilesContext?.(session) || null,
|
|
247
|
-
});
|
|
248
|
-
return {
|
|
249
|
-
workflow,
|
|
250
|
-
orchestrationMode,
|
|
251
|
-
sessionMode,
|
|
252
|
-
denied,
|
|
253
|
-
schemaAllowedTools,
|
|
254
|
-
ownerIsAgent,
|
|
255
|
-
baseRules,
|
|
256
|
-
core: conversation ? withPresentedWorkspaceSlices(session, sessionMarkerCore) : sessionMarkerCore,
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Apply a staged policy synchronously; the BP3 core is the caller's.
|
|
261
|
-
function applyPolicy(session, staged) {
|
|
262
|
-
session.workflow = toSessionWorkflowMeta(staged.workflow);
|
|
263
|
-
session.orchestrationMode = staged.orchestrationMode;
|
|
264
|
-
session.sessionMode = staged.sessionMode;
|
|
265
|
-
applyToolDenials(session, staged.denied, staged.schemaAllowedTools, staged.ownerIsAgent);
|
|
266
|
-
rewriteSystemHeading(session, '# Tool Use', staged.baseRules);
|
|
267
|
-
session.updatedAt = Date.now();
|
|
268
|
-
}
|
|
269
|
-
|
|
270
58
|
async function refreshEmptySessionToolPolicy() {
|
|
271
59
|
invalidatePreSessionToolSurface?.();
|
|
272
60
|
const session = getSession?.();
|
|
@@ -284,144 +72,35 @@ export function createToolPolicyRefresh({
|
|
|
284
72
|
return { appliedToCurrentSession: true };
|
|
285
73
|
}
|
|
286
74
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
async function switchSessionWorkflow(workflowId) {
|
|
309
|
-
const session = getSession?.();
|
|
310
|
-
if (!session?.id) return null;
|
|
311
|
-
const conversation = () =>
|
|
312
|
-
sessionHasConversationMessages(session) || sessionHasConversationMessages({ messages: session.liveTurnMessages });
|
|
313
|
-
if (!conversation()) return null;
|
|
314
|
-
if (isAgentOwner(session) || sessionModeOf(session) === AGENT_MODE) {
|
|
315
|
-
throw new Error('Only a coding session has a workflow.');
|
|
316
|
-
}
|
|
317
|
-
const identity = session.promptIdentity;
|
|
318
|
-
if (!identity) throw new Error('This session is too old to switch its workflow; start a new task.');
|
|
319
|
-
const busy = () => getSession?.() !== session || turnInFlight(session);
|
|
320
|
-
if (busy()) throw new Error(WORKFLOW_SWITCH_BUSY);
|
|
321
|
-
const config = getConfig();
|
|
322
|
-
const staged = await stagePolicy(
|
|
323
|
-
session,
|
|
324
|
-
identity,
|
|
325
|
-
{ ...config, workflow: { ...(config?.workflow || {}), active: workflowId } },
|
|
326
|
-
{ conversation: true }
|
|
327
|
-
);
|
|
328
|
-
if (busy()) throw new Error(WORKFLOW_SWITCH_BUSY);
|
|
329
|
-
const before = session.workflow;
|
|
330
|
-
const from = before?.id ? before : null;
|
|
331
|
-
applyPolicy(session, staged);
|
|
332
|
-
rewriteConversationBp3Core(session, staged.core);
|
|
333
|
-
// The request prefix changed: drop provider replay state and the context
|
|
334
|
-
// baseline, and tag the next send's expected cache break.
|
|
335
|
-
markToolSurfaceMigrated(session, 'workflow_switch');
|
|
336
|
-
stageWorkflowSwitchNotice(session, from, session.workflow);
|
|
337
|
-
let workflowSwitch = null;
|
|
338
|
-
if (from?.id !== session.workflow.id) {
|
|
339
|
-
workflowSwitch = {
|
|
340
|
-
fromId: from?.id || '',
|
|
341
|
-
from: from?.name || from?.id || '',
|
|
342
|
-
toId: session.workflow.id,
|
|
343
|
-
to: session.workflow.name,
|
|
344
|
-
at: Date.now(),
|
|
345
|
-
};
|
|
346
|
-
// Two switches can land in the same millisecond (A→B→A): the same
|
|
347
|
-
// switch is a repeat only when its direction matches too.
|
|
348
|
-
recordTranscriptBoundary(
|
|
349
|
-
session,
|
|
350
|
-
'workflowSwitches',
|
|
351
|
-
workflowSwitch,
|
|
352
|
-
(entry) =>
|
|
353
|
-
entry?.at === workflowSwitch.at &&
|
|
354
|
-
entry?.fromId === workflowSwitch.fromId &&
|
|
355
|
-
entry?.toId === workflowSwitch.toId
|
|
356
|
-
);
|
|
357
|
-
}
|
|
358
|
-
return { appliedToCurrentSession: true, workflow: session.workflow, workflowSwitch };
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
// An agent profile edit that met a running turn: the next turn applies it.
|
|
362
|
-
let agentProfilePending = false;
|
|
363
|
-
|
|
364
|
-
/**
|
|
365
|
-
* Bring a Lead session's prompt to the saved bots — its own agent's
|
|
366
|
-
* persona, AGENT.md and name, and the bot roster its catalogs list — after
|
|
367
|
-
* a bot was saved, created, renamed, archived or restored
|
|
368
|
-
* (agent-profile-changes.mjs), on resume, or at the start of the turn after
|
|
369
|
-
* one that ran through the change (`trigger`: 'save' | 'resume' | 'turn').
|
|
370
|
-
* Two stamps (agentProfileRevision, agentRosterRevision) tell whether
|
|
371
|
-
* anything it embeds changed; a delegated worker keeps its prompt. The core
|
|
372
|
-
* is rebuilt like a workflow switch's (the session's own workflow, the
|
|
373
|
-
* workspace slices the model was told) and replaces the stored one, so the
|
|
374
|
-
* next turn sends it with one provider cache break; nothing is re-read per
|
|
375
|
-
* turn. Tools are untouched. Returns true when the prompt changed.
|
|
376
|
-
*/
|
|
377
|
-
async function refreshAgentProfile({ trigger = 'save' } = {}) {
|
|
378
|
-
const session = getSession?.();
|
|
379
|
-
const identity = session?.promptIdentity;
|
|
380
|
-
const agent = identity?.agent;
|
|
381
|
-
if (!session?.id || !agent || isAgentOwner(session)) return false;
|
|
382
|
-
// Only Mixy's own (agent-mode) thread embeds Mixy's profile.
|
|
383
|
-
const revision = agentProfileRevision(agent, { mixy: sessionModeOf(session) === AGENT_MODE });
|
|
384
|
-
const config = getConfig();
|
|
385
|
-
const workflowId = session.workflow?.id;
|
|
386
|
-
const workflowConfig = workflowId
|
|
387
|
-
? { ...config, workflow: { ...(config?.workflow || {}), active: workflowId } }
|
|
388
|
-
: config;
|
|
389
|
-
const roster = leadRosterRevision(
|
|
390
|
-
leadPartsFor(session, activeWorkflowContext(workflowConfig, getDataDir()).leadPromptParts)
|
|
391
|
-
);
|
|
392
|
-
if (session.agentProfileRevision === revision && session.agentRosterRevision === roster) return false;
|
|
393
|
-
// A coding session from before profile stamps keeps its prompt when it
|
|
394
|
-
// is reopened; a saved edit still reaches it.
|
|
395
|
-
if (session.agentProfileRevision === undefined && trigger === 'resume' && sessionModeOf(session) !== AGENT_MODE) {
|
|
396
|
-
return false;
|
|
397
|
-
}
|
|
398
|
-
// At a turn's start its own turn is the one counted; nothing runs yet.
|
|
399
|
-
const busy = () => getSession?.() !== session || (trigger !== 'turn' && turnInFlight(session));
|
|
400
|
-
if (busy()) {
|
|
401
|
-
agentProfilePending = true;
|
|
402
|
-
return false;
|
|
403
|
-
}
|
|
404
|
-
const staged = await stagePolicy(session, identity, workflowConfig, { conversation: true });
|
|
405
|
-
if (busy()) {
|
|
406
|
-
agentProfilePending = true;
|
|
407
|
-
return false;
|
|
408
|
-
}
|
|
409
|
-
session.agentProfileRevision = revision;
|
|
410
|
-
session.agentRosterRevision = roster;
|
|
411
|
-
session.updatedAt = Date.now();
|
|
412
|
-
if (staged.core === presentedBp3Core(session)) return false;
|
|
413
|
-
rewriteConversationBp3Core(session, staged.core);
|
|
414
|
-
// The request prefix changed: one cache break, tagged on the next send.
|
|
415
|
-
markToolSurfaceMigrated(session, AGENT_PROFILE_INTENT);
|
|
416
|
-
return true;
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
/** Turn start: apply an edit that arrived while the previous turn ran. */
|
|
420
|
-
async function applyPendingAgentProfile() {
|
|
421
|
-
if (!agentProfilePending) return false;
|
|
422
|
-
agentProfilePending = false;
|
|
423
|
-
return refreshAgentProfile({ trigger: 'turn' });
|
|
424
|
-
}
|
|
75
|
+
const switches = createSessionSwitches({
|
|
76
|
+
getSession,
|
|
77
|
+
getConfig,
|
|
78
|
+
getDataDir,
|
|
79
|
+
modelStandaloneTools,
|
|
80
|
+
activeWorkflowContext,
|
|
81
|
+
persistSession,
|
|
82
|
+
liveDeniedTools,
|
|
83
|
+
turnInFlight,
|
|
84
|
+
});
|
|
85
|
+
const profile = createAgentProfileFold({
|
|
86
|
+
getSession,
|
|
87
|
+
getConfig,
|
|
88
|
+
getDataDir,
|
|
89
|
+
modelStandaloneTools,
|
|
90
|
+
activeWorkflowContext,
|
|
91
|
+
liveDeniedTools,
|
|
92
|
+
stagePolicy,
|
|
93
|
+
applyPolicy,
|
|
94
|
+
turnInFlight,
|
|
95
|
+
});
|
|
425
96
|
|
|
426
|
-
return {
|
|
97
|
+
return {
|
|
98
|
+
refreshEmptySessionToolPolicy,
|
|
99
|
+
switchSessionWorkflow: switches.switchSessionWorkflow,
|
|
100
|
+
switchSessionOrchestrationMode: switches.switchSessionOrchestrationMode,
|
|
101
|
+
applyPendingSessionSwitches: switches.applyPendingSessionSwitches,
|
|
102
|
+
refreshAgentProfile: profile.refreshAgentProfile,
|
|
103
|
+
applyPendingAgentProfile: profile.applyPendingAgentProfile,
|
|
104
|
+
currentAgents: profile.currentAgents,
|
|
105
|
+
};
|
|
427
106
|
}
|
|
@@ -15,7 +15,9 @@ import {
|
|
|
15
15
|
filterModelToolsForProfile,
|
|
16
16
|
} from '../runtime/agent/orchestrator/runtime-core/tool-profile.mjs';
|
|
17
17
|
import { workflowDisallowsAgentTool } from '../runtime/agent/orchestrator/runtime-core/workflow.mjs';
|
|
18
|
+
import { promptWorkflowOf } from '../runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs';
|
|
18
19
|
import { configuredOrchestrationMode } from '../runtime/shared/orchestration.mjs';
|
|
20
|
+
import { isAgentModeSession } from '../runtime/agent/orchestrator/session/agent-mode.mjs';
|
|
19
21
|
|
|
20
22
|
export function createToolSurface({
|
|
21
23
|
mgr,
|
|
@@ -35,14 +37,18 @@ export function createToolSurface({
|
|
|
35
37
|
}) {
|
|
36
38
|
let preSessionSurface = null;
|
|
37
39
|
|
|
38
|
-
// A
|
|
39
|
-
//
|
|
40
|
+
// A coding Lead keeps `agent` whichever agents exist (the agents reach it as
|
|
41
|
+
// a listing reminder); Solo still offers it (deferred) for explicit user
|
|
42
|
+
// requests. An agent-mode Lead keeps its frozen capability once live (the
|
|
43
|
+
// workflow its prompt was built with, even after a mid-conversation switch)
|
|
44
|
+
// and a new one gets it with current agents.
|
|
40
45
|
function workflowAllowsAgents() {
|
|
41
46
|
const session = getSession();
|
|
47
|
+
const agentMode = isAgentModeSession(session || {});
|
|
42
48
|
if (session?.id || session?.workflow || session?.orchestrationMode) {
|
|
43
|
-
return !workflowDisallowsAgentTool(session
|
|
49
|
+
return !workflowDisallowsAgentTool(promptWorkflowOf(session), { agentMode });
|
|
44
50
|
}
|
|
45
|
-
return (delegatableAgentIds?.(getConfig(), cfgMod.getPluginData?.() || dataDir).length ?? 1) > 0;
|
|
51
|
+
return !agentMode || (delegatableAgentIds?.(getConfig(), cfgMod.getPluginData?.() || dataDir).length ?? 1) > 0;
|
|
46
52
|
}
|
|
47
53
|
|
|
48
54
|
function modelStandaloneTools() {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { normalizeToolMode } from '../../runtime/agent/orchestrator/runtime-core/effort.mjs';
|
|
6
6
|
import { interruptTaskWaitForSession } from '../../runtime/agent/orchestrator/session/task-wait-control.mjs';
|
|
7
7
|
import { markPendingGoalReminder } from '../../runtime/agent/orchestrator/runtime-core/goal-reminder.mjs';
|
|
8
|
+
import { rearmLateDeferredTools } from '../../runtime/agent/orchestrator/runtime-core/tool-catalog.mjs';
|
|
8
9
|
|
|
9
10
|
export function createSessionOps(deps) {
|
|
10
11
|
const {
|
|
@@ -55,6 +56,7 @@ export function createSessionOps(deps) {
|
|
|
55
56
|
if (!session?.id) return null;
|
|
56
57
|
const result = await mgr.rewindSessionMessagesTo?.(session.id, options);
|
|
57
58
|
if (!result) return null;
|
|
59
|
+
if (options.dryRun === true) return result;
|
|
58
60
|
setSession(mgr.getSession(session.id) || session);
|
|
59
61
|
invalidateContextStatusCache();
|
|
60
62
|
return result;
|
|
@@ -96,6 +98,12 @@ export function createSessionOps(deps) {
|
|
|
96
98
|
} catch {
|
|
97
99
|
/* best-effort: a Goal reminder must never break manual compact */
|
|
98
100
|
}
|
|
101
|
+
// The same compaction strips late MCP tool announcements from older turns.
|
|
102
|
+
try {
|
|
103
|
+
rearmLateDeferredTools(getSession());
|
|
104
|
+
} catch {
|
|
105
|
+
/* best-effort: a tool reminder must never break manual compact */
|
|
106
|
+
}
|
|
99
107
|
if (options.recoverAgent === true) recoverAgentWorkers();
|
|
100
108
|
invalidateContextStatusCache();
|
|
101
109
|
return result;
|