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,12 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Held requests
|
|
3
|
-
*
|
|
2
|
+
* Held requests. A schedule or webhook run never asks and never holds (its
|
|
3
|
+
* saved routine is the user's grant; human-gate/run-policy.mjs), so only group
|
|
4
|
+
* room members use held requests: with no
|
|
5
|
+
* approval UI attached, an approval-needing call is HELD instead of shown as
|
|
4
6
|
* a card: the run pauses on it, a structured held-request row lands in the
|
|
5
7
|
* owning agent's home thread (agent-home-delivery.mjs queue), a phone push
|
|
6
8
|
* says only "<agent>가 승인을 기다립니다" (no tool, arguments or text), and the
|
|
7
|
-
* request
|
|
8
|
-
*
|
|
9
|
-
*
|
|
9
|
+
* request waits, like any approval, until the user answers it (Approve/Deny,
|
|
10
|
+
* through the ordinary approval call with the held id,
|
|
11
|
+
* runtime/shared/held-request-host.mjs) or the run is cancelled (Stop, abort,
|
|
12
|
+
* app quit), which denies it. It never expires on a timer.
|
|
10
13
|
*
|
|
11
14
|
* Importing this module installs the unattended port of human-gate/gate.mjs.
|
|
12
15
|
* Rooms: a room member session counts as unattended by its id; a surface that
|
|
@@ -22,6 +25,7 @@ import {
|
|
|
22
25
|
setUnattendedApprovalPort,
|
|
23
26
|
} from '../runtime/agent/orchestrator/session/human-gate/gate.mjs';
|
|
24
27
|
import { normalizeHumanResponse } from '../runtime/agent/orchestrator/session/human-gate/requests.mjs';
|
|
28
|
+
import { runStampOf } from '../runtime/agent/orchestrator/session/human-gate/delegation.mjs';
|
|
25
29
|
import { normalizeHeldRequest } from '../runtime/agent/orchestrator/session/human-gate/held-message.mjs';
|
|
26
30
|
import {
|
|
27
31
|
notifyHeldRequest,
|
|
@@ -29,14 +33,6 @@ import {
|
|
|
29
33
|
registerHeldRequestResolver,
|
|
30
34
|
} from '../runtime/shared/held-request-host.mjs';
|
|
31
35
|
|
|
32
|
-
/** Default expiry; MIXDOG_HELD_REQUEST_EXPIRY_MS overrides it. */
|
|
33
|
-
export const HELD_REQUEST_EXPIRY_MS = 5 * 60_000;
|
|
34
|
-
|
|
35
|
-
function configuredExpiryMs() {
|
|
36
|
-
const value = Number(process.env.MIXDOG_HELD_REQUEST_EXPIRY_MS);
|
|
37
|
-
return Number.isFinite(value) && value > 0 ? value : HELD_REQUEST_EXPIRY_MS;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
36
|
const runs = new Map(); // sessionId → { kind, agentId, name }
|
|
41
37
|
|
|
42
38
|
/** Mark `sessionId` as an unattended schedule/webhook run of `agentId`. */
|
|
@@ -54,12 +50,21 @@ export function markUnattendedRun(sessionId, { kind, agentId, name = '' }) {
|
|
|
54
50
|
};
|
|
55
51
|
}
|
|
56
52
|
|
|
57
|
-
/** The unattended run `sessionId`
|
|
53
|
+
/** The unattended run `sessionId` is, or null for an attended session: a
|
|
54
|
+
* marked schedule/webhook run, a room member's own session, or work a
|
|
55
|
+
* schedule/webhook run started (a sub-agent at any depth, a task session) by
|
|
56
|
+
* the `run` stamped on its own record when it was created
|
|
57
|
+
* (human-gate/delegation.mjs) — however long ago that run ended, across
|
|
58
|
+
* restarts. Work a bot's attended chat or a room member started is no run. */
|
|
58
59
|
export function unattendedRunOf(sessionId) {
|
|
59
60
|
const run = runs.get(sessionId);
|
|
60
61
|
if (run) return run;
|
|
61
62
|
const member = roomMemberOfSession(sessionId);
|
|
62
|
-
|
|
63
|
+
if (member) return { kind: 'room', agentId: member.agentId, name: member.roomId };
|
|
64
|
+
const stamped = runStampOf(sessionId);
|
|
65
|
+
return stamped && (stamped.kind === 'schedule' || stamped.kind === 'webhook') && stamped.agentId
|
|
66
|
+
? { kind: stamped.kind, agentId: String(stamped.agentId), name: String(stamped.name || '') }
|
|
67
|
+
: null;
|
|
63
68
|
}
|
|
64
69
|
|
|
65
70
|
/**
|
|
@@ -98,9 +103,7 @@ export function createHeldRequests({
|
|
|
98
103
|
push = notifyHeldRequest,
|
|
99
104
|
record = recordHumanDecision,
|
|
100
105
|
agentName = defaultAgentName,
|
|
101
|
-
expiryMs = configuredExpiryMs,
|
|
102
106
|
runOf = unattendedRunOf,
|
|
103
|
-
now = Date.now,
|
|
104
107
|
log = (line) => process.stderr.write(`mixdog held-requests: ${line}\n`),
|
|
105
108
|
}) {
|
|
106
109
|
const pending = new Map();
|
|
@@ -113,7 +116,6 @@ export function createHeldRequests({
|
|
|
113
116
|
const entry = pending.get(id);
|
|
114
117
|
if (!entry) return false;
|
|
115
118
|
pending.delete(id);
|
|
116
|
-
clearTimeout(entry.timer);
|
|
117
119
|
entry.release();
|
|
118
120
|
void post(entry.agentId, { ...entry.held, status, ...(approval.device ? { device: approval.device } : {}) });
|
|
119
121
|
void Promise.resolve()
|
|
@@ -123,11 +125,12 @@ export function createHeldRequests({
|
|
|
123
125
|
return true;
|
|
124
126
|
}
|
|
125
127
|
|
|
126
|
-
/** Hold `request` (the approval hook's payload) until answered or
|
|
128
|
+
/** Hold `request` (the approval hook's payload) until answered or the run is cancelled. */
|
|
127
129
|
function hold(request = {}, { signal } = {}) {
|
|
128
130
|
const run = runOf(request.sessionId) || { kind: 'schedule', agentId: MIXY_AGENT_ID, name: '' };
|
|
131
|
+
// The scopes the gate offered (gate.mjs): the bot's own grant, or once.
|
|
132
|
+
const remember = Array.isArray(request.remember) && request.remember.length ? request.remember : ['once'];
|
|
129
133
|
const id = `held_${randomUUID()}`;
|
|
130
|
-
const ms = typeof expiryMs === 'function' ? expiryMs() : expiryMs;
|
|
131
134
|
const held = normalizeHeldRequest({
|
|
132
135
|
id,
|
|
133
136
|
status: 'pending',
|
|
@@ -145,12 +148,12 @@ export function createHeldRequests({
|
|
|
145
148
|
details: request.outbound?.details,
|
|
146
149
|
}
|
|
147
150
|
: {}),
|
|
148
|
-
remember
|
|
151
|
+
remember,
|
|
149
152
|
run: { kind: run.kind, name: run.name, sessionId: request.sessionId },
|
|
150
|
-
expiresAt: now() + ms,
|
|
151
153
|
});
|
|
152
|
-
const shape = { kind: held.kind, outbound: request.outbound, remember
|
|
154
|
+
const shape = { kind: held.kind, outbound: request.outbound, remember };
|
|
153
155
|
const gate = {
|
|
156
|
+
remember,
|
|
154
157
|
agentId: run.agentId,
|
|
155
158
|
kind: held.kind,
|
|
156
159
|
...(held.action ? { action: held.action } : {}),
|
|
@@ -167,17 +170,7 @@ export function createHeldRequests({
|
|
|
167
170
|
agentId: run.agentId,
|
|
168
171
|
resolve,
|
|
169
172
|
release: () => signal?.removeEventListener?.('abort', onAbort),
|
|
170
|
-
timer: setTimeout(
|
|
171
|
-
() =>
|
|
172
|
-
settle(
|
|
173
|
-
id,
|
|
174
|
-
{ ...normalizeHumanResponse(shape, false), reason: 'held request expired', timedOut: true },
|
|
175
|
-
'expired'
|
|
176
|
-
),
|
|
177
|
-
ms
|
|
178
|
-
),
|
|
179
173
|
};
|
|
180
|
-
entry.timer.unref?.();
|
|
181
174
|
pending.set(id, entry);
|
|
182
175
|
void post(run.agentId, held);
|
|
183
176
|
try {
|
|
@@ -219,6 +212,11 @@ function heldRequests() {
|
|
|
219
212
|
return processHeld;
|
|
220
213
|
}
|
|
221
214
|
|
|
215
|
+
/** The held requests still waiting for an answer (session bots reads them). */
|
|
216
|
+
export function pendingHeldRequests() {
|
|
217
|
+
return processHeld ? processHeld.pending() : [];
|
|
218
|
+
}
|
|
219
|
+
|
|
222
220
|
/** Hold one request for its session's agent (rooms call this from their own hook). */
|
|
223
221
|
export function holdApprovalRequest(request, options) {
|
|
224
222
|
return heldRequests().hold(request, options);
|
|
@@ -6,6 +6,8 @@ import { executeTerminalTool } from '../../runtime/terminal-bridge/client.mjs';
|
|
|
6
6
|
import { executeVisualizeTool } from '../../runtime/visualize-bridge/client.mjs';
|
|
7
7
|
import { featureEnvOverride, moduleEnabled } from '../../runtime/agent/orchestrator/runtime-core/config-helpers.mjs';
|
|
8
8
|
import { createCallerContextResolvers } from './caller-context.mjs';
|
|
9
|
+
import { unattendedApprovalPort } from '../../runtime/agent/orchestrator/session/human-gate/unattended-port.mjs';
|
|
10
|
+
import { isGrantedRun } from '../../runtime/agent/orchestrator/session/human-gate/run-policy.mjs';
|
|
9
11
|
|
|
10
12
|
export function createBridgeToolHandlers({ rt }) {
|
|
11
13
|
const { sessionIdFor, signalFor } = createCallerContextResolvers(rt);
|
|
@@ -19,9 +21,16 @@ export function createBridgeToolHandlers({ rt }) {
|
|
|
19
21
|
if (environmentDisabled(callerCtx, 'MIXDOG_FEATURE_BROWSER')) {
|
|
20
22
|
throw new Error('the browser tool is disabled in this environment');
|
|
21
23
|
}
|
|
24
|
+
const sessionId = sessionIdFor(callerCtx);
|
|
25
|
+
const run = unattendedApprovalPort()?.runOf?.(sessionId);
|
|
22
26
|
return await executeBrowserTool(args, {
|
|
23
27
|
tool: name,
|
|
24
|
-
sessionId
|
|
28
|
+
sessionId,
|
|
29
|
+
// A schedule/webhook run never asks for form submits, posts or uploads;
|
|
30
|
+
// the bot that owns the run comes from the run's record, so its `block`
|
|
31
|
+
// applies whatever the display metadata says.
|
|
32
|
+
unattendedRun: isGrantedRun(run),
|
|
33
|
+
unattendedAgent: run?.agentId || '',
|
|
25
34
|
turnId: callerCtx?.turnId || rt.session?.usageMetricsTurnId,
|
|
26
35
|
signal: signalFor(callerCtx),
|
|
27
36
|
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Optional feature tools gated by settings for model-initiated calls: office,
|
|
2
2
|
// media and tidy (each loaded on first use), and the setup tool.
|
|
3
|
-
import {
|
|
3
|
+
import { standaloneDataDir } from '../runtime-paths.mjs';
|
|
4
4
|
import { createCallerContextResolvers } from './caller-context.mjs';
|
|
5
5
|
|
|
6
6
|
export function createFeatureToolHandlers({ rt, setupTool, officeToolsEnabled, mediaToolEnabled, tidyToolEnabled }) {
|
|
@@ -17,7 +17,7 @@ export function createFeatureToolHandlers({ rt, setupTool, officeToolsEnabled, m
|
|
|
17
17
|
const { executeOfficeTool } = await import('../../runtime/office/index.mjs');
|
|
18
18
|
return await executeOfficeTool(args, {
|
|
19
19
|
cwd: callerCwd,
|
|
20
|
-
dataDir:
|
|
20
|
+
dataDir: standaloneDataDir(),
|
|
21
21
|
requestApproval: callerCtx?.toolApprovalHook,
|
|
22
22
|
sessionId: callerCtx?.sessionId,
|
|
23
23
|
toolCallId: callerCtx?.toolCallId,
|
|
@@ -7,18 +7,21 @@ import { applySessionSidebarChange } from '../../runtime/shared/session-sidebar-
|
|
|
7
7
|
import { clean } from '../../runtime/agent/orchestrator/runtime-core/session-text.mjs';
|
|
8
8
|
import { AGENT_MODE, resolveSessionMode } from '../../runtime/agent/orchestrator/session/agent-mode.mjs';
|
|
9
9
|
import { agentIdOfHomeSession } from '../../runtime/agent/orchestrator/session/agent-home.mjs';
|
|
10
|
+
import { turnHopOf } from '../../runtime/shared/bot-hops.mjs';
|
|
10
11
|
import { scheduleCallerScope } from '../services/schedule-access.mjs';
|
|
12
|
+
import { worktreeCallerScope } from '../services/worktree-access.mjs';
|
|
11
13
|
import { resolveHandoffAttachments, sessionRoots } from '../handoff-attachments.mjs';
|
|
12
14
|
|
|
13
15
|
const USER_TITLE_ERROR = 'session: the user already titled this session; the title was not changed';
|
|
14
16
|
|
|
15
|
-
/** The agent an attended agent conversation (an agent's home thread
|
|
17
|
+
/** The agent an attended agent conversation (an agent's home thread, or its
|
|
18
|
+
* member session in a group room, where the user is present too) acts as;
|
|
16
19
|
* '' for every other caller: delegated workers, coding sessions (task
|
|
17
20
|
* sessions included) and unattended schedule/webhook runs. */
|
|
18
21
|
function attendedAgentOf(session) {
|
|
19
22
|
const { mode, agentId } = resolveSessionMode({ session });
|
|
20
23
|
const { kind } = scheduleCallerScope(session);
|
|
21
|
-
return mode === AGENT_MODE && (kind === 'human' || kind === 'agent') ? agentId : '';
|
|
24
|
+
return mode === AGENT_MODE && (kind === 'human' || kind === 'agent' || kind === 'room-member') ? agentId : '';
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
/** The caller's `attachments` as stored prompt parts, resolved against its own
|
|
@@ -42,9 +45,6 @@ export function createWorkspaceToolHandlers({
|
|
|
42
45
|
getLifecycleApi = () => null,
|
|
43
46
|
executeSessionControl = null,
|
|
44
47
|
}) {
|
|
45
|
-
// The Lead's own worktree, on the user's request: the same authority the
|
|
46
|
-
// branch chip menu drives, tolerating the calling turn but nothing else
|
|
47
|
-
// running (workers, background shells).
|
|
48
48
|
const assertLead = (action, callerCtx) => {
|
|
49
49
|
const callerSessionId = callerCtx?.callerSessionId || rt.session?.id || null;
|
|
50
50
|
if (!rt.session?.id || callerSessionId !== rt.session.id) {
|
|
@@ -53,24 +53,6 @@ export function createWorkspaceToolHandlers({
|
|
|
53
53
|
return rt.session.id;
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
const worktreeAction = async (action, args, callerCtx) => {
|
|
57
|
-
const workspace = getWorkspaceApi();
|
|
58
|
-
if (!workspace) throw new Error(`session: ${action} is unavailable in this runtime`);
|
|
59
|
-
assertLead(action, callerCtx);
|
|
60
|
-
let result;
|
|
61
|
-
if (action === 'merge-worktree') {
|
|
62
|
-
result = await workspace.mergeWorkspace({ confirmed: true }, { ownTurn: true });
|
|
63
|
-
} else if (action === 'remove-worktree') {
|
|
64
|
-
result = await workspace.removeWorktree({ force: args?.force === true }, { ownTurn: true });
|
|
65
|
-
} else if (action === 'list-worktrees') {
|
|
66
|
-
result = await workspace.listWorktrees();
|
|
67
|
-
} else {
|
|
68
|
-
result = await workspace.pruneWorktrees();
|
|
69
|
-
}
|
|
70
|
-
return JSON.stringify({ action, cwd: rt.currentCwd, result }, null, 2);
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const WORKTREE_ACTIONS = new Set(['merge-worktree', 'remove-worktree', 'list-worktrees', 'prune-worktrees']);
|
|
74
56
|
const SIDEBAR_ACTIONS = new Set(['favorite', 'archive']);
|
|
75
57
|
|
|
76
58
|
// Sidebar flags only (the desktop's favorite/archive metadata).
|
|
@@ -89,7 +71,10 @@ export function createWorkspaceToolHandlers({
|
|
|
89
71
|
const session = async (args, { callerCtx, callerCwd }) => {
|
|
90
72
|
const action = clean(args?.action || (args?.path ? 'set-project' : 'status')).toLowerCase();
|
|
91
73
|
const target = clean(args?.session_id);
|
|
92
|
-
if (
|
|
74
|
+
if (
|
|
75
|
+
['list', 'bots', 'read', 'send', 'cancel', 'delete', 'create'].includes(action) ||
|
|
76
|
+
(action === 'status' && target)
|
|
77
|
+
) {
|
|
93
78
|
const callerSessionId = assertLead(action, callerCtx);
|
|
94
79
|
const callerAgentId = attendedAgentOf(rt.session);
|
|
95
80
|
if (action === 'create' && !callerAgentId) {
|
|
@@ -117,14 +102,23 @@ export function createWorkspaceToolHandlers({
|
|
|
117
102
|
return JSON.stringify(
|
|
118
103
|
await executeSessionControl(
|
|
119
104
|
{ ...rest, action },
|
|
120
|
-
{
|
|
105
|
+
{
|
|
106
|
+
callerSessionId,
|
|
107
|
+
callerAgentId,
|
|
108
|
+
callerCwd,
|
|
109
|
+
...(action === 'send' || action === 'create' ? { callerHop: turnHopOf(rt.session) } : {}),
|
|
110
|
+
// Whether a create may provision a worktree (worktree-access.mjs).
|
|
111
|
+
...(action === 'create' ? { callerScope: worktreeCallerScope(rt.session) } : {}),
|
|
112
|
+
// Which bots and sessions it may see (bot-status.mjs).
|
|
113
|
+
...(action === 'bots' || action === 'list' ? { callerScope: scheduleCallerScope(rt.session) } : {}),
|
|
114
|
+
...(attachmentParts.length ? { attachmentParts } : {}),
|
|
115
|
+
}
|
|
121
116
|
)
|
|
122
117
|
);
|
|
123
118
|
}
|
|
124
119
|
if (target && target !== assertLead(action, callerCtx)) {
|
|
125
120
|
throw new Error(`session: action=${action} only applies to the current session`);
|
|
126
121
|
}
|
|
127
|
-
if (WORKTREE_ACTIONS.has(action)) return worktreeAction(action, args, callerCtx);
|
|
128
122
|
if (SIDEBAR_ACTIONS.has(action)) return sidebarAction(action, args, callerCtx);
|
|
129
123
|
let currentCwd = callerCwd;
|
|
130
124
|
if (action === 'status' || action === 'list-projects' || action === 'set-project') assertLead(action, callerCtx);
|
|
@@ -252,6 +246,10 @@ export function createWorkspaceToolHandlers({
|
|
|
252
246
|
clientHostPid: callerCtx?.clientHostPid || rt.session?.clientHostPid || process.pid,
|
|
253
247
|
signal: callerCtx?.signal,
|
|
254
248
|
notifyFn: notifyFnForSession(callerSessionId),
|
|
249
|
+
// The jobs it starts report back at this turn's bot-chain hop (bot-hops.mjs).
|
|
250
|
+
...(turnHopOf(rt.session) > 0 ? { hop: turnHopOf(rt.session) } : {}),
|
|
251
|
+
// The jobs this call starts are recorded under it (agent-task-starts.mjs).
|
|
252
|
+
...(callerCtx?.toolCallId ? { toolCallId: callerCtx.toolCallId } : {}),
|
|
255
253
|
});
|
|
256
254
|
},
|
|
257
255
|
};
|
|
@@ -16,6 +16,10 @@ import {
|
|
|
16
16
|
clean,
|
|
17
17
|
} from '../../runtime/agent/orchestrator/runtime-core/session-text.mjs';
|
|
18
18
|
|
|
19
|
+
import {
|
|
20
|
+
incomingTailOf,
|
|
21
|
+
wantsIncomingTail,
|
|
22
|
+
} from '../../runtime/agent/orchestrator/session/store-summary-last-message.mjs';
|
|
19
23
|
import { isRealTurnMessage } from '../../runtime/agent/orchestrator/session/compact/user-message-kind.mjs';
|
|
20
24
|
import { realTurnCount as realTurnCountOf } from '../../runtime/agent/orchestrator/session/store-summary-fields.mjs';
|
|
21
25
|
|
|
@@ -44,6 +48,7 @@ function previewOf(s) {
|
|
|
44
48
|
let preview = isSessionPreviewNoise(rawPreview) ? '' : cleanSessionPreview(rawPreview);
|
|
45
49
|
let messageCount = Math.max(0, Number(s.messageCount) || 0);
|
|
46
50
|
let realTurnCount = realTurnCountOf(s);
|
|
51
|
+
let incomingTail = Array.isArray(s.incomingTail) ? s.incomingTail : null;
|
|
47
52
|
if (!preview && Array.isArray(s.messages)) {
|
|
48
53
|
realTurnCount = s.messages.filter(isRealTurnMessage).length;
|
|
49
54
|
const msgs = s.messages;
|
|
@@ -55,8 +60,9 @@ function previewOf(s) {
|
|
|
55
60
|
.filter(Boolean);
|
|
56
61
|
preview = userPreviews[0] || '';
|
|
57
62
|
messageCount = msgs.filter((m) => m && (m.role === 'user' || m.role === 'assistant')).length;
|
|
63
|
+
if (wantsIncomingTail(s.id)) incomingTail = incomingTailOf(msgs);
|
|
58
64
|
}
|
|
59
|
-
return { preview, messageCount, realTurnCount };
|
|
65
|
+
return { preview, messageCount, realTurnCount, incomingTail };
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
/** `working`: this session's turn is running in the daemon right now. */
|
|
@@ -70,7 +76,7 @@ export function leadSessionRow(s, working = false) {
|
|
|
70
76
|
// One-shot `mixdog exec` runs are never resumable conversations.
|
|
71
77
|
if (sourceType === 'exec') return null;
|
|
72
78
|
if (!agentSession && !isLeadShaped(s, owner, sourceType)) return null;
|
|
73
|
-
const { preview, messageCount, realTurnCount } = previewOf(s);
|
|
79
|
+
const { preview, messageCount, realTurnCount, incomingTail } = previewOf(s);
|
|
74
80
|
if (!preview && messageCount === 0) return null;
|
|
75
81
|
const lastMessageRoutine = normalizeRoutineProvenance(s.lastMessageRoutine);
|
|
76
82
|
return {
|
|
@@ -95,6 +101,10 @@ export function leadSessionRow(s, working = false) {
|
|
|
95
101
|
model: s.model,
|
|
96
102
|
provider: s.provider,
|
|
97
103
|
messageCount,
|
|
104
|
+
// Where the messages that arrived (not the user's own, not tool calls)
|
|
105
|
+
// sit among the counted ones: a bot row's unread pill counts those past
|
|
106
|
+
// the read cursor. Absent when unknown; clients then show one.
|
|
107
|
+
...(incomingTail ? { incomingTail } : {}),
|
|
98
108
|
title: cleanSessionPreview(s.title || '', 100),
|
|
99
109
|
preview,
|
|
100
110
|
// The latest user or assistant line (an agent contact's row shows it).
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { SessionClosedError } from '../../runtime/agent/orchestrator/session/manager/session-errors.mjs';
|
|
9
9
|
import { forgetSessionSaveBaseline } from '../../runtime/agent/orchestrator/session/store/save-worker.mjs';
|
|
10
10
|
import { flushAllIndexWrites } from '../services/agent-tool/index-write-queue.mjs';
|
|
11
|
+
import { PROCESS_RESTART_FAILURE } from '../services/agent-tool/worker-index/row-liveness.mjs';
|
|
11
12
|
import { unregisterLiveSession } from '../../runtime/shared/staged-update.mjs';
|
|
12
13
|
import { abortRuntime, closeCanonicalSession, closeOwnSession, dispatchSessionEnd } from './teardown/session-close.mjs';
|
|
13
14
|
import { settleAll, settleDetached, startRuntimeStops, startWorkStops } from './teardown/runtime-stops.mjs';
|
|
@@ -111,11 +112,14 @@ export function createTeardown(deps, { ingestSessionIntoMemory, closeSurfaceSess
|
|
|
111
112
|
function reapWork(reason, scope) {
|
|
112
113
|
if (!scope.teardownReapsWork) return;
|
|
113
114
|
try {
|
|
114
|
-
// A task that dies for a reason its owner never asked for must still be
|
|
115
|
+
// A task that dies for a reason its owner never asked for must still be
|
|
116
|
+
// reported: now for a scoped close; for a process exit (its owner is
|
|
117
|
+
// closing too) by the next process, which tells the owner of each agent
|
|
118
|
+
// turn the exit cut off (agent-tool restart-notify).
|
|
115
119
|
cancelBackgroundTasks(
|
|
116
120
|
scope.scopedTeardown
|
|
117
121
|
? { reason, notify: true, executionSessionId: scope.closingSessionId }
|
|
118
|
-
: { reason, notify: false }
|
|
122
|
+
: { reason, notify: false, terminalReason: PROCESS_RESTART_FAILURE }
|
|
119
123
|
);
|
|
120
124
|
} catch {}
|
|
121
125
|
}
|
|
@@ -204,7 +208,11 @@ export function createTeardown(deps, { ingestSessionIntoMemory, closeSurfaceSess
|
|
|
204
208
|
const settled = () => {
|
|
205
209
|
outstandingCloses.delete(closing);
|
|
206
210
|
};
|
|
207
|
-
|
|
211
|
+
// processExit: the workers close, their rows stay for the next process.
|
|
212
|
+
closing = new Promise((resolve) => resolve(agentTool.closeAll(reason, { processExit: true }))).then(
|
|
213
|
+
settled,
|
|
214
|
+
settled
|
|
215
|
+
);
|
|
208
216
|
outstandingCloses.add(closing);
|
|
209
217
|
try {
|
|
210
218
|
await withTeardownDeadline(closing, CLOSE_ALL_DEADLINE_MS, false);
|