@oh-my-pi/pi-coding-agent 15.13.3 → 16.0.1
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 +155 -133
- package/dist/cli.js +621 -530
- package/dist/types/advisor/__tests__/advisor.test.d.ts +1 -0
- package/dist/types/advisor/advise-tool.d.ts +58 -0
- package/dist/types/advisor/index.d.ts +3 -0
- package/dist/types/advisor/runtime.d.ts +52 -0
- package/dist/types/advisor/watchdog.d.ts +5 -0
- package/dist/types/config/model-roles.d.ts +1 -1
- package/dist/types/config/settings-schema.d.ts +66 -5
- package/dist/types/discovery/helpers.d.ts +7 -0
- package/dist/types/eval/__tests__/prelude-agent.test.d.ts +1 -0
- package/dist/types/extensibility/plugins/runtime-config.d.ts +3 -0
- package/dist/types/modes/components/advisor-message.d.ts +9 -0
- package/dist/types/modes/components/assistant-message.d.ts +1 -0
- package/dist/types/modes/controllers/command-controller.d.ts +3 -1
- package/dist/types/modes/interactive-mode.d.ts +3 -1
- package/dist/types/modes/types.d.ts +8 -1
- package/dist/types/sdk.d.ts +3 -3
- package/dist/types/session/agent-session.d.ts +81 -2
- package/dist/types/session/session-history-format.d.ts +4 -0
- package/dist/types/session/session-manager.d.ts +4 -1
- package/dist/types/session/yield-queue.d.ts +2 -0
- package/dist/types/task/index.d.ts +21 -0
- package/dist/types/tools/github-cache.d.ts +5 -4
- package/dist/types/tools/job.d.ts +1 -0
- package/dist/types/tools/path-utils.d.ts +1 -0
- package/dist/types/tools/report-tool-issue.d.ts +0 -1
- package/dist/types/web/search/index.d.ts +2 -2
- package/dist/types/web/search/provider.d.ts +2 -0
- package/package.json +13 -13
- package/src/advisor/__tests__/advisor.test.ts +586 -0
- package/src/advisor/advise-tool.ts +87 -0
- package/src/advisor/index.ts +3 -0
- package/src/advisor/runtime.ts +248 -0
- package/src/advisor/watchdog.ts +83 -0
- package/src/cli/args.ts +1 -0
- package/src/collab/host.ts +1 -1
- package/src/config/model-roles.ts +13 -1
- package/src/config/settings-schema.ts +65 -6
- package/src/discovery/claude-plugins.ts +3 -42
- package/src/discovery/github.ts +101 -6
- package/src/discovery/helpers.ts +11 -0
- package/src/eval/__tests__/prelude-agent.test.ts +73 -0
- package/src/eval/js/shared/prelude.txt +12 -3
- package/src/eval/py/prelude.py +26 -2
- package/src/extensibility/custom-commands/bundled/review/index.ts +289 -80
- package/src/extensibility/plugins/loader.ts +3 -2
- package/src/extensibility/plugins/manager.ts +4 -3
- package/src/extensibility/plugins/marketplace/fetcher.ts +32 -34
- package/src/extensibility/plugins/runtime-config.ts +9 -0
- package/src/internal-urls/docs-index.generated.ts +10 -9
- package/src/internal-urls/issue-pr-protocol.ts +8 -4
- package/src/main.ts +9 -1
- package/src/modes/acp/acp-agent.ts +3 -3
- package/src/modes/components/advisor-message.ts +99 -0
- package/src/modes/components/agent-hub.ts +7 -0
- package/src/modes/components/assistant-message.ts +86 -0
- package/src/modes/components/settings-defs.ts +7 -0
- package/src/modes/components/status-line/segments.ts +20 -7
- package/src/modes/components/tips.txt +1 -1
- package/src/modes/controllers/command-controller.ts +69 -2
- package/src/modes/controllers/extension-ui-controller.ts +4 -3
- package/src/modes/controllers/input-controller.ts +1 -0
- package/src/modes/controllers/selector-controller.ts +7 -0
- package/src/modes/interactive-mode.ts +59 -2
- package/src/modes/rpc/rpc-mode.ts +3 -3
- package/src/modes/runtime-init.ts +2 -1
- package/src/modes/types.ts +8 -1
- package/src/modes/utils/ui-helpers.ts +9 -0
- package/src/prompts/advisor/advise-tool.md +1 -0
- package/src/prompts/advisor/system.md +31 -0
- package/src/prompts/agents/designer.md +8 -0
- package/src/prompts/review-request.md +1 -1
- package/src/prompts/system/subagent-system-prompt.md +4 -1
- package/src/prompts/tools/eval.md +13 -3
- package/src/prompts/tools/irc.md +1 -1
- package/src/sdk.ts +61 -14
- package/src/session/agent-session.ts +667 -13
- package/src/session/session-dump-format.ts +15 -131
- package/src/session/session-history-format.ts +30 -11
- package/src/session/session-manager.ts +3 -1
- package/src/session/yield-queue.ts +5 -1
- package/src/slash-commands/builtin-registry.ts +105 -4
- package/src/system-prompt.ts +1 -1
- package/src/task/executor.ts +5 -4
- package/src/task/index.ts +70 -9
- package/src/tools/github-cache.ts +32 -7
- package/src/tools/job.ts +14 -1
- package/src/tools/path-utils.ts +33 -2
- package/src/tools/report-tool-issue.ts +2 -7
- package/src/web/scrapers/docs-rs.ts +2 -3
- package/src/web/search/index.ts +2 -2
- package/src/web/search/provider.ts +14 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,155 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [16.0.1] - 2026-06-15
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- **Settings:** `hooks` and `customTools` arrays replaced with single `extensions` array
|
|
10
|
+
- **CLI:** `--hook` and `--tool` flags replaced with `--extension` / `-e`
|
|
11
|
+
- **Directories:** `hooks/`, `tools/` → `extensions/`; `commands/` → `prompts/`
|
|
12
|
+
- **Types:** See type renames above
|
|
13
|
+
- **SDK:** See SDK migration above
|
|
14
|
+
- **Key detection functions removed from `@mariozechner/pi-tui`**: All `isXxx()` key detection functions (`isEnter()`, `isEscape()`, `isCtrlC()`, etc.) have been removed. Use `matchesKey(data, keyId)` instead (e.g., `matchesKey(data, "enter")`, `matchesKey(data, "ctrl+c")`). This affects hooks and custom tools that use `ctx.ui.custom()` with keyboard input handling. ([#405](https://github.com/badlogic/pi-mono/pull/405))
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- Added GitHub Copilot user-global discovery to the `github` provider: it now loads user-global instructions from `~/.copilot/copilot-instructions.md`, honors the `COPILOT_HOME` relocation override, reads each directory listed in `COPILOT_CUSTOM_INSTRUCTIONS_DIRS` for an `AGENTS.md` and `.github/instructions/**/*.instructions.md` (matching Copilot CLI), scans the project `.github/instructions/` tree recursively, and surfaces VS Code Copilot prompt files (`*.prompt.md`) from `.github/prompts/` as slash commands. Previously only the project `.github/` tree was scanned, so Copilot CLI users' cross-repo config was silently ignored. Closes #1913, #1915, #1916.
|
|
19
|
+
- Added web search provider exclusions so `web_search` can skip configured providers without disabling them for model use ([#2608](https://github.com/can1357/oh-my-pi/issues/2608)).
|
|
20
|
+
- Added an optional `role` field to `task` spawns that gives each subagent a tailored specialist identity: the role is injected as a system-prompt specialization preamble and becomes the subagent's display name and telemetry identity in the registry, IRC roster, and Agent Hub, so delegated trees are no longer clones of one generic worker ([#2467](https://github.com/can1357/oh-my-pi/issues/2467))
|
|
21
|
+
- Added a non-blocking specialization advisory to the `task` tool: when a spawner with remaining depth capacity spawns generic role-less workers (a `task`/`quick_task` spawn without a `role`, or the same agent cloned ≥2× all without roles), the result steers it toward tailored specialists. Gated so a leaf at max recursion depth is never nudged; the task-tool depth gate is extracted into a shared `canSpawnAtDepth` helper ([#2469](https://github.com/can1357/oh-my-pi/issues/2469))
|
|
22
|
+
- Added a work-aware IRC roster: `irc list` and the subagent peer roster now show each peer's current activity (a short gist of its latest intent/tool) alongside its role-derived display name, so a tree of tailored specialists is legible enough to coordinate. Backed by a new display-only `activity` field on the agent registry ([#2470](https://github.com/can1357/oh-my-pi/issues/2470))
|
|
23
|
+
- Added proactive IRC coordination: when one `task` call spawns ≥2 live siblings with spawn capacity remaining, the result suggests coordinating overlapping work via `irc` (composed onto the specialization advisory), and the subagent COOP/`irc` prompts now actively steer discovery (`list`), coordination (message before overlapping edits), and follow-up (`replyTo`/`await`) instead of only assuming agents resolve collisions on their own ([#2471](https://github.com/can1357/oh-my-pi/issues/2471))
|
|
24
|
+
- Added `/review` support for explicit GitHub pull request URLs and detected PR URLs from recent conversation context ([#1743](https://github.com/can1357/oh-my-pi/issues/1743)).
|
|
25
|
+
- Added a `plan.defaultOnStartup` setting (Tasks tab, default off) that automatically enters plan mode at the start of a new interactive session. It applies to any session that opens with no prior history — including a `--continue`/auto-resume that finds no recent session and starts fresh — while sessions with restored history keep the mode reconciled from that history. It is a silent no-op when plan mode is globally disabled (`plan.enabled`), and the setting is hidden from the settings UI unless plan mode is enabled.
|
|
26
|
+
- Added `UMANS_AI_CODING_PLAN_API_KEY` to the CLI environment help ([#2636](https://github.com/can1357/oh-my-pi/pull/2636) by [@oldschoola](https://github.com/oldschoola)).
|
|
27
|
+
- Added `WebSearchProviderError` class with HTTP status for actionable provider error messages
|
|
28
|
+
- `$ARGUMENTS` syntax for custom slash commands as alternative to `$@` for all arguments joined. Aligns with patterns used by Claude, Codex, and OpenCode. Both syntaxes remain fully supported. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin))
|
|
29
|
+
- Configurable double-escape action: choose whether double-escape with empty editor opens `/tree` (default) or `/branch`. Configure via `/settings` or `doubleEscapeAction` in settings.json ([#404](https://github.com/badlogic/pi-mono/issues/404))
|
|
30
|
+
- Vertex AI provider (`google-vertex`): access Gemini models via Google Cloud Vertex AI using Application Default Credentials ([#300](https://github.com/badlogic/pi-mono/pull/300) by [@default-anton](https://github.com/default-anton))
|
|
31
|
+
- Built-in provider overrides in `models.json`: override just `baseUrl` to route a built-in provider through a proxy while keeping all its models, or define `models` to fully replace the provider ([#406](https://github.com/badlogic/pi-mono/pull/406) by [@yevhen](https://github.com/yevhen))
|
|
32
|
+
- Automatic image resizing: images larger than 2000x2000 are resized for better model compatibility. Original dimensions are injected into the prompt. Controlled via `/settings` or `images.autoResize` in settings.json. ([#402](https://github.com/badlogic/pi-mono/pull/402) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
33
|
+
- Alt+Enter keybind to queue follow-up messages while agent is streaming
|
|
34
|
+
- `Theme` and `ThemeColor` types now exported for hooks using `ctx.ui.custom()`
|
|
35
|
+
- Terminal window title now displays "pi - dirname" to identify which project session you're in ([#407](https://github.com/badlogic/pi-mono/pull/407) by [@kaofelix](https://github.com/kaofelix))
|
|
36
|
+
- Hook API: `ctx.ui.setTitle(title)` allows hooks to set the terminal window/tab title ([#446](https://github.com/badlogic/pi-mono/pull/446) by [@aliou](https://github.com/aliou))
|
|
37
|
+
- Hook API: `before_agent_start` handlers can now return `systemPromptAppend` to dynamically append text to the system prompt for that turn. Multiple hooks' appends are concatenated.
|
|
38
|
+
- Hook API: `before_agent_start` handlers can now return multiple messages (all are injected, not just the first)
|
|
39
|
+
- New example hook: `tools.ts` - Interactive `/tools` command to enable/disable tools with session persistence
|
|
40
|
+
- New example hook: `pirate.ts` - Demonstrates `systemPromptAppend` to make the agent speak like a pirate
|
|
41
|
+
- Tool registry now contains all built-in tools (read, bash, edit, write, grep, find, ls) even when `--tools` limits the initially active set. Hooks can enable any tool from the registry via `pi.setActiveTools()`.
|
|
42
|
+
- System prompt now automatically rebuilds when tools change via `setActiveTools()`, updating tool descriptions and guidelines to match the new tool set
|
|
43
|
+
- Hook errors now display full stack traces for easier debugging
|
|
44
|
+
- Clipboard image paste support via `Ctrl+V`. Images are saved to a temp file and attached to the message. Works on macOS, Windows, and Linux (X11). ([#419](https://github.com/badlogic/pi-mono/issues/419))
|
|
45
|
+
- Configurable keybindings via `~/.pi/agent/keybindings.json`. All keyboard shortcuts (editor navigation, deletion, app actions like model cycling, etc.) can now be customized. Supports multiple bindings per action. ([#405](https://github.com/badlogic/pi-mono/pull/405) by [@hjanuschka](https://github.com/hjanuschka))
|
|
46
|
+
- `/quit` and `/exit` slash commands to gracefully exit the application. Unlike double Ctrl+C, these properly await hook and custom tool cleanup handlers before exiting. ([#426](https://github.com/badlogic/pi-mono/pull/426) by [@ben-vargas](https://github.com/ben-vargas))
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
|
|
50
|
+
- Enriched the bundled `designer`, `reviewer`, and `task` agent prompts: `designer` gains a token-first four-phase design-system workflow (analyze → build-if-missing → compose-with-tokens → verify), `reviewer` gains an evidence standard (a finding is not real until you can name the triggering input; passing tests are not proof of correctness), and `task` gains an evidence-bound completion requirement.
|
|
51
|
+
- Updated the session-continuation tip to mention Zellij and WezTerm panes.
|
|
52
|
+
- Documented the `role` task parameter in the task-tool description (both the batch and single-spawn shapes) and made tailored specialists the default delegation guidance, so the model gives each spawn a specialist identity instead of cloning generic workers ([#2468](https://github.com/can1357/oh-my-pi/issues/2468))
|
|
53
|
+
- Changed the `eval` `agent()` helper to accept `return_handle` (Python) / `returnHandle` (JS): instead of bare text it returns a DAG node dict `{ text, output, handle, id, agent }` whose `handle` is the spawned agent's recoverable `agent://<id>` URI, so a downstream `pipeline`/`parallel` stage can wire a large transcript by reference instead of re-inlining it. The default path is unchanged (bare text, or the parsed object under `schema`).
|
|
54
|
+
- Changed `isAutoresearchShCommand()` to use proper command-line argument parsing instead of regex, improving accuracy for complex shell invocations
|
|
55
|
+
- Changed autoresearch initialization prompt to display collected tradeoff metrics in the setup summary
|
|
56
|
+
- Changed `command-initialize.md` template to include guidance on preflight requirements, comparability invariants, and marking measurement-critical files as off-limits
|
|
57
|
+
- Changed `command-initialize.md` to instruct users to write or update `autoresearch.program.md` with durable heuristics and repo-specific strategy
|
|
58
|
+
- Changed autoresearch resume guidance to emphasize continuing on the current protected branch rather than switching branches
|
|
59
|
+
- Changed autoresearch prompt to clarify that `autoresearch.md` holds durable conclusions while `autoresearch.ideas.md` is the scratch backlog
|
|
60
|
+
- Changed autoresearch prompt guidance to require stable measurement harness and fixed benchmark inputs unless intentionally starting a new segment
|
|
61
|
+
- Changed autoresearch prompt to recommend keeping equal or near-equal results when they materially simplify implementation
|
|
62
|
+
- Changed `init_experiment` to reset pending run state (checks, duration, ASI, artifact directory) when initializing a new segment
|
|
63
|
+
- Changed `log_experiment` to set `autoResumeArmed` flag after successfully logging a run to enable auto-resume on next agent turn
|
|
64
|
+
- Changed `run_experiment` to set `autoResumeArmed` flag and update dashboard after completing a run
|
|
65
|
+
- Changed auto-resume logic to only prompt when a new pending run exists or when `autoResumeArmed` is explicitly set, preventing duplicate prompts
|
|
66
|
+
- Changed path normalization in contract validation to use `path.posix.normalize()` for consistent path handling
|
|
67
|
+
- Extended extension `registerProvider()` typing with OAuth provider support and source-aware registration metadata.
|
|
68
|
+
- **Slash commands and hook commands now work during streaming**: Previously, using a slash command or hook command while the agent was streaming would crash with "Agent is already processing". Now:
|
|
69
|
+
- Hook commands execute immediately (they manage their own LLM interaction via `pi.sendMessage()`)
|
|
70
|
+
- File-based slash commands are expanded and queued via steer/followUp
|
|
71
|
+
- `steer()` and `followUp()` now expand file-based slash commands and error on hook commands (hook commands cannot be queued)
|
|
72
|
+
- `prompt()` accepts new `streamingBehavior` option (`"steer"` or `"followUp"`) to specify queueing behavior during streaming
|
|
73
|
+
- RPC `prompt` command now accepts optional `streamingBehavior` field
|
|
74
|
+
([#420](https://github.com/badlogic/pi-mono/issues/420))
|
|
75
|
+
- Editor component now uses word wrapping instead of character-level wrapping for better readability ([#382](https://github.com/badlogic/pi-mono/pull/382) by [@nickseelert](https://github.com/nickseelert))
|
|
76
|
+
- Extensions can have their own `package.json` with dependencies (resolved via jiti)
|
|
77
|
+
- Documentation: `docs/hooks.md` and `docs/custom-tools.md` merged into `docs/extensions.md`
|
|
78
|
+
- Examples: `examples/hooks/` and `examples/custom-tools/` merged into `examples/extensions/`
|
|
79
|
+
- README: Extensions section expanded with custom tools, commands, events, state persistence, shortcuts, flags, and UI examples
|
|
80
|
+
- SDK: `customTools` option now accepts `ToolDefinition[]` directly (simplified from `Array<{ path?, tool }>`)
|
|
81
|
+
- SDK: `extensions` option accepts `ExtensionFactory[]` for inline extensions
|
|
82
|
+
- SDK: `additionalExtensionPaths` replaces both `additionalHookPaths` and `additionalCustomToolPaths`
|
|
83
|
+
- Removed image placeholders after copy & paste, replaced with inserting image file paths directly. ([#442](https://github.com/badlogic/pi-mono/pull/442) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
|
|
87
|
+
- Fixed the advisor auto-resuming a run after the user deliberately interrupts it (Esc, or a cancel from collab/ACP/RPC/SDK/extension). A user interrupt now suppresses advisor `concern`/`blocker` auto-resume until the user next resumes (a typed message, `.`/`c` continue, or a steer/follow-up); the concern is still recorded as a visible, persisted advisor card — including one already steered into the run or arriving mid-abort — so it re-enters context on resume instead of being discarded. Natural yields are unchanged: the advisor can still steer and resume a stalled run.
|
|
88
|
+
- Fixed `/advisor on|off` not being session-local by overriding the setting instead of modifying global configuration, and fixed changes not updating the TUI status line immediately.
|
|
89
|
+
- Fixed `plan.defaultOnStartup` setting schema configuration missing the required `ui.group` property.
|
|
90
|
+
- Fixed `web_search` using stale or missing provider exclusions after `/move` or resuming a session from another project. Provider preferences (`providers.webSearchExclude`, `providers.webSearch`, `providers.image`) are now reapplied when project settings reload on cwd change ([#2611](https://github.com/can1357/oh-my-pi/pull/2611)).
|
|
91
|
+
- Fixed isolated task subagents with persisted transcripts resolving file tools against the parent repository instead of the isolated worktree, which made `rcopy` patch capture report no changes after tool-based edits.
|
|
92
|
+
- Fixed plugin config writes against older `omp-plugins.lock.json` files that did not have a top-level `settings` object, which crashed `omp plugin config set` before persisting the option ([#2236](https://github.com/can1357/oh-my-pi/issues/2236)).
|
|
93
|
+
- Fixed auto-retry regenerating a large `write` call after the provider stream timed out mid-tool-call ([#2683](https://github.com/can1357/oh-my-pi/issues/2683)).
|
|
94
|
+
- Fixed soft-expired `issue://` and `pr://` reads to refresh live before returning stale state, with an explicit stale warning when the live refresh fails ([#2684](https://github.com/can1357/oh-my-pi/issues/2684)).
|
|
95
|
+
- Fixed Claude marketplace plugin skills appearing as bare slash commands while keeping real plugin `commands/` entries available ([#2645](https://github.com/can1357/oh-my-pi/issues/2645)).
|
|
96
|
+
- Fixed boundary duplication warnings to always display when replacement lines match the next surviving line, even when auto-correction is disabled
|
|
97
|
+
- Fixed secondary metrics validation to properly reject missing configured metrics and new metrics without force flag
|
|
98
|
+
- Fixed ASI data cloning to prevent prototype pollution attacks by filtering reserved property names
|
|
99
|
+
- Fixed CLI `--api-key` handling for deferred model resolution by applying runtime API key overrides after extension model selection.
|
|
100
|
+
- Fixed extension provider registration cleanup to remove stale source-scoped custom API/OAuth providers across extension reloads.
|
|
101
|
+
- `--list-models` no longer shows Google Vertex AI models without explicit authentication configured
|
|
102
|
+
- JPEG/GIF/WebP images not displaying in terminals using Kitty graphics protocol (Kitty, Ghostty, WezTerm). The protocol requires PNG format, so non-PNG images are now converted before display.
|
|
103
|
+
- Version check URL typo preventing update notifications from working ([#423](https://github.com/badlogic/pi-mono/pull/423) by [@skuridin](https://github.com/skuridin))
|
|
104
|
+
- Large images exceeding Anthropic's 5MB limit now retry with progressive quality/size reduction ([#424](https://github.com/badlogic/pi-mono/pull/424) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
105
|
+
- Slash command argument substitution now processes positional arguments (`$1`, `$2`, etc.) before all-arguments (`$@`, `$ARGUMENTS`) to prevent recursive substitution when argument values contain dollar-digit patterns like `$100`. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin))
|
|
106
|
+
- Edit tool diff not displaying in TUI due to race condition between async preview computation and tool execution
|
|
107
|
+
- `/model` selector now opens instantly instead of waiting for OAuth token refresh. Token refresh is deferred until a model is actually used.
|
|
108
|
+
- Shift+Space, Shift+Backspace, and Shift+Delete now work correctly in Kitty-protocol terminals (Kitty, WezTerm, etc.) instead of being silently ignored ([#411](https://github.com/badlogic/pi-mono/pull/411) by [@nathyong](https://github.com/nathyong))
|
|
109
|
+
- `AgentSession.prompt()` now throws if called while the agent is already streaming, preventing race conditions. Use `steer()` or `followUp()` to queue messages during streaming.
|
|
110
|
+
- Ctrl+C now works like Escape in selector components, so mashing Ctrl+C will eventually close the program ([#400](https://github.com/badlogic/pi-mono/pull/400) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
111
|
+
- External editor (Ctrl-G) now shows full pasted content instead of `[paste #N ...]` placeholders ([#444](https://github.com/badlogic/pi-mono/pull/444) by [@aliou](https://github.com/aliou))
|
|
112
|
+
- Subagent example README referenced incorrect filename `subagent.ts` instead of `index.ts` ([#427](https://github.com/badlogic/pi-mono/pull/427) by [@Whamp](https://github.com/Whamp))
|
|
113
|
+
|
|
114
|
+
## [16.0.0] - 2026-06-15
|
|
115
|
+
|
|
116
|
+
### Breaking Changes
|
|
117
|
+
|
|
118
|
+
- Renamed the SDK tool format type and resolver from `ToolCallFormat`/`resolveToolCallSyntax` to `DialectFormat`/`resolveDialect`, and the agent option from `toolCallSyntax` to `dialect`.
|
|
119
|
+
- Changed `/dump` transcript output to render messages with the selected model's native dialect turn and thinking envelopes instead of markdown role headings.
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- Added `advisor.syncBacklog` setting (`off`, `1`, `3`, `5`) to pause turn completion until advisor review backlog drops below the threshold, with a maximum 30-second wait
|
|
124
|
+
- Added advisor backlog synchronization at turn end when enabled so the main session stays aligned with the advisor's pending review turns
|
|
125
|
+
- Added automatic discovery of WATCHDOG.md files from user and project locations so advisor guidance from local watchdog instructions is appended to its system prompt
|
|
126
|
+
- Added `/advisor on`, `/advisor off`, `/advisor status`, and `/advisor dump [raw]` slash-command subcommands to manage the advisor at runtime
|
|
127
|
+
- Added `advisor.enabled` and `advisor.subagents` settings to enable the advisor and extend it to spawned task/eval subagents
|
|
128
|
+
- Added advisor status badge (`++` in success color) to the status line when an advisor is active
|
|
129
|
+
- Added `/dump [raw]` flag to toggle between compact and legacy uncompact transcript output formats
|
|
130
|
+
- Added `/advisor on`, `/advisor off`, and `/advisor status` slash-command subcommands to enable or disable the advisor at runtime and view advisor status metrics
|
|
131
|
+
- Added a passive advisor: assign a second model to the `advisor` role and enable `advisor.enabled` to have it silently review each primary turn and inject severity-tagged advice notes via the `advise` tool. A `nit` rides the non-interrupting aside queue (batched into one card at the next step boundary), while a `concern` or `blocker` interrupts the running agent through the steering channel — aborting in-flight tools, or resuming the agent when it has already yielded — so high-severity advice is acted on immediately. Advice renders in the primary transcript as a distinct `Advisor` card, and the advisor gets hard-isolated read-only `read`/`search`/`find` access — bound to its own `ToolSession` so its reads never touch the primary's snapshot/seen-lines caches — to investigate the workspace before weighing in. The status line shows a `++` badge (in the success color, kept distinct from the model name) after the model name while an advisor is active, and `/advisor dump` copies the advisor's own transcript to the clipboard. Advisors are created only for the top-level session by default; enable `advisor.subagents` to extend them to spawned task/eval subagents.
|
|
132
|
+
- Animated "thinking" pulse (`·‥…‥`) shown in place of a hidden thinking block while the model is actively reasoning, so streaming progress is visible even with `hideThinkingBlock` enabled.
|
|
133
|
+
|
|
134
|
+
### Changed
|
|
135
|
+
|
|
136
|
+
- Changed advisor prompting guidance to emit at most one `advise` per update and to prefer silence when the agent is on track
|
|
137
|
+
- Changed `/dump` default output to compact markdown format; use `/dump raw` for the legacy uncompact format
|
|
138
|
+
- Changed `/dump` and `/advisor dump` to default to compact transcript output and accept an optional `raw` flag for the legacy uncompact format
|
|
139
|
+
- Session dump output now renders message history using the model's native dialect turn envelope instead of markdown role headings
|
|
140
|
+
- Changed RPC, RPC-UI, and ACP hosts to default the advisor settings off instead of inheriting a user's interactive-session advisor preference.
|
|
141
|
+
|
|
142
|
+
### Fixed
|
|
143
|
+
|
|
144
|
+
- Fixed advisor backlog tracking so failed advice prompts do not stall catch-up indefinitely by dropping pending backlog after repeated consecutive failures
|
|
145
|
+
- Fixed backlog accounting to decrement only after successful advisor prompts so sync waits correctly reflect advisor progress
|
|
146
|
+
- Fixed advisor context batching to still send pending review updates when context maintenance fails instead of dropping the batch
|
|
147
|
+
- Fixed explicit advisor enablement to clear protocol-default overrides so enabling the advisor applies immediately
|
|
148
|
+
- Fixed advisor message card notes getting truncated to two lines when the card is collapsed.
|
|
149
|
+
- Fixed advisor context handling to maintain its token budget by promoting or compacting/restarting advisor context while preserving advisor reasoning-off settings.
|
|
150
|
+
- Fixed `startup.quiet` leaving MCP and LSP startup status events visible during launch ([#2639](https://github.com/can1357/oh-my-pi/issues/2639)).
|
|
151
|
+
- Registered the `Advisor` group in the `model` settings tab so advisor settings render correctly in the settings panel.
|
|
152
|
+
- Fixed Windows bash path handling so MSYS/Git-Bash drive aliases like `/d/project` and WSL-style `/mnt/d/project` normalize to native drive paths consistently across the bash tool cwd validation and brush filesystem builtins ([#2634](https://github.com/can1357/oh-my-pi/issues/2634)).
|
|
153
|
+
|
|
5
154
|
## [15.13.3] - 2026-06-15
|
|
6
155
|
|
|
7
156
|
### Added
|
|
@@ -2059,6 +2208,12 @@
|
|
|
2059
2208
|
|
|
2060
2209
|
## [15.2.1] - 2026-05-21
|
|
2061
2210
|
|
|
2211
|
+
### Added
|
|
2212
|
+
|
|
2213
|
+
- Added `.omp-plugin/marketplace.json` as a preferred marketplace catalog path. `fetchMarketplace` now searches `.omp-plugin/marketplace.json` before `.claude-plugin/marketplace.json` for every local and cloned source. Lets a single marketplace repository publish a tool-specific catalog (e.g. an omp-only superset of a shared Claude Code marketplace) without forcing the omp/Claude distinction into per-plugin tagging. Mirrors the `package.json#omp.extensions` precedence pattern; the `.claude-plugin/marketplace.json` fallback keeps every existing marketplace loading unchanged.
|
|
2214
|
+
|
|
2215
|
+
## [15.2.1] - 2026-05-21
|
|
2216
|
+
|
|
2062
2217
|
### Fixed
|
|
2063
2218
|
|
|
2064
2219
|
- Fixed compaction routing to the wrong provider when `modelRoles.default` is set to a different model than the active chat. Auto- and manual compaction now prefer the active session's model and only fall back to role-based candidates when the current model has no usable credentials. Previously, an Anthropic chat with `modelRoles.default = openai/gpt-5` would compact through OpenAI (including the remote-compaction endpoint), even though the live conversation never used OpenAI.
|
|
@@ -4228,19 +4383,6 @@
|
|
|
4228
4383
|
|
|
4229
4384
|
### Changed
|
|
4230
4385
|
|
|
4231
|
-
- Changed `isAutoresearchShCommand()` to use proper command-line argument parsing instead of regex, improving accuracy for complex shell invocations
|
|
4232
|
-
- Changed autoresearch initialization prompt to display collected tradeoff metrics in the setup summary
|
|
4233
|
-
- Changed `command-initialize.md` template to include guidance on preflight requirements, comparability invariants, and marking measurement-critical files as off-limits
|
|
4234
|
-
- Changed `command-initialize.md` to instruct users to write or update `autoresearch.program.md` with durable heuristics and repo-specific strategy
|
|
4235
|
-
- Changed autoresearch resume guidance to emphasize continuing on the current protected branch rather than switching branches
|
|
4236
|
-
- Changed autoresearch prompt to clarify that `autoresearch.md` holds durable conclusions while `autoresearch.ideas.md` is the scratch backlog
|
|
4237
|
-
- Changed autoresearch prompt guidance to require stable measurement harness and fixed benchmark inputs unless intentionally starting a new segment
|
|
4238
|
-
- Changed autoresearch prompt to recommend keeping equal or near-equal results when they materially simplify implementation
|
|
4239
|
-
- Changed `init_experiment` to reset pending run state (checks, duration, ASI, artifact directory) when initializing a new segment
|
|
4240
|
-
- Changed `log_experiment` to set `autoResumeArmed` flag after successfully logging a run to enable auto-resume on next agent turn
|
|
4241
|
-
- Changed `run_experiment` to set `autoResumeArmed` flag and update dashboard after completing a run
|
|
4242
|
-
- Changed auto-resume logic to only prompt when a new pending run exists or when `autoResumeArmed` is explicitly set, preventing duplicate prompts
|
|
4243
|
-
- Changed path normalization in contract validation to use `path.posix.normalize()` for consistent path handling
|
|
4244
4386
|
- Changed autoresearch initialization to collect and validate benchmark command, metric definition, scope paths, off-limits list, and constraints before `init_experiment`
|
|
4245
4387
|
- Changed `init_experiment` to require exact benchmark command, metric definition, scope, off-limits, and constraints matching collected contract
|
|
4246
4388
|
- Changed `log_experiment` to record run number, benchmark command, scope paths, off-limits list, constraints, and segment fingerprint with each result
|
|
@@ -4290,9 +4432,6 @@
|
|
|
4290
4432
|
|
|
4291
4433
|
### Fixed
|
|
4292
4434
|
|
|
4293
|
-
- Fixed boundary duplication warnings to always display when replacement lines match the next surviving line, even when auto-correction is disabled
|
|
4294
|
-
- Fixed secondary metrics validation to properly reject missing configured metrics and new metrics without force flag
|
|
4295
|
-
- Fixed ASI data cloning to prevent prototype pollution attacks by filtering reserved property names
|
|
4296
4435
|
- Fixed autoresearch resume to detect and recover pending run artifacts that were left unlogged from previous sessions
|
|
4297
4436
|
- Fixed dashboard overlay to display when running experiment even with zero completed results
|
|
4298
4437
|
- Fixed tab character rendering in dashboard command display and tool output summaries
|
|
@@ -5908,15 +6047,12 @@
|
|
|
5908
6047
|
### Changed
|
|
5909
6048
|
|
|
5910
6049
|
- Improved welcome screen responsiveness to dynamically show or hide the right column based on available terminal width
|
|
5911
|
-
- Extended extension `registerProvider()` typing with OAuth provider support and source-aware registration metadata.
|
|
5912
6050
|
|
|
5913
6051
|
### Fixed
|
|
5914
6052
|
|
|
5915
6053
|
- Fixed welcome screen layout to gracefully handle small terminal widths and prevent rendering errors on narrow displays
|
|
5916
6054
|
- Fixed welcome screen title truncation to prevent overflow when content exceeds available width
|
|
5917
6055
|
- Fixed deferred `--model` resolution so extension-provided models are matched before fallback selection and unresolved explicit patterns no longer silently fallback.
|
|
5918
|
-
- Fixed CLI `--api-key` handling for deferred model resolution by applying runtime API key overrides after extension model selection.
|
|
5919
|
-
- Fixed extension provider registration cleanup to remove stale source-scoped custom API/OAuth providers across extension reloads.
|
|
5920
6056
|
|
|
5921
6057
|
## [12.5.1] - 2026-02-15
|
|
5922
6058
|
|
|
@@ -8777,7 +8913,6 @@
|
|
|
8777
8913
|
- Added `git.enabled` setting to enable/disable the structured git tool
|
|
8778
8914
|
- Added `offset` and `limit` parameters to Output tool for paginated reading of large outputs
|
|
8779
8915
|
- Added provider fallback chain for web search that tries all configured providers before failing
|
|
8780
|
-
- Added `WebSearchProviderError` class with HTTP status for actionable provider error messages
|
|
8781
8916
|
- Added bash interceptor rule to block git commands when structured git tool is enabled
|
|
8782
8917
|
- Added validation requiring `message` parameter for git commit operations (prevents interactive editor)
|
|
8783
8918
|
- Added output ID hints in multi-agent Task results pointing to Output tool for full logs
|
|
@@ -10178,110 +10313,18 @@ pi --extension ./safety.ts -e ./todo.ts
|
|
|
10178
10313
|
**Automatic.** Session version bumped from 2 to 3. Existing sessions are migrated on first load:
|
|
10179
10314
|
- Message role `"hookMessage"` → `"custom"`
|
|
10180
10315
|
|
|
10181
|
-
### Breaking Changes
|
|
10182
|
-
|
|
10183
|
-
- **Settings:** `hooks` and `customTools` arrays replaced with single `extensions` array
|
|
10184
|
-
- **CLI:** `--hook` and `--tool` flags replaced with `--extension` / `-e`
|
|
10185
|
-
- **Directories:** `hooks/`, `tools/` → `extensions/`; `commands/` → `prompts/`
|
|
10186
|
-
- **Types:** See type renames above
|
|
10187
|
-
- **SDK:** See SDK migration above
|
|
10188
|
-
|
|
10189
|
-
### Changed
|
|
10190
|
-
|
|
10191
|
-
- Extensions can have their own `package.json` with dependencies (resolved via jiti)
|
|
10192
|
-
- Documentation: `docs/hooks.md` and `docs/custom-tools.md` merged into `docs/extensions.md`
|
|
10193
|
-
- Examples: `examples/hooks/` and `examples/custom-tools/` merged into `examples/extensions/`
|
|
10194
|
-
- README: Extensions section expanded with custom tools, commands, events, state persistence, shortcuts, flags, and UI examples
|
|
10195
|
-
- SDK: `customTools` option now accepts `ToolDefinition[]` directly (simplified from `Array<{ path?, tool }>`)
|
|
10196
|
-
- SDK: `extensions` option accepts `ExtensionFactory[]` for inline extensions
|
|
10197
|
-
- SDK: `additionalExtensionPaths` replaces both `additionalHookPaths` and `additionalCustomToolPaths`
|
|
10198
|
-
|
|
10199
10316
|
## [0.34.1] - 2026-01-04
|
|
10200
10317
|
|
|
10201
|
-
### Added
|
|
10202
|
-
|
|
10203
|
-
- Hook API: `ctx.ui.setTitle(title)` allows hooks to set the terminal window/tab title ([#446](https://github.com/badlogic/pi-mono/pull/446) by [@aliou](https://github.com/aliou))
|
|
10204
|
-
|
|
10205
10318
|
### Changed
|
|
10206
10319
|
|
|
10207
10320
|
- Expanded keybinding documentation to list all 32 supported symbol keys with notes on ctrl+symbol behavior ([#450](https://github.com/badlogic/pi-mono/pull/450) by [@kaofelix](https://github.com/kaofelix))
|
|
10208
10321
|
|
|
10209
|
-
## [0.34.0] - 2026-01-04
|
|
10210
|
-
|
|
10211
|
-
### Added
|
|
10212
|
-
|
|
10213
|
-
- Hook API: `before_agent_start` handlers can now return `systemPromptAppend` to dynamically append text to the system prompt for that turn. Multiple hooks' appends are concatenated.
|
|
10214
|
-
- Hook API: `before_agent_start` handlers can now return multiple messages (all are injected, not just the first)
|
|
10215
|
-
- New example hook: `tools.ts` - Interactive `/tools` command to enable/disable tools with session persistence
|
|
10216
|
-
- New example hook: `pirate.ts` - Demonstrates `systemPromptAppend` to make the agent speak like a pirate
|
|
10217
|
-
- Tool registry now contains all built-in tools (read, bash, edit, write, grep, find, ls) even when `--tools` limits the initially active set. Hooks can enable any tool from the registry via `pi.setActiveTools()`.
|
|
10218
|
-
- System prompt now automatically rebuilds when tools change via `setActiveTools()`, updating tool descriptions and guidelines to match the new tool set
|
|
10219
|
-
- Hook errors now display full stack traces for easier debugging
|
|
10220
|
-
|
|
10221
|
-
### Changed
|
|
10222
|
-
|
|
10223
|
-
- Removed image placeholders after copy & paste, replaced with inserting image file paths directly. ([#442](https://github.com/badlogic/pi-mono/pull/442) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
10224
|
-
|
|
10225
|
-
### Fixed
|
|
10226
|
-
|
|
10227
|
-
- Fixed potential text decoding issues in bash executor by using streaming TextDecoder instead of Buffer.toString()
|
|
10228
|
-
- External editor (Ctrl-G) now shows full pasted content instead of `[paste #N ...]` placeholders ([#444](https://github.com/badlogic/pi-mono/pull/444) by [@aliou](https://github.com/aliou))
|
|
10229
|
-
|
|
10230
|
-
## [0.33.0] - 2026-01-04
|
|
10231
|
-
|
|
10232
|
-
### Breaking Changes
|
|
10233
|
-
|
|
10234
|
-
- **Key detection functions removed from `@mariozechner/pi-tui`**: All `isXxx()` key detection functions (`isEnter()`, `isEscape()`, `isCtrlC()`, etc.) have been removed. Use `matchesKey(data, keyId)` instead (e.g., `matchesKey(data, "enter")`, `matchesKey(data, "ctrl+c")`). This affects hooks and custom tools that use `ctx.ui.custom()` with keyboard input handling. ([#405](https://github.com/badlogic/pi-mono/pull/405))
|
|
10235
|
-
|
|
10236
|
-
### Added
|
|
10237
|
-
|
|
10238
|
-
- Clipboard image paste support via `Ctrl+V`. Images are saved to a temp file and attached to the message. Works on macOS, Windows, and Linux (X11). ([#419](https://github.com/badlogic/pi-mono/issues/419))
|
|
10239
|
-
- Configurable keybindings via `~/.pi/agent/keybindings.json`. All keyboard shortcuts (editor navigation, deletion, app actions like model cycling, etc.) can now be customized. Supports multiple bindings per action. ([#405](https://github.com/badlogic/pi-mono/pull/405) by [@hjanuschka](https://github.com/hjanuschka))
|
|
10240
|
-
- `/quit` and `/exit` slash commands to gracefully exit the application. Unlike double Ctrl+C, these properly await hook and custom tool cleanup handlers before exiting. ([#426](https://github.com/badlogic/pi-mono/pull/426) by [@ben-vargas](https://github.com/ben-vargas))
|
|
10241
|
-
|
|
10242
|
-
### Fixed
|
|
10243
|
-
|
|
10244
|
-
- Subagent example README referenced incorrect filename `subagent.ts` instead of `index.ts` ([#427](https://github.com/badlogic/pi-mono/pull/427) by [@Whamp](https://github.com/Whamp))
|
|
10245
|
-
|
|
10246
|
-
## [0.32.3] - 2026-01-03
|
|
10247
|
-
|
|
10248
|
-
### Fixed
|
|
10249
|
-
|
|
10250
|
-
- `--list-models` no longer shows Google Vertex AI models without explicit authentication configured
|
|
10251
|
-
- JPEG/GIF/WebP images not displaying in terminals using Kitty graphics protocol (Kitty, Ghostty, WezTerm). The protocol requires PNG format, so non-PNG images are now converted before display.
|
|
10252
|
-
- Version check URL typo preventing update notifications from working ([#423](https://github.com/badlogic/pi-mono/pull/423) by [@skuridin](https://github.com/skuridin))
|
|
10253
|
-
- Large images exceeding Anthropic's 5MB limit now retry with progressive quality/size reduction ([#424](https://github.com/badlogic/pi-mono/pull/424) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
10254
|
-
|
|
10255
|
-
## [0.32.2] - 2026-01-03
|
|
10256
|
-
|
|
10257
|
-
### Added
|
|
10258
|
-
|
|
10259
|
-
- `$ARGUMENTS` syntax for custom slash commands as alternative to `$@` for all arguments joined. Aligns with patterns used by Claude, Codex, and OpenCode. Both syntaxes remain fully supported. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin))
|
|
10260
|
-
|
|
10261
|
-
### Changed
|
|
10262
|
-
|
|
10263
|
-
- **Slash commands and hook commands now work during streaming**: Previously, using a slash command or hook command while the agent was streaming would crash with "Agent is already processing". Now:
|
|
10264
|
-
- Hook commands execute immediately (they manage their own LLM interaction via `pi.sendMessage()`)
|
|
10265
|
-
- File-based slash commands are expanded and queued via steer/followUp
|
|
10266
|
-
- `steer()` and `followUp()` now expand file-based slash commands and error on hook commands (hook commands cannot be queued)
|
|
10267
|
-
- `prompt()` accepts new `streamingBehavior` option (`"steer"` or `"followUp"`) to specify queueing behavior during streaming
|
|
10268
|
-
- RPC `prompt` command now accepts optional `streamingBehavior` field
|
|
10269
|
-
([#420](https://github.com/badlogic/pi-mono/issues/420))
|
|
10270
|
-
|
|
10271
|
-
### Fixed
|
|
10272
|
-
|
|
10273
|
-
- Slash command argument substitution now processes positional arguments (`$1`, `$2`, etc.) before all-arguments (`$@`, `$ARGUMENTS`) to prevent recursive substitution when argument values contain dollar-digit patterns like `$100`. ([#418](https://github.com/badlogic/pi-mono/pull/418) by [@skuridin](https://github.com/skuridin))
|
|
10274
|
-
|
|
10275
10322
|
## [0.32.1] - 2026-01-03
|
|
10276
10323
|
|
|
10277
10324
|
### Added
|
|
10278
10325
|
|
|
10279
10326
|
- Shell commands without context contribution: use `!!command` to execute a bash command that is shown in the TUI and saved to session history but excluded from LLM context. Useful for running commands you don't want the AI to see. ([#414](https://github.com/badlogic/pi-mono/issues/414))
|
|
10280
10327
|
|
|
10281
|
-
### Fixed
|
|
10282
|
-
|
|
10283
|
-
- Edit tool diff not displaying in TUI due to race condition between async preview computation and tool execution
|
|
10284
|
-
|
|
10285
10328
|
## [0.32.0] - 2026-01-03
|
|
10286
10329
|
|
|
10287
10330
|
### Breaking Changes
|
|
@@ -10305,27 +10348,6 @@ pi --extension ./safety.ts -e ./todo.ts
|
|
|
10305
10348
|
- `RpcSessionState.queueMode` → `steeringMode` and `followUpMode`
|
|
10306
10349
|
- **Settings UI**: "Queue mode" setting split into "Steering mode" and "Follow-up mode"
|
|
10307
10350
|
|
|
10308
|
-
### Added
|
|
10309
|
-
|
|
10310
|
-
- Configurable double-escape action: choose whether double-escape with empty editor opens `/tree` (default) or `/branch`. Configure via `/settings` or `doubleEscapeAction` in settings.json ([#404](https://github.com/badlogic/pi-mono/issues/404))
|
|
10311
|
-
- Vertex AI provider (`google-vertex`): access Gemini models via Google Cloud Vertex AI using Application Default Credentials ([#300](https://github.com/badlogic/pi-mono/pull/300) by [@default-anton](https://github.com/default-anton))
|
|
10312
|
-
- Built-in provider overrides in `models.json`: override just `baseUrl` to route a built-in provider through a proxy while keeping all its models, or define `models` to fully replace the provider ([#406](https://github.com/badlogic/pi-mono/pull/406) by [@yevhen](https://github.com/yevhen))
|
|
10313
|
-
- Automatic image resizing: images larger than 2000x2000 are resized for better model compatibility. Original dimensions are injected into the prompt. Controlled via `/settings` or `images.autoResize` in settings.json. ([#402](https://github.com/badlogic/pi-mono/pull/402) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
10314
|
-
- Alt+Enter keybind to queue follow-up messages while agent is streaming
|
|
10315
|
-
- `Theme` and `ThemeColor` types now exported for hooks using `ctx.ui.custom()`
|
|
10316
|
-
- Terminal window title now displays "pi - dirname" to identify which project session you're in ([#407](https://github.com/badlogic/pi-mono/pull/407) by [@kaofelix](https://github.com/kaofelix))
|
|
10317
|
-
|
|
10318
|
-
### Changed
|
|
10319
|
-
|
|
10320
|
-
- Editor component now uses word wrapping instead of character-level wrapping for better readability ([#382](https://github.com/badlogic/pi-mono/pull/382) by [@nickseelert](https://github.com/nickseelert))
|
|
10321
|
-
|
|
10322
|
-
### Fixed
|
|
10323
|
-
|
|
10324
|
-
- `/model` selector now opens instantly instead of waiting for OAuth token refresh. Token refresh is deferred until a model is actually used.
|
|
10325
|
-
- Shift+Space, Shift+Backspace, and Shift+Delete now work correctly in Kitty-protocol terminals (Kitty, WezTerm, etc.) instead of being silently ignored ([#411](https://github.com/badlogic/pi-mono/pull/411) by [@nathyong](https://github.com/nathyong))
|
|
10326
|
-
- `AgentSession.prompt()` now throws if called while the agent is already streaming, preventing race conditions. Use `steer()` or `followUp()` to queue messages during streaming.
|
|
10327
|
-
- Ctrl+C now works like Escape in selector components, so mashing Ctrl+C will eventually close the program ([#400](https://github.com/badlogic/pi-mono/pull/400) by [@mitsuhiko](https://github.com/mitsuhiko))
|
|
10328
|
-
|
|
10329
10351
|
## [0.31.1] - 2026-01-02
|
|
10330
10352
|
|
|
10331
10353
|
### Fixed
|