fix(deps): update dependency @earendil-works/pi-coding-agent to v1.2.0 #349

Merged
davide merged 1 commit from renovate-earendil-works-pi-coding-agent-1.x into main 2026-10-17 09:51:12 +00:00
Member

This PR contains the following updates:

Package Change Age Confidence
@earendil-works/pi-coding-agent (source) 1.1.0 → 1.2.0 age confidence

Release Notes

earendil-works/pi (@​earendil-works/pi-coding-agent)

v1.2.0

Compare Source

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 $schema to settings.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=1 sends 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_start for extension-triggered runs: runs started by pi.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 to https://pi.dev/schemas/theme.schema.json; themes loaded during startup now receive the same schema validation as later reloads. Update theme $schema references, define reusable colors under vars, and remove unsupported metadata (#​9880, #​10751 by @​christianklotz)
  • Changed before_agent_start to also fire for runs started by pi.sendMessage(..., { triggerTurn: true }) while idle. BeforeAgentStartEvent is now a union on messageType: "user" events carry prompt and images, and "custom" events carry the starting message and no prompt. Messages returned by handlers are added to both kinds of run, and pending deliverAs: "nextTurn" messages are delivered with the custom-message run. Handlers that should act only on user prompts must check event.messageType === "user" (#​10267, #​5581, #​10739 by @​davidbrai)
  • Changed the session to count as busy while a run starts, including during before_agent_start handlers: 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() requires deliverAs, and an abort requested meanwhile aborts the run once it starts (#​10739 by @​davidbrai)
  • Changed pi mcp list --json to report resources: true for servers that offer resources instead of resources and resourceTemplates counts; Pi no longer lists resources when connecting (#​10526)
Added
  • Added reachesTools to tool definitions, so tools that reach other tools (such as codemode and tool_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 replacement codemode or tool_search tool can reach MCP tools
  • Added aliases to tool namespaces; codemode's describeNamespace() and the namespace option of searchTools() 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=1 to 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 showHardwareCursor setting 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 to CallToolResult<T>, which describeTool(), searchTools(), and ALL_TOOLS showed 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 fail
Fixed
  • Fixed codemode ignoring a // @options: line that is not the first line of the script, which ran the script without the requested timeout_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.md in 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. bash with a nonzero exit)
  • Fixed runs started by pi.sendMessage(..., { triggerTurn: true }) removing system prompt sections added in before_agent_start after 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 --help and the CLI docs describing --timeout as only the wait for the browser; it limits the whole sign-in (#​10636)
  • Fixed ~ not being expanded in !pattern, +path, and -path entries of the extensions, skills, prompts, and themes settings, so entries like !~/skills/pdf matched nothing (#​10765)
  • Fixed MCP servers with resources registering no tools until every resource was listed; Pi no longer lists resources when connecting, so /mcp and pi mcp list show 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 type structuredContent as unknown instead of an object (#​10416)
  • Fixed reading or writing auth.json on Windows failing with EPERM when the previous lock folder was still being deleted; Pi now retries briefly before reporting the error (#​10801)
  • Fixed OpenRouter router models such as openrouter/auto showing 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)
  • Fixed inline images not rendering in Herdr since 1.1.0 (#​10774 by @​ogulcancelik)
  • Fixed key bindings that name a shifted symbol, such as + or ctrl++, not matching under the Kitty keyboard protocol or modifyOtherKeys (#​9880 by @​christianklotz)
  • Fixed the compaction status indicator embedded in a custom editor using the default muted colors instead of the editor border or thinking-level color, as the working indicator does (#​10809, #​10810 by @​Jay-Madden)
  • Fixed MCP tool calls that were cancelled or timed out while waiting for an OAuth refresh still being sent to the server once the refresh finished (#​10598)
  • Fixed MCP OAuth sign-in accepting an authorization response with an iss parameter that could not be checked because no authorization server metadata was discovered; sign-in now fails with an issuer mismatch. Reported by @​AizenvoltPrime
  • Fixed codemode failing with a broken bridge error when Pi runs under node --watch on Node 24 or 26 (#​10725)
Removed
  • Removed the unreleased experimental server, client, and plugin stack (src/experimental, src/cli/experimental) and its source-only ./client and ./experimental/plugin exports; none of it was part of the published package. The @earendil-works/pi-client, @earendil-works/pi-protocol, and @earendil-works/pi-server packages it used are removed and no longer released
  • Removed the dependency on @earendil-works/chord

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@earendil-works/pi-coding-agent](https://github.com/earendil-works/pi) ([source](https://github.com/earendil-works/pi/tree/HEAD/packages/coding-agent)) | [`1.1.0` → `1.2.0`](https://renovatebot.com/diffs/npm/@earendil-works%2fpi-coding-agent/1.1.0/1.2.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@earendil-works%2fpi-coding-agent/1.2.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@earendil-works%2fpi-coding-agent/1.1.0/1.2.0?slim=true) | --- ### Release Notes <details> <summary>earendil-works/pi (@&#8203;earendil-works/pi-coding-agent)</summary> ### [`v1.2.0`](https://github.com/earendil-works/pi/blob/HEAD/packages/coding-agent/CHANGELOG.md#120---2026-10-12) [Compare Source](https://github.com/earendil-works/pi/compare/v1.1.0...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](docs/providers.md#openrouter). - **Published configuration schemas**: add `$schema` to `settings.json`, `models.json`, keybindings, and themes for editor validation and completion. See [Settings](docs/settings.md), [Models](docs/models.md), [Keybindings](docs/keybindings.md), and [Themes](docs/themes.md). - **Clipboard copies over remote sessions**: `PI_CLIPBOARD_OSC52=1` sends 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](docs/environment-variables.md#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](docs/codemode.md). - **`before_agent_start` for extension-triggered runs**: runs started by `pi.sendMessage(..., { triggerTurn: true })` go through the same setup as prompts. See [Events and concurrency](docs/extensions.md#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 to `https://pi.dev/schemas/theme.schema.json`; themes loaded during startup now receive the same schema validation as later reloads. Update theme `$schema` references, define reusable colors under `vars`, and remove unsupported metadata ([#&#8203;9880](https://github.com/earendil-works/pi/pull/9880), [#&#8203;10751](https://github.com/earendil-works/pi/pull/10751) by [@&#8203;christianklotz](https://github.com/christianklotz)) - Changed `before_agent_start` to also fire for runs started by `pi.sendMessage(..., { triggerTurn: true })` while idle. `BeforeAgentStartEvent` is now a union on `messageType`: `"user"` events carry `prompt` and `images`, and `"custom"` events carry the starting `message` and no `prompt`. Messages returned by handlers are added to both kinds of run, and pending `deliverAs: "nextTurn"` messages are delivered with the custom-message run. Handlers that should act only on user prompts must check `event.messageType === "user"` ([#&#8203;10267](https://github.com/earendil-works/pi/issues/10267), [#&#8203;5581](https://github.com/earendil-works/pi/issues/5581), [#&#8203;10739](https://github.com/earendil-works/pi/pull/10739) by [@&#8203;davidbrai](https://github.com/davidbrai)) - Changed the session to count as busy while a run starts, including during `before_agent_start` handlers: `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()` requires `deliverAs`, and an abort requested meanwhile aborts the run once it starts ([#&#8203;10739](https://github.com/earendil-works/pi/pull/10739) by [@&#8203;davidbrai](https://github.com/davidbrai)) - Changed `pi mcp list --json` to report `resources: true` for servers that offer resources instead of `resources` and `resourceTemplates` counts; Pi no longer lists resources when connecting ([#&#8203;10526](https://github.com/earendil-works/pi/issues/10526)) ##### Added - Added `reachesTools` to tool definitions, so tools that reach other tools (such as `codemode` and `tool_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 replacement `codemode` or `tool_search` tool can reach MCP tools - Added `aliases` to tool namespaces; codemode's `describeNamespace()` and the `namespace` option of `searchTools()` 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 ([#&#8203;10353](https://github.com/earendil-works/pi/issues/10353), [#&#8203;10672](https://github.com/earendil-works/pi/pull/10672) by [@&#8203;davidbrai](https://github.com/davidbrai)) - Added `PI_CLIPBOARD_OSC52=1` to 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 ([#&#8203;10826](https://github.com/earendil-works/pi/issues/10826), [#&#8203;10835](https://github.com/earendil-works/pi/issues/10835), [#&#8203;10114](https://github.com/earendil-works/pi/issues/10114)) - Added elapsed time while a codemode script runs and its total time once finished to the codemode tool row, like bash rows ([#&#8203;10708](https://github.com/earendil-works/pi/issues/10708)) ##### Changed - Changed the `showHardwareCursor` setting 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 ([#&#8203;10707](https://github.com/earendil-works/pi/issues/10707)) - Changed codemode declarations of MCP tools to spell out the result type (`content`, `structuredContent`, `isError`) instead of referring to `CallToolResult<T>`, which `describeTool()`, `searchTools()`, and `ALL_TOOLS` showed 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 fail ##### Fixed - Fixed codemode ignoring a `// @options:` line that is not the first line of the script, which ran the script without the requested `timeout_ms`; the call now fails with an error before the script runs ([#&#8203;10631](https://github.com/earendil-works/pi/issues/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 ([#&#8203;10609](https://github.com/earendil-works/pi/issues/10609)) - Fixed a symlinked `AGENTS.md` in a git worktree nested inside its main repo causing no project context file to load ([#&#8203;10681](https://github.com/earendil-works/pi/issues/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. `bash` with a nonzero exit) - Fixed runs started by `pi.sendMessage(..., { triggerTurn: true })` removing system prompt sections added in `before_agent_start` after their first tool call, which changed the prompt mid-run and broke the provider prompt cache twice per run ([#&#8203;10267](https://github.com/earendil-works/pi/issues/10267), [#&#8203;10739](https://github.com/earendil-works/pi/pull/10739) by [@&#8203;davidbrai](https://github.com/davidbrai)) - Fixed codemode blocking the process for seconds to minutes after scripts with many `text()` calls; joining the output items was quadratic ([#&#8203;10678](https://github.com/earendil-works/pi/issues/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 ([#&#8203;10799](https://github.com/earendil-works/pi/issues/10799)) - Fixed `pi mcp login --help` and the CLI docs describing `--timeout` as only the wait for the browser; it limits the whole sign-in ([#&#8203;10636](https://github.com/earendil-works/pi/issues/10636)) - Fixed `~` not being expanded in `!pattern`, `+path`, and `-path` entries of the `extensions`, `skills`, `prompts`, and `themes` settings, so entries like `!~/skills/pdf` matched nothing ([#&#8203;10765](https://github.com/earendil-works/pi/issues/10765)) - Fixed MCP servers with resources registering no tools until every resource was listed; Pi no longer lists resources when connecting, so `/mcp` and `pi mcp list` show that a server offers resources instead of counting them ([#&#8203;10526](https://github.com/earendil-works/pi/issues/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 type `structuredContent` as `unknown` instead of an object ([#&#8203;10416](https://github.com/earendil-works/pi/issues/10416)) - Fixed reading or writing `auth.json` on Windows failing with `EPERM` when the previous lock folder was still being deleted; Pi now retries briefly before reporting the error ([#&#8203;10801](https://github.com/earendil-works/pi/issues/10801)) - Fixed OpenRouter router models such as `openrouter/auto` showing a cost of -$1,000,000 per 1M tokens; OpenRouter's negative placeholder prices are now 0 ([#&#8203;10672](https://github.com/earendil-works/pi/pull/10672) by [@&#8203;davidbrai](https://github.com/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 ([#&#8203;10409](https://github.com/earendil-works/pi/issues/10409)) - Fixed "The upstream provider returned an error" not being retried as a transient provider error ([#&#8203;10842](https://github.com/earendil-works/pi/issues/10842)) - Fixed focused fullscreen overlays blocking mouse-wheel scrolling of the transcript ([#&#8203;10769](https://github.com/earendil-works/pi/issues/10769)) - Fixed fragmented terminal color replies leaking hex values into the prompt and opening the external editor (related reports: [#&#8203;10256](https://github.com/earendil-works/pi/issues/10256), [#&#8203;10657](https://github.com/earendil-works/pi/issues/10657)) - Fixed inline images not rendering in Herdr since 1.1.0 ([#&#8203;10774](https://github.com/earendil-works/pi/pull/10774) by [@&#8203;ogulcancelik](https://github.com/ogulcancelik)) - Fixed key bindings that name a shifted symbol, such as `+` or `ctrl++`, not matching under the Kitty keyboard protocol or modifyOtherKeys ([#&#8203;9880](https://github.com/earendil-works/pi/pull/9880) by [@&#8203;christianklotz](https://github.com/christianklotz)) - Fixed the compaction status indicator embedded in a custom editor using the default muted colors instead of the editor border or thinking-level color, as the working indicator does ([#&#8203;10809](https://github.com/earendil-works/pi/issues/10809), [#&#8203;10810](https://github.com/earendil-works/pi/pull/10810) by [@&#8203;Jay-Madden](https://github.com/Jay-Madden)) - Fixed MCP tool calls that were cancelled or timed out while waiting for an OAuth refresh still being sent to the server once the refresh finished ([#&#8203;10598](https://github.com/earendil-works/pi/issues/10598)) - Fixed MCP OAuth sign-in accepting an authorization response with an `iss` parameter that could not be checked because no authorization server metadata was discovered; sign-in now fails with an issuer mismatch. Reported by [@&#8203;AizenvoltPrime](https://github.com/AizenvoltPrime) - Fixed codemode failing with a broken bridge error when Pi runs under `node --watch` on Node 24 or 26 ([#&#8203;10725](https://github.com/earendil-works/pi/issues/10725)) ##### Removed - Removed the unreleased experimental server, client, and plugin stack (`src/experimental`, `src/cli/experimental`) and its source-only `./client` and `./experimental/plugin` exports; none of it was part of the published package. The `@earendil-works/pi-client`, `@earendil-works/pi-protocol`, and `@earendil-works/pi-server` packages it used are removed and no longer released - Removed the dependency on `@earendil-works/chord` </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNjQuNSIsInVwZGF0ZWRJblZlciI6IjQ0LjE2NC41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
fix(deps): update dependency @earendil-works/pi-coding-agent to v1.2.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
check-commitizen.yaml / Check the PR title (pull_request) Successful in 2s
check-formatter.yaml / Checks with formatters (pull_request) Successful in 7s
check-linter.yaml / Checks with linters (pull_request) Successful in 13s
check-prettier.yaml / Check files formatting (pull_request) Successful in 3s
check-syntax.yaml / Checks with static tools (pull_request) Successful in 11s
check-test-unit.yaml / Run unit tests (pull_request) Successful in 10s
check-yamllint.yaml / Lint yaml files (pull_request) Successful in 3s
forgejo-agent / LLM Bot response generation (pull_request) Successful in 2s
5addbd401e
renovate-bot force-pushed renovate-earendil-works-pi-coding-agent-1.x from 5addbd401e
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
check-commitizen.yaml / Check the PR title (pull_request) Successful in 2s
check-formatter.yaml / Checks with formatters (pull_request) Successful in 7s
check-linter.yaml / Checks with linters (pull_request) Successful in 13s
check-prettier.yaml / Check files formatting (pull_request) Successful in 3s
check-syntax.yaml / Checks with static tools (pull_request) Successful in 11s
check-test-unit.yaml / Run unit tests (pull_request) Successful in 10s
check-yamllint.yaml / Lint yaml files (pull_request) Successful in 3s
forgejo-agent / LLM Bot response generation (pull_request) Successful in 2s
to b2bbcfcdcf
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
check-formatter.yaml / Checks with formatters (pull_request) Successful in 7s
check-linter.yaml / Checks with linters (pull_request) Successful in 13s
check-prettier.yaml / Check files formatting (pull_request) Successful in 3s
check-syntax.yaml / Checks with static tools (pull_request) Successful in 12s
check-test-unit.yaml / Run unit tests (pull_request) Successful in 11s
check-yamllint.yaml / Lint yaml files (pull_request) Successful in 3s
2026-10-17 03:03:19 +00:00
Compare
davide merged commit 9726fdf2a3 into main 2026-10-17 09:51:12 +00:00
davide deleted branch renovate-earendil-works-pi-coding-agent-1.x 2026-10-17 09:51:12 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
projects/forgejo-agent!349
No description provided.