mixdog 1.3.5 → 1.4.0
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/NOTICE.md +2 -2
- package/README.md +2 -2
- package/package.json +2 -11
- package/scripts/daemon-stub.mjs +1 -1
- package/scripts/gate-local.mjs +4 -2
- package/scripts/native-release-status.mjs +2 -2
- package/scripts/recall-history-cases.json +1 -1
- package/scripts/suite-health.mjs +10 -1
- package/scripts/test.mjs +7 -11
- package/src/agents/reviewer/AGENT.md +7 -11
- package/src/agents/reviewer/agent.json +1 -1
- package/src/defaults/shipped-history.json +17 -1
- package/src/defaults/skills/browser-use/SKILL.md +59 -11
- package/src/defaults/skills/code-tidy/SKILL.md +142 -270
- package/src/defaults/skills/code-tidy/references/agent-cleanup.md +4 -4
- package/src/defaults/skills/code-tidy/references/cleanup-report.md +31 -76
- package/src/defaults/skills/code-tidy/references/dead-code.md +6 -12
- package/src/defaults/skills/computer-use/SKILL.md +33 -9
- package/src/defaults/skills/setup/SKILL.md +22 -0
- package/src/defaults/skills/setup/references/actions.md +39 -5
- package/src/defaults/skills/setup/references/surfaces.md +11 -2
- package/src/defaults/skills/visualize/SKILL.md +2 -1
- package/src/lib/rules-builder.cjs +10 -8
- package/src/rules/agent/AGENT.md +6 -6
- package/src/rules/lead/LEAD.md +18 -20
- package/src/rules/shared/05-tool-calls.md +5 -6
- package/src/rules/shared/10-tool-workflow.md +2 -0
- package/src/rules/shared/60-verification.md +7 -5
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -3
- package/src/runtime/agent/orchestrator/agent-runtime/title-completion.mjs +3 -1
- package/src/runtime/agent/orchestrator/agent-trace-format.mjs +3 -1
- package/src/runtime/agent/orchestrator/config.mjs +17 -1
- package/src/runtime/agent/orchestrator/context/collect.mjs +3 -0
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +72 -67
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +54 -1
- package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +3 -3
- package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +176 -72
- package/src/runtime/agent/orchestrator/mcp/client.mjs +19 -0
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +181 -133
- package/src/runtime/agent/orchestrator/providers/admission-scheduler.mjs +42 -6
- package/src/runtime/agent/orchestrator/providers/anthropic-cache-warm.mjs +165 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-request/gzip-post.mjs +14 -14
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +145 -66
- package/src/runtime/agent/orchestrator/providers/anthropic-overload-fallback.mjs +25 -3
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +64 -33
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +135 -87
- package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +123 -102
- package/src/runtime/agent/orchestrator/providers/cache-warm-admission.mjs +90 -0
- package/src/runtime/agent/orchestrator/providers/cursor-wire-transport.mjs +25 -9
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +22 -13
- package/src/runtime/agent/orchestrator/providers/lib/oauth-token-utils.mjs +17 -3
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +52 -10
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +8 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/npm-cli-version.mjs +11 -3
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +10 -9
- package/src/runtime/agent/orchestrator/providers/openai-ws-send/send-context.mjs +22 -3
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/attempt-context.mjs +43 -5
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/handshake-failure.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-send-attempts/stream-failure.mjs +6 -3
- package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +65 -1
- package/src/runtime/agent/orchestrator/providers/quota-reading.mjs +38 -12
- package/src/runtime/agent/orchestrator/providers/registry.mjs +26 -0
- package/src/runtime/agent/orchestrator/providers/retry-executor.mjs +39 -7
- package/src/runtime/agent/orchestrator/providers/statusline-route-meta.mjs +6 -0
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +12 -7
- package/src/runtime/agent/orchestrator/runtime-core/compaction-config-keys.mjs +62 -0
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +37 -16
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-delta.mjs +100 -23
- package/src/runtime/agent/orchestrator/runtime-core/session-text.mjs +2 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +19 -4
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +125 -30
- package/src/runtime/agent/orchestrator/session/cache-warm.mjs +792 -0
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +133 -22
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +475 -58
- package/src/runtime/agent/orchestrator/session/compaction-archive.mjs +42 -17
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +11 -5
- package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +0 -2
- package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +36 -4
- package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +18 -22
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +32 -3
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/loop/no-tool-turn.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/route-fallback.mjs +17 -3
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +7 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/after-hook.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +16 -2
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +16 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +3 -10
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +12 -3
- package/src/runtime/agent/orchestrator/session/manager/ask-queue.mjs +12 -2
- package/src/runtime/agent/orchestrator/session/manager/ask-session.mjs +19 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +133 -90
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-state.mjs +31 -4
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +30 -18
- package/src/runtime/agent/orchestrator/session/manager/owner-route-fallbacks.mjs +23 -13
- package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +11 -2
- package/src/runtime/agent/orchestrator/session/manager/provider-replay.mjs +13 -0
- package/src/runtime/agent/orchestrator/session/manager/route-fallback-chain.mjs +129 -0
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +20 -2
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +7 -2
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint-journal.mjs +102 -15
- package/src/runtime/agent/orchestrator/session/manager/turn-checkpoint.mjs +18 -5
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +19 -8
- package/src/runtime/agent/orchestrator/session/prompt-cache-idle-gaps.mjs +113 -0
- package/src/runtime/agent/orchestrator/session/prompt-cache-touch-store.mjs +127 -0
- package/src/runtime/agent/orchestrator/session/routine-result.mjs +36 -9
- package/src/runtime/agent/orchestrator/session/sensitive-projection.mjs +100 -0
- package/src/runtime/agent/orchestrator/session/sensitive-values.mjs +257 -0
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +20 -7
- package/src/runtime/agent/orchestrator/session/side-question.mjs +18 -0
- package/src/runtime/agent/orchestrator/session/skill-update-notice.mjs +60 -0
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +6 -3
- package/src/runtime/agent/orchestrator/session/store/save-delta.mjs +9 -5
- package/src/runtime/agent/orchestrator/session/store/serialize.mjs +9 -8
- package/src/runtime/agent/orchestrator/session/store/session-persistence-events.mjs +29 -0
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +8 -6
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +12 -2
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +44 -14
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +84 -3
- package/src/runtime/agent/orchestrator/session/stored-attachment-history.mjs +32 -0
- package/src/runtime/agent/orchestrator/session/thinking-binding.mjs +108 -0
- package/src/runtime/agent/orchestrator/session/tool-batch/pre-dispatch.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +18 -1
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-status.mjs +9 -7
- package/src/runtime/agent/orchestrator/session/transcript-restore/tool-result-text.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/turn-failure.mjs +5 -1
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +5 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +12 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/misuse-guard.mjs +240 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/result-format.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/shell-cwd.mjs +38 -0
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +25 -5
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +65 -7
- package/src/runtime/agent/orchestrator/tools/builtin/shell-runtime.mjs +7 -1
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +36 -13
- package/src/runtime/browser-bridge/action-schema.mjs +13 -2
- package/src/runtime/browser-bridge/client.mjs +73 -8
- package/src/runtime/browser-bridge/input-fields.mjs +8 -9
- package/src/runtime/browser-bridge/mail-links.mjs +107 -0
- package/src/runtime/browser-bridge/tool-defs.mjs +1 -1
- package/src/runtime/channels/lib/config.mjs +6 -61
- package/src/runtime/channels/lib/crash-log.mjs +1 -1
- package/src/runtime/channels/lib/event-pipeline.mjs +4 -19
- package/src/runtime/channels/lib/event-queue.mjs +3 -18
- package/src/runtime/channels/lib/owned-runtime/automation-services.mjs +2 -2
- package/src/runtime/channels/lib/owned-runtime/automation-start.mjs +3 -4
- package/src/runtime/channels/lib/owned-runtime/config-reload.mjs +4 -59
- package/src/runtime/channels/lib/owned-runtime/owned-start.mjs +33 -115
- package/src/runtime/channels/lib/owned-runtime/owned-stop.mjs +5 -22
- package/src/runtime/channels/lib/owned-runtime/state.mjs +2 -8
- package/src/runtime/channels/lib/owned-runtime.mjs +6 -23
- package/src/runtime/channels/lib/parent-bridge.mjs +2 -2
- package/src/runtime/channels/lib/runtime-paths.mjs +4 -43
- package/src/runtime/channels/lib/scheduler.mjs +33 -147
- package/src/runtime/channels/lib/schedules-db.mjs +34 -11
- package/src/runtime/channels/lib/status-snapshot.mjs +1 -1
- package/src/runtime/channels/lib/tool-dispatch.mjs +1 -2
- package/src/runtime/channels/lib/webhooks-db.mjs +5 -9
- package/src/runtime/channels/lib/worker-bootstrap.mjs +0 -1
- package/src/runtime/channels/lib/worker-ipc.mjs +0 -1
- package/src/runtime/channels/lib/worker-main.mjs +10 -34
- package/src/runtime/computer-bridge/action-schema.mjs +42 -1
- package/src/runtime/computer-bridge/actions.mjs +9 -1
- package/src/runtime/computer-bridge/client.mjs +180 -8
- package/src/runtime/computer-bridge/core-actions.mjs +2 -2
- package/src/runtime/computer-bridge/error-recovery.mjs +27 -2
- package/src/runtime/computer-bridge/linux-readiness.mjs +65 -23
- package/src/runtime/computer-bridge/pending-continuation.mjs +1 -1
- package/src/runtime/connectors/connector-accounts-mcp.mjs +230 -0
- package/src/runtime/connectors/gmail-app-password.mjs +172 -39
- package/src/runtime/connectors/google-mcp.mjs +10 -12
- package/src/runtime/memory/lib/pg/adapter.mjs +77 -70
- package/src/runtime/memory/lib/pg/supervisor.mjs +24 -12
- package/src/runtime/memory/lib/runtime-fetcher.mjs +23 -5
- package/src/runtime/session-search/session-search-db.mjs +73 -9
- package/src/runtime/session-search/session-search-ingest.mjs +110 -20
- package/src/runtime/shared/abort-race.mjs +89 -0
- package/src/runtime/shared/agent-avatar.d.mts +0 -1
- package/src/runtime/shared/agent-kind.mjs +4 -3
- package/src/runtime/shared/bounded-download.mjs +8 -3
- package/src/runtime/shared/config.mjs +2 -13
- package/src/runtime/shared/connector-accounts.mjs +20 -10
- package/src/runtime/shared/connector-catalog.d.mts +29 -0
- package/src/runtime/shared/connector-catalog.mjs +150 -0
- package/src/runtime/shared/connector-triggers.mjs +22 -19
- package/src/runtime/shared/defaults-separation.mjs +2 -14
- package/src/runtime/shared/delegated-approval-host.mjs +103 -11
- package/src/runtime/shared/err-text.mjs +24 -15
- package/src/runtime/shared/file-permissions.d.mts +0 -8
- package/src/runtime/shared/file-permissions.mjs +0 -11
- package/src/runtime/shared/git-direct.test-support.mjs +19 -0
- package/src/runtime/shared/heartbeat-interval.d.mts +4 -0
- package/src/runtime/shared/heartbeat-interval.mjs +19 -0
- package/src/runtime/shared/idle-auto-clear-gate.mjs +104 -0
- package/src/runtime/shared/llm/usage-rollup.mjs +1 -1
- package/src/runtime/shared/mixy-presence.mjs +22 -0
- package/src/runtime/shared/orchestration.d.mts +2 -0
- package/src/runtime/shared/pg-schema-db.mjs +27 -16
- package/src/runtime/shared/profile-config.cjs +1 -1
- package/src/runtime/shared/prompt-origin.d.mts +4 -0
- package/src/runtime/shared/prompt-origin.mjs +21 -0
- package/src/runtime/shared/provider-accounts.mjs +7 -1
- package/src/runtime/shared/provider-display-name.mjs +29 -0
- package/src/runtime/shared/provider-timeout-phase.mjs +2 -0
- package/src/runtime/shared/routine-trigger.d.mts +2 -0
- package/src/runtime/shared/routine-trigger.mjs +10 -0
- package/src/runtime/shared/sensitive-path-rules.d.mts +2 -10
- package/src/runtime/shared/sensitive-path-rules.mjs +19 -41
- package/src/runtime/shared/session-activity-signal.mjs +34 -1
- package/src/runtime/shared/session-sidebar-host.d.mts +1 -1
- package/src/runtime/shared/session-sidebar-host.mjs +7 -3
- package/src/runtime/shared/session-turn-prelude.mjs +18 -0
- package/src/runtime/shared/tool-result-summary.mjs +1 -14
- package/src/runtime/shared/worktrees/test-support.mjs +9 -4
- package/src/runtime/terminal-bridge/client.mjs +10 -1
- package/src/runtime/visualize-bridge/client.mjs +27 -8
- package/src/runtime/visualize-bridge/tool-defs.mjs +22 -8
- package/src/runtime/visualize-bridge/tool-meta.d.mts +5 -0
- package/src/runtime/visualize-bridge/tool-meta.mjs +22 -0
- package/src/runtime/web-search/lib/fetch-pipeline.mjs +2 -2
- package/src/session-runtime/agent-home-delivery.mjs +448 -185
- package/src/session-runtime/agent-task-sessions.mjs +329 -180
- package/src/session-runtime/boot/apis.mjs +9 -0
- package/src/session-runtime/boot/infrastructure.mjs +4 -0
- package/src/session-runtime/boot/providers.mjs +3 -0
- package/src/session-runtime/boot/tools.mjs +6 -1
- package/src/session-runtime/config-lifecycle.mjs +6 -0
- package/src/session-runtime/connector-merge-migration.mjs +305 -0
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +132 -28
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +2 -0
- package/src/session-runtime/lifecycle/inheritance.mjs +16 -3
- package/src/session-runtime/lifecycle/session-catalog.mjs +3 -1
- package/src/session-runtime/lifecycle/teardown/runtime-stops.mjs +50 -4
- package/src/session-runtime/lifecycle/teardown.mjs +23 -5
- package/src/session-runtime/mcp-glue/server-catalog.mjs +55 -3
- package/src/session-runtime/mcp-oauth-login.mjs +5 -3
- package/src/session-runtime/mixy-heartbeat.mjs +153 -33
- package/src/session-runtime/notification-bus.mjs +31 -117
- package/src/session-runtime/notification-completion-queue.mjs +54 -0
- package/src/session-runtime/notification-listeners.mjs +76 -0
- package/src/session-runtime/owned-automation-run.mjs +2 -1
- package/src/session-runtime/prewarm/channel-start.mjs +3 -7
- package/src/session-runtime/resource-mcp-api.mjs +143 -224
- package/src/session-runtime/resource-mcp-connector-accounts.mjs +163 -0
- package/src/session-runtime/resource-mcp-oauth-api.mjs +217 -0
- package/src/session-runtime/resource-mcp-secrets.mjs +82 -0
- package/src/session-runtime/resource-mcp-servers.mjs +78 -0
- package/src/session-runtime/resource-mcp-store.mjs +49 -0
- package/src/session-runtime/routine-owner.mjs +40 -9
- package/src/session-runtime/services/agent-tool/close-flow.mjs +3 -0
- package/src/session-runtime/services/agent-tool/spawn-preset.mjs +7 -2
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +1 -0
- package/src/session-runtime/services/agent-tool/worker-index/awaiting-user-sync.mjs +51 -0
- package/src/session-runtime/services/agent-tool/worker-index/disposal.mjs +55 -0
- package/src/session-runtime/services/agent-tool/worker-index/released-store.mjs +123 -0
- package/src/session-runtime/services/agent-tool/worker-index/restart-settlement.mjs +112 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-reads.mjs +36 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +2 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +17 -4
- package/src/session-runtime/services/agent-tool/worker-index/row-writes.mjs +58 -0
- package/src/session-runtime/services/agent-tool/worker-index.mjs +41 -241
- package/src/session-runtime/services/agent-tool/worker-rows.mjs +3 -0
- package/src/session-runtime/services/channel-admin.mjs +7 -13
- package/src/session-runtime/services/channel-session-router.mjs +4 -2
- package/src/session-runtime/services/seeds.mjs +0 -28
- package/src/session-runtime/session-compaction-sync.mjs +27 -0
- package/src/session-runtime/session-create/session-options.mjs +1 -0
- package/src/session-runtime/settings-builtin-tools-api.mjs +11 -0
- package/src/session-runtime/settings-compaction-api.mjs +2 -40
- package/src/session-runtime/settings-system-api.mjs +13 -1
- package/src/session-runtime/setup-tool/agent-settings-actions.mjs +65 -0
- package/src/session-runtime/setup-tool/executor.mjs +145 -22
- package/src/session-runtime/setup-tool/extended-actions.mjs +8 -3
- package/src/session-runtime/setup-tool/session-route-actions.mjs +152 -0
- package/src/session-runtime/setup-tool/settings-contract.mjs +4 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +64 -5
- package/src/session-runtime/tool-policy/agent-profile-fold.mjs +17 -13
- package/src/session-runtime/tool-policy/policy-stage.mjs +16 -2
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +1 -0
- package/src/session-runtime/workflow-agents-api/style-and-mode.mjs +4 -0
- package/src/standalone/channel-transport/client-registry/client-records.mjs +65 -0
- package/src/standalone/channel-transport/client-registry/client-registration.mjs +118 -0
- package/src/standalone/channel-transport/client-registry.mjs +24 -163
- package/src/standalone/channel-transport.mjs +1 -1
- package/src/standalone/daemon-channels-loader.mjs +10 -8
- package/src/standalone/daemon-session-control/list-page.mjs +72 -0
- package/src/standalone/daemon-session-control/request.mjs +51 -0
- package/src/standalone/daemon-session-control/room-host.mjs +57 -0
- package/src/standalone/daemon-session-control/route-control.mjs +48 -0
- package/src/standalone/daemon-session-control/send-turn.mjs +60 -0
- package/src/standalone/daemon-session-control/worktree-control.mjs +40 -0
- package/src/standalone/daemon-session-control.mjs +124 -188
- package/src/standalone/daemon.mjs +26 -3
- package/src/standalone/session-client.mjs +7 -3
- package/src/standalone/session-protocol.mjs +5 -0
- package/src/standalone/session-service/agent-tree/agent-child.mjs +1 -0
- package/src/standalone/session-service/quota-resume.mjs +3 -0
- package/src/standalone/session-service/retention/busy.mjs +65 -1
- package/src/standalone/session-service/session-calls/session-action.mjs +23 -2
- package/src/standalone/session-service/session-calls/session-views.mjs +8 -0
- package/src/standalone/session-tool-output.mjs +15 -7
- package/src/tui/app/model-options.mjs +3 -28
- package/src/tui/dist/index.mjs +58 -64
- package/src/tui/session/agent-job-feed/model-notification.mjs +3 -0
- package/src/tui/session/initial-state.mjs +3 -0
- package/src/tui/session/notice-surface.mjs +7 -1
- package/src/tui/session/queue-helpers.mjs +3 -42
- package/src/tui/session/session-api/routes-agent-definitions.mjs +14 -2
- package/src/tui/session/session-api/routes-write.mjs +5 -1
- package/src/tui/session/session-api/routes.mjs +1 -0
- package/src/tui/session/session-api/settings.mjs +17 -1
- package/src/tui/session/session-flow/auto-clear.mjs +4 -33
- package/src/tui/session/session-flow/drain-closed-queue.mjs +38 -0
- package/src/tui/session/session-flow/drain-enqueue.mjs +86 -0
- package/src/tui/session/session-flow/drain-retry.mjs +35 -0
- package/src/tui/session/session-flow/drain.mjs +118 -149
- package/src/tui/session/session-flow/queue/entry-shape.mjs +5 -0
- package/src/tui/session/session-flow/queue/take-entries.mjs +5 -2
- package/src/tui/session/tool-approval-delegation.mjs +64 -0
- package/src/tui/session/tool-approval-request.mjs +39 -0
- package/src/tui/session/tool-approval-settle.mjs +62 -0
- package/src/tui/session/tool-approval.mjs +69 -115
- package/src/tui/session/tui-steering-persist.mjs +8 -1
- package/src/tui/session/turn-stream.mjs +19 -2
- package/src/tui/session/turn.mjs +1 -0
- package/src/vendor/statusline/bin/statusline-route.mjs +1 -219
- package/src/vendor/statusline/src/gateway/route-meta.mjs +35 -13
- package/scripts/code-graph-description-contract.mjs +0 -188
- package/src/runtime/channels/lib/owned-runtime/ownership-refresh.mjs +0 -36
|
@@ -1,88 +1,43 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Candidate list and report
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
the final report template. Findings and their risk tiers come from the
|
|
6
|
-
agent-level analysis; this file owns how they are recorded and reported.
|
|
3
|
+
Findings and risk tiers come from `agent-cleanup.md`; this file owns how they
|
|
4
|
+
are recorded and reported. Keep the list in the conversation, not a file.
|
|
7
5
|
|
|
8
|
-
##
|
|
6
|
+
## Candidates
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
using stable candidate IDs:
|
|
8
|
+
One line per candidate, with a stable ID (`C-01`):
|
|
12
9
|
|
|
13
10
|
```text
|
|
14
|
-
[ID] path · symbol → problem → cost
|
|
11
|
+
[ID] path · symbol → problem → cost → action | tier: SAFE/CAREFUL/RISKY | confidence: high/medium/low | status: completed/kept/unfinished
|
|
15
12
|
```
|
|
16
13
|
|
|
17
|
-
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
the
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
finding, do not register them or write a Keep justification.
|
|
29
|
-
- **Cost, Confidence & Nits**: A finding that cannot name its cost is a nit:
|
|
30
|
-
do not register it. An unresolved registered finding remains `unfinished`;
|
|
31
|
-
uncertainty is not evidence for keeping it. Confidence is `low` when
|
|
32
|
-
current code, callers, contracts, and tests do not explain why the code exists.
|
|
33
|
-
Consult history only to resolve a specific remaining question. Medium/low
|
|
34
|
-
confidence candidates stay unfinished until that question is resolved; apply
|
|
35
|
-
approval does not authorize guessing that they are safe to delete.
|
|
36
|
-
- **Statuses & Reconciliation Invariants**:
|
|
37
|
-
- `completed`: verified done, with evidence of what and how changed.
|
|
38
|
-
- `kept`: preserved with concrete evidence (documented keep rule or external contract).
|
|
39
|
-
- `unfinished`: work remaining, with substatuses: `pending`, `in_progress`, `blocked`, `deferred`, or `unverified`.
|
|
40
|
-
- Formula for registered candidates: `Total Candidate IDs = Completed + Kept + Unfinished Remaining`. Counts must reconcile exactly.
|
|
14
|
+
- Register only a lens finding with a path+symbol location, a cost, and an
|
|
15
|
+
action. A finding that cannot name its cost is a nit: drop it. Threshold
|
|
16
|
+
hits (long files or functions, deep nesting) are signals, not candidates.
|
|
17
|
+
- Findings sharing a root cause group under one ID, each member keeping its
|
|
18
|
+
path and symbol. Code moved by an extraction keeps its origin ID.
|
|
19
|
+
- Confidence is `low` when callers, contracts, and tests do not explain why
|
|
20
|
+
the code exists; medium/low candidates stay unfinished until that question
|
|
21
|
+
is resolved. Approval to apply does not authorize guessing.
|
|
22
|
+
- `completed` carries evidence of what changed; `kept` carries a concrete
|
|
23
|
+
reason (keep rule or external contract); `unfinished` carries the blocker
|
|
24
|
+
(pending, blocked, deferred, unverified).
|
|
41
25
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
with remaining partitions or candidates is **round complete, overall partial**,
|
|
46
|
-
with the remaining paths, IDs, and next work.
|
|
47
|
-
Skipped, failed, or unverified checks never count as passed.
|
|
26
|
+
Overall cleanup is complete only when every partition is done, the final
|
|
27
|
+
check has passed, and every candidate is completed or kept with evidence.
|
|
28
|
+
Otherwise report "overall partial" with the remaining paths and IDs.
|
|
48
29
|
|
|
49
|
-
## Final report
|
|
50
|
-
|
|
51
|
-
This is the shape of the closing reply after the last round; earlier rounds
|
|
52
|
-
close as the skill body's section 7 describes, while the inventory accumulates
|
|
53
|
-
in the form above.
|
|
30
|
+
## Final report
|
|
54
31
|
|
|
55
32
|
```text
|
|
56
|
-
Scope: <
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
✓ [Quality/SAFE] removed comment narrating the change in `renderRow` → deleted redundant comment
|
|
67
|
-
✓ [Reuse/CAREFUL] replaced manual join with `joinPath` from src/shared/path.mjs → consolidated helper
|
|
68
|
-
|
|
69
|
-
Kept / Not Applicable (evidenced)
|
|
70
|
-
[ID] path/file.ts · symbol
|
|
71
|
-
- [Keep/Contract] public export `parseConfig` kept → external contract
|
|
72
|
-
- [Keep/Rule] redundant-looking guard in `fetchUser` kept → validates untrusted network input
|
|
73
|
-
|
|
74
|
-
Unfinished (remaining candidates)
|
|
75
|
-
[ID] path/file.ts · symbol
|
|
76
|
-
☐ [Structure/CAREFUL] split `handleRequest` responsibility · Status: pending|in_progress|blocked|deferred|unverified
|
|
77
|
-
Remaining: extract auth sub-handler · Reason: waiting for auth test fixture · Next: Round <N+1>
|
|
78
|
-
|
|
79
|
-
Noticed but not applied (report-only or out of scope)
|
|
80
|
-
[ID] ⚠ [Altitude/RISKY] special case for caller X in `run` (src/core/run.mjs) — separate correction · coverage: none · Status: deferred
|
|
81
|
-
[ID] ⚠ [Quality] two equal rewrites of `parseInput`; principles could not decide · Status: blocked
|
|
82
|
-
|
|
83
|
-
Bugs found (not fixed here): <correctness issues surfaced while cleaning>
|
|
84
|
-
Verification: tests <passed/failed/skipped/baseline-excluded counts> · typecheck <result> · lint <remaining diagnostics>
|
|
85
|
-
Blocked or unavailable verification (required; write "none"): <check> — <engine unresolved through tidy | runner broken | lane conflict> → <paths left unverified>
|
|
86
|
-
Needs your decision: <one consolidated list — RISKY findings, bugs found, unresolved intent, unfinished candidates>
|
|
87
|
-
Next round: <scope and IDs planned for next round, or none if overall complete>
|
|
33
|
+
Scope: <paths | whole project> · Mode: report|apply · Overall: complete|partial
|
|
34
|
+
Deterministic: engines used/missing · files changed · diagnostics remaining · structural applied/skipped
|
|
35
|
+
Completed: [ID] path · symbol — [Lens/TIER] what changed
|
|
36
|
+
Kept: [ID] path · symbol — reason
|
|
37
|
+
Unfinished: [ID] path · symbol — remaining work · status · next
|
|
38
|
+
Noticed, not applied (RISKY or out of scope): [ID] path · symbol — why · test coverage
|
|
39
|
+
Bugs found (not fixed here): <issues>
|
|
40
|
+
Verification: tests <result> · typecheck <result> · tidy check <remaining diagnostics> · pre-existing failures <list|none>
|
|
41
|
+
Blocked or unverified: <check> — <reason> → <paths> (write "none" if none)
|
|
42
|
+
Needs your decision: <RISKY findings, bugs, unresolved intent, unfinished candidates>
|
|
88
43
|
```
|
|
@@ -19,9 +19,7 @@ never route one through `tidy` (they are not tidy engines):
|
|
|
19
19
|
| `deadcode` (Go, `golang.org/x/tools`) / `cargo machete` | unreachable functions / unused crates | only when on PATH |
|
|
20
20
|
| `code_graph mode:symbols` per selected file | private helpers with no callers (`callers`) | universal, no install |
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
Do not add stricter compiler flags for a routine cleanup check; an explicitly
|
|
24
|
-
requested additional diagnostic does not redefine the project's build criteria.
|
|
22
|
+
Do not add stricter compiler flags for a routine cleanup.
|
|
25
23
|
|
|
26
24
|
An import the project cannot resolve, or one whose package is absent from the
|
|
27
25
|
manifest, is not dead code but a phantom dependency: report it under "Bugs
|
|
@@ -48,7 +46,7 @@ found" and never settle it by installing the package.
|
|
|
48
46
|
module for registration or initialization. Preserve required initialization
|
|
49
47
|
rather than deleting it with the binding.
|
|
50
48
|
5. Record the symbol, kind, classified usage and contract evidence, side-effect
|
|
51
|
-
result, and proposed action in the
|
|
49
|
+
result, and proposed action in the candidate list.
|
|
52
50
|
|
|
53
51
|
## Never dead
|
|
54
52
|
|
|
@@ -81,9 +79,7 @@ evidence. Apply this procedure before classifying an old path as dead:
|
|
|
81
79
|
4. For a verified obsolete path, inventory its callers, flags/config, tests,
|
|
82
80
|
docs, files, and dependencies. Remove only approved members in the order
|
|
83
81
|
below; request scope expansion before editing related files outside it.
|
|
84
|
-
5.
|
|
85
|
-
documented checks. Record the retirement evidence and any remaining items.
|
|
86
|
-
A still-required path is kept with its contract; an unknown obligation
|
|
82
|
+
5. Record the retirement evidence and any remaining items. A still-required path is kept with its contract; an unknown obligation
|
|
87
83
|
leaves the candidate blocked, not assumed obsolete.
|
|
88
84
|
|
|
89
85
|
## Remove in order
|
|
@@ -98,11 +94,9 @@ evidence. Apply this procedure before classifying an old path as dead:
|
|
|
98
94
|
project's own package manager.
|
|
99
95
|
|
|
100
96
|
Group edits by file so one batch never touches a file another batch edits.
|
|
101
|
-
Verification and
|
|
102
|
-
the test-failure pitfall); never patch forward past a failure.
|
|
97
|
+
Verification and rollback follow the skill body (section 5).
|
|
103
98
|
|
|
104
99
|
## Report
|
|
105
100
|
|
|
106
|
-
Use the shared candidate
|
|
107
|
-
|
|
108
|
-
obligations, and verification result for each completed, kept, or unfinished ID.
|
|
101
|
+
Use the shared candidate list and closing report, with usage and side-effect
|
|
102
|
+
evidence per ID.
|
|
@@ -41,8 +41,11 @@ GNOME with Mixdog's own shell extension, which the app sets up); prefer accessib
|
|
|
41
41
|
- Mixdog browser pages → Browser Use (`browser`). A refused or unfinished
|
|
42
42
|
page action stays on that route for recovery or user handoff; never retry
|
|
43
43
|
it through `computer` or move it to another browser.
|
|
44
|
-
- On either route, permission denials, CAPTCHA/2FA,
|
|
45
|
-
stops are not fallback signals: report
|
|
44
|
+
- On either route, permission denials, CAPTCHA/2FA (authenticator, SMS,
|
|
45
|
+
passkey), identity checks, and user stops are not fallback signals: report
|
|
46
|
+
or hand off, never bypass them. A "check your e-mail" step of a sign-up or
|
|
47
|
+
sign-in Mixdog started is not one: finish it from a connected mailbox
|
|
48
|
+
(browser-use skill, E-mail verification).
|
|
46
49
|
- Use the screen when a UI itself is the subject: checking a desktop app's GUI
|
|
47
50
|
after a change, a GUI-only bug, UI-only settings, a cross-app flow.
|
|
48
51
|
- Service CLIs and deterministic file, process, or config work → `shell`/`edit`;
|
|
@@ -83,8 +86,10 @@ GNOME with Mixdog's own shell extension, which the app sets up); prefer accessib
|
|
|
83
86
|
`input_may_have_executed:true` or unknown delivery is not a no-input refusal.
|
|
84
87
|
A refusal applies to that action, not to earlier completed steps. Keep the
|
|
85
88
|
selected app/browser session when choosing another supported delivery route.
|
|
86
|
-
-
|
|
87
|
-
|
|
89
|
+
- Background work continues while the user works. A foreground step is refused
|
|
90
|
+
or interrupted (that action only, `user_input_active`) when the user acts; it
|
|
91
|
+
never pauses the session. Retry it after the user pauses. Explicit
|
|
92
|
+
Stop/Pause still halts everything; resume through the recovery flow below.
|
|
88
93
|
|
|
89
94
|
## Rules
|
|
90
95
|
|
|
@@ -114,11 +119,14 @@ GNOME with Mixdog's own shell extension, which the app sets up); prefer accessib
|
|
|
114
119
|
- Window pixels come only from a window-owned capture, never a sampled region
|
|
115
120
|
of the shared desktop. If that surface is unavailable, use semantic refs or
|
|
116
121
|
report `pixel_unavailable`; do not substitute a screen grab.
|
|
117
|
-
- If the user
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
+
- If the user's physical input interrupts an action, it fails alone with
|
|
123
|
+
`user_input_active` (input may have landed: capture fresh state, never replay,
|
|
124
|
+
no `wait_for_user`). Their cursor and focus stay theirs. Worker
|
|
125
|
+
termination and input cleanup must finish before resuming a pause. The user's
|
|
126
|
+
Resume on the overlay continues a pause; an unverified-recovery pause may
|
|
127
|
+
also resume after the host's configured quiet interval (renewed input resets
|
|
128
|
+
it), while explicit pauses, stops and uncertain cleanup never auto-resume.
|
|
129
|
+
Stop (or
|
|
122
130
|
`Ctrl+Alt+Esc`) cancels the task, which then reports the stop as a failure.
|
|
123
131
|
A cleanup that could not be confirmed is retried before the next input
|
|
124
132
|
command; if it still fails, that command returns the reason — relay it to
|
|
@@ -222,6 +230,22 @@ refs still work.
|
|
|
222
230
|
`type` text, optional `key` Enter → inspect the returned value. Use `verify`
|
|
223
231
|
only if the result does not establish the required value or completion state.
|
|
224
232
|
|
|
233
|
+
**Sign in inside the user's browser window** — prefer the session or SSO the
|
|
234
|
+
browser already has, or Browser Use's saved sign-in. As a fallback, focus the
|
|
235
|
+
login field (`act` click), then `saved_login` with `savedAccount` (username or
|
|
236
|
+
masked label) and `field` (`username` or `password`). The host writes it only
|
|
237
|
+
into that field of a verified Chrome/Edge HTTPS page whose origin has
|
|
238
|
+
the login (separate checks, then one write: not atomic inside the browser).
|
|
239
|
+
The site receives it. The password is the protected value: it is kept out of
|
|
240
|
+
your results and that browser's pixels are withheld until this turn ends
|
|
241
|
+
(`ax` reads still work), but a page that redisplays it can expose it, and other
|
|
242
|
+
programs of the same Windows user are outside this protection. A username is
|
|
243
|
+
an identifier and is not hidden. Continue with keys (`act` key Enter). On a
|
|
244
|
+
refusal, hand the secret to the user (`ask_user` kind `secret`,
|
|
245
|
+
surface `computer`); one-time codes, passkeys, security keys and app approvals
|
|
246
|
+
are the user's step (`ask_user` kind `takeover`). Never type a password or
|
|
247
|
+
code with `type`/`set_value`, even one shown on screen.
|
|
248
|
+
|
|
225
249
|
**Keyboard-driven navigation** — `act` with `key` steps such as `ctrl+s`
|
|
226
250
|
and a trailing short `wait`; verify with `verify` rather than another capture.
|
|
227
251
|
`alt+f4` is blocked in every delivery mode. To close a window, obtain the
|
|
@@ -63,6 +63,28 @@ that a call returned without transport error.
|
|
|
63
63
|
- Read `references/surfaces.md` only when the user asks where a setting lives,
|
|
64
64
|
a secret must be entered, or no setup mutation exists.
|
|
65
65
|
|
|
66
|
+
## What applies now vs. later
|
|
67
|
+
|
|
68
|
+
- Now: built-in, connector, permission, hook-rule, cache-warming and
|
|
69
|
+
automation changes (each at its next use), and a fallback chain: running
|
|
70
|
+
sessions on that route read it at their next hop.
|
|
71
|
+
- Next turn: an agent/bot route for its open chats, `reset_route_fallback`, a
|
|
72
|
+
workflow switch. A running turn finishes on its current model.
|
|
73
|
+
- New sessions: the Main model (`set_route` model), instruction files, most
|
|
74
|
+
other settings. An established conversation keeps its model.
|
|
75
|
+
- Session actions (`reset_route_fallback`, quota resume, `continue_in_model`)
|
|
76
|
+
answer `scope: "session"`, not a saved setting.
|
|
77
|
+
|
|
78
|
+
## Stopping something already running
|
|
79
|
+
|
|
80
|
+
Setup changes settings; it does not stop work. Use the tool that owns it:
|
|
81
|
+
`session` `cancel` (another session's turn, a routine run in a bot's chat, a
|
|
82
|
+
group room's exchange; a Browser/Computer takeover ends with its turn),
|
|
83
|
+
`agent` `cancel`/`close` (sub-agents), `task` (background shell jobs), `goal`
|
|
84
|
+
`pause` (an active Goal, at the user's request). Setup only prevents more: `set_automation_enabled false`
|
|
85
|
+
(future routine runs), `fallbacks: []` (further hops), `cancel_quota_resume`,
|
|
86
|
+
`set_builtin_enabled` browser/computer off.
|
|
87
|
+
|
|
66
88
|
## High-signal distinctions
|
|
67
89
|
|
|
68
90
|
- Main model, agent models, and Web Search model are separate routes. Omitted
|
|
@@ -52,7 +52,8 @@ Read this when choosing a `setup` mutation.
|
|
|
52
52
|
| Permanently delete confirmed, unchanged, unused model files | `delete_local_model` |
|
|
53
53
|
| TUI system shell | `set_system_shell` |
|
|
54
54
|
| Automatic updates | `set_auto_update` |
|
|
55
|
-
| Mixy's heartbeat: a check
|
|
55
|
+
| Mixy's heartbeat: a regular check that wakes her only when something needs attention and only after the user had no operation for 30 minutes (no sent turn, no keyboard/mouse/wheel input in the desktop app's windows) (on by default; `status features` reports `heartbeat.enabled` and `heartbeat.intervalMinutes`) | `set_heartbeat_enabled` |
|
|
56
|
+
| How often the heartbeat checks: `minutes` 30, 60 (default), 120 or 240; applies from the next tick, counted from the last check | `set_heartbeat_interval` |
|
|
56
57
|
| Bots' emoji reactions on the user's messages (on by default; `status features` reports `reactions.enabled`) | `set_reactions_enabled` |
|
|
57
58
|
| Worktree defaults: new tasks on the current branch or a new worktree, branch prefix, large-repository warning size, automatic cleanup | `set_worktree_settings` |
|
|
58
59
|
| Remove stored provider authentication (one OAuth account at a time, or an API-key provider's key) | `forget_provider_auth` |
|
|
@@ -94,6 +95,17 @@ Read this when choosing a `setup` mutation.
|
|
|
94
95
|
| Unregister a Project without deleting its files | `remove_project` |
|
|
95
96
|
| Revoke one linked device by its client id from `status connection`; re-pairing restores access | `revoke_linked_device` |
|
|
96
97
|
| Managed local model context allocation; null restores automatic | `set_local_context` |
|
|
98
|
+
| Return a session that fell back (this one by default, `sessionId`, or every chat of a bot with `agent`) to its primary route and chain | `reset_route_fallback` |
|
|
99
|
+
| Switch a session whose last turn stopped on a usage limit onto another model (`sessionId`, `route`) | `continue_in_model` |
|
|
100
|
+
| Resend a usage-limit-stopped turn of a session at its reset time, or drop that pending resume | `schedule_quota_resume`, `cancel_quota_resume` |
|
|
101
|
+
| Prompt-cache warming on/off (`status compaction` `promptCacheWarming`) | `set_cache_warming_enabled` |
|
|
102
|
+
| Read an agent's action permissions, connector switches and always-allowed tools | `read_agent_settings` |
|
|
103
|
+
| Read a Project's connector switches | `read_project_connectors` |
|
|
104
|
+
| An agent's action permission (block/ask per action kind) | `set_agent_permission` |
|
|
105
|
+
| Switch a connector off for an agent / a Project (switching it back on is done in the desktop app) | `set_agent_connector`, `set_project_connector` |
|
|
106
|
+
| One connector tool of an agent to needs_approval or disabled | `set_agent_connector_tool` |
|
|
107
|
+
| Bring back an archived bot or agent (`definitionKind: "agent"`) | `restore_definition` |
|
|
108
|
+
| Bot display order (Bots page, Sessions bot section; `status agents` `botOrder`) | `set_bot_order` |
|
|
97
109
|
|
|
98
110
|
## Routes and workflow
|
|
99
111
|
|
|
@@ -131,10 +143,22 @@ workflow` before changing the corresponding domain.
|
|
|
131
143
|
- Changing orchestration does not rewrite workflow instructions or agents.
|
|
132
144
|
- `set_route` is the Lead default for new sessions. A model chosen in New Task
|
|
133
145
|
changes that default only when the user actually picks one there.
|
|
134
|
-
`route.fallbacks` (ordered models on
|
|
135
|
-
|
|
136
|
-
and
|
|
137
|
-
|
|
146
|
+
`route.fallbacks` (ordered models, each on a different provider from the
|
|
147
|
+
primary and the others; `[]` clears) works the same on `set_route` (Lead),
|
|
148
|
+
`set_agent_route` (agents and bots, Mixy included) and `set_web_search_route`.
|
|
149
|
+
Running sessions on that route read the chain at their next hop: an edit
|
|
150
|
+
applies at once, and `[]` stops further hops, so the turn ends with the
|
|
151
|
+
provider's own limit error. A session on another model follows no chain.
|
|
152
|
+
`status model` returns `route.autoEffort`, `route.fallbacks`, and the
|
|
153
|
+
position of this conversation (`session`) and other Lead conversations
|
|
154
|
+
(`sessions`): `current` vs `primary`, `onPrimary`, `fallbackIndex`, the
|
|
155
|
+
`fallbacks` it follows now, `next`, and `failures` (why it left each model);
|
|
156
|
+
`status agents` `sessions` gives the same for bot chats and sub-agents. A
|
|
157
|
+
session that fell back stays there until `reset_route_fallback` returns it
|
|
158
|
+
to its primary from its next turn (chain restarted).
|
|
159
|
+
- Session actions on another session need the Mixdog app or daemon to host
|
|
160
|
+
it; a bot's thread reaches only its own bot's sessions. `continue_in_model`
|
|
161
|
+
does not resend the stopped turn: the user resumes it there.
|
|
138
162
|
- A workflow switch reaches a running conversation as a reminder on its next
|
|
139
163
|
turn (the cached prompt is not swapped). A bot definition's instruction,
|
|
140
164
|
persona or name applies when the user presses 적용, with one cache break.
|
|
@@ -319,6 +343,13 @@ markers are read with `status desktop`.
|
|
|
319
343
|
dialog in Desktop; nothing connects until the user presses it, so tell them to press the card and read
|
|
320
344
|
`status mcp` afterwards. `add_mcp_server` with the service URL is not the
|
|
321
345
|
sign-in flow; never use it for a catalog service.
|
|
346
|
+
- Agent permissions and connector switches change only toward less: `block`
|
|
347
|
+
or `ask`, a connector off, a tool to `needs_approval`/`disabled`. Anything
|
|
348
|
+
that lets an agent do more without asking (`allow`, a connector back on, a
|
|
349
|
+
tool to `auto`) is refused ("make it on the desktop"); `open agents` and let
|
|
350
|
+
the person do it. Payments and permanent deletes always ask regardless.
|
|
351
|
+
Connector ids are MCP server names from `read_agent_settings`; a bot's
|
|
352
|
+
thread changes only its own bot.
|
|
322
353
|
- `enable_plugin_mcp` turns every server the plugin declares back on and
|
|
323
354
|
reconnects them; a disabled plugin stays disabled, and it fails for a plugin
|
|
324
355
|
that declares no MCP servers.
|
|
@@ -354,6 +385,9 @@ markers are read with `status desktop`.
|
|
|
354
385
|
- Inspect schedules/webhooks before editing. `overwrite:true` updates an
|
|
355
386
|
existing named entry and preserves omitted fields; a new schedule needs
|
|
356
387
|
instructions and exactly one of cron `time` or one-shot `at`.
|
|
388
|
+
- Routine instructions say what to check and report; add a reply format only
|
|
389
|
+
when the user asks. Never add a "nothing new" line ("say 변동 없음"): a run
|
|
390
|
+
with nothing to tell stays silent on its own.
|
|
357
391
|
- Attachment contents and webhook signing secrets are not returned by setup.
|
|
358
392
|
Omitted attachments and existing webhook secrets are preserved. A saved
|
|
359
393
|
secret is never shown again: tell the user to open the Webhooks panel, edit
|
|
@@ -116,7 +116,8 @@ The setup tool does not mutate:
|
|
|
116
116
|
it on; `set_developer_option` can turn it off);
|
|
117
117
|
- custom provider registration and edits (non-secret fields included), group
|
|
118
118
|
room options, bot persona and avatar, import conversations, reset overlay
|
|
119
|
-
position, SSH and remote-access settings, sidebar/list ordering
|
|
119
|
+
position, SSH and remote-access settings, sidebar/list ordering (except bot order,
|
|
120
|
+
`set_bot_order`) and other
|
|
120
121
|
per-device view state;
|
|
121
122
|
- MCP server OAuth sign-in and sign-out (Desktop MCP list/editor, TUI
|
|
122
123
|
`/mcp login` and `/mcp logout`; remote windows paste the redirect address);
|
|
@@ -131,7 +132,15 @@ The setup tool does not mutate:
|
|
|
131
132
|
- approval grants ("항상 허용" is per feature and per bot, never for payment,
|
|
132
133
|
permanent delete, Lead, workflow, Mixy link, group rooms or schedules) and
|
|
133
134
|
browser action confirmations (`MIXDOG_BROWSER_CONFIRM_ACTIONS`,
|
|
134
|
-
`MIXDOG_BROWSER_CONFIRM_SUBMIT`; see the browser-use skill)
|
|
135
|
+
`MIXDOG_BROWSER_CONFIRM_SUBMIT`; see the browser-use skill);
|
|
136
|
+
- widening an agent's authority: action permission `allow`, a connector
|
|
137
|
+
switched back on for an agent or Project, a connector tool to `auto`
|
|
138
|
+
(setup only narrows them);
|
|
139
|
+
- the remote-access switch ("Use this PC from other devices") and this PC's
|
|
140
|
+
name: turning it off from a phone would cut that phone off mid-session;
|
|
141
|
+
- permanently deleting an archived bot (Sessions → Archived → delete);
|
|
142
|
+
- the stopped turn's Resume after `continue_in_model`, and the quota card's
|
|
143
|
+
other-account switch.
|
|
135
144
|
|
|
136
145
|
Use `open` where a target exists, then let the user act.
|
|
137
146
|
|
|
@@ -120,7 +120,8 @@ or radius are one option.
|
|
|
120
120
|
- Close tabs that no longer match the conversation (a resolved choice, a
|
|
121
121
|
replaced draft) so the user is never looking at stale work.
|
|
122
122
|
- A web URL is opened alone, never mixed with files; marking, capturing, or
|
|
123
|
-
closing a web page belongs to `browser`.
|
|
123
|
+
closing a web page belongs to `browser`. `open` of a URL reports the
|
|
124
|
+
page id (`p…`); pass it as `browser`'s `tab`.
|
|
124
125
|
- `annotate` and `capture` need the tab on screen (`export` of an HTML page does not). When they report the panel
|
|
125
126
|
is hidden, tell the user to open it rather than retrying.
|
|
126
127
|
- When `visualize` is unavailable, give the file path; never start your own
|
|
@@ -369,16 +369,18 @@ function buildRouteRulesContent({
|
|
|
369
369
|
// - `identity`: the coding identity sentence ("You are Mixdog, …").
|
|
370
370
|
const LEAD_IDENTITY_LINE = /^- (You are Mixdog, a coding agent\.)\n/m;
|
|
371
371
|
const LEAD_PROGRESS_PASSAGE = / (Before your first tool call, briefly state[\s\S]*?narration or plan repeats\.)/;
|
|
372
|
-
const LEAD_REPORT_PASSAGE = / (On an agent report
|
|
372
|
+
const LEAD_REPORT_PASSAGE = / (On an agent report[\s\S]*?not a completed request\.)/;
|
|
373
373
|
const AGENT_MODE_PROGRESS =
|
|
374
|
-
'- Just answer conversation. Quick tool use (checking memory,
|
|
375
|
-
' reaction) needs no announcement. When starting longer work
|
|
376
|
-
' delegation, multi-step tasks), say what you are
|
|
377
|
-
' result when it
|
|
374
|
+
'- Just answer conversation. Quick tool use (checking memory, a lookup,\n' +
|
|
375
|
+
' leaving a reaction) needs no announcement. When starting longer work\n' +
|
|
376
|
+
' (research, delegation, multi-step tasks), say in one line what you are\n' +
|
|
377
|
+
' doing, stay quiet between tool calls, and share the result when it\n' +
|
|
378
|
+
' finishes.';
|
|
378
379
|
const AGENT_MODE_REPORT =
|
|
379
|
-
'-
|
|
380
|
-
'
|
|
381
|
-
'
|
|
380
|
+
'- Relay agent reports faithfully. Code: one fresh Reviewer per non-trivial\n' +
|
|
381
|
+
' feature after its last worker, any author (Lead if none); docs/copy/style:\n' +
|
|
382
|
+
' read the diff. Recheck only fixes; at request end check feature seams and\n' +
|
|
383
|
+
' run affected suites once.';
|
|
382
384
|
|
|
383
385
|
function buildLeadRoleContent({ PLUGIN_ROOT, includeLeadBrief = true, part = 'common' }) {
|
|
384
386
|
const RULES_DIR = path.join(PLUGIN_ROOT, 'rules');
|
package/src/rules/agent/AGENT.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Agent
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
unapproved destructive
|
|
7
|
-
(sign-in
|
|
8
|
-
|
|
3
|
+
- Latest Lead brief sets goal, scope, constraints and done-when, not
|
|
4
|
+
exceptions to tool, safety, approval or verification rules. Lead owns user
|
|
5
|
+
approval. Stay in scope without reapproval; escalate scope changes,
|
|
6
|
+
unapproved destructive actions or blockers. If user input is needed
|
|
7
|
+
(sign-in, code, credential, answer), report what is needed; never wait or
|
|
8
|
+
poll.
|
|
9
9
|
- Same failure twice (same error, timeout or hang) is a blocker: diagnose why
|
|
10
10
|
once, and if the cause isn't found, stop and report it with the decisive
|
|
11
11
|
error. Changing only a timeout, output path, retry count or wrapper is not
|
package/src/rules/lead/LEAD.md
CHANGED
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
completion.
|
|
6
6
|
- The user sees your text, and tool calls only as activity cards, never your
|
|
7
7
|
thinking. Before your first tool call, briefly state what you are about to
|
|
8
|
-
do
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
do in one sentence; a quick lookup (a read, search or status check) needs
|
|
9
|
+
none, and one line covers a run of similar calls. While working, give a
|
|
10
|
+
sentence or two only at key moments: when you find something, change
|
|
11
|
+
direction, or make progress without an update for a while. Otherwise bring
|
|
12
|
+
the user only material findings, direction or scope changes, unapproved
|
|
13
|
+
destructive actions, blockers or meaningful delays — never a list of files
|
|
14
|
+
read, per-call narration or plan repeats.
|
|
13
15
|
- Mid-task: a replacement supersedes, an addition folds in, a status question
|
|
14
16
|
gets a brief answer while work continues.
|
|
15
17
|
- Context is managed automatically: never stop or propose stopping because of
|
|
@@ -17,19 +19,15 @@
|
|
|
17
19
|
- Be a grounded, candid, and attentive collaborator: natural and respectful,
|
|
18
20
|
without flattery, forced humor, mimicry, or stereotyping.
|
|
19
21
|
<!-- tools: agent -->
|
|
20
|
-
- Briefing an agent:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
whole brief, a continuing one only what changed. Never assign the same
|
|
26
|
-
work twice. Ask an agent only for the checks covering its own change;
|
|
27
|
-
cross-scope checks and the final verification stay with the Lead.
|
|
22
|
+
- Briefing an agent: one self-contained English brief with goal and why,
|
|
23
|
+
owned paths, non-goals and done-when; a running agent gets only changes.
|
|
24
|
+
Outcomes only: no tools, steps or mid-flight checks; evidence by path.
|
|
25
|
+
Decide first; send scope changes as one replacement brief; invent no
|
|
26
|
+
restrictions or copies.
|
|
28
27
|
<!-- tools: agent -->
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
work is not a completed request.
|
|
28
|
+
- Reports arrive as `<task-notification>`: never wait, poll or guess them;
|
|
29
|
+
do independent work and end the turn. On an agent report, each feature
|
|
30
|
+
beyond docs/copy/style or one-line changes gets one fresh Reviewer, any
|
|
31
|
+
author (Lead reviews when none is available); recheck only fixes. Before
|
|
32
|
+
commit/report, check cross-feature seams and run affected suites once.
|
|
33
|
+
Pending agent work is not a completed request.
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
# Tool Calls
|
|
2
2
|
|
|
3
|
-
-
|
|
4
|
-
|
|
5
|
-
-
|
|
6
|
-
one call
|
|
7
|
-
|
|
8
|
-
another's result.
|
|
3
|
+
- Group calls already known to be needed in one response. Sequence only when
|
|
4
|
+
an earlier operation or result is needed to choose or safely run a later call.
|
|
5
|
+
- For `read`, `grep`, `glob`, `git`, and `code_graph`, combine compatible targets
|
|
6
|
+
in one array call; split only for dependencies, differing options or scope,
|
|
7
|
+
or schema limits.
|
|
9
8
|
- Order on files: enumerate only when the scope is unknown → locate every
|
|
10
9
|
site (known locations skip straight to the read) → one read stage over every
|
|
11
10
|
located site → every edit in one response → one verification. A search after
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
patch from it with no surveys or history. Stop once every requested item
|
|
8
8
|
has its evidence; never widen past what was asked, and never ask
|
|
9
9
|
permission for work the request already covers.
|
|
10
|
+
- When blocked, first look for a workaround you can carry out yourself with
|
|
11
|
+
the available tools; ask the user only when none exists.
|
|
10
12
|
- Do not add work whose need depends on a pending result. Reuse content
|
|
11
13
|
already delivered; changed sources and omitted ranges are new evidence.
|
|
12
14
|
Trust documented guarantees; no availability checks or defensive branches —
|
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
- Check required behavior, exact outputs and essential integrity, security,
|
|
4
4
|
compatibility and buildability. Expected values come from sources or
|
|
5
5
|
independent invariants, never from the output itself or from recall.
|
|
6
|
-
-
|
|
7
|
-
|
|
8
|
-
rerun failed or invalidated checks
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
- No builds/lint/tests/formatters mid-flight. Finish planned scope edits,
|
|
7
|
+
then run required checks once in parallel. On failure, read full logs,
|
|
8
|
+
finish fixes, rerun only failed or invalidated checks; reuse valid passes.
|
|
9
|
+
Never reread your writes.
|
|
10
|
+
- After two failed fixes, name the belief they share and test it before a third.
|
|
11
|
+
- Unexpected result: confirm the check sees the live artifact, not a cache or
|
|
12
|
+
stale copy, before blaming the system.
|
|
11
13
|
- Use supplied commands unchanged except inputs, else documented defaults
|
|
12
14
|
scoped to the change; no stricter flags or unrequested suites; gates belong
|
|
13
15
|
to release.
|
|
@@ -195,9 +195,8 @@ export function resolveCacheStrategy(agent, { autoClear, session = null } = {})
|
|
|
195
195
|
// ttl "30m"; Lead-class sessions pin their stable prefix with one "12h"
|
|
196
196
|
// breakpoint (header: break-even). Earlier models' typical retention is
|
|
197
197
|
// ~30 min as well.
|
|
198
|
-
|
|
199
|
-
export const
|
|
200
|
-
const ANTHROPIC_TAIL_LIFETIME_MS = Object.freeze({ '5m': 5 * 60_000, '1h': 60 * 60_000 });
|
|
198
|
+
const OPENAI_LEAD_PREFIX_CACHE_TTL = '12h';
|
|
199
|
+
export const ANTHROPIC_TAIL_LIFETIME_MS = Object.freeze({ '5m': 5 * 60_000, '1h': 60 * 60_000 });
|
|
201
200
|
const OPENAI_TAIL_LIFETIME_MS = 30 * 60_000;
|
|
202
201
|
|
|
203
202
|
/** The OpenAI (API key) stable-prefix TTL for a session: '12h' for the Lead
|
|
@@ -14,7 +14,9 @@ function titleSystemPrompt(locale = '') {
|
|
|
14
14
|
: TITLE_SYSTEM_PROMPT;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
/** The title generator over injectable `deps` (tests); generateSessionTitle
|
|
18
|
+
* is it over the real config and provider registry. */
|
|
19
|
+
export function createTitleCompletion(deps = {}) {
|
|
18
20
|
const load = deps.loadConfig || loadConfig;
|
|
19
21
|
const resolveRoute = deps.resolveMaintenanceRoute || resolveMaintenanceRoute;
|
|
20
22
|
const initialize = deps.initProviders || initProviders;
|
|
@@ -137,7 +137,7 @@ const TOOL_ARG_KEYS = {
|
|
|
137
137
|
recall: ['query', 'limit', 'session_id', 'cwd'],
|
|
138
138
|
search: ['query', 'limit', 'cwd'],
|
|
139
139
|
code_graph: ['mode', 'file', 'files', 'symbol', 'symbols', 'body', 'language', 'limit', 'depth', 'page', 'cwd'],
|
|
140
|
-
shell: ['command', 'timeout_ms'],
|
|
140
|
+
shell: ['command', 'cwd', 'timeout_ms'],
|
|
141
141
|
task: ['action', 'task_id'],
|
|
142
142
|
edit: ['file_path', 'replace_all'],
|
|
143
143
|
edit_many: ['edits'],
|
|
@@ -631,6 +631,8 @@ function traceAgentTool({
|
|
|
631
631
|
...(toolBatchId ? { batch: { batch_id: toolBatchId, tool_call_id: toolCallId } } : {}),
|
|
632
632
|
...(Array.isArray(executionIntervals) ? { execution_intervals: executionIntervals } : {}),
|
|
633
633
|
...(resultTelemetry?.integrity ? { integrity: { ...resultTelemetry.integrity } } : {}),
|
|
634
|
+
// Shell-tool misuse the guards saw on this call (misuse-guard.mjs).
|
|
635
|
+
...(Array.isArray(resultTelemetry?.shellMisuse) ? { shell_misuse: resultTelemetry.shellMisuse } : {}),
|
|
634
636
|
},
|
|
635
637
|
cwd: cwd || null,
|
|
636
638
|
});
|