@oh-my-pi/pi-coding-agent 16.0.0 → 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 +115 -133
- package/dist/cli.js +158 -130
- package/dist/types/config/settings-schema.d.ts +22 -0
- 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/types.d.ts +5 -0
- package/dist/types/session/agent-session.d.ts +11 -1
- package/dist/types/session/session-manager.d.ts +4 -1
- 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/web/search/index.d.ts +2 -2
- package/dist/types/web/search/provider.d.ts +2 -0
- package/package.json +12 -12
- package/src/cli/args.ts +1 -0
- package/src/collab/host.ts +1 -1
- package/src/config/settings-schema.ts +23 -1
- 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 +5 -5
- package/src/internal-urls/issue-pr-protocol.ts +8 -4
- package/src/main.ts +5 -1
- package/src/modes/acp/acp-agent.ts +3 -3
- package/src/modes/components/settings-defs.ts +7 -0
- package/src/modes/components/tips.txt +1 -1
- 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 +47 -0
- package/src/modes/rpc/rpc-mode.ts +3 -3
- package/src/modes/runtime-init.ts +2 -1
- package/src/modes/types.ts +5 -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 +9 -1
- package/src/session/agent-session.ts +125 -18
- package/src/session/session-manager.ts +3 -1
- package/src/slash-commands/builtin-registry.ts +5 -2
- 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/web/search/index.ts +2 -2
- package/src/web/search/provider.ts +14 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,115 @@
|
|
|
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
|
+
|
|
5
114
|
## [16.0.0] - 2026-06-15
|
|
6
115
|
|
|
7
116
|
### Breaking Changes
|
|
@@ -2099,6 +2208,12 @@
|
|
|
2099
2208
|
|
|
2100
2209
|
## [15.2.1] - 2026-05-21
|
|
2101
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
|
+
|
|
2102
2217
|
### Fixed
|
|
2103
2218
|
|
|
2104
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.
|
|
@@ -4268,19 +4383,6 @@
|
|
|
4268
4383
|
|
|
4269
4384
|
### Changed
|
|
4270
4385
|
|
|
4271
|
-
- Changed `isAutoresearchShCommand()` to use proper command-line argument parsing instead of regex, improving accuracy for complex shell invocations
|
|
4272
|
-
- Changed autoresearch initialization prompt to display collected tradeoff metrics in the setup summary
|
|
4273
|
-
- Changed `command-initialize.md` template to include guidance on preflight requirements, comparability invariants, and marking measurement-critical files as off-limits
|
|
4274
|
-
- Changed `command-initialize.md` to instruct users to write or update `autoresearch.program.md` with durable heuristics and repo-specific strategy
|
|
4275
|
-
- Changed autoresearch resume guidance to emphasize continuing on the current protected branch rather than switching branches
|
|
4276
|
-
- Changed autoresearch prompt to clarify that `autoresearch.md` holds durable conclusions while `autoresearch.ideas.md` is the scratch backlog
|
|
4277
|
-
- Changed autoresearch prompt guidance to require stable measurement harness and fixed benchmark inputs unless intentionally starting a new segment
|
|
4278
|
-
- Changed autoresearch prompt to recommend keeping equal or near-equal results when they materially simplify implementation
|
|
4279
|
-
- Changed `init_experiment` to reset pending run state (checks, duration, ASI, artifact directory) when initializing a new segment
|
|
4280
|
-
- Changed `log_experiment` to set `autoResumeArmed` flag after successfully logging a run to enable auto-resume on next agent turn
|
|
4281
|
-
- Changed `run_experiment` to set `autoResumeArmed` flag and update dashboard after completing a run
|
|
4282
|
-
- Changed auto-resume logic to only prompt when a new pending run exists or when `autoResumeArmed` is explicitly set, preventing duplicate prompts
|
|
4283
|
-
- Changed path normalization in contract validation to use `path.posix.normalize()` for consistent path handling
|
|
4284
4386
|
- Changed autoresearch initialization to collect and validate benchmark command, metric definition, scope paths, off-limits list, and constraints before `init_experiment`
|
|
4285
4387
|
- Changed `init_experiment` to require exact benchmark command, metric definition, scope, off-limits, and constraints matching collected contract
|
|
4286
4388
|
- Changed `log_experiment` to record run number, benchmark command, scope paths, off-limits list, constraints, and segment fingerprint with each result
|
|
@@ -4330,9 +4432,6 @@
|
|
|
4330
4432
|
|
|
4331
4433
|
### Fixed
|
|
4332
4434
|
|
|
4333
|
-
- Fixed boundary duplication warnings to always display when replacement lines match the next surviving line, even when auto-correction is disabled
|
|
4334
|
-
- Fixed secondary metrics validation to properly reject missing configured metrics and new metrics without force flag
|
|
4335
|
-
- Fixed ASI data cloning to prevent prototype pollution attacks by filtering reserved property names
|
|
4336
4435
|
- Fixed autoresearch resume to detect and recover pending run artifacts that were left unlogged from previous sessions
|
|
4337
4436
|
- Fixed dashboard overlay to display when running experiment even with zero completed results
|
|
4338
4437
|
- Fixed tab character rendering in dashboard command display and tool output summaries
|
|
@@ -5948,15 +6047,12 @@
|
|
|
5948
6047
|
### Changed
|
|
5949
6048
|
|
|
5950
6049
|
- Improved welcome screen responsiveness to dynamically show or hide the right column based on available terminal width
|
|
5951
|
-
- Extended extension `registerProvider()` typing with OAuth provider support and source-aware registration metadata.
|
|
5952
6050
|
|
|
5953
6051
|
### Fixed
|
|
5954
6052
|
|
|
5955
6053
|
- Fixed welcome screen layout to gracefully handle small terminal widths and prevent rendering errors on narrow displays
|
|
5956
6054
|
- Fixed welcome screen title truncation to prevent overflow when content exceeds available width
|
|
5957
6055
|
- Fixed deferred `--model` resolution so extension-provided models are matched before fallback selection and unresolved explicit patterns no longer silently fallback.
|
|
5958
|
-
- Fixed CLI `--api-key` handling for deferred model resolution by applying runtime API key overrides after extension model selection.
|
|
5959
|
-
- Fixed extension provider registration cleanup to remove stale source-scoped custom API/OAuth providers across extension reloads.
|
|
5960
6056
|
|
|
5961
6057
|
## [12.5.1] - 2026-02-15
|
|
5962
6058
|
|
|
@@ -8817,7 +8913,6 @@
|
|
|
8817
8913
|
- Added `git.enabled` setting to enable/disable the structured git tool
|
|
8818
8914
|
- Added `offset` and `limit` parameters to Output tool for paginated reading of large outputs
|
|
8819
8915
|
- Added provider fallback chain for web search that tries all configured providers before failing
|
|
8820
|
-
- Added `WebSearchProviderError` class with HTTP status for actionable provider error messages
|
|
8821
8916
|
- Added bash interceptor rule to block git commands when structured git tool is enabled
|
|
8822
8917
|
- Added validation requiring `message` parameter for git commit operations (prevents interactive editor)
|
|
8823
8918
|
- Added output ID hints in multi-agent Task results pointing to Output tool for full logs
|
|
@@ -10218,110 +10313,18 @@ pi --extension ./safety.ts -e ./todo.ts
|
|
|
10218
10313
|
**Automatic.** Session version bumped from 2 to 3. Existing sessions are migrated on first load:
|
|
10219
10314
|
- Message role `"hookMessage"` → `"custom"`
|
|
10220
10315
|
|
|
10221
|
-
### Breaking Changes
|
|
10222
|
-
|
|
10223
|
-
- **Settings:** `hooks` and `customTools` arrays replaced with single `extensions` array
|
|
10224
|
-
- **CLI:** `--hook` and `--tool` flags replaced with `--extension` / `-e`
|
|
10225
|
-
- **Directories:** `hooks/`, `tools/` → `extensions/`; `commands/` → `prompts/`
|
|
10226
|
-
- **Types:** See type renames above
|
|
10227
|
-
- **SDK:** See SDK migration above
|
|
10228
|
-
|
|
10229
|
-
### Changed
|
|
10230
|
-
|
|
10231
|
-
- Extensions can have their own `package.json` with dependencies (resolved via jiti)
|
|
10232
|
-
- Documentation: `docs/hooks.md` and `docs/custom-tools.md` merged into `docs/extensions.md`
|
|
10233
|
-
- Examples: `examples/hooks/` and `examples/custom-tools/` merged into `examples/extensions/`
|
|
10234
|
-
- README: Extensions section expanded with custom tools, commands, events, state persistence, shortcuts, flags, and UI examples
|
|
10235
|
-
- SDK: `customTools` option now accepts `ToolDefinition[]` directly (simplified from `Array<{ path?, tool }>`)
|
|
10236
|
-
- SDK: `extensions` option accepts `ExtensionFactory[]` for inline extensions
|
|
10237
|
-
- SDK: `additionalExtensionPaths` replaces both `additionalHookPaths` and `additionalCustomToolPaths`
|
|
10238
|
-
|
|
10239
10316
|
## [0.34.1] - 2026-01-04
|
|
10240
10317
|
|
|
10241
|
-
### Added
|
|
10242
|
-
|
|
10243
|
-
- 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))
|
|
10244
|
-
|
|
10245
10318
|
### Changed
|
|
10246
10319
|
|
|
10247
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))
|
|
10248
10321
|
|
|
10249
|
-
## [0.34.0] - 2026-01-04
|
|
10250
|
-
|
|
10251
|
-
### Added
|
|
10252
|
-
|
|
10253
|
-
- 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.
|
|
10254
|
-
- Hook API: `before_agent_start` handlers can now return multiple messages (all are injected, not just the first)
|
|
10255
|
-
- New example hook: `tools.ts` - Interactive `/tools` command to enable/disable tools with session persistence
|
|
10256
|
-
- New example hook: `pirate.ts` - Demonstrates `systemPromptAppend` to make the agent speak like a pirate
|
|
10257
|
-
- 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()`.
|
|
10258
|
-
- System prompt now automatically rebuilds when tools change via `setActiveTools()`, updating tool descriptions and guidelines to match the new tool set
|
|
10259
|
-
- Hook errors now display full stack traces for easier debugging
|
|
10260
|
-
|
|
10261
|
-
### Changed
|
|
10262
|
-
|
|
10263
|
-
- 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))
|
|
10264
|
-
|
|
10265
|
-
### Fixed
|
|
10266
|
-
|
|
10267
|
-
- Fixed potential text decoding issues in bash executor by using streaming TextDecoder instead of Buffer.toString()
|
|
10268
|
-
- 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))
|
|
10269
|
-
|
|
10270
|
-
## [0.33.0] - 2026-01-04
|
|
10271
|
-
|
|
10272
|
-
### Breaking Changes
|
|
10273
|
-
|
|
10274
|
-
- **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))
|
|
10275
|
-
|
|
10276
|
-
### Added
|
|
10277
|
-
|
|
10278
|
-
- 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))
|
|
10279
|
-
- 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))
|
|
10280
|
-
- `/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))
|
|
10281
|
-
|
|
10282
|
-
### Fixed
|
|
10283
|
-
|
|
10284
|
-
- 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))
|
|
10285
|
-
|
|
10286
|
-
## [0.32.3] - 2026-01-03
|
|
10287
|
-
|
|
10288
|
-
### Fixed
|
|
10289
|
-
|
|
10290
|
-
- `--list-models` no longer shows Google Vertex AI models without explicit authentication configured
|
|
10291
|
-
- 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.
|
|
10292
|
-
- Version check URL typo preventing update notifications from working ([#423](https://github.com/badlogic/pi-mono/pull/423) by [@skuridin](https://github.com/skuridin))
|
|
10293
|
-
- 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))
|
|
10294
|
-
|
|
10295
|
-
## [0.32.2] - 2026-01-03
|
|
10296
|
-
|
|
10297
|
-
### Added
|
|
10298
|
-
|
|
10299
|
-
- `$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))
|
|
10300
|
-
|
|
10301
|
-
### Changed
|
|
10302
|
-
|
|
10303
|
-
- **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:
|
|
10304
|
-
- Hook commands execute immediately (they manage their own LLM interaction via `pi.sendMessage()`)
|
|
10305
|
-
- File-based slash commands are expanded and queued via steer/followUp
|
|
10306
|
-
- `steer()` and `followUp()` now expand file-based slash commands and error on hook commands (hook commands cannot be queued)
|
|
10307
|
-
- `prompt()` accepts new `streamingBehavior` option (`"steer"` or `"followUp"`) to specify queueing behavior during streaming
|
|
10308
|
-
- RPC `prompt` command now accepts optional `streamingBehavior` field
|
|
10309
|
-
([#420](https://github.com/badlogic/pi-mono/issues/420))
|
|
10310
|
-
|
|
10311
|
-
### Fixed
|
|
10312
|
-
|
|
10313
|
-
- 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))
|
|
10314
|
-
|
|
10315
10322
|
## [0.32.1] - 2026-01-03
|
|
10316
10323
|
|
|
10317
10324
|
### Added
|
|
10318
10325
|
|
|
10319
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))
|
|
10320
10327
|
|
|
10321
|
-
### Fixed
|
|
10322
|
-
|
|
10323
|
-
- Edit tool diff not displaying in TUI due to race condition between async preview computation and tool execution
|
|
10324
|
-
|
|
10325
10328
|
## [0.32.0] - 2026-01-03
|
|
10326
10329
|
|
|
10327
10330
|
### Breaking Changes
|
|
@@ -10345,27 +10348,6 @@ pi --extension ./safety.ts -e ./todo.ts
|
|
|
10345
10348
|
- `RpcSessionState.queueMode` → `steeringMode` and `followUpMode`
|
|
10346
10349
|
- **Settings UI**: "Queue mode" setting split into "Steering mode" and "Follow-up mode"
|
|
10347
10350
|
|
|
10348
|
-
### Added
|
|
10349
|
-
|
|
10350
|
-
- 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))
|
|
10351
|
-
- 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))
|
|
10352
|
-
- 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))
|
|
10353
|
-
- 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))
|
|
10354
|
-
- Alt+Enter keybind to queue follow-up messages while agent is streaming
|
|
10355
|
-
- `Theme` and `ThemeColor` types now exported for hooks using `ctx.ui.custom()`
|
|
10356
|
-
- 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))
|
|
10357
|
-
|
|
10358
|
-
### Changed
|
|
10359
|
-
|
|
10360
|
-
- 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))
|
|
10361
|
-
|
|
10362
|
-
### Fixed
|
|
10363
|
-
|
|
10364
|
-
- `/model` selector now opens instantly instead of waiting for OAuth token refresh. Token refresh is deferred until a model is actually used.
|
|
10365
|
-
- 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))
|
|
10366
|
-
- `AgentSession.prompt()` now throws if called while the agent is already streaming, preventing race conditions. Use `steer()` or `followUp()` to queue messages during streaming.
|
|
10367
|
-
- 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))
|
|
10368
|
-
|
|
10369
10351
|
## [0.31.1] - 2026-01-02
|
|
10370
10352
|
|
|
10371
10353
|
### Fixed
|