@prometheus-ai/agent 0.5.3 → 0.5.8
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/CHANGELOG.md +39 -0
- package/dist/cli.js +25110 -0
- package/dist/types/async/index.d.ts +0 -1
- package/dist/types/async/job-manager.d.ts +33 -0
- package/dist/types/autolearn/controller.d.ts +25 -0
- package/dist/types/autolearn/managed-skills.d.ts +45 -0
- package/dist/types/autoresearch/state.d.ts +1 -1
- package/dist/types/autoresearch/tools/init-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/log-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/run-experiment.d.ts +1 -1
- package/dist/types/autoresearch/tools/update-notes.d.ts +1 -1
- package/dist/types/autoresearch/types.d.ts +1 -1
- package/dist/types/capability/context-file.d.ts +0 -13
- package/dist/types/capability/mcp.d.ts +1 -0
- package/dist/types/capability/rule-buckets.d.ts +1 -1
- package/dist/types/capability/rule.d.ts +6 -1
- package/dist/types/capability/types.d.ts +0 -4
- package/dist/types/cli/args.d.ts +23 -3
- package/dist/types/cli/bench-cli.d.ts +78 -0
- package/dist/types/cli/claude-trace-cli.d.ts +7 -0
- package/dist/types/cli/dry-balance-cli.d.ts +16 -2
- package/dist/types/cli/gallery-cli.d.ts +43 -0
- package/dist/types/cli/gallery-fixtures/agentic.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/codeintel.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/edit.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/fs.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/index.d.ts +4 -0
- package/dist/types/cli/gallery-fixtures/interaction.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/memory.d.ts +2 -0
- package/dist/types/cli/gallery-fixtures/misc.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/search.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/shell.d.ts +3 -0
- package/dist/types/cli/gallery-fixtures/types.d.ts +55 -0
- package/dist/types/cli/gallery-fixtures/web.d.ts +2 -0
- package/dist/types/cli/gallery-screenshot.d.ts +35 -0
- package/dist/types/cli/gateway-cli.d.ts +4 -0
- package/dist/types/cli/grievances-cli.d.ts +1 -1
- package/dist/types/cli/list-models.d.ts +6 -14
- package/dist/types/cli/models-cli.d.ts +49 -0
- package/dist/types/cli/session-picker.d.ts +1 -1
- package/dist/types/cli/setup-cli.d.ts +1 -1
- package/dist/types/cli/setup-model-picker.d.ts +14 -0
- package/dist/types/cli/startup-cwd.d.ts +2 -0
- package/dist/types/cli/update-cli.d.ts +13 -40
- package/dist/types/cli/usage-cli.d.ts +81 -0
- package/dist/types/cli-commands.d.ts +12 -0
- package/dist/types/collab/crypto.d.ts +7 -0
- package/dist/types/collab/guest.d.ts +37 -0
- package/dist/types/collab/host.d.ts +29 -0
- package/dist/types/collab/protocol.d.ts +119 -0
- package/dist/types/collab/relay-client.d.ts +22 -0
- package/dist/types/commands/bench.d.ts +29 -0
- package/dist/types/commands/gallery.d.ts +47 -0
- package/dist/types/commands/gateway.d.ts +3 -0
- package/dist/types/commands/install.d.ts +1 -1
- package/dist/types/commands/join.d.ts +12 -0
- package/dist/types/commands/launch.d.ts +8 -4
- package/dist/types/commands/models.d.ts +33 -0
- package/dist/types/commands/read.d.ts +1 -1
- package/dist/types/commands/say.d.ts +24 -0
- package/dist/types/commands/token.d.ts +25 -0
- package/dist/types/commands/usage.d.ts +34 -0
- package/dist/types/commit/agentic/tools/analyze-file.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-file-diff.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-hunk.d.ts +1 -1
- package/dist/types/commit/agentic/tools/git-overview.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-changelog.d.ts +1 -1
- package/dist/types/commit/agentic/tools/propose-commit.d.ts +1 -1
- package/dist/types/commit/agentic/tools/recent-commits.d.ts +1 -1
- package/dist/types/commit/agentic/tools/schemas.d.ts +1 -1
- package/dist/types/commit/agentic/tools/split-commit.d.ts +1 -1
- package/dist/types/commit/analysis/conventional.d.ts +2 -2
- package/dist/types/commit/analysis/summary.d.ts +2 -2
- package/dist/types/commit/changelog/generate.d.ts +3 -3
- package/dist/types/commit/changelog/index.d.ts +2 -2
- package/dist/types/commit/map-reduce/index.d.ts +3 -3
- package/dist/types/commit/map-reduce/map-phase.d.ts +2 -2
- package/dist/types/commit/map-reduce/reduce-phase.d.ts +2 -2
- package/dist/types/commit/model-selection.d.ts +10 -4
- package/dist/types/commit/shared-llm.d.ts +1 -1
- package/dist/types/config/api-key-resolver.d.ts +43 -0
- package/dist/types/config/append-only-context-mode.d.ts +2 -1
- package/dist/types/config/keybindings.d.ts +12 -7
- package/dist/types/config/model-discovery.d.ts +57 -0
- package/dist/types/config/model-equivalence.d.ts +1 -1
- package/dist/types/config/model-registry.d.ts +86 -222
- package/dist/types/config/model-resolver.d.ts +43 -12
- package/dist/types/config/model-roles.d.ts +29 -0
- package/dist/types/config/models-config-schema.d.ts +536 -43
- package/dist/types/config/models-config.d.ts +391 -0
- package/dist/types/config/settings-schema.d.ts +1211 -324
- package/dist/types/config/settings.d.ts +15 -3
- package/dist/types/dap/config.d.ts +14 -1
- package/dist/types/dap/types.d.ts +10 -0
- package/dist/types/debug/log-viewer.d.ts +1 -1
- package/dist/types/debug/raw-sse.d.ts +1 -1
- package/dist/types/debug/report-bundle.d.ts +3 -0
- package/dist/types/debug/terminal-info.d.ts +0 -1
- package/dist/types/discovery/at-imports.d.ts +15 -0
- package/dist/types/discovery/prometheus-extension-roots.d.ts +7 -7
- package/dist/types/edit/diff.d.ts +3 -2
- package/dist/types/edit/file-snapshot-store.d.ts +18 -0
- package/dist/types/edit/hashline/noop-loop-guard.d.ts +72 -0
- package/dist/types/edit/hashline/params.d.ts +1 -1
- package/dist/types/edit/index.d.ts +0 -1
- package/dist/types/edit/modes/apply-patch.d.ts +1 -1
- package/dist/types/edit/modes/patch.d.ts +1 -1
- package/dist/types/edit/modes/replace.d.ts +1 -1
- package/dist/types/edit/renderer.d.ts +1 -0
- package/dist/types/eval/__tests__/completion-bridge.test.d.ts +1 -0
- package/dist/types/eval/__tests__/helpers-local-roots.test.d.ts +1 -0
- package/dist/types/eval/__tests__/js-context-manager.test.d.ts +1 -0
- package/dist/types/eval/backend.d.ts +7 -2
- package/dist/types/eval/bridge-timeout.d.ts +1 -1
- package/dist/types/eval/completion-bridge.d.ts +25 -0
- package/dist/types/eval/idle-timeout.d.ts +1 -5
- package/dist/types/eval/js/context-manager.d.ts +1 -0
- package/dist/types/eval/js/executor.d.ts +2 -0
- package/dist/types/eval/js/index.d.ts +1 -1
- package/dist/types/eval/js/shared/helpers.d.ts +7 -1
- package/dist/types/eval/js/shared/rewrite-imports.d.ts +6 -6
- package/dist/types/eval/js/shared/runtime.d.ts +6 -1
- package/dist/types/eval/js/worker-protocol.d.ts +6 -0
- package/dist/types/eval/py/__tests__/prelude.test.d.ts +1 -0
- package/dist/types/eval/py/executor.d.ts +12 -0
- package/dist/types/eval/py/index.d.ts +1 -1
- package/dist/types/eval/py/kernel.d.ts +6 -1
- package/dist/types/eval/py/runtime.d.ts +9 -0
- package/dist/types/exa/index.d.ts +1 -19
- package/dist/types/exa/mcp-client.d.ts +10 -3
- package/dist/types/exa/types.d.ts +0 -83
- package/dist/types/exec/bash-executor.d.ts +7 -0
- package/dist/types/export/custom-share.d.ts +1 -2
- package/dist/types/export/html/index.d.ts +39 -0
- package/dist/types/export/html/template-js.d.ts +2 -0
- package/dist/types/export/share.d.ts +61 -0
- package/dist/types/export/ttsr.d.ts +14 -0
- package/dist/types/extensibility/custom-commands/types.d.ts +9 -4
- package/dist/types/extensibility/custom-tools/loader.d.ts +30 -4
- package/dist/types/extensibility/custom-tools/types.d.ts +16 -8
- package/dist/types/extensibility/extensions/index.d.ts +1 -1
- package/dist/types/extensibility/extensions/loader.d.ts +20 -1
- package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
- package/dist/types/extensibility/extensions/runner.d.ts +5 -2
- package/dist/types/extensibility/extensions/types.d.ts +72 -11
- package/dist/types/extensibility/hooks/index.d.ts +2 -1
- package/dist/types/extensibility/hooks/loader.d.ts +1 -1
- package/dist/types/extensibility/hooks/types.d.ts +11 -5
- package/dist/types/extensibility/{legacy-pi-ai-shim.d.ts → legacy-package-ai-shim.d.ts} +2 -2
- package/dist/types/extensibility/plugins/{legacy-pi-compat.d.ts → legacy-package-compat.d.ts} +20 -3
- package/dist/types/extensibility/plugins/loader.d.ts +11 -0
- package/dist/types/extensibility/plugins/marketplace-auto-update.d.ts +8 -0
- package/dist/types/extensibility/plugins/types.d.ts +2 -2
- package/dist/types/extensibility/shared-events.d.ts +3 -3
- package/dist/types/extensibility/skills.d.ts +10 -0
- package/dist/types/extensibility/slash-commands.d.ts +1 -11
- package/dist/types/gateway/adapters/telegram/access.d.ts +4 -1
- package/dist/types/gateway/adapters/telegram/setup-api.d.ts +1 -1
- package/dist/types/gateway/adapters/telegram/webhook.d.ts +1 -1
- package/dist/types/gateway/types.d.ts +1 -1
- package/dist/types/goals/guided-setup.d.ts +18 -0
- package/dist/types/goals/state.d.ts +1 -1
- package/dist/types/goals/tools/goal-tool.d.ts +1 -1
- package/dist/types/hindsight/mental-models.d.ts +17 -8
- package/dist/types/hindsight/transcript.d.ts +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
- package/dist/types/internal-urls/history-protocol.d.ts +14 -0
- package/dist/types/internal-urls/index.d.ts +1 -0
- package/dist/types/internal-urls/local-protocol.d.ts +14 -2
- package/dist/types/internal-urls/types.d.ts +1 -1
- package/dist/types/irc/bus.d.ts +79 -0
- package/dist/types/lib/xai-http.d.ts +1 -1
- package/dist/types/lsp/client.d.ts +10 -0
- package/dist/types/lsp/config.d.ts +2 -2
- package/dist/types/lsp/edits.d.ts +9 -0
- package/dist/types/lsp/format-options.d.ts +32 -0
- package/dist/types/lsp/index.d.ts +2 -7
- package/dist/types/lsp/types.d.ts +13 -1
- package/dist/types/lsp/utils.d.ts +6 -2
- package/dist/types/main.d.ts +23 -8
- package/dist/types/mcp/json-rpc.d.ts +5 -0
- package/dist/types/mcp/manager.d.ts +8 -0
- package/dist/types/mcp/oauth-discovery.d.ts +6 -1
- package/dist/types/mcp/oauth-flow.d.ts +13 -3
- package/dist/types/mcp/startup-events.d.ts +11 -0
- package/dist/types/mcp/tool-bridge.d.ts +2 -0
- package/dist/types/mcp/transports/stdio.d.ts +13 -0
- package/dist/types/mcp/types.d.ts +2 -0
- package/dist/types/memories/index.d.ts +7 -15
- package/dist/types/memories/storage.d.ts +0 -10
- package/dist/types/memory-backend/index.d.ts +3 -1
- package/dist/types/memory-backend/local-backend.d.ts +4 -3
- package/dist/types/memory-backend/resolve.d.ts +2 -2
- package/dist/types/memory-backend/runtime.d.ts +4 -0
- package/dist/types/memory-backend/types.d.ts +67 -2
- package/dist/types/mnemopi/config.d.ts +31 -1
- package/dist/types/mnemopi/state.d.ts +40 -2
- package/dist/types/modes/acp/acp-agent.d.ts +1 -2
- package/dist/types/modes/components/agent-dashboard.d.ts +17 -1
- package/dist/types/modes/components/agent-hub.d.ts +82 -0
- package/dist/types/modes/components/assistant-message.d.ts +5 -12
- package/dist/types/modes/components/bash-execution.d.ts +1 -1
- package/dist/types/modes/components/chat-block.d.ts +64 -0
- package/dist/types/modes/components/collab-prompt-message.d.ts +10 -0
- package/dist/types/modes/components/compaction-summary-message.d.ts +25 -5
- package/dist/types/modes/components/copy-selector.d.ts +1 -1
- package/dist/types/modes/components/custom-editor.d.ts +49 -2
- package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
- package/dist/types/modes/components/dynamic-border.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-dashboard.d.ts +1 -1
- package/dist/types/modes/components/extensions/extension-list.d.ts +1 -1
- package/dist/types/modes/components/extensions/inspector-panel.d.ts +1 -1
- package/dist/types/modes/components/footer.d.ts +1 -1
- package/dist/types/modes/components/hook-editor.d.ts +5 -0
- package/dist/types/modes/components/hook-input.d.ts +4 -0
- package/dist/types/modes/components/hook-selector.d.ts +5 -7
- package/dist/types/modes/components/index.d.ts +1 -0
- package/dist/types/modes/components/late-diagnostics-message.d.ts +20 -0
- package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
- package/dist/types/modes/components/mcp-add-wizard.d.ts +2 -1
- package/dist/types/modes/components/model-selector.d.ts +1 -1
- package/dist/types/modes/components/oauth-selector.d.ts +10 -1
- package/dist/types/modes/components/overlay-box.d.ts +17 -0
- package/dist/types/modes/components/plan-review-overlay.d.ts +61 -0
- package/dist/types/modes/components/plan-toc.d.ts +41 -0
- package/dist/types/modes/components/read-tool-group.d.ts +8 -0
- package/dist/types/modes/components/reset-usage-selector.d.ts +12 -0
- package/dist/types/modes/components/segment-track.d.ts +11 -6
- package/dist/types/modes/components/session-selector.d.ts +18 -9
- package/dist/types/modes/components/settings-defs.d.ts +9 -2
- package/dist/types/modes/components/settings-selector.d.ts +17 -4
- package/dist/types/modes/components/snapcompact-shape-preview.d.ts +31 -0
- package/dist/types/modes/components/status-line/component.d.ts +61 -0
- package/dist/types/modes/components/status-line/index.d.ts +1 -0
- package/dist/types/modes/components/status-line/types.d.ts +47 -3
- package/dist/types/modes/components/tiny-title-download-progress.d.ts +1 -1
- package/dist/types/modes/components/tool-execution.d.ts +49 -2
- package/dist/types/modes/components/transcript-container.d.ts +76 -26
- package/dist/types/modes/components/tree-selector.d.ts +2 -2
- package/dist/types/modes/components/ttsr-notification.d.ts +5 -1
- package/dist/types/modes/components/usage-row.d.ts +3 -0
- package/dist/types/modes/components/user-message-selector.d.ts +1 -1
- package/dist/types/modes/components/user-message.d.ts +2 -1
- package/dist/types/modes/components/visual-truncate.d.ts +1 -1
- package/dist/types/modes/components/welcome.d.ts +12 -2
- package/dist/types/modes/controllers/command-controller.d.ts +3 -2
- package/dist/types/modes/controllers/event-controller.d.ts +7 -1
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +0 -1
- package/dist/types/modes/controllers/input-controller.d.ts +25 -3
- package/dist/types/modes/controllers/mcp-command-controller.d.ts +8 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +5 -2
- package/dist/types/modes/controllers/session-focus-controller.d.ts +31 -0
- package/dist/types/modes/controllers/streaming-reveal.d.ts +22 -0
- package/dist/types/modes/controllers/tan-command-controller.d.ts +6 -0
- package/dist/types/modes/controllers/tool-args-reveal.d.ts +43 -0
- package/dist/types/modes/gradient-highlight.d.ts +9 -4
- package/dist/types/modes/image-references.d.ts +14 -3
- package/dist/types/modes/index.d.ts +8 -7
- package/dist/types/modes/interactive-mode.d.ts +92 -16
- package/dist/types/modes/magic-keywords.d.ts +14 -2
- package/dist/types/modes/markdown-prose.d.ts +1 -1
- package/dist/types/modes/oauth-manual-input.d.ts +7 -0
- package/dist/types/modes/rpc/rpc-client.d.ts +48 -2
- package/dist/types/modes/rpc/rpc-mode.d.ts +67 -2
- package/dist/types/modes/rpc/rpc-subagents.d.ts +24 -0
- package/dist/types/modes/rpc/rpc-types.d.ts +113 -1
- package/dist/types/modes/runtime-init.d.ts +4 -0
- package/dist/types/modes/session-observer-registry.d.ts +9 -0
- package/dist/types/modes/setup-version.d.ts +11 -0
- package/dist/types/modes/setup-wizard/index.d.ts +7 -2
- package/dist/types/modes/setup-wizard/lazy.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +4 -1
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +11 -2
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +6 -2
- package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +1 -1
- package/dist/types/modes/theme/theme.d.ts +42 -7
- package/dist/types/modes/types.d.ts +62 -13
- package/dist/types/modes/utils/context-usage.d.ts +6 -1
- package/dist/types/modes/utils/copy-targets.d.ts +21 -1
- package/dist/types/modes/utils/ui-helpers.d.ts +4 -4
- package/dist/types/modes/workflow.d.ts +3 -3
- package/dist/types/plan-mode/approved-plan.d.ts +27 -8
- package/dist/types/plan-mode/plan-protection.d.ts +4 -4
- package/dist/types/registry/agent-lifecycle.d.ts +51 -0
- package/dist/types/registry/agent-registry.d.ts +33 -5
- package/dist/types/sdk.d.ts +46 -4
- package/dist/types/secrets/index.d.ts +1 -1
- package/dist/types/secrets/obfuscator.d.ts +9 -3
- package/dist/types/session/agent-session.d.ts +136 -66
- package/dist/types/session/agent-storage.d.ts +2 -1
- package/dist/types/session/auth-broker-config.d.ts +4 -0
- package/dist/types/session/auth-storage.d.ts +1 -1
- package/dist/types/session/codex-auto-reset.d.ts +111 -0
- package/dist/types/session/indexed-session-storage.d.ts +3 -3
- package/dist/types/session/messages.d.ts +26 -15
- package/dist/types/session/session-context.d.ts +39 -0
- package/dist/types/session/session-entries.d.ts +159 -0
- package/dist/types/session/session-history-format.d.ts +12 -0
- package/dist/types/session/session-listing.d.ts +69 -0
- package/dist/types/session/session-loader.d.ts +16 -0
- package/dist/types/session/session-manager.d.ts +107 -440
- package/dist/types/session/session-migrations.d.ts +12 -0
- package/dist/types/session/session-paths.d.ts +25 -0
- package/dist/types/session/session-persistence.d.ts +8 -0
- package/dist/types/session/session-storage.d.ts +11 -7
- package/dist/types/session/snapcompact-inline.d.ts +145 -0
- package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
- package/dist/types/session/streaming-output.d.ts +46 -0
- package/dist/types/session/tool-choice-queue.d.ts +6 -6
- package/dist/types/session/yield-queue.d.ts +10 -1
- package/dist/types/slash-commands/acp-builtins.d.ts +16 -0
- package/dist/types/slash-commands/available-commands.d.ts +34 -0
- package/dist/types/slash-commands/builtin-registry.d.ts +10 -0
- package/dist/types/slash-commands/helpers/active-oauth-account.d.ts +14 -0
- package/dist/types/slash-commands/helpers/logout.d.ts +15 -0
- package/dist/types/slash-commands/helpers/reset-usage.d.ts +27 -0
- package/dist/types/slash-commands/helpers/stats-dashboard.d.ts +13 -0
- package/dist/types/slash-commands/types.d.ts +5 -9
- package/dist/types/ssh/connection-manager.d.ts +8 -0
- package/dist/types/stt/asr-client.d.ts +90 -0
- package/dist/types/stt/asr-protocol.d.ts +97 -0
- package/dist/types/stt/asr-worker.d.ts +2 -0
- package/dist/types/stt/downloader.d.ts +38 -0
- package/dist/types/stt/endpointer.d.ts +59 -0
- package/dist/types/stt/index.d.ts +5 -1
- package/dist/types/stt/models.d.ts +120 -0
- package/dist/types/stt/recorder.d.ts +17 -0
- package/dist/types/stt/stt-controller.d.ts +6 -0
- package/dist/types/stt/transcriber.d.ts +5 -7
- package/dist/types/stt/wav.d.ts +29 -0
- package/dist/types/system-prompt.d.ts +9 -1
- package/dist/types/task/commands.d.ts +1 -1
- package/dist/types/task/discovery.d.ts +1 -2
- package/dist/types/task/executor.d.ts +61 -2
- package/dist/types/task/index.d.ts +37 -6
- package/dist/types/task/output-manager.d.ts +0 -7
- package/dist/types/task/parallel.d.ts +2 -2
- package/dist/types/task/prometheus-command.d.ts +2 -2
- package/dist/types/task/render.d.ts +20 -7
- package/dist/types/task/repair-args.d.ts +8 -7
- package/dist/types/task/types.d.ts +109 -52
- package/dist/types/task/worktree.d.ts +2 -0
- package/dist/types/telemetry-export.d.ts +2 -2
- package/dist/types/thinking.d.ts +4 -0
- package/dist/types/tiny/models.d.ts +1 -1
- package/dist/types/tiny/title-client.d.ts +12 -1
- package/dist/types/tiny/title-protocol.d.ts +1 -0
- package/dist/types/tools/archive-reader.d.ts +5 -0
- package/dist/types/tools/ask.d.ts +6 -1
- package/dist/types/tools/ast-edit.d.ts +4 -1
- package/dist/types/tools/ast-grep.d.ts +4 -1
- package/dist/types/tools/bash.d.ts +5 -2
- package/dist/types/tools/browser/attach.d.ts +4 -4
- package/dist/types/tools/browser/cmux/cmux-tab.d.ts +202 -0
- package/dist/types/tools/browser/cmux/rpc.d.ts +70 -0
- package/dist/types/tools/browser/cmux/socket-client.d.ts +19 -0
- package/dist/types/tools/browser/registry.d.ts +17 -3
- package/dist/types/tools/browser/render.d.ts +2 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +2 -0
- package/dist/types/tools/browser/tab-supervisor.d.ts +16 -4
- package/dist/types/tools/browser/tab-worker.d.ts +18 -1
- package/dist/types/tools/browser.d.ts +3 -1
- package/dist/types/tools/checkpoint.d.ts +1 -1
- package/dist/types/tools/conflict-detect.d.ts +16 -0
- package/dist/types/tools/debug.d.ts +1 -1
- package/dist/types/tools/eval-render.d.ts +1 -8
- package/dist/types/tools/eval.d.ts +9 -1
- package/dist/types/tools/fetch.d.ts +17 -8
- package/dist/types/tools/find.d.ts +1 -8
- package/dist/types/tools/gh-cache-invalidation.d.ts +6 -0
- package/dist/types/tools/gh.d.ts +4 -1
- package/dist/types/tools/github-cache.d.ts +19 -0
- package/dist/types/tools/grouped-file-output.d.ts +46 -12
- package/dist/types/tools/image-gen.d.ts +1 -1
- package/dist/types/tools/index.d.ts +89 -8
- package/dist/types/tools/inspect-image.d.ts +1 -1
- package/dist/types/tools/irc.d.ts +79 -39
- package/dist/types/tools/job.d.ts +8 -2
- package/dist/types/tools/learn.d.ts +51 -0
- package/dist/types/tools/manage-skill.d.ts +40 -0
- package/dist/types/tools/memory-edit.d.ts +2 -2
- package/dist/types/tools/memory-recall.d.ts +1 -1
- package/dist/types/tools/memory-reflect.d.ts +1 -1
- package/dist/types/tools/memory-render.d.ts +4 -1
- package/dist/types/tools/memory-retain.d.ts +1 -1
- package/dist/types/tools/path-utils.d.ts +17 -5
- package/dist/types/tools/plan-mode-guard.d.ts +18 -9
- package/dist/types/tools/read.d.ts +3 -2
- package/dist/types/tools/render-mermaid.d.ts +1 -1
- package/dist/types/tools/render-utils.d.ts +47 -27
- package/dist/types/tools/renderers.d.ts +10 -2
- package/dist/types/tools/report-tool-issue.d.ts +6 -1
- package/dist/types/tools/resolve.d.ts +1 -1
- package/dist/types/tools/review.d.ts +1 -1
- package/dist/types/tools/search-tool-bm25.d.ts +1 -1
- package/dist/types/tools/search.d.ts +7 -3
- package/dist/types/tools/sqlite-reader.d.ts +4 -0
- package/dist/types/tools/ssh.d.ts +2 -1
- package/dist/types/tools/todo.d.ts +7 -15
- package/dist/types/tools/tool-result.d.ts +2 -0
- package/dist/types/tools/tool-timeouts.d.ts +1 -1
- package/dist/types/tools/tts.d.ts +26 -1
- package/dist/types/tools/write.d.ts +6 -3
- package/dist/types/tools/yield.d.ts +8 -0
- package/dist/types/tts/downloader.d.ts +20 -0
- package/dist/types/tts/index.d.ts +8 -0
- package/dist/types/tts/models.d.ts +82 -0
- package/dist/types/tts/player.d.ts +32 -0
- package/dist/types/tts/runtime.d.ts +6 -0
- package/dist/types/tts/streaming-player.d.ts +41 -0
- package/dist/types/tts/tts-client.d.ts +93 -0
- package/dist/types/tts/tts-protocol.d.ts +95 -0
- package/dist/types/tts/tts-worker.d.ts +2 -0
- package/dist/types/tts/vocalizer.d.ts +41 -0
- package/dist/types/tts/wav.d.ts +8 -0
- package/dist/types/tui/code-cell.d.ts +0 -2
- package/dist/types/tui/hyperlink.d.ts +13 -7
- package/dist/types/tui/output-block.d.ts +16 -22
- package/dist/types/tui/status-line.d.ts +3 -0
- package/dist/types/utils/block-context.d.ts +35 -0
- package/dist/types/utils/changelog.d.ts +8 -0
- package/dist/types/utils/clipboard.d.ts +4 -3
- package/dist/types/utils/enhanced-paste.d.ts +20 -0
- package/dist/types/utils/file-mentions.d.ts +7 -0
- package/dist/types/utils/git.d.ts +22 -3
- package/dist/types/utils/image-loading.d.ts +30 -1
- package/dist/types/utils/session-color.d.ts +15 -3
- package/dist/types/utils/thinking-display.d.ts +17 -0
- package/dist/types/utils/title-generator.d.ts +3 -2
- package/dist/types/utils/tool-choice.d.ts +8 -0
- package/dist/types/utils/tools-manager.d.ts +2 -1
- package/dist/types/web/kagi.d.ts +2 -2
- package/dist/types/web/parallel.d.ts +3 -0
- package/dist/types/web/scrapers/github.d.ts +22 -0
- package/dist/types/web/scrapers/readthedocs.d.ts +3 -0
- package/dist/types/web/scrapers/types.d.ts +12 -0
- package/dist/types/web/search/index.d.ts +1 -1
- package/dist/types/web/search/providers/anthropic.d.ts +2 -1
- package/dist/types/web/search/providers/base.d.ts +2 -1
- package/dist/types/web/search/providers/brave.d.ts +2 -1
- package/dist/types/web/search/providers/codex.d.ts +2 -1
- package/dist/types/web/search/providers/exa.d.ts +2 -1
- package/dist/types/web/search/providers/gemini.d.ts +10 -6
- package/dist/types/web/search/providers/jina.d.ts +7 -2
- package/dist/types/web/search/providers/kagi.d.ts +7 -2
- package/dist/types/web/search/providers/kimi.d.ts +7 -2
- package/dist/types/web/search/providers/parallel.d.ts +2 -1
- package/dist/types/web/search/providers/perplexity.d.ts +10 -2
- package/dist/types/web/search/providers/searxng.d.ts +2 -1
- package/dist/types/web/search/providers/synthetic.d.ts +7 -3
- package/dist/types/web/search/providers/tavily.d.ts +2 -1
- package/dist/types/web/search/providers/zai.d.ts +2 -1
- package/dist/types/web/search/types.d.ts +1 -1
- package/examples/extensions/api-demo.ts +2 -2
- package/package.json +41 -15
- package/scripts/bench-guard.ts +71 -0
- package/scripts/build-binary.ts +24 -25
- package/scripts/bundle-dist.ts +97 -0
- package/scripts/generate-share-viewer.ts +34 -0
- package/scripts/prometheus +42 -0
- package/scripts/prometheus.ts +20 -0
- package/src/async/index.ts +0 -1
- package/src/async/job-manager.ts +106 -3
- package/src/auto-thinking/classifier.ts +2 -1
- package/src/autolearn/controller.ts +139 -0
- package/src/autolearn/managed-skills.ts +257 -0
- package/src/autoresearch/dashboard.ts +1 -1
- package/src/autoresearch/prompt-setup.md +6 -6
- package/src/autoresearch/prompt.md +6 -6
- package/src/autoresearch/state.ts +1 -1
- package/src/autoresearch/storage.ts +2 -1
- package/src/autoresearch/tools/init-experiment.ts +1 -1
- package/src/autoresearch/tools/log-experiment.ts +1 -1
- package/src/autoresearch/tools/run-experiment.ts +1 -1
- package/src/autoresearch/tools/update-notes.ts +1 -1
- package/src/autoresearch/types.ts +1 -1
- package/src/capability/context-file.ts +0 -14
- package/src/capability/fs.ts +10 -0
- package/src/capability/index.ts +1 -6
- package/src/capability/mcp.ts +1 -0
- package/src/capability/rule-buckets.ts +4 -2
- package/src/capability/rule.ts +10 -1
- package/src/capability/types.ts +0 -4
- package/src/cli/args.ts +66 -13
- package/src/cli/auth-broker-cli.ts +6 -7
- package/src/cli/auth-gateway-cli.ts +8 -9
- package/src/cli/bench-cli.ts +437 -0
- package/src/cli/claude-trace-cli.ts +28 -50
- package/src/cli/completion-gen.ts +28 -28
- package/src/cli/dry-balance-cli.ts +56 -23
- package/src/cli/gallery-cli.ts +231 -0
- package/src/cli/gallery-fixtures/agentic.ts +407 -0
- package/src/cli/gallery-fixtures/codeintel.ts +187 -0
- package/src/cli/gallery-fixtures/edit.ts +194 -0
- package/src/cli/gallery-fixtures/fs.ts +220 -0
- package/src/cli/gallery-fixtures/index.ts +40 -0
- package/src/cli/gallery-fixtures/interaction.ts +49 -0
- package/src/cli/gallery-fixtures/memory.ts +81 -0
- package/src/cli/gallery-fixtures/misc.ts +250 -0
- package/src/cli/gallery-fixtures/search.ts +213 -0
- package/src/cli/gallery-fixtures/shell.ts +167 -0
- package/src/cli/gallery-fixtures/types.ts +57 -0
- package/src/cli/gallery-fixtures/web.ts +158 -0
- package/src/cli/gallery-screenshot.ts +279 -0
- package/src/cli/gateway-cli.ts +32 -2
- package/src/cli/grievances-cli.ts +1 -1
- package/src/cli/list-models.ts +16 -174
- package/src/cli/models-cli.ts +429 -0
- package/src/cli/session-picker.ts +2 -1
- package/src/cli/setup-cli.ts +148 -47
- package/src/cli/setup-model-picker.ts +43 -0
- package/src/cli/startup-cwd.ts +68 -0
- package/src/cli/update-cli.ts +144 -272
- package/src/cli/usage-cli.ts +774 -0
- package/src/cli-commands.ts +36 -0
- package/src/cli.ts +141 -32
- package/src/collab/crypto.ts +63 -0
- package/src/collab/guest.ts +451 -0
- package/src/collab/host.ts +565 -0
- package/src/collab/protocol.ts +241 -0
- package/src/collab/relay-client.ts +216 -0
- package/src/commands/bench.ts +42 -0
- package/src/commands/complete.ts +1 -1
- package/src/commands/gallery.ts +52 -0
- package/src/commands/gateway.ts +4 -0
- package/src/commands/install.ts +1 -1
- package/src/commands/join.ts +39 -0
- package/src/commands/launch.ts +8 -4
- package/src/commands/models.ts +61 -0
- package/src/commands/read.ts +6 -3
- package/src/commands/say.ts +102 -0
- package/src/commands/setup.ts +1 -1
- package/src/commands/token.ts +89 -0
- package/src/commands/usage.ts +43 -0
- package/src/commit/agentic/agent.ts +2 -1
- package/src/commit/agentic/tools/analyze-file.ts +42 -20
- package/src/commit/agentic/tools/git-file-diff.ts +1 -1
- package/src/commit/agentic/tools/git-hunk.ts +1 -1
- package/src/commit/agentic/tools/git-overview.ts +1 -1
- package/src/commit/agentic/tools/propose-changelog.ts +1 -1
- package/src/commit/agentic/tools/propose-commit.ts +1 -1
- package/src/commit/agentic/tools/recent-commits.ts +1 -1
- package/src/commit/agentic/tools/schemas.ts +1 -1
- package/src/commit/agentic/tools/split-commit.ts +9 -2
- package/src/commit/analysis/conventional.ts +2 -2
- package/src/commit/analysis/summary.ts +3 -3
- package/src/commit/changelog/generate.ts +3 -3
- package/src/commit/changelog/index.ts +2 -2
- package/src/commit/map-reduce/index.ts +3 -3
- package/src/commit/map-reduce/map-phase.ts +2 -2
- package/src/commit/map-reduce/reduce-phase.ts +2 -2
- package/src/commit/model-selection.ts +35 -12
- package/src/commit/pipeline.ts +4 -4
- package/src/commit/shared-llm.ts +1 -1
- package/src/config/api-key-resolver.ts +67 -0
- package/src/config/append-only-context-mode.ts +6 -12
- package/src/config/keybindings.ts +9 -4
- package/src/config/mcp-schema.json +4 -0
- package/src/config/model-discovery.ts +574 -0
- package/src/config/model-equivalence.ts +5 -4
- package/src/config/model-registry.ts +659 -1093
- package/src/config/model-resolver.ts +374 -174
- package/src/config/model-roles.ts +88 -0
- package/src/config/models-config-schema.ts +61 -9
- package/src/config/models-config.ts +130 -0
- package/src/config/settings-schema.ts +1445 -382
- package/src/config/settings.ts +261 -69
- package/src/dap/client.ts +138 -53
- package/src/dap/config.ts +41 -2
- package/src/dap/defaults.json +1 -0
- package/src/dap/session.ts +263 -161
- package/src/dap/types.ts +10 -0
- package/src/debug/index.ts +50 -60
- package/src/debug/log-viewer.ts +1 -1
- package/src/debug/protocol-probe.ts +1 -1
- package/src/debug/raw-sse-buffer.ts +7 -4
- package/src/debug/raw-sse.ts +1 -1
- package/src/debug/report-bundle.ts +9 -0
- package/src/debug/terminal-info.ts +0 -3
- package/src/discovery/agents-md.ts +25 -21
- package/src/discovery/agents.ts +9 -15
- package/src/discovery/at-imports.ts +273 -0
- package/src/discovery/builtin-rules/index.ts +4 -0
- package/src/discovery/builtin-rules/ts-no-test-timers.md +55 -0
- package/src/discovery/builtin-rules/ts-redundant-clear-guard.md +75 -0
- package/src/discovery/builtin.ts +45 -23
- package/src/discovery/claude-plugins.ts +44 -5
- package/src/discovery/helpers.ts +50 -9
- package/src/discovery/prometheus-extension-roots.ts +10 -10
- package/src/discovery/prometheus-plugins.ts +10 -10
- package/src/edit/diff.ts +191 -4
- package/src/edit/file-snapshot-store.ts +34 -1
- package/src/edit/hashline/block-resolver.ts +20 -1
- package/src/edit/hashline/diff.ts +123 -2
- package/src/edit/hashline/execute.ts +60 -4
- package/src/edit/hashline/filesystem.ts +2 -1
- package/src/edit/hashline/noop-loop-guard.ts +99 -0
- package/src/edit/hashline/params.ts +1 -1
- package/src/edit/index.ts +47 -18
- package/src/edit/modes/apply-patch.ts +1 -1
- package/src/edit/modes/patch.ts +59 -3
- package/src/edit/modes/replace.ts +58 -24
- package/src/edit/notebook.ts +22 -2
- package/src/edit/renderer.ts +315 -151
- package/src/eval/__tests__/agent-bridge.test.ts +105 -39
- package/src/eval/__tests__/budget-bridge.test.ts +1 -1
- package/src/eval/__tests__/completion-bridge.test.ts +412 -0
- package/src/eval/__tests__/helpers-local-roots.test.ts +58 -0
- package/src/eval/__tests__/js-context-manager.test.ts +241 -0
- package/src/eval/__tests__/llm-bridge.test.ts +6 -4
- package/src/eval/__tests__/shared-executors.test.ts +34 -92
- package/src/eval/agent-bridge.ts +39 -23
- package/src/eval/backend.ts +15 -2
- package/src/eval/bridge-timeout.ts +1 -1
- package/src/eval/completion-bridge.ts +203 -0
- package/src/eval/idle-timeout.ts +3 -10
- package/src/eval/js/context-manager.ts +108 -31
- package/src/eval/js/executor.ts +9 -2
- package/src/eval/js/index.ts +7 -3
- package/src/eval/js/shared/helpers.ts +59 -13
- package/src/eval/js/shared/local-module-loader.ts +2 -2
- package/src/eval/js/shared/prelude.txt +167 -30
- package/src/eval/js/shared/rewrite-imports.ts +58 -34
- package/src/eval/js/shared/runtime.ts +24 -16
- package/src/eval/js/tool-bridge.ts +4 -0
- package/src/eval/js/worker-core.ts +1 -0
- package/src/eval/js/worker-entry.ts +6 -0
- package/src/eval/js/worker-protocol.ts +6 -0
- package/src/eval/llm-bridge.ts +2 -1
- package/src/eval/py/__tests__/prelude.test.ts +19 -0
- package/src/eval/py/executor.ts +70 -26
- package/src/eval/py/index.ts +13 -4
- package/src/eval/py/kernel.ts +48 -9
- package/src/eval/py/prelude.py +73 -24
- package/src/eval/py/runner.py +133 -28
- package/src/eval/py/runtime.ts +38 -1
- package/src/exa/index.ts +1 -26
- package/src/exa/mcp-client.ts +10 -10
- package/src/exa/types.ts +0 -97
- package/src/exec/bash-executor.ts +104 -7
- package/src/export/custom-share.ts +1 -1
- package/src/export/html/index.ts +119 -17
- package/src/export/html/share-loader.js +102 -0
- package/src/export/html/template-js.ts +6 -0
- package/src/export/html/template.css +745 -459
- package/src/export/html/template.css.d.ts +2 -0
- package/src/export/html/template.html +6 -3
- package/src/export/html/template.js +277 -891
- package/src/export/html/tool-views.generated.d.ts +2 -0
- package/src/export/html/tool-views.generated.js +38 -0
- package/src/export/share.ts +269 -0
- package/src/export/ttsr.ts +122 -1
- package/src/extensibility/custom-commands/loader.ts +7 -4
- package/src/extensibility/custom-commands/types.ts +9 -4
- package/src/extensibility/custom-tools/loader.ts +51 -23
- package/src/extensibility/custom-tools/types.ts +16 -8
- package/src/extensibility/extensions/get-commands-handler.ts +2 -1
- package/src/extensibility/extensions/index.ts +1 -0
- package/src/extensibility/extensions/loader.ts +70 -20
- package/src/extensibility/extensions/model-api.ts +41 -0
- package/src/extensibility/extensions/runner.ts +12 -2
- package/src/extensibility/extensions/types.ts +83 -11
- package/src/extensibility/extensions/wrapper.ts +41 -5
- package/src/extensibility/hooks/index.ts +2 -1
- package/src/extensibility/hooks/loader.ts +6 -3
- package/src/extensibility/hooks/types.ts +11 -5
- package/src/extensibility/{legacy-pi-ai-shim.ts → legacy-package-ai-shim.ts} +2 -2
- package/src/extensibility/plugins/doctor.ts +1 -2
- package/src/extensibility/plugins/installer.ts +2 -2
- package/src/extensibility/plugins/{legacy-pi-compat.ts → legacy-package-compat.ts} +165 -77
- package/src/extensibility/plugins/loader.ts +34 -23
- package/src/extensibility/plugins/manager.ts +226 -95
- package/src/extensibility/plugins/marketplace-auto-update.ts +49 -0
- package/src/extensibility/plugins/types.ts +3 -3
- package/src/extensibility/shared-events.ts +3 -3
- package/src/extensibility/skills.ts +113 -9
- package/src/extensibility/slash-commands.ts +1 -97
- package/src/gateway/adapters/telegram/access.ts +39 -4
- package/src/gateway/adapters/telegram/normalize.ts +16 -1
- package/src/gateway/adapters/telegram/setup-api.ts +7 -1
- package/src/gateway/adapters/telegram/webhook.ts +26 -5
- package/src/gateway/context.ts +9 -1
- package/src/gateway/types.ts +1 -1
- package/src/goals/guided-setup.ts +133 -0
- package/src/goals/state.ts +1 -1
- package/src/goals/tools/goal-tool.ts +38 -28
- package/src/hindsight/bank.ts +17 -2
- package/src/hindsight/client.ts +27 -2
- package/src/hindsight/mental-models.ts +59 -12
- package/src/hindsight/state.ts +12 -3
- package/src/hindsight/transcript.ts +1 -1
- package/src/index.ts +5 -0
- package/src/internal-urls/artifact-protocol.ts +11 -2
- package/src/internal-urls/docs-index.generated.ts +11 -9
- package/src/internal-urls/history-protocol.ts +113 -0
- package/src/internal-urls/index.ts +1 -0
- package/src/internal-urls/issue-pr-protocol.ts +22 -9
- package/src/internal-urls/local-protocol.ts +42 -7
- package/src/internal-urls/memory-protocol.ts +4 -31
- package/src/internal-urls/router.ts +3 -1
- package/src/internal-urls/types.ts +1 -1
- package/src/irc/bus.ts +303 -0
- package/src/lib/xai-http.ts +3 -3
- package/src/lsp/client.ts +245 -104
- package/src/lsp/clients/biome-client.ts +101 -39
- package/src/lsp/clients/lsp-linter-client.ts +2 -10
- package/src/lsp/config.ts +15 -5
- package/src/lsp/defaults.json +6 -0
- package/src/lsp/edits.ts +143 -95
- package/src/lsp/format-options.ts +119 -0
- package/src/lsp/index.ts +233 -93
- package/src/lsp/render.ts +11 -35
- package/src/lsp/types.ts +13 -1
- package/src/lsp/utils.ts +31 -12
- package/src/main.ts +396 -216
- package/src/mcp/config-writer.ts +7 -3
- package/src/mcp/json-rpc.ts +35 -5
- package/src/mcp/manager.ts +31 -16
- package/src/mcp/oauth-discovery.ts +34 -4
- package/src/mcp/oauth-flow.ts +61 -8
- package/src/mcp/render.ts +7 -1
- package/src/mcp/startup-events.ts +21 -0
- package/src/mcp/tool-bridge.ts +2 -0
- package/src/mcp/transports/stdio.ts +224 -4
- package/src/mcp/types.ts +2 -0
- package/src/memories/index.ts +174 -1128
- package/src/memories/storage.ts +2 -41
- package/src/memory-backend/index.ts +14 -1
- package/src/memory-backend/local-backend.ts +18 -3
- package/src/memory-backend/off-backend.ts +9 -0
- package/src/memory-backend/resolve.ts +4 -6
- package/src/memory-backend/runtime.ts +66 -0
- package/src/memory-backend/types.ts +82 -2
- package/src/mnemopi/backend.ts +220 -28
- package/src/mnemopi/config.ts +138 -33
- package/src/mnemopi/state.ts +91 -11
- package/src/modes/acp/acp-agent.ts +149 -142
- package/src/modes/acp/acp-event-mapper.ts +5 -1
- package/src/modes/components/agent-dashboard.ts +17 -11
- package/src/modes/components/agent-hub.ts +1346 -0
- package/src/modes/components/assistant-message.ts +190 -80
- package/src/modes/components/bash-execution.ts +1 -1
- package/src/modes/components/btw-panel.ts +5 -1
- package/src/modes/components/chat-block.ts +111 -0
- package/src/modes/components/collab-prompt-message.ts +30 -0
- package/src/modes/components/compaction-summary-message.ts +168 -33
- package/src/modes/components/copy-selector.ts +2 -45
- package/src/modes/components/custom-editor.test.ts +96 -0
- package/src/modes/components/custom-editor.ts +405 -118
- package/src/modes/components/custom-message.ts +1 -3
- package/src/modes/components/diff.ts +13 -2
- package/src/modes/components/dynamic-border.ts +12 -3
- package/src/modes/components/execution-shared.ts +1 -2
- package/src/modes/components/extensions/extension-dashboard.ts +8 -5
- package/src/modes/components/extensions/extension-list.ts +1 -1
- package/src/modes/components/extensions/inspector-panel.ts +7 -3
- package/src/modes/components/extensions/state-manager.ts +36 -41
- package/src/modes/components/footer.ts +4 -2
- package/src/modes/components/history-search.ts +1 -1
- package/src/modes/components/hook-editor.ts +8 -0
- package/src/modes/components/hook-input.ts +8 -0
- package/src/modes/components/hook-message.ts +1 -3
- package/src/modes/components/hook-selector.ts +6 -7
- package/src/modes/components/index.ts +1 -0
- package/src/modes/components/late-diagnostics-message.ts +60 -0
- package/src/modes/components/login-dialog.ts +1 -1
- package/src/modes/components/logout-account-selector.ts +130 -0
- package/src/modes/components/mcp-add-wizard.ts +14 -1
- package/src/modes/components/model-selector.ts +177 -75
- package/src/modes/components/oauth-selector.ts +102 -16
- package/src/modes/components/overlay-box.ts +108 -0
- package/src/modes/components/plan-review-overlay.ts +845 -0
- package/src/modes/components/plan-toc.ts +138 -0
- package/src/modes/components/plugin-settings.ts +22 -5
- package/src/modes/components/read-tool-group.ts +442 -39
- package/src/modes/components/reset-usage-selector.ts +161 -0
- package/src/modes/components/segment-track.ts +44 -7
- package/src/modes/components/session-selector.ts +97 -37
- package/src/modes/components/settings-defs.ts +28 -6
- package/src/modes/components/settings-selector.ts +541 -93
- package/src/modes/components/skill-message.ts +0 -1
- package/src/modes/components/snapcompact-shape-preview-doc.md +11 -0
- package/src/modes/components/snapcompact-shape-preview.ts +193 -0
- package/src/modes/components/{status-line.ts → status-line/component.ts} +205 -168
- package/src/modes/components/status-line/index.ts +1 -0
- package/src/modes/components/status-line/presets.ts +3 -3
- package/src/modes/components/status-line/segments.ts +26 -7
- package/src/modes/components/status-line/types.ts +40 -9
- package/src/modes/components/tiny-title-download-progress.ts +1 -1
- package/src/modes/components/tips.txt +7 -3
- package/src/modes/components/todo-reminder.ts +0 -2
- package/src/modes/components/tool-execution.ts +236 -103
- package/src/modes/components/transcript-container.ts +724 -99
- package/src/modes/components/tree-selector.ts +19 -4
- package/src/modes/components/ttsr-notification.ts +72 -30
- package/src/modes/components/usage-row.ts +18 -0
- package/src/modes/components/user-message-selector.ts +1 -1
- package/src/modes/components/user-message.ts +28 -12
- package/src/modes/components/visual-truncate.ts +1 -1
- package/src/modes/components/welcome.ts +80 -22
- package/src/modes/controllers/command-controller-shared.ts +7 -6
- package/src/modes/controllers/command-controller.ts +210 -180
- package/src/modes/controllers/event-controller.ts +352 -142
- package/src/modes/controllers/extension-ui-controller.ts +167 -208
- package/src/modes/controllers/input-controller.ts +778 -162
- package/src/modes/controllers/mcp-command-controller.ts +232 -80
- package/src/modes/controllers/selector-controller.ts +284 -145
- package/src/modes/controllers/session-focus-controller.ts +112 -0
- package/src/modes/controllers/ssh-command-controller.ts +2 -2
- package/src/modes/controllers/streaming-reveal.ts +295 -0
- package/src/modes/controllers/tan-command-controller.ts +173 -0
- package/src/modes/controllers/tool-args-reveal.ts +174 -0
- package/src/modes/gradient-highlight.ts +21 -9
- package/src/modes/image-references.ts +33 -7
- package/src/modes/index.ts +8 -25
- package/src/modes/interactive-mode.ts +840 -186
- package/src/modes/magic-keywords.ts +28 -6
- package/src/modes/markdown-prose.ts +1 -1
- package/src/modes/oauth-manual-input.ts +30 -3
- package/src/modes/rpc/rpc-client.ts +186 -3
- package/src/modes/rpc/rpc-mode.ts +318 -24
- package/src/modes/rpc/rpc-subagents.ts +265 -0
- package/src/modes/rpc/rpc-types.ts +111 -2
- package/src/modes/runtime-init.ts +28 -3
- package/src/modes/session-observer-registry.ts +72 -3
- package/src/modes/setup-version.ts +11 -0
- package/src/modes/setup-wizard/index.ts +16 -4
- package/src/modes/setup-wizard/lazy.ts +16 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +25 -7
- package/src/modes/setup-wizard/scenes/providers.ts +45 -12
- package/src/modes/setup-wizard/scenes/sign-in.ts +14 -13
- package/src/modes/setup-wizard/scenes/splash.ts +1 -1
- package/src/modes/setup-wizard/scenes/telegram.ts +77 -22
- package/src/modes/setup-wizard/scenes/theme.ts +29 -2
- package/src/modes/setup-wizard/scenes/types.ts +11 -2
- package/src/modes/setup-wizard/scenes/web-search.ts +26 -9
- package/src/modes/setup-wizard/wizard-overlay.ts +40 -3
- package/src/modes/shared.ts +2 -0
- package/src/modes/theme/defaults/dark-poimandres.json +1 -1
- package/src/modes/theme/defaults/light-poimandres.json +1 -1
- package/src/modes/theme/shimmer.ts +20 -9
- package/src/modes/theme/theme-schema.json +1 -1
- package/src/modes/theme/theme.ts +342 -82
- package/src/modes/types.ts +60 -18
- package/src/modes/utils/context-usage.ts +88 -8
- package/src/modes/utils/copy-targets.ts +133 -27
- package/src/modes/utils/hotkeys-markdown.ts +3 -2
- package/src/modes/utils/ui-helpers.ts +191 -110
- package/src/modes/workflow.ts +10 -10
- package/src/plan-mode/approved-plan.ts +66 -43
- package/src/plan-mode/plan-protection.ts +4 -4
- package/src/priority.json +5 -1
- package/src/prompts/agents/designer.md +1 -1
- package/src/prompts/agents/explore.md +3 -3
- package/src/prompts/agents/librarian.md +2 -3
- package/src/prompts/agents/oracle.md +2 -2
- package/src/prompts/agents/plan.md +6 -6
- package/src/prompts/agents/reviewer.md +1 -1
- package/src/prompts/agents/task.md +6 -5
- package/src/prompts/bench.md +12 -0
- package/src/prompts/ci-green-request.md +5 -7
- package/src/prompts/goals/goal-budget-limit.md +2 -2
- package/src/prompts/goals/goal-continuation.md +4 -4
- package/src/prompts/goals/goal-mode-active.md +1 -1
- package/src/prompts/goals/guided-goal-interview.md +8 -0
- package/src/prompts/goals/guided-goal-system.md +12 -0
- package/src/prompts/memories/consolidation.md +2 -7
- package/src/prompts/memories/consolidation_system.md +4 -0
- package/src/prompts/memories/identity_review.md +2 -2
- package/src/prompts/memories/read-path.md +11 -10
- package/src/prompts/memories/stage_one_system.md +2 -2
- package/src/prompts/review-custom-request.md +1 -1
- package/src/prompts/system/agent-creation-architect.md +2 -2
- package/src/prompts/system/auto-continue.md +1 -1
- package/src/prompts/system/autolearn-guidance-learn.md +1 -0
- package/src/prompts/system/autolearn-guidance.md +7 -0
- package/src/prompts/system/autolearn-nudge.md +3 -0
- package/src/prompts/system/background-tan-dispatch.md +8 -0
- package/src/prompts/system/btw-user.md +2 -2
- package/src/prompts/system/commit-message-system.md +13 -1
- package/src/prompts/system/custom-system-prompt.md +1 -1
- package/src/prompts/system/eager-task.md +7 -0
- package/src/prompts/system/eager-todo.md +11 -6
- package/src/prompts/system/empty-stop-retry.md +4 -6
- package/src/prompts/system/irc-autoreply.md +6 -0
- package/src/prompts/system/irc-incoming.md +3 -4
- package/src/prompts/system/manual-continue.md +7 -0
- package/src/prompts/system/omfg-user.md +3 -4
- package/src/prompts/system/orchestrate-notice.md +10 -10
- package/src/prompts/system/personalities/default.md +26 -0
- package/src/prompts/system/personalities/friendly.md +17 -0
- package/src/prompts/system/personalities/pragmatic.md +15 -0
- package/src/prompts/system/plan-mode-active.md +70 -77
- package/src/prompts/system/plan-mode-approved.md +1 -1
- package/src/prompts/system/plan-mode-subagent.md +4 -5
- package/src/prompts/system/plan-mode-tool-decision-reminder.md +1 -1
- package/src/prompts/system/project-prompt.md +2 -2
- package/src/prompts/system/snapcompact-context-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-context-stub.md +1 -0
- package/src/prompts/system/snapcompact-system-frames-note.md +1 -0
- package/src/prompts/system/snapcompact-system-stub.md +1 -0
- package/src/prompts/system/snapcompact-toolresult-note.md +1 -0
- package/src/prompts/system/subagent-system-prompt.md +7 -8
- package/src/prompts/system/system-prompt.md +28 -57
- package/src/prompts/system/tiny-title-system.md +1 -1
- package/src/prompts/system/title-marker-instruction.md +1 -0
- package/src/prompts/system/title-system-marker.md +16 -0
- package/src/prompts/system/title-system.md +16 -3
- package/src/prompts/system/ttsr-tool-reminder.md +1 -1
- package/src/prompts/system/workflow-notice.md +4 -4
- package/src/prompts/tools/ast-edit.md +1 -1
- package/src/prompts/tools/ast-grep.md +2 -2
- package/src/prompts/tools/bash.md +16 -8
- package/src/prompts/tools/browser.md +33 -43
- package/src/prompts/tools/debug.md +1 -1
- package/src/prompts/tools/eval.md +31 -51
- package/src/prompts/tools/find.md +0 -1
- package/src/prompts/tools/github.md +8 -7
- package/src/prompts/tools/goal.md +1 -1
- package/src/prompts/tools/image-gen.md +1 -1
- package/src/prompts/tools/inspect-image-system.md +1 -1
- package/src/prompts/tools/irc.md +39 -31
- package/src/prompts/tools/job.md +2 -1
- package/src/prompts/tools/learn.md +7 -0
- package/src/prompts/tools/lsp-late-diagnostic.md +8 -0
- package/src/prompts/tools/lsp.md +2 -2
- package/src/prompts/tools/manage-skill.md +9 -0
- package/src/prompts/tools/memory-edit.md +1 -1
- package/src/prompts/tools/patch.md +2 -2
- package/src/prompts/tools/read.md +31 -39
- package/src/prompts/tools/recall.md +1 -1
- package/src/prompts/tools/reflect.md +1 -1
- package/src/prompts/tools/render-mermaid.md +2 -2
- package/src/prompts/tools/replace.md +4 -10
- package/src/prompts/tools/rewind.md +2 -2
- package/src/prompts/tools/search-tool-bm25.md +1 -9
- package/src/prompts/tools/search.md +0 -1
- package/src/prompts/tools/ssh.md +0 -4
- package/src/prompts/tools/task-summary.md +5 -16
- package/src/prompts/tools/task.md +47 -31
- package/src/prompts/tools/todo.md +6 -3
- package/src/registry/agent-lifecycle.ts +218 -0
- package/src/registry/agent-registry.ts +46 -5
- package/src/sdk.ts +692 -219
- package/src/secrets/index.ts +8 -1
- package/src/secrets/obfuscator.ts +40 -19
- package/src/session/agent-session.ts +1577 -806
- package/src/session/agent-storage.ts +18 -9
- package/src/session/auth-broker-config.ts +30 -1
- package/src/session/auth-storage.ts +6 -0
- package/src/session/codex-auto-reset.ts +202 -0
- package/src/session/history-storage.ts +3 -2
- package/src/session/indexed-session-storage.ts +7 -10
- package/src/session/messages.ts +59 -95
- package/src/session/session-context.ts +352 -0
- package/src/session/session-dump-format.ts +12 -3
- package/src/session/session-entries.ts +194 -0
- package/src/session/session-history-format.ts +246 -0
- package/src/session/session-listing.ts +588 -0
- package/src/session/session-loader.ts +106 -0
- package/src/session/session-manager.ts +1003 -2920
- package/src/session/session-migrations.ts +78 -0
- package/src/session/session-paths.ts +193 -0
- package/src/session/session-persistence.ts +131 -0
- package/src/session/session-storage.ts +91 -30
- package/src/session/snapcompact-inline.ts +542 -0
- package/src/session/snapcompact-savings-journal.ts +113 -0
- package/src/session/streaming-output.ts +248 -11
- package/src/session/tool-choice-queue.ts +23 -11
- package/src/session/yield-queue.ts +20 -2
- package/src/slash-commands/acp-builtins.ts +25 -1
- package/src/slash-commands/available-commands.ts +105 -0
- package/src/slash-commands/builtin-registry.ts +575 -49
- package/src/slash-commands/helpers/active-oauth-account.ts +44 -0
- package/src/slash-commands/helpers/context-report.ts +28 -1
- package/src/slash-commands/helpers/logout.ts +88 -0
- package/src/slash-commands/helpers/reset-usage.ts +66 -0
- package/src/slash-commands/helpers/stats-dashboard.ts +85 -0
- package/src/slash-commands/helpers/usage-report.ts +38 -3
- package/src/slash-commands/types.ts +5 -9
- package/src/ssh/connection-manager.ts +27 -0
- package/src/ssh/ssh-executor.ts +60 -4
- package/src/stt/asr-client.ts +520 -0
- package/src/stt/asr-protocol.ts +65 -0
- package/src/stt/asr-worker.ts +790 -0
- package/src/stt/downloader.ts +107 -47
- package/src/stt/endpointer.ts +259 -0
- package/src/stt/index.ts +5 -1
- package/src/stt/models.ts +150 -0
- package/src/stt/recorder.ts +254 -67
- package/src/stt/stt-controller.ts +201 -22
- package/src/stt/transcriber.ts +37 -68
- package/src/stt/wav.ts +173 -0
- package/src/system-prompt.ts +52 -10
- package/src/task/agents.ts +3 -4
- package/src/task/commands.ts +3 -2
- package/src/task/discovery.ts +17 -24
- package/src/task/executor.ts +1054 -529
- package/src/task/index.ts +862 -757
- package/src/task/output-manager.ts +0 -11
- package/src/task/parallel.ts +3 -3
- package/src/task/prometheus-command.ts +2 -2
- package/src/task/render.ts +529 -182
- package/src/task/repair-args.ts +21 -9
- package/src/task/types.ts +144 -66
- package/src/task/worktree.ts +64 -56
- package/src/telemetry-export.ts +27 -9
- package/src/thinking.ts +9 -7
- package/src/tiny/models.ts +2 -2
- package/src/tiny/text.ts +5 -1
- package/src/tiny/title-client.ts +72 -20
- package/src/tiny/title-protocol.ts +1 -1
- package/src/tiny/worker.ts +23 -99
- package/src/tool-discovery/tool-index.ts +2 -0
- package/src/tools/archive-reader.ts +94 -2
- package/src/tools/ask.ts +234 -177
- package/src/tools/ast-edit.ts +136 -80
- package/src/tools/ast-grep.ts +41 -45
- package/src/tools/auto-generated-guard.ts +20 -3
- package/src/tools/bash-interactive.ts +28 -8
- package/src/tools/bash.ts +198 -35
- package/src/tools/browser/attach.ts +26 -7
- package/src/tools/browser/cmux/cmux-tab.ts +1264 -0
- package/src/tools/browser/cmux/rpc.ts +156 -0
- package/src/tools/browser/cmux/socket-client.ts +309 -0
- package/src/tools/browser/launch.ts +11 -2
- package/src/tools/browser/readable.ts +19 -2
- package/src/tools/browser/registry.ts +52 -5
- package/src/tools/browser/render.ts +13 -5
- package/src/tools/browser/tab-protocol.ts +2 -0
- package/src/tools/browser/tab-supervisor.ts +256 -34
- package/src/tools/browser/tab-worker.ts +259 -91
- package/src/tools/browser.ts +44 -2
- package/src/tools/checkpoint.ts +1 -1
- package/src/tools/conflict-detect.ts +50 -4
- package/src/tools/debug.ts +27 -12
- package/src/tools/eval-render.ts +32 -35
- package/src/tools/eval.ts +26 -12
- package/src/tools/fetch.ts +450 -99
- package/src/tools/find.ts +182 -142
- package/src/tools/gh-cache-invalidation.ts +255 -0
- package/src/tools/gh-renderer.ts +104 -51
- package/src/tools/gh.ts +232 -37
- package/src/tools/github-cache.ts +97 -7
- package/src/tools/grouped-file-output.ts +159 -52
- package/src/tools/image-gen.ts +237 -132
- package/src/tools/index.ts +147 -26
- package/src/tools/inspect-image-renderer.ts +74 -45
- package/src/tools/inspect-image.ts +12 -6
- package/src/tools/irc.ts +626 -173
- package/src/tools/job.ts +106 -29
- package/src/tools/learn.ts +144 -0
- package/src/tools/manage-skill.ts +104 -0
- package/src/tools/memory-edit.ts +4 -4
- package/src/tools/memory-recall.ts +7 -9
- package/src/tools/memory-reflect.ts +5 -9
- package/src/tools/memory-render.ts +23 -6
- package/src/tools/memory-retain.ts +4 -4
- package/src/tools/path-utils.ts +102 -48
- package/src/tools/plan-mode-guard.ts +101 -40
- package/src/tools/read.ts +475 -120
- package/src/tools/render-mermaid.ts +1 -1
- package/src/tools/render-utils.ts +132 -76
- package/src/tools/renderers.ts +12 -1
- package/src/tools/report-tool-issue.ts +14 -6
- package/src/tools/resolve.ts +20 -3
- package/src/tools/review.ts +2 -2
- package/src/tools/search-tool-bm25.ts +37 -24
- package/src/tools/search.ts +233 -115
- package/src/tools/sqlite-reader.ts +26 -17
- package/src/tools/ssh.ts +20 -14
- package/src/tools/todo.ts +197 -191
- package/src/tools/tool-result.ts +8 -0
- package/src/tools/tool-timeouts.ts +1 -1
- package/src/tools/tts.ts +205 -74
- package/src/tools/write.ts +291 -155
- package/src/tools/yield.ts +10 -1
- package/src/tts/downloader.ts +64 -0
- package/src/tts/index.ts +8 -0
- package/src/tts/models.ts +137 -0
- package/src/tts/player.ts +137 -0
- package/src/tts/runtime.ts +21 -0
- package/src/tts/streaming-player.ts +266 -0
- package/src/tts/tts-client.ts +647 -0
- package/src/tts/tts-protocol.ts +60 -0
- package/src/tts/tts-worker.ts +505 -0
- package/src/tts/vocalizer.ts +162 -0
- package/src/tts/wav.ts +58 -0
- package/src/tui/code-cell.ts +2 -7
- package/src/tui/hyperlink.ts +40 -26
- package/src/tui/output-block.ts +60 -108
- package/src/tui/status-line.ts +5 -1
- package/src/utils/block-context.ts +312 -0
- package/src/utils/changelog.ts +27 -1
- package/src/utils/clipboard.ts +91 -22
- package/src/utils/commit-message-generator.ts +8 -3
- package/src/utils/enhanced-paste.ts +230 -0
- package/src/utils/file-mentions.ts +3 -1
- package/src/utils/git.ts +315 -15
- package/src/utils/image-loading.ts +65 -4
- package/src/utils/session-color.ts +83 -9
- package/src/utils/thinking-display.ts +37 -0
- package/src/utils/title-generator.ts +73 -10
- package/src/utils/tool-choice.ts +16 -0
- package/src/utils/tools-manager.ts +19 -1
- package/src/web/kagi.ts +28 -26
- package/src/web/parallel.ts +7 -3
- package/src/web/scrapers/arxiv.ts +1 -1
- package/src/web/scrapers/github.ts +351 -3
- package/src/web/scrapers/go-pkg.ts +1 -1
- package/src/web/scrapers/iacr.ts +1 -1
- package/src/web/scrapers/readthedocs.ts +1 -1
- package/src/web/scrapers/twitter.ts +2 -1
- package/src/web/scrapers/types.ts +87 -8
- package/src/web/scrapers/wikipedia.ts +1 -1
- package/src/web/scrapers/youtube.ts +9 -3
- package/src/web/search/index.ts +15 -2
- package/src/web/search/providers/anthropic.ts +62 -21
- package/src/web/search/providers/base.ts +2 -1
- package/src/web/search/providers/brave.ts +5 -2
- package/src/web/search/providers/codex.ts +87 -51
- package/src/web/search/providers/exa.ts +101 -10
- package/src/web/search/providers/gemini.ts +49 -24
- package/src/web/search/providers/jina.ts +15 -5
- package/src/web/search/providers/kagi.ts +9 -2
- package/src/web/search/providers/kimi.ts +45 -20
- package/src/web/search/providers/parallel.ts +39 -24
- package/src/web/search/providers/perplexity.ts +226 -63
- package/src/web/search/providers/searxng.ts +19 -3
- package/src/web/search/providers/synthetic.ts +16 -11
- package/src/web/search/providers/tavily.ts +12 -9
- package/src/web/search/providers/zai.ts +22 -9
- package/src/web/search/render.ts +59 -64
- package/src/web/search/types.ts +5 -1
- package/dist/types/discovery/context-files.d.ts +0 -17
- package/dist/types/exa/factory.d.ts +0 -13
- package/dist/types/exa/render.d.ts +0 -19
- package/dist/types/exa/researcher.d.ts +0 -9
- package/dist/types/exa/search.d.ts +0 -9
- package/dist/types/exa/websets.d.ts +0 -9
- package/dist/types/export/html/template.generated.d.ts +0 -1
- package/dist/types/modes/components/session-observer-overlay.d.ts +0 -11
- package/dist/types/modes/components/status-line.d.ts +0 -77
- package/dist/types/slash-commands/headless-plan.d.ts +0 -3
- package/dist/types/stt/setup.d.ts +0 -18
- package/scripts/generate-template.ts +0 -33
- package/src/discovery/context-files.ts +0 -49
- package/src/exa/factory.ts +0 -60
- package/src/exa/render.ts +0 -244
- package/src/exa/researcher.ts +0 -36
- package/src/exa/search.ts +0 -47
- package/src/exa/websets.ts +0 -248
- package/src/export/html/template.generated.ts +0 -2
- package/src/modes/components/session-observer-overlay.ts +0 -852
- package/src/slash-commands/headless-plan.ts +0 -142
- package/src/stt/setup.ts +0 -52
- package/src/stt/transcribe.py +0 -70
- /package/dist/types/extensibility/{legacy-pi-coding-agent-shim.d.ts → legacy-package-agent-shim.d.ts} +0 -0
- /package/src/extensibility/{legacy-pi-coding-agent-shim.ts → legacy-package-agent-shim.ts} +0 -0
package/src/task/render.ts
CHANGED
|
@@ -6,19 +6,20 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
import type { Component } from "@prometheus-ai/tui";
|
|
9
|
-
import { Container, Text } from "@prometheus-ai/tui";
|
|
9
|
+
import { Container, Markdown, Text } from "@prometheus-ai/tui";
|
|
10
10
|
import { formatNumber } from "@prometheus-ai/utils";
|
|
11
11
|
import { settings } from "../config/settings";
|
|
12
12
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
13
13
|
import { formatContextUsage } from "../modes/components/status-line/context-thresholds";
|
|
14
|
-
import type
|
|
14
|
+
import { getMarkdownTheme, type Theme } from "../modes/theme/theme";
|
|
15
15
|
import {
|
|
16
|
-
capPreviewLines,
|
|
17
16
|
formatBadge,
|
|
18
17
|
formatDuration,
|
|
18
|
+
formatExpandHint,
|
|
19
19
|
formatMoreItems,
|
|
20
20
|
formatStatusIcon,
|
|
21
21
|
replaceTabs,
|
|
22
|
+
type ToolUIStatus,
|
|
22
23
|
truncateToWidth,
|
|
23
24
|
} from "../tools/render-utils";
|
|
24
25
|
import {
|
|
@@ -29,10 +30,29 @@ import {
|
|
|
29
30
|
type ReportFindingDetails,
|
|
30
31
|
type SubmitReviewDetails,
|
|
31
32
|
} from "../tools/review";
|
|
32
|
-
import {
|
|
33
|
+
import { framedBlock, renderStatusLine } from "../tui";
|
|
34
|
+
import { repairDoubleEncodedJsonString } from "./repair-args";
|
|
33
35
|
import { subprocessToolRegistry } from "./subprocess-tool-registry";
|
|
34
36
|
import type { AgentProgress, SingleResult, TaskItem, TaskParams, TaskToolDetails } from "./types";
|
|
35
37
|
|
|
38
|
+
/** Render context threaded in from `ToolExecutionComponent.#buildRenderContext`. */
|
|
39
|
+
interface TaskRenderContext {
|
|
40
|
+
hasResult?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* The block left the transcript live region (detached spawn the transcript
|
|
43
|
+
* has moved past, or a sealed block): progress rows render static gray, so
|
|
44
|
+
* commit-eligible rows do not repaint after entering native scrollback.
|
|
45
|
+
*/
|
|
46
|
+
frozen?: boolean;
|
|
47
|
+
}
|
|
48
|
+
type TaskRenderOptions = RenderResultOptions & { renderContext?: TaskRenderContext };
|
|
49
|
+
|
|
50
|
+
const MAX_NESTED_TASK_RENDER_DEPTH = 8;
|
|
51
|
+
|
|
52
|
+
function renderNestedCycleLine(theme: Theme): string {
|
|
53
|
+
return theme.fg("dim", "… nested task progress already shown");
|
|
54
|
+
}
|
|
55
|
+
|
|
36
56
|
/**
|
|
37
57
|
* Get status icon for agent state.
|
|
38
58
|
* For running status, uses animated spinner if spinnerFrame is provided.
|
|
@@ -60,6 +80,7 @@ function appendAgentStats(
|
|
|
60
80
|
line: string,
|
|
61
81
|
opts: {
|
|
62
82
|
toolCount?: number;
|
|
83
|
+
requests?: number;
|
|
63
84
|
tokens: number;
|
|
64
85
|
contextTokens?: number;
|
|
65
86
|
contextWindow?: number;
|
|
@@ -72,6 +93,9 @@ function appendAgentStats(
|
|
|
72
93
|
if (opts.toolCount) {
|
|
73
94
|
line += `${theme.sep.dot}${theme.fg("dim", `${formatNumber(opts.toolCount)} ${theme.icon.extensionTool}`)}`;
|
|
74
95
|
}
|
|
96
|
+
if (opts.requests) {
|
|
97
|
+
line += `${theme.sep.dot}${theme.fg("dim", `${formatNumber(opts.requests)} req`)}`;
|
|
98
|
+
}
|
|
75
99
|
// Current per-turn context — match the status line's `<pct>%/<window>` gauge (e.g. `5.1%/1M`).
|
|
76
100
|
if (opts.contextTokens && opts.contextTokens > 0) {
|
|
77
101
|
const ctx =
|
|
@@ -148,7 +172,7 @@ function formatJsonScalar(value: unknown, _theme: Theme): string {
|
|
|
148
172
|
return "";
|
|
149
173
|
}
|
|
150
174
|
|
|
151
|
-
function formatTaskId(id: string): string {
|
|
175
|
+
export function formatTaskId(id: string): string {
|
|
152
176
|
// Ids are name-based (e.g. "Anna", "Anna-2"); a "." separates nesting levels
|
|
153
177
|
// (e.g. "Anna.Bob"). Render the hierarchy with a ">" breadcrumb.
|
|
154
178
|
const segments = id.split(".");
|
|
@@ -503,90 +527,159 @@ function formatOutputInline(data: unknown, theme: Theme, maxWidth = 80): string
|
|
|
503
527
|
}
|
|
504
528
|
|
|
505
529
|
/**
|
|
506
|
-
* Render the
|
|
507
|
-
*
|
|
508
|
-
* trailing entries may be partially parsed — every field access is defensive.
|
|
530
|
+
* Render the call preview lines for the single spawned agent. The
|
|
531
|
+
* args stream in token by token, so every field access is defensive.
|
|
509
532
|
*/
|
|
510
|
-
function
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
theme: Theme,
|
|
515
|
-
): string[] {
|
|
516
|
-
const items = tasks ?? [];
|
|
517
|
-
if (items.length === 0) return [];
|
|
533
|
+
function renderTaskCallLines(args: Partial<TaskParams> | undefined, theme: Theme): string[] {
|
|
534
|
+
if (!args) return [];
|
|
535
|
+
const bullet = theme.fg("dim", "•");
|
|
536
|
+
const lines: string[] = [];
|
|
518
537
|
|
|
519
|
-
const
|
|
520
|
-
const
|
|
521
|
-
const
|
|
522
|
-
|
|
538
|
+
const rawId = typeof args.id === "string" ? args.id.trim() : "";
|
|
539
|
+
const idLabel = rawId ? formatTaskId(rawId) : "";
|
|
540
|
+
const desc = typeof args.description === "string" ? args.description.trim() : "";
|
|
541
|
+
if (idLabel || desc) {
|
|
542
|
+
let line = `${bullet} ${theme.fg("accent", theme.bold(idLabel || "agent"))}`;
|
|
543
|
+
if (desc) {
|
|
544
|
+
line += `: ${theme.fg("muted", truncateToWidth(replaceTabs(desc), 64))}`;
|
|
545
|
+
}
|
|
546
|
+
lines.push(line);
|
|
547
|
+
}
|
|
548
|
+
lines.push(...renderTaskItemLines(args.tasks, theme));
|
|
549
|
+
return lines;
|
|
550
|
+
}
|
|
523
551
|
|
|
552
|
+
/**
|
|
553
|
+
* Agent rows shown per collapsed task list; the rest fold into a single
|
|
554
|
+
* `… N more agents` summary line (expand uncaps).
|
|
555
|
+
*/
|
|
556
|
+
const COLLAPSED_AGENT_LIMIT = 4;
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Render the per-item list (`id` + ui `description`) for a batch call's
|
|
560
|
+
* streaming preview. The args stream in token by token, so the array grows
|
|
561
|
+
* over time and trailing entries may be partially parsed — every field access
|
|
562
|
+
* is defensive.
|
|
563
|
+
*/
|
|
564
|
+
function renderTaskItemLines(tasks: TaskItem[] | undefined, theme: Theme): string[] {
|
|
565
|
+
if (!Array.isArray(tasks) || tasks.length === 0) return [];
|
|
566
|
+
|
|
567
|
+
const bullet = theme.fg("dim", "•");
|
|
568
|
+
const cap = Math.min(tasks.length, COLLAPSED_AGENT_LIMIT);
|
|
524
569
|
const lines: string[] = [];
|
|
525
570
|
for (let i = 0; i < cap; i++) {
|
|
526
|
-
const task =
|
|
527
|
-
const
|
|
528
|
-
const connector = isLastLine ? last : branch;
|
|
529
|
-
const rawId = task?.id?.trim();
|
|
571
|
+
const task = tasks[i] as Partial<TaskItem> | undefined;
|
|
572
|
+
const rawId = typeof task?.id === "string" ? task.id.trim() : "";
|
|
530
573
|
const idLabel = rawId ? formatTaskId(rawId) : `#${i + 1}`;
|
|
531
|
-
let line = `${
|
|
532
|
-
const desc = task?.description
|
|
574
|
+
let line = `${bullet} ${theme.fg("accent", theme.bold(idLabel))}`;
|
|
575
|
+
const desc = typeof task?.description === "string" ? task.description.trim() : "";
|
|
533
576
|
if (desc) {
|
|
534
577
|
line += `: ${theme.fg("muted", truncateToWidth(replaceTabs(desc), 64))}`;
|
|
535
578
|
}
|
|
579
|
+
if (task?.isolated === true) {
|
|
580
|
+
line += theme.fg("dim", " [isolated]");
|
|
581
|
+
}
|
|
536
582
|
lines.push(line);
|
|
537
583
|
}
|
|
538
|
-
if (
|
|
539
|
-
lines.push(`${
|
|
584
|
+
if (cap < tasks.length) {
|
|
585
|
+
lines.push(`${bullet} ${theme.fg("dim", formatMoreItems(tasks.length - cap, "agent"))}`);
|
|
540
586
|
}
|
|
541
587
|
return lines;
|
|
542
588
|
}
|
|
543
589
|
|
|
590
|
+
/** One renderable frame section: optional label, body rows, leading divider. */
|
|
591
|
+
type TaskRenderSection = { label?: string; lines: readonly string[]; separator?: boolean };
|
|
592
|
+
type AssignmentSectionRenderer = (width: number) => TaskRenderSection;
|
|
593
|
+
|
|
594
|
+
// Default output-block layout is: left border + one-cell content inset + right
|
|
595
|
+
// border. Render markdown at that inner width so the output block does not need
|
|
596
|
+
// to rewrap already-rendered assignment lines.
|
|
597
|
+
const ASSIGNMENT_FRAME_INSET = 3;
|
|
598
|
+
|
|
544
599
|
/**
|
|
545
|
-
*
|
|
600
|
+
* Build the assignment section (the markdown brief handed to the subagent).
|
|
601
|
+
* Rendered in both the streaming call preview and the result frame so the
|
|
602
|
+
* brief stays visible for the whole task lifecycle — not just until the first
|
|
603
|
+
* progress snapshot replaces the call view.
|
|
546
604
|
*/
|
|
547
|
-
|
|
548
|
-
args: TaskParams,
|
|
549
|
-
options: RenderResultOptions & { renderContext?: { hasResult?: boolean } },
|
|
605
|
+
function createAssignmentSectionRenderer(
|
|
606
|
+
args: Partial<TaskParams> | undefined,
|
|
550
607
|
theme: Theme,
|
|
551
|
-
):
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
const
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
const vertical = theme.fg("dim", theme.tree.vertical);
|
|
560
|
-
const showIsolated = "isolated" in args && args.isolated === true;
|
|
561
|
-
const taskCount = args.tasks?.length ?? 0;
|
|
608
|
+
): AssignmentSectionRenderer | undefined {
|
|
609
|
+
// `renderResult` receives the raw tool args (unlike `renderCall`, which is
|
|
610
|
+
// fed through `repairTaskParams`), so undo any per-field double-encoding
|
|
611
|
+
// here too. The repair is idempotent on already-clean text.
|
|
612
|
+
const assignment = repairDoubleEncodedJsonString(typeof args?.assignment === "string" ? args.assignment : "").trim();
|
|
613
|
+
if (!assignment) return undefined;
|
|
614
|
+
return createMarkdownSectionRenderer(assignment, theme);
|
|
615
|
+
}
|
|
562
616
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
617
|
+
/**
|
|
618
|
+
* Build the shared-context section (the `# Goal / # Constraints` background a
|
|
619
|
+
* batch call hands every subagent). Rendered like the assignment brief so the
|
|
620
|
+
* shared background stays visible for the whole task lifecycle.
|
|
621
|
+
*/
|
|
622
|
+
function createContextSectionRenderer(
|
|
623
|
+
args: Partial<TaskParams> | undefined,
|
|
624
|
+
theme: Theme,
|
|
625
|
+
): AssignmentSectionRenderer | undefined {
|
|
626
|
+
const context = repairDoubleEncodedJsonString(typeof args?.context === "string" ? args.context : "").trim();
|
|
627
|
+
if (!context) return undefined;
|
|
628
|
+
return createMarkdownSectionRenderer(context, theme);
|
|
629
|
+
}
|
|
571
630
|
|
|
572
|
-
|
|
573
|
-
const
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
// the call args stream in. Once a result snapshot exists, `renderResult`
|
|
579
|
-
// draws the same agents as progress/result lines (id + description), so
|
|
580
|
-
// emitting the preview here would render every task twice.
|
|
581
|
-
if (!options.renderContext?.hasResult) {
|
|
582
|
-
lines.push(...renderTaskItemLines(args.tasks, tasksContPrefix, options.expanded, theme));
|
|
583
|
-
}
|
|
631
|
+
function createMarkdownSectionRenderer(text: string, theme: Theme): AssignmentSectionRenderer {
|
|
632
|
+
const markdown = new Markdown(text, 0, 0, getMarkdownTheme(), {
|
|
633
|
+
color: line => theme.fg("muted", line),
|
|
634
|
+
});
|
|
635
|
+
return width => ({ lines: markdown.render(Math.max(1, width - ASSIGNMENT_FRAME_INSET)) });
|
|
636
|
+
}
|
|
584
637
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
638
|
+
/**
|
|
639
|
+
* Render the tool call arguments.
|
|
640
|
+
*/
|
|
641
|
+
export function renderCall(args: TaskParams, options: TaskRenderOptions, theme: Theme): Component {
|
|
642
|
+
const showIsolated = "isolated" in args && args.isolated === true;
|
|
643
|
+
// Dispatch glyph from the first frame: spawning is non-blocking, so a
|
|
644
|
+
// pending/hourglass icon would misread the call as something the turn
|
|
645
|
+
// waits on.
|
|
646
|
+
const header = renderStatusLine(
|
|
647
|
+
{ iconOverride: theme.styledSymbol("tool.task", "accent"), title: "Task", description: args.agent },
|
|
648
|
+
theme,
|
|
649
|
+
);
|
|
650
|
+
const assignmentSection = createAssignmentSectionRenderer(args, theme);
|
|
651
|
+
const contextSection = createContextSectionRenderer(args, theme);
|
|
652
|
+
return framedBlock(theme, width => {
|
|
653
|
+
const sections: Array<{ label?: string; lines: readonly string[]; separator?: boolean }> = [];
|
|
654
|
+
|
|
655
|
+
// The call preview only exists to surface the dispatched agent while the
|
|
656
|
+
// args stream in. Once a result snapshot exists, `renderResult` draws the
|
|
657
|
+
// same agent (and the assignment brief) itself, so showing it here would
|
|
658
|
+
// repeat what the result frame already shows.
|
|
659
|
+
if (!options.renderContext?.hasResult) {
|
|
660
|
+
// Mirror renderResult's layout — context, assignment, then the
|
|
661
|
+
// per-agent list — so the agent rows do not jump from above the
|
|
662
|
+
// brief to below it when the first progress snapshot replaces the
|
|
663
|
+
// call view. This also matches the schema's field order (`context`
|
|
664
|
+
// streams before `tasks`), so the streaming preview grows
|
|
665
|
+
// append-only instead of inserting agent rows above the
|
|
666
|
+
// already-rendered markdown and pushing it down on every item.
|
|
667
|
+
if (contextSection) sections.push(contextSection(width));
|
|
668
|
+
if (assignmentSection) sections.push(assignmentSection(width));
|
|
669
|
+
const callLines = renderTaskCallLines(args, theme);
|
|
670
|
+
// Guarded: an empty trailing section would still draw its divider.
|
|
671
|
+
if (callLines.length > 0) sections.push({ separator: true, lines: callLines });
|
|
672
|
+
}
|
|
588
673
|
|
|
589
|
-
|
|
674
|
+
return {
|
|
675
|
+
header,
|
|
676
|
+
headerMeta: showIsolated ? "isolated" : undefined,
|
|
677
|
+
sections,
|
|
678
|
+
state: "pending",
|
|
679
|
+
borderColor: "borderMuted",
|
|
680
|
+
width,
|
|
681
|
+
};
|
|
682
|
+
});
|
|
590
683
|
}
|
|
591
684
|
|
|
592
685
|
/**
|
|
@@ -594,14 +687,16 @@ export function renderCall(
|
|
|
594
687
|
*/
|
|
595
688
|
function renderAgentProgress(
|
|
596
689
|
progress: AgentProgress,
|
|
597
|
-
|
|
690
|
+
prefix: string,
|
|
691
|
+
continuePrefix: string,
|
|
598
692
|
expanded: boolean,
|
|
599
693
|
theme: Theme,
|
|
600
694
|
spinnerFrame?: number,
|
|
695
|
+
frozen = false,
|
|
696
|
+
seenNestedTasks?: WeakSet<object>,
|
|
697
|
+
nestedDepth = 0,
|
|
601
698
|
): string[] {
|
|
602
699
|
const lines: string[] = [];
|
|
603
|
-
const prefix = isLast ? theme.fg("dim", theme.tree.last) : theme.fg("dim", theme.tree.branch);
|
|
604
|
-
const continuePrefix = isLast ? " " : `${theme.fg("dim", theme.tree.vertical)} `;
|
|
605
700
|
|
|
606
701
|
const icon = getStatusIcon(progress.status, theme, spinnerFrame);
|
|
607
702
|
const iconColor =
|
|
@@ -615,11 +710,31 @@ function renderAgentProgress(
|
|
|
615
710
|
const description = progress.description?.trim();
|
|
616
711
|
const displayId = formatTaskId(progress.id);
|
|
617
712
|
const titlePart = description ? `${theme.bold(displayId)}: ${description}` : displayId;
|
|
618
|
-
|
|
713
|
+
const indent = prefix ? `${prefix} ` : "";
|
|
714
|
+
let statusLine: string;
|
|
715
|
+
if (progress.status === "running" || progress.status === "pending") {
|
|
716
|
+
// Live (or queued) agents use the same dot finished rows keep: detached
|
|
717
|
+
// async spawns can stay "pending" while real work is running, so a
|
|
718
|
+
// pending/hourglass or spinner glyph reads wrong in the transcript. Keep
|
|
719
|
+
// the row static; the Task tool header already carries the dispatch icon.
|
|
720
|
+
const dot = theme.styledSymbol("status.done", frozen ? "dim" : "accent");
|
|
721
|
+
const nameColor = frozen ? "dim" : "accent";
|
|
722
|
+
const name = theme.fg(nameColor, description ? theme.bold(displayId) : displayId);
|
|
723
|
+
statusLine = `${indent}${dot} ${name}`;
|
|
724
|
+
if (description) {
|
|
725
|
+
statusLine += `${theme.fg(nameColor, ":")} ${theme.fg(nameColor, description)}`;
|
|
726
|
+
}
|
|
727
|
+
} else if (progress.status === "completed") {
|
|
728
|
+
// Finished rows keep the dot but settle from accent to the plain
|
|
729
|
+
// foreground: completion reads as a color change, not a new glyph.
|
|
730
|
+
statusLine = `${indent}${theme.styledSymbol("status.done", "text")} ${theme.fg("text", titlePart)}`;
|
|
731
|
+
} else {
|
|
732
|
+
statusLine = `${indent}${theme.fg(iconColor, icon)} ${theme.fg("accent", titlePart)}`;
|
|
733
|
+
}
|
|
619
734
|
|
|
620
735
|
// Show retry-blocked badge so the parent immediately sees that a child
|
|
621
736
|
// is sleeping on a provider 429, not silently progressing. Wins over the
|
|
622
|
-
// generic running
|
|
737
|
+
// generic running marker because "we're waiting on a quota window" is
|
|
623
738
|
// the operationally meaningful state.
|
|
624
739
|
if (progress.retryState && progress.status === "running") {
|
|
625
740
|
statusLine += ` ${formatBadge("retrying", "warning", theme)}`;
|
|
@@ -752,7 +867,15 @@ function renderAgentProgress(
|
|
|
752
867
|
const inflight = progress.inflightTaskDetails;
|
|
753
868
|
if (completedTaskCalls.length > 0 || inflight) {
|
|
754
869
|
const snapshots = inflight ? [...completedTaskCalls, inflight] : completedTaskCalls;
|
|
755
|
-
const nestedLines = renderNestedTaskTree(
|
|
870
|
+
const nestedLines = renderNestedTaskTree(
|
|
871
|
+
snapshots,
|
|
872
|
+
expanded,
|
|
873
|
+
theme,
|
|
874
|
+
spinnerFrame,
|
|
875
|
+
frozen,
|
|
876
|
+
seenNestedTasks,
|
|
877
|
+
nestedDepth,
|
|
878
|
+
);
|
|
756
879
|
for (const line of nestedLines) {
|
|
757
880
|
lines.push(`${continuePrefix}${line}`);
|
|
758
881
|
}
|
|
@@ -781,12 +904,15 @@ function renderReviewResult(
|
|
|
781
904
|
|
|
782
905
|
// Verdict line
|
|
783
906
|
const verdictColor = summary.overall_correctness === "correct" ? "success" : "error";
|
|
784
|
-
const
|
|
907
|
+
const isCorrect = summary.overall_correctness === "correct";
|
|
908
|
+
const verdictIcon = isCorrect
|
|
909
|
+
? theme.styledSymbol("status.done", "accent")
|
|
910
|
+
: theme.fg(verdictColor, theme.status.error);
|
|
785
911
|
lines.push(
|
|
786
|
-
`${continuePrefix} Patch is ${theme.fg(verdictColor, summary.overall_correctness)} ${theme.fg(
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
)}
|
|
912
|
+
`${continuePrefix} Patch is ${theme.fg(verdictColor, summary.overall_correctness)} ${verdictIcon} ${theme.fg(
|
|
913
|
+
"dim",
|
|
914
|
+
`(${(summary.confidence * 100).toFixed(0)}% confidence)`,
|
|
915
|
+
)}`,
|
|
790
916
|
);
|
|
791
917
|
|
|
792
918
|
// Explanation preview (first ~80 chars when collapsed, full when expanded)
|
|
@@ -868,10 +994,16 @@ function renderFindings(
|
|
|
868
994
|
/**
|
|
869
995
|
* Render final result for a single agent.
|
|
870
996
|
*/
|
|
871
|
-
function renderAgentResult(
|
|
997
|
+
function renderAgentResult(
|
|
998
|
+
result: SingleResult,
|
|
999
|
+
prefix: string,
|
|
1000
|
+
continuePrefix: string,
|
|
1001
|
+
expanded: boolean,
|
|
1002
|
+
theme: Theme,
|
|
1003
|
+
seenNestedTasks?: WeakSet<object>,
|
|
1004
|
+
nestedDepth = 0,
|
|
1005
|
+
): string[] {
|
|
872
1006
|
const lines: string[] = [];
|
|
873
|
-
const prefix = isLast ? theme.fg("dim", theme.tree.last) : theme.fg("dim", theme.tree.branch);
|
|
874
|
-
const continuePrefix = isLast ? " " : `${theme.fg("dim", theme.tree.vertical)} `;
|
|
875
1007
|
|
|
876
1008
|
const { warning: missingCompleteWarning, rest: outputWithoutWarning } = extractMissingYieldWarning(result.output);
|
|
877
1009
|
const aborted = result.aborted ?? false;
|
|
@@ -883,7 +1015,7 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
|
|
|
883
1015
|
: needsWarning
|
|
884
1016
|
? theme.status.warning
|
|
885
1017
|
: success
|
|
886
|
-
? theme.status.
|
|
1018
|
+
? theme.styledSymbol("status.done", "text")
|
|
887
1019
|
: theme.status.error;
|
|
888
1020
|
const iconColor = needsWarning ? "warning" : success ? "success" : mergeFailed ? "warning" : "error";
|
|
889
1021
|
const statusText = aborted
|
|
@@ -900,16 +1032,16 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
|
|
|
900
1032
|
const description = result.description?.trim();
|
|
901
1033
|
const displayId = formatTaskId(result.id);
|
|
902
1034
|
const titlePart = description ? `${theme.bold(displayId)}: ${description}` : displayId;
|
|
903
|
-
let statusLine = `${prefix} ${theme.fg(iconColor, icon)} ${theme.fg(
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
)}`;
|
|
1035
|
+
let statusLine = `${prefix ? `${prefix} ` : ""}${theme.fg(iconColor, icon)} ${theme.fg(
|
|
1036
|
+
success && !needsWarning ? "text" : "accent",
|
|
1037
|
+
titlePart,
|
|
1038
|
+
)} ${formatBadge(statusText, iconColor, theme)}`;
|
|
908
1039
|
const showBadge = settings.get("task.showResolvedModelBadge");
|
|
909
1040
|
statusLine = appendAgentStats(
|
|
910
1041
|
statusLine,
|
|
911
1042
|
{
|
|
912
1043
|
tokens: result.tokens,
|
|
1044
|
+
requests: result.requests,
|
|
913
1045
|
contextTokens: result.contextTokens,
|
|
914
1046
|
contextWindow: result.contextWindow,
|
|
915
1047
|
cost: result.usage?.cost.total ?? 0,
|
|
@@ -974,11 +1106,24 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
|
|
|
974
1106
|
// Skip review tools - handled above
|
|
975
1107
|
if (toolName === "yield" || toolName === "report_finding") continue;
|
|
976
1108
|
|
|
1109
|
+
const isTaskTool = toolName === "task";
|
|
1110
|
+
if (isTaskTool && (dataArray as unknown[]).length > 0) {
|
|
1111
|
+
for (const line of renderNestedTaskResults(
|
|
1112
|
+
dataArray as TaskToolDetails[],
|
|
1113
|
+
expanded,
|
|
1114
|
+
theme,
|
|
1115
|
+
seenNestedTasks,
|
|
1116
|
+
nestedDepth,
|
|
1117
|
+
)) {
|
|
1118
|
+
deferredToolLines.push(`${continuePrefix}${line}`);
|
|
1119
|
+
}
|
|
1120
|
+
continue;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
977
1123
|
const handler = subprocessToolRegistry.getHandler(toolName);
|
|
978
1124
|
if (handler?.renderFinal && (dataArray as unknown[]).length > 0) {
|
|
979
|
-
const isTaskTool = toolName === "task";
|
|
980
1125
|
const component = handler.renderFinal(dataArray as unknown[], theme, expanded);
|
|
981
|
-
const target =
|
|
1126
|
+
const target = lines;
|
|
982
1127
|
if (!isTaskTool) {
|
|
983
1128
|
hasCustomRendering = true;
|
|
984
1129
|
target.push(`${continuePrefix}${theme.fg("dim", `Tool: ${toolName}`)}`);
|
|
@@ -1037,108 +1182,251 @@ function renderAgentResult(result: SingleResult, isLast: boolean, expanded: bool
|
|
|
1037
1182
|
return lines;
|
|
1038
1183
|
}
|
|
1039
1184
|
|
|
1185
|
+
/**
|
|
1186
|
+
* Order live progress entries so finished agents render first — sorted by
|
|
1187
|
+
* runtime ascending, matching {@link orderResultsForDisplay} — while
|
|
1188
|
+
* unfinished (pending/running) ones stay pinned at the bottom in dispatch
|
|
1189
|
+
* order. Because a finished agent's runtime is fixed, finalization renders
|
|
1190
|
+
* the same order and rows never reshuffle.
|
|
1191
|
+
*/
|
|
1192
|
+
function orderProgressForDisplay(progress: readonly AgentProgress[]): AgentProgress[] {
|
|
1193
|
+
const finished: AgentProgress[] = [];
|
|
1194
|
+
const unfinished: AgentProgress[] = [];
|
|
1195
|
+
for (const p of progress) {
|
|
1196
|
+
(p.status === "pending" || p.status === "running" ? unfinished : finished).push(p);
|
|
1197
|
+
}
|
|
1198
|
+
finished.sort((a, b) => a.durationMs - b.durationMs || a.index - b.index);
|
|
1199
|
+
return finished.concat(unfinished);
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
/**
|
|
1203
|
+
* Order finalized results by runtime ascending (tie-break: dispatch index) so
|
|
1204
|
+
* the finalized list matches the live-progress order produced by
|
|
1205
|
+
* {@link orderProgressForDisplay}.
|
|
1206
|
+
*/
|
|
1207
|
+
function orderResultsForDisplay(results: readonly SingleResult[]): SingleResult[] {
|
|
1208
|
+
return [...results].sort((a, b) => a.durationMs - b.durationMs || a.index - b.index);
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
/**
|
|
1212
|
+
* Summary line for progress rows folded away by the collapsed cap: per-status
|
|
1213
|
+
* counts plus the expand hint, e.g. `… 21 more agents (18 pending · 3 done)`.
|
|
1214
|
+
*/
|
|
1215
|
+
function formatHiddenProgressLine(hidden: readonly AgentProgress[], theme: Theme): string {
|
|
1216
|
+
const counts: Record<AgentProgress["status"], number> = {
|
|
1217
|
+
pending: 0,
|
|
1218
|
+
running: 0,
|
|
1219
|
+
completed: 0,
|
|
1220
|
+
failed: 0,
|
|
1221
|
+
aborted: 0,
|
|
1222
|
+
};
|
|
1223
|
+
for (const p of hidden) counts[p.status]++;
|
|
1224
|
+
const parts: string[] = [];
|
|
1225
|
+
if (counts.completed > 0) parts.push(theme.fg("dim", `${counts.completed} done`));
|
|
1226
|
+
if (counts.running > 0) parts.push(theme.fg("dim", `${counts.running} running`));
|
|
1227
|
+
if (counts.pending > 0) parts.push(theme.fg("dim", `${counts.pending} pending`));
|
|
1228
|
+
if (counts.failed > 0) parts.push(theme.fg("error", `${counts.failed} failed`));
|
|
1229
|
+
if (counts.aborted > 0) parts.push(theme.fg("error", `${counts.aborted} aborted`));
|
|
1230
|
+
const breakdown =
|
|
1231
|
+
parts.length > 0
|
|
1232
|
+
? `${theme.fg("dim", " (")}${parts.join(theme.fg("dim", theme.sep.dot))}${theme.fg("dim", ")")}`
|
|
1233
|
+
: "";
|
|
1234
|
+
const hint = formatExpandHint(theme, false, true);
|
|
1235
|
+
return `${theme.fg("dim", formatMoreItems(hidden.length, "agent"))}${breakdown}${hint ? ` ${hint}` : ""}`;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
/**
|
|
1239
|
+
* Pick the agent rows that stay visible when a finalized batch is collapsed:
|
|
1240
|
+
* problem rows (aborted/failed/merge-failed) claim slots first so they are
|
|
1241
|
+
* never folded away, then fastest finishers fill the remainder. The pick is
|
|
1242
|
+
* filtered out of the display order, so visible rows keep the expanded layout.
|
|
1243
|
+
*/
|
|
1244
|
+
function selectCollapsedResults(ordered: readonly SingleResult[]): readonly SingleResult[] {
|
|
1245
|
+
if (ordered.length <= COLLAPSED_AGENT_LIMIT) return ordered;
|
|
1246
|
+
const picked = new Set<SingleResult>();
|
|
1247
|
+
for (const result of ordered) {
|
|
1248
|
+
if (picked.size >= COLLAPSED_AGENT_LIMIT) break;
|
|
1249
|
+
if (result.aborted || result.exitCode !== 0 || result.error) picked.add(result);
|
|
1250
|
+
}
|
|
1251
|
+
for (const result of ordered) {
|
|
1252
|
+
if (picked.size >= COLLAPSED_AGENT_LIMIT) break;
|
|
1253
|
+
picked.add(result);
|
|
1254
|
+
}
|
|
1255
|
+
return ordered.filter(result => picked.has(result));
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1040
1258
|
/**
|
|
1041
1259
|
* Render the tool result.
|
|
1042
1260
|
*/
|
|
1043
1261
|
export function renderResult(
|
|
1044
|
-
result: { content: Array<{ type: string; text?: string }>; details?: TaskToolDetails },
|
|
1045
|
-
options:
|
|
1262
|
+
result: { content: Array<{ type: string; text?: string }>; details?: TaskToolDetails; isError?: boolean },
|
|
1263
|
+
options: TaskRenderOptions,
|
|
1046
1264
|
theme: Theme,
|
|
1265
|
+
args?: TaskParams,
|
|
1047
1266
|
): Component {
|
|
1048
1267
|
const fallbackText = result.content.find(c => c.type === "text")?.text ?? "";
|
|
1049
1268
|
const details = result.details;
|
|
1269
|
+
const agentLabel = args?.agent?.trim() || undefined;
|
|
1270
|
+
const assignmentSection = createAssignmentSectionRenderer(args, theme);
|
|
1271
|
+
const contextSection = createContextSectionRenderer(args, theme);
|
|
1050
1272
|
|
|
1051
1273
|
if (!details) {
|
|
1052
1274
|
const text = result.content.find(c => c.type === "text")?.text || "";
|
|
1053
|
-
|
|
1275
|
+
const errored = result.isError === true;
|
|
1276
|
+
const header = errored
|
|
1277
|
+
? renderStatusLine({ icon: "error", title: "Task", description: agentLabel }, theme)
|
|
1278
|
+
: renderStatusLine(
|
|
1279
|
+
{
|
|
1280
|
+
iconOverride: theme.styledSymbol("status.done", "accent"),
|
|
1281
|
+
title: "Task",
|
|
1282
|
+
description: agentLabel,
|
|
1283
|
+
},
|
|
1284
|
+
theme,
|
|
1285
|
+
);
|
|
1286
|
+
return framedBlock(theme, width => ({
|
|
1287
|
+
header,
|
|
1288
|
+
sections: [
|
|
1289
|
+
...(contextSection ? [contextSection(width)] : []),
|
|
1290
|
+
...(assignmentSection ? [assignmentSection(width)] : []),
|
|
1291
|
+
...(text ? [{ separator: true, lines: [theme.fg("dim", truncateToWidth(text, width))] }] : []),
|
|
1292
|
+
],
|
|
1293
|
+
state: errored ? "error" : "success",
|
|
1294
|
+
borderColor: errored ? "error" : "borderMuted",
|
|
1295
|
+
width,
|
|
1296
|
+
}));
|
|
1054
1297
|
}
|
|
1055
1298
|
|
|
1056
|
-
|
|
1299
|
+
const hasResults = Boolean(details.results && details.results.length > 0);
|
|
1300
|
+
const aborted = hasResults && details.results.some(r => r.aborted);
|
|
1301
|
+
const failed = hasResults && details.results.some(r => !r.aborted && r.exitCode !== 0);
|
|
1302
|
+
const mergeFailed = hasResults && details.results.some(r => !r.aborted && r.exitCode === 0 && Boolean(r.error));
|
|
1303
|
+
const isError = aborted || failed;
|
|
1304
|
+
const agentCount = hasResults ? details.results.length : (details.progress?.length ?? 0);
|
|
1305
|
+
const icon: ToolUIStatus = options.isPartial ? "running" : isError ? "error" : mergeFailed ? "warning" : "success";
|
|
1306
|
+
// Surface the dispatched agent type (e.g. `Reviewer`) alongside the count
|
|
1307
|
+
// so the header reads `Task 1 agent: Reviewer`.
|
|
1308
|
+
const countLabel = agentCount > 0 ? `${agentCount} ${agentCount === 1 ? "agent" : "agents"}` : undefined;
|
|
1309
|
+
const metaLabel = countLabel ? (agentLabel ? `${countLabel}: ${agentLabel}` : countLabel) : agentLabel;
|
|
1310
|
+
const header = renderStatusLine(
|
|
1311
|
+
{
|
|
1312
|
+
icon: icon === "success" || icon === "running" ? undefined : icon,
|
|
1313
|
+
// While agents are in flight the header shows the dispatch glyph, not a
|
|
1314
|
+
// spinner: async spawns return immediately, so "running" means
|
|
1315
|
+
// "delegated to peers", not "this call is blocking the turn".
|
|
1316
|
+
iconOverride:
|
|
1317
|
+
icon === "running"
|
|
1318
|
+
? theme.styledSymbol("tool.task", "accent")
|
|
1319
|
+
: icon === "success"
|
|
1320
|
+
? theme.styledSymbol("status.done", "accent")
|
|
1321
|
+
: undefined,
|
|
1322
|
+
title: "Task",
|
|
1323
|
+
meta: metaLabel ? [metaLabel] : undefined,
|
|
1324
|
+
},
|
|
1325
|
+
theme,
|
|
1326
|
+
);
|
|
1057
1327
|
|
|
1058
|
-
return {
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
const
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
details.progress.forEach((progress, i) => {
|
|
1075
|
-
const isLast = i === details.progress!.length - 1;
|
|
1076
|
-
lines.push(...renderAgentProgress(progress, isLast, expanded, theme, spinnerFrame));
|
|
1077
|
-
});
|
|
1078
|
-
} else if (details.results && details.results.length > 0) {
|
|
1079
|
-
details.results.forEach((res, i) => {
|
|
1080
|
-
const isLast = i === details.results.length - 1;
|
|
1081
|
-
lines.push(...renderAgentResult(res, isLast, expanded, theme));
|
|
1082
|
-
});
|
|
1083
|
-
|
|
1084
|
-
const abortedCount = details.results.filter(r => r.aborted).length;
|
|
1085
|
-
const mergeFailedCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && r.error).length;
|
|
1086
|
-
const successCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && !r.error).length;
|
|
1087
|
-
const failCount = details.results.length - successCount - mergeFailedCount - abortedCount;
|
|
1088
|
-
let summary = `${theme.fg("dim", "Total:")} `;
|
|
1089
|
-
if (abortedCount > 0) {
|
|
1090
|
-
summary += theme.fg("error", `${abortedCount} aborted`);
|
|
1091
|
-
if (successCount > 0 || mergeFailedCount > 0 || failCount > 0) summary += theme.sep.dot;
|
|
1092
|
-
}
|
|
1093
|
-
if (successCount > 0) {
|
|
1094
|
-
summary += theme.fg("success", `${successCount} succeeded`);
|
|
1095
|
-
if (mergeFailedCount > 0 || failCount > 0) summary += theme.sep.dot;
|
|
1096
|
-
}
|
|
1097
|
-
if (mergeFailedCount > 0) {
|
|
1098
|
-
summary += theme.fg("warning", `${mergeFailedCount} merge failed`);
|
|
1099
|
-
if (failCount > 0) summary += theme.sep.dot;
|
|
1100
|
-
}
|
|
1101
|
-
if (failCount > 0) {
|
|
1102
|
-
summary += theme.fg("error", `${failCount} failed`);
|
|
1103
|
-
}
|
|
1104
|
-
summary += `${theme.sep.dot}${theme.fg("dim", formatDuration(details.totalDurationMs))}`;
|
|
1105
|
-
lines.push(summary);
|
|
1328
|
+
return framedBlock(theme, width => {
|
|
1329
|
+
const { expanded, isPartial, spinnerFrame } = options;
|
|
1330
|
+
const frozen = options.renderContext?.frozen === true;
|
|
1331
|
+
const lines: string[] = [];
|
|
1332
|
+
|
|
1333
|
+
const shouldRenderProgress =
|
|
1334
|
+
Boolean(details.progress && details.progress.length > 0) && (isPartial || details.results.length === 0);
|
|
1335
|
+
if (shouldRenderProgress && details.progress) {
|
|
1336
|
+
const ordered = orderProgressForDisplay(details.progress);
|
|
1337
|
+
// Collapsed view keeps the live edge: finished rows sort to the top of
|
|
1338
|
+
// the display order, so folding from the top keeps running/pending
|
|
1339
|
+
// agents (and their current-tool lines) visible while one summary line
|
|
1340
|
+
// stands in for everything above it.
|
|
1341
|
+
const visible = expanded ? ordered : ordered.slice(Math.max(0, ordered.length - COLLAPSED_AGENT_LIMIT));
|
|
1342
|
+
if (visible.length < ordered.length) {
|
|
1343
|
+
lines.push(formatHiddenProgressLine(ordered.slice(0, ordered.length - visible.length), theme));
|
|
1106
1344
|
}
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
const text = fallbackText.trim() ? fallbackText : "No results";
|
|
1110
|
-
const result = [theme.fg("dim", truncateToWidth(text, width))];
|
|
1111
|
-
cached = { key, lines: result };
|
|
1112
|
-
return result;
|
|
1345
|
+
for (const progress of visible) {
|
|
1346
|
+
lines.push(...renderAgentProgress(progress, "", " ", expanded, theme, spinnerFrame, frozen));
|
|
1113
1347
|
}
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1348
|
+
} else if (details.results && details.results.length > 0) {
|
|
1349
|
+
const ordered = orderResultsForDisplay(details.results);
|
|
1350
|
+
const visible = expanded ? ordered : selectCollapsedResults(ordered);
|
|
1351
|
+
for (const res of visible) {
|
|
1352
|
+
lines.push(...renderAgentResult(res, "", " ", expanded, theme));
|
|
1353
|
+
}
|
|
1354
|
+
if (visible.length < ordered.length) {
|
|
1355
|
+
const hint = formatExpandHint(theme, false, true);
|
|
1356
|
+
lines.push(
|
|
1357
|
+
`${theme.fg("dim", formatMoreItems(ordered.length - visible.length, "agent"))}${hint ? ` ${hint}` : ""}`,
|
|
1122
1358
|
);
|
|
1123
|
-
if (markerIndex >= 0) {
|
|
1124
|
-
const extra = summaryLines.slice(markerIndex);
|
|
1125
|
-
for (const line of extra) {
|
|
1126
|
-
if (!line.trim()) continue;
|
|
1127
|
-
lines.push(theme.fg("dim", line));
|
|
1128
|
-
}
|
|
1129
|
-
}
|
|
1130
1359
|
}
|
|
1131
1360
|
|
|
1132
|
-
const
|
|
1133
|
-
|
|
1361
|
+
const abortedCount = details.results.filter(r => r.aborted).length;
|
|
1362
|
+
const mergeFailedCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && r.error).length;
|
|
1363
|
+
const successCount = details.results.filter(r => !r.aborted && r.exitCode === 0 && !r.error).length;
|
|
1364
|
+
const failCount = details.results.length - successCount - mergeFailedCount - abortedCount;
|
|
1365
|
+
const summaryParts: string[] = [];
|
|
1366
|
+
if (abortedCount > 0) summaryParts.push(theme.fg("error", `${abortedCount} aborted`));
|
|
1367
|
+
if (successCount > 0) summaryParts.push(theme.fg("success", `${successCount} succeeded`));
|
|
1368
|
+
if (mergeFailedCount > 0) summaryParts.push(theme.fg("warning", `${mergeFailedCount} merge failed`));
|
|
1369
|
+
if (failCount > 0) summaryParts.push(theme.fg("error", `${failCount} failed`));
|
|
1370
|
+
const totalRequests = details.results.reduce((sum, r) => sum + (r.requests ?? 0), 0);
|
|
1371
|
+
if (totalRequests > 0) summaryParts.push(theme.fg("dim", `${formatNumber(totalRequests)} req`));
|
|
1372
|
+
summaryParts.push(theme.fg("dim", formatDuration(details.totalDurationMs)));
|
|
1373
|
+
// Wrap the run summary in the theme's bracket glyphs (dim chrome, colored
|
|
1374
|
+
// counts) to match the bash tool's `[Wall: … | Exit: …]` footer.
|
|
1375
|
+
lines.push(
|
|
1376
|
+
theme.fg("dim", theme.format.bracketLeft) +
|
|
1377
|
+
summaryParts.join(theme.fg("dim", theme.sep.dot)) +
|
|
1378
|
+
theme.fg("dim", theme.format.bracketRight),
|
|
1134
1379
|
);
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1380
|
+
}
|
|
1381
|
+
|
|
1382
|
+
const state = isPartial ? "running" : isError ? "error" : mergeFailed ? "warning" : "success";
|
|
1383
|
+
const borderColor = isError ? "error" : "borderMuted";
|
|
1384
|
+
|
|
1385
|
+
if (lines.length === 0) {
|
|
1386
|
+
const text = fallbackText.trim() ? fallbackText : "No results";
|
|
1387
|
+
return {
|
|
1388
|
+
header,
|
|
1389
|
+
sections: [
|
|
1390
|
+
...(contextSection ? [contextSection(width)] : []),
|
|
1391
|
+
...(assignmentSection ? [assignmentSection(width)] : []),
|
|
1392
|
+
{ separator: true, lines: [theme.fg("dim", truncateToWidth(text, width))] },
|
|
1393
|
+
],
|
|
1394
|
+
state,
|
|
1395
|
+
borderColor,
|
|
1396
|
+
width,
|
|
1397
|
+
};
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
if (fallbackText.trim()) {
|
|
1401
|
+
const summaryLines = fallbackText.split("\n");
|
|
1402
|
+
const markerIndex = summaryLines.findIndex(
|
|
1403
|
+
line =>
|
|
1404
|
+
line.includes("<system-notification>") ||
|
|
1405
|
+
line.startsWith("Applied patches:") ||
|
|
1406
|
+
line.startsWith("No changes to apply."),
|
|
1407
|
+
);
|
|
1408
|
+
if (markerIndex >= 0) {
|
|
1409
|
+
const extra = summaryLines.slice(markerIndex);
|
|
1410
|
+
for (const line of extra) {
|
|
1411
|
+
if (!line.trim()) continue;
|
|
1412
|
+
lines.push(theme.fg("dim", line));
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
}
|
|
1416
|
+
|
|
1417
|
+
while (lines.length > 0 && lines[0].trim() === "") lines.shift();
|
|
1418
|
+
return {
|
|
1419
|
+
header,
|
|
1420
|
+
sections: [
|
|
1421
|
+
...(contextSection ? [contextSection(width)] : []),
|
|
1422
|
+
...(assignmentSection ? [assignmentSection(width)] : []),
|
|
1423
|
+
...(lines.length > 0 ? [{ separator: true, lines }] : []),
|
|
1424
|
+
],
|
|
1425
|
+
state,
|
|
1426
|
+
borderColor,
|
|
1427
|
+
width,
|
|
1428
|
+
};
|
|
1429
|
+
});
|
|
1142
1430
|
}
|
|
1143
1431
|
|
|
1144
1432
|
function isTaskToolDetails(value: unknown): value is TaskToolDetails {
|
|
@@ -1150,14 +1438,44 @@ function isTaskToolDetails(value: unknown): value is TaskToolDetails {
|
|
|
1150
1438
|
);
|
|
1151
1439
|
}
|
|
1152
1440
|
|
|
1153
|
-
|
|
1441
|
+
// Nested subagent snapshots sit one or more levels below the frame border, so
|
|
1442
|
+
// they keep tree guides to convey depth (the parent prepends its own continue
|
|
1443
|
+
// prefix). Only the top-level agent list drops guides (the frame is its box).
|
|
1444
|
+
function nestedMarkers(isLast: boolean, theme: Theme): { prefix: string; continuePrefix: string } {
|
|
1445
|
+
return {
|
|
1446
|
+
prefix: isLast ? theme.fg("dim", theme.tree.last) : theme.fg("dim", theme.tree.branch),
|
|
1447
|
+
continuePrefix: isLast ? " " : `${theme.fg("dim", theme.tree.vertical)} `,
|
|
1448
|
+
};
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
function renderNestedTaskResults(
|
|
1452
|
+
detailsList: TaskToolDetails[],
|
|
1453
|
+
expanded: boolean,
|
|
1454
|
+
theme: Theme,
|
|
1455
|
+
seen: WeakSet<object> = new WeakSet<object>(),
|
|
1456
|
+
depth = 0,
|
|
1457
|
+
): string[] {
|
|
1154
1458
|
const lines: string[] = [];
|
|
1155
1459
|
for (const details of detailsList) {
|
|
1156
|
-
if (
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1460
|
+
if (seen.has(details)) {
|
|
1461
|
+
lines.push(renderNestedCycleLine(theme));
|
|
1462
|
+
continue;
|
|
1463
|
+
}
|
|
1464
|
+
if (depth >= MAX_NESTED_TASK_RENDER_DEPTH) {
|
|
1465
|
+
lines.push(theme.fg("dim", "… nested task depth limit reached"));
|
|
1466
|
+
continue;
|
|
1467
|
+
}
|
|
1468
|
+
seen.add(details);
|
|
1469
|
+
if (!details.results || details.results.length === 0) {
|
|
1470
|
+
seen.delete(details);
|
|
1471
|
+
continue;
|
|
1472
|
+
}
|
|
1473
|
+
const ordered = orderResultsForDisplay(details.results);
|
|
1474
|
+
ordered.forEach((result, index) => {
|
|
1475
|
+
const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
|
|
1476
|
+
lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme, seen, depth + 1));
|
|
1160
1477
|
});
|
|
1478
|
+
seen.delete(details);
|
|
1161
1479
|
}
|
|
1162
1480
|
return lines;
|
|
1163
1481
|
}
|
|
@@ -1172,24 +1490,52 @@ function renderNestedTaskTree(
|
|
|
1172
1490
|
expanded: boolean,
|
|
1173
1491
|
theme: Theme,
|
|
1174
1492
|
spinnerFrame?: number,
|
|
1493
|
+
frozen = false,
|
|
1494
|
+
seen: WeakSet<object> = new WeakSet<object>(),
|
|
1495
|
+
depth = 0,
|
|
1175
1496
|
): string[] {
|
|
1176
1497
|
const lines: string[] = [];
|
|
1177
1498
|
for (const details of detailsList) {
|
|
1499
|
+
if (seen.has(details)) {
|
|
1500
|
+
lines.push(renderNestedCycleLine(theme));
|
|
1501
|
+
continue;
|
|
1502
|
+
}
|
|
1503
|
+
if (depth >= MAX_NESTED_TASK_RENDER_DEPTH) {
|
|
1504
|
+
lines.push(theme.fg("dim", "… nested task depth limit reached"));
|
|
1505
|
+
continue;
|
|
1506
|
+
}
|
|
1507
|
+
seen.add(details);
|
|
1178
1508
|
const hasResults = Boolean(details.results && details.results.length > 0);
|
|
1179
1509
|
if (hasResults) {
|
|
1180
|
-
details.results
|
|
1181
|
-
|
|
1182
|
-
|
|
1510
|
+
const ordered = orderResultsForDisplay(details.results);
|
|
1511
|
+
ordered.forEach((result, index) => {
|
|
1512
|
+
const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
|
|
1513
|
+
lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme, seen, depth + 1));
|
|
1183
1514
|
});
|
|
1515
|
+
seen.delete(details);
|
|
1184
1516
|
continue;
|
|
1185
1517
|
}
|
|
1186
1518
|
const inflight = details.progress;
|
|
1187
1519
|
if (inflight && inflight.length > 0) {
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1520
|
+
const ordered = orderProgressForDisplay(inflight);
|
|
1521
|
+
ordered.forEach((prog, index) => {
|
|
1522
|
+
const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
|
|
1523
|
+
lines.push(
|
|
1524
|
+
...renderAgentProgress(
|
|
1525
|
+
prog,
|
|
1526
|
+
prefix,
|
|
1527
|
+
continuePrefix,
|
|
1528
|
+
expanded,
|
|
1529
|
+
theme,
|
|
1530
|
+
spinnerFrame,
|
|
1531
|
+
frozen,
|
|
1532
|
+
seen,
|
|
1533
|
+
depth + 1,
|
|
1534
|
+
),
|
|
1535
|
+
);
|
|
1191
1536
|
});
|
|
1192
1537
|
}
|
|
1538
|
+
seen.delete(details);
|
|
1193
1539
|
}
|
|
1194
1540
|
return lines;
|
|
1195
1541
|
}
|
|
@@ -1208,4 +1554,5 @@ subprocessToolRegistry.register<TaskToolDetails>("task", {
|
|
|
1208
1554
|
export const taskToolRenderer = {
|
|
1209
1555
|
renderCall,
|
|
1210
1556
|
renderResult,
|
|
1557
|
+
mergeCallAndResult: true,
|
|
1211
1558
|
};
|