@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
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { INTENT_FIELD } from "@prometheus-ai/agent-core";
|
|
2
2
|
import { calculatePromptTokens } from "@prometheus-ai/agent-core/compaction/compaction";
|
|
3
3
|
import type { AssistantMessage, ImageContent } from "@prometheus-ai/ai";
|
|
4
|
-
import { type Component, Loader, TERMINAL
|
|
5
|
-
import {
|
|
4
|
+
import { type Component, Loader, TERMINAL } from "@prometheus-ai/tui";
|
|
5
|
+
import { extractTextContent } from "../../commit/utils";
|
|
6
6
|
import { settings } from "../../config/settings";
|
|
7
7
|
import { getFileSnapshotStore } from "../../edit/file-snapshot-store";
|
|
8
8
|
import { AssistantMessageComponent } from "../../modes/components/assistant-message";
|
|
@@ -14,30 +14,32 @@ import {
|
|
|
14
14
|
import { TodoReminderComponent } from "../../modes/components/todo-reminder";
|
|
15
15
|
import { ToolExecutionComponent } from "../../modes/components/tool-execution";
|
|
16
16
|
import { TtsrNotificationComponent } from "../../modes/components/ttsr-notification";
|
|
17
|
+
import { createUsageRowBlock } from "../../modes/components/usage-row";
|
|
17
18
|
import { getSymbolTheme, theme } from "../../modes/theme/theme";
|
|
18
19
|
import type { InteractiveModeContext, TodoPhase } from "../../modes/types";
|
|
19
20
|
import type { PlanApprovalDetails } from "../../plan-mode/approved-plan";
|
|
20
21
|
import type { AgentSessionEvent } from "../../session/agent-session";
|
|
21
|
-
import { isSilentAbort,
|
|
22
|
+
import { isSilentAbort, readQueueChipText, resolveAbortLabel } from "../../session/messages";
|
|
22
23
|
import type { ResolveToolDetails } from "../../tools/resolve";
|
|
24
|
+
import { vocalizer } from "../../tts/vocalizer";
|
|
25
|
+
import { hasVisibleThinking } from "../../utils/thinking-display";
|
|
23
26
|
import { interruptHint } from "../shared";
|
|
27
|
+
import { StreamingRevealController } from "./streaming-reveal";
|
|
28
|
+
import { ToolArgsRevealController } from "./tool-args-reveal";
|
|
24
29
|
|
|
25
30
|
type AgentSessionEventKind = AgentSessionEvent["type"];
|
|
26
31
|
|
|
27
32
|
const IRC_MESSAGE_VISIBLE_TTL_MS = 10_000;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
tool_execution_update: true,
|
|
39
|
-
tool_execution_end: true,
|
|
40
|
-
};
|
|
33
|
+
/**
|
|
34
|
+
* Concurrent IRC cards allowed in the transcript's live region. Cards land
|
|
35
|
+
* below a still-live block (a running task), where they cannot commit to
|
|
36
|
+
* native scrollback (commits are prefix-only) — every visible card inflates
|
|
37
|
+
* the live region and pushes the live block's uncommitted rows above the
|
|
38
|
+
* window top, where they are neither on screen nor in history. A swarm burst
|
|
39
|
+
* (several agents coordinating at once) must therefore stay bounded: the
|
|
40
|
+
* oldest live-region card retires as soon as a new one would exceed the cap.
|
|
41
|
+
*/
|
|
42
|
+
const MAX_LIVE_IRC_CARDS = 4;
|
|
41
43
|
|
|
42
44
|
type AgentSessionEventHandlers = {
|
|
43
45
|
[E in AgentSessionEventKind]: (event: Extract<AgentSessionEvent, { type: E }>) => Promise<void>;
|
|
@@ -45,12 +47,16 @@ type AgentSessionEventHandlers = {
|
|
|
45
47
|
|
|
46
48
|
export class EventController {
|
|
47
49
|
#lastReadGroup: ReadToolGroupComponent | undefined = undefined;
|
|
48
|
-
|
|
50
|
+
// Count of visible assistant content blocks (rendered non-empty text/thinking)
|
|
51
|
+
// already seen in the current streaming message. A newly appearing one breaks
|
|
52
|
+
// the read run: the rendered reasoning/answer is a visual separator, so reads
|
|
53
|
+
// after it start a fresh group. Empty/absent thinking — common when a model
|
|
54
|
+
// emits one read per completion — does not break it, so a run of consecutive
|
|
55
|
+
// reads collapses into one group even across completion boundaries.
|
|
56
|
+
#lastVisibleBlockCount = 0;
|
|
49
57
|
#renderedCustomMessages = new Set<string>();
|
|
50
58
|
#lastIntent: string | undefined = undefined;
|
|
51
59
|
#backgroundToolCallIds = new Set<string>();
|
|
52
|
-
#assistantMessageStreaming = false;
|
|
53
|
-
#agentTurnActive = false;
|
|
54
60
|
#readToolCallArgs = new Map<string, Record<string, unknown>>();
|
|
55
61
|
#readToolCallAssistantComponents = new Map<string, AssistantMessageComponent>();
|
|
56
62
|
#lastAssistantComponent: AssistantMessageComponent | undefined = undefined;
|
|
@@ -61,14 +67,36 @@ export class EventController {
|
|
|
61
67
|
#pinnedErrorComponent: AssistantMessageComponent | undefined = undefined;
|
|
62
68
|
#idleCompactionTimer?: NodeJS.Timeout;
|
|
63
69
|
#ircExpiryTimers = new Map<string, NodeJS.Timeout>();
|
|
70
|
+
// Insertion-ordered IRC cards not yet retired; values are the transcript
|
|
71
|
+
// components each card contributed (see #retireIrcCard for the guard).
|
|
72
|
+
#liveIrcCards = new Map<string, Component[]>();
|
|
73
|
+
// Most recent `job` tool block whose result still had every watched job
|
|
74
|
+
// running. Kept un-finalized (live) so the next `job` call displaces it —
|
|
75
|
+
// one persistent poll instead of a stack of "waiting on N jobs" frames —
|
|
76
|
+
// and sealed in place the moment anything else lands below it.
|
|
77
|
+
#displaceablePollComponent: ToolExecutionComponent | undefined = undefined;
|
|
78
|
+
// Most recent TTSR notification block. A new ttsr_triggered event merges its
|
|
79
|
+
// rules into this block while it is still the (live-region) transcript tail.
|
|
80
|
+
#lastTtsrNotification: TtsrNotificationComponent | undefined = undefined;
|
|
81
|
+
#streamingReveal: StreamingRevealController;
|
|
82
|
+
#toolArgsReveal: ToolArgsRevealController;
|
|
64
83
|
#handlers: AgentSessionEventHandlers;
|
|
65
84
|
|
|
66
85
|
constructor(private ctx: InteractiveModeContext) {
|
|
86
|
+
this.#streamingReveal = new StreamingRevealController({
|
|
87
|
+
getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
|
|
88
|
+
getHideThinkingBlock: () => this.ctx.hideThinkingBlock,
|
|
89
|
+
requestRender: () => this.ctx.ui.requestRender(),
|
|
90
|
+
});
|
|
91
|
+
this.#toolArgsReveal = new ToolArgsRevealController({
|
|
92
|
+
getSmoothStreaming: () => this.ctx.settings.get("display.smoothStreaming"),
|
|
93
|
+
requestRender: () => this.ctx.ui.requestRender(),
|
|
94
|
+
});
|
|
67
95
|
this.#handlers = {
|
|
68
96
|
agent_start: e => this.#handleAgentStart(e),
|
|
69
97
|
agent_end: e => this.#handleAgentEnd(e),
|
|
70
|
-
turn_start: async () =>
|
|
71
|
-
turn_end: async
|
|
98
|
+
turn_start: async () => this.#handleTurnStart(),
|
|
99
|
+
turn_end: async e => this.#handleTurnEnd(e),
|
|
72
100
|
message_start: e => this.#handleMessageStart(e),
|
|
73
101
|
message_update: e => this.#handleMessageUpdate(e),
|
|
74
102
|
message_end: e => this.#handleMessageEnd(e),
|
|
@@ -96,20 +124,23 @@ export class EventController {
|
|
|
96
124
|
}
|
|
97
125
|
|
|
98
126
|
dispose(): void {
|
|
127
|
+
this.#streamingReveal.stop();
|
|
128
|
+
this.#toolArgsReveal.stop();
|
|
99
129
|
this.#cancelIdleCompaction();
|
|
100
130
|
for (const timer of this.#ircExpiryTimers.values()) {
|
|
101
131
|
clearTimeout(timer);
|
|
102
132
|
}
|
|
103
133
|
this.#ircExpiryTimers.clear();
|
|
134
|
+
this.#liveIrcCards.clear();
|
|
104
135
|
}
|
|
105
136
|
|
|
106
137
|
#resetReadGroup(): void {
|
|
138
|
+
this.#lastReadGroup?.finalize();
|
|
107
139
|
this.#lastReadGroup = undefined;
|
|
108
140
|
}
|
|
109
141
|
|
|
110
142
|
#getReadGroup(): ReadToolGroupComponent {
|
|
111
143
|
if (!this.#lastReadGroup) {
|
|
112
|
-
this.ctx.chatContainer.addChild(new Text("", 0, 0));
|
|
113
144
|
const group = new ReadToolGroupComponent({
|
|
114
145
|
showContentPreview: this.ctx.settings.get("read.toolResultPreview"),
|
|
115
146
|
});
|
|
@@ -154,6 +185,7 @@ export class EventController {
|
|
|
154
185
|
return true;
|
|
155
186
|
}
|
|
156
187
|
#updateWorkingMessageFromIntent(intent: unknown): void {
|
|
188
|
+
if (this.ctx.session.isAborting) return;
|
|
157
189
|
// Streamed JSON can deliver non-string `_i` (object, number, boolean) before
|
|
158
190
|
// schema validation; `?.` only guards null/undefined, so guard the type too.
|
|
159
191
|
if (typeof intent !== "string") return;
|
|
@@ -168,6 +200,33 @@ export class EventController {
|
|
|
168
200
|
await this.handleEvent(event);
|
|
169
201
|
});
|
|
170
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Clear every transcript-anchored/turn-scoped piece of state. Used by the
|
|
205
|
+
* session focus proxy when re-pointing the transcript at another session:
|
|
206
|
+
* components, timers, and stream-reveal state all reference the previous
|
|
207
|
+
* session's transcript and must not bleed into the new one.
|
|
208
|
+
*/
|
|
209
|
+
resetTranscriptAnchors(): void {
|
|
210
|
+
this.#resetReadGroup();
|
|
211
|
+
this.#lastVisibleBlockCount = 0;
|
|
212
|
+
this.#renderedCustomMessages.clear();
|
|
213
|
+
this.#lastIntent = undefined;
|
|
214
|
+
this.#backgroundToolCallIds.clear();
|
|
215
|
+
this.#readToolCallArgs.clear();
|
|
216
|
+
this.#readToolCallAssistantComponents.clear();
|
|
217
|
+
this.#lastAssistantComponent = undefined;
|
|
218
|
+
this.#pinnedErrorComponent = undefined;
|
|
219
|
+
this.#cancelIdleCompaction();
|
|
220
|
+
for (const timer of this.#ircExpiryTimers.values()) {
|
|
221
|
+
clearTimeout(timer);
|
|
222
|
+
}
|
|
223
|
+
this.#ircExpiryTimers.clear();
|
|
224
|
+
this.#liveIrcCards.clear();
|
|
225
|
+
this.#displaceablePollComponent = undefined;
|
|
226
|
+
this.#lastTtsrNotification = undefined;
|
|
227
|
+
this.#streamingReveal.stop();
|
|
228
|
+
this.#toolArgsReveal.stop();
|
|
229
|
+
}
|
|
171
230
|
|
|
172
231
|
async handleEvent(event: AgentSessionEvent): Promise<void> {
|
|
173
232
|
if (!this.ctx.isInitialized) {
|
|
@@ -179,55 +238,25 @@ export class EventController {
|
|
|
179
238
|
|
|
180
239
|
const run = this.#handlers[event.type] as (e: AgentSessionEvent) => Promise<void>;
|
|
181
240
|
await run(event);
|
|
182
|
-
// While an assistant turn is active, visible status chrome and foreground
|
|
183
|
-
// transcript blocks can re-render after rows have entered native scrollback
|
|
184
|
-
// (idle Working loader, Markdown fences, wrapping, tool previews). Let the
|
|
185
|
-
// TUI use its foreground live-region path instead of idle deferral, which
|
|
186
|
-
// can otherwise leave the loader/status frame frozen until the next input.
|
|
187
|
-
// Background-running tools after the turn ends are excluded so late async
|
|
188
|
-
// updates keep the no-yank deferral; agent_start/agent_end bracket the
|
|
189
|
-
// foreground turn.
|
|
190
|
-
if (STREAM_RENDER_MODE_EVENTS[event.type]) {
|
|
191
|
-
this.#refreshToolRenderMode();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
#refreshToolRenderMode(): void {
|
|
196
|
-
let foregroundToolActive = this.#agentTurnActive || this.#assistantMessageStreaming;
|
|
197
|
-
if (!foregroundToolActive) {
|
|
198
|
-
for (const toolCallId of this.ctx.pendingTools.keys()) {
|
|
199
|
-
if (!this.#backgroundToolCallIds.has(toolCallId)) {
|
|
200
|
-
foregroundToolActive = true;
|
|
201
|
-
break;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
this.ctx.ui.setEagerNativeScrollbackRebuild(foregroundToolActive);
|
|
206
241
|
}
|
|
207
242
|
|
|
208
243
|
async #handleAgentStart(_event: Extract<AgentSessionEvent, { type: "agent_start" }>): Promise<void> {
|
|
209
|
-
this.#agentTurnActive = true;
|
|
210
244
|
this.#lastIntent = undefined;
|
|
211
245
|
this.#readToolCallArgs.clear();
|
|
212
246
|
this.#readToolCallAssistantComponents.clear();
|
|
213
|
-
this.#
|
|
247
|
+
this.#resetReadGroup();
|
|
214
248
|
this.#lastAssistantComponent = undefined;
|
|
215
249
|
// Restore the previous turn's inline error in the transcript before dropping
|
|
216
250
|
// the banner, so the error stays in history once the banner is gone.
|
|
217
251
|
this.#pinnedErrorComponent?.setErrorPinned(false);
|
|
218
252
|
this.#pinnedErrorComponent = undefined;
|
|
219
253
|
this.ctx.clearPinnedError();
|
|
220
|
-
if (this.ctx.retryEscapeHandler) {
|
|
221
|
-
this.ctx.editor.onEscape = this.ctx.retryEscapeHandler;
|
|
222
|
-
this.ctx.retryEscapeHandler = undefined;
|
|
223
|
-
}
|
|
224
254
|
if (this.ctx.retryLoader) {
|
|
225
255
|
this.ctx.retryLoader.stop();
|
|
226
256
|
this.ctx.retryLoader = undefined;
|
|
227
257
|
this.ctx.statusContainer.clear();
|
|
228
258
|
}
|
|
229
259
|
this.#cancelIdleCompaction();
|
|
230
|
-
this.#refreshToolRenderMode();
|
|
231
260
|
this.ctx.ensureLoadingAnimation();
|
|
232
261
|
this.ctx.ui.requestRender();
|
|
233
262
|
}
|
|
@@ -241,15 +270,10 @@ export class EventController {
|
|
|
241
270
|
this.#renderedCustomMessages.add(signature);
|
|
242
271
|
this.#resetReadGroup();
|
|
243
272
|
this.ctx.addMessageToChat(event.message);
|
|
244
|
-
//
|
|
245
|
-
//
|
|
246
|
-
//
|
|
247
|
-
|
|
248
|
-
// re-rendered to match. Gated on tag presence so non-queued customs
|
|
249
|
-
// (ttsr-injection, irc:*, async-result, hookMessage) skip the
|
|
250
|
-
// rebuild; their dispatch path never registered a pending chip.
|
|
251
|
-
// Mirrors the user-role refresh at the bottom of this function.
|
|
252
|
-
if (event.message.role === "custom" && readPendingDisplayTag(event.message.details)) {
|
|
273
|
+
// Queued custom-message chips are derived from the agent queue; refresh the
|
|
274
|
+
// pending bar when the queued custom is consumed so the chip disappears
|
|
275
|
+
// immediately.
|
|
276
|
+
if (event.message.role === "custom" && readQueueChipText(event.message.details)) {
|
|
253
277
|
this.ctx.updatePendingMessagesDisplay();
|
|
254
278
|
}
|
|
255
279
|
this.ctx.ui.requestRender();
|
|
@@ -268,6 +292,7 @@ export class EventController {
|
|
|
268
292
|
const signature = `${textContent}\u0000${imageCount}`;
|
|
269
293
|
|
|
270
294
|
this.#resetReadGroup();
|
|
295
|
+
this.#resolveDisplaceablePoll();
|
|
271
296
|
const wasOptimistic = this.ctx.optimisticUserMessageSignature === signature;
|
|
272
297
|
const wasLocallySubmitted = this.ctx.locallySubmittedUserSignatures.delete(signature) || wasOptimistic;
|
|
273
298
|
if (!wasOptimistic) {
|
|
@@ -300,19 +325,17 @@ export class EventController {
|
|
|
300
325
|
this.ctx.addMessageToChat(event.message);
|
|
301
326
|
this.ctx.ui.requestRender();
|
|
302
327
|
} else if (event.message.role === "assistant") {
|
|
303
|
-
this.#
|
|
304
|
-
this.#assistantMessageStreaming = true;
|
|
305
|
-
this.#resetReadGroup();
|
|
328
|
+
this.#lastVisibleBlockCount = 0;
|
|
306
329
|
this.ctx.streamingComponent = new AssistantMessageComponent(
|
|
307
330
|
undefined,
|
|
308
331
|
this.ctx.hideThinkingBlock,
|
|
309
332
|
() => this.ctx.ui.requestRender(),
|
|
310
|
-
this.ctx.
|
|
333
|
+
this.ctx.viewSession.extensionRunner?.getAssistantThinkingRenderers(),
|
|
311
334
|
this.ctx.ui.imageBudget,
|
|
312
335
|
);
|
|
313
336
|
this.ctx.streamingMessage = event.message;
|
|
314
337
|
this.ctx.chatContainer.addChild(this.ctx.streamingComponent);
|
|
315
|
-
this.ctx.streamingComponent
|
|
338
|
+
this.#streamingReveal.begin(this.ctx.streamingComponent, this.ctx.streamingMessage);
|
|
316
339
|
this.ctx.ui.requestRender();
|
|
317
340
|
}
|
|
318
341
|
}
|
|
@@ -326,6 +349,7 @@ export class EventController {
|
|
|
326
349
|
this.#resetReadGroup();
|
|
327
350
|
const components = this.ctx.addMessageToChat(event.message);
|
|
328
351
|
this.#scheduleIrcExpiry(signature, components);
|
|
352
|
+
this.#enforceIrcCardCap(signature);
|
|
329
353
|
this.ctx.ui.requestRender();
|
|
330
354
|
}
|
|
331
355
|
|
|
@@ -333,13 +357,69 @@ export class EventController {
|
|
|
333
357
|
if (components.length === 0 || this.#ircExpiryTimers.has(signature)) return;
|
|
334
358
|
const timer = setTimeout(() => {
|
|
335
359
|
this.#ircExpiryTimers.delete(signature);
|
|
336
|
-
|
|
337
|
-
this.ctx.chatContainer.removeChild(component);
|
|
338
|
-
}
|
|
339
|
-
this.ctx.ui.requestRender();
|
|
360
|
+
this.#retireIrcCard(signature);
|
|
340
361
|
}, IRC_MESSAGE_VISIBLE_TTL_MS);
|
|
341
362
|
timer.unref?.();
|
|
342
363
|
this.#ircExpiryTimers.set(signature, timer);
|
|
364
|
+
this.#liveIrcCards.set(signature, components);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Remove an expired/evicted IRC card — but only while it still sits below a
|
|
369
|
+
* live block, where its rows cannot have entered native scrollback. Once
|
|
370
|
+
* everything above it has finalized, its rows may already be committed;
|
|
371
|
+
* removing them then is an interior deletion of the committed prefix, which
|
|
372
|
+
* the engine can only repair by recommitting every row below the gap —
|
|
373
|
+
* exactly the duplicated-block artifact this guard exists to prevent. Such
|
|
374
|
+
* a card simply stays: it is final history, and the window scrolls past it.
|
|
375
|
+
*/
|
|
376
|
+
#retireIrcCard(signature: string): void {
|
|
377
|
+
const components = this.#liveIrcCards.get(signature);
|
|
378
|
+
this.#liveIrcCards.delete(signature);
|
|
379
|
+
if (!components) return;
|
|
380
|
+
let removed = false;
|
|
381
|
+
for (const component of components) {
|
|
382
|
+
if (!this.ctx.chatContainer.isWithinLiveRegion(component)) continue;
|
|
383
|
+
this.ctx.chatContainer.removeChild(component);
|
|
384
|
+
removed = true;
|
|
385
|
+
}
|
|
386
|
+
if (removed) this.ctx.ui.requestRender();
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/** Evict oldest live-region cards beyond {@link MAX_LIVE_IRC_CARDS}. */
|
|
390
|
+
#enforceIrcCardCap(latestSignature: string): void {
|
|
391
|
+
while (this.#liveIrcCards.size > MAX_LIVE_IRC_CARDS) {
|
|
392
|
+
const oldest = this.#liveIrcCards.keys().next().value;
|
|
393
|
+
if (oldest === undefined || oldest === latestSignature) return;
|
|
394
|
+
const timer = this.#ircExpiryTimers.get(oldest);
|
|
395
|
+
if (timer) {
|
|
396
|
+
clearTimeout(timer);
|
|
397
|
+
this.#ircExpiryTimers.delete(oldest);
|
|
398
|
+
}
|
|
399
|
+
this.#retireIrcCard(oldest);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Resolve the pending displaceable poll block before the next block lands.
|
|
405
|
+
* A follow-up `job` call displaces it — the stale "waiting on N jobs" frame
|
|
406
|
+
* is removed so repeated polls read as one persistent poll — while anything
|
|
407
|
+
* else seals it in place as final history. Removal is safe only because a
|
|
408
|
+
* displaceable block never finalizes: commits stop at the first live block,
|
|
409
|
+
* so none of its rows have entered native scrollback (see
|
|
410
|
+
* ToolExecutionComponent.isDisplaceableBlock).
|
|
411
|
+
*/
|
|
412
|
+
#resolveDisplaceablePoll(nextToolName?: string): void {
|
|
413
|
+
const previous = this.#displaceablePollComponent;
|
|
414
|
+
if (!previous) return;
|
|
415
|
+
this.#displaceablePollComponent = undefined;
|
|
416
|
+
if (nextToolName === "job" && previous.isDisplaceableBlock()) {
|
|
417
|
+
this.ctx.chatContainer.removeChild(previous);
|
|
418
|
+
}
|
|
419
|
+
// Sealing stops the waiting-poll spinner and freezes the block (for a
|
|
420
|
+
// just-removed component it only clears the animation timer).
|
|
421
|
+
previous.seal();
|
|
422
|
+
this.ctx.ui.requestRender();
|
|
343
423
|
}
|
|
344
424
|
|
|
345
425
|
async #handleNotice(event: Extract<AgentSessionEvent, { type: "notice" }>): Promise<void> {
|
|
@@ -353,19 +433,73 @@ export class EventController {
|
|
|
353
433
|
}
|
|
354
434
|
}
|
|
355
435
|
|
|
436
|
+
/** A new turn interrupts any speech still queued/playing from the previous one. */
|
|
437
|
+
#handleTurnStart(): void {
|
|
438
|
+
vocalizer.clear();
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Speak streamed assistant output as a side effect of the turn. The mode
|
|
443
|
+
* decides which deltas feed the vocalizer (the vocalizer re-checks enabled):
|
|
444
|
+
* assistant|all speak text; all also speaks thinking; yield speaks nothing
|
|
445
|
+
* live (the final message is spoken at turn end).
|
|
446
|
+
*/
|
|
447
|
+
#vocalizeDelta(event: Extract<AgentSessionEvent, { type: "message_update" }>): void {
|
|
448
|
+
if (!settings.get("speech.enabled")) return;
|
|
449
|
+
const mode = settings.get("speech.mode");
|
|
450
|
+
const delta = event.assistantMessageEvent;
|
|
451
|
+
if (delta.type === "text_delta" && (mode === "assistant" || mode === "all")) {
|
|
452
|
+
vocalizer.pushDelta(delta.delta);
|
|
453
|
+
} else if (delta.type === "thinking_delta" && mode === "all") {
|
|
454
|
+
vocalizer.pushDelta(delta.delta);
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* End-of-turn vocalization: yield mode speaks the final assistant message in
|
|
460
|
+
* one shot here (the only mode that is post-hoc); every other mode just makes
|
|
461
|
+
* sure the live buffer's trailing partial gets flushed.
|
|
462
|
+
*/
|
|
463
|
+
#handleTurnEnd(event: Extract<AgentSessionEvent, { type: "turn_end" }>): void {
|
|
464
|
+
if (!settings.get("speech.enabled")) return;
|
|
465
|
+
if (settings.get("speech.mode") !== "yield") {
|
|
466
|
+
vocalizer.flush();
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
if (event.message.role !== "assistant") return;
|
|
470
|
+
if (event.message.stopReason === "aborted") return; // interrupted: never speak the aborted partial
|
|
471
|
+
const text = extractTextContent(event.message);
|
|
472
|
+
if (text) vocalizer.speak(text);
|
|
473
|
+
}
|
|
474
|
+
|
|
356
475
|
async #handleMessageUpdate(event: Extract<AgentSessionEvent, { type: "message_update" }>): Promise<void> {
|
|
476
|
+
this.#vocalizeDelta(event);
|
|
357
477
|
if (this.ctx.streamingComponent && event.message.role === "assistant") {
|
|
358
478
|
this.ctx.streamingMessage = event.message;
|
|
359
|
-
this.
|
|
479
|
+
this.#streamingReveal.setTarget(this.ctx.streamingMessage);
|
|
360
480
|
|
|
361
|
-
const
|
|
362
|
-
content =>
|
|
481
|
+
const visibleBlockCount = this.ctx.streamingMessage.content.filter(
|
|
482
|
+
content =>
|
|
483
|
+
(content.type === "text" && content.text.trim().length > 0) ||
|
|
484
|
+
(content.type === "thinking" && hasVisibleThinking(content)),
|
|
363
485
|
).length;
|
|
364
|
-
if (
|
|
486
|
+
if (visibleBlockCount > this.#lastVisibleBlockCount) {
|
|
365
487
|
this.#resetReadGroup();
|
|
366
|
-
this.#
|
|
488
|
+
this.#lastVisibleBlockCount = visibleBlockCount;
|
|
367
489
|
}
|
|
368
490
|
|
|
491
|
+
// Content blocks stream sequentially: a toolCall block can only begin
|
|
492
|
+
// after every preceding thinking/text block has closed, and the
|
|
493
|
+
// reveal's setTarget above force-completes the visible text for
|
|
494
|
+
// toolCall messages. Finalize the assistant block now instead of at
|
|
495
|
+
// message_end so the transcript's commit-safe run can extend through
|
|
496
|
+
// it into the streaming tool preview below — otherwise a long args
|
|
497
|
+
// stream (a big write/edit/eval) sits below a still-live block and
|
|
498
|
+
// can never reach native scrollback: the head of the preview is
|
|
499
|
+
// neither committed nor on screen and the transcript reads as cut.
|
|
500
|
+
if (this.ctx.streamingMessage.content.some(content => content.type === "toolCall")) {
|
|
501
|
+
this.ctx.streamingComponent.markTranscriptBlockFinalized();
|
|
502
|
+
}
|
|
369
503
|
for (const content of this.ctx.streamingMessage.content) {
|
|
370
504
|
if (content.type !== "toolCall") continue;
|
|
371
505
|
if (content.name === "read") {
|
|
@@ -376,6 +510,7 @@ export class EventController {
|
|
|
376
510
|
continue;
|
|
377
511
|
}
|
|
378
512
|
if (!readArgsTargetInternalUrl(content.arguments)) {
|
|
513
|
+
if (!this.ctx.pendingTools.has(content.id)) this.#resolveDisplaceablePoll(content.name);
|
|
379
514
|
this.#trackReadToolCall(content.id, content.arguments);
|
|
380
515
|
const component = this.ctx.pendingTools.get(content.id);
|
|
381
516
|
if (component) {
|
|
@@ -392,19 +527,32 @@ export class EventController {
|
|
|
392
527
|
|
|
393
528
|
// Preserve the raw partial JSON for renderers that need to surface fields before the JSON object closes.
|
|
394
529
|
// Bash uses this to show inline env assignments during streaming instead of popping them in at completion.
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
530
|
+
// While the JSON is still open, ToolArgsRevealController paces the
|
|
531
|
+
// reveal (write/edit/bash previews grow smoothly when a slow provider
|
|
532
|
+
// delivers large batches); once it closes, the final args render
|
|
533
|
+
// as-is — mirroring how assistant text snaps at message_end.
|
|
534
|
+
const partialJson = "partialJson" in content ? content.partialJson : undefined;
|
|
535
|
+
let renderArgs: Record<string, unknown>;
|
|
536
|
+
if (typeof partialJson === "string") {
|
|
537
|
+
renderArgs = this.#toolArgsReveal.setTarget(
|
|
538
|
+
content.id,
|
|
539
|
+
partialJson,
|
|
540
|
+
content.customWireName !== undefined,
|
|
541
|
+
content.arguments,
|
|
542
|
+
);
|
|
543
|
+
} else {
|
|
544
|
+
this.#toolArgsReveal.finish(content.id);
|
|
545
|
+
renderArgs = content.arguments;
|
|
546
|
+
}
|
|
399
547
|
if (!this.ctx.pendingTools.has(content.id)) {
|
|
548
|
+
this.#resolveDisplaceablePoll(content.name);
|
|
400
549
|
this.#resetReadGroup();
|
|
401
|
-
this.ctx.
|
|
402
|
-
const tool = this.ctx.session.getToolByName(content.name);
|
|
550
|
+
const tool = this.ctx.viewSession.getToolByName(content.name);
|
|
403
551
|
const component = new ToolExecutionComponent(
|
|
404
552
|
content.name,
|
|
405
553
|
renderArgs,
|
|
406
554
|
{
|
|
407
|
-
snapshots: getFileSnapshotStore(this.ctx.
|
|
555
|
+
snapshots: getFileSnapshotStore(this.ctx.viewSession),
|
|
408
556
|
showImages: settings.get("terminal.showImages"),
|
|
409
557
|
editFuzzyThreshold: settings.get("edit.fuzzyThreshold"),
|
|
410
558
|
editAllowFuzzy: settings.get("edit.fuzzyMatch"),
|
|
@@ -417,10 +565,12 @@ export class EventController {
|
|
|
417
565
|
component.setExpanded(this.ctx.toolOutputExpanded);
|
|
418
566
|
this.ctx.chatContainer.addChild(component);
|
|
419
567
|
this.ctx.pendingTools.set(content.id, component);
|
|
568
|
+
this.#toolArgsReveal.bind(content.id, component);
|
|
420
569
|
} else {
|
|
421
570
|
const component = this.ctx.pendingTools.get(content.id);
|
|
422
571
|
if (component) {
|
|
423
572
|
component.updateArgs(renderArgs, content.id);
|
|
573
|
+
this.#toolArgsReveal.bind(content.id, component);
|
|
424
574
|
}
|
|
425
575
|
}
|
|
426
576
|
}
|
|
@@ -434,7 +584,7 @@ export class EventController {
|
|
|
434
584
|
this.#updateWorkingMessageFromIntent(args[INTENT_FIELD]);
|
|
435
585
|
continue;
|
|
436
586
|
}
|
|
437
|
-
const tool = this.ctx.
|
|
587
|
+
const tool = this.ctx.viewSession.getToolByName(content.name);
|
|
438
588
|
if (typeof tool?.intent !== "function") continue;
|
|
439
589
|
try {
|
|
440
590
|
const derived = tool.intent(args as never)?.trim();
|
|
@@ -452,26 +602,34 @@ export class EventController {
|
|
|
452
602
|
|
|
453
603
|
async #handleMessageEnd(event: Extract<AgentSessionEvent, { type: "message_end" }>): Promise<void> {
|
|
454
604
|
if (event.message.role === "user") return;
|
|
455
|
-
if (event.message.role === "assistant") {
|
|
456
|
-
|
|
605
|
+
if (event.message.role === "assistant" && settings.get("speech.enabled")) {
|
|
606
|
+
if (event.message.stopReason === "aborted") {
|
|
607
|
+
// Esc / Ctrl+C / interrupt: stop speaking now and drop the trailing partial.
|
|
608
|
+
vocalizer.clear();
|
|
609
|
+
} else {
|
|
610
|
+
const mode = settings.get("speech.mode");
|
|
611
|
+
// Speak the last partial sentence of a completed message; yield mode
|
|
612
|
+
// instead speaks the whole final message at turn end.
|
|
613
|
+
if (mode === "assistant" || mode === "all") vocalizer.flush();
|
|
614
|
+
}
|
|
457
615
|
}
|
|
458
616
|
if (this.ctx.streamingComponent && event.message.role === "assistant") {
|
|
459
617
|
this.ctx.streamingMessage = event.message;
|
|
618
|
+
this.#streamingReveal.stop();
|
|
619
|
+
this.#toolArgsReveal.flushAll();
|
|
460
620
|
let errorMessage: string | undefined;
|
|
461
621
|
const aborted = this.ctx.streamingMessage.stopReason === "aborted";
|
|
462
622
|
const silentlyAborted = aborted && isSilentAbort(this.ctx.streamingMessage.errorMessage);
|
|
463
|
-
const ttsrSilenced = aborted && this.ctx.
|
|
623
|
+
const ttsrSilenced = aborted && this.ctx.viewSession.isTtsrAbortPending;
|
|
464
624
|
if (aborted && !silentlyAborted && !ttsrSilenced) {
|
|
465
|
-
//
|
|
466
|
-
//
|
|
467
|
-
//
|
|
468
|
-
//
|
|
469
|
-
//
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
? `Aborted after ${retryAttempt} retry attempt${retryAttempt > 1 ? "s" : ""}`
|
|
474
|
-
: "Operation aborted";
|
|
625
|
+
// Resolve the operator-facing label: a user-interrupt (Esc) abort
|
|
626
|
+
// carries USER_INTERRUPT_LABEL on errorMessage (threaded through the
|
|
627
|
+
// AbortController), which is preserved verbatim; any other abort with
|
|
628
|
+
// no threaded reason falls back to the retry-aware generic label.
|
|
629
|
+
// AgentSession.#handleAgentEvent already stamped SILENT_ABORT_MARKER for
|
|
630
|
+
// the plan-compact transition before this controller ran, so reaching
|
|
631
|
+
// this branch implies the abort was NOT a silent internal transition.
|
|
632
|
+
errorMessage = resolveAbortLabel(this.ctx.streamingMessage.errorMessage, this.ctx.viewSession.retryAttempt);
|
|
475
633
|
this.ctx.streamingMessage.errorMessage = errorMessage;
|
|
476
634
|
}
|
|
477
635
|
if (silentlyAborted || ttsrSilenced) {
|
|
@@ -498,10 +656,15 @@ export class EventController {
|
|
|
498
656
|
component.seal();
|
|
499
657
|
}
|
|
500
658
|
}
|
|
659
|
+
// These calls will never produce a result either, so the tracked
|
|
660
|
+
// waiting poll cannot be displaced anymore — freeze it in place.
|
|
661
|
+
this.#resolveDisplaceablePoll();
|
|
501
662
|
}
|
|
502
663
|
this.#lastAssistantComponent = this.ctx.streamingComponent;
|
|
503
|
-
this.#lastAssistantComponent.setUsageInfo(event.message.usage);
|
|
504
664
|
this.#lastAssistantComponent.markTranscriptBlockFinalized();
|
|
665
|
+
if (settings.get("display.showTokenUsage")) {
|
|
666
|
+
this.ctx.chatContainer.addChild(createUsageRowBlock(event.message.usage));
|
|
667
|
+
}
|
|
505
668
|
this.ctx.streamingComponent = undefined;
|
|
506
669
|
this.ctx.streamingMessage = undefined;
|
|
507
670
|
// Pin a turn-ending provider error (e.g. Anthropic content-filter block)
|
|
@@ -526,6 +689,7 @@ export class EventController {
|
|
|
526
689
|
async #handleToolExecutionStart(event: Extract<AgentSessionEvent, { type: "tool_execution_start" }>): Promise<void> {
|
|
527
690
|
this.#updateWorkingMessageFromIntent(event.intent);
|
|
528
691
|
if (!this.ctx.pendingTools.has(event.toolCallId)) {
|
|
692
|
+
this.#resolveDisplaceablePoll(event.toolName);
|
|
529
693
|
if (event.toolName === "read" && readArgsHaveTarget(event.args) && !readArgsTargetInternalUrl(event.args)) {
|
|
530
694
|
this.#trackReadToolCall(event.toolCallId, event.args);
|
|
531
695
|
const component = this.ctx.pendingTools.get(event.toolCallId);
|
|
@@ -541,15 +705,16 @@ export class EventController {
|
|
|
541
705
|
}
|
|
542
706
|
|
|
543
707
|
this.#resetReadGroup();
|
|
544
|
-
const tool = this.ctx.
|
|
708
|
+
const tool = this.ctx.viewSession.getToolByName(event.toolName);
|
|
545
709
|
const component = new ToolExecutionComponent(
|
|
546
710
|
event.toolName,
|
|
547
711
|
event.args,
|
|
548
712
|
{
|
|
549
|
-
snapshots: getFileSnapshotStore(this.ctx.
|
|
713
|
+
snapshots: getFileSnapshotStore(this.ctx.viewSession),
|
|
550
714
|
showImages: settings.get("terminal.showImages"),
|
|
551
715
|
editFuzzyThreshold: settings.get("edit.fuzzyThreshold"),
|
|
552
716
|
editAllowFuzzy: settings.get("edit.fuzzyMatch"),
|
|
717
|
+
liveRegion: this.ctx.chatContainer,
|
|
553
718
|
},
|
|
554
719
|
tool,
|
|
555
720
|
this.ctx.ui,
|
|
@@ -634,6 +799,14 @@ export class EventController {
|
|
|
634
799
|
this.ctx.pendingTools.delete(event.toolCallId);
|
|
635
800
|
this.#backgroundToolCallIds.delete(event.toolCallId);
|
|
636
801
|
}
|
|
802
|
+
if (
|
|
803
|
+
event.toolName === "job" &&
|
|
804
|
+
component instanceof ToolExecutionComponent &&
|
|
805
|
+
component.isDisplaceableBlock()
|
|
806
|
+
) {
|
|
807
|
+
// Remember the waiting poll so the next `job` call can displace it.
|
|
808
|
+
this.#displaceablePollComponent = component;
|
|
809
|
+
}
|
|
637
810
|
this.ctx.ui.requestRender();
|
|
638
811
|
}
|
|
639
812
|
}
|
|
@@ -662,8 +835,23 @@ export class EventController {
|
|
|
662
835
|
}
|
|
663
836
|
}
|
|
664
837
|
async #handleAgentEnd(_event: Extract<AgentSessionEvent, { type: "agent_end" }>): Promise<void> {
|
|
665
|
-
|
|
666
|
-
this
|
|
838
|
+
// A superseded agent_end: the agent is already streaming a fresh turn, so
|
|
839
|
+
// this event belongs to a turn that has already been replaced. The session
|
|
840
|
+
// dispatches to listeners fire-and-forget across an async extension-emit hop
|
|
841
|
+
// (#emitSessionEvent), so an interrupted turn's agent_end can land AFTER the
|
|
842
|
+
// resumed turn's agent_start (e.g. any post-turn agent.continue()). Running
|
|
843
|
+
// the turn-end teardown now would stop the loader the live turn just created,
|
|
844
|
+
// leaving "Working…" gone while the agent keeps running. The live turn owns
|
|
845
|
+
// the loader and finalizes it at its own agent_end (isStreaming === false by
|
|
846
|
+
// then). Mirrors the collab guest's !isStreaming loader reconciler.
|
|
847
|
+
if (this.ctx.session.isStreaming) return;
|
|
848
|
+
|
|
849
|
+
await this.#finishAgentEnd();
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
async #finishAgentEnd(): Promise<void> {
|
|
853
|
+
this.#streamingReveal.stop();
|
|
854
|
+
this.#toolArgsReveal.flushAll();
|
|
667
855
|
if (this.ctx.loadingAnimation) {
|
|
668
856
|
this.ctx.loadingAnimation.stop();
|
|
669
857
|
this.ctx.loadingAnimation = undefined;
|
|
@@ -681,7 +869,12 @@ export class EventController {
|
|
|
681
869
|
// seal it so it freezes (and stops animating) rather than lingering in
|
|
682
870
|
// the transcript live region as a streaming preview until the next thaw.
|
|
683
871
|
const component = this.ctx.pendingTools.get(toolCallId);
|
|
684
|
-
|
|
872
|
+
// A foreground read still pending at turn end shares a group component
|
|
873
|
+
// keyed by every read's id; seal it too so a never-delivered read does
|
|
874
|
+
// not keep the group live (and pinning the live region) indefinitely.
|
|
875
|
+
if (component instanceof ToolExecutionComponent || component instanceof ReadToolGroupComponent) {
|
|
876
|
+
component.seal();
|
|
877
|
+
}
|
|
685
878
|
this.ctx.pendingTools.delete(toolCallId);
|
|
686
879
|
}
|
|
687
880
|
}
|
|
@@ -690,20 +883,37 @@ export class EventController {
|
|
|
690
883
|
);
|
|
691
884
|
this.#readToolCallArgs.clear();
|
|
692
885
|
this.#readToolCallAssistantComponents.clear();
|
|
886
|
+
this.#resetReadGroup();
|
|
887
|
+
// The turn is over: nothing else lands this turn, so the waiting poll is
|
|
888
|
+
// final history — seal it instead of letting its spinner tick while idle.
|
|
889
|
+
this.#resolveDisplaceablePoll();
|
|
693
890
|
this.#lastAssistantComponent = undefined;
|
|
694
891
|
this.ctx.ui.requestRender();
|
|
695
892
|
this.#scheduleIdleCompaction();
|
|
696
893
|
this.sendCompletionNotification();
|
|
697
894
|
}
|
|
698
895
|
|
|
896
|
+
/**
|
|
897
|
+
* Tear down the live "Working…" loader: stop its animation timer AND clear the
|
|
898
|
+
* reference. A transient overlay (auto-compaction / auto-retry) that only ran
|
|
899
|
+
* `statusContainer.clear()` detached the loader from the container but left
|
|
900
|
+
* `ctx.loadingAnimation` set, so the resumed turn's `agent_start` →
|
|
901
|
+
* `ensureLoadingAnimation()` (guarded by `if (!this.loadingAnimation)`) skipped
|
|
902
|
+
* re-adding it and the spinner vanished while the agent kept streaming. Nulling
|
|
903
|
+
* the reference here lets the next `agent_start` recreate and re-attach it.
|
|
904
|
+
*/
|
|
905
|
+
#stopWorkingLoader(): void {
|
|
906
|
+
if (this.ctx.loadingAnimation) {
|
|
907
|
+
this.ctx.loadingAnimation.stop();
|
|
908
|
+
this.ctx.loadingAnimation = undefined;
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
|
|
699
912
|
async #handleAutoCompactionStart(
|
|
700
913
|
event: Extract<AgentSessionEvent, { type: "auto_compaction_start" }>,
|
|
701
914
|
): Promise<void> {
|
|
702
915
|
this.#cancelIdleCompaction();
|
|
703
|
-
this
|
|
704
|
-
this.ctx.editor.onEscape = () => {
|
|
705
|
-
this.ctx.session.abortCompaction();
|
|
706
|
-
};
|
|
916
|
+
this.#stopWorkingLoader();
|
|
707
917
|
this.ctx.statusContainer.clear();
|
|
708
918
|
const reasonText =
|
|
709
919
|
event.reason === "overflow"
|
|
@@ -732,10 +942,6 @@ export class EventController {
|
|
|
732
942
|
|
|
733
943
|
async #handleAutoCompactionEnd(event: Extract<AgentSessionEvent, { type: "auto_compaction_end" }>): Promise<void> {
|
|
734
944
|
this.#cancelIdleCompaction();
|
|
735
|
-
if (this.ctx.autoCompactionEscapeHandler) {
|
|
736
|
-
this.ctx.editor.onEscape = this.ctx.autoCompactionEscapeHandler;
|
|
737
|
-
this.ctx.autoCompactionEscapeHandler = undefined;
|
|
738
|
-
}
|
|
739
945
|
if (this.ctx.autoCompactionLoader) {
|
|
740
946
|
this.ctx.autoCompactionLoader.stop();
|
|
741
947
|
this.ctx.autoCompactionLoader = undefined;
|
|
@@ -753,7 +959,15 @@ export class EventController {
|
|
|
753
959
|
);
|
|
754
960
|
} else if (isShakeAction) {
|
|
755
961
|
// Shake produces no CompactionResult; rebuild on success, suppress benign skips.
|
|
962
|
+
// The fallback path (`errorMessage` set, `skipped` false) means shake reclaimed
|
|
963
|
+
// some tokens before deciding the threshold still wasn't cleared — rebuild so
|
|
964
|
+
// the chat reflects the dropped regions even though a context-full pass follows.
|
|
756
965
|
if (event.errorMessage) {
|
|
966
|
+
if (!event.skipped) {
|
|
967
|
+
this.ctx.rebuildChatFromMessages();
|
|
968
|
+
this.ctx.statusLine.invalidate();
|
|
969
|
+
this.ctx.updateEditorTopBorder();
|
|
970
|
+
}
|
|
757
971
|
this.ctx.showWarning(event.errorMessage);
|
|
758
972
|
} else if (!event.skipped) {
|
|
759
973
|
this.ctx.rebuildChatFromMessages();
|
|
@@ -785,10 +999,7 @@ export class EventController {
|
|
|
785
999
|
}
|
|
786
1000
|
|
|
787
1001
|
async #handleAutoRetryStart(event: Extract<AgentSessionEvent, { type: "auto_retry_start" }>): Promise<void> {
|
|
788
|
-
this
|
|
789
|
-
this.ctx.editor.onEscape = () => {
|
|
790
|
-
this.ctx.session.abortRetry();
|
|
791
|
-
};
|
|
1002
|
+
this.#stopWorkingLoader();
|
|
792
1003
|
this.ctx.statusContainer.clear();
|
|
793
1004
|
const delaySeconds = Math.round(event.delayMs / 1000);
|
|
794
1005
|
this.ctx.retryLoader = new Loader(
|
|
@@ -803,10 +1014,6 @@ export class EventController {
|
|
|
803
1014
|
}
|
|
804
1015
|
|
|
805
1016
|
async #handleAutoRetryEnd(event: Extract<AgentSessionEvent, { type: "auto_retry_end" }>): Promise<void> {
|
|
806
|
-
if (this.ctx.retryEscapeHandler) {
|
|
807
|
-
this.ctx.editor.onEscape = this.ctx.retryEscapeHandler;
|
|
808
|
-
this.ctx.retryEscapeHandler = undefined;
|
|
809
|
-
}
|
|
810
1017
|
if (this.ctx.retryLoader) {
|
|
811
1018
|
this.ctx.retryLoader.stop();
|
|
812
1019
|
this.ctx.retryLoader = undefined;
|
|
@@ -831,16 +1038,31 @@ export class EventController {
|
|
|
831
1038
|
}
|
|
832
1039
|
|
|
833
1040
|
async #handleTtsrTriggered(event: Extract<AgentSessionEvent, { type: "ttsr_triggered" }>): Promise<void> {
|
|
1041
|
+
// Consecutive notifications (e.g. per-tool matches from one assistant
|
|
1042
|
+
// message) merge into the previous block instead of stacking. Mutating an
|
|
1043
|
+
// existing block is only safe while it sits inside the live region — a
|
|
1044
|
+
// still-mutating block above it means none of its rows have been committed
|
|
1045
|
+
// to native scrollback yet (commits are prefix-only and stop at the first
|
|
1046
|
+
// live block), so the grown block still repaints.
|
|
1047
|
+
const previous = this.#lastTtsrNotification;
|
|
1048
|
+
if (
|
|
1049
|
+
previous &&
|
|
1050
|
+
this.ctx.chatContainer.children.at(-1) === previous &&
|
|
1051
|
+
this.ctx.chatContainer.isWithinLiveRegion(previous)
|
|
1052
|
+
) {
|
|
1053
|
+
previous.addRules(event.rules);
|
|
1054
|
+
this.ctx.ui.requestRender();
|
|
1055
|
+
return;
|
|
1056
|
+
}
|
|
834
1057
|
const component = new TtsrNotificationComponent(event.rules);
|
|
835
1058
|
component.setExpanded(this.ctx.toolOutputExpanded);
|
|
836
|
-
this.ctx.
|
|
837
|
-
this
|
|
1059
|
+
this.ctx.present(component);
|
|
1060
|
+
this.#lastTtsrNotification = component;
|
|
838
1061
|
}
|
|
839
1062
|
|
|
840
1063
|
async #handleTodoReminder(event: Extract<AgentSessionEvent, { type: "todo_reminder" }>): Promise<void> {
|
|
841
1064
|
const component = new TodoReminderComponent(event.todos, event.attempt, event.maxAttempts);
|
|
842
|
-
this.ctx.
|
|
843
|
-
this.ctx.ui.requestRender();
|
|
1065
|
+
this.ctx.present(component);
|
|
844
1066
|
}
|
|
845
1067
|
|
|
846
1068
|
async #handleTodoAutoClear(_event: Extract<AgentSessionEvent, { type: "todo_auto_clear" }>): Promise<void> {
|
|
@@ -858,7 +1080,7 @@ export class EventController {
|
|
|
858
1080
|
this.#cancelIdleCompaction();
|
|
859
1081
|
// Don't schedule idle work while context maintenance is already running; the
|
|
860
1082
|
// maintenance flow may reset the session before this timer fires.
|
|
861
|
-
if (this.ctx.
|
|
1083
|
+
if (this.ctx.viewSession.isCompacting) return;
|
|
862
1084
|
|
|
863
1085
|
const idleSettings = settings.getGroup("compaction");
|
|
864
1086
|
if (!idleSettings.idleEnabled) return;
|
|
@@ -875,17 +1097,17 @@ export class EventController {
|
|
|
875
1097
|
this.#idleCompactionTimer = undefined;
|
|
876
1098
|
// Re-check conditions before firing. Pruning may have run between arming
|
|
877
1099
|
// the timer and now, dropping usage back below the idle threshold.
|
|
878
|
-
if (this.ctx.
|
|
879
|
-
if (this.ctx.
|
|
1100
|
+
if (this.ctx.viewSession.isStreaming) return;
|
|
1101
|
+
if (this.ctx.viewSession.isCompacting) return;
|
|
880
1102
|
if (this.ctx.editor.getText().trim()) return;
|
|
881
1103
|
if (this.#currentContextTokens() < threshold) return;
|
|
882
|
-
void this.ctx.
|
|
1104
|
+
void this.ctx.viewSession.runIdleCompaction();
|
|
883
1105
|
}, timeoutMs);
|
|
884
1106
|
this.#idleCompactionTimer.unref?.();
|
|
885
1107
|
}
|
|
886
1108
|
|
|
887
1109
|
#currentContextTokens(): number {
|
|
888
|
-
const lastAssistant = this.ctx.
|
|
1110
|
+
const lastAssistant = this.ctx.viewSession.agent.state.messages
|
|
889
1111
|
.slice()
|
|
890
1112
|
.reverse()
|
|
891
1113
|
.find((m): m is AssistantMessage => m.role === "assistant" && m.stopReason !== "aborted");
|
|
@@ -893,7 +1115,6 @@ export class EventController {
|
|
|
893
1115
|
}
|
|
894
1116
|
|
|
895
1117
|
sendCompletionNotification(): void {
|
|
896
|
-
if (this.ctx.isBackgrounded === false) return;
|
|
897
1118
|
const notify = settings.get("completion.notify");
|
|
898
1119
|
if (notify === "off") return;
|
|
899
1120
|
|
|
@@ -901,26 +1122,15 @@ export class EventController {
|
|
|
901
1122
|
// errored — those are not "Task complete" events. Mirrors the gate
|
|
902
1123
|
// already used by #currentContextTokens, #handleMessageEnd, and the
|
|
903
1124
|
// retry / TTSR / compaction skip paths across agent-session.ts.
|
|
904
|
-
const last = this.ctx.
|
|
1125
|
+
const last = this.ctx.viewSession.getLastAssistantMessage?.();
|
|
905
1126
|
if (last?.stopReason === "aborted" || last?.stopReason === "error") return;
|
|
906
1127
|
|
|
907
1128
|
const sessionName = this.ctx.sessionManager.getSessionName();
|
|
908
1129
|
TERMINAL.sendNotification({
|
|
909
|
-
title: sessionName ||
|
|
1130
|
+
title: sessionName || "Prometheus",
|
|
910
1131
|
body: "Complete",
|
|
911
1132
|
type: "completion",
|
|
912
1133
|
actions: "focus",
|
|
913
1134
|
});
|
|
914
1135
|
}
|
|
915
|
-
|
|
916
|
-
async handleBackgroundEvent(event: AgentSessionEvent): Promise<void> {
|
|
917
|
-
if (event.type !== "agent_end") {
|
|
918
|
-
return;
|
|
919
|
-
}
|
|
920
|
-
if (this.ctx.session.queuedMessageCount > 0 || this.ctx.session.isStreaming) {
|
|
921
|
-
return;
|
|
922
|
-
}
|
|
923
|
-
this.sendCompletionNotification();
|
|
924
|
-
await this.ctx.shutdown();
|
|
925
|
-
}
|
|
926
1136
|
}
|