mixdog 1.2.2 → 1.2.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 +18 -0
- package/package.json +2 -1
- package/scripts/provider-pingpong-live.mjs +509 -0
- package/src/agents/advisor/AGENT.md +1 -1
- package/src/agents/advisor/agent.json +1 -1
- package/src/defaults/shipped-history.json +5 -0
- package/src/defaults/skills/setup/SKILL.md +6 -1
- package/src/defaults/skills/setup/references/actions.md +44 -22
- package/src/defaults/skills/setup/references/surfaces.md +10 -8
- package/src/headless-exec.mjs +15 -8
- package/src/lib/keychain-cjs.cjs +7 -4
- package/src/output-styles/common.md +11 -10
- package/src/rules/agent/AGENT.md +5 -5
- package/src/rules/lead/LEAD.md +5 -5
- package/src/runtime/agent/orchestrator/agent-trace-io.mjs +92 -61
- package/src/runtime/agent/orchestrator/cache-mtime.mjs +10 -1
- package/src/runtime/agent/orchestrator/config-providers-merge.mjs +7 -0
- package/src/runtime/agent/orchestrator/config.mjs +5 -0
- package/src/runtime/agent/orchestrator/context/collect.mjs +1 -0
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +26 -7
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +112 -7
- package/src/runtime/agent/orchestrator/providers/anthropic-api-request.mjs +48 -20
- package/src/runtime/agent/orchestrator/providers/anthropic-error-contract.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-max-tokens.mjs +24 -17
- package/src/runtime/agent/orchestrator/providers/anthropic-messages.mjs +7 -6
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +29 -10
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-blocks.mjs +20 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-delta.mjs +15 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-start.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/message-events.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +12 -5
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-outcome.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-state.mjs +14 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-turn-result.mjs +9 -0
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +6 -0
- package/src/runtime/agent/orchestrator/providers/antigravity-request.mjs +58 -7
- package/src/runtime/agent/orchestrator/providers/antigravity-response.mjs +29 -10
- package/src/runtime/agent/orchestrator/providers/antigravity-retry-policy.mjs +16 -3
- package/src/runtime/agent/orchestrator/providers/antigravity-stream.mjs +10 -61
- package/src/runtime/agent/orchestrator/providers/antigravity-transport.mjs +12 -6
- package/src/runtime/agent/orchestrator/providers/codex-client-meta.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/command-code-oauth.mjs +114 -72
- package/src/runtime/agent/orchestrator/providers/compat-request-policy.mjs +78 -2
- package/src/runtime/agent/orchestrator/providers/cursor-auth.mjs +37 -5
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-bridge.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/cursor-wire-stream-messages.mjs +43 -2
- package/src/runtime/agent/orchestrator/providers/cursor-wire.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/cursor.mjs +9 -2
- package/src/runtime/agent/orchestrator/providers/custom-provider-config.mjs +64 -1
- package/src/runtime/agent/orchestrator/providers/custom-provider.mjs +70 -6
- package/src/runtime/agent/orchestrator/providers/custom-reasoning.mjs +34 -7
- package/src/runtime/agent/orchestrator/providers/custom-tool-wire.mjs +32 -6
- package/src/runtime/agent/orchestrator/providers/deepseek.mjs +67 -0
- package/src/runtime/agent/orchestrator/providers/effort-configuration.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/gemini-cache-policy.mjs +11 -4
- package/src/runtime/agent/orchestrator/providers/gemini-cache.mjs +25 -8
- package/src/runtime/agent/orchestrator/providers/gemini-error-contract.mjs +87 -5
- package/src/runtime/agent/orchestrator/providers/gemini-request-body.mjs +41 -5
- package/src/runtime/agent/orchestrator/providers/gemini-retry-policy.mjs +13 -13
- package/src/runtime/agent/orchestrator/providers/gemini-schema.mjs +355 -37
- package/src/runtime/agent/orchestrator/providers/gemini-sdk-request.mjs +1 -2
- package/src/runtime/agent/orchestrator/providers/gemini-stream.mjs +93 -47
- package/src/runtime/agent/orchestrator/providers/gemini-thinking.mjs +55 -10
- package/src/runtime/agent/orchestrator/providers/gemini.mjs +26 -8
- package/src/runtime/agent/orchestrator/providers/grok-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/action-input-contract.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-native-blocks.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-request-utils.mjs +246 -42
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-server-tool-usage.mjs +18 -0
- package/src/runtime/agent/orchestrator/providers/lib/anthropic-system-blocks.mjs +27 -6
- package/src/runtime/agent/orchestrator/providers/lib/claude-bridge-schema.mjs +388 -0
- package/src/runtime/agent/orchestrator/providers/lib/inclusive-usage.mjs +54 -0
- package/src/runtime/agent/orchestrator/providers/lib/origin-bound-fetch.mjs +16 -0
- package/src/runtime/agent/orchestrator/providers/lib/responses-terminal-fields.mjs +11 -0
- package/src/runtime/agent/orchestrator/providers/lib/usage-primitives.mjs +8 -0
- package/src/runtime/agent/orchestrator/providers/lib/wire-pairing.mjs +48 -22
- package/src/runtime/agent/orchestrator/providers/media-normalization.mjs +119 -18
- package/src/runtime/agent/orchestrator/providers/mimo-oauth-profile.mjs +13 -15
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.d.mts +1 -1
- package/src/runtime/agent/orchestrator/providers/model-proxy-channel.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/model-proxy-provider.mjs +33 -1
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-codex-metadata.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +121 -61
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +35 -14
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-result.mjs +5 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +37 -7
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/tool-call-acc.mjs +2 -9
- package/src/runtime/agent/orchestrator/providers/openai-compat-error-contract.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +47 -2
- package/src/runtime/agent/orchestrator/providers/openai-compat-options.mjs +47 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-reasoning-field.mjs +151 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-response-normalization.mjs +42 -24
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +63 -25
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-head-parity.json +2901 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-parity.fixtures.mjs +172 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +53 -5
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-trace.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-wire.mjs +103 -26
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +23 -4
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai.mjs +11 -6
- package/src/runtime/agent/orchestrator/providers/openai-compat.mjs +6 -1
- package/src/runtime/agent/orchestrator/providers/openai-direct-request.mjs +15 -23
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/output-items.mjs +23 -10
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events/terminal-frames.mjs +25 -4
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-items.mjs +18 -7
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-outcome.mjs +4 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-state.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/text-relay.mjs +9 -1
- package/src/runtime/agent/orchestrator/providers/openai-model-capabilities.mjs +80 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-dispatch.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +7 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-responses-input.mjs +71 -24
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload-parity.fixture.json +323 -0
- package/src/runtime/agent/orchestrator/providers/openai-responses-payload.mjs +44 -16
- package/src/runtime/agent/orchestrator/providers/openai-ws-delta.mjs +7 -16
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/refusals.mjs +60 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state/tool-calls.mjs +51 -35
- package/src/runtime/agent/orchestrator/providers/openai-ws-response-state.mjs +30 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +12 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/terminal-frames.mjs +25 -6
- package/src/runtime/agent/orchestrator/providers/openai-ws.mjs +11 -3
- package/src/runtime/agent/orchestrator/providers/opencode-go-gemini.mjs +170 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +75 -70
- package/src/runtime/agent/orchestrator/providers/openrouter.mjs +75 -0
- package/src/runtime/agent/orchestrator/providers/provider-error-kind.mjs +147 -8
- package/src/runtime/agent/orchestrator/providers/registry.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/retry-classification.mjs +5 -0
- package/src/runtime/agent/orchestrator/providers/transport-scope.d.mts +6 -0
- package/src/runtime/agent/orchestrator/providers/transport-scope.mjs +28 -0
- package/src/runtime/agent/orchestrator/providers/wire-gateway.mjs +157 -0
- package/src/runtime/agent/orchestrator/providers/wire-route.mjs +512 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search-head-parity.json +1131 -0
- package/src/runtime/agent/orchestrator/providers/xai-tool-search.fixtures.mjs +183 -0
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +100 -0
- package/src/runtime/agent/orchestrator/runtime-core/deferred-tool-availability.mjs +21 -0
- package/src/runtime/agent/orchestrator/runtime-core/effort.mjs +15 -0
- package/src/runtime/agent/orchestrator/runtime-core/provider-request-snapshot.mjs +7 -3
- package/src/runtime/agent/orchestrator/runtime-core/session-title.mjs +21 -1
- package/src/runtime/agent/orchestrator/runtime-core/skill-tool-loading.mjs +14 -3
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +526 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-data.mjs +3 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog-schema.mjs +10 -7
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +176 -71
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +62 -10
- package/src/runtime/agent/orchestrator/runtime-core/tool-exposure.mjs +96 -0
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/compact/constants.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/compact/messages.mjs +14 -93
- package/src/runtime/agent/orchestrator/session/compact/summary-anchor.mjs +5 -0
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +120 -0
- package/src/runtime/agent/orchestrator/session/context-tool-schema.mjs +17 -2
- package/src/runtime/agent/orchestrator/session/context-utils.mjs +8 -4
- package/src/runtime/agent/orchestrator/session/eager-dispatch/admission.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/eager-dispatch.mjs +6 -1
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +91 -1
- package/src/runtime/agent/orchestrator/session/loop/completion-guards.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/loop/context-overflow.mjs +56 -0
- package/src/runtime/agent/orchestrator/session/loop/deferred-call-through.mjs +18 -8
- package/src/runtime/agent/orchestrator/session/loop/loop-state.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +21 -10
- package/src/runtime/agent/orchestrator/session/loop/provider-tool-exclusions.mjs +132 -0
- package/src/runtime/agent/orchestrator/session/loop/request-boundary.mjs +30 -0
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +63 -20
- package/src/runtime/agent/orchestrator/session/loop/step-auto-effort.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-call-resolution.mjs +95 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +30 -3
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/dispatch.mjs +15 -4
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +15 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +150 -0
- package/src/runtime/agent/orchestrator/session/loop/tool-phase.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-auto-effort.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-commit.mjs +34 -12
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +57 -25
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/manager/compaction-runner.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +208 -14
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +15 -3
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +25 -3
- package/src/runtime/agent/orchestrator/session/manager/session-fallback-title.mjs +82 -0
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +19 -2
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +3 -0
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +4 -1
- package/src/runtime/agent/orchestrator/session/manager.mjs +2 -1
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/send-with-recovery.mjs +13 -0
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +96 -0
- package/src/runtime/agent/orchestrator/session/side-question.mjs +192 -0
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +17 -3
- package/src/runtime/agent/orchestrator/session/store/live-state.mjs +23 -0
- package/src/runtime/agent/orchestrator/session/store/paths-heartbeat.mjs +58 -2
- package/src/runtime/agent/orchestrator/session/store/session-delete.mjs +41 -28
- package/src/runtime/agent/orchestrator/session/store/session-observers.mjs +4 -2
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-finish.mjs +12 -1
- package/src/runtime/agent/orchestrator/session/store/write-admission.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/store-summary-archived-agent.mjs +34 -15
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/store-summary-fields.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +10 -1
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +10 -2
- package/src/runtime/agent/orchestrator/session/store.mjs +19 -3
- package/src/runtime/agent/orchestrator/session/tool-batch/execute-call.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/tool-batch/finalize.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-batch/record-outcome.mjs +1 -1
- package/src/runtime/agent/orchestrator/session/tool-batch/state.mjs +7 -1
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +4 -0
- package/src/runtime/agent/orchestrator/session/tool-schema-rejection.mjs +77 -0
- package/src/runtime/agent/orchestrator/tools/bash-policy-scan.mjs +8 -2
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/command-preflight.mjs +3 -3
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +4 -1
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +14 -10
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +49 -34
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +23 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch/root-resolution.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/code-graph/search.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/patch/ui-diff.mjs +73 -39
- package/src/runtime/agent/orchestrator/tools/progress-message.mjs +18 -1
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +7 -4
- package/src/runtime/agent/orchestrator/tools/shell-exec-policy.mjs +88 -12
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +2 -0
- package/src/runtime/computer-bridge/action-schema.mjs +44 -21
- package/src/runtime/github/tool.mjs +92 -2
- package/src/runtime/memory/index.mjs +1 -0
- package/src/runtime/memory/lib/http-router/ingest-routes.mjs +22 -1
- package/src/runtime/memory/lib/ingest/transcript-offsets.mjs +2 -0
- package/src/runtime/memory/lib/pg/adapter.mjs +98 -1
- package/src/runtime/memory/lib/pg/process.mjs +31 -26
- package/src/runtime/memory/lib/pg/run-child.mjs +49 -0
- package/src/runtime/memory/lib/pg/supervisor.mjs +108 -3
- package/src/runtime/memory/lib/runtime-fetcher.mjs +12 -13
- package/src/runtime/memory/lib/transcript-ingest.mjs +14 -0
- package/src/runtime/office/README.md +1 -1
- package/src/runtime/office/authoring/html-document-author.mjs +2 -0
- package/src/runtime/office/authoring/pptx-contact-sheet.mjs +2 -0
- package/src/runtime/office/authoring/pptx-html-measure.mjs +2 -0
- package/src/runtime/office/authoring/pptx-html-runner.mjs +2 -0
- package/src/runtime/office/authoring/xlsx-html-runner.mjs +2 -0
- package/src/runtime/office/core/office-actions-read.mjs +3 -0
- package/src/runtime/office/core/office-render-preview.mjs +2 -0
- package/src/runtime/office/core/office-session-dispatch.mjs +7 -0
- package/src/runtime/office/core/office-sessionless-actions.mjs +8 -0
- package/src/runtime/office/core/office-sessions.mjs +5 -0
- package/src/runtime/office/core/office-transactions.mjs +3 -0
- package/src/runtime/office/core/office-write-ledger.mjs +98 -0
- package/src/runtime/office/design/library/templates/mixdog-executive.mixdog-edit.pptx +0 -0
- package/src/runtime/office/index.mjs +30 -0
- package/src/runtime/office/pdf/pdf-edit-document.mjs +2 -0
- package/src/runtime/office/pdf/pdf-render.mjs +23 -7
- package/src/runtime/office/pdf/pdf-security.mjs +2 -0
- package/src/runtime/office/portable/portable-opc.mjs +4 -1
- package/src/runtime/office/quality/visual-diff.mjs +2 -0
- package/src/runtime/shared/bounded-file-read.mjs +13 -0
- package/src/runtime/shared/bounded-line-diff.mjs +182 -0
- package/src/runtime/shared/buffered-appender.mjs +18 -0
- package/src/runtime/shared/config.mjs +78 -18
- package/src/runtime/shared/err-text.mjs +6 -0
- package/src/runtime/shared/file-permissions.d.mts +6 -1
- package/src/runtime/shared/file-permissions.mjs +54 -6
- package/src/runtime/shared/llm/anthropic-effort.mjs +6 -0
- package/src/runtime/shared/llm/usage-accounting.mjs +5 -2
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +3 -0
- package/src/runtime/shared/loopback-listener.mjs +9 -0
- package/src/runtime/shared/provider-api-key.mjs +2 -0
- package/src/runtime/shared/review-diff.mjs +52 -0
- package/src/runtime/shared/session-sidebar-host.d.mts +4 -0
- package/src/runtime/shared/session-sidebar-host.mjs +38 -0
- package/src/runtime/shared/slow-span.mjs +114 -0
- package/src/runtime/shared/statusline/statusline-segments.mjs +28 -4
- package/src/runtime/shared/tool-card-model/card-header.mjs +6 -1
- package/src/runtime/shared/tool-card-model/generic-detail.mjs +39 -5
- package/src/runtime/shared/tool-card-model.mjs +5 -2
- package/src/runtime/shared/tool-output-limit.mjs +4 -0
- package/src/runtime/shared/tool-primitives.mjs +13 -0
- package/src/runtime/shared/tool-result-summary.mjs +8 -1
- package/src/runtime/shared/tool-surface.mjs +18 -3
- package/src/runtime/shared/tool-work-units.mjs +40 -4
- package/src/runtime/shared/transcript-writer/purge.mjs +74 -0
- package/src/runtime/shared/transcript-writer.mjs +10 -2
- package/src/runtime/shared/turn-changes.mjs +268 -100
- package/src/runtime/shared/turn-review-reply.mjs +8 -39
- package/src/runtime/shared/turn-snapshot-store.mjs +19 -108
- package/src/runtime/shared/turn-snapshot.mjs +857 -683
- package/src/runtime/shared/turn-worktree-snapshot.mjs +183 -255
- package/src/runtime/shared/user-data-guard.mjs +262 -49
- package/src/runtime/shared/worktrees/carry.mjs +531 -0
- package/src/runtime/shared/worktrees/contract.mjs +34 -0
- package/src/runtime/shared/worktrees/file-recovery.mjs +68 -0
- package/src/runtime/shared/worktrees/git-head.mjs +205 -0
- package/src/runtime/shared/worktrees/git.mjs +8 -3
- package/src/runtime/shared/worktrees/maintenance.mjs +1 -1
- package/src/runtime/shared/worktrees/manager.mjs +156 -8
- package/src/runtime/shared/worktrees/merge.mjs +31 -21
- package/src/runtime/shared/worktrees/paths.d.mts +6 -0
- package/src/runtime/terminal-bridge/client.mjs +44 -11
- package/src/runtime/terminal-bridge/tool-defs.mjs +13 -6
- package/src/runtime/tidy/apply.mjs +47 -2
- package/src/runtime/tidy/run-engines.mjs +11 -5
- package/src/session-runtime/agent-tool-routing.mjs +19 -13
- package/src/session-runtime/boot/apis.mjs +13 -5
- package/src/session-runtime/boot/facade.mjs +1 -0
- package/src/session-runtime/boot/infrastructure.mjs +6 -1
- package/src/session-runtime/boot/session.mjs +0 -1
- package/src/session-runtime/boot/tools.mjs +4 -1
- package/src/session-runtime/cwd-plugins/cwd-apply.mjs +12 -5
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +65 -0
- package/src/session-runtime/internal-tool-executor/bridge-tools.mjs +3 -1
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +11 -4
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +115 -18
- package/src/session-runtime/internal-tool-executor.mjs +6 -2
- package/src/session-runtime/lifecycle/cold-heir.mjs +188 -0
- package/src/session-runtime/lifecycle/inheritance.mjs +71 -27
- package/src/session-runtime/lifecycle/session-catalog.mjs +12 -3
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +6 -0
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +29 -6
- package/src/session-runtime/lifecycle/teardown.mjs +72 -7
- package/src/session-runtime/lifecycle-api.mjs +1 -0
- package/src/session-runtime/mcp-glue/connect.mjs +17 -5
- package/src/session-runtime/model-route/set-route.mjs +2 -2
- package/src/session-runtime/native-web-search-usage.mjs +51 -0
- package/src/session-runtime/native-web-search.mjs +10 -1
- package/src/session-runtime/new-session-config.mjs +4 -2
- package/src/session-runtime/provider-auth/login.mjs +4 -0
- package/src/session-runtime/resource-scope-decorate.mjs +10 -3
- package/src/session-runtime/runtime-review-api.mjs +8 -2
- package/src/session-runtime/services/agent-tool/index-write-queue.mjs +81 -20
- package/src/session-runtime/services/agent-tool/lead-worker-index/forgotten-leads.mjs +29 -0
- package/src/session-runtime/services/agent-tool/lead-worker-index/index-file.mjs +1 -1
- package/src/session-runtime/services/agent-tool/lead-worker-index.mjs +73 -7
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +15 -1
- package/src/session-runtime/services/agent-tool/worker-index/row-store.mjs +10 -1
- package/src/session-runtime/services/agent-tool/worker-index.mjs +46 -7
- package/src/session-runtime/services/agent-tool.mjs +3 -0
- package/src/session-runtime/services/channel-admin.mjs +19 -3
- package/src/session-runtime/services/memory-runtime-proxy/calls.mjs +4 -0
- package/src/session-runtime/services/memory-runtime-proxy.mjs +1 -0
- package/src/session-runtime/services/provider-admin.mjs +81 -15
- package/src/session-runtime/session-transcript-purge.mjs +32 -0
- package/src/session-runtime/session-turn-api.mjs +14 -5
- package/src/session-runtime/settings-builtin-tools-api.mjs +9 -0
- package/src/session-runtime/setup-tool/executor.mjs +36 -6
- package/src/session-runtime/setup-tool/extended-actions.mjs +86 -6
- package/src/session-runtime/setup-tool/settings-contract.mjs +13 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +13 -4
- package/src/session-runtime/skills-api.mjs +3 -5
- package/src/session-runtime/tool-surface.mjs +5 -1
- package/src/session-runtime/turn/compaction-gate.mjs +25 -0
- package/src/session-runtime/turn/session-ops.mjs +7 -5
- package/src/session-runtime/turn/side-question-ops.mjs +22 -0
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +5 -1
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +8 -3
- package/src/session-runtime/turn/turn-run/turn-settle.mjs +10 -0
- package/src/session-runtime/turn/turn-run/turn-timing.mjs +4 -3
- package/src/session-runtime/turn/turn-run.mjs +25 -9
- package/src/session-runtime/usage-stats-api.mjs +43 -11
- package/src/session-runtime/workspace/project-branches.mjs +7 -5
- package/src/session-runtime/workspace/transition-steps.mjs +129 -31
- package/src/session-runtime/workspace/transitions.mjs +190 -15
- package/src/standalone/daemon-agent-control.mjs +9 -1
- package/src/standalone/daemon-local-session-bridge.mjs +14 -1
- package/src/standalone/daemon-owner.mjs +17 -4
- package/src/standalone/daemon-pg-stop.mjs +51 -0
- package/src/standalone/daemon-stop-budget.d.mts +2 -0
- package/src/standalone/daemon-stop-budget.mjs +18 -0
- package/src/standalone/daemon-stored-session-views.mjs +2 -0
- package/src/standalone/daemon-telemetry.mjs +19 -0
- package/src/standalone/daemon.mjs +61 -1
- package/src/standalone/desktop-service-registry.mjs +5 -0
- package/src/standalone/local-session-runtime.mjs +70 -19
- package/src/standalone/session-client.mjs +42 -0
- package/src/standalone/session-protocol.mjs +7 -0
- package/src/standalone/session-proxy/projection.mjs +41 -4
- package/src/standalone/session-runtime-inline-host/boot-loaders.mjs +15 -1
- package/src/standalone/session-runtime-inline-host.mjs +1 -0
- package/src/standalone/session-service/session-calls/session-action.mjs +18 -3
- package/src/standalone/session-service-api.mjs +6 -1
- package/src/standalone/session-state-patch.d.mts +2 -1
- package/src/standalone/session-state-patch.mjs +41 -1
- package/src/tui/App.jsx +25 -0
- package/src/tui/app/app-view/floating-panel.jsx +26 -1
- package/src/tui/app/btw-controller.mjs +118 -0
- package/src/tui/app/create-app-pickers.mjs +2 -0
- package/src/tui/app/shell-layout/row-budgets.mjs +11 -1
- package/src/tui/app/shell-layout/surfaces.mjs +3 -1
- package/src/tui/app/slash-commands.mjs +13 -3
- package/src/tui/app/slash-dispatch/session-commands.mjs +19 -6
- package/src/tui/app/use-global-key-input/approval-shortcut.mjs +12 -0
- package/src/tui/app/use-global-key-input.mjs +5 -12
- package/src/tui/app/use-prompt-handlers.mjs +11 -0
- package/src/tui/components/BtwPanel.jsx +53 -0
- package/src/tui/components/QuestionPanel.jsx +275 -0
- package/src/tui/components/question-panel-model.mjs +156 -0
- package/src/tui/dist/index.mjs +2413 -1465
- package/src/tui/session/context-state.mjs +4 -2
- package/src/tui/session/session-api/commands.mjs +10 -0
- package/src/tui/session/session-api/controls.mjs +2 -2
- package/src/tui/session/session-api/integrations.mjs +9 -2
- package/src/tui/session/session-api/lifecycle/dispose.mjs +1 -0
- package/src/tui/session/session-api/lifecycle.mjs +2 -1
- package/src/tui/session/session-api/settings.mjs +6 -0
- package/src/tui/session/session-api.mjs +1 -0
- package/src/tui/session/tool-approval.mjs +10 -7
- package/src/tui/session/transcript-spill.mjs +14 -7
- package/src/tui/session/turn-stream.mjs +174 -31
- package/src/tui/session/turn.mjs +12 -5
- package/src/workflows/default/WORKFLOW.md +3 -1
|
@@ -4,11 +4,17 @@ Read this when choosing a `setup` mutation.
|
|
|
4
4
|
|
|
5
5
|
## Read and navigate
|
|
6
6
|
|
|
7
|
-
- `status` reads one domain
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
- `status` reads one domain from the schema enum; pick the narrowest.
|
|
8
|
+
- Results are compact JSON. `status providers` lists configured providers
|
|
9
|
+
only (`id`, `kind`, `authenticated`, `status`, `accounts` count); add
|
|
10
|
+
`detail: true` for every provider with key URLs, expiry and account ids.
|
|
11
|
+
- `list_models` narrows in steps: no `catalog` returns the provider index
|
|
12
|
+
(`provider`, `count`, `defaultModel?`); `catalog.provider` returns compact
|
|
13
|
+
rows (`id`, `display`, `context`, `efforts`, `fast?`, `vision?`) with
|
|
14
|
+
`total`/`page`/`pages`/`nextPage` (`page`, `limit` ≤ 100, default 25);
|
|
15
|
+
`catalog.model` (plus `provider` if several offer the id) returns that
|
|
16
|
+
model's full options. `webSearch` limits to native-search models; `refresh`
|
|
17
|
+
reloads the catalog.
|
|
12
18
|
- `open` navigates to a supported UI surface. Read `surfaces.md` for targets and
|
|
13
19
|
UI-only settings.
|
|
14
20
|
|
|
@@ -28,7 +34,7 @@ Read this when choosing a `setup` mutation.
|
|
|
28
34
|
| Background memory cycles | `set_recap_enabled` |
|
|
29
35
|
| Web Search tool exposure | `set_web_search_enabled` |
|
|
30
36
|
| Which user instruction files (AGENTS.md / CLAUDE.md) new sessions load: all, agents, claude, or off | `set_instruction_files` |
|
|
31
|
-
| Git, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, or
|
|
37
|
+
| Git, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, voice, or Visualize enabled state | `set_builtin_enabled` |
|
|
32
38
|
| Git, Memory, Office, Code Tidy, Local Provider, Auto Effort, Browser, Computer, or voice preparation | `install_builtin` |
|
|
33
39
|
| Managed local model installation | `install_local_model` |
|
|
34
40
|
| Start or resume a background runtime/model download | `start_local_installation` |
|
|
@@ -44,7 +50,7 @@ Read this when choosing a `setup` mutation.
|
|
|
44
50
|
| Automatic updates | `set_auto_update` |
|
|
45
51
|
| Worktree defaults: new tasks on the current branch or a new worktree, branch prefix, large-repository warning size, automatic cleanup | `set_worktree_settings` |
|
|
46
52
|
| Remove stored provider authentication (one OAuth account at a time) | `forget_provider_auth` |
|
|
47
|
-
| Select, rename,
|
|
53
|
+
| Select, rename, or reorder OAuth accounts, set the switching policy, or allow paid credits | `set_provider_account` |
|
|
48
54
|
| Developer options such as risk-gated OAuth providers | `set_developer_option` |
|
|
49
55
|
| Add an MCP server | `add_mcp_server` |
|
|
50
56
|
| Edit or rename an MCP server | `save_mcp_server` |
|
|
@@ -58,7 +64,7 @@ Read this when choosing a `setup` mutation.
|
|
|
58
64
|
| Enable or disable a plugin | `set_plugin_enabled` |
|
|
59
65
|
| Remove a plugin | `remove_plugin` |
|
|
60
66
|
| Turn back on and reconnect every MCP server a plugin declares | `enable_plugin_mcp` |
|
|
61
|
-
|
|
|
67
|
+
| Hosted model catalog: provider index, one provider's paged model rows, or one model's full options | `list_models` |
|
|
62
68
|
| Agent orchestration, independent of workflow instructions | `set_orchestration_mode` |
|
|
63
69
|
| Safe MCP edit metadata, excluding raw connection/credential values | `get_mcp_server` |
|
|
64
70
|
| Read a workflow, agent, or skill definition | `read_definition` |
|
|
@@ -69,7 +75,7 @@ Read this when choosing a `setup` mutation.
|
|
|
69
75
|
| Delete an existing schedule/webhook | `delete_automation` |
|
|
70
76
|
| Enable/disable a schedule/webhook | `set_automation_enabled` |
|
|
71
77
|
| Webhook listener enabled state, port, or domain | `set_webhook_config` |
|
|
72
|
-
| Desktop keep-awake, run in background after window close, turn-completion notifications, notification volume (Windows), usage pin, or Computer observe-only state | `set_desktop_settings` |
|
|
78
|
+
| Desktop keep-awake, run in background after window close, turn-completion notifications, notification volume (Windows), usage pin, usage rail short + long bars, or Computer observe-only state | `set_desktop_settings` |
|
|
73
79
|
| Desktop theme, display language, side panels, markdown default view, link previews, or tool activity expansion | `set_appearance` |
|
|
74
80
|
| Add a before-tool hook rule | `add_hook_rule` |
|
|
75
81
|
| Enable or disable a hook rule by its `status hooks` index | `set_hook_rule_enabled` |
|
|
@@ -88,8 +94,14 @@ workflow` before changing the corresponding domain.
|
|
|
88
94
|
|
|
89
95
|
- Main and agent routes also accept `modelParameters`, `contextPercent`, and
|
|
90
96
|
`contextTokens` (an exact window in tokens that overrides `contextPercent`);
|
|
91
|
-
agent routes accept `disabled`.
|
|
92
|
-
|
|
97
|
+
agent routes accept `disabled`. Route `autoEffort` (Main and agent only)
|
|
98
|
+
turns Auto reasoning on/off for that route; the Auto Effort built-in toggle
|
|
99
|
+
is the machine-wide switch and must also be on and `ready`.
|
|
100
|
+
Before `set_route`, read `list_models` with `catalog.model` (and `provider`)
|
|
101
|
+
for the model's `effortOptions`, `defaultEffort`, `fastCapable`,
|
|
102
|
+
`serviceTiers`, `modelParameterOptions` and `parameterVariants`; take
|
|
103
|
+
`effort`, `fast` and `modelParameters` values only from it, never from
|
|
104
|
+
remembered model ids.
|
|
93
105
|
- A Web Search route must support native web search; tool exposure is changed
|
|
94
106
|
separately.
|
|
95
107
|
- Definition actions use `definitionKind` (workflow, agent, skill).
|
|
@@ -102,12 +114,13 @@ workflow` before changing the corresponding domain.
|
|
|
102
114
|
|
|
103
115
|
## Providers and authentication
|
|
104
116
|
|
|
105
|
-
Use `status providers` for authenticated state
|
|
117
|
+
Use `status providers` for authenticated state; `detail: true` adds each API
|
|
118
|
+
key's source.
|
|
106
119
|
|
|
107
120
|
- API-key and OAuth providers: `open providers`, then the user completes
|
|
108
121
|
authentication in the visible UI.
|
|
109
122
|
- Custom providers are registered, tested, and removed in the Providers UI;
|
|
110
|
-
`status providers` lists them as API rows with `custom: true`.
|
|
123
|
+
`status providers` with `detail: true` lists them as API rows with `custom: true`.
|
|
111
124
|
- Local Provider is installed and enabled as a Built-in. Its endpoint is
|
|
112
125
|
Mixdog-managed and is never configured by the user.
|
|
113
126
|
Use the `local-provider` skill for hardware checks, model selection, downloads,
|
|
@@ -115,10 +128,14 @@ Use `status providers` for authenticated state and source.
|
|
|
115
128
|
the detail dialog lists installed models rather than the download catalog.
|
|
116
129
|
- Forgetting authentication is destructive and requires explicit approval.
|
|
117
130
|
It removes one OAuth account; a provider with several accounts requires
|
|
118
|
-
`accountId` from the account list in `status providers`.
|
|
119
|
-
- `set_provider_account` changes the selected account,
|
|
120
|
-
|
|
121
|
-
|
|
131
|
+
`accountId` from the account list in `status providers` with `detail: true`.
|
|
132
|
+
- `set_provider_account` changes the selected account, paid-credit use after
|
|
133
|
+
plan limits (`useCredits`), account order (every account id exactly once),
|
|
134
|
+
an account label, or the switching `policy`: `manual` stays on the selected
|
|
135
|
+
account, `limit` switches when it hits a limit, `headroom` starts each new
|
|
136
|
+
session on the account with the most headroom. `status providers` with
|
|
137
|
+
`detail: true` returns the current `policy` when one is set. Sign-in for a new account still
|
|
138
|
+
happens in the Providers UI.
|
|
122
139
|
- `status developer` lists developer options. An option with a `warning` is
|
|
123
140
|
enabled only after the user explicitly accepts that warning, passed as
|
|
124
141
|
`riskAccepted:true`; never assume acceptance.
|
|
@@ -159,7 +176,12 @@ markers are read with `status desktop`.
|
|
|
159
176
|
reasoning effort with a local judge model downloaded in the background.
|
|
160
177
|
Enabling or installing it fails on unsupported machines; `status features`
|
|
161
178
|
reports `supported`, `installing` (judge download running) and `ready`.
|
|
179
|
+
- Visualize is toggle-only through `set_builtin_enabled` (on by default);
|
|
180
|
+
`install_builtin` does not accept it.
|
|
162
181
|
- Terminal follows the live Desktop terminal bridge and has no toggle.
|
|
182
|
+
- Environment feature overrides (`MIXDOG_FEATURE_*`) win over these toggles;
|
|
183
|
+
they are diagnostics for headless or benchmark environments, not user
|
|
184
|
+
settings.
|
|
163
185
|
- Browser Use and Computer Use installation/toggles use the same
|
|
164
186
|
`install_builtin` and `set_builtin_enabled` actions through a live Desktop
|
|
165
187
|
receipt. Computer Use runs on Windows, macOS, and Linux desktops. These
|
|
@@ -177,16 +199,12 @@ markers are read with `status desktop`.
|
|
|
177
199
|
only as `hasArgumentEdit`; their contents are never returned. Indexes shift
|
|
178
200
|
after a delete;
|
|
179
201
|
re-read status before addressing another rule.
|
|
180
|
-
- `add_hook_rule`
|
|
181
|
-
and optional `tool`, `match`, `cwd`, `reason`. modify/rewrite need exactly
|
|
182
|
-
one of `patch` (merged into the arguments) or `args` (replaces them).
|
|
202
|
+
- `add_hook_rule` with modify/rewrite needs exactly one of `patch` or `args`.
|
|
183
203
|
- `delete_hook_rule` is destructive and requires explicit approval for the
|
|
184
204
|
named rule; disabling with `set_hook_rule_enabled` preserves it.
|
|
185
205
|
- `status media` shows the remembered lane/model per kind. `set_media_default`
|
|
186
206
|
accepts only a signed-in lane that offers the kind (and the model, when
|
|
187
207
|
given) in the live media catalog; the media tool's `list` reads that catalog.
|
|
188
|
-
- Environment feature overrides are diagnostics for headless or benchmark
|
|
189
|
-
environments, not ordinary user settings.
|
|
190
208
|
|
|
191
209
|
## Skills, MCP, and plugins
|
|
192
210
|
|
|
@@ -201,6 +219,10 @@ markers are read with `status desktop`.
|
|
|
201
219
|
transport. Raw credential fields are not accepted; `env_vars`,
|
|
202
220
|
`bearer_token_env_var`, and `env_http_headers` reference existing environment
|
|
203
221
|
variables without exposing their values.
|
|
222
|
+
- `startupTimeoutSec` (connect/handshake, default 30) and `toolTimeoutSec`
|
|
223
|
+
(per tool call, default 120) are positive seconds. Raise them for slow
|
|
224
|
+
servers instead of reconnecting repeatedly; a timed-out call is never
|
|
225
|
+
replayed.
|
|
204
226
|
- Environment/header maps are partial patches. Omitted keys are preserved;
|
|
205
227
|
`null` explicitly removes one key, including a stored credential.
|
|
206
228
|
- Plugin enablement moves its contributed skills and MCP integrations together.
|
|
@@ -18,7 +18,7 @@ or requests a setting with no mutation action.
|
|
|
18
18
|
| `profile` | User profile |
|
|
19
19
|
| `autoclear` | Session lifecycle controls |
|
|
20
20
|
| `memory` | Memory capability surface |
|
|
21
|
-
| `mcp` | Extensions → Skill → MCP |
|
|
21
|
+
| `mcp` | Extensions → Skill → MCP, including OAuth Connect/Reconnect/Disconnect |
|
|
22
22
|
| `skills` | Extensions → Skill → Skills |
|
|
23
23
|
| `plugins` | Extensions → Plugin |
|
|
24
24
|
| `update` | Update surface |
|
|
@@ -56,15 +56,15 @@ the user to Desktop.
|
|
|
56
56
|
|
|
57
57
|
## Desktop-backed settings
|
|
58
58
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
installation and toggles, Projects, and linked-device revocation through the
|
|
64
|
-
attached Desktop. A receipt identifies `scope:desktop-host`.
|
|
59
|
+
`set_desktop_settings`, `set_appearance`, `set_activity_rail_pins`,
|
|
60
|
+
`save_project`, `remove_project`, `revoke_linked_device`, and Browser/Computer
|
|
61
|
+
install or toggles run through the attached Desktop; the receipt identifies
|
|
62
|
+
`scope:desktop-host`.
|
|
65
63
|
|
|
66
64
|
Computer observe-only and background Memory cycles (`set_recap_enabled`)
|
|
67
|
-
have no settings control in either app; setup is their only supported route.
|
|
65
|
+
have no settings control in either app; setup is their only supported route.
|
|
66
|
+
Usage pin and the short + long rail bars live in the usage card's flyout menu
|
|
67
|
+
on the activity rail.
|
|
68
68
|
|
|
69
69
|
Schedules/webhooks and workflow/agent/skill definitions use their runtime
|
|
70
70
|
actions directly. These do not require clicking their Desktop rails.
|
|
@@ -74,6 +74,8 @@ actions directly. These do not require clicking their Desktop rails.
|
|
|
74
74
|
The setup tool does not mutate:
|
|
75
75
|
|
|
76
76
|
- API keys, OAuth, usage sign-in, and GitHub CLI connection;
|
|
77
|
+
- MCP server OAuth sign-in and sign-out (Desktop MCP list/editor, TUI
|
|
78
|
+
`/mcp login` and `/mcp logout`; remote windows paste the redirect address);
|
|
77
79
|
- notification permission and subscription on the receiving device;
|
|
78
80
|
- web-app pairing credentials and OS permission dialogs;
|
|
79
81
|
- TUI-local theme palettes (use `/theme`; Desktop themes are separate).
|
package/src/headless-exec.mjs
CHANGED
|
@@ -437,19 +437,26 @@ async function createHeadlessSessionRuntime(boundary, { provider, model, cwd, we
|
|
|
437
437
|
// hundred bytes and the write is atomic, so the cost is negligible and a
|
|
438
438
|
// live run stays readable from outside.
|
|
439
439
|
function headlessAskOptions({ stats, lifecycle, observedModels, writeUsage }) {
|
|
440
|
+
const recordUsage = (delta) => {
|
|
441
|
+
const observedModel = clean(delta?.model);
|
|
442
|
+
if (observedModel) observedModels.add(observedModel);
|
|
443
|
+
applyUsageDelta(stats, delta);
|
|
444
|
+
try {
|
|
445
|
+
writeUsage();
|
|
446
|
+
} catch {
|
|
447
|
+
// Telemetry must never break the session; the exit path reports.
|
|
448
|
+
}
|
|
449
|
+
};
|
|
440
450
|
return {
|
|
441
451
|
onTextReset: () => true,
|
|
442
452
|
onUsageDelta: (delta) => {
|
|
443
|
-
|
|
444
|
-
if (observedModel) observedModels.add(observedModel);
|
|
445
|
-
applyUsageDelta(stats, delta);
|
|
453
|
+
recordUsage(delta);
|
|
446
454
|
lifecycle?.onUsageDelta(delta);
|
|
447
|
-
try {
|
|
448
|
-
writeUsage();
|
|
449
|
-
} catch {
|
|
450
|
-
// Telemetry must never break the session; the exit path reports.
|
|
451
|
-
}
|
|
452
455
|
},
|
|
456
|
+
// Native web search runs its own provider send; fold its spend into the
|
|
457
|
+
// run's totals. It is not a main-stream request, so the lifecycle's
|
|
458
|
+
// model-request events stay untouched.
|
|
459
|
+
onNativeWebSearchUsage: recordUsage,
|
|
453
460
|
...(lifecycle
|
|
454
461
|
? {
|
|
455
462
|
onProviderSendStarted: () => lifecycle.onProviderSendStarted(),
|
package/src/lib/keychain-cjs.cjs
CHANGED
|
@@ -282,7 +282,8 @@ function darwinSet(account, value) {
|
|
|
282
282
|
|
|
283
283
|
function darwinDelete(account) {
|
|
284
284
|
const r = darwinRun(['delete-generic-password', '-a', account, '-s', SERVICE]);
|
|
285
|
-
|
|
285
|
+
// Exit 44 is errSecItemNotFound: nothing stored, so nothing to delete.
|
|
286
|
+
if (r.status !== 0 && r.status !== 44) throw new Error(`[keychain] security delete failed: ${r.stderr || r.stdout}`);
|
|
286
287
|
}
|
|
287
288
|
|
|
288
289
|
// ---------------------------------------------------------------------------
|
|
@@ -983,9 +984,11 @@ function win32Set(account, value) {
|
|
|
983
984
|
}
|
|
984
985
|
|
|
985
986
|
function win32Delete(account) {
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
987
|
+
try {
|
|
988
|
+
fs.unlinkSync(dpApiFile(account));
|
|
989
|
+
} catch (error) {
|
|
990
|
+
if (error?.code !== 'ENOENT') throw error;
|
|
991
|
+
}
|
|
989
992
|
}
|
|
990
993
|
|
|
991
994
|
// ---------------------------------------------------------------------------
|
|
@@ -7,13 +7,14 @@ partial: true
|
|
|
7
7
|
|
|
8
8
|
## Shared Output Format
|
|
9
9
|
|
|
10
|
-
- Lead with the answer
|
|
11
|
-
reader's vocabulary
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
10
|
+
- Lead with the answer; no restated request or closing recap. Natural,
|
|
11
|
+
complete sentences in the reader's vocabulary, each point once; no arrow
|
|
12
|
+
chains or unexplained shorthand.
|
|
13
|
+
- Plain prose for simple questions; headings, lists, or tables only for real
|
|
14
|
+
structure. GitHub-flavored Markdown, `$$…$$` for display math.
|
|
15
|
+
- Distinguish facts, inference, and uncertainty; keep exact literals and
|
|
16
|
+
material risks. Caveats only when they change the reader's next step.
|
|
17
|
+
- Never pad: no tangents, unsolicited offers, raw dumps, or process recaps.
|
|
18
|
+
Explicit depth requests win; depth applies to substantive answers only.
|
|
19
|
+
- At every depth keep decision-relevant failures, security warnings, and
|
|
20
|
+
destructive-action confirmations; quote needed error text exactly.
|
package/src/rules/agent/AGENT.md
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
unapproved destructive action, or a blocker.
|
|
7
7
|
- Communicate in English. Call tools immediately, with no preamble or
|
|
8
8
|
progress text.
|
|
9
|
-
- Reporting: report once, when
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
failures
|
|
13
|
-
Lead owns the independent review.
|
|
9
|
+
- Reporting: report once, when done, per your role's output contract;
|
|
10
|
+
otherwise done, partial, or blocked with the outcome, then only applicable
|
|
11
|
+
items: changed files with key symbols, checks run (passes in one line,
|
|
12
|
+
failures with decisive error text), material risks or blockers. No raw
|
|
13
|
+
logs, narration, or restated brief. Lead owns the independent review.
|
package/src/rules/lead/LEAD.md
CHANGED
|
@@ -17,11 +17,11 @@
|
|
|
17
17
|
<!-- tools: agent -->
|
|
18
18
|
- Briefing an agent: it sees only the brief, never this conversation. The
|
|
19
19
|
brief is written in English whatever language the user writes in, and
|
|
20
|
-
holds
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
holds only the task in the user's terms and its use; owned scope and
|
|
21
|
+
exclusions; changes located by path plus symbol or quoted line, not line
|
|
22
|
+
numbers; completion criteria; any return need beyond the role. No
|
|
23
|
+
background, rediscoverable detail, or known rules; large evidence by path.
|
|
24
|
+
A fresh or respawned agent gets the whole brief; a
|
|
25
25
|
continuing agent gets only what changed. Never assign the same work twice;
|
|
26
26
|
interrupt only to cancel.
|
|
27
27
|
<!-- tools: agent -->
|
|
@@ -21,7 +21,8 @@ let _serviceUrl = null;
|
|
|
21
21
|
// came from legacy active-instance.json). Lets a flush connect-failure distrust
|
|
22
22
|
// a recycled-pid corpse advert so the next resolve falls back to legacy/buffer.
|
|
23
23
|
let _serviceAdvertPort = null;
|
|
24
|
-
let
|
|
24
|
+
let _flushPromise = null;
|
|
25
|
+
let _flushImmediate = null;
|
|
25
26
|
let _localTracePath = null;
|
|
26
27
|
let _localTraceIsExplicit = false;
|
|
27
28
|
let _localTraceBuffer = [];
|
|
@@ -180,6 +181,8 @@ function _flushLocalTrace() {
|
|
|
180
181
|
_localTraceFlushInFlight = false;
|
|
181
182
|
_localTraceFlushPromise = null;
|
|
182
183
|
if (_localTraceBuffer.length > 0) {
|
|
184
|
+
// An append during the write may already have armed a timer.
|
|
185
|
+
if (_localTraceTimer) clearTimeout(_localTraceTimer);
|
|
183
186
|
_localTraceTimer = setTimeout(_flushLocalTrace, 0);
|
|
184
187
|
_localTraceTimer.unref?.();
|
|
185
188
|
}
|
|
@@ -220,11 +223,13 @@ try {
|
|
|
220
223
|
// Ignore lifecycle hook failures in embedded runtimes.
|
|
221
224
|
}
|
|
222
225
|
|
|
226
|
+
const _deps = { readServicePort };
|
|
227
|
+
|
|
223
228
|
function _resolveServiceUrl() {
|
|
224
229
|
if (_serviceUrl) return _serviceUrl;
|
|
225
230
|
try {
|
|
226
231
|
// Standalone memory HTTP uses its pid-validated discovery advert.
|
|
227
|
-
const advertPort = readServicePort('memory', { requirePid: false });
|
|
232
|
+
const advertPort = _deps.readServicePort('memory', { requirePid: false });
|
|
228
233
|
if (advertPort) {
|
|
229
234
|
_serviceAdvertPort = advertPort;
|
|
230
235
|
_serviceUrl = `http://127.0.0.1:${advertPort}`;
|
|
@@ -237,71 +242,78 @@ function _resolveServiceUrl() {
|
|
|
237
242
|
}
|
|
238
243
|
}
|
|
239
244
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
245
|
+
// Single entry point for every flush trigger (timer, immediate, drain). While a
|
|
246
|
+
// flush is in flight, callers share its promise; its completion schedules the
|
|
247
|
+
// continuation for whatever remains.
|
|
248
|
+
function _flush() {
|
|
249
|
+
if (_flushTimer) {
|
|
250
|
+
clearTimeout(_flushTimer);
|
|
251
|
+
_flushTimer = null;
|
|
252
|
+
}
|
|
253
|
+
// This flush takes over any queued immediate; its completion reschedules.
|
|
254
|
+
if (_flushImmediate) {
|
|
255
|
+
clearImmediate(_flushImmediate);
|
|
256
|
+
_flushImmediate = null;
|
|
246
257
|
}
|
|
247
|
-
|
|
258
|
+
if (_flushPromise) return _flushPromise;
|
|
259
|
+
if (_buffer.length === 0) return Promise.resolve();
|
|
260
|
+
_flushPromise = _flushOnce().finally(() => {
|
|
261
|
+
_flushPromise = null;
|
|
262
|
+
_scheduleContinuation();
|
|
263
|
+
});
|
|
264
|
+
return _flushPromise;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
async function _flushOnce() {
|
|
268
|
+
// Discovery runs here only (timer / drain / full-batch continuation), never per append.
|
|
269
|
+
const url = _resolveServiceUrl();
|
|
270
|
+
if (!url) return;
|
|
271
|
+
const batch = _buffer.splice(0, _FLUSH_BATCH_SIZE);
|
|
248
272
|
try {
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
|
|
273
|
+
const resp = await fetch(`${url}/admin/trace-record`, {
|
|
274
|
+
method: 'POST',
|
|
275
|
+
headers: { 'Content-Type': 'application/json' },
|
|
276
|
+
body: JSON.stringify({ events: batch }),
|
|
277
|
+
signal: AbortSignal.timeout(5000),
|
|
278
|
+
});
|
|
279
|
+
// Always drain the body. An undrained response body keeps the
|
|
280
|
+
// underlying keep-alive socket referenced, which can hold the event
|
|
281
|
+
// loop open and make a short-lived process (smoke scripts / one-shot
|
|
282
|
+
// agent tasks) appear to hang for seconds after its work is done.
|
|
256
283
|
try {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
body: JSON.stringify({ events: batch }),
|
|
261
|
-
signal: AbortSignal.timeout(5000),
|
|
262
|
-
});
|
|
263
|
-
// Always drain the body. An undrained response body keeps the
|
|
264
|
-
// underlying keep-alive socket referenced, which can hold the event
|
|
265
|
-
// loop open and make a short-lived process (smoke scripts / one-shot
|
|
266
|
-
// agent tasks) appear to hang for seconds after its work is done.
|
|
267
|
-
try {
|
|
268
|
-
await resp.arrayBuffer();
|
|
269
|
-
} catch {
|
|
270
|
-
/* body already gone */
|
|
271
|
-
}
|
|
272
|
-
if (!resp.ok) {
|
|
273
|
-
warnAgentOnce(
|
|
274
|
-
'agent-trace:flush-error',
|
|
275
|
-
`[agent-trace] /admin/trace-record returned ${resp.status} — dropping batch`
|
|
276
|
-
);
|
|
277
|
-
}
|
|
278
|
-
} catch (err) {
|
|
279
|
-
_serviceUrl = null;
|
|
280
|
-
// Discovery-first consumer with no health probe: a connect failure
|
|
281
|
-
// means the pid-validated advert points at a dead (recycled-pid)
|
|
282
|
-
// port. Distrust it (connection-level errors ONLY — a timeout is a
|
|
283
|
-
// slow-but-alive daemon, not a corpse) so the next resolve falls back
|
|
284
|
-
// to legacy/buffer instead of re-trusting the same advert.
|
|
285
|
-
if (_serviceAdvertPort && isConnRefuseError(err)) markServiceUnreachable('memory', _serviceAdvertPort);
|
|
286
|
-
_serviceAdvertPort = null;
|
|
287
|
-
warnAgentOnce('agent-trace:flush-fetch', `[agent-trace] flush fetch failed (${err?.message}) — dropping batch`);
|
|
284
|
+
await resp.arrayBuffer();
|
|
285
|
+
} catch {
|
|
286
|
+
/* body already gone */
|
|
288
287
|
}
|
|
289
|
-
if (
|
|
290
|
-
|
|
291
|
-
|
|
288
|
+
if (!resp.ok) {
|
|
289
|
+
warnAgentOnce(
|
|
290
|
+
'agent-trace:flush-error',
|
|
291
|
+
`[agent-trace] /admin/trace-record returned ${resp.status} — dropping batch`
|
|
292
|
+
);
|
|
292
293
|
}
|
|
293
|
-
}
|
|
294
|
-
|
|
294
|
+
} catch (err) {
|
|
295
|
+
_serviceUrl = null;
|
|
296
|
+
// Discovery-first consumer with no health probe: a connect failure
|
|
297
|
+
// means the pid-validated advert points at a dead (recycled-pid)
|
|
298
|
+
// port. Distrust it (connection-level errors ONLY — a timeout is a
|
|
299
|
+
// slow-but-alive daemon, not a corpse) so the next resolve falls back
|
|
300
|
+
// to legacy/buffer instead of re-trusting the same advert.
|
|
301
|
+
if (_serviceAdvertPort && isConnRefuseError(err)) markServiceUnreachable('memory', _serviceAdvertPort);
|
|
302
|
+
_serviceAdvertPort = null;
|
|
303
|
+
warnAgentOnce('agent-trace:flush-fetch', `[agent-trace] flush fetch failed (${err?.message}) — dropping batch`);
|
|
295
304
|
}
|
|
296
305
|
}
|
|
297
306
|
|
|
298
|
-
|
|
299
|
-
|
|
307
|
+
// Full batch pending and the service is usable → one immediate; everything else
|
|
308
|
+
// → the single non-resetting retry timer.
|
|
309
|
+
function _scheduleContinuation() {
|
|
310
|
+
if (_buffer.length === 0) return;
|
|
311
|
+
if (_serviceUrl && _buffer.length >= _FLUSH_BATCH_SIZE) {
|
|
300
312
|
if (_flushTimer) {
|
|
301
313
|
clearTimeout(_flushTimer);
|
|
302
314
|
_flushTimer = null;
|
|
303
315
|
}
|
|
304
|
-
setImmediate(_flush);
|
|
316
|
+
if (!_flushImmediate) _flushImmediate = setImmediate(_flush);
|
|
305
317
|
} else if (!_flushTimer) {
|
|
306
318
|
_flushTimer = setTimeout(_flush, _FLUSH_INTERVAL_MS);
|
|
307
319
|
// Never let the periodic trace flush keep the event loop alive: a
|
|
@@ -328,11 +340,10 @@ async function _drainLocalTrace() {
|
|
|
328
340
|
async function drainAgentTrace() {
|
|
329
341
|
await _drainLocalTrace();
|
|
330
342
|
if (!_resolveServiceUrl()) return;
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
for (let i = 0; i < 10 && _buffer.length > 0; i++) {
|
|
343
|
+
// Each iteration either awaits the in-flight flush or delivers a batch, so
|
|
344
|
+
// this terminates; it stops early only when the service is unresolvable.
|
|
345
|
+
while (_buffer.length > 0 || _flushPromise) {
|
|
346
|
+
if (!_flushPromise && !_resolveServiceUrl()) break;
|
|
336
347
|
await _flush();
|
|
337
348
|
}
|
|
338
349
|
}
|
|
@@ -363,7 +374,8 @@ function appendAgentTrace(record = {}) {
|
|
|
363
374
|
}
|
|
364
375
|
_appendLocalTrace(row);
|
|
365
376
|
_buffer.push(row);
|
|
366
|
-
|
|
377
|
+
// An in-flight flush schedules its own continuation on completion.
|
|
378
|
+
if (!_flushPromise) _scheduleContinuation();
|
|
367
379
|
} catch {
|
|
368
380
|
// Never break agent execution for telemetry
|
|
369
381
|
}
|
|
@@ -464,7 +476,26 @@ function _flushToolFailuresSync() {
|
|
|
464
476
|
}
|
|
465
477
|
}
|
|
466
478
|
|
|
479
|
+
// Test-only seams: inject discovery and reset module state between cases.
|
|
480
|
+
const _traceIoTest = {
|
|
481
|
+
setReadServicePort(fn) {
|
|
482
|
+
_deps.readServicePort = fn;
|
|
483
|
+
},
|
|
484
|
+
// Resolves once the in-flight local spool write and its completion handler have run.
|
|
485
|
+
localWrite: () => _localTraceFlushPromise,
|
|
486
|
+
reset() {
|
|
487
|
+
_deps.readServicePort = readServicePort;
|
|
488
|
+
_buffer.length = 0;
|
|
489
|
+
_flushTimer = null;
|
|
490
|
+
_flushImmediate = null;
|
|
491
|
+
_flushPromise = null;
|
|
492
|
+
_serviceUrl = null;
|
|
493
|
+
_serviceAdvertPort = null;
|
|
494
|
+
},
|
|
495
|
+
};
|
|
496
|
+
|
|
467
497
|
export {
|
|
498
|
+
_traceIoTest,
|
|
468
499
|
appendAgentTrace,
|
|
469
500
|
drainAgentTrace,
|
|
470
501
|
normalizeSessionId,
|
|
@@ -31,9 +31,18 @@ export function maxMtimeRecursive(paths, depth = 3) {
|
|
|
31
31
|
* @returns {string}
|
|
32
32
|
*/
|
|
33
33
|
export function mtimeSignatureRecursive(paths, depth = 3) {
|
|
34
|
+
return createHash('sha1').update(mtimeSignatureText(paths, depth)).digest('hex');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The raw text mtimeSignatureRecursive hashes (`path:mtime` lines). Texts of
|
|
39
|
+
* consecutive path groups joined with '\n' hash to the same signature as one
|
|
40
|
+
* call over all of them, so a caller can reuse an unchanged group's text.
|
|
41
|
+
*/
|
|
42
|
+
export function mtimeSignatureText(paths, depth = 3) {
|
|
34
43
|
const parts = [];
|
|
35
44
|
walkMtimes(paths, depth, (p, m) => parts.push(`${p}:${m}`));
|
|
36
|
-
return
|
|
45
|
+
return parts.join('\n');
|
|
37
46
|
}
|
|
38
47
|
|
|
39
48
|
function walkMtimes(paths, depth, visit) {
|
|
@@ -67,6 +67,13 @@ export function mergeStoredProviders({ raw, defaults, includeSecrets, presenceOn
|
|
|
67
67
|
if (includeSecrets) {
|
|
68
68
|
for (const [name, val] of Object.entries(mergedProviders)) {
|
|
69
69
|
if (val?.type !== 'custom' || !name.startsWith('custom-') || val.auth === 'none') continue;
|
|
70
|
+
if (val.apiKeyEnv) {
|
|
71
|
+
// Env mode: the named variable is the only key source (no keychain).
|
|
72
|
+
const { apiKey: _dropped, ...rest } = val;
|
|
73
|
+
const envKey = process.env[val.apiKeyEnv];
|
|
74
|
+
mergedProviders[name] = envKey && !presenceOnly ? { ...rest, apiKey: envKey } : rest;
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
70
77
|
const kc = storedKey(name);
|
|
71
78
|
if (kc) mergedProviders[name] = withKey(val, name, kc);
|
|
72
79
|
}
|
|
@@ -280,6 +280,8 @@ export function loadConfig(options = {}) {
|
|
|
280
280
|
shell: raw.shell && typeof raw.shell === 'object' ? raw.shell : {},
|
|
281
281
|
update: raw.update && typeof raw.update === 'object' ? { ...raw.update } : {},
|
|
282
282
|
recap: recapConfig,
|
|
283
|
+
// The model may title the session (session tool, action=rename); default on.
|
|
284
|
+
aiSessionTitles: raw.aiSessionTitles !== false,
|
|
283
285
|
worktree: normalizeWorktreeSettings(raw.worktree),
|
|
284
286
|
developer: normalizeDeveloperConfig(raw.developer),
|
|
285
287
|
modules: canonicalizeModulesStorage(raw.modules) || {},
|
|
@@ -450,6 +452,9 @@ function buildAgentSaveBuilder(config) {
|
|
|
450
452
|
} else Object.assign(next, disabledAgentDelta(canonicalRoutes.disabledAgents));
|
|
451
453
|
if (config.memoryTools && typeof config.memoryTools === 'object') next.memoryTools = { ...config.memoryTools };
|
|
452
454
|
else delete next.memoryTools;
|
|
455
|
+
// Default true lives in code: only the opt-out is stored.
|
|
456
|
+
if (config.aiSessionTitles === false) next.aiSessionTitles = false;
|
|
457
|
+
else delete next.aiSessionTitles;
|
|
453
458
|
delete next.instructionFiles;
|
|
454
459
|
Object.assign(next, storedInstructionFiles(config));
|
|
455
460
|
delete next.workflowRoutes;
|