@oh-my-pi/pi-coding-agent 15.12.3 → 15.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +347 -7
- package/dist/cli.js +1615 -1231
- package/dist/types/async/job-manager.d.ts +15 -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/cli/args.d.ts +19 -2
- 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/collab/protocol.d.ts +1 -1
- package/dist/types/commands/launch.d.ts +0 -3
- package/dist/types/commands/models.d.ts +33 -0
- package/dist/types/commands/say.d.ts +24 -0
- package/dist/types/commands/token.d.ts +25 -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/changelog/generate.d.ts +1 -1
- package/dist/types/commit/shared-llm.d.ts +1 -1
- package/dist/types/config/keybindings.d.ts +3 -3
- package/dist/types/config/model-registry.d.ts +17 -0
- package/dist/types/config/models-config-schema.d.ts +13 -1
- package/dist/types/config/models-config.d.ts +8 -2
- package/dist/types/config/settings-schema.d.ts +281 -58
- package/dist/types/edit/hashline/params.d.ts +1 -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/export/html/index.d.ts +2 -1
- package/dist/types/extensibility/custom-commands/types.d.ts +2 -2
- package/dist/types/extensibility/custom-tools/types.d.ts +2 -2
- package/dist/types/extensibility/extensions/model-api.d.ts +17 -0
- package/dist/types/extensibility/extensions/runner.d.ts +3 -1
- package/dist/types/extensibility/extensions/types.d.ts +49 -3
- package/dist/types/extensibility/hooks/index.d.ts +2 -1
- package/dist/types/extensibility/hooks/types.d.ts +2 -2
- package/dist/types/extensibility/plugins/legacy-pi-compat.d.ts +9 -0
- package/dist/types/extensibility/plugins/loader.d.ts +11 -0
- package/dist/types/extensibility/shared-events.d.ts +1 -1
- package/dist/types/extensibility/skills.d.ts +10 -0
- 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/transcript.d.ts +1 -1
- package/dist/types/index.d.ts +5 -0
- package/dist/types/internal-urls/local-protocol.d.ts +4 -2
- package/dist/types/lsp/types.d.ts +1 -1
- package/dist/types/main.d.ts +4 -3
- package/dist/types/mcp/manager.d.ts +8 -0
- package/dist/types/mcp/startup-events.d.ts +11 -0
- package/dist/types/memories/index.d.ts +7 -0
- package/dist/types/memory-backend/local-backend.d.ts +4 -3
- package/dist/types/mnemopi/config.d.ts +28 -0
- package/dist/types/modes/acp/acp-agent.d.ts +1 -2
- package/dist/types/modes/components/agent-hub.d.ts +6 -0
- package/dist/types/modes/components/assistant-message.d.ts +1 -2
- package/dist/types/modes/components/compaction-summary-message.d.ts +15 -1
- package/dist/types/modes/components/custom-editor.d.ts +39 -1
- package/dist/types/modes/components/custom-editor.test.d.ts +1 -0
- package/dist/types/modes/components/index.d.ts +1 -0
- package/dist/types/modes/components/logout-account-selector.d.ts +8 -0
- package/dist/types/modes/components/session-selector.d.ts +1 -1
- package/dist/types/modes/components/status-line/component.d.ts +9 -5
- package/dist/types/modes/components/status-line/types.d.ts +2 -1
- package/dist/types/modes/components/tool-execution.d.ts +26 -16
- package/dist/types/modes/components/transcript-container.d.ts +23 -2
- package/dist/types/modes/components/tree-selector.d.ts +1 -1
- package/dist/types/modes/components/usage-row.d.ts +3 -0
- package/dist/types/modes/controllers/command-controller.d.ts +2 -2
- package/dist/types/modes/controllers/event-controller.d.ts +0 -17
- package/dist/types/modes/controllers/input-controller.d.ts +14 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +3 -1
- package/dist/types/modes/gradient-highlight.d.ts +9 -4
- package/dist/types/modes/image-references.d.ts +6 -0
- package/dist/types/modes/interactive-mode.d.ts +27 -6
- package/dist/types/modes/magic-keywords.d.ts +13 -1
- package/dist/types/modes/rpc/rpc-mode.d.ts +35 -1
- package/dist/types/modes/rpc/rpc-types.d.ts +9 -1
- package/dist/types/modes/runtime-init.d.ts +4 -0
- package/dist/types/modes/theme/theme.d.ts +13 -2
- package/dist/types/modes/types.d.ts +8 -7
- package/dist/types/modes/utils/ui-helpers.d.ts +1 -1
- package/dist/types/registry/agent-registry.d.ts +17 -0
- package/dist/types/secrets/obfuscator.d.ts +1 -1
- package/dist/types/session/agent-session.d.ts +28 -35
- package/dist/types/session/agent-storage.d.ts +2 -1
- package/dist/types/session/indexed-session-storage.d.ts +3 -3
- package/dist/types/session/messages.d.ts +8 -10
- 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-listing.d.ts +69 -0
- package/dist/types/session/session-loader.d.ts +16 -0
- package/dist/types/session/session-manager.d.ts +85 -462
- 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 +12 -1
- package/dist/types/session/snapcompact-savings-journal.d.ts +46 -0
- package/dist/types/session/tool-choice-queue.d.ts +6 -6
- package/dist/types/slash-commands/helpers/logout.d.ts +15 -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 +4 -0
- package/dist/types/task/executor.d.ts +2 -0
- package/dist/types/task/index.d.ts +9 -1
- package/dist/types/task/types.d.ts +37 -1
- package/dist/types/tools/ask.d.ts +1 -1
- package/dist/types/tools/ast-edit.d.ts +1 -1
- package/dist/types/tools/ast-grep.d.ts +1 -1
- package/dist/types/tools/bash.d.ts +3 -3
- 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 +16 -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.d.ts +3 -1
- package/dist/types/tools/checkpoint.d.ts +1 -1
- package/dist/types/tools/debug.d.ts +1 -1
- package/dist/types/tools/eval-render.d.ts +1 -1
- package/dist/types/tools/eval.d.ts +1 -1
- package/dist/types/tools/find.d.ts +1 -1
- package/dist/types/tools/gh.d.ts +1 -1
- package/dist/types/tools/image-gen.d.ts +1 -1
- package/dist/types/tools/index.d.ts +14 -2
- package/dist/types/tools/inspect-image.d.ts +1 -1
- package/dist/types/tools/irc.d.ts +2 -1
- package/dist/types/tools/job.d.ts +1 -1
- 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 +1 -1
- 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-retain.d.ts +1 -1
- package/dist/types/tools/plan-mode-guard.d.ts +10 -0
- package/dist/types/tools/read.d.ts +1 -1
- package/dist/types/tools/render-mermaid.d.ts +1 -1
- package/dist/types/tools/renderers.d.ts +7 -11
- 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 +1 -1
- package/dist/types/tools/ssh.d.ts +2 -2
- package/dist/types/tools/todo.d.ts +2 -2
- package/dist/types/tools/tts.d.ts +26 -1
- package/dist/types/tools/write.d.ts +2 -2
- 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/utils/clipboard.d.ts +4 -3
- package/dist/types/utils/image-loading.d.ts +18 -1
- package/dist/types/utils/thinking-display.d.ts +17 -0
- package/dist/types/utils/tool-choice.d.ts +8 -0
- package/dist/types/utils/tools-manager.d.ts +2 -1
- package/dist/types/utils/tools-manager.test.d.ts +1 -0
- package/dist/types/web/scrapers/github.d.ts +1 -1
- package/dist/types/web/search/index.d.ts +1 -1
- package/package.json +17 -16
- package/src/async/job-manager.ts +49 -0
- package/src/autolearn/controller.ts +139 -0
- package/src/autolearn/managed-skills.ts +257 -0
- 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/cli/args.ts +56 -10
- package/src/cli/auth-gateway-cli.ts +1 -1
- package/src/cli/bench-cli.ts +1 -1
- package/src/cli/dry-balance-cli.ts +1 -1
- package/src/cli/models-cli.ts +427 -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-commands.ts +3 -0
- package/src/cli.ts +45 -13
- package/src/collab/host.ts +10 -13
- package/src/collab/protocol.ts +1 -1
- package/src/commands/launch.ts +0 -3
- package/src/commands/models.ts +61 -0
- package/src/commands/say.ts +102 -0
- package/src/commands/setup.ts +1 -1
- package/src/commands/token.ts +89 -0
- package/src/commit/agentic/tools/analyze-file.ts +4 -1
- 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 +1 -1
- package/src/commit/analysis/summary.ts +1 -1
- package/src/commit/changelog/generate.ts +1 -1
- package/src/commit/shared-llm.ts +1 -1
- package/src/config/keybindings.ts +2 -2
- package/src/config/model-discovery.ts +11 -5
- package/src/config/model-registry.ts +79 -21
- package/src/config/model-resolver.ts +2 -2
- package/src/config/models-config-schema.ts +5 -2
- package/src/config/models-config.ts +2 -1
- package/src/config/settings-schema.ts +266 -32
- package/src/config/settings.ts +10 -0
- package/src/discovery/builtin.ts +23 -1
- package/src/discovery/claude-plugins.ts +44 -5
- package/src/discovery/helpers.ts +41 -1
- package/src/edit/hashline/params.ts +1 -1
- package/src/edit/modes/apply-patch.ts +1 -1
- package/src/edit/modes/patch.ts +1 -1
- package/src/edit/modes/replace.ts +1 -1
- package/src/eval/__tests__/budget-bridge.test.ts +1 -1
- package/src/eval/agent-bridge.ts +1 -1
- package/src/eval/completion-bridge.ts +1 -1
- package/src/eval/js/shared/prelude.txt +69 -17
- package/src/export/html/index.ts +3 -6
- package/src/export/html/template.js +24 -2
- package/src/export/html/tool-views.generated.js +2 -2
- package/src/extensibility/custom-commands/loader.ts +1 -1
- package/src/extensibility/custom-commands/types.ts +2 -2
- package/src/extensibility/custom-tools/loader.ts +1 -1
- package/src/extensibility/custom-tools/types.ts +2 -2
- package/src/extensibility/extensions/loader.ts +2 -2
- package/src/extensibility/extensions/model-api.ts +41 -0
- package/src/extensibility/extensions/runner.ts +4 -0
- package/src/extensibility/extensions/types.ts +54 -3
- package/src/extensibility/extensions/wrapper.ts +41 -5
- package/src/extensibility/hooks/index.ts +2 -1
- package/src/extensibility/hooks/loader.ts +1 -1
- package/src/extensibility/hooks/types.ts +2 -2
- package/src/extensibility/plugins/legacy-pi-compat.ts +43 -13
- package/src/extensibility/plugins/loader.ts +30 -19
- package/src/extensibility/plugins/manager.ts +221 -90
- package/src/extensibility/shared-events.ts +1 -1
- package/src/extensibility/skills.ts +101 -5
- package/src/goals/guided-setup.ts +133 -0
- package/src/goals/state.ts +1 -1
- package/src/goals/tools/goal-tool.ts +1 -1
- package/src/hindsight/transcript.ts +1 -1
- package/src/index.ts +5 -0
- package/src/internal-urls/docs-index.generated.ts +13 -10
- package/src/internal-urls/history-protocol.ts +1 -1
- package/src/internal-urls/local-protocol.ts +29 -7
- package/src/lsp/types.ts +1 -1
- package/src/main.ts +27 -32
- package/src/mcp/config-writer.ts +7 -3
- package/src/mcp/manager.ts +11 -0
- package/src/mcp/startup-events.ts +21 -0
- package/src/mcp/transports/stdio.ts +2 -1
- package/src/memories/index.ts +149 -12
- package/src/memories/storage.ts +2 -1
- package/src/memory-backend/local-backend.ts +11 -5
- package/src/mnemopi/backend.ts +1 -0
- package/src/mnemopi/config.ts +112 -12
- package/src/modes/acp/acp-agent.ts +8 -53
- package/src/modes/acp/acp-event-mapper.ts +5 -1
- package/src/modes/components/agent-hub.ts +51 -5
- package/src/modes/components/assistant-message.ts +12 -44
- package/src/modes/components/compaction-summary-message.ts +125 -26
- package/src/modes/components/custom-editor.test.ts +96 -0
- package/src/modes/components/custom-editor.ts +164 -8
- package/src/modes/components/index.ts +1 -0
- package/src/modes/components/logout-account-selector.ts +130 -0
- package/src/modes/components/mcp-add-wizard.ts +1 -1
- package/src/modes/components/model-selector.ts +2 -2
- package/src/modes/components/session-selector.ts +1 -1
- package/src/modes/components/settings-defs.ts +7 -0
- package/src/modes/components/status-line/component.ts +54 -157
- package/src/modes/components/status-line/segments.ts +1 -1
- package/src/modes/components/status-line/types.ts +2 -1
- package/src/modes/components/tool-execution.ts +82 -43
- package/src/modes/components/transcript-container.ts +70 -1
- package/src/modes/components/tree-selector.ts +1 -1
- package/src/modes/components/usage-row.ts +18 -0
- package/src/modes/components/user-message.ts +4 -2
- package/src/modes/controllers/command-controller.ts +14 -16
- package/src/modes/controllers/event-controller.ts +101 -73
- package/src/modes/controllers/extension-ui-controller.ts +6 -0
- package/src/modes/controllers/input-controller.ts +311 -57
- package/src/modes/controllers/mcp-command-controller.ts +44 -3
- package/src/modes/controllers/selector-controller.ts +68 -12
- package/src/modes/controllers/streaming-reveal.ts +4 -3
- package/src/modes/gradient-highlight.ts +21 -9
- package/src/modes/image-references.ts +20 -0
- package/src/modes/interactive-mode.ts +288 -48
- package/src/modes/magic-keywords.ts +27 -5
- package/src/modes/rpc/rpc-mode.ts +146 -14
- package/src/modes/rpc/rpc-subagents.ts +2 -2
- package/src/modes/rpc/rpc-types.ts +8 -2
- package/src/modes/runtime-init.ts +28 -3
- package/src/modes/theme/theme.ts +99 -51
- package/src/modes/types.ts +6 -7
- package/src/modes/utils/hotkeys-markdown.ts +1 -1
- package/src/modes/utils/ui-helpers.ts +36 -7
- package/src/priority.json +5 -1
- package/src/prompts/agents/task.md +1 -0
- package/src/prompts/goals/guided-goal-interview.md +8 -0
- package/src/prompts/goals/guided-goal-system.md +12 -0
- package/src/prompts/memories/read-path.md +6 -0
- 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/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/subagent-system-prompt.md +4 -0
- package/src/prompts/system/system-prompt.md +10 -5
- package/src/prompts/system/title-marker-instruction.md +1 -0
- package/src/prompts/system/title-system-marker.md +16 -0
- package/src/prompts/tools/job.md +1 -0
- package/src/prompts/tools/learn.md +7 -0
- package/src/prompts/tools/manage-skill.md +9 -0
- package/src/prompts/tools/task.md +3 -0
- package/src/registry/agent-registry.ts +30 -0
- package/src/sdk.ts +103 -43
- package/src/secrets/obfuscator.ts +1 -1
- package/src/session/agent-session.ts +331 -318
- package/src/session/agent-storage.ts +18 -9
- package/src/session/history-storage.ts +3 -2
- package/src/session/indexed-session-storage.ts +7 -10
- package/src/session/messages.ts +9 -11
- package/src/session/session-context.ts +352 -0
- package/src/session/session-dump-format.ts +4 -2
- package/src/session/session-entries.ts +194 -0
- package/src/session/session-listing.ts +588 -0
- package/src/session/session-loader.ts +106 -0
- package/src/session/session-manager.ts +968 -3064
- 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 +21 -1
- package/src/session/snapcompact-savings-journal.ts +113 -0
- package/src/session/tool-choice-queue.ts +23 -11
- package/src/slash-commands/builtin-registry.ts +40 -4
- package/src/slash-commands/helpers/logout.ts +88 -0
- 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 +247 -60
- 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 +8 -0
- package/src/task/agents.ts +1 -2
- package/src/task/executor.ts +49 -15
- package/src/task/index.ts +60 -6
- package/src/task/render.ts +83 -8
- package/src/task/types.ts +54 -1
- package/src/tools/ask.ts +9 -1
- package/src/tools/ast-edit.ts +1 -1
- package/src/tools/ast-grep.ts +1 -1
- package/src/tools/bash.ts +5 -4
- 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/registry.ts +37 -3
- package/src/tools/browser/render.ts +6 -1
- package/src/tools/browser/tab-protocol.ts +2 -0
- package/src/tools/browser/tab-supervisor.ts +189 -18
- package/src/tools/browser/tab-worker.ts +1 -1
- package/src/tools/browser.ts +16 -1
- package/src/tools/checkpoint.ts +1 -1
- package/src/tools/debug.ts +1 -1
- package/src/tools/eval-render.ts +4 -3
- package/src/tools/eval.ts +11 -6
- package/src/tools/fetch.ts +13 -2
- package/src/tools/find.ts +1 -1
- package/src/tools/gh.ts +1 -1
- package/src/tools/github-cache.ts +2 -1
- package/src/tools/image-gen.ts +1 -1
- package/src/tools/index.ts +43 -5
- package/src/tools/inspect-image.ts +3 -1
- package/src/tools/irc.ts +11 -3
- package/src/tools/job.ts +15 -3
- package/src/tools/learn.ts +144 -0
- package/src/tools/manage-skill.ts +104 -0
- package/src/tools/memory-edit.ts +1 -1
- package/src/tools/memory-recall.ts +1 -1
- package/src/tools/memory-reflect.ts +1 -1
- package/src/tools/memory-retain.ts +1 -1
- package/src/tools/plan-mode-guard.ts +53 -19
- package/src/tools/read.ts +8 -2
- package/src/tools/render-mermaid.ts +1 -1
- package/src/tools/renderers.ts +7 -11
- package/src/tools/report-tool-issue.ts +3 -2
- package/src/tools/resolve.ts +1 -1
- package/src/tools/review.ts +1 -1
- package/src/tools/search-tool-bm25.ts +1 -1
- package/src/tools/search.ts +1 -1
- package/src/tools/ssh.ts +5 -4
- package/src/tools/todo.ts +2 -2
- package/src/tools/tts.ts +204 -93
- package/src/tools/write.ts +19 -3
- 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 +497 -0
- package/src/tts/vocalizer.ts +162 -0
- package/src/tts/wav.ts +58 -0
- package/src/utils/clipboard.ts +35 -18
- package/src/utils/image-loading.ts +35 -4
- package/src/utils/thinking-display.ts +37 -0
- package/src/utils/title-generator.ts +48 -5
- package/src/utils/tool-choice.ts +16 -0
- package/src/utils/tools-manager.test.ts +25 -0
- package/src/utils/tools-manager.ts +19 -1
- package/src/web/scrapers/github.ts +96 -0
- package/src/web/search/index.ts +14 -1
- package/src/web/search/providers/searxng.ts +13 -1
- package/dist/types/cli/list-models.d.ts +0 -30
- package/dist/types/stt/setup.d.ts +0 -18
- package/src/cli/list-models.ts +0 -194
- package/src/stt/setup.ts +0 -52
- package/src/stt/transcribe.py +0 -70
|
@@ -5,9 +5,26 @@ export interface RecordingHandle {
|
|
|
5
5
|
* Returns available recording tools in priority order.
|
|
6
6
|
*/
|
|
7
7
|
export declare function detectRecordingTools(): string[];
|
|
8
|
+
export interface ResolvedRecorder {
|
|
9
|
+
tool: "sox" | "ffmpeg" | "arecord" | "powershell";
|
|
10
|
+
bin: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function detectRecorder(): ResolvedRecorder | null;
|
|
13
|
+
/**
|
|
14
|
+
* Ensure a recorder is available, downloading the static ffmpeg binary when
|
|
15
|
+
* nothing is already present. Returns the resolved recorder.
|
|
16
|
+
*/
|
|
17
|
+
export declare function ensureRecorder(onProgress?: (p: {
|
|
18
|
+
stage: string;
|
|
19
|
+
percent?: number;
|
|
20
|
+
}) => void, signal?: AbortSignal): Promise<ResolvedRecorder>;
|
|
8
21
|
export declare function startRecording(outputPath: string): Promise<RecordingHandle>;
|
|
9
22
|
/**
|
|
10
23
|
* Verify a recorded audio file is usable.
|
|
11
24
|
* Returns the file size in bytes, or throws.
|
|
12
25
|
*/
|
|
13
26
|
export declare function verifyRecordingFile(filePath: string): Promise<number>;
|
|
27
|
+
export interface StreamingRecordingHandle {
|
|
28
|
+
stop(): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export declare function startStreamingRecording(onAudio: (samples: Float32Array) => void): Promise<StreamingRecordingHandle | null>;
|
|
@@ -3,9 +3,15 @@ interface ToggleOptions {
|
|
|
3
3
|
showWarning(msg: string): void;
|
|
4
4
|
showStatus(msg: string): void;
|
|
5
5
|
onStateChange(state: SttState): void;
|
|
6
|
+
/** Force a redraw after async edits to the composer (live segment/preview inserts). */
|
|
7
|
+
requestRender?(): void;
|
|
6
8
|
}
|
|
9
|
+
/** The slice of the composer editor the controller drives. */
|
|
7
10
|
interface Editor {
|
|
8
11
|
insertText(text: string): void;
|
|
12
|
+
setVolatileText(text: string): void;
|
|
13
|
+
clearVolatileText(): void;
|
|
14
|
+
commitVolatileText(text: string): void;
|
|
9
15
|
}
|
|
10
16
|
export declare class STTController {
|
|
11
17
|
#private;
|
|
@@ -4,13 +4,11 @@ export interface TranscribeOptions {
|
|
|
4
4
|
signal?: AbortSignal;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*/
|
|
9
|
-
export declare function resolvePython(): string | null;
|
|
10
|
-
/**
|
|
11
|
-
* Transcribe a WAV file using Python openai-whisper.
|
|
7
|
+
* Transcribe a WAV file using the local ONNX Whisper worker.
|
|
12
8
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
9
|
+
* Decodes the WAV to a 16 kHz mono Float32Array in-process (no Python, no
|
|
10
|
+
* ffmpeg) and routes it to the warm speech worker, which keeps the model loaded
|
|
11
|
+
* across calls. Honors `options.signal` (abort) and applies an internal timeout
|
|
12
|
+
* with the same semantics as the previous Python path.
|
|
15
13
|
*/
|
|
16
14
|
export declare function transcribe(audioPath: string, options?: TranscribeOptions): Promise<string>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal WAV (RIFF/PCM) decoder producing the Float32Array @ 16 kHz mono that
|
|
3
|
+
* transformers.js `automatic-speech-recognition` expects. Ports the decode/
|
|
4
|
+
* mono-mix/resample logic from the retired Python `transcribe.py` (which read
|
|
5
|
+
* via the stdlib `wave` module) so STT no longer shells out to Python.
|
|
6
|
+
*
|
|
7
|
+
* Supported sample formats: PCM uint8 (8-bit), int16 (16-bit), int32 (32-bit),
|
|
8
|
+
* and IEEE float32 (format tag 3). Any number of channels is mixed down to mono.
|
|
9
|
+
*/
|
|
10
|
+
/** transformers.js Whisper feature extractor operates at 16 kHz. */
|
|
11
|
+
export declare const TARGET_SAMPLE_RATE = 16000;
|
|
12
|
+
/**
|
|
13
|
+
* Resample via linear interpolation, mirroring the Python `np.interp` over
|
|
14
|
+
* `linspace(0, n-1, targetLen)` against `arange(n)`.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resampleLinear(input: Float32Array, fromRate: number, toRate: number): Float32Array;
|
|
17
|
+
/**
|
|
18
|
+
* Decode a WAV byte buffer into a 16 kHz mono Float32Array suitable for the
|
|
19
|
+
* transformers.js Whisper pipeline.
|
|
20
|
+
*/
|
|
21
|
+
export declare function decodeWavToMono16k(buffer: ArrayBuffer): Float32Array;
|
|
22
|
+
/**
|
|
23
|
+
* Decode interleaved little-endian signed 16-bit PCM bytes into normalized
|
|
24
|
+
* [-1, 1] mono float samples. The live recorder streams raw s16le frames from
|
|
25
|
+
* sox/ffmpeg/arecord stdout (no RIFF container), so this is the hot-path
|
|
26
|
+
* counterpart to {@link decodeWavToMono16k}. `bytes` MUST be 2-byte aligned;
|
|
27
|
+
* callers buffer any trailing odd byte across chunk boundaries.
|
|
28
|
+
*/
|
|
29
|
+
export declare function decodePcmS16LE(bytes: Uint8Array): Float32Array;
|
|
@@ -78,6 +78,10 @@ export interface BuildSystemPromptOptions {
|
|
|
78
78
|
mcpDiscoveryServerSummaries?: string[];
|
|
79
79
|
/** Encourage the agent to delegate via tasks unless changes are trivial. */
|
|
80
80
|
eagerTasks?: boolean;
|
|
81
|
+
/** When true, the Eager Tasks section uses the hard MUST/ONLY wording (`task.eager: always`) rather than the softer `preferred` nudge. */
|
|
82
|
+
eagerTasksAlways?: boolean;
|
|
83
|
+
/** Whether `task.batch` is enabled; gates batch-call guidance in the Eager Tasks section. */
|
|
84
|
+
taskBatch?: boolean;
|
|
81
85
|
/** Rules with alwaysApply=true — their full content is injected into the prompt. */
|
|
82
86
|
alwaysApplyRules?: AlwaysApplyRule[];
|
|
83
87
|
/** Whether secret obfuscation is active. When true, explains the redaction format in the prompt. */
|
|
@@ -51,6 +51,8 @@ export interface ExecutorOptions {
|
|
|
51
51
|
content: string;
|
|
52
52
|
};
|
|
53
53
|
description?: string;
|
|
54
|
+
/** Specialist role/expertise for this spawn; drives the system-prompt preamble, display name, and telemetry identity. */
|
|
55
|
+
role?: string;
|
|
54
56
|
index: number;
|
|
55
57
|
id: string;
|
|
56
58
|
parentToolCallId?: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AgentTool, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
|
|
2
2
|
import type { ToolSession } from "..";
|
|
3
3
|
import type { Theme } from "../modes/theme/theme";
|
|
4
|
-
import { type AgentDefinition, type SingleResult, type TaskToolDetails, type TaskToolSchemaInstance } from "./types";
|
|
4
|
+
import { type AgentDefinition, type SingleResult, type TaskItem, type TaskToolDetails, type TaskToolSchemaInstance } from "./types";
|
|
5
5
|
import "../tools/review";
|
|
6
6
|
import { renderResult, renderCall as renderTaskCall } from "./render";
|
|
7
7
|
export { loadBundledAgents as BUNDLED_AGENTS } from "./agents";
|
|
@@ -18,6 +18,14 @@ export declare function isReadOnlyAgent(agent: AgentDefinition): boolean;
|
|
|
18
18
|
* tell a no-op child from one that burned requests before being cancelled.
|
|
19
19
|
*/
|
|
20
20
|
export declare function formatResultOutputFallback(result: Pick<SingleResult, "output" | "stderr" | "requests">): string;
|
|
21
|
+
/**
|
|
22
|
+
* Advisory — never a rejection — nudging the spawner toward tailored
|
|
23
|
+
* specialists when it spawns generic role-less workers and still holds spawn
|
|
24
|
+
* capacity (DepthCapacity: it currently has the `task` tool). Fires when a
|
|
25
|
+
* generic `task`/`quick_task` spawn carries no `role`, or when one call clones
|
|
26
|
+
* the same agent ≥2× all without roles. Returns undefined when no nudge applies.
|
|
27
|
+
*/
|
|
28
|
+
export declare function buildSpecializationAdvisory(agentName: string | undefined, items: TaskItem[], depthCapacity: boolean): string | undefined;
|
|
21
29
|
/**
|
|
22
30
|
* Task tool - Delegate tasks to specialized agents.
|
|
23
31
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
|
2
2
|
import type { Usage } from "@oh-my-pi/pi-ai";
|
|
3
|
-
import
|
|
3
|
+
import { z } from "zod/v4";
|
|
4
4
|
import type { AgentSessionEvent } from "../session/agent-session";
|
|
5
5
|
import type { NestedRepoPatch } from "./worktree";
|
|
6
6
|
/** Source of an agent definition */
|
|
@@ -51,9 +51,14 @@ export interface SubagentLifecyclePayload {
|
|
|
51
51
|
*/
|
|
52
52
|
detached?: boolean;
|
|
53
53
|
}
|
|
54
|
+
/** Display cap for a normalized one-line label (roster line, registry `displayName`, prompt field). */
|
|
55
|
+
export declare const ROLE_LABEL_MAX = 80;
|
|
56
|
+
/** Schema bound on the raw `role` input, before it is label-normalized at every use site. */
|
|
57
|
+
export declare const ROLE_INPUT_MAX = 256;
|
|
54
58
|
export declare const taskItemSchema: z.ZodObject<{
|
|
55
59
|
id: z.ZodOptional<z.ZodString>;
|
|
56
60
|
description: z.ZodOptional<z.ZodString>;
|
|
61
|
+
role: z.ZodOptional<z.ZodString>;
|
|
57
62
|
assignment: z.ZodString;
|
|
58
63
|
}, z.core.$strip>;
|
|
59
64
|
/** Single task item. Fields are optional defensively: args stream in token by token. */
|
|
@@ -62,6 +67,8 @@ export interface TaskItem {
|
|
|
62
67
|
id?: string;
|
|
63
68
|
/** UI label, not seen by the subagent. */
|
|
64
69
|
description?: string;
|
|
70
|
+
/** Specialist role/expertise this subagent embodies; shapes its system-prompt identity and display name. */
|
|
71
|
+
role?: string;
|
|
65
72
|
/** The work; required by the schema. */
|
|
66
73
|
assignment?: string;
|
|
67
74
|
/** Run this spawn in an isolated worktree (batch form; flat form carries it top-level). */
|
|
@@ -70,6 +77,7 @@ export interface TaskItem {
|
|
|
70
77
|
export declare const taskSchema: z.ZodObject<{
|
|
71
78
|
id: z.ZodOptional<z.ZodString>;
|
|
72
79
|
description: z.ZodOptional<z.ZodString>;
|
|
80
|
+
role: z.ZodOptional<z.ZodString>;
|
|
73
81
|
assignment: z.ZodString;
|
|
74
82
|
isolated: z.ZodOptional<z.ZodBoolean>;
|
|
75
83
|
agent: z.ZodString;
|
|
@@ -77,12 +85,14 @@ export declare const taskSchema: z.ZodObject<{
|
|
|
77
85
|
declare const ALL_TASK_SCHEMAS: readonly [z.ZodObject<{
|
|
78
86
|
id: z.ZodOptional<z.ZodString>;
|
|
79
87
|
description: z.ZodOptional<z.ZodString>;
|
|
88
|
+
role: z.ZodOptional<z.ZodString>;
|
|
80
89
|
assignment: z.ZodString;
|
|
81
90
|
isolated: z.ZodOptional<z.ZodBoolean>;
|
|
82
91
|
agent: z.ZodString;
|
|
83
92
|
}, z.core.$strip>, z.ZodObject<{
|
|
84
93
|
id: z.ZodOptional<z.ZodString>;
|
|
85
94
|
description: z.ZodOptional<z.ZodString>;
|
|
95
|
+
role: z.ZodOptional<z.ZodString>;
|
|
86
96
|
assignment: z.ZodString;
|
|
87
97
|
agent: z.ZodString;
|
|
88
98
|
}, z.core.$strip>, z.ZodObject<{
|
|
@@ -91,6 +101,7 @@ declare const ALL_TASK_SCHEMAS: readonly [z.ZodObject<{
|
|
|
91
101
|
tasks: z.ZodArray<z.ZodObject<{
|
|
92
102
|
id: z.ZodOptional<z.ZodString>;
|
|
93
103
|
description: z.ZodOptional<z.ZodString>;
|
|
104
|
+
role: z.ZodOptional<z.ZodString>;
|
|
94
105
|
assignment: z.ZodString;
|
|
95
106
|
isolated: z.ZodOptional<z.ZodBoolean>;
|
|
96
107
|
}, z.core.$strip>>;
|
|
@@ -100,6 +111,7 @@ declare const ALL_TASK_SCHEMAS: readonly [z.ZodObject<{
|
|
|
100
111
|
tasks: z.ZodArray<z.ZodObject<{
|
|
101
112
|
id: z.ZodOptional<z.ZodString>;
|
|
102
113
|
description: z.ZodOptional<z.ZodString>;
|
|
114
|
+
role: z.ZodOptional<z.ZodString>;
|
|
103
115
|
assignment: z.ZodString;
|
|
104
116
|
}, z.core.$strip>>;
|
|
105
117
|
}, z.core.$strip>];
|
|
@@ -124,6 +136,8 @@ export interface TaskParams {
|
|
|
124
136
|
id?: string;
|
|
125
137
|
/** UI label (flat form), not seen by the subagent. */
|
|
126
138
|
description?: string;
|
|
139
|
+
/** Specialist role/expertise this subagent embodies; shapes its system-prompt identity and display name. */
|
|
140
|
+
role?: string;
|
|
127
141
|
/** The work (flat form). */
|
|
128
142
|
assignment?: string;
|
|
129
143
|
/** Batch form (`task.batch`): one subagent per item. */
|
|
@@ -133,6 +147,28 @@ export interface TaskParams {
|
|
|
133
147
|
/** Run in an isolated worktree (flat form; per-item in batch form). */
|
|
134
148
|
isolated?: boolean;
|
|
135
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* One-line, length-capped label safe for a single roster line, a registry
|
|
152
|
+
* `displayName`, or a system-prompt field. Collapses every run of whitespace
|
|
153
|
+
* AND control/format characters — including U+0085 NEL, ESC/ANSI, and the
|
|
154
|
+
* zero-width separators that `\s` misses — to a single space, then caps length.
|
|
155
|
+
* So untrusted text (a spawn `role`, a peer activity gist) can neither break the
|
|
156
|
+
* line, inject prompt structure, nor smuggle terminal escapes. Caps at `max`
|
|
157
|
+
* characters (clamped to >= 1; default `ROLE_LABEL_MAX`), appending an ellipsis when truncated.
|
|
158
|
+
*/
|
|
159
|
+
export declare function oneLineLabel(text: string, max?: number): string;
|
|
160
|
+
/**
|
|
161
|
+
* Display name for a spawned subagent: its tailored `role` (label-normalized)
|
|
162
|
+
* when one is given, else the agent type's name. Empty/whitespace roles fall
|
|
163
|
+
* back to the agent name.
|
|
164
|
+
*/
|
|
165
|
+
export declare function resolveSubagentDisplayName(role: string | undefined, agentName: string): string;
|
|
166
|
+
/**
|
|
167
|
+
* Whether an agent at `taskDepth` may still spawn children — i.e. it currently
|
|
168
|
+
* holds the `task` tool. Mirrors the task-tool availability gate;
|
|
169
|
+
* `maxRecursionDepth < 0` disables the cap entirely.
|
|
170
|
+
*/
|
|
171
|
+
export declare function canSpawnAtDepth(maxRecursionDepth: number, taskDepth: number): boolean;
|
|
136
172
|
/** A code review finding reported by the reviewer agent */
|
|
137
173
|
export interface ReviewFinding {
|
|
138
174
|
title: string;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
|
|
18
18
|
import { type Component } from "@oh-my-pi/pi-tui";
|
|
19
|
-
import
|
|
19
|
+
import { z } from "zod/v4";
|
|
20
20
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
21
21
|
import { type Theme } from "../modes/theme/theme";
|
|
22
22
|
import type { ToolSession } from ".";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
|
|
2
2
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
3
|
-
import
|
|
3
|
+
import { z } from "zod/v4";
|
|
4
4
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
5
5
|
import type { Theme } from "../modes/theme/theme";
|
|
6
6
|
import type { ToolSession } from ".";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
|
|
2
2
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
3
|
-
import
|
|
3
|
+
import { z } from "zod/v4";
|
|
4
4
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
5
5
|
import type { Theme } from "../modes/theme/theme";
|
|
6
6
|
import type { ToolSession } from ".";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback, ToolApprovalDecision } from "@oh-my-pi/pi-agent-core";
|
|
2
2
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
3
|
-
import
|
|
3
|
+
import { z } from "zod/v4";
|
|
4
4
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
5
5
|
import { type Theme } from "../modes/theme/theme";
|
|
6
6
|
import type { ToolSession } from ".";
|
|
@@ -124,7 +124,7 @@ export declare function createShellRenderer<TArgs>(config: ShellRendererConfig<T
|
|
|
124
124
|
}, uiTheme: Theme, args?: TArgs): Component;
|
|
125
125
|
mergeCallAndResult: boolean;
|
|
126
126
|
inline: boolean;
|
|
127
|
-
provisionalPendingPreview:
|
|
127
|
+
provisionalPendingPreview: string;
|
|
128
128
|
};
|
|
129
129
|
export declare const bashToolRenderer: {
|
|
130
130
|
renderCall(args: BashRenderArgs, options: RenderResultOptions, uiTheme: Theme): Component;
|
|
@@ -140,6 +140,6 @@ export declare const bashToolRenderer: {
|
|
|
140
140
|
}, uiTheme: Theme, args?: BashRenderArgs | undefined): Component;
|
|
141
141
|
mergeCallAndResult: boolean;
|
|
142
142
|
inline: boolean;
|
|
143
|
-
provisionalPendingPreview:
|
|
143
|
+
provisionalPendingPreview: string;
|
|
144
144
|
};
|
|
145
145
|
export {};
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { JsRuntime } from "../../../eval/js/shared/runtime";
|
|
2
|
+
import type { ToolSession } from "../../../sdk";
|
|
3
|
+
import { type ReadableFormat } from "../readable";
|
|
4
|
+
import type { Observation, ReadyInfo, RunResultOk, ScreenshotResult, SessionSnapshot } from "../tab-protocol";
|
|
5
|
+
import type { CmuxSocketClient } from "./socket-client";
|
|
6
|
+
interface ScreenshotOptions {
|
|
7
|
+
selector?: string;
|
|
8
|
+
fullPage?: boolean;
|
|
9
|
+
save?: string;
|
|
10
|
+
silent?: boolean;
|
|
11
|
+
encoding?: "base64" | "binary";
|
|
12
|
+
}
|
|
13
|
+
interface ObserveOptions {
|
|
14
|
+
includeAll?: boolean;
|
|
15
|
+
viewportOnly?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface RunContext {
|
|
18
|
+
session: SessionSnapshot;
|
|
19
|
+
displays: RunResultOk["displays"];
|
|
20
|
+
screenshots: ScreenshotResult[];
|
|
21
|
+
signal?: AbortSignal;
|
|
22
|
+
timeoutMs: number;
|
|
23
|
+
}
|
|
24
|
+
type WaitUntil = "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
|
|
25
|
+
type DragTarget = string | {
|
|
26
|
+
readonly x: number;
|
|
27
|
+
readonly y: number;
|
|
28
|
+
};
|
|
29
|
+
interface BoundingBox {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
}
|
|
35
|
+
interface CmuxResponseRecord {
|
|
36
|
+
id: number;
|
|
37
|
+
url: string;
|
|
38
|
+
status: number;
|
|
39
|
+
statusText: string;
|
|
40
|
+
headers: Record<string, string>;
|
|
41
|
+
body: string;
|
|
42
|
+
}
|
|
43
|
+
interface ViewportOptions {
|
|
44
|
+
width: number;
|
|
45
|
+
height: number;
|
|
46
|
+
deviceScaleFactor?: number;
|
|
47
|
+
}
|
|
48
|
+
export interface RunCmuxCodeOptions {
|
|
49
|
+
code: string;
|
|
50
|
+
timeoutMs: number;
|
|
51
|
+
signal?: AbortSignal;
|
|
52
|
+
session: ToolSession;
|
|
53
|
+
snapshot: SessionSnapshot;
|
|
54
|
+
}
|
|
55
|
+
export declare class CmuxTab {
|
|
56
|
+
#private;
|
|
57
|
+
constructor(opts: {
|
|
58
|
+
client: CmuxSocketClient;
|
|
59
|
+
surfaceId: string;
|
|
60
|
+
url?: string;
|
|
61
|
+
title?: string;
|
|
62
|
+
});
|
|
63
|
+
get surfaceId(): string;
|
|
64
|
+
get page(): CmuxPageFacade;
|
|
65
|
+
get browser(): CmuxBrowserFacade;
|
|
66
|
+
viewport(): ReadyInfo["viewport"];
|
|
67
|
+
setViewport(viewport: ViewportOptions): Promise<void>;
|
|
68
|
+
url(): string;
|
|
69
|
+
title(): Promise<string>;
|
|
70
|
+
readyInfo(viewport?: ReadyInfo["viewport"]): Promise<ReadyInfo>;
|
|
71
|
+
setRunContext(context: RunContext): void;
|
|
72
|
+
clearRunContext(): void;
|
|
73
|
+
goto(url: string, opts?: {
|
|
74
|
+
waitUntil?: WaitUntil;
|
|
75
|
+
timeoutMs?: number;
|
|
76
|
+
}): Promise<void>;
|
|
77
|
+
observe(opts?: ObserveOptions): Promise<Observation>;
|
|
78
|
+
click(selector: string): Promise<void>;
|
|
79
|
+
dblclick(selector: string): Promise<void>;
|
|
80
|
+
hover(selector: string): Promise<void>;
|
|
81
|
+
focus(selector: string): Promise<void>;
|
|
82
|
+
check(selector: string): Promise<void>;
|
|
83
|
+
uncheck(selector: string): Promise<void>;
|
|
84
|
+
type(selector: string, text: string): Promise<void>;
|
|
85
|
+
fill(selector: string, value: string): Promise<void>;
|
|
86
|
+
press(key: string, opts?: {
|
|
87
|
+
selector?: string;
|
|
88
|
+
}): Promise<void>;
|
|
89
|
+
scroll(dx: number, dy: number): Promise<void>;
|
|
90
|
+
waitFor(selector: string, opts?: {
|
|
91
|
+
timeout?: number;
|
|
92
|
+
}): Promise<CmuxElementHandle>;
|
|
93
|
+
evaluate<TResult, TArgs extends unknown[]>(fn: string | ((...args: TArgs) => TResult | Promise<TResult>), ...args: TArgs): Promise<TResult>;
|
|
94
|
+
scrollIntoView(selector: string): Promise<void>;
|
|
95
|
+
select(selector: string, ...values: string[]): Promise<string[]>;
|
|
96
|
+
extract(format?: ReadableFormat): Promise<string>;
|
|
97
|
+
screenshot(opts?: ScreenshotOptions): Promise<ScreenshotResult>;
|
|
98
|
+
waitForUrl(pattern: string | RegExp, opts?: {
|
|
99
|
+
timeout?: number;
|
|
100
|
+
}): Promise<string>;
|
|
101
|
+
drag(from: DragTarget, to: DragTarget): Promise<void>;
|
|
102
|
+
uploadFile(selector: string, ...filePaths: string[]): Promise<void>;
|
|
103
|
+
waitForResponse(pattern: string | RegExp | ((response: CmuxResponse) => boolean | Promise<boolean>), opts?: {
|
|
104
|
+
timeout?: number;
|
|
105
|
+
}): Promise<CmuxResponse>;
|
|
106
|
+
id(id: number): Promise<CmuxElementHandle>;
|
|
107
|
+
ensureRuntime(session: SessionSnapshot): JsRuntime;
|
|
108
|
+
elementHandle(selector: string): CmuxElementHandle;
|
|
109
|
+
elementExists(selector: string): Promise<boolean>;
|
|
110
|
+
elementBox(selector: string): Promise<BoundingBox | null>;
|
|
111
|
+
evaluateOnSelector<TResult>(selector: string, source: string, args: unknown[]): Promise<TResult>;
|
|
112
|
+
pageContent(): Promise<string>;
|
|
113
|
+
pageScreenshot(opts?: ScreenshotOptions): Promise<Buffer | string>;
|
|
114
|
+
waitForFunction(fn: string | ((...args: unknown[]) => unknown | Promise<unknown>), opts: {
|
|
115
|
+
timeout?: number;
|
|
116
|
+
polling?: number;
|
|
117
|
+
} | undefined, ...args: unknown[]): Promise<unknown>;
|
|
118
|
+
}
|
|
119
|
+
declare class CmuxResponse {
|
|
120
|
+
#private;
|
|
121
|
+
constructor(record: CmuxResponseRecord);
|
|
122
|
+
url(): string;
|
|
123
|
+
status(): number;
|
|
124
|
+
statusText(): string;
|
|
125
|
+
headers(): Record<string, string>;
|
|
126
|
+
text(): Promise<string>;
|
|
127
|
+
json(): Promise<unknown>;
|
|
128
|
+
}
|
|
129
|
+
declare class CmuxElementHandle {
|
|
130
|
+
#private;
|
|
131
|
+
constructor(tab: CmuxTab, selector: string);
|
|
132
|
+
click(): Promise<void>;
|
|
133
|
+
type(text: string): Promise<void>;
|
|
134
|
+
fill(value: string): Promise<void>;
|
|
135
|
+
focus(): Promise<void>;
|
|
136
|
+
hover(): Promise<void>;
|
|
137
|
+
evaluate<TResult, TArgs extends unknown[]>(fn: (element: unknown, ...args: TArgs) => TResult | Promise<TResult>, ...args: TArgs): Promise<TResult>;
|
|
138
|
+
boundingBox(): Promise<BoundingBox | null>;
|
|
139
|
+
uploadFile(...paths: string[]): Promise<void>;
|
|
140
|
+
dispose(): Promise<void>;
|
|
141
|
+
}
|
|
142
|
+
declare class CmuxLocator {
|
|
143
|
+
#private;
|
|
144
|
+
constructor(tab: CmuxTab, selector: string);
|
|
145
|
+
setTimeout(timeoutMs: number): this;
|
|
146
|
+
click(): Promise<void>;
|
|
147
|
+
fill(value: string): Promise<void>;
|
|
148
|
+
waitHandle(): Promise<CmuxElementHandle>;
|
|
149
|
+
}
|
|
150
|
+
declare class CmuxPageFacade {
|
|
151
|
+
#private;
|
|
152
|
+
readonly keyboard: {
|
|
153
|
+
press: (key: string) => Promise<void>;
|
|
154
|
+
};
|
|
155
|
+
readonly mouse: {
|
|
156
|
+
wheel: (delta: {
|
|
157
|
+
deltaX?: number;
|
|
158
|
+
deltaY?: number;
|
|
159
|
+
}) => Promise<void>;
|
|
160
|
+
move: (x: number, y: number) => Promise<void>;
|
|
161
|
+
down: () => Promise<void>;
|
|
162
|
+
up: () => Promise<void>;
|
|
163
|
+
};
|
|
164
|
+
constructor(tab: CmuxTab);
|
|
165
|
+
url(): string;
|
|
166
|
+
title(): Promise<string>;
|
|
167
|
+
viewport(): ReadyInfo["viewport"];
|
|
168
|
+
setViewport(viewport: ViewportOptions): Promise<void>;
|
|
169
|
+
goto(url: string, opts?: {
|
|
170
|
+
waitUntil?: WaitUntil;
|
|
171
|
+
timeout?: number;
|
|
172
|
+
}): Promise<{
|
|
173
|
+
url: string;
|
|
174
|
+
}>;
|
|
175
|
+
evaluate<TResult, TArgs extends unknown[]>(fn: string | ((...args: TArgs) => TResult | Promise<TResult>), ...args: TArgs): Promise<TResult>;
|
|
176
|
+
content(): Promise<string>;
|
|
177
|
+
locator(selector: string): CmuxLocator;
|
|
178
|
+
$(selector: string): Promise<CmuxElementHandle | null>;
|
|
179
|
+
waitForSelector(selector: string, opts?: {
|
|
180
|
+
timeout?: number;
|
|
181
|
+
}): Promise<CmuxElementHandle>;
|
|
182
|
+
waitForFunction(fn: string | ((...args: unknown[]) => unknown | Promise<unknown>), opts?: {
|
|
183
|
+
timeout?: number;
|
|
184
|
+
polling?: number;
|
|
185
|
+
}, ...args: unknown[]): Promise<unknown>;
|
|
186
|
+
waitForResponse(pattern: string | RegExp | ((response: CmuxResponse) => boolean | Promise<boolean>), opts?: {
|
|
187
|
+
timeout?: number;
|
|
188
|
+
}): Promise<CmuxResponse>;
|
|
189
|
+
screenshot(opts?: ScreenshotOptions): Promise<Buffer | string>;
|
|
190
|
+
}
|
|
191
|
+
declare class CmuxBrowserFacade {
|
|
192
|
+
#private;
|
|
193
|
+
connected: boolean;
|
|
194
|
+
constructor(tab: CmuxTab);
|
|
195
|
+
pages(): Promise<CmuxPageFacade[]>;
|
|
196
|
+
version(): Promise<string>;
|
|
197
|
+
wsEndpoint(): string;
|
|
198
|
+
disconnect(): void;
|
|
199
|
+
close(): Promise<void>;
|
|
200
|
+
}
|
|
201
|
+
export declare function runCmuxCode(tab: CmuxTab, opts: RunCmuxCodeOptions): Promise<RunResultOk>;
|
|
202
|
+
export {};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { Observation } from "../tab-protocol";
|
|
2
|
+
export interface CmuxKind {
|
|
3
|
+
kind: "cmux";
|
|
4
|
+
socketPath: string;
|
|
5
|
+
password?: string;
|
|
6
|
+
surface?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface CmuxOpenSplitResult {
|
|
9
|
+
surface_id?: unknown;
|
|
10
|
+
url?: unknown;
|
|
11
|
+
workspace_id?: unknown;
|
|
12
|
+
created_split?: unknown;
|
|
13
|
+
placement_strategy?: unknown;
|
|
14
|
+
}
|
|
15
|
+
export interface CmuxSnapshotRef {
|
|
16
|
+
role?: unknown;
|
|
17
|
+
name?: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface CmuxSnapshotPage {
|
|
20
|
+
title?: unknown;
|
|
21
|
+
url?: unknown;
|
|
22
|
+
ready_state?: unknown;
|
|
23
|
+
text?: unknown;
|
|
24
|
+
html?: unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface CmuxSnapshotResult {
|
|
27
|
+
snapshot?: unknown;
|
|
28
|
+
refs?: Record<string, CmuxSnapshotRef>;
|
|
29
|
+
page?: CmuxSnapshotPage;
|
|
30
|
+
url?: unknown;
|
|
31
|
+
title?: unknown;
|
|
32
|
+
ready_state?: unknown;
|
|
33
|
+
surface_id?: unknown;
|
|
34
|
+
}
|
|
35
|
+
export interface CmuxEvalResult {
|
|
36
|
+
value?: unknown;
|
|
37
|
+
surface_id?: unknown;
|
|
38
|
+
content_world?: unknown;
|
|
39
|
+
}
|
|
40
|
+
export interface CmuxUrlGetResult {
|
|
41
|
+
url?: unknown;
|
|
42
|
+
surface_id?: unknown;
|
|
43
|
+
workspace_id?: unknown;
|
|
44
|
+
}
|
|
45
|
+
export interface CmuxScreenshotResult {
|
|
46
|
+
png_base64?: unknown;
|
|
47
|
+
path?: unknown;
|
|
48
|
+
url?: unknown;
|
|
49
|
+
surface_id?: unknown;
|
|
50
|
+
width?: unknown;
|
|
51
|
+
height?: unknown;
|
|
52
|
+
}
|
|
53
|
+
export interface CmuxGeometry {
|
|
54
|
+
innerWidth: number;
|
|
55
|
+
innerHeight: number;
|
|
56
|
+
dpr: number;
|
|
57
|
+
scrollX: number;
|
|
58
|
+
scrollY: number;
|
|
59
|
+
scrollWidth: number;
|
|
60
|
+
scrollHeight: number;
|
|
61
|
+
}
|
|
62
|
+
export declare const GEOMETRY_SCRIPT = "(() => ({ innerWidth: window.innerWidth, innerHeight: window.innerHeight, dpr: window.devicePixelRatio||1, scrollX: window.scrollX, scrollY: window.scrollY, scrollWidth: document.documentElement.scrollWidth, scrollHeight: document.documentElement.scrollHeight }))()";
|
|
63
|
+
export declare function cmuxSnapshotToObservation(result: CmuxSnapshotResult, viewport: Observation["viewport"], geometry: CmuxGeometry): Observation;
|
|
64
|
+
export declare function serializeEval(fn: string | ((...args: unknown[]) => unknown), args: unknown[]): string;
|
|
65
|
+
export declare function mapWaitUntil(waitUntil: string | undefined): "interactive" | "complete";
|
|
66
|
+
export interface ResolveCmuxKindOptions {
|
|
67
|
+
surface?: string;
|
|
68
|
+
settingEnabled?: boolean;
|
|
69
|
+
}
|
|
70
|
+
export declare function resolveCmuxKind(options?: ResolveCmuxKindOptions | null, env?: Record<string, string | undefined>): CmuxKind | null;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type CmuxErrorPayload = {
|
|
2
|
+
code?: unknown;
|
|
3
|
+
message?: unknown;
|
|
4
|
+
details?: unknown;
|
|
5
|
+
};
|
|
6
|
+
export declare function formatCmuxError(error: CmuxErrorPayload | undefined): string;
|
|
7
|
+
export declare class CmuxSocketClient {
|
|
8
|
+
#private;
|
|
9
|
+
constructor(opts: {
|
|
10
|
+
socketPath: string;
|
|
11
|
+
password?: string;
|
|
12
|
+
});
|
|
13
|
+
connect(): Promise<void>;
|
|
14
|
+
request(method: string, params: Record<string, unknown>, opts?: {
|
|
15
|
+
timeoutMs?: number;
|
|
16
|
+
}): Promise<Record<string, unknown>>;
|
|
17
|
+
close(): void;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Subprocess } from "bun";
|
|
2
2
|
import type { Browser, CDPSession } from "puppeteer-core";
|
|
3
|
+
import type { CmuxKind } from "./cmux/rpc";
|
|
4
|
+
import { CmuxSocketClient } from "./cmux/socket-client";
|
|
3
5
|
import { type UserAgentOverride } from "./launch";
|
|
4
|
-
export type
|
|
6
|
+
export type PuppeteerBrowserKind = {
|
|
5
7
|
kind: "headless";
|
|
6
8
|
headless: boolean;
|
|
7
9
|
} | {
|
|
@@ -11,20 +13,30 @@ export type BrowserKind = {
|
|
|
11
13
|
kind: "connected";
|
|
12
14
|
cdpUrl: string;
|
|
13
15
|
};
|
|
16
|
+
export type BrowserKind = PuppeteerBrowserKind | CmuxKind;
|
|
14
17
|
export type BrowserKindTag = BrowserKind["kind"];
|
|
15
|
-
|
|
18
|
+
interface BrowserHandleCommon {
|
|
16
19
|
key: string;
|
|
17
20
|
kind: BrowserKind;
|
|
21
|
+
refCount: number;
|
|
22
|
+
}
|
|
23
|
+
export interface PuppeteerBrowserHandle extends BrowserHandleCommon {
|
|
24
|
+
kind: PuppeteerBrowserKind;
|
|
18
25
|
browser: Browser;
|
|
19
26
|
cdpUrl?: string;
|
|
20
27
|
pid?: number;
|
|
21
28
|
subprocess?: Subprocess;
|
|
22
|
-
refCount: number;
|
|
23
29
|
stealth: {
|
|
24
30
|
browserSession: CDPSession | null;
|
|
25
31
|
override: UserAgentOverride | null;
|
|
26
32
|
};
|
|
27
33
|
}
|
|
34
|
+
export interface CmuxBrowserHandle extends BrowserHandleCommon {
|
|
35
|
+
kind: CmuxKind;
|
|
36
|
+
client: CmuxSocketClient;
|
|
37
|
+
surface?: string;
|
|
38
|
+
}
|
|
39
|
+
export type BrowserHandle = PuppeteerBrowserHandle | CmuxBrowserHandle;
|
|
28
40
|
export interface AcquireBrowserOptions {
|
|
29
41
|
cwd: string;
|
|
30
42
|
viewport?: {
|
|
@@ -41,3 +53,4 @@ export declare function holdBrowser(handle: BrowserHandle): void;
|
|
|
41
53
|
export declare function releaseBrowser(handle: BrowserHandle, opts: {
|
|
42
54
|
kill: boolean;
|
|
43
55
|
}): Promise<void>;
|
|
56
|
+
export {};
|
|
@@ -37,6 +37,8 @@ export interface ScreenshotResult {
|
|
|
37
37
|
export interface SessionSnapshot {
|
|
38
38
|
cwd: string;
|
|
39
39
|
browserScreenshotDir?: string;
|
|
40
|
+
/** Force non-WebP screenshot encoding (e.g. for Ollama). Unset honors `OMP_NO_WEBP`. */
|
|
41
|
+
excludeWebP?: boolean;
|
|
40
42
|
}
|
|
41
43
|
export type WorkerInitPayload = {
|
|
42
44
|
mode: "headless";
|