@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
package/src/task/render.ts
CHANGED
|
@@ -47,6 +47,12 @@ interface TaskRenderContext {
|
|
|
47
47
|
}
|
|
48
48
|
type TaskRenderOptions = RenderResultOptions & { renderContext?: TaskRenderContext };
|
|
49
49
|
|
|
50
|
+
const MAX_NESTED_TASK_RENDER_DEPTH = 8;
|
|
51
|
+
|
|
52
|
+
function renderNestedCycleLine(theme: Theme): string {
|
|
53
|
+
return theme.fg("dim", "… nested task progress already shown");
|
|
54
|
+
}
|
|
55
|
+
|
|
50
56
|
/**
|
|
51
57
|
* Get status icon for agent state.
|
|
52
58
|
* For running status, uses animated spinner if spinnerFrame is provided.
|
|
@@ -687,6 +693,8 @@ function renderAgentProgress(
|
|
|
687
693
|
theme: Theme,
|
|
688
694
|
spinnerFrame?: number,
|
|
689
695
|
frozen = false,
|
|
696
|
+
seenNestedTasks?: WeakSet<object>,
|
|
697
|
+
nestedDepth = 0,
|
|
690
698
|
): string[] {
|
|
691
699
|
const lines: string[] = [];
|
|
692
700
|
|
|
@@ -859,7 +867,15 @@ function renderAgentProgress(
|
|
|
859
867
|
const inflight = progress.inflightTaskDetails;
|
|
860
868
|
if (completedTaskCalls.length > 0 || inflight) {
|
|
861
869
|
const snapshots = inflight ? [...completedTaskCalls, inflight] : completedTaskCalls;
|
|
862
|
-
const nestedLines = renderNestedTaskTree(
|
|
870
|
+
const nestedLines = renderNestedTaskTree(
|
|
871
|
+
snapshots,
|
|
872
|
+
expanded,
|
|
873
|
+
theme,
|
|
874
|
+
spinnerFrame,
|
|
875
|
+
frozen,
|
|
876
|
+
seenNestedTasks,
|
|
877
|
+
nestedDepth,
|
|
878
|
+
);
|
|
863
879
|
for (const line of nestedLines) {
|
|
864
880
|
lines.push(`${continuePrefix}${line}`);
|
|
865
881
|
}
|
|
@@ -984,6 +1000,8 @@ function renderAgentResult(
|
|
|
984
1000
|
continuePrefix: string,
|
|
985
1001
|
expanded: boolean,
|
|
986
1002
|
theme: Theme,
|
|
1003
|
+
seenNestedTasks?: WeakSet<object>,
|
|
1004
|
+
nestedDepth = 0,
|
|
987
1005
|
): string[] {
|
|
988
1006
|
const lines: string[] = [];
|
|
989
1007
|
|
|
@@ -1088,11 +1106,24 @@ function renderAgentResult(
|
|
|
1088
1106
|
// Skip review tools - handled above
|
|
1089
1107
|
if (toolName === "yield" || toolName === "report_finding") continue;
|
|
1090
1108
|
|
|
1109
|
+
const isTaskTool = toolName === "task";
|
|
1110
|
+
if (isTaskTool && (dataArray as unknown[]).length > 0) {
|
|
1111
|
+
for (const line of renderNestedTaskResults(
|
|
1112
|
+
dataArray as TaskToolDetails[],
|
|
1113
|
+
expanded,
|
|
1114
|
+
theme,
|
|
1115
|
+
seenNestedTasks,
|
|
1116
|
+
nestedDepth,
|
|
1117
|
+
)) {
|
|
1118
|
+
deferredToolLines.push(`${continuePrefix}${line}`);
|
|
1119
|
+
}
|
|
1120
|
+
continue;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1091
1123
|
const handler = subprocessToolRegistry.getHandler(toolName);
|
|
1092
1124
|
if (handler?.renderFinal && (dataArray as unknown[]).length > 0) {
|
|
1093
|
-
const isTaskTool = toolName === "task";
|
|
1094
1125
|
const component = handler.renderFinal(dataArray as unknown[], theme, expanded);
|
|
1095
|
-
const target =
|
|
1126
|
+
const target = lines;
|
|
1096
1127
|
if (!isTaskTool) {
|
|
1097
1128
|
hasCustomRendering = true;
|
|
1098
1129
|
target.push(`${continuePrefix}${theme.fg("dim", `Tool: ${toolName}`)}`);
|
|
@@ -1417,15 +1448,34 @@ function nestedMarkers(isLast: boolean, theme: Theme): { prefix: string; continu
|
|
|
1417
1448
|
};
|
|
1418
1449
|
}
|
|
1419
1450
|
|
|
1420
|
-
function renderNestedTaskResults(
|
|
1451
|
+
function renderNestedTaskResults(
|
|
1452
|
+
detailsList: TaskToolDetails[],
|
|
1453
|
+
expanded: boolean,
|
|
1454
|
+
theme: Theme,
|
|
1455
|
+
seen: WeakSet<object> = new WeakSet<object>(),
|
|
1456
|
+
depth = 0,
|
|
1457
|
+
): string[] {
|
|
1421
1458
|
const lines: string[] = [];
|
|
1422
1459
|
for (const details of detailsList) {
|
|
1423
|
-
if (
|
|
1460
|
+
if (seen.has(details)) {
|
|
1461
|
+
lines.push(renderNestedCycleLine(theme));
|
|
1462
|
+
continue;
|
|
1463
|
+
}
|
|
1464
|
+
if (depth >= MAX_NESTED_TASK_RENDER_DEPTH) {
|
|
1465
|
+
lines.push(theme.fg("dim", "… nested task depth limit reached"));
|
|
1466
|
+
continue;
|
|
1467
|
+
}
|
|
1468
|
+
seen.add(details);
|
|
1469
|
+
if (!details.results || details.results.length === 0) {
|
|
1470
|
+
seen.delete(details);
|
|
1471
|
+
continue;
|
|
1472
|
+
}
|
|
1424
1473
|
const ordered = orderResultsForDisplay(details.results);
|
|
1425
1474
|
ordered.forEach((result, index) => {
|
|
1426
1475
|
const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
|
|
1427
|
-
lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme));
|
|
1476
|
+
lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme, seen, depth + 1));
|
|
1428
1477
|
});
|
|
1478
|
+
seen.delete(details);
|
|
1429
1479
|
}
|
|
1430
1480
|
return lines;
|
|
1431
1481
|
}
|
|
@@ -1441,16 +1491,28 @@ function renderNestedTaskTree(
|
|
|
1441
1491
|
theme: Theme,
|
|
1442
1492
|
spinnerFrame?: number,
|
|
1443
1493
|
frozen = false,
|
|
1494
|
+
seen: WeakSet<object> = new WeakSet<object>(),
|
|
1495
|
+
depth = 0,
|
|
1444
1496
|
): string[] {
|
|
1445
1497
|
const lines: string[] = [];
|
|
1446
1498
|
for (const details of detailsList) {
|
|
1499
|
+
if (seen.has(details)) {
|
|
1500
|
+
lines.push(renderNestedCycleLine(theme));
|
|
1501
|
+
continue;
|
|
1502
|
+
}
|
|
1503
|
+
if (depth >= MAX_NESTED_TASK_RENDER_DEPTH) {
|
|
1504
|
+
lines.push(theme.fg("dim", "… nested task depth limit reached"));
|
|
1505
|
+
continue;
|
|
1506
|
+
}
|
|
1507
|
+
seen.add(details);
|
|
1447
1508
|
const hasResults = Boolean(details.results && details.results.length > 0);
|
|
1448
1509
|
if (hasResults) {
|
|
1449
1510
|
const ordered = orderResultsForDisplay(details.results);
|
|
1450
1511
|
ordered.forEach((result, index) => {
|
|
1451
1512
|
const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
|
|
1452
|
-
lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme));
|
|
1513
|
+
lines.push(...renderAgentResult(result, prefix, continuePrefix, expanded, theme, seen, depth + 1));
|
|
1453
1514
|
});
|
|
1515
|
+
seen.delete(details);
|
|
1454
1516
|
continue;
|
|
1455
1517
|
}
|
|
1456
1518
|
const inflight = details.progress;
|
|
@@ -1458,9 +1520,22 @@ function renderNestedTaskTree(
|
|
|
1458
1520
|
const ordered = orderProgressForDisplay(inflight);
|
|
1459
1521
|
ordered.forEach((prog, index) => {
|
|
1460
1522
|
const { prefix, continuePrefix } = nestedMarkers(index === ordered.length - 1, theme);
|
|
1461
|
-
lines.push(
|
|
1523
|
+
lines.push(
|
|
1524
|
+
...renderAgentProgress(
|
|
1525
|
+
prog,
|
|
1526
|
+
prefix,
|
|
1527
|
+
continuePrefix,
|
|
1528
|
+
expanded,
|
|
1529
|
+
theme,
|
|
1530
|
+
spinnerFrame,
|
|
1531
|
+
frozen,
|
|
1532
|
+
seen,
|
|
1533
|
+
depth + 1,
|
|
1534
|
+
),
|
|
1535
|
+
);
|
|
1462
1536
|
});
|
|
1463
1537
|
}
|
|
1538
|
+
seen.delete(details);
|
|
1464
1539
|
}
|
|
1465
1540
|
return lines;
|
|
1466
1541
|
}
|
package/src/task/types.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ThinkingLevel } from "@oh-my-pi/pi-agent-core";
|
|
2
2
|
import type { Usage } from "@oh-my-pi/pi-ai";
|
|
3
3
|
import { $env } from "@oh-my-pi/pi-utils";
|
|
4
|
-
import
|
|
4
|
+
import { z } from "zod/v4";
|
|
5
5
|
import type { AgentSessionEvent } from "../session/agent-session";
|
|
6
6
|
import type { NestedRepoPatch } from "./worktree";
|
|
7
7
|
|
|
@@ -74,6 +74,11 @@ export interface SubagentLifecyclePayload {
|
|
|
74
74
|
detached?: boolean;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
+
/** Display cap for a normalized one-line label (roster line, registry `displayName`, prompt field). */
|
|
78
|
+
export const ROLE_LABEL_MAX = 80;
|
|
79
|
+
/** Schema bound on the raw `role` input, before it is label-normalized at every use site. */
|
|
80
|
+
export const ROLE_INPUT_MAX = 256;
|
|
81
|
+
|
|
77
82
|
/**
|
|
78
83
|
* One unit of work. The single-spawn schema is `{ agent, ...taskItemSchema }`;
|
|
79
84
|
* the batch schema (`task.batch`) is `{ agent, context, tasks: taskItemSchema[] }`.
|
|
@@ -83,6 +88,13 @@ export interface SubagentLifecyclePayload {
|
|
|
83
88
|
const taskItemShape = {
|
|
84
89
|
id: z.string().max(48).optional().describe("stable agent id; default generated"),
|
|
85
90
|
description: z.string().optional().describe("ui label, not seen by subagent"),
|
|
91
|
+
role: z
|
|
92
|
+
.string()
|
|
93
|
+
.max(ROLE_INPUT_MAX)
|
|
94
|
+
.optional()
|
|
95
|
+
.describe(
|
|
96
|
+
"specialist role/expertise this subagent embodies (e.g. 'Rust async-runtime specialist'); shapes its identity and display name",
|
|
97
|
+
),
|
|
86
98
|
assignment: z.string().describe("the work; self-contained instructions"),
|
|
87
99
|
};
|
|
88
100
|
const isolatedShape = {
|
|
@@ -104,6 +116,8 @@ export interface TaskItem {
|
|
|
104
116
|
id?: string;
|
|
105
117
|
/** UI label, not seen by the subagent. */
|
|
106
118
|
description?: string;
|
|
119
|
+
/** Specialist role/expertise this subagent embodies; shapes its system-prompt identity and display name. */
|
|
120
|
+
role?: string;
|
|
107
121
|
/** The work; required by the schema. */
|
|
108
122
|
assignment?: string;
|
|
109
123
|
/** Run this spawn in an isolated worktree (batch form; flat form carries it top-level). */
|
|
@@ -149,6 +163,8 @@ export interface TaskParams {
|
|
|
149
163
|
id?: string;
|
|
150
164
|
/** UI label (flat form), not seen by the subagent. */
|
|
151
165
|
description?: string;
|
|
166
|
+
/** Specialist role/expertise this subagent embodies; shapes its system-prompt identity and display name. */
|
|
167
|
+
role?: string;
|
|
152
168
|
/** The work (flat form). */
|
|
153
169
|
assignment?: string;
|
|
154
170
|
/** Batch form (`task.batch`): one subagent per item. */
|
|
@@ -159,6 +175,43 @@ export interface TaskParams {
|
|
|
159
175
|
isolated?: boolean;
|
|
160
176
|
}
|
|
161
177
|
|
|
178
|
+
/**
|
|
179
|
+
* One-line, length-capped label safe for a single roster line, a registry
|
|
180
|
+
* `displayName`, or a system-prompt field. Collapses every run of whitespace
|
|
181
|
+
* AND control/format characters — including U+0085 NEL, ESC/ANSI, and the
|
|
182
|
+
* zero-width separators that `\s` misses — to a single space, then caps length.
|
|
183
|
+
* So untrusted text (a spawn `role`, a peer activity gist) can neither break the
|
|
184
|
+
* line, inject prompt structure, nor smuggle terminal escapes. Caps at `max`
|
|
185
|
+
* characters (clamped to >= 1; default `ROLE_LABEL_MAX`), appending an ellipsis when truncated.
|
|
186
|
+
*/
|
|
187
|
+
export function oneLineLabel(text: string, max = ROLE_LABEL_MAX): string {
|
|
188
|
+
const oneLine = text.replace(/[\p{Cc}\p{Cf}\s]+/gu, " ").trim();
|
|
189
|
+
const cap = Math.max(1, max);
|
|
190
|
+
// Count/cut by code point, not UTF-16 code unit, so truncation can never
|
|
191
|
+
// split an astral character into a lone surrogate.
|
|
192
|
+
const chars = [...oneLine];
|
|
193
|
+
return chars.length > cap ? `${chars.slice(0, cap - 1).join("")}…` : oneLine;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Display name for a spawned subagent: its tailored `role` (label-normalized)
|
|
198
|
+
* when one is given, else the agent type's name. Empty/whitespace roles fall
|
|
199
|
+
* back to the agent name.
|
|
200
|
+
*/
|
|
201
|
+
export function resolveSubagentDisplayName(role: string | undefined, agentName: string): string {
|
|
202
|
+
const trimmed = role?.trim();
|
|
203
|
+
return trimmed ? oneLineLabel(trimmed) : agentName;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Whether an agent at `taskDepth` may still spawn children — i.e. it currently
|
|
208
|
+
* holds the `task` tool. Mirrors the task-tool availability gate;
|
|
209
|
+
* `maxRecursionDepth < 0` disables the cap entirely.
|
|
210
|
+
*/
|
|
211
|
+
export function canSpawnAtDepth(maxRecursionDepth: number, taskDepth: number): boolean {
|
|
212
|
+
return maxRecursionDepth < 0 || taskDepth < maxRecursionDepth;
|
|
213
|
+
}
|
|
214
|
+
|
|
162
215
|
/** A code review finding reported by the reviewer agent */
|
|
163
216
|
export interface ReviewFinding {
|
|
164
217
|
title: string;
|
package/src/tools/ask.ts
CHANGED
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
import type { AgentTool, AgentToolContext, AgentToolResult, AgentToolUpdateCallback } from "@oh-my-pi/pi-agent-core";
|
|
19
19
|
import { type Component, Markdown, type MarkdownTheme, renderInlineMarkdown, TERMINAL, Text } from "@oh-my-pi/pi-tui";
|
|
20
20
|
import { prompt, untilAborted } from "@oh-my-pi/pi-utils";
|
|
21
|
-
import
|
|
21
|
+
import { z } from "zod/v4";
|
|
22
22
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
23
23
|
import type { ExtensionUISelectItem } from "../extensibility/extensions";
|
|
24
24
|
import { getMarkdownTheme, type Theme, theme } from "../modes/theme/theme";
|
|
25
25
|
import askDescription from "../prompts/tools/ask.md" with { type: "text" };
|
|
26
|
+
import { vocalizer } from "../tts/vocalizer";
|
|
26
27
|
import { framedBlock, renderStatusLine } from "../tui";
|
|
27
28
|
import type { ToolSession } from ".";
|
|
28
29
|
import { formatErrorMessage, formatMeta, formatTitle } from "./render-utils";
|
|
@@ -487,6 +488,13 @@ export class AskTool implements AgentTool<typeof askSchema, AskToolDetails> {
|
|
|
487
488
|
};
|
|
488
489
|
}
|
|
489
490
|
|
|
491
|
+
// Speak the question(s) aloud before surfacing them. Ask vocalizes in every
|
|
492
|
+
// mode — it's the assistant addressing the user — gated only by speech.enabled
|
|
493
|
+
// (the vocalizer re-checks the setting and no-ops when disabled).
|
|
494
|
+
if (this.session.settings.get("speech.enabled")) {
|
|
495
|
+
vocalizer.speak(params.questions.map(q => q.question).join("\n"));
|
|
496
|
+
}
|
|
497
|
+
|
|
490
498
|
const askQuestion = async (
|
|
491
499
|
q: AskParams["questions"][number],
|
|
492
500
|
options?: { previous?: QuestionResult; navigation?: NavigationControls },
|
package/src/tools/ast-edit.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { type AstReplaceChange, type AstReplaceFileChange, astEdit } from "@oh-m
|
|
|
5
5
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
6
6
|
import { replaceTabs, Text } from "@oh-my-pi/pi-tui";
|
|
7
7
|
import { $envpos, prompt, untilAborted } from "@oh-my-pi/pi-utils";
|
|
8
|
-
import
|
|
8
|
+
import { z } from "zod/v4";
|
|
9
9
|
import { canonicalSnapshotKey, getFileSnapshotStore } from "../edit/file-snapshot-store";
|
|
10
10
|
import { normalizeToLF } from "../edit/normalize";
|
|
11
11
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
package/src/tools/ast-grep.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { type AstFindMatch, astGrep } from "@oh-my-pi/pi-natives";
|
|
|
5
5
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
6
6
|
import { Text } from "@oh-my-pi/pi-tui";
|
|
7
7
|
import { prompt, untilAborted } from "@oh-my-pi/pi-utils";
|
|
8
|
-
import
|
|
8
|
+
import { z } from "zod/v4";
|
|
9
9
|
import { recordFileSnapshot } from "../edit/file-snapshot-store";
|
|
10
10
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
11
11
|
import type { Theme } from "../modes/theme/theme";
|
package/src/tools/bash.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type {
|
|
|
9
9
|
import type { Component } from "@oh-my-pi/pi-tui";
|
|
10
10
|
import { ImageProtocol, TERMINAL } from "@oh-my-pi/pi-tui";
|
|
11
11
|
import { getProjectDir, isEnoent, logger, prompt } from "@oh-my-pi/pi-utils";
|
|
12
|
-
import
|
|
12
|
+
import { z } from "zod/v4";
|
|
13
13
|
import { type BashResult, executeBash } from "../exec/bash-executor";
|
|
14
14
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
15
15
|
import { InternalUrlRouter } from "../internal-urls";
|
|
@@ -1385,9 +1385,10 @@ export function createShellRenderer<TArgs>(config: ShellRendererConfig<TArgs>) {
|
|
|
1385
1385
|
},
|
|
1386
1386
|
mergeCallAndResult: true,
|
|
1387
1387
|
inline: true,
|
|
1388
|
-
//
|
|
1389
|
-
// shifts while args stream
|
|
1390
|
-
|
|
1388
|
+
// Collapsed pending preview caps the command to a viewport-sized tail
|
|
1389
|
+
// window that shifts while args stream. Expanded output is top-anchored
|
|
1390
|
+
// enough for the transcript to commit its settled prefix.
|
|
1391
|
+
provisionalPendingPreview: "collapsed",
|
|
1391
1392
|
};
|
|
1392
1393
|
}
|
|
1393
1394
|
|