Commit graph

6782 commits

Author SHA1 Message Date
Armin Ronacher
962b130e0c feat(coding-agent): add in-context compaction
With compaction.inContext enabled, compaction can generate the summary inside the cached conversation: it repeats the request the next turn would send, appends the instructions as a system message plus a user message, and sets toolChoice none. The recent tail is kept as before. A gate requires a verified model, a warm cache from the same model and thinking level, room in the context window, and a lower estimated cost than the standalone summary. Failed or rejected attempts fall back to the standalone summary, never execute tools, and are recorded in details.inContext with their usage.

pi-ai adds the supportsInContextCompaction compat setting and test/in-context-compaction-probe.ts, which measures whether a model keeps its prompt cache for this request shape. The generated catalog flags the models that passed.
2026-10-07 00:14:46 +02:00
David Brailovsky
27075fe075 fix(ai): estimate request context at 3.5 characters per token
Increase estimated input size to leave more room when calculating
output limits. Verified against OpenRouter DeepSeek V4 Flash: the
same large input now succeeds with an explicit output limit.

Fixes #10497
2026-10-06 17:37:24 +02:00
Ramiz Wachtler
18336987ad
fix(coding-agent): apply outputPad to all transcript blocks (#10557) 2026-10-06 17:27:55 +02:00
Mario Zechner
76f6c06daf feat(durable): read a conversation's context as of an earlier entry
closes #10512
2026-10-06 17:22:05 +02:00
Mario Zechner
b0114ef5fa feat(durable): expose models on ToolExecutionApi and HookApi
closes #10395
2026-10-06 17:14:43 +02:00
Mario Zechner
68ccef1760 fix(durable): reuse the scanned context range within a task invocation
runtime.context() keeps the range its last read scanned for the task
invocation. A later read with the same conversation and head marker scans
only entries committed after that range's tail and re-derives the view in
memory. A generation's request no longer rereads the whole transcript after
its prepare. The range is dropped when the invocation ends or sleeps.
2026-10-06 16:59:46 +02:00
Christian Klotz
83c9e26453
fix(tui,coding-agent): clear fullscreen selection on transcript rebuild (#10567)
Selection coordinates survived session switches and other transcript rebuilds, highlighting unrelated text in the new transcript. Reset selection and multi-click state before re-rendering session entries.

Based on #9310.

fixes #9311

Co-authored-by: xdagiz <xdagiz@protonmail.com>
2026-10-06 16:35:24 +02:00
David Brailovsky
8b5708dbb1 fix(ai): retry transient server-busy provider errors
Recognize server_busy and servers are currently busy as retryable errors.

Fixes #10543
2026-10-06 15:59:24 +02:00
Christian Klotz
56b25ff4eb
docs(coding-agent): align documented message types (#10566) 2026-10-06 15:05:49 +02:00
Armin Ronacher
ddaa0a0341 feat(coding-agent): accept +name/-name entries in --tools
A --tools list of only +name/-name entries changes the default tool
selection like the defaultTools setting, e.g. pi -t +codemode. Mixed
lists and patterns in modifiers are rejected, and /reload keeps tools
removed with -name removed.
2026-10-06 13:51:04 +02:00
Christian Klotz
23cf2b948d
feat: unify package artifact validation (#10197)
* feat: unify package artifact validation

* fix: restrict local artifact output paths

* fix: clarify package artifact module names

* feat: support pnpm package artifact consumers

* fix: preserve local release package installs

Keep npm and Bun consumer installs as runnable release artifacts while retaining isolated validation for other packages. Simplify smoke fixtures and avoid redundant release work.
2026-10-06 13:30:02 +02:00
github-actions[bot]
428a12bc77 chore: approve contributors from issue #10353 2026-10-06 08:18:03 +00:00
Lucas Meijer
0cf65d2bf7
fix(ai): let caller headers override Codex originator and User-Agent (#10429)
StreamOptions.headers documents that caller values override provider
defaults, and every other provider applies model/caller headers after its
User-Agent default. The Codex provider set originator and User-Agent after
merging caller headers, so they could not be overridden. Set the defaults
first; Authorization and chatgpt-account-id stay fixed.

Co-authored-by: Lucas Meijer <308974+lucasmeijer@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: David Brailovsky <davidbrai@gmail.com>
2026-10-06 10:01:19 +02:00
Armin Ronacher
1ffb6bd621 fix(coding-agent): disable .env autoload in standalone binary
Bun compiled executables load cwd .env files into process.env by default.
closes #10473
2026-10-06 09:57:14 +02:00
Lucas Meijer
9ad083102a
feat(ai): let apps name themselves in OpenAI logins (#10433)
LoginOptions.agentName replaces pi's name in the Sign in with ChatGPT
agent_name_hint and the Codex browser login originator.
2026-10-06 09:27:40 +02:00
Armin Ronacher
f6127a1bf9
feat(coding-agent): use llama.cpp classifier models natively (#10382)
This adds llama.cpp support for classifiers. Classifier models (Julia-1, Laya, Kev, lev, OpenJev) are listed as typesafe-system-one classifiers instead of chat models; other models keep the llama-cpp-classify fallback. Only 501 and 404 mark a model as chat, and classifier models restored from the model store are checked again once loaded.
2026-10-06 09:23:07 +02:00
David Brailovsky
9f013cf59c
Prune managed installs (#10511)
* fix(coding-agent): remove old managed releases after pi update

Keep only the new release and the one that ran the update.

closes #10392
2026-10-06 09:23:01 +02:00
Armin Ronacher
28dcce2ba4 Add [Unreleased] section for next cycle 2026-10-05 21:23:02 +02:00
Armin Ronacher
7c10bd4337 Release v1.0.4 2026-10-05 21:22:49 +02:00
Armin Ronacher
5b31896472 fix(env): login shell test works when the account shell is zsh 2026-10-05 21:17:23 +02:00
Armin Ronacher
3cdfbec51e docs(coding-agent): audit changelog for next release 2026-10-05 21:11:29 +02:00
Mario Zechner
031b24aa64 feat(env): lazy SSH connections 2026-10-05 20:39:50 +02:00
Mario Zechner
b5b4906013 docs(durable): breaking watch changes in the changelog 2026-10-05 20:39:49 +02:00
Mario Zechner
98d2e1947a docs: remove tui-plan.md 2026-10-05 18:53:48 +02:00
Armin Ronacher
c30840c2eb fix(coding-agent): keep hidden tools out of prompt rules and skills hint
Rules and the tool list follow the declared tools (active minus
hiddenDeclarations). The skills hint names no tool when the reader is
hidden. Codemode shows each tool's prompt guidelines with its
declaration, via the new ToolLoadout.getPromptGuidelines().

closes #10343
2026-10-05 18:50:17 +02:00
Mario Zechner
68c22123be feat(durable): powershell tool over argv exec 2026-10-05 18:37:25 +02:00
Armin Ronacher
8c911797c3 fix(coding-agent): close MCP connections that are still connecting on shutdown
close() now aborts a per-connection signal that closes the in-flight
client, cancels the retry wait, and waits for the connect attempt to
settle before returning.

closes #10249
2026-10-05 18:05:45 +02:00
Mario Zechner
b7dfc049e9 fix(env): upload to Windows as base64 lines through PowerShell's input 2026-10-05 17:32:22 +02:00
Mario Zechner
9a193ff7e2 fix(env): upload to Windows without relying on the end of stdin 2026-10-05 17:32:22 +02:00
Mario Zechner
6fa21f2a37 fix(env): time out stuck ssh calls and daemon starts 2026-10-05 17:32:22 +02:00
Mario Zechner
4bf5a6bc5c fix(env): detect Windows when its shell garbles the POSIX probe 2026-10-05 17:32:22 +02:00
Mario Zechner
97a600395e fix(env): Windows watcher identity from file indexes 2026-10-05 17:32:22 +02:00
Mario Zechner
956e81504c fix(env): ENOTDIR for listing a file on Windows, pinned NDK install, protocol docs 2026-10-05 17:32:22 +02:00
Mario Zechner
ed94330a20 feat(env): hardened SSH bootstrap and release daemon tests 2026-10-05 17:32:22 +02:00
Mario Zechner
46d0ff9365 fix(env): daemon robustness, output windows, native watching and Node read semantics 2026-10-05 17:32:22 +02:00
Mario Zechner
cd60a5b990 fix(durable): watcher coverage, growing reads, output BOM and progress defaults 2026-10-05 17:32:22 +02:00
Armin Ronacher
b223082bb2 fix(codemode): survive scripts that patch built-ins
Freeze built-ins and make built-in globals read-only before the script
runs, keeping instance overrides working via accessors. Validate all
worker payloads on the host and fail malformed ones as sandbox errors
instead of crashing the host process.

closes #10444
2026-10-05 17:29:19 +02:00
Armin Ronacher
04b97ef000 fix(coding-agent): keep MCP tools with --tools, add tool patterns and --no-mcp
--tools no longer removes MCP tools unless an entry starts with mcp__, so
pi --tools codemode can reach MCP servers. Unnamed MCP tools are never
declared directly; only tool_search can load them. --no-tools still
removes everything.

--tools and --exclude-tools accept * patterns, for example
--tools read,codemode,'mcp__radius__*'. --no-mcp disables the built-in
MCP support for one run.
2026-10-05 17:21:55 +02:00
Armin Ronacher
147b502816 fix(mcp): send application_type in OAuth dynamic client registration
OpenID Connect authorization servers treat a registration without application_type as a web client and reject http loopback redirect URIs. Derive it from redirect_uris when unset (MCP SEP-837): native for loopback hosts and custom schemes, otherwise web.

closes #10493
2026-10-05 17:11:00 +02:00
Armin Ronacher
021eae60a7 fix(coding-agent): resolve codemode read calls on images to image blocks
read declares an output schema: text for text files, and an image block
with its note for images, which codemode's image() shows.

closes #10251
2026-10-05 16:58:05 +02:00
David Brailovsky
5b6c792b42 fix(ai): retry HTTP/2 pending stream cancellation
Bedrock's HTTP/2 connection can stall until the SDK's 5-minute session
timeout, which fails the request with "The pending stream has been
canceled" (ERR_HTTP2_STREAM_CANCEL). The request was never sent, so it
is safe to retry, but the message was only retried when a DNS cause was
appended.

closes #10379
2026-10-05 13:49:46 +02:00
Mario Zechner
b78e6a9085 feat(env): SSH bootstrap and daemons in the npm package
- connectSsh detects the remote system, deploys the packaged daemon
  verified by SHA-256 before it runs, and connects over ssh with strict
  host keys under a fixed alias; scanHostKey and acceptHostKey
- Windows detection and deployment through PowerShell
- release builds the daemon for every supported remote system and
  ships them in @earendil-works/pi-env's bin/
- end-to-end tests against a disposable sshd
2026-10-05 13:06:08 +02:00
Mario Zechner
1cbc7a0e8e feat(env): build the pi-env daemon for every supported remote system 2026-10-05 12:50:48 +02:00
Mario Zechner
ba03e03f2d feat(env): add @earendil-works/pi-env, remote execution environments over SSH
- RemoteExecutionEnv: a Durable ExecutionEnv on another machine whose
  results match NodeExecutionEnv there; Connection to the pi-env daemon
- packages/env/daemon: the Rust daemon for Linux, macOS, Android and
  Windows, following Node and libuv semantics
- env.yml runs Durable's env tests, the daemon's checks and pi-env's
  conformance and differential tests on Linux, macOS and Windows
2026-10-05 12:50:48 +02:00
Ramiz Wachtler
b9ab918c62
fix(coding-agent): keep syntax colors on multiline tokens (#10356)
* fix(coding-agent): keep syntax colors on multiline tokens

- format each line of a highlighted span separately
- add regression test for python docstrings
- fixes #10143

* fix(coding-agent): use text color for string interpolations

- map highlight.js `subst` scope to text color
2026-10-05 10:35:43 +02:00
Armin Ronacher
997d31f286 Add [Unreleased] section for next cycle 2026-10-05 10:21:24 +02:00
Armin Ronacher
d78dc83d63 Release v1.0.3 2026-10-05 10:21:10 +02:00
Armin Ronacher
2a12fa4e88 docs(coding-agent): add new features to changelog 2026-10-05 10:13:51 +02:00
github-actions[bot]
0b7287ce77 chore: update Nix model catalog pin 2026-10-05 08:08:13 +00:00
Armin Ronacher
6100fe5a83 fix(tui): keep Home/End for the editor in fullscreen mode
Fullscreen transcript top/bottom moved to Ctrl+Home/Ctrl+End.

closes #10314
2026-10-05 09:53:54 +02:00