@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,6 +5,7 @@ import type { AgentMessage } from "@oh-my-pi/pi-agent-core";
|
|
|
5
5
|
import type { CredentialDisabledEvent, ImageContent, Model, ProviderResponseMetadata } from "@oh-my-pi/pi-ai";
|
|
6
6
|
import type { KeyId } from "@oh-my-pi/pi-tui";
|
|
7
7
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
8
|
+
import type { Settings } from "../../config/settings";
|
|
8
9
|
import type { MemoryRuntimeContext } from "../../memory-backend";
|
|
9
10
|
import type { SessionManager } from "../../session/session-manager";
|
|
10
11
|
import type { AfterProviderResponseEvent, AssistantThinkingRenderer, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, ContextEvent, Extension, ExtensionActions, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFlag, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, InputEvent, InputEventResult, MessageRenderer, RegisteredCommand, RegisteredTool, ResourcesDiscoverEvent, SessionBeforeBranchResult, SessionBeforeCompactResult, SessionBeforeSwitchResult, SessionBeforeTreeResult, SessionCompactingResult, ToolCallEvent, ToolCallEventResult, ToolResultEvent, ToolResultEventResult, UserBashEvent, UserBashEventResult, UserPythonEvent, UserPythonEventResult } from "./types";
|
|
@@ -62,7 +63,8 @@ export declare class ExtensionRunner {
|
|
|
62
63
|
private readonly cwd;
|
|
63
64
|
private readonly sessionManager;
|
|
64
65
|
private readonly modelRegistry;
|
|
65
|
-
|
|
66
|
+
private readonly settings?;
|
|
67
|
+
constructor(extensions: Extension[], runtime: ExtensionRuntime, cwd: string, sessionManager: SessionManager, modelRegistry: ModelRegistry, getMemory?: () => MemoryRuntimeContext | undefined, settings?: Settings | undefined);
|
|
66
68
|
initialize(actions: ExtensionActions, contextActions: ExtensionContextActions, commandContextActions?: ExtensionCommandContextActions, uiContext?: ExtensionUIContext): void;
|
|
67
69
|
/**
|
|
68
70
|
* Forward a `credential_disabled` event from `AuthStorage` to extension handlers.
|
|
@@ -13,7 +13,7 @@ import type { Api, AssistantMessageEvent, AssistantMessageEventStream, Context,
|
|
|
13
13
|
import type { OAuthCredentials, OAuthLoginCallbacks } from "@oh-my-pi/pi-ai/oauth/types";
|
|
14
14
|
import type { AutocompleteItem, Component, EditorTheme, KeyId, TUI } from "@oh-my-pi/pi-tui";
|
|
15
15
|
import type { logger as PiLogger } from "@oh-my-pi/pi-utils";
|
|
16
|
-
import type
|
|
16
|
+
import type { z } from "zod/v4";
|
|
17
17
|
import type { KeybindingsManager } from "../../config/keybindings";
|
|
18
18
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
19
19
|
import type { EditToolDetails } from "../../edit";
|
|
@@ -27,6 +27,7 @@ import type { Theme } from "../../modes/theme/theme";
|
|
|
27
27
|
import type { CustomMessage } from "../../session/messages";
|
|
28
28
|
import type { ReadonlySessionManager, SessionManager } from "../../session/session-manager";
|
|
29
29
|
import type { BashToolDetails, BashToolInput, FindToolDetails, FindToolInput, ReadToolDetails, ReadToolInput, SearchToolDetails, SearchToolInput, WriteToolInput } from "../../tools";
|
|
30
|
+
import type { ApprovalMode } from "../../tools/approval";
|
|
30
31
|
import type { EventBus } from "../../utils/event-bus";
|
|
31
32
|
import type { AgentEndEvent, AgentStartEvent, AutoCompactionEndEvent, AutoCompactionStartEvent, AutoRetryEndEvent, AutoRetryStartEvent, ContextEvent, GoalUpdatedEvent, SessionBeforeBranchEvent, SessionBeforeBranchResult, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionBranchEvent, SessionCompactEvent, SessionCompactingEvent, SessionCompactingResult, SessionEvent, SessionShutdownEvent, SessionStartEvent, SessionSwitchEvent, SessionTreeEvent, TodoReminderEvent, ToolCallEventResult, ToolResultEventResult, TtsrTriggeredEvent, TurnEndEvent, TurnStartEvent } from "../shared-events";
|
|
32
33
|
import type { SlashCommandInfo } from "../slash-commands";
|
|
@@ -173,6 +174,31 @@ export interface CompactOptions {
|
|
|
173
174
|
/**
|
|
174
175
|
* Context passed to extension event handlers.
|
|
175
176
|
*/
|
|
177
|
+
/**
|
|
178
|
+
* Read-only model query facade exposed at `ctx.models`. Lets an extension select a
|
|
179
|
+
* model the same way core does — list authenticated models, read the session model,
|
|
180
|
+
* resolve a model string or role alias, and compare model families — without reaching
|
|
181
|
+
* into the mutable registry or re-implementing matching/family heuristics.
|
|
182
|
+
*/
|
|
183
|
+
export interface ExtensionModelQuery {
|
|
184
|
+
/** Authenticated models available this session (the same set `--model` selection sees). */
|
|
185
|
+
list(): Model[];
|
|
186
|
+
/** The current session model, if one is set. */
|
|
187
|
+
current(): Model | undefined;
|
|
188
|
+
/**
|
|
189
|
+
* Resolve a model string (`provider/id`, bare id) or role alias (`pi/slow`, a
|
|
190
|
+
* configured role) to a Model, using the same settings-backed aliases and match
|
|
191
|
+
* preferences as core selection. Thinking/routing suffixes are accepted and resolved
|
|
192
|
+
* to the base model (pass effort separately). Returns undefined when nothing matches.
|
|
193
|
+
*/
|
|
194
|
+
resolve(spec: string): Model | undefined;
|
|
195
|
+
/**
|
|
196
|
+
* Opaque lineage token for "are these the same family?" comparisons — every Claude
|
|
197
|
+
* point release shares a token, Claude and GPT differ. Backed by catalog canonical
|
|
198
|
+
* identity. Compare it; do not persist it (the vocabulary tracks new releases).
|
|
199
|
+
*/
|
|
200
|
+
family(model: Model): string;
|
|
201
|
+
}
|
|
176
202
|
export interface ExtensionContext {
|
|
177
203
|
/** UI methods for user interaction */
|
|
178
204
|
ui: ExtensionUIContext;
|
|
@@ -190,6 +216,8 @@ export interface ExtensionContext {
|
|
|
190
216
|
modelRegistry: ModelRegistry;
|
|
191
217
|
/** Current model (may be undefined) */
|
|
192
218
|
model: Model | undefined;
|
|
219
|
+
/** Read-only model query facade: list / current / resolve / family. */
|
|
220
|
+
models: ExtensionModelQuery;
|
|
193
221
|
/** Whether the agent is idle (not streaming) */
|
|
194
222
|
isIdle(): boolean;
|
|
195
223
|
/** Abort the current agent operation */
|
|
@@ -396,6 +424,22 @@ export interface InputEvent {
|
|
|
396
424
|
images?: ImageContent[];
|
|
397
425
|
source: "interactive" | "rpc" | "extension";
|
|
398
426
|
}
|
|
427
|
+
export interface ToolApprovalRequestedEvent {
|
|
428
|
+
type: "tool_approval_requested";
|
|
429
|
+
sessionId: string;
|
|
430
|
+
toolCallId: string;
|
|
431
|
+
toolName: string;
|
|
432
|
+
reason?: string;
|
|
433
|
+
approvalMode: ApprovalMode;
|
|
434
|
+
}
|
|
435
|
+
export interface ToolApprovalResolvedEvent {
|
|
436
|
+
type: "tool_approval_resolved";
|
|
437
|
+
sessionId: string;
|
|
438
|
+
toolCallId: string;
|
|
439
|
+
toolName: string;
|
|
440
|
+
approved: boolean;
|
|
441
|
+
reason?: string;
|
|
442
|
+
}
|
|
399
443
|
interface ToolCallEventBase {
|
|
400
444
|
type: "tool_call";
|
|
401
445
|
toolCallId: string;
|
|
@@ -498,7 +542,7 @@ export declare function isToolCallEventType<TName extends string, TInput extends
|
|
|
498
542
|
input: TInput;
|
|
499
543
|
};
|
|
500
544
|
/** Union of all event types */
|
|
501
|
-
export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | AutoCompactionStartEvent | AutoCompactionEndEvent | AutoRetryStartEvent | AutoRetryEndEvent | TtsrTriggeredEvent | TodoReminderEvent | GoalUpdatedEvent | CredentialDisabledEvent | UserBashEvent | UserPythonEvent | InputEvent | ToolCallEvent | ToolResultEvent;
|
|
545
|
+
export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | AutoCompactionStartEvent | AutoCompactionEndEvent | AutoRetryStartEvent | AutoRetryEndEvent | TtsrTriggeredEvent | TodoReminderEvent | GoalUpdatedEvent | CredentialDisabledEvent | UserBashEvent | UserPythonEvent | InputEvent | ToolCallEvent | ToolResultEvent | ToolApprovalRequestedEvent | ToolApprovalResolvedEvent;
|
|
502
546
|
export interface ContextEventResult {
|
|
503
547
|
messages?: AgentMessage[];
|
|
504
548
|
}
|
|
@@ -558,7 +602,7 @@ export interface ExtensionAPI {
|
|
|
558
602
|
/** Injected zod-backed typebox shim for legacy `Type.Object(...)` parameter authoring. */
|
|
559
603
|
typebox: typeof TypeBox;
|
|
560
604
|
/** Injected zod module for Zod-authored extension tools (canonical going forward). */
|
|
561
|
-
zod: typeof
|
|
605
|
+
zod: typeof z;
|
|
562
606
|
/** Injected pi-coding-agent exports for accessing SDK utilities */
|
|
563
607
|
pi: typeof PiCodingAgent;
|
|
564
608
|
on(event: "resources_discover", handler: ExtensionHandler<ResourcesDiscoverEvent, ResourcesDiscoverResult>): void;
|
|
@@ -596,6 +640,8 @@ export interface ExtensionAPI {
|
|
|
596
640
|
on(event: "goal_updated", handler: ExtensionHandler<GoalUpdatedEvent>): void;
|
|
597
641
|
on(event: "credential_disabled", handler: ExtensionHandler<CredentialDisabledEvent>): void;
|
|
598
642
|
on(event: "input", handler: ExtensionHandler<InputEvent, InputEventResult>): void;
|
|
643
|
+
on(event: "tool_approval_requested", handler: ExtensionHandler<ToolApprovalRequestedEvent>): void;
|
|
644
|
+
on(event: "tool_approval_resolved", handler: ExtensionHandler<ToolApprovalResolvedEvent>): void;
|
|
599
645
|
on(event: "tool_call", handler: ExtensionHandler<ToolCallEvent, ToolCallEventResult>): void;
|
|
600
646
|
on(event: "tool_result", handler: ExtensionHandler<ToolResultEvent, ToolResultEventResult>): void;
|
|
601
647
|
on(event: "user_bash", handler: ExtensionHandler<UserBashEvent, UserBashEventResult>): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { UsageStatistics } from "../../session/session-entries";
|
|
2
|
+
export type { ReadonlySessionManager } from "../../session/session-manager";
|
|
2
3
|
export * from "./loader";
|
|
3
4
|
export * from "./runner";
|
|
4
5
|
export * from "./tool-wrapper";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ImageContent, Message, Model, TextContent } from "@oh-my-pi/pi-ai";
|
|
2
2
|
import type { Component, TUI } from "@oh-my-pi/pi-tui";
|
|
3
3
|
import type { logger as PiLogger } from "@oh-my-pi/pi-utils";
|
|
4
|
-
import type
|
|
4
|
+
import type { z } from "zod/v4";
|
|
5
5
|
import type { ModelRegistry } from "../../config/model-registry";
|
|
6
6
|
import type { EditToolDetails } from "../../edit";
|
|
7
7
|
import type { ExecOptions, ExecResult } from "../../exec/exec";
|
|
@@ -420,7 +420,7 @@ export interface HookAPI {
|
|
|
420
420
|
/** Injected zod-backed typebox shim (legacy/compat — prefer `zod`). */
|
|
421
421
|
typebox: typeof TypeBox;
|
|
422
422
|
/** Injected zod module for Zod-authored hooks. */
|
|
423
|
-
zod: typeof
|
|
423
|
+
zod: typeof z;
|
|
424
424
|
/** Injected pi-coding-agent exports */
|
|
425
425
|
pi: typeof PiCodingAgent;
|
|
426
426
|
}
|
|
@@ -13,6 +13,15 @@ import * as path from "node:path";
|
|
|
13
13
|
* Exported for tests; production callers use `BUNFS_PACKAGE_ROOT` below.
|
|
14
14
|
*/
|
|
15
15
|
export declare function __computeBunfsPackageRoot(metaDir: string, pathImpl?: typeof path): string;
|
|
16
|
+
/**
|
|
17
|
+
* Compute the package root for the npm prebuilt `dist/cli.js` bundle.
|
|
18
|
+
*
|
|
19
|
+
* `bundle-dist.ts` defines `process.env.PI_BUNDLED="true"`; after bundling,
|
|
20
|
+
* `import.meta.dir` points at `<package>/dist`. Do not resolve the package via
|
|
21
|
+
* bare `@oh-my-pi/pi-coding-agent` here: from a global install Bun can pick an
|
|
22
|
+
* older cache entry, recreating mixed-runtime plugin loading.
|
|
23
|
+
*/
|
|
24
|
+
export declare function __computeBundledSelfPackageRoot(metaDir: string, pathImpl?: typeof path): string;
|
|
16
25
|
/**
|
|
17
26
|
* Drop overrides whose targets are missing on disk so they can fall through to
|
|
18
27
|
* the canonical-resolution path. Exported for the test seam in #2168.
|
|
@@ -14,6 +14,17 @@ import type { InstalledPlugin } from "./types";
|
|
|
14
14
|
export declare function getEnabledPlugins(cwd: string, opts?: {
|
|
15
15
|
home?: string;
|
|
16
16
|
}): Promise<InstalledPlugin[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Declared manifest entries paired with their resolved file path. Returns one
|
|
19
|
+
* record per declared entry — base entries first, then enabled-feature entries
|
|
20
|
+
* — so callers (e.g. install-time validation) can detect manifest entries that
|
|
21
|
+
* point at missing files instead of silently skipping them like
|
|
22
|
+
* {@link resolvePluginPaths} does.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolvePluginManifestEntries(plugin: InstalledPlugin, key: "tools" | "hooks" | "commands" | "extensions"): Array<{
|
|
25
|
+
entry: string;
|
|
26
|
+
resolvedPath: string | null;
|
|
27
|
+
}>;
|
|
17
28
|
export declare function resolvePluginToolPaths(plugin: InstalledPlugin): string[];
|
|
18
29
|
export declare function resolvePluginHookPaths(plugin: InstalledPlugin): string[];
|
|
19
30
|
export declare function resolvePluginCommandPaths(plugin: InstalledPlugin): string[];
|
|
@@ -17,7 +17,7 @@ import type { CompactionPreparation, CompactionResult } from "@oh-my-pi/pi-agent
|
|
|
17
17
|
import type { ImageContent, TextContent, ToolResultMessage } from "@oh-my-pi/pi-ai";
|
|
18
18
|
import type { Rule } from "../capability/rule";
|
|
19
19
|
import type { Goal, GoalModeState } from "../goals/state";
|
|
20
|
-
import type { BranchSummaryEntry, CompactionEntry, SessionEntry } from "../session/session-
|
|
20
|
+
import type { BranchSummaryEntry, CompactionEntry, SessionEntry } from "../session/session-entries";
|
|
21
21
|
import type { TodoItem } from "../tools/todo";
|
|
22
22
|
/** Fired on initial session load */
|
|
23
23
|
export interface SessionStartEvent {
|
|
@@ -33,6 +33,16 @@ export declare function getActiveSkills(): readonly Skill[];
|
|
|
33
33
|
export declare function setActiveSkills(value: readonly Skill[]): void;
|
|
34
34
|
/** Reset the active skill snapshot. Test-only. */
|
|
35
35
|
export declare function resetActiveSkillsForTests(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Whether `name` is already claimed by an active authored (non-managed) skill.
|
|
38
|
+
*
|
|
39
|
+
* Managed (auto-learn) skills resolve dead-last in discovery, so an authored
|
|
40
|
+
* skill of the same name always wins (see `loadSkills`) and a managed skill
|
|
41
|
+
* written under an authored name is silently dropped — it never surfaces.
|
|
42
|
+
* `manage_skill` create consults this to refuse the write up front instead of
|
|
43
|
+
* reporting a false "Created" for a skill that can never appear.
|
|
44
|
+
*/
|
|
45
|
+
export declare function isNameClaimedByAuthoredSkill(name: string): boolean;
|
|
36
46
|
export interface LoadSkillsFromDirOptions {
|
|
37
47
|
/** Directory to scan for skills */
|
|
38
48
|
dir: string;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AgentSession } from "../session/agent-session";
|
|
2
|
+
export interface GuidedGoalMessage {
|
|
3
|
+
role: "user" | "assistant";
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
6
|
+
export type GuidedGoalTurnResult = {
|
|
7
|
+
kind: "question";
|
|
8
|
+
question: string;
|
|
9
|
+
objective?: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "ready";
|
|
12
|
+
objective: string;
|
|
13
|
+
};
|
|
14
|
+
export interface GuidedGoalTurnOptions {
|
|
15
|
+
messages: readonly GuidedGoalMessage[];
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
}
|
|
18
|
+
export declare function runGuidedGoalTurn(session: AgentSession, options: GuidedGoalTurnOptions): Promise<GuidedGoalTurnResult>;
|
|
@@ -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 "../../tools";
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* messages, and anything else that isn't a primary conversation turn. Each
|
|
7
7
|
* surviving message's `TextContent` parts are joined with newlines.
|
|
8
8
|
*/
|
|
9
|
-
import type { SessionEntry } from "../session/session-
|
|
9
|
+
import type { SessionEntry } from "../session/session-entries";
|
|
10
10
|
import type { HindsightMessage } from "./content";
|
|
11
11
|
export interface ReadonlySessionManagerLike {
|
|
12
12
|
getEntries(): SessionEntry[];
|
package/dist/types/index.d.ts
CHANGED
|
@@ -25,8 +25,13 @@ export * from "./session/auth-storage";
|
|
|
25
25
|
export * from "./session/indexed-session-storage";
|
|
26
26
|
export * from "./session/messages";
|
|
27
27
|
export * from "./session/redis-session-storage";
|
|
28
|
+
export * from "./session/session-context";
|
|
28
29
|
export * from "./session/session-dump-format";
|
|
30
|
+
export * from "./session/session-entries";
|
|
31
|
+
export * from "./session/session-listing";
|
|
32
|
+
export * from "./session/session-loader";
|
|
29
33
|
export * from "./session/session-manager";
|
|
34
|
+
export * from "./session/session-migrations";
|
|
30
35
|
export * from "./session/session-storage";
|
|
31
36
|
export * from "./session/sql-session-storage";
|
|
32
37
|
export * from "./task/executor";
|
|
@@ -3,8 +3,10 @@ export interface LocalProtocolOptions {
|
|
|
3
3
|
getArtifactsDir?: () => string | null;
|
|
4
4
|
getSessionId?: () => string | null;
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
export declare function
|
|
6
|
+
/** Resolve the session-scoped local:// root, shortening long Windows artifact paths before writes hit MAX_PATH. */
|
|
7
|
+
export declare function resolveLocalRoot(options: LocalProtocolOptions, platform?: NodeJS.Platform): string;
|
|
8
|
+
/** Resolve a local:// URL to an on-disk path under the active session's local root. */
|
|
9
|
+
export declare function resolveLocalUrlToPath(input: string | InternalUrl, options: LocalProtocolOptions, platform?: NodeJS.Platform): string;
|
|
8
10
|
/**
|
|
9
11
|
* On-disk roots the eval helpers (`read`/`write`/`append`) substitute for
|
|
10
12
|
* internal-URL schemes so e.g. `write("local://x.md")` lands where a later
|
package/dist/types/main.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Args } from "./cli/args";
|
|
2
2
|
import { ModelRegistry } from "./config/model-registry";
|
|
3
3
|
import { type ScopedModel } from "./config/model-resolver";
|
|
4
4
|
import { Settings } from "./config/settings";
|
|
@@ -7,14 +7,15 @@ import type { SubmittedUserInput } from "./modes/types";
|
|
|
7
7
|
import { type CreateAgentSessionOptions, type CreateAgentSessionResult, createAgentSession, discoverAuthStorage } from "./sdk";
|
|
8
8
|
import type { AgentSession } from "./session/agent-session";
|
|
9
9
|
import type { AuthStorage } from "./session/auth-storage";
|
|
10
|
-
import { type SessionInfo
|
|
10
|
+
import { type SessionInfo } from "./session/session-listing";
|
|
11
|
+
import { SessionManager } from "./session/session-manager";
|
|
11
12
|
type RunAcpMode = (createSession: AcpSessionFactory) => Promise<never>;
|
|
12
13
|
export interface InteractiveModeNotify {
|
|
13
14
|
kind: "warn" | "error" | "info";
|
|
14
15
|
message: string;
|
|
15
16
|
}
|
|
16
17
|
export declare function buildModelScopeNotification(scopedModelsForDisplay: readonly Pick<ScopedModel, "model" | "thinkingLevel" | "explicitThinkingLevel">[], startupQuiet: boolean): InteractiveModeNotify | null;
|
|
17
|
-
export declare function submitInteractiveInput(mode: Pick<InteractiveMode, "markPendingSubmissionStarted" | "finishPendingSubmission" | "showError" | "checkShutdownRequested">, session: Pick<AgentSession, "prompt" | "promptCustomMessage">, input: SubmittedUserInput): Promise<void>;
|
|
18
|
+
export declare function submitInteractiveInput(mode: Pick<InteractiveMode, "markPendingSubmissionStarted" | "finishPendingSubmission" | "showError" | "checkShutdownRequested">, session: Pick<AgentSession, "prompt" | "promptCustomMessage" | "isStreaming">, input: SubmittedUserInput): Promise<void>;
|
|
18
19
|
type AcpSessionFactory = (cwd: string) => Promise<AgentSession>;
|
|
19
20
|
export interface AcpSessionFactoryOptions {
|
|
20
21
|
baseOptions: CreateAgentSessionOptions;
|
|
@@ -104,6 +104,14 @@ export declare class MCPManager {
|
|
|
104
104
|
* Get the source metadata for a server.
|
|
105
105
|
*/
|
|
106
106
|
getSource(name: string): SourceMeta | undefined;
|
|
107
|
+
/**
|
|
108
|
+
* Get the preserved (pre-auth) config for a known server — whether currently
|
|
109
|
+
* connected or merely discovered (a connect was attempted but may have failed,
|
|
110
|
+
* e.g. an OAuth server that has not been authorized yet). Mirrors the
|
|
111
|
+
* reconnect lookup at {@link reconnectServer} so callers like `/mcp reauth`
|
|
112
|
+
* can recover a discovered server's config without re-reading config files.
|
|
113
|
+
*/
|
|
114
|
+
getServerConfig(name: string): MCPServerConfig | undefined;
|
|
107
115
|
/**
|
|
108
116
|
* Wait for a connection to complete (or fail).
|
|
109
117
|
*/
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const MCP_CONNECTING_EVENT_CHANNEL = "mcp:connecting";
|
|
2
|
+
export type McpConnectingEvent = {
|
|
3
|
+
serverNames: string[];
|
|
4
|
+
};
|
|
5
|
+
export declare function formatMCPConnectingMessage(serverNames: string[]): string;
|
|
6
|
+
/**
|
|
7
|
+
* Runtime validator for the cross-module event payload. The event bus is
|
|
8
|
+
* untyped at runtime, so the subscriber verifies the shape before formatting
|
|
9
|
+
* rather than trusting a cast — a malformed emit is ignored instead of throwing.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isMcpConnectingEvent(data: unknown): data is McpConnectingEvent;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ModelRegistry } from "../config/model-registry";
|
|
2
2
|
import type { Settings } from "../config/settings";
|
|
3
|
+
import type { MemoryBackendSaveInput, MemoryBackendSaveResult } from "../memory-backend/types";
|
|
3
4
|
import type { AgentSession } from "../session/agent-session";
|
|
4
5
|
/**
|
|
5
6
|
* Start the background memory startup pipeline.
|
|
@@ -26,3 +27,9 @@ export declare function clearMemoryData(agentDir: string, cwd: string): Promise<
|
|
|
26
27
|
*/
|
|
27
28
|
export declare function enqueueMemoryConsolidation(agentDir: string, cwd: string, sourceUpdatedAt?: number): void;
|
|
28
29
|
export declare function getMemoryRoot(agentDir: string, cwd: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Append one lesson to the project's `learned.md` (newest-first, deduped,
|
|
32
|
+
* capped, secret-redacted, injection-neutralized). The file backs the `learn`
|
|
33
|
+
* tool when `memory.backend` is `local`.
|
|
34
|
+
*/
|
|
35
|
+
export declare function saveLearnedLesson(agentDir: string, cwd: string, input: MemoryBackendSaveInput): Promise<MemoryBackendSaveResult>;
|
|
@@ -2,8 +2,9 @@ import type { MemoryBackend } from "./types";
|
|
|
2
2
|
/**
|
|
3
3
|
* Wraps the existing `memories/` module as a `MemoryBackend`.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* The rollout-summarisation pipeline (rollouts → SQLite → memory_summary.md) is
|
|
6
|
+
* delegated unchanged. On top of it, `save()` persists `learn`-tool lessons to
|
|
7
|
+
* `learned.md` (so `status()` reports `writable: true`); structured search is
|
|
8
|
+
* still unavailable.
|
|
8
9
|
*/
|
|
9
10
|
export declare const localBackend: MemoryBackend;
|
|
@@ -28,4 +28,32 @@ export interface MnemopiBackendConfig {
|
|
|
28
28
|
llmModel?: string;
|
|
29
29
|
}
|
|
30
30
|
export declare function loadMnemopiConfig(settings: Settings, agentDir: string): MnemopiBackendConfig;
|
|
31
|
+
export interface MnemopiBankScope {
|
|
32
|
+
baseBank: string;
|
|
33
|
+
bank: string;
|
|
34
|
+
globalBank: string;
|
|
35
|
+
retainBank: string;
|
|
36
|
+
recallBanks: readonly string[];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Resolve write/recall banks for a session.
|
|
40
|
+
*
|
|
41
|
+
* Mnemopi has no tag-filtered recall, so `per-project-tagged` maps to a
|
|
42
|
+
* project-local write bank plus a shared recall-visible bank. The project
|
|
43
|
+
* bank is derived purely from {@link cwd} — see {@link projectBank} for the
|
|
44
|
+
* stability contract.
|
|
45
|
+
*/
|
|
46
|
+
export declare function computeMnemopiBankScope(configured: string | undefined, cwd: string, scoping: MnemopiScoping): MnemopiBankScope;
|
|
47
|
+
/**
|
|
48
|
+
* Discover sibling banks under `<dbDir>/banks/` whose `working_memory` rows
|
|
49
|
+
* all carry the active `cwd` in `metadata_json.$.cwd`, and add those safe
|
|
50
|
+
* single-cwd banks to the recall set. This rescues memories stranded by a
|
|
51
|
+
* previous, less-stable bank derivation (#2412) without recalling mixed-cwd
|
|
52
|
+
* legacy banks wholesale under per-project isolation.
|
|
53
|
+
*
|
|
54
|
+
* Robust by design: a missing banks directory, unreadable bank dir, or
|
|
55
|
+
* corrupt SQLite file is silently skipped. Scanning is capped at
|
|
56
|
+
* {@link LEGACY_BANK_SCAN_LIMIT} to bound startup cost.
|
|
57
|
+
*/
|
|
58
|
+
export declare function extendRecallWithLegacyBanks(resolved: readonly string[], dbPath: string, cwd: string): readonly string[];
|
|
31
59
|
export declare function truncateApproxTokens(text: string, tokenLimit: number): string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type
|
|
1
|
+
import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
|
|
2
2
|
import { type ExtensionUIContext } from "../../extensibility/extensions";
|
|
3
3
|
import type { AgentSession } from "../../session/agent-session";
|
|
4
4
|
/**
|
|
@@ -42,7 +42,6 @@ export declare class AcpAgent implements Agent {
|
|
|
42
42
|
closeSession(params: CloseSessionRequest): Promise<CloseSessionResponse>;
|
|
43
43
|
setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse>;
|
|
44
44
|
setSessionConfigOption(params: SetSessionConfigOptionRequest): Promise<SetSessionConfigOptionResponse>;
|
|
45
|
-
unstable_setSessionModel(params: SetSessionModelRequest): Promise<SetSessionModelResponse>;
|
|
46
45
|
prompt(params: PromptRequest): Promise<PromptResponse>;
|
|
47
46
|
cancel(params: {
|
|
48
47
|
sessionId: string;
|
|
@@ -52,6 +52,12 @@ export interface AgentHubDeps {
|
|
|
52
52
|
export declare class AgentHubOverlayComponent extends Container {
|
|
53
53
|
#private;
|
|
54
54
|
constructor(deps: AgentHubDeps);
|
|
55
|
+
/**
|
|
56
|
+
* Whether the table view has no agents to show (every registered agent except
|
|
57
|
+
* Main, after the persisted-subagent scan in the constructor). The double-←
|
|
58
|
+
* gesture reads this to stay inert when there is nothing to open.
|
|
59
|
+
*/
|
|
60
|
+
get isEmpty(): boolean;
|
|
55
61
|
/** Tear down every subscription and timer. Called by the overlay owner on close. */
|
|
56
62
|
dispose(): void;
|
|
57
63
|
render(width: number): readonly string[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AssistantMessage, ImageContent
|
|
1
|
+
import type { AssistantMessage, ImageContent } from "@oh-my-pi/pi-ai";
|
|
2
2
|
import { Container, type ImageBudget } from "@oh-my-pi/pi-tui";
|
|
3
3
|
import type { AssistantThinkingRenderer } from "../../extensibility/extensions/types";
|
|
4
4
|
/**
|
|
@@ -22,7 +22,6 @@ export declare class AssistantMessageComponent extends Container {
|
|
|
22
22
|
getTranscriptBlockVersion(): number;
|
|
23
23
|
markTranscriptBlockFinalized(): void;
|
|
24
24
|
setToolResultImages(toolCallId: string, images: ImageContent[]): void;
|
|
25
|
-
setUsageInfo(usage: Usage): void;
|
|
26
25
|
updateContent(message: AssistantMessage, opts?: {
|
|
27
26
|
transient?: boolean;
|
|
28
27
|
}): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Component } from "@oh-my-pi/pi-tui";
|
|
2
|
-
import type { CompactionSummaryMessage } from "../../session/messages";
|
|
2
|
+
import type { CompactionSummaryMessage, CustomMessage } from "../../session/messages";
|
|
3
3
|
/**
|
|
4
4
|
* Compaction point in the transcript, rendered as a slim horizontal divider:
|
|
5
5
|
*
|
|
@@ -17,3 +17,17 @@ export declare class CompactionSummaryMessageComponent implements Component {
|
|
|
17
17
|
invalidate(): void;
|
|
18
18
|
render(width: number): readonly string[];
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Handoff is a compaction strategy too, but it is persisted as a custom message
|
|
22
|
+
* so the LLM sees the handoff-specific developer context. Render it with the
|
|
23
|
+
* same divider affordance as `/compact` instead of the generic `[handoff]` box.
|
|
24
|
+
*/
|
|
25
|
+
export declare class HandoffSummaryMessageComponent implements Component {
|
|
26
|
+
#private;
|
|
27
|
+
private readonly message;
|
|
28
|
+
constructor(message: CustomMessage<unknown>);
|
|
29
|
+
setExpanded(expanded: boolean): void;
|
|
30
|
+
invalidate(): void;
|
|
31
|
+
render(width: number): readonly string[];
|
|
32
|
+
}
|
|
33
|
+
export declare function createHandoffSummaryMessageComponent(message: CustomMessage<unknown>, expanded: boolean): HandoffSummaryMessageComponent | undefined;
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { Editor, type KeyId } from "@oh-my-pi/pi-tui";
|
|
2
2
|
import type { AppKeybinding } from "../../config/keybindings";
|
|
3
3
|
type ConfigurableEditorAction = Extract<AppKeybinding, "app.interrupt" | "app.clear" | "app.exit" | "app.suspend" | "app.display.reset" | "app.thinking.cycle" | "app.model.cycleForward" | "app.model.cycleBackward" | "app.model.select" | "app.model.selectTemporary" | "app.tools.expand" | "app.thinking.toggle" | "app.editor.external" | "app.history.search" | "app.message.dequeue" | "app.clipboard.pasteImage" | "app.clipboard.pasteTextRaw" | "app.clipboard.copyPrompt">;
|
|
4
|
+
/** Plain spaces from one auto-repeat run that trigger the space-hold push-to-talk STT gesture.
|
|
5
|
+
* Holding the space bar makes the terminal emit a burst of spaces; once more than this many land
|
|
6
|
+
* in the editor we treat it as "space held", track them back out, and start recording. */
|
|
7
|
+
export declare const SPACE_HOLD_THRESHOLD = 5;
|
|
8
|
+
/** Idle gap (ms) after the last repeated space that counts as the space bar being released, ending
|
|
9
|
+
* the push-to-talk recording. Must comfortably exceed the OS key-repeat interval. */
|
|
10
|
+
export declare const SPACE_HOLD_RELEASE_MS = 250;
|
|
4
11
|
export declare function extractBracketedImagePastePaths(data: string): string[] | undefined;
|
|
5
12
|
export declare function extractBracketedImagePastePath(data: string): string | undefined;
|
|
6
13
|
/**
|
|
@@ -12,10 +19,32 @@ export declare class CustomEditor extends Editor {
|
|
|
12
19
|
/** Treat image/paste markers as indivisible: a stray backspace deletes the whole token
|
|
13
20
|
* instead of corrupting `[Paste #1, +30 lines]` into plain text. */
|
|
14
21
|
atomicTokenPattern: RegExp;
|
|
22
|
+
/** Magic-keyword shimmer cadence — drives one editor repaint every 70 ms while
|
|
23
|
+
* a keyword is on screen and the prompt is focused. ~14 frames/s is smooth
|
|
24
|
+
* without flooding the renderer. */
|
|
25
|
+
static readonly SHIMMER_FRAME_MS = 70;
|
|
26
|
+
/** Time for the gradient to sweep one full cycle across each keyword. */
|
|
27
|
+
static readonly SHIMMER_PERIOD_MS = 1800;
|
|
15
28
|
/** Gradient-highlight the "ultrathink" / "orchestrate" / "workflowz" keywords as the user types
|
|
16
29
|
* them, skipping any occurrence inside code spans, fenced blocks, or XML sections. Also make
|
|
17
|
-
* pasted image placeholders visually distinct and hyperlink them once their blob file exists.
|
|
30
|
+
* pasted image placeholders visually distinct and hyperlink them once their blob file exists.
|
|
31
|
+
* When the editor is focused, the buffer contains a magic keyword, and `magicKeywords.enabled`
|
|
32
|
+
* is on, the gradient shifts every frame to produce a Claude-Code-style shimmer; each render
|
|
33
|
+
* schedules the next frame, so losing focus, deleting the keyword, or flipping the setting
|
|
34
|
+
* stops the animation on its own. The static glow itself runs even when shimmering is gated
|
|
35
|
+
* off, matching existing behavior for the editor and sent bubbles. */
|
|
18
36
|
decorateText: (text: string) => string;
|
|
37
|
+
/** Optional test/host override for the magic-keyword shimmer gate. When
|
|
38
|
+
* defined, takes precedence over the global `magicKeywords.enabled` setting,
|
|
39
|
+
* letting tests assert the gating behaviour without mutating the
|
|
40
|
+
* process-wide Settings singleton (which races with parallel test files —
|
|
41
|
+
* see issue #2582). Production wires this through the host's Settings
|
|
42
|
+
* reader and updates it on the relevant setting change. */
|
|
43
|
+
magicKeywordsEnabledOverride: boolean | undefined;
|
|
44
|
+
/** Bind the host's render request callback. Idempotent — the host wires this
|
|
45
|
+
* once after construction (and again after `setEditorComponent` swaps the
|
|
46
|
+
* editor). Passing `undefined` clears any pending frame. */
|
|
47
|
+
setShimmerRepaintHandler(handler: (() => void) | undefined): void;
|
|
19
48
|
onEscape?: () => void;
|
|
20
49
|
onClear?: () => void;
|
|
21
50
|
onExit?: () => void;
|
|
@@ -44,6 +73,15 @@ export declare class CustomEditor extends Editor {
|
|
|
44
73
|
onCapsLock?: () => void;
|
|
45
74
|
/** Called when left-arrow is pressed while the editor is empty (cursor necessarily at start). */
|
|
46
75
|
onLeftAtStart?: () => void;
|
|
76
|
+
/** Fired when a sustained space-bar hold is recognized — the push-to-talk STT start. The
|
|
77
|
+
* optimistically-typed spaces have already been deleted by the time this runs. */
|
|
78
|
+
onSpaceHoldStart?: () => void;
|
|
79
|
+
/** Fired when the held space bar is released (detected as an idle gap with no further repeated
|
|
80
|
+
* spaces) — the push-to-talk STT stop. */
|
|
81
|
+
onSpaceHoldEnd?: () => void;
|
|
82
|
+
/** Gate for the space-hold gesture. Returns false to keep the space bar inserting spaces
|
|
83
|
+
* normally; wired to `stt.enabled` so disabling STT restores plain space behavior. */
|
|
84
|
+
sttHoldEnabled?: () => boolean;
|
|
47
85
|
setActionKeys(action: ConfigurableEditorAction, keys: KeyId[]): void;
|
|
48
86
|
/**
|
|
49
87
|
* Register a custom key handler. Extensions use this for shortcuts.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -15,6 +15,7 @@ export * from "./hook-message";
|
|
|
15
15
|
export * from "./hook-selector";
|
|
16
16
|
export * from "./keybinding-hints";
|
|
17
17
|
export * from "./login-dialog";
|
|
18
|
+
export * from "./logout-account-selector";
|
|
18
19
|
export * from "./model-selector";
|
|
19
20
|
export * from "./oauth-selector";
|
|
20
21
|
export * from "./queue-mode-selector";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Container } from "@oh-my-pi/pi-tui";
|
|
2
|
+
import type { LogoutAccount } from "../../slash-commands/helpers/logout";
|
|
3
|
+
/** Account picker for `/logout` after the provider has been selected. */
|
|
4
|
+
export declare class LogoutAccountSelectorComponent extends Container {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(providerName: string, accounts: LogoutAccount[], onSelect: (account: LogoutAccount) => void, onCancel: () => void);
|
|
7
|
+
handleInput(keyData: string): void;
|
|
8
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type Component, Container } from "@oh-my-pi/pi-tui";
|
|
2
|
-
import type { SessionInfo } from "../../session/session-
|
|
2
|
+
import type { SessionInfo } from "../../session/session-listing";
|
|
3
3
|
/** Returns the IDs of sessions whose recorded prompts match a query, best first. */
|
|
4
4
|
export type SessionHistoryMatcher = (query: string) => string[];
|
|
5
5
|
/**
|
|
@@ -40,13 +40,17 @@ export declare class StatusLineComponent implements Component {
|
|
|
40
40
|
*/
|
|
41
41
|
refreshUsageInBackground(): void;
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
43
|
+
* Used-tokens / context-window totals for the status-line context% segment,
|
|
44
|
+
* memoized so the per-event redraw stays O(1) when nothing changed.
|
|
45
|
+
*
|
|
46
|
+
* The numerator comes from `session.getContextUsage()`, which anchors on the
|
|
47
|
+
* last assistant's real prompt-token count — so the bar matches the provider
|
|
48
|
+
* and the `/context` panel — and reports `null` while that count is unknown
|
|
49
|
+
* (right after compaction, before the next response). Exposed (non-private)
|
|
50
|
+
* for unit tests and the collab host's state broadcast.
|
|
47
51
|
*/
|
|
48
52
|
getCachedContextBreakdown(): {
|
|
49
|
-
usedTokens: number;
|
|
53
|
+
usedTokens: number | null;
|
|
50
54
|
contextWindow: number;
|
|
51
55
|
};
|
|
52
56
|
getTopBorder(width: number): {
|
|
@@ -70,7 +70,8 @@ export interface SegmentContext {
|
|
|
70
70
|
cost: number;
|
|
71
71
|
tokensPerSecond: number | null;
|
|
72
72
|
};
|
|
73
|
-
|
|
73
|
+
/** Context usage percent, or null when unknown (e.g. right after compaction). */
|
|
74
|
+
contextPercent: number | null;
|
|
74
75
|
contextWindow: number;
|
|
75
76
|
autoCompactEnabled: boolean;
|
|
76
77
|
subagentCount: number;
|