@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
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-side handler for the eval `completion()` helper.
|
|
3
|
+
*
|
|
4
|
+
* Both eval runtimes (JS worker + Python kernel) route helper→host calls
|
|
5
|
+
* through {@link callSessionTool}. Reserving the synthetic tool name
|
|
6
|
+
* {@link EVAL_COMPLETION_BRIDGE_NAME} lets a single host handler serve both
|
|
7
|
+
* transports without registering an agent-visible tool: cell code calls
|
|
8
|
+
* `completion(prompt, opts)`, the prelude forwards `{ prompt, model, system?, schema? }`
|
|
9
|
+
* through the bridge, and this module performs one stateless completion.
|
|
10
|
+
*
|
|
11
|
+
* The call is oneshot and toolless from the model's perspective — pure text
|
|
12
|
+
* in, text (or, with `schema`, a structured object) out.
|
|
13
|
+
*/
|
|
14
|
+
import { instrumentedCompleteSimple, resolveTelemetry } from "@prometheus-ai/agent-core";
|
|
15
|
+
import { type Api, Effort, type Model, type Tool } from "@prometheus-ai/ai";
|
|
16
|
+
import { getSupportedEfforts } from "@prometheus-ai/catalog/model-thinking";
|
|
17
|
+
import { z } from "zod/v4";
|
|
18
|
+
import { extractTextContent, extractToolCall, parseJsonPayload } from "../commit/utils";
|
|
19
|
+
|
|
20
|
+
import {
|
|
21
|
+
expandRoleAlias,
|
|
22
|
+
formatModelString,
|
|
23
|
+
getModelMatchPreferences,
|
|
24
|
+
resolveModelFromString,
|
|
25
|
+
} from "../config/model-resolver";
|
|
26
|
+
import type { ToolSession } from "../tools";
|
|
27
|
+
import { ToolError } from "../tools/tool-errors";
|
|
28
|
+
import { withBridgeTimeoutPause } from "./bridge-timeout";
|
|
29
|
+
import type { JsStatusEvent } from "./js/shared/types";
|
|
30
|
+
|
|
31
|
+
/** Synthetic bridge name reserved for the `completion()` helper across both runtimes. */
|
|
32
|
+
export const EVAL_COMPLETION_BRIDGE_NAME = "__completion__";
|
|
33
|
+
|
|
34
|
+
/** Synthetic tool the model is forced to call when a `schema` is supplied. */
|
|
35
|
+
const STRUCTURED_TOOL_NAME = "respond";
|
|
36
|
+
|
|
37
|
+
type CompletionTier = "smol" | "default" | "slow";
|
|
38
|
+
|
|
39
|
+
const TIER_TO_PATTERN: Record<CompletionTier, string> = {
|
|
40
|
+
smol: "pi/smol",
|
|
41
|
+
default: "pi/default",
|
|
42
|
+
slow: "pi/slow",
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const completionArgsSchema = z.object({
|
|
46
|
+
prompt: z.string().min(1, "prompt must be a non-empty string"),
|
|
47
|
+
model: z.enum(["smol", "default", "slow"]).default("default"),
|
|
48
|
+
system: z.string().optional(),
|
|
49
|
+
schema: z.record(z.string(), z.unknown()).optional(),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export interface EvalCompletionBridgeOptions {
|
|
53
|
+
session: ToolSession;
|
|
54
|
+
signal?: AbortSignal;
|
|
55
|
+
emitStatus?: (event: JsStatusEvent) => void;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface EvalCompletionResult {
|
|
59
|
+
text: string;
|
|
60
|
+
details: { model: string; tier: CompletionTier; structured: boolean };
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Resolve a tier to a concrete {@link Model}. `default` prefers the session's
|
|
65
|
+
* active model and falls back to the `pi/default` role; `smol`/`slow` resolve
|
|
66
|
+
* their respective role patterns. Returns `undefined` when nothing matches.
|
|
67
|
+
*/
|
|
68
|
+
function resolveTierModel(tier: CompletionTier, session: ToolSession): Model<Api> | undefined {
|
|
69
|
+
const modelRegistry = session.modelRegistry;
|
|
70
|
+
if (!modelRegistry) return undefined;
|
|
71
|
+
const available = modelRegistry.getAvailable();
|
|
72
|
+
if (available.length === 0) return undefined;
|
|
73
|
+
|
|
74
|
+
const matchPreferences = getModelMatchPreferences(session.settings);
|
|
75
|
+
const resolve = (pattern: string | undefined): Model<Api> | undefined => {
|
|
76
|
+
if (!pattern) return undefined;
|
|
77
|
+
const expanded = expandRoleAlias(pattern, session.settings);
|
|
78
|
+
return resolveModelFromString(expanded, available, matchPreferences, modelRegistry);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
if (tier === "default") {
|
|
82
|
+
const activePattern = session.getActiveModelString?.() ?? session.getModelString?.();
|
|
83
|
+
return resolve(activePattern) ?? resolve(TIER_TO_PATTERN.default);
|
|
84
|
+
}
|
|
85
|
+
return resolve(TIER_TO_PATTERN[tier]);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Choose the reasoning effort for a tier. Only `slow` opts into thinking, and
|
|
90
|
+
* only on reasoning-capable models — guarding against `requireSupportedEffort`
|
|
91
|
+
* throwing downstream on models that cannot reason. Clamps to the highest
|
|
92
|
+
* supported effort so a reasoning model without `high` does not 400.
|
|
93
|
+
*/
|
|
94
|
+
function reasoningForTier(tier: CompletionTier, model: Model<Api>): Effort | undefined {
|
|
95
|
+
if (tier !== "slow" || !model.reasoning) return undefined;
|
|
96
|
+
const efforts = getSupportedEfforts(model);
|
|
97
|
+
if (efforts.length === 0) return undefined;
|
|
98
|
+
return efforts.includes(Effort.High) ? Effort.High : efforts[efforts.length - 1];
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Run a single stateless completion on behalf of an eval cell's `completion()` call.
|
|
103
|
+
* Returns a `{ text, details }` value shaped like a {@link callSessionTool}
|
|
104
|
+
* result so the existing bridge transport carries it to either runtime.
|
|
105
|
+
*/
|
|
106
|
+
export async function runEvalCompletion(
|
|
107
|
+
args: unknown,
|
|
108
|
+
options: EvalCompletionBridgeOptions,
|
|
109
|
+
): Promise<EvalCompletionResult> {
|
|
110
|
+
const parsed = completionArgsSchema.safeParse(args);
|
|
111
|
+
if (!parsed.success) {
|
|
112
|
+
const issue = parsed.error.issues[0];
|
|
113
|
+
const where = issue?.path.length ? `${issue.path.join(".")}: ` : "";
|
|
114
|
+
throw new ToolError(`completion() received invalid arguments: ${where}${issue?.message ?? "bad input"}`);
|
|
115
|
+
}
|
|
116
|
+
const { prompt, model: tier, system, schema } = parsed.data;
|
|
117
|
+
|
|
118
|
+
const model = resolveTierModel(tier, options.session);
|
|
119
|
+
if (!model) {
|
|
120
|
+
throw new ToolError(
|
|
121
|
+
`completion() could not resolve a model for the "${tier}" tier. Configure modelRoles.${tier === "default" ? "default" : tier} or ensure a provider is available.`,
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const registry = options.session.modelRegistry;
|
|
126
|
+
const apiKey = await registry?.getApiKey(model);
|
|
127
|
+
if (!registry || !apiKey) {
|
|
128
|
+
throw new ToolError(
|
|
129
|
+
`completion() has no API key for ${formatModelString(model)}. Configure credentials for this provider or choose another tier.`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const tools: Tool[] | undefined = schema
|
|
134
|
+
? [
|
|
135
|
+
{
|
|
136
|
+
name: STRUCTURED_TOOL_NAME,
|
|
137
|
+
description: "Return your answer by calling this tool with the requested structured fields.",
|
|
138
|
+
parameters: schema,
|
|
139
|
+
strict: false,
|
|
140
|
+
},
|
|
141
|
+
]
|
|
142
|
+
: undefined;
|
|
143
|
+
|
|
144
|
+
const telemetry = resolveTelemetry(options.session.getTelemetry?.(), options.session.getSessionId?.() ?? undefined);
|
|
145
|
+
|
|
146
|
+
// Some providers (notably openai-codex) require a non-empty `instructions`
|
|
147
|
+
// field on every Responses request and 400 with "Instructions are required"
|
|
148
|
+
// when it is missing. Fall back to a minimal default so `completion(prompt)` works
|
|
149
|
+
// without forcing every caller to pass a `system` prompt.
|
|
150
|
+
const systemPrompt = system ? [system] : ["You are a helpful assistant."];
|
|
151
|
+
|
|
152
|
+
// Suspend eval timeout accounting while the model request owns control. The
|
|
153
|
+
// timeout clock restarts once the bridge returns to the cell runtime.
|
|
154
|
+
const response = await withBridgeTimeoutPause(options.emitStatus, () =>
|
|
155
|
+
instrumentedCompleteSimple(
|
|
156
|
+
model,
|
|
157
|
+
{
|
|
158
|
+
systemPrompt,
|
|
159
|
+
messages: [{ role: "user", content: [{ type: "text", text: prompt }], timestamp: Date.now() }],
|
|
160
|
+
tools,
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
apiKey: registry.resolver(model, options.session.getSessionId?.() ?? undefined),
|
|
164
|
+
signal: options.signal,
|
|
165
|
+
reasoning: reasoningForTier(tier, model),
|
|
166
|
+
toolChoice: schema ? { type: "tool", name: STRUCTURED_TOOL_NAME } : undefined,
|
|
167
|
+
},
|
|
168
|
+
{ telemetry, oneshotKind: "eval_completion" },
|
|
169
|
+
),
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
if (response.stopReason === "error") {
|
|
173
|
+
throw new ToolError(response.errorMessage ?? "completion() request failed.");
|
|
174
|
+
}
|
|
175
|
+
if (response.stopReason === "aborted") {
|
|
176
|
+
throw new ToolError("completion() request aborted.");
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let resultText: string;
|
|
180
|
+
if (schema) {
|
|
181
|
+
const call = extractToolCall(response, STRUCTURED_TOOL_NAME);
|
|
182
|
+
let value: unknown;
|
|
183
|
+
if (call) {
|
|
184
|
+
value = call.arguments;
|
|
185
|
+
} else {
|
|
186
|
+
const text = extractTextContent(response);
|
|
187
|
+
if (!text) throw new ToolError("completion() returned no structured response.");
|
|
188
|
+
try {
|
|
189
|
+
value = parseJsonPayload(text);
|
|
190
|
+
} catch {
|
|
191
|
+
throw new ToolError("completion() did not return a structured response matching the schema.");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
resultText = JSON.stringify(value);
|
|
195
|
+
} else {
|
|
196
|
+
resultText = extractTextContent(response);
|
|
197
|
+
if (!resultText) throw new ToolError("completion() returned no text output.");
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
options.emitStatus?.({ op: "completion", model: formatModelString(model), tier, chars: resultText.length });
|
|
201
|
+
|
|
202
|
+
return { text: resultText, details: { model: formatModelString(model), tier, structured: Boolean(schema) } };
|
|
203
|
+
}
|
package/src/eval/idle-timeout.ts
CHANGED
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* A cell's `timeout` bounds time while the Python kernel or JS VM is in control.
|
|
5
5
|
* Host-side bridge calls can {@link pause} the watchdog so delegated
|
|
6
|
-
* `agent()`/`parallel()`/`
|
|
6
|
+
* `agent()`/`parallel()`/`completion()` work is ignored completely, then {@link resume}
|
|
7
7
|
* starts a fresh timeout window once the runtime gets control back.
|
|
8
8
|
*
|
|
9
|
-
* The active timer self-reschedules instead of being torn down on every
|
|
10
|
-
* activity event, so frequent activity costs one timestamp write per event.
|
|
11
9
|
* Pause is reference-counted because `parallel()` can have multiple bridge calls
|
|
12
10
|
* in flight at once.
|
|
13
11
|
*/
|
|
@@ -36,11 +34,6 @@ export class IdleTimeout {
|
|
|
36
34
|
return this.#idleMs;
|
|
37
35
|
}
|
|
38
36
|
|
|
39
|
-
/** Record runtime activity, pushing the active deadline forward by `idleMs`. */
|
|
40
|
-
bump(): void {
|
|
41
|
-
if (this.#settled || this.#pauseDepth > 0) return;
|
|
42
|
-
this.#deadlineMs = Date.now() + this.#idleMs;
|
|
43
|
-
}
|
|
44
37
|
/** Suspend timeout accounting while control is delegated to host-side work. */
|
|
45
38
|
pause(): void {
|
|
46
39
|
if (this.#settled) return;
|
|
@@ -86,8 +79,8 @@ export class IdleTimeout {
|
|
|
86
79
|
if (this.#settled || this.#pauseDepth > 0) return;
|
|
87
80
|
const remainingMs = this.#deadlineMs - Date.now();
|
|
88
81
|
if (remainingMs > 0) {
|
|
89
|
-
//
|
|
90
|
-
// out the remaining window instead of firing early.
|
|
82
|
+
// The deadline moved forward (resume re-arming) after this timer was
|
|
83
|
+
// armed; wait out the remaining window instead of firing early.
|
|
91
84
|
this.#arm(remainingMs);
|
|
92
85
|
return;
|
|
93
86
|
}
|
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { logger, Snowflake, workerHostEntry } from "@prometheus-ai/utils";
|
|
2
2
|
import type { ToolSession } from "../../tools";
|
|
3
3
|
import { ToolAbortError, ToolError } from "../../tools/tool-errors";
|
|
4
4
|
import { callSessionTool, type JsStatusEvent } from "./tool-bridge";
|
|
5
5
|
import { WorkerCore } from "./worker-core";
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// Bun's `--compile` bundler discovers, the `new URL` form is what makes dev
|
|
9
|
-
// runs portable across cwds. The worker is registered as an additional
|
|
10
|
-
// `--compile` entrypoint in `scripts/build-binary.ts`.
|
|
6
|
+
// Coding-agent binary/bundle workers route through the CLI entrypoint with a
|
|
7
|
+
// hidden argv mode, so compiled/npm builds only need one JavaScript entry.
|
|
11
8
|
import type {
|
|
12
9
|
JsDisplayOutput,
|
|
13
10
|
RunErrorPayload,
|
|
@@ -30,6 +27,7 @@ interface WorkerHandle {
|
|
|
30
27
|
mode: "worker" | "inline";
|
|
31
28
|
send(msg: WorkerInbound): void;
|
|
32
29
|
onMessage(handler: (msg: WorkerOutbound) => void): () => void;
|
|
30
|
+
close(): Promise<boolean>;
|
|
33
31
|
terminate(): Promise<void>;
|
|
34
32
|
}
|
|
35
33
|
|
|
@@ -52,14 +50,22 @@ interface JsSession {
|
|
|
52
50
|
|
|
53
51
|
const sessions = new Map<string, JsSession>();
|
|
54
52
|
const startingSessions = new Map<string, Promise<JsSession>>();
|
|
55
|
-
const resettingSessions = new
|
|
56
|
-
|
|
53
|
+
const resettingSessions = new Map<string, Promise<void>>();
|
|
54
|
+
// Worker startup (module-graph import + WorkerCore construction) is infrastructure
|
|
55
|
+
// cost, not user compute. Floor it independently of Bun's 5s default per-test timeout
|
|
56
|
+
// so a slow cold-start under load isn't aborted mid-init — terminating a still-
|
|
57
|
+
// initializing Bun worker triggers the same kind of terminate-race that motivates
|
|
58
|
+
// avoiding `vm.runInContext` (see shared/indirect-eval.ts), here surfacing as a
|
|
59
|
+
// SIGILL/SIGSEGV. Callers that pass a larger per-cell budget still dominate.
|
|
60
|
+
const WORKER_INIT_TIMEOUT_MS = 15_000;
|
|
61
|
+
const WORKER_CLOSE_TIMEOUT_MS = 1_000;
|
|
57
62
|
|
|
58
63
|
export async function executeInVmContext(options: {
|
|
59
64
|
sessionKey: string;
|
|
60
65
|
sessionId: string;
|
|
61
66
|
cwd: string;
|
|
62
67
|
session: ToolSession;
|
|
68
|
+
localRoots?: Record<string, string>;
|
|
63
69
|
reset?: boolean;
|
|
64
70
|
code: string;
|
|
65
71
|
filename: string;
|
|
@@ -67,21 +73,32 @@ export async function executeInVmContext(options: {
|
|
|
67
73
|
runState: VmRunState;
|
|
68
74
|
}): Promise<{ value: unknown }> {
|
|
69
75
|
if (options.reset) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
resettingSessions.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
resettingSessions.
|
|
76
|
+
// Coalesce concurrent resets: an existing in-flight reset already
|
|
77
|
+
// produces a fresh context, so a follow-up `reset: true` cell should
|
|
78
|
+
// just wait for it rather than failing the user-visible call.
|
|
79
|
+
const inFlight = resettingSessions.get(options.sessionKey);
|
|
80
|
+
if (inFlight) await inFlight.catch(() => undefined);
|
|
81
|
+
else {
|
|
82
|
+
const resetPromise = resetVmContext(options.sessionKey);
|
|
83
|
+
resettingSessions.set(
|
|
84
|
+
options.sessionKey,
|
|
85
|
+
resetPromise.then(() => undefined),
|
|
86
|
+
);
|
|
87
|
+
try {
|
|
88
|
+
await resetPromise;
|
|
89
|
+
} finally {
|
|
90
|
+
resettingSessions.delete(options.sessionKey);
|
|
91
|
+
}
|
|
78
92
|
}
|
|
79
|
-
} else
|
|
80
|
-
|
|
93
|
+
} else {
|
|
94
|
+
// Internal coordination: wait for any in-flight reset to settle and
|
|
95
|
+
// then run on the freshly-rebuilt context.
|
|
96
|
+
const inFlight = resettingSessions.get(options.sessionKey);
|
|
97
|
+
if (inFlight) await inFlight.catch(() => undefined);
|
|
81
98
|
}
|
|
82
99
|
const session = await acquireSession(
|
|
83
100
|
options.sessionKey,
|
|
84
|
-
{ cwd: options.cwd, sessionId: options.sessionId },
|
|
101
|
+
{ cwd: options.cwd, sessionId: options.sessionId, localRoots: options.localRoots },
|
|
85
102
|
options.timeoutMs,
|
|
86
103
|
);
|
|
87
104
|
return await runOnce(session, options);
|
|
@@ -91,7 +108,7 @@ export async function resetVmContext(sessionKey: string): Promise<void> {
|
|
|
91
108
|
const session = sessions.get(sessionKey) ?? (await startingSessions.get(sessionKey)?.catch(() => undefined));
|
|
92
109
|
if (!session) return;
|
|
93
110
|
sessions.delete(sessionKey);
|
|
94
|
-
await killSession(session, new ToolError("JS context reset"));
|
|
111
|
+
await killSession(session, new ToolError("JS context reset"), { force: false });
|
|
95
112
|
}
|
|
96
113
|
|
|
97
114
|
export async function disposeAllVmContexts(): Promise<void> {
|
|
@@ -104,7 +121,7 @@ export async function disposeAllVmContexts(): Promise<void> {
|
|
|
104
121
|
if (!all.includes(result.value)) all.push(result.value);
|
|
105
122
|
}
|
|
106
123
|
sessions.clear();
|
|
107
|
-
await Promise.all(all.map(session => killSession(session, new ToolError("JS context disposed"))));
|
|
124
|
+
await Promise.all(all.map(session => killSession(session, new ToolError("JS context disposed"), { force: false })));
|
|
108
125
|
}
|
|
109
126
|
|
|
110
127
|
async function runOnce(
|
|
@@ -113,6 +130,7 @@ async function runOnce(
|
|
|
113
130
|
sessionId: string;
|
|
114
131
|
cwd: string;
|
|
115
132
|
session: ToolSession;
|
|
133
|
+
localRoots?: Record<string, string>;
|
|
116
134
|
code: string;
|
|
117
135
|
filename: string;
|
|
118
136
|
runState: VmRunState;
|
|
@@ -137,7 +155,7 @@ async function runOnce(
|
|
|
137
155
|
// Cancel any in-flight tool calls first.
|
|
138
156
|
for (const ctrl of pending.toolCalls.values()) ctrl.abort(abortError);
|
|
139
157
|
// Hard-kill the worker — only way to interrupt synchronous user code.
|
|
140
|
-
void killSessionFor(session, abortError);
|
|
158
|
+
void killSessionFor(session, abortError, { force: true });
|
|
141
159
|
};
|
|
142
160
|
|
|
143
161
|
if (options.runState.signal?.aborted) {
|
|
@@ -152,7 +170,7 @@ async function runOnce(
|
|
|
152
170
|
runId,
|
|
153
171
|
code: options.code,
|
|
154
172
|
filename: options.filename,
|
|
155
|
-
snapshot: { cwd: options.cwd, sessionId: options.sessionId },
|
|
173
|
+
snapshot: { cwd: options.cwd, sessionId: options.sessionId, localRoots: options.localRoots },
|
|
156
174
|
});
|
|
157
175
|
return await promise;
|
|
158
176
|
} finally {
|
|
@@ -191,9 +209,9 @@ async function acquireSession(sessionKey: string, snapshot: SessionSnapshot, tim
|
|
|
191
209
|
handleSessionMessage(session, msg);
|
|
192
210
|
});
|
|
193
211
|
try {
|
|
194
|
-
//
|
|
195
|
-
// users can grant more
|
|
196
|
-
const readyTimeoutMs = Math.max(
|
|
212
|
+
// Init headroom is the fixed infrastructure floor; the caller's per-cell timeout
|
|
213
|
+
// dominates when larger so users can grant more by raising `timeout` on a cell.
|
|
214
|
+
const readyTimeoutMs = Math.max(WORKER_INIT_TIMEOUT_MS, timeoutMs ?? 0);
|
|
197
215
|
await raceWithTimeout(readyPromise, readyTimeoutMs, "Timed out initializing JS eval worker");
|
|
198
216
|
worker.send({ type: "init", snapshot });
|
|
199
217
|
sessions.set(sessionKey, session);
|
|
@@ -277,14 +295,14 @@ function settlePending(session: JsSession, msg: Extract<WorkerOutbound, { type:
|
|
|
277
295
|
pending.reject(errorFromPayload(msg.error));
|
|
278
296
|
}
|
|
279
297
|
|
|
280
|
-
async function killSessionFor(session: JsSession, error: Error): Promise<void> {
|
|
298
|
+
async function killSessionFor(session: JsSession, error: Error, options: { force: boolean }): Promise<void> {
|
|
281
299
|
if (sessions.get(session.sessionKey) === session) {
|
|
282
300
|
sessions.delete(session.sessionKey);
|
|
283
301
|
}
|
|
284
|
-
await killSession(session, error);
|
|
302
|
+
await killSession(session, error, options);
|
|
285
303
|
}
|
|
286
304
|
|
|
287
|
-
async function killSession(session: JsSession, error: Error): Promise<void> {
|
|
305
|
+
async function killSession(session: JsSession, error: Error, options: { force: boolean }): Promise<void> {
|
|
288
306
|
if (session.state === "dead") return;
|
|
289
307
|
session.state = "dead";
|
|
290
308
|
for (const pending of session.pending.values()) {
|
|
@@ -294,6 +312,11 @@ async function killSession(session: JsSession, error: Error): Promise<void> {
|
|
|
294
312
|
pending.reject(error);
|
|
295
313
|
}
|
|
296
314
|
session.pending.clear();
|
|
315
|
+
if (options.force) {
|
|
316
|
+
await session.worker.terminate().catch(() => undefined);
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
if (await session.worker.close().catch(() => false)) return;
|
|
297
320
|
await session.worker.terminate().catch(() => undefined);
|
|
298
321
|
}
|
|
299
322
|
|
|
@@ -358,8 +381,9 @@ async function raceWithTimeout<T>(promise: Promise<T>, timeoutMs: number, reason
|
|
|
358
381
|
|
|
359
382
|
async function spawnJsWorker(): Promise<WorkerHandle> {
|
|
360
383
|
try {
|
|
361
|
-
const
|
|
362
|
-
|
|
384
|
+
const hostEntry = workerHostEntry();
|
|
385
|
+
const worker = hostEntry
|
|
386
|
+
? new Worker(hostEntry, { type: "module", argv: ["__prometheus_js_eval_worker"] })
|
|
363
387
|
: new Worker(new URL("./worker-entry.ts", import.meta.url).href, { type: "module" });
|
|
364
388
|
return wrapBunWorker(worker);
|
|
365
389
|
} catch (err) {
|
|
@@ -381,6 +405,38 @@ function wrapBunWorker(worker: Worker): WorkerHandle {
|
|
|
381
405
|
worker.addEventListener("message", wrap);
|
|
382
406
|
return () => worker.removeEventListener("message", wrap);
|
|
383
407
|
},
|
|
408
|
+
async close() {
|
|
409
|
+
const { promise: closed, resolve } = Promise.withResolvers<boolean>();
|
|
410
|
+
let settled = false;
|
|
411
|
+
let sawClosedAck = false;
|
|
412
|
+
let sawWorkerExit = false;
|
|
413
|
+
let timeout: NodeJS.Timeout | undefined;
|
|
414
|
+
let unsubscribe = (): void => {};
|
|
415
|
+
const finish = (value: boolean): void => {
|
|
416
|
+
if (settled) return;
|
|
417
|
+
settled = true;
|
|
418
|
+
if (timeout) clearTimeout(timeout);
|
|
419
|
+
unsubscribe();
|
|
420
|
+
worker.removeEventListener("close", onClose);
|
|
421
|
+
resolve(value);
|
|
422
|
+
};
|
|
423
|
+
const finishIfClosed = (): void => {
|
|
424
|
+
if (sawClosedAck && sawWorkerExit) finish(true);
|
|
425
|
+
};
|
|
426
|
+
const onClose = (): void => {
|
|
427
|
+
sawWorkerExit = true;
|
|
428
|
+
finishIfClosed();
|
|
429
|
+
};
|
|
430
|
+
unsubscribe = this.onMessage(msg => {
|
|
431
|
+
if (msg.type !== "closed") return;
|
|
432
|
+
sawClosedAck = true;
|
|
433
|
+
finishIfClosed();
|
|
434
|
+
});
|
|
435
|
+
worker.addEventListener("close", onClose);
|
|
436
|
+
timeout = setTimeout(() => finish(false), WORKER_CLOSE_TIMEOUT_MS);
|
|
437
|
+
worker.postMessage({ type: "close" } satisfies WorkerInbound);
|
|
438
|
+
return await closed;
|
|
439
|
+
},
|
|
384
440
|
async terminate() {
|
|
385
441
|
worker.terminate();
|
|
386
442
|
},
|
|
@@ -417,6 +473,27 @@ function spawnInlineWorker(): WorkerHandle {
|
|
|
417
473
|
hostListeners.add(handler);
|
|
418
474
|
return () => hostListeners.delete(handler);
|
|
419
475
|
},
|
|
476
|
+
async close() {
|
|
477
|
+
const { promise: closed, resolve } = Promise.withResolvers<boolean>();
|
|
478
|
+
let settled = false;
|
|
479
|
+
let timeout: NodeJS.Timeout | undefined;
|
|
480
|
+
let unsubscribe = (): void => {};
|
|
481
|
+
const finish = (value: boolean): void => {
|
|
482
|
+
if (settled) return;
|
|
483
|
+
settled = true;
|
|
484
|
+
if (timeout) clearTimeout(timeout);
|
|
485
|
+
unsubscribe();
|
|
486
|
+
hostListeners.clear();
|
|
487
|
+
workerListeners.clear();
|
|
488
|
+
resolve(value);
|
|
489
|
+
};
|
|
490
|
+
unsubscribe = this.onMessage(msg => {
|
|
491
|
+
if (msg.type === "closed") finish(true);
|
|
492
|
+
});
|
|
493
|
+
this.send({ type: "close" });
|
|
494
|
+
timeout = setTimeout(() => finish(false), WORKER_CLOSE_TIMEOUT_MS);
|
|
495
|
+
return await closed;
|
|
496
|
+
},
|
|
420
497
|
async terminate() {
|
|
421
498
|
hostListeners.clear();
|
|
422
499
|
workerListeners.clear();
|
package/src/eval/js/executor.ts
CHANGED
|
@@ -24,6 +24,8 @@ export interface JsExecutorOptions {
|
|
|
24
24
|
artifactPath?: string;
|
|
25
25
|
artifactId?: string;
|
|
26
26
|
session: ToolSession;
|
|
27
|
+
/** On-disk roots the helpers substitute for internal-URL schemes (e.g. `local://`). */
|
|
28
|
+
localRoots?: Record<string, string>;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
31
|
export interface JsResult {
|
|
@@ -61,9 +63,13 @@ function isTimeoutReason(reason: unknown): boolean {
|
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
function formatJsTimeoutAnnotation(timeoutMs: number | undefined): string {
|
|
64
|
-
|
|
66
|
+
// Timeout cancellation force-kills the worker (the only way to interrupt
|
|
67
|
+
// synchronous user code), which discards the persistent VM state. Say so,
|
|
68
|
+
// or the model will keep referencing variables that no longer exist.
|
|
69
|
+
const reset = "The JS worker was force-killed and its VM state was reset; variables from earlier cells are gone.";
|
|
70
|
+
if (timeoutMs === undefined) return `Command timed out. ${reset}`;
|
|
65
71
|
const secs = Math.max(1, Math.round(timeoutMs / 1000));
|
|
66
|
-
return `Command timed out after ${secs} seconds`;
|
|
72
|
+
return `Command timed out after ${secs} seconds. ${reset}`;
|
|
67
73
|
}
|
|
68
74
|
|
|
69
75
|
export async function executeJs(code: string, options: JsExecutorOptions): Promise<JsResult> {
|
|
@@ -96,6 +102,7 @@ export async function executeJs(code: string, options: JsExecutorOptions): Promi
|
|
|
96
102
|
sessionId: options.sessionId,
|
|
97
103
|
cwd: options.cwd ?? options.session.cwd,
|
|
98
104
|
session: options.session,
|
|
105
|
+
localRoots: options.localRoots,
|
|
99
106
|
reset: options.reset,
|
|
100
107
|
code,
|
|
101
108
|
filename: `js-cell-${crypto.randomUUID()}.js`,
|
package/src/eval/js/index.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { ToolSession } from "../../tools";
|
|
2
|
-
import
|
|
2
|
+
import {
|
|
3
|
+
type ExecutorBackend,
|
|
4
|
+
type ExecutorBackendExecOptions,
|
|
5
|
+
type ExecutorBackendResult,
|
|
6
|
+
resolveEvalUrlRoots,
|
|
7
|
+
} from "../backend";
|
|
3
8
|
import { executeJs } from "./executor";
|
|
4
9
|
|
|
5
10
|
const JS_SESSION_PREFIX = "js:";
|
|
@@ -25,11 +30,10 @@ export default {
|
|
|
25
30
|
sessionId: namespaceSessionId(opts.sessionId),
|
|
26
31
|
sessionFile: opts.sessionFile,
|
|
27
32
|
reset: opts.reset,
|
|
28
|
-
artifactPath: opts.artifactPath,
|
|
29
|
-
artifactId: opts.artifactId,
|
|
30
33
|
onChunk: opts.onChunk,
|
|
31
34
|
onStatus: opts.onStatus,
|
|
32
35
|
session: opts.session,
|
|
36
|
+
localRoots: resolveEvalUrlRoots(opts.session),
|
|
33
37
|
});
|
|
34
38
|
return {
|
|
35
39
|
output: result.output,
|
|
@@ -24,11 +24,17 @@ export interface HelperOptions {
|
|
|
24
24
|
export interface HelperContext {
|
|
25
25
|
cwd(): string;
|
|
26
26
|
env: Map<string, string>;
|
|
27
|
+
/**
|
|
28
|
+
* On-disk roots for internal-URL schemes the helpers accept (e.g.
|
|
29
|
+
* `{ local: "/…/artifacts/local" }`). A path like `local://x.md` is rewritten
|
|
30
|
+
* to `<root>/x.md` before any filesystem op; unknown schemes are rejected.
|
|
31
|
+
*/
|
|
32
|
+
localRoots(): Record<string, string>;
|
|
27
33
|
emitStatus(event: JsStatusEvent): void;
|
|
28
34
|
}
|
|
29
35
|
|
|
30
36
|
/**
|
|
31
|
-
* The set of functions exposed to user code via `globalThis.
|
|
37
|
+
* The set of functions exposed to user code via `globalThis.__omp_helpers__`. The JS
|
|
32
38
|
* prelude reads from this bag and attaches short aliases (`read`, `write`, `tree`, ...)
|
|
33
39
|
* onto the global scope.
|
|
34
40
|
*/
|
|
@@ -66,7 +72,7 @@ export function createHelpers(ctx: HelperContext): HelperBundle {
|
|
|
66
72
|
if (!isWriteData(data)) {
|
|
67
73
|
throw new ToolError("write() expects string, Blob, ArrayBuffer, or TypedArray data");
|
|
68
74
|
}
|
|
69
|
-
const filePath =
|
|
75
|
+
const filePath = resolveHelperPath(ctx, rawPath, "write");
|
|
70
76
|
if (typeof data === "string" || data instanceof Blob || data instanceof ArrayBuffer) {
|
|
71
77
|
await Bun.write(filePath, data);
|
|
72
78
|
} else {
|
|
@@ -76,13 +82,12 @@ export function createHelpers(ctx: HelperContext): HelperBundle {
|
|
|
76
82
|
return filePath;
|
|
77
83
|
},
|
|
78
84
|
append: async (rawPath, content) => {
|
|
79
|
-
const target =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
);
|
|
85
|
+
const target = resolveHelperPath(ctx, rawPath, "write");
|
|
86
|
+
// O(1) append; read-all+rewrite both raced concurrent writers and went
|
|
87
|
+
// quadratic when called in a loop. Bun.write creates parent dirs, so
|
|
88
|
+
// keep that behavior for the append path too.
|
|
89
|
+
await fs.promises.mkdir(path.dirname(target), { recursive: true });
|
|
90
|
+
await fs.promises.appendFile(target, content, "utf-8");
|
|
86
91
|
ctx.emitStatus({
|
|
87
92
|
op: "append",
|
|
88
93
|
path: target,
|
|
@@ -202,19 +207,60 @@ function getMergedEnv(ctx: HelperContext): Record<string, string> {
|
|
|
202
207
|
return merged;
|
|
203
208
|
}
|
|
204
209
|
|
|
210
|
+
const INTERNAL_URL_RE = /^([a-z][a-z0-9+.-]*):\/\/(.*)$/i;
|
|
211
|
+
|
|
205
212
|
function resolvePath(ctx: HelperContext, value: string): string {
|
|
206
213
|
if (path.isAbsolute(value)) return path.normalize(value);
|
|
207
214
|
return path.resolve(ctx.cwd(), value);
|
|
208
215
|
}
|
|
209
216
|
|
|
217
|
+
/**
|
|
218
|
+
* Map a raw helper path to an absolute filesystem path. Plain paths resolve
|
|
219
|
+
* against the cwd; an internal-URL whose scheme has an injected root (e.g.
|
|
220
|
+
* `local://`) is rewritten under that root; any other `scheme://` is rejected
|
|
221
|
+
* so we never silently create a literal `scheme:/` directory.
|
|
222
|
+
*/
|
|
223
|
+
function resolveHelperPath(ctx: HelperContext, rawPath: string, op: "read" | "write"): string {
|
|
224
|
+
const match = INTERNAL_URL_RE.exec(rawPath);
|
|
225
|
+
if (!match) return resolvePath(ctx, rawPath);
|
|
226
|
+
const scheme = match[1].toLowerCase();
|
|
227
|
+
const root = ctx.localRoots()[scheme];
|
|
228
|
+
if (!root) {
|
|
229
|
+
throw new ToolError(`Protocol paths are not supported by ${op}(): ${rawPath}`);
|
|
230
|
+
}
|
|
231
|
+
return resolveUnderRoot(scheme, root, match[2], rawPath);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/** Resolve an internal-URL relative path under its root, mirroring the host
|
|
235
|
+
* local-protocol handler: decode, reject absolute/traversal, confine to root. */
|
|
236
|
+
function resolveUnderRoot(scheme: string, root: string, rawRelative: string, rawPath: string): string {
|
|
237
|
+
let relative: string;
|
|
238
|
+
try {
|
|
239
|
+
relative = decodeURIComponent(rawRelative.replaceAll("\\", "/"));
|
|
240
|
+
} catch {
|
|
241
|
+
throw new ToolError(`Invalid URL encoding in ${scheme}:// path: ${rawPath}`);
|
|
242
|
+
}
|
|
243
|
+
const rootPath = path.resolve(root);
|
|
244
|
+
if (relative === "") return rootPath;
|
|
245
|
+
if (path.isAbsolute(relative)) {
|
|
246
|
+
throw new ToolError(`Absolute paths are not allowed in ${scheme}:// URLs: ${rawPath}`);
|
|
247
|
+
}
|
|
248
|
+
const normalized = path.normalize(relative);
|
|
249
|
+
if (normalized.startsWith("..") || normalized.includes("/../") || normalized.includes("/..")) {
|
|
250
|
+
throw new ToolError(`Path traversal (..) is not allowed in ${scheme}:// URLs: ${rawPath}`);
|
|
251
|
+
}
|
|
252
|
+
const resolved = path.resolve(rootPath, normalized);
|
|
253
|
+
if (resolved !== rootPath && !resolved.startsWith(`${rootPath}${path.sep}`)) {
|
|
254
|
+
throw new ToolError(`${scheme}:// path escapes its root: ${rawPath}`);
|
|
255
|
+
}
|
|
256
|
+
return resolved;
|
|
257
|
+
}
|
|
258
|
+
|
|
210
259
|
async function resolveRegularFile(
|
|
211
260
|
ctx: HelperContext,
|
|
212
261
|
rawPath: string,
|
|
213
262
|
): Promise<{ filePath: string; file: Bun.BunFile; size: number }> {
|
|
214
|
-
|
|
215
|
-
throw new ToolError(`Protocol paths are not supported by read(): ${rawPath}`);
|
|
216
|
-
}
|
|
217
|
-
const filePath = resolvePath(ctx, rawPath);
|
|
263
|
+
const filePath = resolveHelperPath(ctx, rawPath, "read");
|
|
218
264
|
const file = Bun.file(filePath);
|
|
219
265
|
const stat = await file.stat();
|
|
220
266
|
if (stat.isDirectory()) {
|