mixdog 1.2.5 → 1.3.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/LICENSES/simple-icons-CC0-1.0.txt +30 -0
- package/NOTICE.md +19 -0
- package/package.json +4 -1
- package/scripts/check-model-recommendations.mjs +89 -0
- package/scripts/gate-local.mjs +7 -0
- package/scripts/lib/gate-scheduler.mjs +2 -2
- package/scripts/lib/isolated-test-env.mjs +16 -0
- package/scripts/lib/run-node-tests.mjs +5 -14
- package/scripts/provider-pingpong-live.mjs +9 -9
- package/src/agents/advisor/AGENT.md +4 -4
- package/src/agents/advisor/agent.json +1 -1
- package/src/agents/reviewer/AGENT.md +5 -4
- package/src/agents/reviewer/agent.json +1 -1
- package/src/defaults/shipped-history.json +17 -0
- package/src/defaults/skills/browser-use/SKILL.md +7 -1
- package/src/defaults/skills/computer-use/SKILL.md +3 -1
- package/src/defaults/skills/memory-management/SKILL.md +4 -1
- package/src/defaults/skills/setup/references/actions.md +11 -4
- package/src/defaults/skills/setup-guide/SKILL.md +175 -0
- package/src/defaults/skills/setup-guide/model-recommendations.json +333 -0
- package/src/defaults/skills/visualize/SKILL.md +3 -2
- package/src/lib/rules-builder.cjs +56 -7
- package/src/output-styles/common.md +22 -6
- package/src/output-styles/detailed.md +7 -5
- package/src/output-styles/minimal.md +7 -3
- package/src/output-styles/simple.md +2 -3
- package/src/rules/agent/AGENT.md +7 -1
- package/src/rules/agent-mode/AGENT_MODE.md +24 -0
- package/src/rules/agent-mode/MIXY.md +21 -0
- package/src/rules/agent-mode/ROUTINE.md +6 -0
- package/src/rules/lead/LEAD.md +9 -4
- package/src/rules/shared/10-tool-workflow.md +2 -1
- package/src/rules/shared/60-verification.md +4 -5
- package/src/rules/shared/70-delivery.md +3 -0
- package/src/runtime/agent/orchestrator/agent-runtime/cache-strategy.mjs +2 -1
- package/src/runtime/agent/orchestrator/agent-runtime/room-supervisor-completion.mjs +86 -0
- package/src/runtime/agent/orchestrator/config.mjs +6 -0
- package/src/runtime/agent/orchestrator/context/deferred-tools.mjs +77 -14
- package/src/runtime/agent/orchestrator/context/role-instructions.mjs +182 -13
- package/src/runtime/agent/orchestrator/context/skill-catalog.mjs +5 -3
- package/src/runtime/agent/orchestrator/internal-agents.mjs +10 -0
- package/src/runtime/agent/orchestrator/mcp/agent-connectors.mjs +215 -0
- package/src/runtime/agent/orchestrator/mcp/child-tree.mjs +58 -64
- package/src/runtime/agent/orchestrator/mcp/client-transport.mjs +10 -1
- package/src/runtime/agent/orchestrator/mcp/client.mjs +122 -15
- package/src/runtime/agent/orchestrator/mcp/oauth-account.mjs +97 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-callback.mjs +2 -3
- package/src/runtime/agent/orchestrator/mcp/oauth-client.mjs +49 -0
- package/src/runtime/agent/orchestrator/mcp/oauth-credentials.mjs +59 -9
- package/src/runtime/agent/orchestrator/mcp/oauth-login.mjs +32 -7
- package/src/runtime/agent/orchestrator/mcp/oauth-provider.mjs +45 -6
- package/src/runtime/agent/orchestrator/mcp/oauth.mjs +195 -6
- package/src/runtime/agent/orchestrator/mcp/server-connectors.mjs +17 -0
- package/src/runtime/agent/orchestrator/providers/account-pool.mjs +9 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth-credentials.mjs +41 -19
- package/src/runtime/agent/orchestrator/providers/anthropic-oauth.mjs +3 -2
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events/content-block-start.mjs +4 -1
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn/turn-events.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse-turn.mjs +3 -0
- package/src/runtime/agent/orchestrator/providers/anthropic-sse.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/anthropic.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-login.mjs +11 -5
- package/src/runtime/agent/orchestrator/providers/antigravity-oauth-tokens.mjs +4 -0
- package/src/runtime/agent/orchestrator/providers/catalog-deadline.mjs +163 -0
- package/src/runtime/agent/orchestrator/providers/catalog-failures.mjs +34 -0
- package/src/runtime/agent/orchestrator/providers/cursor-client-version.mjs +1 -1
- package/src/runtime/agent/orchestrator/providers/grok-oauth-login.mjs +38 -14
- package/src/runtime/agent/orchestrator/providers/lib/oauth-page.mjs +100 -26
- package/src/runtime/agent/orchestrator/providers/lib/send-callbacks.mjs +24 -0
- package/src/runtime/agent/orchestrator/providers/oauth-credential-probes.mjs +13 -0
- package/src/runtime/agent/orchestrator/providers/oauth-usage.mjs +2 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-send.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/chunk-events.mjs +4 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream/stream-state.mjs +3 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-chat-stream.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-models.mjs +49 -4
- package/src/runtime/agent/orchestrator/providers/openai-compat-presets.mjs +0 -7
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses-events.mjs +7 -1
- package/src/runtime/agent/orchestrator/providers/openai-compat-responses.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-stream.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/openai-compat-xai-send.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-error-contract.mjs +17 -12
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state/response-events.mjs +5 -1
- package/src/runtime/agent/orchestrator/providers/openai-http-sse-response-state.mjs +11 -2
- package/src/runtime/agent/orchestrator/providers/openai-oauth-http-sse.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-login.mjs +45 -16
- package/src/runtime/agent/orchestrator/providers/openai-oauth-tokens.mjs +10 -0
- package/src/runtime/agent/orchestrator/providers/openai-oauth-ws.mjs +1 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-connect.mjs +196 -0
- package/src/runtime/agent/orchestrator/providers/openai-ws-pool.mjs +74 -9
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream/event-switch.mjs +14 -1
- package/src/runtime/agent/orchestrator/providers/openai-ws-stream.mjs +2 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go-oauth-login.mjs +194 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go-oauth-tokens.mjs +353 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go-oauth.mjs +293 -0
- package/src/runtime/agent/orchestrator/providers/opencode-go-usage.mjs +33 -100
- package/src/runtime/agent/orchestrator/providers/opencode-go.mjs +23 -14
- package/src/runtime/agent/orchestrator/providers/registry.mjs +41 -27
- package/src/runtime/agent/orchestrator/runtime-core/ask-user-tool-defs.mjs +98 -4
- package/src/runtime/agent/orchestrator/runtime-core/context-status-shape.mjs +4 -0
- package/src/runtime/agent/orchestrator/runtime-core/extension-scopes.mjs +6 -4
- package/src/runtime/agent/orchestrator/runtime-core/orchestration.mjs +15 -8
- package/src/runtime/agent/orchestrator/runtime-core/plugin-mcp.mjs +1 -0
- package/src/runtime/agent/orchestrator/runtime-core/tool-bridge.mjs +12 -6
- package/src/runtime/agent/orchestrator/runtime-core/tool-catalog.mjs +32 -5
- package/src/runtime/agent/orchestrator/runtime-core/tool-defs.mjs +10 -4
- package/src/runtime/agent/orchestrator/runtime-core/workflow/agents.mjs +4 -1
- package/src/runtime/agent/orchestrator/runtime-core/workflow/context.mjs +50 -20
- package/src/runtime/agent/orchestrator/runtime-core/workflow-ids.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/agent-home.d.mts +4 -0
- package/src/runtime/agent/orchestrator/session/agent-home.mjs +33 -0
- package/src/runtime/agent/orchestrator/session/agent-mode.mjs +62 -0
- package/src/runtime/agent/orchestrator/session/agent-pool-progress.mjs +15 -3
- package/src/runtime/agent/orchestrator/session/agent-room-supervisor.d.mts +31 -0
- package/src/runtime/agent/orchestrator/session/agent-room-supervisor.mjs +241 -0
- package/src/runtime/agent/orchestrator/session/agent-room.d.mts +162 -0
- package/src/runtime/agent/orchestrator/session/agent-room.mjs +641 -0
- package/src/runtime/agent/orchestrator/session/catalog-db/schema.mjs +7 -1
- package/src/runtime/agent/orchestrator/session/compact/execution-tail.mjs +74 -13
- package/src/runtime/agent/orchestrator/session/compact/forked-summary.mjs +102 -0
- package/src/runtime/agent/orchestrator/session/compact/runner.mjs +8 -2
- package/src/runtime/agent/orchestrator/session/compact/summary.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/compact/user-message-kind.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/compaction-archive-capture.mjs +6 -2
- package/src/runtime/agent/orchestrator/session/human-gate/gate.mjs +165 -0
- package/src/runtime/agent/orchestrator/session/human-gate/held-message.mjs +95 -0
- package/src/runtime/agent/orchestrator/session/human-gate/outbound-policy.mjs +221 -0
- package/src/runtime/agent/orchestrator/session/human-gate/requests.mjs +195 -0
- package/src/runtime/agent/orchestrator/session/human-gate/store.mjs +167 -0
- package/src/runtime/agent/orchestrator/session/lifecycle-scan.mjs +9 -0
- package/src/runtime/agent/orchestrator/session/loop/compact-policy.mjs +3 -1
- package/src/runtime/agent/orchestrator/session/loop/fresh-context.mjs +39 -2
- package/src/runtime/agent/orchestrator/session/loop/pre-dispatch-deny.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/loop/send-phase.mjs +16 -1
- package/src/runtime/agent/orchestrator/session/loop/tool-exec/before-hook.mjs +82 -33
- package/src/runtime/agent/orchestrator/session/loop/tool-exec.mjs +11 -4
- package/src/runtime/agent/orchestrator/session/loop/tool-exposure-migration.mjs +5 -4
- package/src/runtime/agent/orchestrator/session/loop/tool-helpers.mjs +13 -3
- package/src/runtime/agent/orchestrator/session/loop/usage.mjs +7 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-execute.mjs +1 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-loop-options.mjs +6 -1
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-prepare.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-settle.mjs +2 -0
- package/src/runtime/agent/orchestrator/session/manager/ask-turn-steering-drain.mjs +13 -5
- package/src/runtime/agent/orchestrator/session/manager/pending-lifecycle-epoch.mjs +0 -8
- package/src/runtime/agent/orchestrator/session/manager/pending-message-entry.mjs +10 -7
- package/src/runtime/agent/orchestrator/session/manager/pending-messages.mjs +62 -22
- package/src/runtime/agent/orchestrator/session/manager/prompt-utils.mjs +44 -16
- package/src/runtime/agent/orchestrator/session/manager/rules-cache.mjs +22 -5
- package/src/runtime/agent/orchestrator/session/manager/runtime-liveness.mjs +23 -1
- package/src/runtime/agent/orchestrator/session/manager/session-close.mjs +81 -34
- package/src/runtime/agent/orchestrator/session/manager/session-crud.mjs +39 -4
- package/src/runtime/agent/orchestrator/session/manager/session-lifecycle.mjs +27 -5
- package/src/runtime/agent/orchestrator/session/manager/session-prompt-composition.mjs +55 -8
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +16 -0
- package/src/runtime/agent/orchestrator/session/manager/tool-resolution.mjs +3 -2
- package/src/runtime/agent/orchestrator/session/manager/usage-metrics.mjs +6 -0
- package/src/runtime/agent/orchestrator/session/manager/workflow-switch-notice.mjs +58 -0
- package/src/runtime/agent/orchestrator/session/manager.mjs +2 -2
- package/src/runtime/agent/orchestrator/session/mixy-name.mjs +24 -0
- package/src/runtime/agent/orchestrator/session/pre-send-compact.mjs +32 -5
- package/src/runtime/agent/orchestrator/session/request-fork.mjs +47 -0
- package/src/runtime/agent/orchestrator/session/routine-result.d.mts +70 -0
- package/src/runtime/agent/orchestrator/session/routine-result.mjs +277 -0
- package/src/runtime/agent/orchestrator/session/side-question-store.mjs +16 -1
- package/src/runtime/agent/orchestrator/session/side-question.mjs +5 -43
- package/src/runtime/agent/orchestrator/session/store/fs-probe.mjs +10 -0
- package/src/runtime/agent/orchestrator/session/store/lifecycle-barriers.mjs +73 -6
- package/src/runtime/agent/orchestrator/session/store/load-session.mjs +40 -0
- package/src/runtime/agent/orchestrator/session/store/save-fault.mjs +15 -0
- package/src/runtime/agent/orchestrator/session/store/session-paths.mjs +12 -0
- package/src/runtime/agent/orchestrator/session/store/sweep/sweep-row.mjs +8 -0
- package/src/runtime/agent/orchestrator/session/store-agent-worker-header.mjs +36 -0
- package/src/runtime/agent/orchestrator/session/store-agent-worker-rows.mjs +258 -43
- package/src/runtime/agent/orchestrator/session/store-record-strict-scan.mjs +325 -0
- package/src/runtime/agent/orchestrator/session/store-summary-catalog.mjs +84 -21
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +44 -12
- package/src/runtime/agent/orchestrator/session/store-summary-last-message.mjs +46 -0
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +46 -30
- package/src/runtime/agent/orchestrator/session/store-summary-visibility.mjs +0 -4
- package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +144 -45
- package/src/runtime/agent/orchestrator/session/store-transcript-projection.mjs +32 -13
- package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +364 -38
- package/src/runtime/agent/orchestrator/session/store.mjs +9 -2
- package/src/runtime/agent/orchestrator/session/task-wait-control.mjs +43 -12
- package/src/runtime/agent/orchestrator/session/tool-result-offload.mjs +23 -6
- package/src/runtime/agent/orchestrator/session/transcript-restore/restore.mjs +44 -1
- package/src/runtime/agent/orchestrator/tools/builtin/arg-guard.mjs +12 -6
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/backgrounded-result.mjs +13 -7
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/bashism-rewrite.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/benign-exit.mjs +7 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/completed-result.mjs +40 -7
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/deadline-plan.mjs +37 -34
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/inline-hoist.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool/spawn-env.mjs +0 -4
- package/src/runtime/agent/orchestrator/tools/builtin/bash-tool.mjs +6 -0
- package/src/runtime/agent/orchestrator/tools/builtin/builtin-tools.mjs +29 -27
- package/src/runtime/agent/orchestrator/tools/builtin/external-tool-adapters.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/builtin/find-files-tool.mjs +28 -11
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-policy.mjs +12 -3
- package/src/runtime/agent/orchestrator/tools/builtin/git-command-tool.mjs +203 -101
- package/src/runtime/agent/orchestrator/tools/builtin/git-repo-rw-lock.mjs +90 -41
- package/src/runtime/agent/orchestrator/tools/builtin/lib/list-helpers.mjs +17 -1
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-delivery.mjs +199 -0
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-job-records.mjs +12 -0
- package/src/runtime/agent/orchestrator/tools/builtin/lib/shell-task-output.mjs +165 -39
- package/src/runtime/agent/orchestrator/tools/builtin/list-tool.mjs +25 -13
- package/src/runtime/agent/orchestrator/tools/builtin/native-search-client.mjs +113 -5
- package/src/runtime/agent/orchestrator/tools/builtin/read-batch.mjs +7 -6
- package/src/runtime/agent/orchestrator/tools/builtin/read-formatting.mjs +19 -4
- package/src/runtime/agent/orchestrator/tools/builtin/read-line-collector.mjs +5 -3
- package/src/runtime/agent/orchestrator/tools/builtin/read-single-render.mjs +25 -7
- package/src/runtime/agent/orchestrator/tools/builtin/read-special-files.mjs +2 -1
- package/src/runtime/agent/orchestrator/tools/builtin/read-tool/batch-render.mjs +3 -1
- package/src/runtime/agent/orchestrator/tools/builtin/search-glob-tool.mjs +12 -5
- package/src/runtime/agent/orchestrator/tools/builtin/search-grep-tool.mjs +61 -22
- package/src/runtime/agent/orchestrator/tools/builtin/search-path-diagnostics.mjs +32 -8
- package/src/runtime/agent/orchestrator/tools/builtin/shell-analysis.mjs +193 -19
- package/src/runtime/agent/orchestrator/tools/builtin/shell-direct-exe.mjs +57 -7
- package/src/runtime/agent/orchestrator/tools/builtin/shell-jobs.mjs +123 -32
- package/src/runtime/agent/orchestrator/tools/builtin/shell-lossless-compact.mjs +26 -1
- package/src/runtime/agent/orchestrator/tools/builtin/shell-output.mjs +13 -28
- package/src/runtime/agent/orchestrator/tools/builtin/task-tool.mjs +90 -11
- package/src/runtime/agent/orchestrator/tools/builtin/wait-budgets.mjs +23 -0
- package/src/runtime/agent/orchestrator/tools/builtin.mjs +54 -10
- package/src/runtime/agent/orchestrator/tools/code-graph/build.mjs +22 -28
- package/src/runtime/agent/orchestrator/tools/code-graph/dispatch.mjs +11 -7
- package/src/runtime/agent/orchestrator/tools/destructive-warning.mjs +126 -9
- package/src/runtime/agent/orchestrator/tools/graph-manifest.json +13 -13
- package/src/runtime/agent/orchestrator/tools/lib/owned-shell-trees.mjs +15 -6
- package/src/runtime/agent/orchestrator/tools/lib/shell-descendants.mjs +64 -2
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promote-job.mjs +10 -2
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-background/promotion-results.mjs +13 -3
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-settle.mjs +8 -0
- package/src/runtime/agent/orchestrator/tools/lib/shell-run-state.mjs +6 -1
- package/src/runtime/agent/orchestrator/tools/patch/v4a-convert.mjs +1 -1
- package/src/runtime/agent/orchestrator/tools/shell-command.mjs +104 -55
- package/src/runtime/agent/orchestrator/tools/shell-policy.mjs +7 -2
- package/src/runtime/agent/orchestrator/tools/shell-powershell.mjs +39 -23
- package/src/runtime/agent/orchestrator/tools/shell-snapshot.mjs +6 -2
- package/src/runtime/agent/orchestrator/tools/spawn-manifest.json +13 -13
- package/src/runtime/attachments/office-extract.mjs +11 -9
- package/src/runtime/browser-bridge/client.mjs +24 -0
- package/src/runtime/channels/lib/scheduler.mjs +40 -12
- package/src/runtime/channels/lib/schedules-db.mjs +71 -12
- package/src/runtime/channels/lib/webhook/session-dispatch.mjs +36 -16
- package/src/runtime/channels/lib/webhook.mjs +0 -1
- package/src/runtime/channels/lib/webhooks-db.mjs +100 -10
- package/src/runtime/channels/lib/worker-main.mjs +17 -20
- package/src/runtime/computer-bridge/client.mjs +28 -1
- package/src/runtime/connectors/gmail-app-password.mjs +690 -0
- package/src/runtime/connectors/google-mcp.mjs +446 -0
- package/src/runtime/memory/lib/core-memory-access.mjs +69 -0
- package/src/runtime/memory/lib/core-memory-file.mjs +16 -8
- package/src/runtime/memory/lib/core-memory-index.mjs +15 -9
- package/src/runtime/memory/lib/core-memory-management.mjs +10 -4
- package/src/runtime/memory/lib/core-memory-store.mjs +53 -30
- package/src/runtime/memory/lib/core-memory-uniqueness.mjs +10 -6
- package/src/runtime/memory/lib/embedding-tokenizer.mjs +32 -18
- package/src/runtime/memory/lib/http-router/session-routes.mjs +3 -2
- package/src/runtime/memory/lib/memory-action-handlers/core-actions.mjs +44 -14
- package/src/runtime/memory/lib/memory-schema/core-and-meta.mjs +11 -0
- package/src/runtime/memory/lib/memory.mjs +7 -1
- package/src/runtime/memory/lib/query-core-recall.mjs +9 -1
- package/src/runtime/memory/lib/query-hybrid-search.mjs +2 -0
- package/src/runtime/memory/lib/runtime-fetcher.mjs +1 -1
- package/src/runtime/memory/lib/tool-call-handler.mjs +9 -5
- package/src/runtime/memory/tool-defs.mjs +5 -0
- package/src/runtime/office/authoring/pptx-script-normalize.mjs +11 -8
- package/src/runtime/office/core/tabular.mjs +1 -1
- package/src/runtime/office/design/library/design-template-inspect.mjs +7 -4
- package/src/runtime/office/portable/docx-formatting.mjs +1 -1
- package/src/runtime/office/portable/docx-runs.mjs +1 -1
- package/src/runtime/office/portable/docx-tracked-edits.mjs +2 -2
- package/src/runtime/office/portable/portable-docx-edits.mjs +11 -10
- package/src/runtime/office/portable/portable-docx-operations.mjs +21 -17
- package/src/runtime/office/portable/portable-docx-parts.mjs +15 -9
- package/src/runtime/office/portable/portable-docx-styles.mjs +4 -1
- package/src/runtime/office/portable/portable-docx-xml.mjs +9 -9
- package/src/runtime/office/portable/portable-opc.mjs +27 -13
- package/src/runtime/office/portable/portable-pivot.mjs +3 -3
- package/src/runtime/office/portable/portable-pptx-chart.mjs +3 -3
- package/src/runtime/office/portable/portable-pptx-charts.mjs +24 -18
- package/src/runtime/office/portable/portable-pptx-core.mjs +5 -5
- package/src/runtime/office/portable/portable-pptx-deck.mjs +8 -4
- package/src/runtime/office/portable/portable-pptx-package.mjs +7 -4
- package/src/runtime/office/portable/portable-pptx-shapes.mjs +18 -9
- package/src/runtime/office/portable/portable-sheet-parts.mjs +9 -3
- package/src/runtime/office/portable/portable-sheet-xml.mjs +5 -5
- package/src/runtime/office/portable/portable-xlsx-charts.mjs +4 -1
- package/src/runtime/office/portable/portable-xlsx-drawings.mjs +10 -6
- package/src/runtime/office/portable/portable-xlsx-operations.mjs +8 -5
- package/src/runtime/office/portable/portable-xlsx-pivot-ops.mjs +1 -1
- package/src/runtime/office/portable/portable-xlsx-reference-shift.mjs +11 -7
- package/src/runtime/office/portable/portable-xlsx-sheet-edits.mjs +6 -3
- package/src/runtime/office/portable/portable-xml.mjs +1 -1
- package/src/runtime/shared/agent-avatar-sprites.mjs +445 -0
- package/src/runtime/shared/agent-avatar.d.mts +64 -0
- package/src/runtime/shared/agent-avatar.mjs +320 -0
- package/src/runtime/shared/agent-route-config.d.mts +3 -0
- package/src/runtime/shared/agent-route-config.mjs +16 -0
- package/src/runtime/shared/atomic-file.mjs +36 -14
- package/src/runtime/shared/background-tasks.mjs +60 -20
- package/src/runtime/shared/child-spawn-gate.mjs +26 -16
- package/src/runtime/shared/config.mjs +8 -11
- package/src/runtime/shared/connector-accounts.mjs +15 -0
- package/src/runtime/shared/connector-catalog.d.mts +52 -0
- package/src/runtime/shared/connector-catalog.mjs +230 -0
- package/src/runtime/shared/connector-triggers.d.mts +3 -0
- package/src/runtime/shared/connector-triggers.mjs +43 -0
- package/src/runtime/shared/file-lock.mjs +7 -1
- package/src/runtime/shared/file-permissions-worker.mjs +38 -0
- package/src/runtime/shared/file-permissions.d.mts +19 -4
- package/src/runtime/shared/file-permissions.mjs +310 -4
- package/src/runtime/shared/git-runner-worker.mjs +6 -78
- package/src/runtime/shared/google-oauth-client.mjs +24 -0
- package/src/runtime/shared/held-request-host.d.mts +12 -0
- package/src/runtime/shared/held-request-host.mjs +71 -0
- package/src/runtime/shared/llm/http-agent.mjs +7 -3
- package/src/runtime/shared/llm/provider-catalog-registry.mjs +10 -0
- package/src/runtime/shared/llm/usage-accounting.mjs +2 -0
- package/src/runtime/shared/llm/usage-ledger-import.mjs +32 -3
- package/src/runtime/shared/llm/usage-ledger-rollup.mjs +12 -5
- package/src/runtime/shared/llm/usage-ledger-worker.mjs +1 -1
- package/src/runtime/shared/llm/usage-ledger.mjs +20 -5
- package/src/runtime/shared/memory-snapshot.mjs +5 -1
- package/src/runtime/shared/notify-trace.mjs +8 -1
- package/src/runtime/shared/plain-preview.d.mts +1 -0
- package/src/runtime/shared/plain-preview.mjs +28 -0
- package/src/runtime/shared/pristine-execution-contract.json +5 -1
- package/src/runtime/shared/process-runner-worker.mjs +7 -0
- package/src/runtime/shared/process-runner.mjs +38 -0
- package/src/runtime/shared/provider-accounts.mjs +2 -1
- package/src/runtime/shared/provider-api-key.mjs +0 -1
- package/src/runtime/shared/read-row-numbers.mjs +1 -1
- package/src/runtime/shared/resource-admission.mjs +60 -18
- package/src/runtime/shared/routine-limits.d.mts +11 -0
- package/src/runtime/shared/routine-limits.mjs +21 -0
- package/src/runtime/shared/routine-trigger.d.mts +10 -0
- package/src/runtime/shared/routine-trigger.mjs +44 -0
- package/src/runtime/shared/run-child.mjs +84 -0
- package/src/runtime/shared/schedule-model-ref.mjs +9 -10
- package/src/runtime/shared/session-activity-signal.mjs +23 -0
- package/src/runtime/shared/shell-output-summary.mjs +23 -0
- package/src/runtime/shared/singleton-owner.mjs +126 -42
- package/src/runtime/shared/slow-span.mjs +4 -12
- package/src/runtime/shared/statusline/statusline-segments.mjs +13 -1
- package/src/runtime/shared/tool-output-limit.mjs +4 -2
- package/src/runtime/shared/tool-output-marker.mjs +58 -0
- package/src/runtime/shared/transcript-metadata.mjs +10 -0
- package/src/runtime/shared/turn-changes.mjs +0 -8
- package/src/runtime/shared/usage-readout-totals.mjs +56 -0
- package/src/runtime/shared/user-data-guard.mjs +131 -34
- package/src/runtime/shared/worktrees/activity-gate.mjs +33 -8
- package/src/runtime/shared/worktrees/git-head.mjs +20 -2
- package/src/runtime/shared/worktrees/lock.mjs +3 -2
- package/src/runtime/terminal-bridge/tool-defs.mjs +1 -1
- package/src/runtime/tidy/runners/biome.mjs +3 -1
- package/src/runtime/tidy/shadow.mjs +2 -1
- package/src/runtime/web-search/index.mjs +5 -7
- package/src/runtime/web-search/lib/formatter.mjs +42 -6
- package/src/runtime/web-search/tool-defs.mjs +6 -1
- package/src/session-runtime/agent-home-delivery.mjs +459 -0
- package/src/session-runtime/agent-profile-changes.mjs +21 -0
- package/src/session-runtime/agent-room-delivery.mjs +92 -0
- package/src/session-runtime/agent-task-sessions.mjs +200 -0
- package/src/session-runtime/boot/apis.mjs +50 -18
- package/src/session-runtime/boot/facade.mjs +5 -8
- package/src/session-runtime/boot/infrastructure.mjs +28 -17
- package/src/session-runtime/boot/tools.mjs +3 -0
- package/src/session-runtime/channel-config-api.mjs +53 -5
- package/src/session-runtime/cwd-plugins/core-memory-context.mjs +36 -20
- package/src/session-runtime/cwd-plugins/plugin-status.mjs +6 -1
- package/src/session-runtime/held-requests.mjs +228 -0
- package/src/session-runtime/internal-tool-executor/ask-user-tool.mjs +121 -0
- package/src/session-runtime/internal-tool-executor/feature-tools.mjs +5 -1
- package/src/session-runtime/internal-tool-executor/knowledge-tools.mjs +31 -2
- package/src/session-runtime/internal-tool-executor/workspace-tools.mjs +31 -2
- package/src/session-runtime/internal-tool-executor.mjs +2 -0
- package/src/session-runtime/lifecycle/session-catalog.mjs +9 -0
- package/src/session-runtime/lifecycle/session-switch/context-switch.mjs +4 -3
- package/src/session-runtime/lifecycle/session-switch/resume.mjs +11 -4
- package/src/session-runtime/lifecycle/session-switch/session-delete.mjs +3 -3
- package/src/session-runtime/lifecycle/shared.mjs +25 -2
- package/src/session-runtime/lifecycle/teardown/session-close.mjs +2 -0
- package/src/session-runtime/lifecycle/teardown.mjs +5 -2
- package/src/session-runtime/lifecycle-api.mjs +3 -1
- package/src/session-runtime/mcp-glue/server-catalog.mjs +8 -0
- package/src/session-runtime/mcp-glue/server-input.mjs +3 -0
- package/src/session-runtime/mcp-oauth-login.mjs +112 -15
- package/src/session-runtime/model-route/set-route.mjs +14 -3
- package/src/session-runtime/owned-automation-run.mjs +229 -0
- package/src/session-runtime/provider-auth/login.mjs +10 -6
- package/src/session-runtime/provider-auth/setup.mjs +19 -2
- package/src/session-runtime/provider-catalog-cache.mjs +101 -25
- package/src/session-runtime/provider-models/catalog-load.mjs +14 -3
- package/src/session-runtime/provider-models/row-hydration.mjs +4 -0
- package/src/session-runtime/provider-models.mjs +76 -10
- package/src/session-runtime/provider-readiness.mjs +4 -0
- package/src/session-runtime/resource-api.mjs +5 -0
- package/src/session-runtime/resource-mcp-api.mjs +107 -13
- package/src/session-runtime/resource-skills-api.mjs +12 -0
- package/src/session-runtime/room-member-gate.mjs +48 -0
- package/src/session-runtime/routine-home-turn.mjs +156 -0
- package/src/session-runtime/routine-owner.mjs +48 -0
- package/src/session-runtime/schedule-session-run.mjs +30 -64
- package/src/session-runtime/services/agent-tool/close-flow.mjs +2 -1
- package/src/session-runtime/services/agent-tool/helpers.mjs +10 -0
- package/src/session-runtime/services/agent-tool/job-views/agent-list.mjs +10 -2
- package/src/session-runtime/services/agent-tool/job-views/session-progress.mjs +13 -4
- package/src/session-runtime/services/agent-tool/notify.mjs +15 -4
- package/src/session-runtime/services/agent-tool/restart-notify.mjs +134 -0
- package/src/session-runtime/services/agent-tool/send-flow.mjs +24 -1
- package/src/session-runtime/services/agent-tool/spawn-flow/deferred-spawn.mjs +2 -1
- package/src/session-runtime/services/agent-tool/spawn-flow/job-start.mjs +4 -3
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-plan.mjs +19 -4
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-prep.mjs +2 -0
- package/src/session-runtime/services/agent-tool/spawn-flow/spawn-run.mjs +5 -1
- package/src/session-runtime/services/agent-tool/tag-registry/tag-lookup.mjs +8 -3
- package/src/session-runtime/services/agent-tool/tag-registry.mjs +3 -0
- package/src/session-runtime/services/agent-tool/worker-index/row-shape.mjs +4 -0
- package/src/session-runtime/services/agent-tool/worker-index.mjs +44 -10
- package/src/session-runtime/services/agent-tool.mjs +20 -0
- package/src/session-runtime/services/channel-admin.mjs +93 -24
- package/src/session-runtime/services/memory-access.mjs +37 -0
- package/src/session-runtime/services/provider-admin.mjs +166 -59
- package/src/session-runtime/services/schedule-access.mjs +91 -0
- package/src/session-runtime/services/usage-dashboard-model.mjs +2 -2
- package/src/session-runtime/services/usage-dashboard.mjs +27 -69
- package/src/session-runtime/session-create/session-options.mjs +34 -7
- package/src/session-runtime/session-hooks.mjs +16 -8
- package/src/session-runtime/setup-tool/executor.mjs +68 -6
- package/src/session-runtime/setup-tool/extended-actions.mjs +72 -14
- package/src/session-runtime/setup-tool/settings-contract.mjs +8 -6
- package/src/session-runtime/setup-tool/tool-defs.mjs +8 -0
- package/src/session-runtime/skills-api.mjs +16 -1
- package/src/session-runtime/tool-policy-refresh.mjs +238 -29
- package/src/session-runtime/turn/session-ops.mjs +10 -3
- package/src/session-runtime/turn/turn-run/ask-callbacks.mjs +11 -2
- package/src/session-runtime/turn/turn-run/turn-prepare.mjs +3 -0
- package/src/session-runtime/usage-stats-api.mjs +6 -1
- package/src/session-runtime/webhook-session-run.mjs +49 -67
- package/src/session-runtime/workflow-agents-api/agent-connectors.mjs +239 -0
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +556 -22
- package/src/session-runtime/workflow-agents-api/workflow-packs.mjs +11 -1
- package/src/session-runtime/workflow-agents-api.mjs +4 -1
- package/src/standalone/channel-transport/http-routes.mjs +10 -9
- package/src/standalone/daemon-agent-control.mjs +1 -8
- package/src/standalone/daemon-desktop-runtime.mjs +20 -7
- package/src/standalone/daemon-owner.mjs +117 -25
- package/src/standalone/daemon-session-control.mjs +11 -2
- package/src/standalone/daemon.mjs +61 -17
- package/src/standalone/session-call-cache.mjs +6 -0
- package/src/standalone/session-protocol.mjs +28 -1
- package/src/standalone/session-service/retention/busy.mjs +7 -2
- package/src/standalone/session-service/session-calls/session-turns.mjs +9 -0
- package/src/standalone/session-service.mjs +19 -0
- package/src/standalone/session-transport/routes.mjs +7 -6
- package/src/tui/app/model-options.mjs +39 -2
- package/src/tui/app/model-picker.mjs +16 -2
- package/src/tui/app/provider-setup-picker.mjs +1 -2
- package/src/tui/app/slash-commands.mjs +20 -0
- package/src/tui/dist/index.mjs +487 -128
- package/src/tui/session/context-state.mjs +6 -1
- package/src/tui/session/notice-surface.mjs +35 -4
- package/src/tui/session/notice-text.mjs +0 -1
- package/src/tui/session/queue-helpers.mjs +2 -1
- package/src/tui/session/session-api/extensions.mjs +4 -0
- package/src/tui/session/session-api/intake/submission.mjs +12 -13
- package/src/tui/session/session-api/integrations.mjs +9 -5
- package/src/tui/session/session-api/lifecycle/session-reset.mjs +13 -3
- package/src/tui/session/session-api/lifecycle.mjs +17 -1
- package/src/tui/session/session-api/routes.mjs +48 -3
- package/src/tui/session/session-flow/drain.mjs +20 -3
- package/src/tui/session/session-flow/queue/entry-shape.mjs +2 -1
- package/src/tui/session/session-flow/queue/take-entries.mjs +3 -2
- package/src/tui/session/session-flow/steering.mjs +104 -24
- package/src/tui/session/session-flow.mjs +2 -0
- package/src/tui/session/tool-approval.mjs +26 -5
- package/src/tui/session/transcript-intake.mjs +6 -2
- package/src/tui/session/transcript-spill.mjs +5 -1
- package/src/tui/session/tui-steering-persist.mjs +65 -42
- package/src/tui/session/turn-live-call.mjs +56 -0
- package/src/tui/session/turn-stream.mjs +33 -0
- package/src/tui/session/turn.mjs +50 -7
- package/src/ui/statusline.mjs +1 -6
- package/src/ui/streaming-markdown-heal.mjs +24 -7
- package/src/vendor/statusline/bin/statusline-route.mjs +0 -1
- package/src/vendor/statusline/src/gateway/route-meta.mjs +0 -1
- package/src/workflows/default/WORKFLOW.md +9 -13
- package/src/session-runtime/automation-agents.mjs +0 -94
- package/src/session-runtime/automation-workflow.mjs +0 -59
|
@@ -4,9 +4,13 @@
|
|
|
4
4
|
// carry all four to the provider with their cache tiers.
|
|
5
5
|
import { buildSkillManifest, composeSystemPrompt } from '../../context/collect.mjs';
|
|
6
6
|
import { configuredInstructionFilesMode, loadInstructionFilesContext } from '../../context/instruction-files.mjs';
|
|
7
|
+
import { agentModeIdentityLine } from '../../context/role-instructions.mjs';
|
|
8
|
+
import { AGENT_MODE, isRoutineSource, sessionModeOf } from '../agent-mode.mjs';
|
|
9
|
+
import { MIXY_AGENT_ID } from '../agent-home.mjs';
|
|
7
10
|
import {
|
|
8
11
|
_buildBaseRules,
|
|
9
12
|
_buildAgentRules,
|
|
13
|
+
_buildAgentModeRules,
|
|
10
14
|
_buildLeadRules,
|
|
11
15
|
_buildLeadMetaContext,
|
|
12
16
|
_buildLeadLanguageContext,
|
|
@@ -81,8 +85,9 @@ export function buildWorkspacePromptContext(session, cwd) {
|
|
|
81
85
|
];
|
|
82
86
|
return {
|
|
83
87
|
environmentContext: buildShellEnvironmentContext({ cwd }, ownerIsAgent, tools),
|
|
88
|
+
// Agent mode never carries project instruction files.
|
|
84
89
|
instructionFilesContext:
|
|
85
|
-
session?.skipInstructionFiles === true
|
|
90
|
+
session?.skipInstructionFiles === true || sessionModeOf(session) === AGENT_MODE
|
|
86
91
|
? undefined
|
|
87
92
|
: loadInstructionFilesContext({ mode: configuredInstructionFilesMode(), cwd }),
|
|
88
93
|
};
|
|
@@ -90,24 +95,57 @@ export function buildWorkspacePromptContext(session, cwd) {
|
|
|
90
95
|
|
|
91
96
|
// BP1/BP2/BP3 rule blocks plus the volatile environment, composed into the
|
|
92
97
|
// four system blocks; environmentTailContext is the persisted env tail.
|
|
93
|
-
|
|
98
|
+
// A Lead's BP3 rule slices, ordered for prefix sharing (composeSystemPrompt):
|
|
99
|
+
// LEAD.md's common lines first; then the mode block (coding: LEAD.md's two
|
|
100
|
+
// passages; agent mode: their conversational variants and AGENT_MODE.md);
|
|
101
|
+
// then Mixy's MIXY.md; last the per-session tail — routine line, identity.
|
|
102
|
+
// Agent mode is a Lead created as an agent (agent-mode.mjs).
|
|
103
|
+
export function sessionRolePromptFields(
|
|
104
|
+
identity,
|
|
105
|
+
{ ownerIsAgent, toolFreeRole, delegationFree, sessionMode, routine = false }
|
|
106
|
+
) {
|
|
94
107
|
const skipRules = identity.skipAgentRules || toolFreeRole;
|
|
108
|
+
const lead = !ownerIsAgent && !skipRules;
|
|
109
|
+
const agentMode = lead && sessionMode === AGENT_MODE;
|
|
110
|
+
const mixy = (identity.agent || MIXY_AGENT_ID) === MIXY_AGENT_ID;
|
|
95
111
|
let roleRules = '';
|
|
96
112
|
if (!skipRules) {
|
|
97
113
|
roleRules = ownerIsAgent
|
|
98
114
|
? _buildAgentRules(identity.agentRulesProfile)
|
|
99
115
|
: _buildLeadRules({ includeLeadBrief: !delegationFree });
|
|
100
116
|
}
|
|
117
|
+
const identityLine = agentMode
|
|
118
|
+
? agentModeIdentityLine(identity.agent || MIXY_AGENT_ID)
|
|
119
|
+
: lead
|
|
120
|
+
? _buildLeadRules({ includeLeadBrief: !delegationFree, part: 'identity' })
|
|
121
|
+
: '';
|
|
101
122
|
return {
|
|
102
123
|
roleRules,
|
|
124
|
+
...(lead
|
|
125
|
+
? {
|
|
126
|
+
leadModeRules: _buildLeadRules({ includeLeadBrief: !delegationFree, part: agentMode ? 'agent' : 'coding' }),
|
|
127
|
+
identityContext: identityLine ? `# Identity\n\n${identityLine}` : '',
|
|
128
|
+
}
|
|
129
|
+
: {}),
|
|
130
|
+
...(agentMode
|
|
131
|
+
? {
|
|
132
|
+
agentModeRules: _buildAgentModeRules({ part: 'conduct' }),
|
|
133
|
+
...(mixy ? { mixyRules: _buildAgentModeRules({ part: 'mixy' }) } : {}),
|
|
134
|
+
...(routine ? { routineRules: _buildAgentModeRules({ part: 'routine' }) } : {}),
|
|
135
|
+
}
|
|
136
|
+
: {}),
|
|
103
137
|
userPrompt: identity.systemPrompt,
|
|
104
|
-
|
|
138
|
+
// A coding Lead carries no role section; an agent's home thread (a user
|
|
139
|
+
// session running as that agent) carries its own AGENT.md role, and Mixy
|
|
140
|
+
// in agent mode its optional agents/lead/AGENT.md.
|
|
141
|
+
skipRoleCatalog: !ownerIsAgent && (!identity.agent || identity.agent === 'lead') && !(agentMode && mixy),
|
|
105
142
|
agent: identity.agent,
|
|
106
143
|
profile: { skip: identity.profileSkip },
|
|
107
144
|
};
|
|
108
145
|
}
|
|
109
146
|
|
|
110
|
-
export function composeSessionSystem(opts, { profile, providerName, modelName, surface }) {
|
|
147
|
+
export function composeSessionSystem(opts, { profile, providerName, modelName, surface, sessionMode }) {
|
|
148
|
+
const agentMode = sessionMode === AGENT_MODE;
|
|
111
149
|
const { ownerIsAgent, resolvedAgent, skills } = surface;
|
|
112
150
|
// A tool-free hidden role (a one-shot classifier or title writer) carries
|
|
113
151
|
// only its own role rules: the shared tool policy and the worker conduct
|
|
@@ -130,9 +168,15 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
|
|
|
130
168
|
agent: resolvedAgent,
|
|
131
169
|
agentRulesProfile: surface.agentRulesProfile,
|
|
132
170
|
};
|
|
133
|
-
const roleFields = sessionRolePromptFields(promptIdentity, {
|
|
171
|
+
const roleFields = sessionRolePromptFields(promptIdentity, {
|
|
172
|
+
ownerIsAgent,
|
|
173
|
+
toolFreeRole,
|
|
174
|
+
delegationFree,
|
|
175
|
+
sessionMode,
|
|
176
|
+
routine: isRoutineSource(opts.sourceType),
|
|
177
|
+
});
|
|
134
178
|
const leadOnly = !skipAgentRules && !ownerIsAgent;
|
|
135
|
-
const metaContext = leadOnly ? _buildLeadMetaContext() : '';
|
|
179
|
+
const metaContext = leadOnly ? _buildLeadMetaContext({ includeOutputStyle: !agentMode }) : '';
|
|
136
180
|
// Lead-only response language; closes the environment block so no English
|
|
137
181
|
// system text (session/shell/git lines) follows it.
|
|
138
182
|
const languageContext = leadOnly ? _buildLeadLanguageContext() : '';
|
|
@@ -146,9 +190,10 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
|
|
|
146
190
|
// already sit at the end of this string to stay last after a refresh.
|
|
147
191
|
const environmentTailContext = [shellEnvironmentContext, languageContext].filter(Boolean).join('\n\n---\n\n');
|
|
148
192
|
// User instruction files (AGENTS.md / CLAUDE.md, global then the project
|
|
149
|
-
// root's); a tool-free role
|
|
193
|
+
// root's); a tool-free role, a profile skipping `claudemd` and agent mode
|
|
194
|
+
// get none.
|
|
150
195
|
const instructionFilesContext =
|
|
151
|
-
toolFreeRole || profile?.skip?.claudemd
|
|
196
|
+
toolFreeRole || profile?.skip?.claudemd || agentMode
|
|
152
197
|
? ''
|
|
153
198
|
: loadInstructionFilesContext({ mode: configuredInstructionFilesMode(), cwd: opts.cwd });
|
|
154
199
|
const composed = composeSystemPrompt({
|
|
@@ -157,6 +202,8 @@ export function composeSessionSystem(opts, { profile, providerName, modelName, s
|
|
|
157
202
|
metaContext: metaContext || undefined,
|
|
158
203
|
languageContext: languageContext || undefined,
|
|
159
204
|
workflowContext: opts.workflowContext || null,
|
|
205
|
+
// The workflow's orchestration and agent-catalog slices (workflow/context.mjs leadPromptParts).
|
|
206
|
+
...(ownerIsAgent ? {} : opts.leadWorkflowParts),
|
|
160
207
|
coreMemoryContext: opts.coreMemoryContext || null,
|
|
161
208
|
instructionFilesContext: instructionFilesContext || null,
|
|
162
209
|
skillManifest: buildSkillManifest(skills),
|
|
@@ -70,6 +70,20 @@ export function sessionOriginFields(opts, { profile, presetObj, providerCacheOpt
|
|
|
70
70
|
// scheduler/daily-standup, webhook/github-push, lead/worker.
|
|
71
71
|
sourceType: opts.sourceType || null,
|
|
72
72
|
sourceName: opts.sourceName || null,
|
|
73
|
+
// The agent a schedule/webhook run acts for: whose memory it may write
|
|
74
|
+
// (session-runtime/services/memory-access.mjs). Absent on other sessions.
|
|
75
|
+
...(opts.ownerAgentId ? { ownerAgentId: String(opts.ownerAgentId) } : {}),
|
|
76
|
+
// A coding task session an agent created (session create): who asked, from
|
|
77
|
+
// which thread, the request, and the title it was given.
|
|
78
|
+
...(opts.taskOrigin
|
|
79
|
+
? {
|
|
80
|
+
taskOrigin: opts.taskOrigin,
|
|
81
|
+
title: opts.taskOrigin.title,
|
|
82
|
+
titleLocked: true,
|
|
83
|
+
titleSource: 'ai',
|
|
84
|
+
titleUpdatedAt: Date.now(),
|
|
85
|
+
}
|
|
86
|
+
: {}),
|
|
73
87
|
// Provider-scoped unified cache key — one shard per provider,
|
|
74
88
|
// shared across all roles / sources (agent/maintenance/mcp/
|
|
75
89
|
// scheduler/webhook). Role or source-specific context must be
|
|
@@ -137,6 +151,8 @@ export function buildSessionRecord({ opts, route, presetObj, surface, prompt, me
|
|
|
137
151
|
selectedContextWindow: opts.selectedContextWindow || null,
|
|
138
152
|
agent: opts.agent,
|
|
139
153
|
owner: opts.owner || 'user',
|
|
154
|
+
// 'agent' | 'coding' (session/agent-mode.mjs), resolved at creation.
|
|
155
|
+
sessionMode: opts.sessionMode,
|
|
140
156
|
bp3CoreContext: prompt.sessionMarkerCore,
|
|
141
157
|
promptIdentity: prompt.promptIdentity,
|
|
142
158
|
callerDisallowedTools: [...(opts.callerDisallowedTools ?? opts.disallowedTools ?? [])],
|
|
@@ -22,8 +22,9 @@ import { ROUTE_TOOL_ORDER } from '../../runtime-core/tool-catalog-data.mjs';
|
|
|
22
22
|
// the sort overhead on ~30 tools is negligible.
|
|
23
23
|
function _getMcpTools(mcpScopeId = null, cwd = null) {
|
|
24
24
|
// Project scope: servers limited to other project roots stay connected
|
|
25
|
-
// but leave this session's schema (session-runtime/extension-scopes).
|
|
26
|
-
|
|
25
|
+
// but leave this session's schema (session-runtime/extension-scopes). An
|
|
26
|
+
// agent's connectors apply at dispatch, never here.
|
|
27
|
+
const mcp = filterMcpToolsForSession(getMcpTools(mcpScopeId) || [], cwd, null);
|
|
27
28
|
// `public:false` tools stay registered in internal-tools for runtime
|
|
28
29
|
// rewrites/dispatch, but must never enter any model-visible schema (Lead
|
|
29
30
|
// full/mcp included). Filter before mapping because the projection below
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// flag usageMetricsTurnIncremental. manager.mjs wires it via configureUsageMetricsRuntime().
|
|
8
8
|
import { providerInputExcludesCache } from '../../providers/registry.mjs';
|
|
9
9
|
import { reasoningUsage, combineReasoningUsage } from '../../../../shared/llm/reasoning-usage.mjs';
|
|
10
|
+
import { foldUsageReadout } from '../../../../shared/usage-readout-totals.mjs';
|
|
10
11
|
import {
|
|
11
12
|
loadSession,
|
|
12
13
|
saveSessionAsync,
|
|
@@ -553,6 +554,11 @@ export async function persistIterationMetrics(delta) {
|
|
|
553
554
|
if (!isReplay) {
|
|
554
555
|
if (runtimeEntry) runtimeEntry.usageMetricsTurnIncremental = true;
|
|
555
556
|
accumulateSessionUsage(session, delta);
|
|
557
|
+
// The composer readout's session-cumulative cache hit and speed: one fold
|
|
558
|
+
// per model call of this session (every tool-loop iteration), replaced
|
|
559
|
+
// immutably so a consumer can tell by identity that it changed. Sessions
|
|
560
|
+
// saved before this field began at their first call after it.
|
|
561
|
+
session.usageReadout = foldUsageReadout(session.usageReadout, delta, delta.generationMs);
|
|
556
562
|
recordLastContextTokens(session, iterationContext(delta));
|
|
557
563
|
}
|
|
558
564
|
session.lastIterationIndex = iterationIndex;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// manager/workflow-switch-notice.mjs
|
|
2
|
+
// A mid-conversation workflow switch (session-runtime/tool-policy-refresh.mjs
|
|
3
|
+
// switchSessionWorkflow) rebuilds the session's prompt and tool surface and
|
|
4
|
+
// stages `session.workflowSwitch`, the one-time notice the next user turn
|
|
5
|
+
// carries in its reminder block. Lifecycle mirrors the working-folder notice
|
|
6
|
+
// (prompt-utils snapshotPendingWorkspaceNotice): snapshot when the turn is
|
|
7
|
+
// built, acknowledge once the provider accepted it, so a failed turn re-sends
|
|
8
|
+
// it. The state object is replaced, never mutated:
|
|
9
|
+
// from — the workflow the model was last told about (kept across switches
|
|
10
|
+
// made before a notice reached it);
|
|
11
|
+
// to — the workflow the prompt carries now.
|
|
12
|
+
|
|
13
|
+
function workflowRef(workflow) {
|
|
14
|
+
const id = String(workflow?.id || '').trim();
|
|
15
|
+
return id ? { id, name: String(workflow?.name || id).trim() } : null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Stage the notice of a switch from `from` to `to`; a switch back to what the
|
|
19
|
+
* model was last told drops it. Returns the staged state or null. */
|
|
20
|
+
export function stageWorkflowSwitchNotice(session, from, to) {
|
|
21
|
+
const prior = session.workflowSwitch;
|
|
22
|
+
const told = prior ? prior.from : workflowRef(from);
|
|
23
|
+
const next = workflowRef(to);
|
|
24
|
+
if (!next || told?.id === next.id) {
|
|
25
|
+
delete session.workflowSwitch;
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
session.workflowSwitch = { version: 1, revision: (Number(prior?.revision) || 0) + 1, from: told, to: next };
|
|
29
|
+
return session.workflowSwitch;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function workflowNoticeContent({ from, to }) {
|
|
33
|
+
const before = from?.name || 'the previous workflow';
|
|
34
|
+
return [
|
|
35
|
+
'<system-reminder>',
|
|
36
|
+
'# Workflow Changed',
|
|
37
|
+
`The workflow changed from ${before} to ${to.name}. Earlier turns of this conversation ran under ${before}; the system prompt was updated in place, so its Active Workflow rules, delegation instructions, available agents and tools are now those of ${to.name}. Follow them from this turn on.`,
|
|
38
|
+
`Agents already started under ${before} keep running with their own instructions; new delegation uses the current tools and agents.`,
|
|
39
|
+
'</system-reminder>',
|
|
40
|
+
].join('\n');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The workflow notice the next user turn carries, or null.
|
|
45
|
+
* @returns {{ revision: number, content: string } | null}
|
|
46
|
+
*/
|
|
47
|
+
export function snapshotPendingWorkflowNotice(session) {
|
|
48
|
+
const pending = session?.workflowSwitch;
|
|
49
|
+
if (!pending?.to?.id) return null;
|
|
50
|
+
return { revision: pending.revision, content: workflowNoticeContent(pending) };
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** The notice of `revision` reached the model: nothing is due any more. */
|
|
54
|
+
export function acknowledgePendingWorkflowNotice(session, revision) {
|
|
55
|
+
if (!session?.workflowSwitch || session.workflowSwitch.revision !== Number(revision)) return false;
|
|
56
|
+
delete session.workflowSwitch;
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
@@ -122,6 +122,6 @@ export {
|
|
|
122
122
|
export { deleteSession, listOwnedAgentSessionIds, fenceSessionWrites } from './store.mjs';
|
|
123
123
|
// Read-only parsed-session access (desktop pane peek): no resume, no
|
|
124
124
|
// ownership, no liveness side effects.
|
|
125
|
-
export { loadSession } from './store.mjs';
|
|
126
|
-
export { closeSession, abortSessionTurn, unloadSessionRuntime } from './manager/session-close.mjs';
|
|
125
|
+
export { loadSession, loadSessionStatus } from './store.mjs';
|
|
126
|
+
export { closeSession, closeSessionAsync, abortSessionTurn, unloadSessionRuntime } from './manager/session-close.mjs';
|
|
127
127
|
export { sweepTombstones, startIdleCleanup, stopIdleCleanup } from './manager/idle-cleanup.mjs';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// The representative agent's display name. Its id stays `lead`; the user may
|
|
2
|
+
// rename it (agents/lead/agent.json `name`, user data dir), Mixy by default.
|
|
3
|
+
// Every model- or user-facing string that names it reads this, re-read on each
|
|
4
|
+
// use so a rename applies at once. Text shared across agents (tool schemas,
|
|
5
|
+
// other agents' shared prompt block) says "the representative agent" instead,
|
|
6
|
+
// so a rename never changes cached bytes.
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { mixdogGlobalDir, readSafe } from '../context/skill-catalog.mjs';
|
|
9
|
+
|
|
10
|
+
export const DEFAULT_MIXY_NAME = 'Mixy';
|
|
11
|
+
|
|
12
|
+
/** The display name in a lead manifest (agent.json), else Mixy. */
|
|
13
|
+
export function mixyNameOf(manifest) {
|
|
14
|
+
const name = typeof manifest?.name === 'string' ? manifest.name.replace(/\s+/g, ' ').trim() : '';
|
|
15
|
+
return name || DEFAULT_MIXY_NAME;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function mixyDisplayName() {
|
|
19
|
+
try {
|
|
20
|
+
return mixyNameOf(JSON.parse(readSafe(join(mixdogGlobalDir('agents'), 'lead', 'agent.json')) || '{}'));
|
|
21
|
+
} catch {
|
|
22
|
+
return DEFAULT_MIXY_NAME;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -31,6 +31,7 @@ import { bumpUsageMetricsEpoch } from './manager/usage-metrics.mjs';
|
|
|
31
31
|
import { resetReadStateAfterCompaction } from './read-dedup.mjs';
|
|
32
32
|
import { scheduleCompactionArchive, stampCompactionMessageIds } from './compaction-archive-capture.mjs';
|
|
33
33
|
import { writeStderrBestEffort } from '../../../shared/best-effort-stderr.mjs';
|
|
34
|
+
import { isAgentModeSession } from './agent-mode.mjs';
|
|
34
35
|
import { applyPendingWorkspaceReroot } from './manager/prompt-utils.mjs';
|
|
35
36
|
import { backfillFallbackSessionTitle } from './manager/session-fallback-title.mjs';
|
|
36
37
|
import {
|
|
@@ -335,6 +336,32 @@ function reportCompactFailure(ctx, run, compactErr) {
|
|
|
335
336
|
// Detection is narrow on purpose — signal.aborted or a true AbortError — so
|
|
336
337
|
// the recall pipeline's SYNTHETIC "…aborted: memory … ; head preserved"
|
|
337
338
|
// failure (a real compact failure, message text aside) still escalates.
|
|
339
|
+
function isGenuineCompactOverflow(compactErr) {
|
|
340
|
+
return (
|
|
341
|
+
compactErr?.code === 'AGENT_CONTEXT_OVERFLOW' ||
|
|
342
|
+
compactErr?.name === 'AgentContextOverflowError' ||
|
|
343
|
+
isContextOverflowError(compactErr)
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Agent mode retries a failed compaction quietly: the first ordinary failure
|
|
348
|
+
// in a turn neither ends the send nor reaches the user — the context is still
|
|
349
|
+
// under the model's boundary, and the next send's pre-send pass compacts
|
|
350
|
+
// again. A second failure, an abort or a genuine overflow takes the normal path.
|
|
351
|
+
function retryCompactQuietly(ctx, run, compactErr) {
|
|
352
|
+
const { state } = ctx;
|
|
353
|
+
// `opts` is the turn's loop options (one per turn; each send builds a new state).
|
|
354
|
+
if (!isAgentModeSession(state.sessionRef) || !state.opts || state.opts.quietCompactRetryUsed) return false;
|
|
355
|
+
if (isCompactAbort(state.signal, compactErr) || isGenuineCompactOverflow(compactErr)) return false;
|
|
356
|
+
state.opts.quietCompactRetryUsed = true;
|
|
357
|
+
acknowledgeGoalReminder(state.sessionRef, run);
|
|
358
|
+
reportCompactFailure(ctx, run, compactErr);
|
|
359
|
+
writeStderrBestEffort(
|
|
360
|
+
`[loop] pre-send compact failed; retrying on the next send (sess=${state.sessionId || 'unknown'}): ${compactErr?.message || compactErr}\n`
|
|
361
|
+
);
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
|
|
338
365
|
function throwCompactFailure(ctx, run, compactErr) {
|
|
339
366
|
const { state, compactPolicy, decision } = ctx;
|
|
340
367
|
const { sessionRef, sessionId, signal, model } = state;
|
|
@@ -353,11 +380,7 @@ function throwCompactFailure(ctx, run, compactErr) {
|
|
|
353
380
|
// compact failure, not "latest turn cannot fit" — mislabeling it as
|
|
354
381
|
// overflow hides the real cause and misroutes downstream overflow
|
|
355
382
|
// handling. Surface an explicit compact-failed error.
|
|
356
|
-
|
|
357
|
-
compactErr?.code === 'AGENT_CONTEXT_OVERFLOW' ||
|
|
358
|
-
compactErr?.name === 'AgentContextOverflowError' ||
|
|
359
|
-
isContextOverflowError(compactErr);
|
|
360
|
-
if (genuineOverflow) {
|
|
383
|
+
if (isGenuineCompactOverflow(compactErr)) {
|
|
361
384
|
throw agentContextOverflowError(
|
|
362
385
|
{
|
|
363
386
|
stage: 'pre_send',
|
|
@@ -513,6 +536,10 @@ async function compactBeforeSend(ctx) {
|
|
|
513
536
|
}
|
|
514
537
|
run.summaryChanged = messagesArrayChanged(messages, run.compacted);
|
|
515
538
|
} catch (compactErr) {
|
|
539
|
+
if (retryCompactQuietly(ctx, run, compactErr)) {
|
|
540
|
+
await setStage(opts, 'requesting');
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
516
543
|
throwCompactFailure(ctx, run, compactErr);
|
|
517
544
|
}
|
|
518
545
|
await setStage(opts, 'requesting');
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// request-fork.mjs — a cache-sharing fork of a provider request the main loop
|
|
2
|
+
// already sent (side-question-store.mjs): its messages unchanged, then the
|
|
3
|
+
// reply that request produced and one appended user turn. Reusing the saved
|
|
4
|
+
// send options keeps the model, system prompt, tools and cache-relevant
|
|
5
|
+
// options identical, so the provider's prompt cache serves the prefix.
|
|
6
|
+
import { collectAssistantToolCallIds } from './context-tool-pairs.mjs';
|
|
7
|
+
import { buildIntermediateAssistantMessage, buildToolCallAssistantMessage } from './loop/assistant-commit.mjs';
|
|
8
|
+
|
|
9
|
+
// The assistant turn the saved request produced, built the way the loop
|
|
10
|
+
// commits it (without the turn's one-shot transcript metadata), plus a stub
|
|
11
|
+
// result per tool call: the fork only needs each call answered so the
|
|
12
|
+
// request stays well-formed.
|
|
13
|
+
function replyMessages(response, toolStub) {
|
|
14
|
+
if (!response) return [];
|
|
15
|
+
const reply = response.toolCalls?.length
|
|
16
|
+
? buildToolCallAssistantMessage(response, { calls: response.toolCalls, opts: {} })
|
|
17
|
+
: buildIntermediateAssistantMessage(response, {});
|
|
18
|
+
if (!reply) return [];
|
|
19
|
+
const stubs = collectAssistantToolCallIds(reply).map((id) => ({ role: 'tool', toolCallId: id, content: toolStub }));
|
|
20
|
+
return [reply, ...stubs];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The fork of a saved request with `prompt` as its final user turn. The
|
|
25
|
+
* provider continuation state follows the reply when it is appended, exactly
|
|
26
|
+
* as the main loop's next request would carry it. `sharedCachePrefixCount`
|
|
27
|
+
* (the shared prefix's message count, which survives model-proxy
|
|
28
|
+
* serialization) keeps an Anthropic message breakpoint on the shared prefix,
|
|
29
|
+
* so the fork reads the saved request's cache entry and writes none for its
|
|
30
|
+
* suffix.
|
|
31
|
+
*/
|
|
32
|
+
export function buildForkedRequest(request, prompt, toolStub) {
|
|
33
|
+
const reply = replyMessages(request.response, toolStub);
|
|
34
|
+
const opts = { ...request.opts };
|
|
35
|
+
if (reply.length && Object.hasOwn(request.response, 'providerState')) {
|
|
36
|
+
opts.providerState = request.response.providerState;
|
|
37
|
+
}
|
|
38
|
+
if (request.messages.length) opts.sharedCachePrefixCount = request.messages.length;
|
|
39
|
+
const messages = [
|
|
40
|
+
...request.messages,
|
|
41
|
+
...reply,
|
|
42
|
+
// A user interjection keeps its own turn (never folded into a preceding
|
|
43
|
+
// tool result), so the prefix's last block reaches the provider unchanged.
|
|
44
|
+
{ role: 'user', content: prompt, meta: { source: 'steering' } },
|
|
45
|
+
];
|
|
46
|
+
return { messages, opts };
|
|
47
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export interface RoutineProvenance {
|
|
2
|
+
kind: 'schedule' | 'webhook';
|
|
3
|
+
name: string;
|
|
4
|
+
status: 'ok' | 'failed';
|
|
5
|
+
summary?: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface RoutineMessageMeta {
|
|
10
|
+
source: string;
|
|
11
|
+
routine: Record<string, unknown>;
|
|
12
|
+
transcript: { at: number; messageId?: string };
|
|
13
|
+
}
|
|
14
|
+
export interface RoutineMessage {
|
|
15
|
+
role: 'user';
|
|
16
|
+
content: string;
|
|
17
|
+
meta: RoutineMessageMeta;
|
|
18
|
+
}
|
|
19
|
+
export interface RoutineNotice {
|
|
20
|
+
text: string;
|
|
21
|
+
tone: 'info' | 'warn';
|
|
22
|
+
routine: Record<string, unknown>;
|
|
23
|
+
/** Live run notices only (routineRunNotice). */
|
|
24
|
+
messageId?: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const ROUTINE_RESULT_SOURCE: 'schedule-result';
|
|
28
|
+
export const TASK_LOOP_CAP: number;
|
|
29
|
+
export function routineSummary(text: unknown): string;
|
|
30
|
+
export function routineResultMessage(options: {
|
|
31
|
+
kind?: 'schedule' | 'webhook';
|
|
32
|
+
name: string;
|
|
33
|
+
ok: boolean;
|
|
34
|
+
text?: unknown;
|
|
35
|
+
runId?: string | null;
|
|
36
|
+
runSessionId?: string | null;
|
|
37
|
+
reason?: string | null;
|
|
38
|
+
paused?: boolean;
|
|
39
|
+
at?: number;
|
|
40
|
+
messageId?: string;
|
|
41
|
+
}): RoutineMessage;
|
|
42
|
+
export function routineOmittedMessage(options: { count: number; at?: number; messageId?: string }): RoutineMessage;
|
|
43
|
+
export function agentTaskMessage(options: {
|
|
44
|
+
title: string;
|
|
45
|
+
status: string;
|
|
46
|
+
text?: unknown;
|
|
47
|
+
taskSessionId: string;
|
|
48
|
+
round?: number;
|
|
49
|
+
at?: number;
|
|
50
|
+
messageId?: string;
|
|
51
|
+
}): RoutineMessage;
|
|
52
|
+
export function agentTaskWakePrompt(messages: ReadonlyArray<{ content: string }>): string;
|
|
53
|
+
export function isRoutineResultMessage(message: unknown): boolean;
|
|
54
|
+
export function normalizeRoutineProvenance(value: unknown): RoutineProvenance | null;
|
|
55
|
+
export function routineProvenance(message: unknown): RoutineProvenance | null;
|
|
56
|
+
export function routineResultNotice(message: unknown): RoutineNotice;
|
|
57
|
+
export function routineRunNotice(options: {
|
|
58
|
+
kind?: 'schedule' | 'webhook';
|
|
59
|
+
name: string;
|
|
60
|
+
runId: string;
|
|
61
|
+
state: string;
|
|
62
|
+
ok?: boolean;
|
|
63
|
+
runSessionId?: string | null;
|
|
64
|
+
messageId?: string;
|
|
65
|
+
}): RoutineNotice;
|
|
66
|
+
export type RoutineHumanNeededOutcome = 'login_required' | 'human_action_required' | 'sensitive_confirmation_required';
|
|
67
|
+
export function routineHumanNeededText(outcome: RoutineHumanNeededOutcome, site: string): string;
|
|
68
|
+
export function routineHumanNeeded(summary: unknown): { outcome: RoutineHumanNeededOutcome; site: string } | null;
|
|
69
|
+
export function routineLoginRequiredText(site: string): string;
|
|
70
|
+
export function routineLoginRequiredSite(summary: unknown): string | null;
|