build(deps-dev): bump @earendil-works/pi-coding-agent from 1.1.0 to 1.2.0
Closed
DE
1d ago+22+22+01234567890123456789-6-6-0123456789
Bumps @earendil-works/pi-coding-agent from 1.1.0 to 1.2.0.
Release notes
Sourced from @earendil-works/pi-coding-agent's releases.
v1.2.0
New Features
- Per-key OpenRouter model lists: with an OpenRouter key, Pi lists only the models that key may use, with the key's context size, max output, and prices, including regional endpoints set in
models.json. See OpenRouter.- Published configuration schemas: add
$schematosettings.json,models.json, keybindings, and themes for editor validation and completion. See Settings, Models, Keybindings, and Themes.- Clipboard copies over remote sessions:
PI_CLIPBOARD_OSC52=1sends copied text to a remote client's clipboard when Pi cannot detect the remote session, such as a multiplexer attached from another machine. See Pi Process Configuration.- Codemode improvements: tool declarations show input constraints such as integer, minimum/maximum, and default, and codemode rows show elapsed and total time. See Codemode.
before_agent_startfor extension-triggered runs: runs started bypi.sendMessage(..., { triggerTurn: true })go through the same setup as prompts. See Events and concurrency.Breaking Changes
- Published generated configuration schemas for models, settings, keybindings, and themes at
https://pi.dev/schemas/*.schema.json. The theme schema moved tohttps://pi.dev/schemas/theme.schema.json; themes loaded during startup now receive the same schema validation as later reloads. Update theme$schemareferences, define reusable colors undervars, and remove unsupported metadata (#9880, #10751 by@christianklotz)- Changed
before_agent_startto also fire for runs started bypi.sendMessage(..., { triggerTurn: true })while idle.BeforeAgentStartEventis now a union onmessageType:"user"events carrypromptandimages, and"custom"events carry the startingmessageand noprompt. Messages returned by handlers are added to both kinds of run, and pendingdeliverAs: "nextTurn"messages are delivered with the custom-message run. Handlers that should act only on user prompts must checkevent.messageType === "user"(#10267, #5581, #10739 by@davidbrai)- Changed the session to count as busy while a run starts, including during
before_agent_starthandlers:ctx.isIdle()is false,pi.sendMessage()queues into the starting run instead of starting a second run that failed with "Agent is already processing",pi.sendUserMessage()requiresdeliverAs, and an abort requested meanwhile aborts the run once it starts (#10739 by@davidbrai)- Changed
pi mcp list --jsonto reportresources: truefor servers that offer resources instead ofresourcesandresourceTemplatescounts; Pi no longer lists resources when connecting (#10526)Added
- Added
reachesToolsto tool definitions, so tools that reach other tools (such ascodemodeandtool_search) declare which tools a call may reach; the MCP extension uses it to wait for the servers a call needs and to decide whether a replacementcodemodeortool_searchtool can reach MCP tools- Added
aliasesto tool namespaces; codemode'sdescribeNamespace()and thenamespaceoption ofsearchTools()match them, and MCP namespaces use the server name- Added per-key OpenRouter model lists: with an OpenRouter key, Pi lists only the chat models that key may use, with the key's context size, max output, and prices, including guardrails and regional endpoints set as the base URL in
models.json. The list is saved and used offline (#10353, #10672 by@davidbrai)- Added
PI_CLIPBOARD_OSC52=1to send copied text to the terminal with OSC 52 after the local clipboard write, so copies reach a remote client's clipboard when Pi cannot detect the remote session, such as multiplexer attaches from another machine or remote IDE daemons (#10826, #10835, #10114)- Added elapsed time while a codemode script runs and its total time once finished to the codemode tool row, like bash rows (#10708)
Changed
- Changed the
showHardwareCursorsetting to use only the terminal cursor instead of also drawing Pi's reverse-video cursor- Changed codemode tool declarations to show input constraints such as integer, minimum/maximum, length, pattern, and default as
@tags on property comments, so scripts see them without the tool repeating them in descriptions (#10707)- Changed codemode declarations of MCP tools to spell out the result type (
content,structuredContent,isError) instead of referring toCallToolResult<T>, whichdescribeTool(),searchTools(), andALL_TOOLSshowed without defining it; the codemode description no longer includes the shared MCP types- Changed
serializeConversation()(compaction, branch summaries, bug reports) to omit thinking blocks; replayed thinking is often not in the live context, so including it could make a summarization request larger than the context it summarizes and failFixed
- Fixed codemode ignoring a
// @options:line that is not the first line of the script, which ran the script without the requestedtimeout_ms; the call now fails with an error before the script runs (#10631)- Fixed Mistral streams being aborted mid-generation (e.g. during long thinking) after the request timeout; the timeout now applies only to waiting for response headers (#10609)
- Fixed a symlinked
AGENTS.mdin a git worktree nested inside its main repo causing no project context file to load (#10681)- Fixed the code mode tool description claiming every failed tool call rejects; a tool that declares an output schema resolves with its value on failure too (e.g.
bashwith a nonzero exit)- Fixed runs started by
pi.sendMessage(..., { triggerTurn: true })removing system prompt sections added inbefore_agent_startafter their first tool call, which changed the prompt mid-run and broke the provider prompt cache twice per run (#10267, #10739 by@davidbrai)- Fixed codemode blocking the process for seconds to minutes after scripts with many
text()calls; joining the output items was quadratic (#10678)- Fixed print mode (
-p) exiting 0 without a warning when the final response was cut off at the model's output token limit; it now prints the partial text, writes a warning to stderr, and exits 1 (#10799)- Fixed
pi mcp login --helpand the CLI docs describing--timeoutas only the wait for the browser; it limits the whole sign-in (#10636)- Fixed
~not being expanded in!pattern,+path, and-pathentries of theextensions,skills,prompts, andthemessettings, so entries like!~/skills/pdfmatched nothing (#10765)- Fixed MCP servers with resources registering no tools until every resource was listed; Pi no longer lists resources when connecting, so
/mcpandpi mcp listshow that a server offers resources instead of counting them (#10526)- Fixed MCP tool calls failing when the server returns structured content that is not an object (an array,
null, or a primitive, as MCP 2026-07-28 allows); codemode declarations of MCP tools without an output schema now typestructuredContentasunknowninstead of an object (#10416)- Fixed reading or writing
auth.jsonon Windows failing withEPERMwhen the previous lock folder was still being deleted; Pi now retries briefly before reporting the error (#10801)- Fixed OpenRouter router models such as
openrouter/autoshowing a cost of -$1,000,000 per 1M tokens; OpenRouter's negative placeholder prices are now 0 (#10672 by@davidbrai)- Fixed Anthropic requests failing when the provider rejects the strict tool set for grammar size, tool count, or union limits; Pi now retries once with preferred tools non-strict (#10409)
- Fixed "The upstream provider returned an error" not being retried as a transient provider error (#10842)
- Fixed focused fullscreen overlays blocking mouse-wheel scrolling of the transcript (#10769)
- Fixed fragmented terminal color replies leaking hex values into the prompt and opening the external editor (related reports: #10256, #10657)
... (truncated)
Changelog
Sourced from @earendil-works/pi-coding-agent's changelog.
[1.2.0] - 2026-10-12
New Features
- Per-key OpenRouter model lists: with an OpenRouter key, Pi lists only the models that key may use, with the key's context size, max output, and prices, including regional endpoints set in
models.json. See OpenRouter.- Published configuration schemas: add
$schematosettings.json,models.json, keybindings, and themes for editor validation and completion. See Settings, Models, Keybindings, and Themes.- Clipboard copies over remote sessions:
PI_CLIPBOARD_OSC52=1sends copied text to a remote client's clipboard when Pi cannot detect the remote session, such as a multiplexer attached from another machine. See Pi Process Configuration.- Codemode improvements: tool declarations show input constraints such as integer, minimum/maximum, and default, and codemode rows show elapsed and total time. See Codemode.
before_agent_startfor extension-triggered runs: runs started bypi.sendMessage(..., { triggerTurn: true })go through the same setup as prompts. See Events and concurrency.Breaking Changes
- Published generated configuration schemas for models, settings, keybindings, and themes at
https://pi.dev/schemas/*.schema.json. The theme schema moved tohttps://pi.dev/schemas/theme.schema.json; themes loaded during startup now receive the same schema validation as later reloads. Update theme$schemareferences, define reusable colors undervars, and remove unsupported metadata (#9880, #10751 by@christianklotz)- Changed
before_agent_startto also fire for runs started bypi.sendMessage(..., { triggerTurn: true })while idle.BeforeAgentStartEventis now a union onmessageType:"user"events carrypromptandimages, and"custom"events carry the startingmessageand noprompt. Messages returned by handlers are added to both kinds of run, and pendingdeliverAs: "nextTurn"messages are delivered with the custom-message run. Handlers that should act only on user prompts must checkevent.messageType === "user"(#10267, #5581, #10739 by@davidbrai)- Changed the session to count as busy while a run starts, including during
before_agent_starthandlers:ctx.isIdle()is false,pi.sendMessage()queues into the starting run instead of starting a second run that failed with "Agent is already processing",pi.sendUserMessage()requiresdeliverAs, and an abort requested meanwhile aborts the run once it starts (#10739 by@davidbrai)- Changed
pi mcp list --jsonto reportresources: truefor servers that offer resources instead ofresourcesandresourceTemplatescounts; Pi no longer lists resources when connecting (#10526)Added
- Added
reachesToolsto tool definitions, so tools that reach other tools (such ascodemodeandtool_search) declare which tools a call may reach; the MCP extension uses it to wait for the servers a call needs and to decide whether a replacementcodemodeortool_searchtool can reach MCP tools- Added
aliasesto tool namespaces; codemode'sdescribeNamespace()and thenamespaceoption ofsearchTools()match them, and MCP namespaces use the server name- Added per-key OpenRouter model lists: with an OpenRouter key, Pi lists only the chat models that key may use, with the key's context size, max output, and prices, including guardrails and regional endpoints set as the base URL in
models.json. The list is saved and used offline (#10353, #10672 by@davidbrai)- Added
PI_CLIPBOARD_OSC52=1to send copied text to the terminal with OSC 52 after the local clipboard write, so copies reach a remote client's clipboard when Pi cannot detect the remote session, such as multiplexer attaches from another machine or remote IDE daemons (#10826, #10835, #10114)- Added elapsed time while a codemode script runs and its total time once finished to the codemode tool row, like bash rows (#10708)
Changed
- Changed the
showHardwareCursorsetting to use only the terminal cursor instead of also drawing Pi's reverse-video cursor- Changed codemode tool declarations to show input constraints such as integer, minimum/maximum, length, pattern, and default as
@tags on property comments, so scripts see them without the tool repeating them in descriptions (#10707)- Changed codemode declarations of MCP tools to spell out the result type (
content,structuredContent,isError) instead of referring toCallToolResult<T>, whichdescribeTool(),searchTools(), andALL_TOOLSshowed without defining it; the codemode description no longer includes the shared MCP types- Changed
serializeConversation()(compaction, branch summaries, bug reports) to omit thinking blocks; replayed thinking is often not in the live context, so including it could make a summarization request larger than the context it summarizes and failFixed
- Fixed codemode ignoring a
// @options:line that is not the first line of the script, which ran the script without the requestedtimeout_ms; the call now fails with an error before the script runs (#10631)- Fixed Mistral streams being aborted mid-generation (e.g. during long thinking) after the request timeout; the timeout now applies only to waiting for response headers (#10609)
- Fixed a symlinked
AGENTS.mdin a git worktree nested inside its main repo causing no project context file to load (#10681)- Fixed the code mode tool description claiming every failed tool call rejects; a tool that declares an output schema resolves with its value on failure too (e.g.
bashwith a nonzero exit)- Fixed runs started by
pi.sendMessage(..., { triggerTurn: true })removing system prompt sections added inbefore_agent_startafter their first tool call, which changed the prompt mid-run and broke the provider prompt cache twice per run (#10267, #10739 by@davidbrai)- Fixed codemode blocking the process for seconds to minutes after scripts with many
text()calls; joining the output items was quadratic (#10678)- Fixed print mode (
-p) exiting 0 without a warning when the final response was cut off at the model's output token limit; it now prints the partial text, writes a warning to stderr, and exits 1 (#10799)- Fixed
pi mcp login --helpand the CLI docs describing--timeoutas only the wait for the browser; it limits the whole sign-in (#10636)- Fixed
~not being expanded in!pattern,+path, and-pathentries of theextensions,skills,prompts, andthemessettings, so entries like!~/skills/pdfmatched nothing (#10765)- Fixed MCP servers with resources registering no tools until every resource was listed; Pi no longer lists resources when connecting, so
/mcpandpi mcp listshow that a server offers resources instead of counting them (#10526)- Fixed MCP tool calls failing when the server returns structured content that is not an object (an array,
null, or a primitive, as MCP 2026-07-28 allows); codemode declarations of MCP tools without an output schema now typestructuredContentasunknowninstead of an object (#10416)- Fixed reading or writing
auth.jsonon Windows failing withEPERMwhen the previous lock folder was still being deleted; Pi now retries briefly before reporting the error (#10801)- Fixed OpenRouter router models such as
openrouter/autoshowing a cost of -$1,000,000 per 1M tokens; OpenRouter's negative placeholder prices are now 0 (#10672 by@davidbrai)- Fixed Anthropic requests failing when the provider rejects the strict tool set for grammar size, tool count, or union limits; Pi now retries once with preferred tools non-strict (#10409)
- Fixed "The upstream provider returned an error" not being retried as a transient provider error (#10842)
- Fixed focused fullscreen overlays blocking mouse-wheel scrolling of the transcript (#10769)
... (truncated)
Commits
06a4669Release v1.2.00d79b74docs: audit changelogs and add new features for next release3e477eafeat(coding-agent): add PI_CLIPBOARD_OSC52 to force OSC 52 copiesb6d505cfix(codemode): reject //@options: lines that are not the first linee6fb258fix(coding-agent): retry transient Windows EPERM when acquiring auth lock441f576fix(coding-agent): warn and exit non-zero in print mode on truncated response014873dfeat(coding-agent): show elapsed and total time on codemode rows67996abfix(mcp,coding-agent): accept any JSON value as tool structuredContentf4cca2dfix(coding-agent): stop listing MCP resources when connecting6a51a39fix(coding-agent): expand ~ in resource setting patterns- Additional commits viewable in compare view
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Summary by cubic
Bumps @earendil-works/pi-coding-agent from 1.1.0 to 1.2.0 as a dev dependency. The update adds per-key OpenRouter model lists, published configuration schemas, codemode improvements, and several bug fixes across MCP, streaming, and print mode.
Breaking Changes
- The
before_agent_starthook now fires for extension-triggered runs, andBeforeAgentStartEventis a union onmessageType; handlers must checkevent.messageType === "user"to act only on user prompts. - The session is now considered busy while a run starts, so
ctx.isIdle()returnsfalseandpi.sendMessage()queues into the starting run. - Configuration schemas are published at
https://pi.dev/schemas/*.schema.json; the theme schema moved to a new URL, and themes are now validated at startup. pi mcp list --jsonreportsresources: truefor servers that offer resources instead of resource and resourceTemplate counts.