@prometheus-ai/agent 0.5.4 → 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 +30 -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/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/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 +1202 -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/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/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/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 +1441 -387
- 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/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 +9 -7
- 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/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
|
@@ -11,6 +11,16 @@ export const DEFAULT_MAX_LINES = 3000;
|
|
|
11
11
|
export const DEFAULT_MAX_BYTES = 50 * 1024; // 50KB
|
|
12
12
|
export const DEFAULT_MAX_COLUMN = 512; // Max chars per grep match line
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Default artifact-on-disk cap for {@link OutputSink}.
|
|
16
|
+
*
|
|
17
|
+
* `0` means unbounded: by default, `artifact://<id>` references preserve the
|
|
18
|
+
* complete raw stream instead of a capped head/tail sample.
|
|
19
|
+
*/
|
|
20
|
+
export const ARTIFACT_DEFAULT_MAX_BYTES = 0;
|
|
21
|
+
/** Default head budget; the remainder becomes the rolling tail window. */
|
|
22
|
+
export const ARTIFACT_DEFAULT_HEAD_BYTES = 3 * 1024 * 1024; // 3 MiB
|
|
23
|
+
|
|
14
24
|
const NL = "\n";
|
|
15
25
|
const ELLIPSIS = "…";
|
|
16
26
|
|
|
@@ -58,6 +68,20 @@ export interface OutputSinkOptions {
|
|
|
58
68
|
onChunk?: (chunk: string) => void;
|
|
59
69
|
/** Minimum ms between onChunk calls. 0 = every chunk (default). */
|
|
60
70
|
chunkThrottleMs?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Optional cap on bytes written to the artifact-on-disk file. When the cap
|
|
73
|
+
* is hit, the head window is preserved verbatim and subsequent output feeds
|
|
74
|
+
* a rolling tail window; on close, the sink writes a single
|
|
75
|
+
* `[ARTIFACT TRUNCATED: …]` notice between them. Default
|
|
76
|
+
* {@link ARTIFACT_DEFAULT_MAX_BYTES} (unbounded).
|
|
77
|
+
*/
|
|
78
|
+
artifactMaxBytes?: number;
|
|
79
|
+
/**
|
|
80
|
+
* Bytes reserved for the head window of the capped artifact file. The
|
|
81
|
+
* tail window receives `artifactMaxBytes - artifactHeadBytes`. Default
|
|
82
|
+
* {@link ARTIFACT_DEFAULT_HEAD_BYTES}; clamped to `[0, artifactMaxBytes]`.
|
|
83
|
+
*/
|
|
84
|
+
artifactHeadBytes?: number;
|
|
61
85
|
}
|
|
62
86
|
|
|
63
87
|
export interface TruncationResult {
|
|
@@ -546,6 +570,66 @@ export function truncateMiddle(content: string, options: TruncationOptions = {})
|
|
|
546
570
|
};
|
|
547
571
|
}
|
|
548
572
|
|
|
573
|
+
// =============================================================================
|
|
574
|
+
// Inline byte cap — final defense at the tool-result boundary
|
|
575
|
+
// =============================================================================
|
|
576
|
+
|
|
577
|
+
/** Options for {@link enforceInlineByteCap}. */
|
|
578
|
+
export interface InlineByteCapOptions {
|
|
579
|
+
/** Inline byte budget. Defaults to {@link DEFAULT_MAX_BYTES}. */
|
|
580
|
+
maxBytes?: number;
|
|
581
|
+
/** What the text is, for the elision marker (e.g. "bash output"). */
|
|
582
|
+
label: string;
|
|
583
|
+
/**
|
|
584
|
+
* Persist the full text as a session artifact. When an artifact id is
|
|
585
|
+
* returned, a `[raw output: artifact://<id>]` footer is appended so the
|
|
586
|
+
* elided bytes stay recoverable.
|
|
587
|
+
*/
|
|
588
|
+
saveArtifact?: (full: string) => string | undefined | Promise<string | undefined>;
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/** Drop the partial last line of a head window (keep it if there is no newline at all). */
|
|
592
|
+
function trimHeadToLineBoundary(text: string): string {
|
|
593
|
+
const idx = text.lastIndexOf(NL);
|
|
594
|
+
return idx > 0 ? text.substring(0, idx) : text;
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/** Drop the partial first line of a tail window (keep it if there is no newline at all). */
|
|
598
|
+
function trimTailToLineBoundary(text: string): string {
|
|
599
|
+
const idx = text.indexOf(NL);
|
|
600
|
+
if (idx < 0 || idx === text.length - 1) return text;
|
|
601
|
+
return text.substring(idx + 1);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
/**
|
|
605
|
+
* Final-defense inline size guard for tool results.
|
|
606
|
+
*
|
|
607
|
+
* No-op when `text` fits within `maxBytes` (the common path). Otherwise keeps
|
|
608
|
+
* ~60% of the budget from the head and ~25% from the tail — cut on line
|
|
609
|
+
* boundaries, never splitting a multi-byte UTF-8 sequence — with an elision
|
|
610
|
+
* marker between. The remaining ~15% is slack for the marker and the optional
|
|
611
|
+
* `[raw output: artifact://<id>]` footer, so the result stays under `maxBytes`.
|
|
612
|
+
*/
|
|
613
|
+
export async function enforceInlineByteCap(text: string, options: InlineByteCapOptions): Promise<string> {
|
|
614
|
+
const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
615
|
+
if (maxBytes <= 0) return text;
|
|
616
|
+
const totalBytes = Buffer.byteLength(text, "utf-8");
|
|
617
|
+
if (totalBytes <= maxBytes) return text;
|
|
618
|
+
|
|
619
|
+
const head = trimHeadToLineBoundary(truncateHeadBytes(text, Math.floor(maxBytes * 0.6)).text);
|
|
620
|
+
const tail = trimTailToLineBoundary(truncateTailBytes(text, Math.floor(maxBytes * 0.25)).text);
|
|
621
|
+
const elidedBytes = Math.max(0, totalBytes - Buffer.byteLength(head, "utf-8") - Buffer.byteLength(tail, "utf-8"));
|
|
622
|
+
const marker = `[… elided ${elidedBytes} bytes of ${options.label} …]`;
|
|
623
|
+
let composed = `${head}\n${marker}\n${tail}`;
|
|
624
|
+
|
|
625
|
+
const artifactId = await options.saveArtifact?.(text);
|
|
626
|
+
if (artifactId) {
|
|
627
|
+
const sep = composed.endsWith(NL) ? "" : NL;
|
|
628
|
+
composed += `${sep}[raw output: artifact://${artifactId}]`;
|
|
629
|
+
}
|
|
630
|
+
return composed;
|
|
631
|
+
}
|
|
632
|
+
|
|
549
633
|
// =============================================================================
|
|
550
634
|
// TailBuffer — ring-style tail buffer with lazy joining
|
|
551
635
|
// =============================================================================
|
|
@@ -650,6 +734,7 @@ export class OutputSink {
|
|
|
650
734
|
#sawData = false;
|
|
651
735
|
#truncated = false;
|
|
652
736
|
#lastChunkTime = 0;
|
|
737
|
+
#pendingChunk = "";
|
|
653
738
|
|
|
654
739
|
// Per-line column cap streaming state (persists across `push` calls so a
|
|
655
740
|
// long line split across chunks still trips the same trigger).
|
|
@@ -675,6 +760,21 @@ export class OutputSink {
|
|
|
675
760
|
readonly #chunkThrottleMs: number;
|
|
676
761
|
readonly #maxColumns: number;
|
|
677
762
|
|
|
763
|
+
// Optional artifact-on-disk cap. When `#artifactMaxBytes > 0` the file sink
|
|
764
|
+
// owns a head budget + a rolling tail buffer; once the head is closed,
|
|
765
|
+
// subsequent chunks are diverted into `#artifactTailRing` (bounded by
|
|
766
|
+
// `#artifactTailBudget`). On `dump()` the tail is flushed back to the sink
|
|
767
|
+
// behind a `[ARTIFACT TRUNCATED: …]` notice. The default cap is disabled so
|
|
768
|
+
// advertised `artifact://<id>` captures are lossless.
|
|
769
|
+
readonly #artifactMaxBytes: number;
|
|
770
|
+
readonly #artifactHeadBudget: number;
|
|
771
|
+
readonly #artifactTailBudget: number;
|
|
772
|
+
#artifactHeadBytesWritten = 0;
|
|
773
|
+
#artifactHeadClosed = false;
|
|
774
|
+
#artifactTailRing = "";
|
|
775
|
+
#artifactTailRingBytes = 0;
|
|
776
|
+
#artifactTailIncomingBytes = 0;
|
|
777
|
+
|
|
678
778
|
constructor(options?: OutputSinkOptions) {
|
|
679
779
|
const {
|
|
680
780
|
artifactPath,
|
|
@@ -684,6 +784,8 @@ export class OutputSink {
|
|
|
684
784
|
maxColumns = 0,
|
|
685
785
|
onChunk,
|
|
686
786
|
chunkThrottleMs = 0,
|
|
787
|
+
artifactMaxBytes = ARTIFACT_DEFAULT_MAX_BYTES,
|
|
788
|
+
artifactHeadBytes = ARTIFACT_DEFAULT_HEAD_BYTES,
|
|
687
789
|
} = options ?? {};
|
|
688
790
|
this.#artifactPath = artifactPath;
|
|
689
791
|
this.#artifactId = artifactId;
|
|
@@ -692,6 +794,9 @@ export class OutputSink {
|
|
|
692
794
|
this.#maxColumns = Math.max(0, maxColumns);
|
|
693
795
|
this.#onChunk = onChunk;
|
|
694
796
|
this.#chunkThrottleMs = chunkThrottleMs;
|
|
797
|
+
this.#artifactMaxBytes = Math.max(0, artifactMaxBytes);
|
|
798
|
+
this.#artifactHeadBudget = Math.max(0, Math.min(artifactHeadBytes, this.#artifactMaxBytes));
|
|
799
|
+
this.#artifactTailBudget = Math.max(0, this.#artifactMaxBytes - this.#artifactHeadBudget);
|
|
695
800
|
}
|
|
696
801
|
|
|
697
802
|
/**
|
|
@@ -701,14 +806,20 @@ export class OutputSink {
|
|
|
701
806
|
push(chunk: string): void {
|
|
702
807
|
chunk = sanitizeWithOptionalSixelPassthrough(chunk, sanitizeText);
|
|
703
808
|
|
|
704
|
-
// Throttled onChunk:
|
|
809
|
+
// Throttled onChunk: coalesce chunks arriving inside the throttle window
|
|
810
|
+
// and flush the buffered concatenation on the next eligible tick (plus a
|
|
811
|
+
// final flush in dump()) so the preview never has silent gaps.
|
|
705
812
|
// Live preview gets the raw (pre-cap) chunk so the TUI never lags behind
|
|
706
813
|
// what reached the sink — the column cap is for the persisted LLM view.
|
|
707
814
|
if (this.#onChunk) {
|
|
708
815
|
const now = Date.now();
|
|
709
816
|
if (now - this.#lastChunkTime >= this.#chunkThrottleMs) {
|
|
710
817
|
this.#lastChunkTime = now;
|
|
711
|
-
this.#
|
|
818
|
+
const merged = this.#pendingChunk + chunk;
|
|
819
|
+
this.#pendingChunk = "";
|
|
820
|
+
this.#onChunk(merged);
|
|
821
|
+
} else {
|
|
822
|
+
this.#pendingChunk += chunk;
|
|
712
823
|
}
|
|
713
824
|
}
|
|
714
825
|
|
|
@@ -858,14 +969,18 @@ export class OutputSink {
|
|
|
858
969
|
/**
|
|
859
970
|
* Write a chunk to the artifact file. Handles the async file sink creation
|
|
860
971
|
* by queuing writes until the sink is ready, then draining synchronously.
|
|
972
|
+
* Once the sink is up, every byte flows through {@link #emitToSink} which
|
|
973
|
+
* owns the head + tail cap so artifacts cannot grow beyond
|
|
974
|
+
* `#artifactMaxBytes` on disk.
|
|
861
975
|
*/
|
|
862
976
|
#writeToFile(chunk: string): void {
|
|
863
977
|
if (this.#fileReady && this.#file) {
|
|
864
|
-
|
|
865
|
-
this.#file.sink.write(chunk);
|
|
978
|
+
this.#emitToSink(chunk);
|
|
866
979
|
return;
|
|
867
980
|
}
|
|
868
|
-
// File sink not yet created — queue this chunk and kick off creation
|
|
981
|
+
// File sink not yet created — queue this chunk and kick off creation.
|
|
982
|
+
// The queue is bounded only by how many chunks arrive before the open
|
|
983
|
+
// resolves (typically <2). The cap is enforced on drain.
|
|
869
984
|
if (!this.#pendingFileWrites) {
|
|
870
985
|
this.#pendingFileWrites = [chunk];
|
|
871
986
|
void this.#createFileSink();
|
|
@@ -874,26 +989,99 @@ export class OutputSink {
|
|
|
874
989
|
}
|
|
875
990
|
}
|
|
876
991
|
|
|
992
|
+
/**
|
|
993
|
+
* Cap-aware sink writer. Bytes flow into the head window verbatim until the
|
|
994
|
+
* budget is exhausted; subsequent bytes are diverted into a rolling tail
|
|
995
|
+
* ring, evicted from the front so total RAM stays bounded by
|
|
996
|
+
* `#artifactTailBudget`. `dump()` replays the ring behind a single notice
|
|
997
|
+
* line before closing the sink.
|
|
998
|
+
*
|
|
999
|
+
* When the cap is disabled (`#artifactMaxBytes === 0`) this collapses to a
|
|
1000
|
+
* straight pass-through, preserving the historical "stream everything"
|
|
1001
|
+
* contract.
|
|
1002
|
+
*/
|
|
1003
|
+
#emitToSink(chunk: string): void {
|
|
1004
|
+
if (!this.#file || chunk.length === 0) return;
|
|
1005
|
+
if (this.#artifactMaxBytes === 0) {
|
|
1006
|
+
this.#file.sink.write(chunk);
|
|
1007
|
+
return;
|
|
1008
|
+
}
|
|
1009
|
+
const chunkBytes = Buffer.byteLength(chunk, "utf-8");
|
|
1010
|
+
const room = this.#artifactHeadClosed ? 0 : this.#artifactHeadBudget - this.#artifactHeadBytesWritten;
|
|
1011
|
+
if (room >= chunkBytes) {
|
|
1012
|
+
this.#file.sink.write(chunk);
|
|
1013
|
+
this.#artifactHeadBytesWritten += chunkBytes;
|
|
1014
|
+
return;
|
|
1015
|
+
}
|
|
1016
|
+
let overflow = chunk;
|
|
1017
|
+
if (room > 0) {
|
|
1018
|
+
const headSlice = truncateHeadBytes(chunk, room);
|
|
1019
|
+
if (headSlice.bytes > 0) {
|
|
1020
|
+
this.#file.sink.write(headSlice.text);
|
|
1021
|
+
this.#artifactHeadBytesWritten += headSlice.bytes;
|
|
1022
|
+
}
|
|
1023
|
+
// Even when UTF-8 boundary safety leaves a few bytes of nominal room,
|
|
1024
|
+
// this chunk has already overflowed the head window. Close it now so a
|
|
1025
|
+
// later small ASCII chunk cannot be written before this overflow tail.
|
|
1026
|
+
this.#artifactHeadClosed = true;
|
|
1027
|
+
overflow = chunk.substring(headSlice.text.length);
|
|
1028
|
+
}
|
|
1029
|
+
if (overflow.length === 0 || this.#artifactTailBudget === 0) {
|
|
1030
|
+
// No tail budget: count the dropped bytes so the notice reflects them.
|
|
1031
|
+
if (overflow.length > 0) {
|
|
1032
|
+
this.#artifactTailIncomingBytes += Buffer.byteLength(overflow, "utf-8");
|
|
1033
|
+
}
|
|
1034
|
+
return;
|
|
1035
|
+
}
|
|
1036
|
+
this.#pushArtifactTail(overflow);
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
#pushArtifactTail(chunk: string): void {
|
|
1040
|
+
const chunkBytes = Buffer.byteLength(chunk, "utf-8");
|
|
1041
|
+
this.#artifactTailIncomingBytes += chunkBytes;
|
|
1042
|
+
const budget = this.#artifactTailBudget;
|
|
1043
|
+
if (chunkBytes >= budget) {
|
|
1044
|
+
// Chunk alone dominates — keep only its tail slice.
|
|
1045
|
+
const { text, bytes } = truncateTailBytes(chunk, budget);
|
|
1046
|
+
this.#artifactTailRing = text;
|
|
1047
|
+
this.#artifactTailRingBytes = bytes;
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1050
|
+
this.#artifactTailRing += chunk;
|
|
1051
|
+
this.#artifactTailRingBytes += chunkBytes;
|
|
1052
|
+
if (this.#artifactTailRingBytes > budget) {
|
|
1053
|
+
const { text, bytes } = truncateTailBytes(this.#artifactTailRing, budget);
|
|
1054
|
+
this.#artifactTailRing = text;
|
|
1055
|
+
this.#artifactTailRingBytes = bytes;
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
|
|
877
1059
|
async #createFileSink(): Promise<void> {
|
|
878
1060
|
if (!this.#artifactPath || this.#fileReady) return;
|
|
879
1061
|
try {
|
|
880
1062
|
const sink = Bun.file(this.#artifactPath).writer();
|
|
881
1063
|
this.#file = { path: this.#artifactPath, artifactId: this.#artifactId, sink };
|
|
1064
|
+
this.#fileReady = true;
|
|
1065
|
+
|
|
1066
|
+
// Head-retained bytes precede the rolling tail buffer in the capture.
|
|
1067
|
+
// Route through #emitToSink so they count against the artifact head
|
|
1068
|
+
// budget — a direct sink.write would let them escape the cap.
|
|
1069
|
+
if (this.#head.length > 0) {
|
|
1070
|
+
this.#emitToSink(this.#head);
|
|
1071
|
+
}
|
|
882
1072
|
|
|
883
1073
|
// Flush existing buffer to file BEFORE it gets trimmed further.
|
|
884
1074
|
if (this.#buffer.length > 0) {
|
|
885
|
-
|
|
1075
|
+
this.#emitToSink(this.#buffer);
|
|
886
1076
|
}
|
|
887
1077
|
|
|
888
|
-
// Drain any chunks that arrived while the sink was being created
|
|
1078
|
+
// Drain any chunks that arrived while the sink was being created.
|
|
889
1079
|
if (this.#pendingFileWrites) {
|
|
890
1080
|
for (const pending of this.#pendingFileWrites) {
|
|
891
|
-
|
|
1081
|
+
this.#emitToSink(pending);
|
|
892
1082
|
}
|
|
893
1083
|
this.#pendingFileWrites = undefined;
|
|
894
1084
|
}
|
|
895
|
-
|
|
896
|
-
this.#fileReady = true;
|
|
897
1085
|
} catch {
|
|
898
1086
|
try {
|
|
899
1087
|
await this.#file?.sink?.end();
|
|
@@ -902,6 +1090,7 @@ export class OutputSink {
|
|
|
902
1090
|
}
|
|
903
1091
|
this.#file = undefined;
|
|
904
1092
|
this.#pendingFileWrites = undefined;
|
|
1093
|
+
this.#fileReady = false;
|
|
905
1094
|
}
|
|
906
1095
|
}
|
|
907
1096
|
|
|
@@ -946,13 +1135,61 @@ export class OutputSink {
|
|
|
946
1135
|
this.#columnEllipsisAdded = false;
|
|
947
1136
|
this.#columnDroppedBytes = 0;
|
|
948
1137
|
this.#columnTruncatedLines = 0;
|
|
1138
|
+
this.#pendingChunk = "";
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
/**
|
|
1142
|
+
* Replay the rolling tail ring back into the artifact sink. When bytes
|
|
1143
|
+
* were actually dropped from the middle (the head budget was exhausted
|
|
1144
|
+
* *and* the tail ring evicted), a single `[ARTIFACT TRUNCATED: …]`
|
|
1145
|
+
* notice is injected between head and tail so a reader of
|
|
1146
|
+
* `artifact://<id>` understands the gap. When the total stream simply
|
|
1147
|
+
* spilled past the head budget but still fits below `artifactMaxBytes`,
|
|
1148
|
+
* `droppedBytes` is zero — head + tail together are the verbatim stream
|
|
1149
|
+
* and the notice is suppressed so we don't corrupt the artifact with a
|
|
1150
|
+
* misleading "0 B elided" marker (PR #2083 review by codex).
|
|
1151
|
+
*
|
|
1152
|
+
* No-op when the cap was never hit at all (head budget never exhausted,
|
|
1153
|
+
* tail ring empty).
|
|
1154
|
+
*/
|
|
1155
|
+
#flushArtifactTailIfCapped(): void {
|
|
1156
|
+
if (!this.#file) return;
|
|
1157
|
+
if (this.#artifactMaxBytes === 0) return;
|
|
1158
|
+
const tailBytes = this.#artifactTailRingBytes;
|
|
1159
|
+
const droppedBytes = Math.max(0, this.#artifactTailIncomingBytes - tailBytes);
|
|
1160
|
+
if (tailBytes === 0 && droppedBytes === 0) return;
|
|
1161
|
+
|
|
1162
|
+
if (droppedBytes > 0) {
|
|
1163
|
+
const headWritten = this.#artifactHeadBytesWritten;
|
|
1164
|
+
const totalCapped = headWritten + this.#artifactTailIncomingBytes;
|
|
1165
|
+
const headSep = headWritten > 0 ? "\n" : "";
|
|
1166
|
+
const tailSep = tailBytes > 0 && !this.#artifactTailRing.startsWith("\n") ? "\n" : "";
|
|
1167
|
+
const notice =
|
|
1168
|
+
`${headSep}[ARTIFACT TRUNCATED: kept first ${formatBytes(headWritten)} + last ${formatBytes(tailBytes)} ` +
|
|
1169
|
+
`of ${formatBytes(totalCapped)}; ${formatBytes(droppedBytes)} elided from the middle]${tailSep}`;
|
|
1170
|
+
this.#file.sink.write(notice);
|
|
1171
|
+
}
|
|
1172
|
+
if (tailBytes > 0) {
|
|
1173
|
+
this.#file.sink.write(this.#artifactTailRing);
|
|
1174
|
+
}
|
|
949
1175
|
}
|
|
950
1176
|
|
|
951
1177
|
async dump(notice?: string): Promise<OutputSummary> {
|
|
952
1178
|
const noticeLine = notice ? `[${notice}]\n` : "";
|
|
1179
|
+
|
|
1180
|
+
// Flush any chunk still held back by the throttle so the live preview
|
|
1181
|
+
// ends with the complete stream.
|
|
1182
|
+
if (this.#onChunk && this.#pendingChunk.length > 0) {
|
|
1183
|
+
const pending = this.#pendingChunk;
|
|
1184
|
+
this.#pendingChunk = "";
|
|
1185
|
+
this.#onChunk(pending);
|
|
1186
|
+
}
|
|
953
1187
|
const totalLines = this.#sawData ? this.#totalLines + 1 : 0;
|
|
954
1188
|
|
|
955
|
-
if (this.#file)
|
|
1189
|
+
if (this.#file) {
|
|
1190
|
+
this.#flushArtifactTailIfCapped();
|
|
1191
|
+
await this.#file.sink.end();
|
|
1192
|
+
}
|
|
956
1193
|
|
|
957
1194
|
// Compose the visible output. With head retention, splice head + marker
|
|
958
1195
|
// + tail when content was elided. Otherwise return the rolling buffer.
|
|
@@ -10,14 +10,14 @@ export interface ResolveInfo {
|
|
|
10
10
|
export interface RejectInfo {
|
|
11
11
|
/** The ToolChoice that was yielded but never (or unsuccessfully) served. */
|
|
12
12
|
choice: ToolChoice;
|
|
13
|
-
reason: "aborted" | "error" | "cleared" | "removed";
|
|
13
|
+
reason: "aborted" | "error" | "cleared" | "removed" | "unavailable" | "not_invoked";
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
/** "requeue" replays the lost yield next turn; "drop" (or void/undefined) discards it. */
|
|
17
17
|
export type RejectOutcome = "requeue" | "drop";
|
|
18
18
|
|
|
19
19
|
export interface DirectiveCallbacks {
|
|
20
|
-
/** Fires when the yield
|
|
20
|
+
/** Fires when the yield completed; onInvoked directives require the requested tool to run first. */
|
|
21
21
|
onResolved?: (info: ResolveInfo) => void;
|
|
22
22
|
/**
|
|
23
23
|
* Fires when the yield is being discarded. Return "requeue" to replay the
|
|
@@ -62,6 +62,7 @@ export function* onceGen(choice: ToolChoice): Generator<ToolChoice, void, unknow
|
|
|
62
62
|
interface InFlight {
|
|
63
63
|
directive: ToolChoiceDirective;
|
|
64
64
|
yielded: ToolChoice;
|
|
65
|
+
invoked: boolean;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
// ── Queue ───────────────────────────────────────────────────────────────────
|
|
@@ -116,7 +117,7 @@ export class ToolChoiceQueue {
|
|
|
116
117
|
this.#queue.shift();
|
|
117
118
|
continue;
|
|
118
119
|
}
|
|
119
|
-
this.#inFlight = { directive: head, yielded: result.value };
|
|
120
|
+
this.#inFlight = { directive: head, yielded: result.value, invoked: false };
|
|
120
121
|
return result.value;
|
|
121
122
|
}
|
|
122
123
|
return undefined;
|
|
@@ -125,14 +126,18 @@ export class ToolChoiceQueue {
|
|
|
125
126
|
// ── Lifecycle ─────────────────────────────────────────────────────────
|
|
126
127
|
|
|
127
128
|
/**
|
|
128
|
-
* The in-flight yield
|
|
129
|
-
*
|
|
130
|
-
*
|
|
129
|
+
* The in-flight yield completed normally. Directives with onInvoked are only
|
|
130
|
+
* consumed after their requested tool ran; a normal text turn or a different
|
|
131
|
+
* tool call requeues/rejects the directive instead.
|
|
131
132
|
*/
|
|
132
133
|
resolve(): void {
|
|
133
134
|
const inFlight = this.#inFlight;
|
|
134
|
-
this.#inFlight = undefined;
|
|
135
135
|
if (!inFlight) return;
|
|
136
|
+
if (inFlight.directive.callbacks.onInvoked && !inFlight.invoked) {
|
|
137
|
+
this.reject("not_invoked");
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
this.#inFlight = undefined;
|
|
136
141
|
|
|
137
142
|
this.#lastResolvedLabel = inFlight.directive.label;
|
|
138
143
|
inFlight.directive.callbacks.onResolved?.({ choice: inFlight.yielded });
|
|
@@ -155,12 +160,13 @@ export class ToolChoiceQueue {
|
|
|
155
160
|
|
|
156
161
|
if (outcome === "requeue") {
|
|
157
162
|
// Re-queue only the lost yield, not the rest of the sequence. Carry forward
|
|
158
|
-
//
|
|
159
|
-
// and can requeue itself again if the next turn also aborts.
|
|
163
|
+
// callbacks so the replayed yield still executes and finalizes correctly,
|
|
164
|
+
// and can requeue itself again if the next turn also aborts or skips it.
|
|
160
165
|
this.#queue.unshift({
|
|
161
166
|
generator: onceGen(inFlight.yielded),
|
|
162
167
|
label: `${inFlight.directive.label}-requeued`,
|
|
163
168
|
callbacks: {
|
|
169
|
+
onResolved: inFlight.directive.callbacks.onResolved,
|
|
164
170
|
onInvoked: inFlight.directive.callbacks.onInvoked,
|
|
165
171
|
onRejected: inFlight.directive.callbacks.onRejected,
|
|
166
172
|
},
|
|
@@ -173,9 +179,15 @@ export class ToolChoiceQueue {
|
|
|
173
179
|
return this.#inFlight !== undefined;
|
|
174
180
|
}
|
|
175
181
|
|
|
176
|
-
/**
|
|
182
|
+
/** Return the in-flight directive's onInvoked handler and mark it when called. */
|
|
177
183
|
peekInFlightInvoker(): ((input: unknown) => Promise<unknown> | unknown) | undefined {
|
|
178
|
-
|
|
184
|
+
const inFlight = this.#inFlight;
|
|
185
|
+
const onInvoked = inFlight?.directive.callbacks.onInvoked;
|
|
186
|
+
if (!inFlight || !onInvoked) return undefined;
|
|
187
|
+
return (input: unknown): Promise<unknown> | unknown => {
|
|
188
|
+
inFlight.invoked = true;
|
|
189
|
+
return onInvoked(input);
|
|
190
|
+
};
|
|
179
191
|
}
|
|
180
192
|
|
|
181
193
|
// ── Cleanup ───────────────────────────────────────────────────────────
|
|
@@ -10,7 +10,7 @@ export interface YieldDispatcher<P> {
|
|
|
10
10
|
|
|
11
11
|
export interface YieldQueueOptions {
|
|
12
12
|
isStreaming: () => boolean;
|
|
13
|
-
injectStreaming(msg: AgentMessage): void;
|
|
13
|
+
injectStreaming?(msg: AgentMessage): void;
|
|
14
14
|
injectIdle(messages: AgentMessage[]): Promise<void>;
|
|
15
15
|
scheduleIdleFlush(run: () => Promise<void>): void;
|
|
16
16
|
}
|
|
@@ -85,7 +85,7 @@ export class YieldQueue {
|
|
|
85
85
|
if (!message) continue;
|
|
86
86
|
if (mode === "streaming") {
|
|
87
87
|
try {
|
|
88
|
-
this.#options.injectStreaming(message);
|
|
88
|
+
this.#options.injectStreaming?.(message);
|
|
89
89
|
} catch (error) {
|
|
90
90
|
logger.warn("Yield queue streaming dispatch failed", { kind, error: formatError(error) });
|
|
91
91
|
}
|
|
@@ -102,6 +102,24 @@ export class YieldQueue {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Snapshot and remove all queued entries, returning one lazy thunk per kind.
|
|
107
|
+
* Each thunk applies the dispatcher's staleness filter and builds the batched
|
|
108
|
+
* message only when called — so the consumer (the agent loop) decides, at the
|
|
109
|
+
* moment it injects, whether the message is still worth delivering (a thunk may
|
|
110
|
+
* return null to skip). Background-job completions and late diagnostics reach
|
|
111
|
+
* the model between requests without the agent having to stop.
|
|
112
|
+
*/
|
|
113
|
+
drainLazy(): Array<() => AgentMessage | null> {
|
|
114
|
+
const thunks: Array<() => AgentMessage | null> = [];
|
|
115
|
+
for (const [kind, dispatcher] of this.#dispatchers) {
|
|
116
|
+
const entries = this.#drain(kind);
|
|
117
|
+
if (entries.length === 0) continue;
|
|
118
|
+
thunks.push(() => this.#build(kind, dispatcher, entries));
|
|
119
|
+
}
|
|
120
|
+
return thunks;
|
|
121
|
+
}
|
|
122
|
+
|
|
105
123
|
clear(): void {
|
|
106
124
|
this.#entries.clear();
|
|
107
125
|
this.#idleFlushPending = false;
|
|
@@ -5,13 +5,37 @@ import type { AcpBuiltinSlashCommandResult, SlashCommandRuntime } from "./types"
|
|
|
5
5
|
|
|
6
6
|
export type { AcpBuiltinSlashCommandResult } from "./types";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* All names (primary + aliases) that are reserved by ACP builtins. Used to
|
|
10
|
+
* filter out extension commands that would shadow a builtin or its alias at
|
|
11
|
+
* dispatch time (e.g. `models` is an alias for `/model`, so an extension
|
|
12
|
+
* registering `models` would appear in the palette but execute the builtin).
|
|
13
|
+
*/
|
|
14
|
+
export const ACP_BUILTIN_RESERVED_NAMES: ReadonlySet<string> = new Set(
|
|
15
|
+
BUILTIN_SLASH_COMMANDS_INTERNAL.filter(c => c.handle !== undefined).flatMap(c => [c.name, ...(c.aliases ?? [])]),
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Whether an extension command named `name` would be captured by ACP builtin
|
|
20
|
+
* dispatch before reaching the extension handler. Beyond exact name/alias
|
|
21
|
+
* collisions, `parseSlashCommand` treats `:` as a name/args separator, so a
|
|
22
|
+
* colon-namespaced name whose prefix is a handled builtin (e.g. `model:foo`)
|
|
23
|
+
* executes the `/model` builtin with `foo` as args. Such names must not be
|
|
24
|
+
* advertised to ACP clients.
|
|
25
|
+
*/
|
|
26
|
+
export function isAcpBuiltinShadowedName(name: string): boolean {
|
|
27
|
+
if (ACP_BUILTIN_RESERVED_NAMES.has(name)) return true;
|
|
28
|
+
const colon = name.indexOf(":");
|
|
29
|
+
return colon !== -1 && ACP_BUILTIN_RESERVED_NAMES.has(name.slice(0, colon));
|
|
30
|
+
}
|
|
31
|
+
|
|
8
32
|
/**
|
|
9
33
|
* Commands advertised to ACP clients. Entries without a text-mode `handle`
|
|
10
34
|
* (e.g. `/quit`, `/login`, dashboards) are filtered out so the client doesn't
|
|
11
35
|
* see commands it cannot drive.
|
|
12
36
|
*/
|
|
13
37
|
export const ACP_BUILTIN_SLASH_COMMANDS: AvailableCommand[] = BUILTIN_SLASH_COMMANDS_INTERNAL.filter(
|
|
14
|
-
command => command.handle !== undefined
|
|
38
|
+
command => command.handle !== undefined,
|
|
15
39
|
).map(command => {
|
|
16
40
|
// Honor mode-specific copy: ACP clients receive concise text-mode
|
|
17
41
|
// descriptions/hints when the spec sets `acpDescription` / `acpInputHint`,
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { AvailableCommand } from "@agentclientprotocol/sdk";
|
|
2
|
+
import type { SkillsSettings } from "../config/settings";
|
|
3
|
+
import type { LoadedCustomCommand } from "../extensibility/custom-commands";
|
|
4
|
+
import type { ExtensionRunner } from "../extensibility/extensions";
|
|
5
|
+
import { getSkillSlashCommandName, type Skill } from "../extensibility/skills";
|
|
6
|
+
import { type FileSlashCommand, loadSlashCommands } from "../extensibility/slash-commands";
|
|
7
|
+
import { ACP_BUILTIN_RESERVED_NAMES, isAcpBuiltinShadowedName } from "./acp-builtins";
|
|
8
|
+
import { BUILTIN_SLASH_COMMANDS_INTERNAL } from "./builtin-registry";
|
|
9
|
+
|
|
10
|
+
export type AvailableSlashCommandSource = "builtin" | "skill" | "extension" | "custom" | "mcp_prompt" | "file";
|
|
11
|
+
|
|
12
|
+
export interface InternalAvailableSlashCommand {
|
|
13
|
+
name: string;
|
|
14
|
+
aliases?: string[];
|
|
15
|
+
description?: string;
|
|
16
|
+
input?: { hint: string };
|
|
17
|
+
subcommands?: Array<{ name: string; description?: string; usage?: string }>;
|
|
18
|
+
source: AvailableSlashCommandSource;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface AvailableCommandsSession {
|
|
22
|
+
readonly extensionRunner?: ExtensionRunner;
|
|
23
|
+
readonly customCommands: ReadonlyArray<LoadedCustomCommand>;
|
|
24
|
+
readonly mcpPromptCommands?: ReadonlyArray<LoadedCustomCommand>;
|
|
25
|
+
readonly skills: ReadonlyArray<Skill>;
|
|
26
|
+
readonly skillsSettings?: SkillsSettings;
|
|
27
|
+
setSlashCommands(slashCommands: FileSlashCommand[]): void;
|
|
28
|
+
sessionManager: { getCwd(): string };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export async function buildAvailableSlashCommands(
|
|
32
|
+
session: AvailableCommandsSession,
|
|
33
|
+
loadFileCommands: (cwd: string) => Promise<FileSlashCommand[]> = cwd => loadSlashCommands({ cwd }),
|
|
34
|
+
): Promise<InternalAvailableSlashCommand[]> {
|
|
35
|
+
const commands: InternalAvailableSlashCommand[] = [];
|
|
36
|
+
const seenNames = new Set<string>();
|
|
37
|
+
const appendCommand = (command: InternalAvailableSlashCommand): void => {
|
|
38
|
+
if (seenNames.has(command.name)) return;
|
|
39
|
+
seenNames.add(command.name);
|
|
40
|
+
commands.push(command);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
for (const command of BUILTIN_SLASH_COMMANDS_INTERNAL) {
|
|
44
|
+
if (!command.handle) continue;
|
|
45
|
+
const hint = command.acpInputHint ?? command.inlineHint;
|
|
46
|
+
appendCommand({
|
|
47
|
+
name: command.name,
|
|
48
|
+
aliases: command.aliases,
|
|
49
|
+
description: command.acpDescription ?? command.description,
|
|
50
|
+
input: hint ? { hint } : undefined,
|
|
51
|
+
subcommands: command.subcommands,
|
|
52
|
+
source: "builtin",
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (session.skillsSettings?.enableSkillCommands) {
|
|
57
|
+
for (const skill of session.skills) {
|
|
58
|
+
appendCommand({
|
|
59
|
+
name: getSkillSlashCommandName(skill),
|
|
60
|
+
description: skill.description || `Run ${skill.name} skill`,
|
|
61
|
+
input: { hint: "arguments" },
|
|
62
|
+
source: "skill",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const runner = session.extensionRunner;
|
|
68
|
+
if (runner) {
|
|
69
|
+
for (const command of runner.getRegisteredCommands(ACP_BUILTIN_RESERVED_NAMES)) {
|
|
70
|
+
if (isAcpBuiltinShadowedName(command.name)) continue;
|
|
71
|
+
appendCommand({
|
|
72
|
+
name: command.name,
|
|
73
|
+
description: command.description ?? "(extension command)",
|
|
74
|
+
input: { hint: "arguments" },
|
|
75
|
+
source: "extension",
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
for (const command of session.customCommands) {
|
|
81
|
+
const source: AvailableSlashCommandSource = command.path?.startsWith("mcp:") ? "mcp_prompt" : "custom";
|
|
82
|
+
appendCommand({
|
|
83
|
+
name: command.command.name,
|
|
84
|
+
description: command.command.description,
|
|
85
|
+
input: { hint: "arguments" },
|
|
86
|
+
source,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const fileCommands = await loadFileCommands(session.sessionManager.getCwd());
|
|
91
|
+
session.setSlashCommands(fileCommands);
|
|
92
|
+
for (const command of fileCommands) {
|
|
93
|
+
appendCommand({ name: command.name, description: command.description, source: "file" });
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
return commands;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function toAcpAvailableCommands(commands: readonly InternalAvailableSlashCommand[]): AvailableCommand[] {
|
|
100
|
+
return commands.map(command => ({
|
|
101
|
+
name: command.name,
|
|
102
|
+
description: command.description ?? "",
|
|
103
|
+
input: command.input,
|
|
104
|
+
}));
|
|
105
|
+
}
|