@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
|
@@ -28,8 +28,10 @@ import {
|
|
|
28
28
|
} from "../../modes/theme/theme";
|
|
29
29
|
import type { InteractiveModeContext } from "../../modes/types";
|
|
30
30
|
import type { ResetCreditRedeemOutcome } from "../../session/auth-storage";
|
|
31
|
-
import {
|
|
31
|
+
import type { SessionInfo } from "../../session/session-listing";
|
|
32
|
+
import { SessionManager } from "../../session/session-manager";
|
|
32
33
|
import { FileSessionStorage } from "../../session/session-storage";
|
|
34
|
+
import { type LogoutAccount, toLogoutAccounts } from "../../slash-commands/helpers/logout";
|
|
33
35
|
import {
|
|
34
36
|
describeRedeemOutcome,
|
|
35
37
|
type ResetUsageAccount,
|
|
@@ -51,6 +53,7 @@ import { AssistantMessageComponent } from "../components/assistant-message";
|
|
|
51
53
|
import { CopySelectorComponent } from "../components/copy-selector";
|
|
52
54
|
import { ExtensionDashboard } from "../components/extensions";
|
|
53
55
|
import { HistorySearchComponent } from "../components/history-search";
|
|
56
|
+
import { LogoutAccountSelectorComponent } from "../components/logout-account-selector";
|
|
54
57
|
import { ModelSelectorComponent } from "../components/model-selector";
|
|
55
58
|
import { OAuthSelectorComponent } from "../components/oauth-selector";
|
|
56
59
|
import { PluginSelectorComponent } from "../components/plugin-selector";
|
|
@@ -1000,23 +1003,28 @@ export class SelectorController {
|
|
|
1000
1003
|
}
|
|
1001
1004
|
}
|
|
1002
1005
|
|
|
1003
|
-
async #
|
|
1006
|
+
async #handleCredentialLogout(providerId: string, account: LogoutAccount): Promise<void> {
|
|
1004
1007
|
try {
|
|
1005
1008
|
const authStorage = this.ctx.session.modelRegistry.authStorage;
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
this.ctx.showError(`Logout skipped: no stored credentials for ${providerId}.${suffix}`);
|
|
1009
|
+
const removed = await authStorage.removeCredential(providerId, account.credentialId);
|
|
1010
|
+
if (!removed) {
|
|
1011
|
+
this.ctx.showError(`Logout skipped: ${account.label} is no longer stored for ${providerId}.`);
|
|
1010
1012
|
return;
|
|
1011
1013
|
}
|
|
1012
1014
|
|
|
1013
|
-
await authStorage.logout(providerId);
|
|
1014
1015
|
await this.ctx.session.modelRegistry.refresh();
|
|
1015
1016
|
const block = new TranscriptBlock();
|
|
1016
1017
|
block.addChild(
|
|
1017
|
-
new Text(
|
|
1018
|
+
new Text(
|
|
1019
|
+
theme.fg(
|
|
1020
|
+
"success",
|
|
1021
|
+
`${theme.status.success} Successfully logged out ${account.label} from ${providerId}`,
|
|
1022
|
+
),
|
|
1023
|
+
1,
|
|
1024
|
+
0,
|
|
1025
|
+
),
|
|
1018
1026
|
);
|
|
1019
|
-
block.addChild(new Text(theme.fg("dim", `
|
|
1027
|
+
block.addChild(new Text(theme.fg("dim", `Credential removed from ${getAgentDbPath()}`), 1, 0));
|
|
1020
1028
|
const remainingSource = authStorage.describeCredentialSource(providerId, this.ctx.session.sessionId);
|
|
1021
1029
|
if (remainingSource) {
|
|
1022
1030
|
block.addChild(
|
|
@@ -1029,12 +1037,51 @@ export class SelectorController {
|
|
|
1029
1037
|
}
|
|
1030
1038
|
}
|
|
1031
1039
|
|
|
1040
|
+
async #showOAuthLogoutAccountSelector(providerId: string): Promise<void> {
|
|
1041
|
+
const authStorage = this.ctx.session.modelRegistry.authStorage;
|
|
1042
|
+
try {
|
|
1043
|
+
await authStorage.reload();
|
|
1044
|
+
} catch (error: unknown) {
|
|
1045
|
+
this.ctx.showError(
|
|
1046
|
+
`Could not load stored credentials: ${error instanceof Error ? error.message : String(error)}`,
|
|
1047
|
+
);
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1050
|
+
const provider = getOAuthProviders().find(candidate => candidate.id === providerId);
|
|
1051
|
+
const accounts = toLogoutAccounts(providerId, authStorage.listStoredCredentials(providerId), {
|
|
1052
|
+
activeIdentity: authStorage.getOAuthAccountIdentity(providerId, this.ctx.session.sessionId),
|
|
1053
|
+
activeApiKey: authStorage.getCredentialOrigin(providerId)?.kind === "api_key",
|
|
1054
|
+
});
|
|
1055
|
+
if (accounts.length === 0) {
|
|
1056
|
+
const source = authStorage.describeCredentialSource(providerId, this.ctx.session.sessionId);
|
|
1057
|
+
const suffix = source ? ` Current auth comes from ${source}; remove that source to log out.` : "";
|
|
1058
|
+
this.ctx.showError(`Logout skipped: no stored credentials for ${providerId}.${suffix}`);
|
|
1059
|
+
return;
|
|
1060
|
+
}
|
|
1061
|
+
|
|
1062
|
+
this.showSelector(done => {
|
|
1063
|
+
const selector = new LogoutAccountSelectorComponent(
|
|
1064
|
+
provider?.name ?? providerId,
|
|
1065
|
+
accounts,
|
|
1066
|
+
account => {
|
|
1067
|
+
done();
|
|
1068
|
+
void this.#handleCredentialLogout(providerId, account);
|
|
1069
|
+
},
|
|
1070
|
+
() => {
|
|
1071
|
+
done();
|
|
1072
|
+
this.ctx.ui.requestRender();
|
|
1073
|
+
},
|
|
1074
|
+
);
|
|
1075
|
+
return { component: selector, focus: selector };
|
|
1076
|
+
});
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1032
1079
|
async showOAuthSelector(mode: "login" | "logout", providerId?: string): Promise<void> {
|
|
1033
1080
|
if (providerId) {
|
|
1034
1081
|
if (mode === "login") {
|
|
1035
1082
|
await this.#handleOAuthLogin(providerId);
|
|
1036
1083
|
} else {
|
|
1037
|
-
await this.#
|
|
1084
|
+
await this.#showOAuthLogoutAccountSelector(providerId);
|
|
1038
1085
|
}
|
|
1039
1086
|
return;
|
|
1040
1087
|
}
|
|
@@ -1062,7 +1109,7 @@ export class SelectorController {
|
|
|
1062
1109
|
if (mode === "login") {
|
|
1063
1110
|
await this.#handleOAuthLogin(selectedProviderId);
|
|
1064
1111
|
} else {
|
|
1065
|
-
await this.#
|
|
1112
|
+
await this.#showOAuthLogoutAccountSelector(selectedProviderId);
|
|
1066
1113
|
}
|
|
1067
1114
|
},
|
|
1068
1115
|
() => {
|
|
@@ -1156,7 +1203,7 @@ export class SelectorController {
|
|
|
1156
1203
|
});
|
|
1157
1204
|
}
|
|
1158
1205
|
|
|
1159
|
-
showAgentHub(observers: SessionObserverRegistry): void {
|
|
1206
|
+
showAgentHub(observers: SessionObserverRegistry, options?: { requireContent?: boolean }): void {
|
|
1160
1207
|
const hubKeys = [
|
|
1161
1208
|
...this.ctx.keybindings.getKeys("app.agents.hub"),
|
|
1162
1209
|
...this.ctx.keybindings.getKeys("app.session.observe"),
|
|
@@ -1188,6 +1235,15 @@ export class SelectorController {
|
|
|
1188
1235
|
sessionFile: this.ctx.sessionManager.getSessionFile() ?? null,
|
|
1189
1236
|
});
|
|
1190
1237
|
|
|
1238
|
+
// The double-← gesture passes requireContent so it stays inert when there
|
|
1239
|
+
// are no subagents to show; the explicit hub/observe keys still open the
|
|
1240
|
+
// empty roster. The freshly built hub already ran the persisted-subagent
|
|
1241
|
+
// scan, so its row count is the authoritative "is there anything to show".
|
|
1242
|
+
if (options?.requireContent && hub.isEmpty) {
|
|
1243
|
+
hub.dispose();
|
|
1244
|
+
return;
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1191
1247
|
overlayHandle = this.ctx.ui.showOverlay(hub, {
|
|
1192
1248
|
anchor: "bottom-center",
|
|
1193
1249
|
width: "100%",
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AssistantMessage } from "@oh-my-pi/pi-ai";
|
|
2
2
|
import { getSegmenter } from "@oh-my-pi/pi-tui";
|
|
3
3
|
import { LRUCache } from "lru-cache/raw";
|
|
4
|
+
import { hasVisibleThinking } from "../../utils/thinking-display";
|
|
4
5
|
import type { AssistantMessageComponent } from "../components/assistant-message";
|
|
5
6
|
|
|
6
7
|
export const STREAMING_REVEAL_FRAME_MS = 1000 / 30;
|
|
@@ -87,7 +88,7 @@ export function visibleUnits(message: AssistantMessage, hideThinking: boolean):
|
|
|
87
88
|
for (const block of message.content) {
|
|
88
89
|
if (block.type === "text") {
|
|
89
90
|
total += countGraphemes(block.text);
|
|
90
|
-
} else if (block.type === "thinking" && !hideThinking) {
|
|
91
|
+
} else if (block.type === "thinking" && !hideThinking && hasVisibleThinking(block)) {
|
|
91
92
|
total += countGraphemes(block.thinking);
|
|
92
93
|
}
|
|
93
94
|
}
|
|
@@ -128,7 +129,7 @@ export function buildDisplayMessage(
|
|
|
128
129
|
const units = countOf(i, block.text);
|
|
129
130
|
content.push(revealTextBlock(block, remaining, units));
|
|
130
131
|
remaining = Math.max(0, remaining - units);
|
|
131
|
-
} else if (block.type === "thinking" && !hideThinking) {
|
|
132
|
+
} else if (block.type === "thinking" && !hideThinking && hasVisibleThinking(block)) {
|
|
132
133
|
const units = countOf(i, block.thinking);
|
|
133
134
|
content.push(revealThinkingBlock(block, remaining, units));
|
|
134
135
|
remaining = Math.max(0, remaining - units);
|
|
@@ -230,7 +231,7 @@ export class StreamingRevealController {
|
|
|
230
231
|
const block = message.content[i]!;
|
|
231
232
|
if (block.type === "text") {
|
|
232
233
|
total += this.#unitCounter.count(i, block.text);
|
|
233
|
-
} else if (block.type === "thinking" && !this.#hideThinkingBlock) {
|
|
234
|
+
} else if (block.type === "thinking" && !this.#hideThinkingBlock && hasVisibleThinking(block)) {
|
|
234
235
|
total += this.#unitCounter.count(i, block.thinking);
|
|
235
236
|
}
|
|
236
237
|
}
|
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import { maskNonProse } from "./markdown-prose";
|
|
2
2
|
import { theme } from "./theme/theme";
|
|
3
3
|
|
|
4
|
-
/** A gradient keyword highlighter.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
|
|
4
|
+
/** A gradient keyword highlighter.
|
|
5
|
+
*
|
|
6
|
+
* - `resetTo` is the SGR foreground sequence re-emitted after each painted
|
|
7
|
+
* keyword so surrounding text keeps its color; it defaults to a plain
|
|
8
|
+
* foreground reset (editor / default-colored text).
|
|
9
|
+
* - `phase` ∈ [0, 1) rotates the gradient stops cyclically; pass `Date.now()`-
|
|
10
|
+
* derived values to animate a shimmer. Defaults to `0` (the static
|
|
11
|
+
* sent-bubble palette). */
|
|
12
|
+
export type KeywordHighlighter = (text: string, resetTo?: string, phase?: number) => string;
|
|
8
13
|
|
|
9
14
|
const FG_RESET = "\x1b[39m";
|
|
10
15
|
|
|
@@ -51,14 +56,19 @@ export function createGradientHighlighter(spec: GradientHighlightSpec): KeywordH
|
|
|
51
56
|
return next;
|
|
52
57
|
};
|
|
53
58
|
|
|
54
|
-
/** Paint each character of `word` with the next gradient stop, restoring `resetTo` after.
|
|
55
|
-
|
|
59
|
+
/** Paint each character of `word` with the next gradient stop, restoring `resetTo` after.
|
|
60
|
+
* `phase` ∈ [0, 1) cyclically rotates the palette index so successive renders
|
|
61
|
+
* with monotonically increasing phase produce a moving shimmer; `0` yields the
|
|
62
|
+
* static palette. */
|
|
63
|
+
const paint = (word: string, resetTo: string, phase: number): string => {
|
|
56
64
|
const stopsArr = palette();
|
|
65
|
+
const m = stopsArr.length;
|
|
57
66
|
const n = word.length;
|
|
58
67
|
let out = "";
|
|
59
68
|
let prev = "";
|
|
60
69
|
for (let i = 0; i < n; i++) {
|
|
61
|
-
const
|
|
70
|
+
const t = (i / n + phase) % 1;
|
|
71
|
+
const color = stopsArr[Math.floor(t * m) % m] ?? stopsArr[0] ?? "";
|
|
62
72
|
// Coalesce consecutive characters that resolve to the same stop.
|
|
63
73
|
if (color !== prev) {
|
|
64
74
|
out += color;
|
|
@@ -69,8 +79,10 @@ export function createGradientHighlighter(spec: GradientHighlightSpec): KeywordH
|
|
|
69
79
|
return `${out}${resetTo}`;
|
|
70
80
|
};
|
|
71
81
|
|
|
72
|
-
return (text: string, resetTo: string = FG_RESET): string => {
|
|
82
|
+
return (text: string, resetTo: string = FG_RESET, phase: number = 0): string => {
|
|
73
83
|
if (!probe.test(text)) return text;
|
|
84
|
+
// Wrap phase into [0, 1) so negative inputs and values ≥ 1 stay well-defined.
|
|
85
|
+
const wrappedPhase = ((phase % 1) + 1) % 1;
|
|
74
86
|
// Match against a code/markup-masked copy so keywords inside code spans,
|
|
75
87
|
// fenced blocks, or XML sections never paint; indices still address `text`.
|
|
76
88
|
const masked = maskNonProse(text);
|
|
@@ -79,7 +91,7 @@ export function createGradientHighlighter(spec: GradientHighlightSpec): KeywordH
|
|
|
79
91
|
for (const m of masked.matchAll(highlight)) {
|
|
80
92
|
const start = m.index ?? 0;
|
|
81
93
|
const end = start + m[0].length;
|
|
82
|
-
out += text.slice(last, start) + paint(text.slice(start, end), resetTo);
|
|
94
|
+
out += text.slice(last, start) + paint(text.slice(start, end), resetTo, wrappedPhase);
|
|
83
95
|
last = end;
|
|
84
96
|
}
|
|
85
97
|
return out + text.slice(last);
|
|
@@ -8,6 +8,26 @@ import { fileHyperlink } from "../tui/hyperlink";
|
|
|
8
8
|
* tail (`, …`) is captured loosely (no `]`/newline) so future label tweaks keep matching. */
|
|
9
9
|
export const PLACEHOLDER_REGEX = /\[(Image|Paste) #([1-9]\d*)(?:,[^\]\n]*)?\]/g;
|
|
10
10
|
|
|
11
|
+
/** Matches a single `[Image #N]` / `[Image #N, WxH]` marker. Group 1 is the
|
|
12
|
+
* 1-based index, group 2 the optional metadata tail (leading comma, no `]` or
|
|
13
|
+
* newline) so future label tweaks keep matching. Paste markers are excluded
|
|
14
|
+
* on purpose: their numbering is owned by the editor's paste store, not by
|
|
15
|
+
* the pending-image buffer. */
|
|
16
|
+
const IMAGE_MARKER_REGEX = /\[Image #([1-9]\d*)((?:,[^\]\n]*)?)\]/g;
|
|
17
|
+
|
|
18
|
+
/** Renumber every `[Image #N]` marker in `text` by `offset` (added to the
|
|
19
|
+
* existing index), preserving the optional `, WxH` tail. Paste markers are
|
|
20
|
+
* left untouched. Used when restoring queued image-messages back into a draft
|
|
21
|
+
* that already holds pending images so the merged text's positional markers
|
|
22
|
+
* still line up with `pendingImages`. */
|
|
23
|
+
export function shiftImageMarkers(text: string, offset: number): string {
|
|
24
|
+
if (offset === 0) return text;
|
|
25
|
+
return text.replace(
|
|
26
|
+
IMAGE_MARKER_REGEX,
|
|
27
|
+
(_match, idx: string, tail: string) => `[Image #${Number(idx) + offset}${tail}]`,
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
11
31
|
type ImageBlobWriter = (data: Buffer, options?: { extension?: string }) => Promise<BlobPutResult>;
|
|
12
32
|
type ImageBlobWriterSync = (data: Buffer, options?: { extension?: string }) => BlobPutResult;
|
|
13
33
|
|