vault / earendil-pi / v0.87.0
earendil-pi @ v0.87.0
integrity
- size
- 8.5 MiB
- downloaded
- last checked
source https://github.com/earendil-works/pi · temporary_down
release notes
New Features
- Canonical session context and extension boundaries — Edit model context without rewriting history and add actionable lifecycle hooks. See ContextEditEntry and extension events.
- Full-transcript context extensions — Use
context_with_systemfor per-request system-message transformations. Seecontext_with_system. - Per-model image input limits — Configure cache-safe image resizing per model for attachments,
read, and tool-result images. See Image Input Limits.
Breaking Changes
- Removed the inherited
shouldStopAfterTurnagent option. UsefinishTurnand return{ action: "end" }instead.finishTurnruns beforeturn_endbut applies the decision afterward, and it also receives error and aborted responses; migrate normal-response predicates by returningundefinedfor those hard exits. See the@earendil-works/pi-agent-corechangelog for a complete before-and-after example. - Added
ContextEditEntryto the exportedSessionEntryunion. TypeScript consumers with exhaustive entry switches must handlecontext_edit; usereplacement: nullfor omission and a content replacement otherwise. - Made
SessionManagercanonical forAgentSessionprovider context. Assigningsession.agent.state.messagesno longer replaces future request history; restore withSessionManager.inMemory(cwd, { id }, entries), navigate withsession.navigateTree(), or append throughsession.sessionManagerand callsession.refreshContext(). - Expanded
TurnEndEventwith required boundary fields and addedAgentBeforeSettleEventto the exportedExtensionEventunion. Consumers constructing events or exhaustively switching onExtensionEventmust handle the new shapes.ExtensionRunner.emit()no longer acceptsturn_end; host integrations dispatch actionable boundaries withemitBoundary(baseEvent, buildContext). - Deferred runs requested from
agent_settledhandlers until all settled handlers finish. Handlers still observectx.isIdle() === true, but no longer see a reentrantagent_startduring the same notification dispatch.
Added
- Added append-only model-context edits. For example,
sessionManager.appendContextEdit(entryId, null)omits one message from future provider context without changing raw history, usage, or UI history. - Added actionable
turn_endandagent_before_settleextension boundaries. Return{ entries: [...event.entries, draft], continue: true }to persist structural entries in order and ensure one next provider request without changing steering or follow-up scheduling. - Added retain-none compaction input:
sessionManager.appendCompaction(summary, null, tokensBefore)stores the compaction's own ID as its kept boundary. - Added the
context_with_systemextension event, which runs aftercontexthandlers on the full transcript including system messages and sends its result verbatim. Seecontext_with_system. - Added per-model image resize profiles through
inputLimits.images.resizeinmodels.json, applied to file attachments, image reads, and tool-result images (#9631).
Fixed
- Fixed string context-edit replacements producing invalid assistant and tool-result message content instead of text blocks.
- Fixed context-invisible boundary metadata and replacement edits causing newly appended or replaced input to be summarized before its first provider request.
- Fixed edited-context accounting both discarding valid assistant usage captured after the latest context edit and reusing that usage after a later compaction made it stale.
- Fixed selected error retries and final length/overflow recovery retaining abandoned model attempts in future provider context; post-run recovery omissions are now persisted without hiding raw transcript history or changing queue scheduling.
- Fixed
contexthandlers that filter or slice messages dropping the prompt and tool declarations, which after extension-driven compaction left requests without built-in tools or made Codex emit raw tool-call text. Handlers no longer see system messages; Pi restores the prompt and tool state after they run. Seecontext(#9789, #9822). - Fixed
/bugallowing uploads in offline mode while preserving local zip exports (#9841 by @christianklotz). - Fixed idle prompt-cache warming rebuilding expired caches when its timer or an extension decision is delayed.
- Improved crash diagnostics with hints identifying loaded extensions that appear in the stack trace.
- Fixed text files beginning with
GIFbeing misclassified as images and omitted fromreadand CLI@fileinput (#9755). - Fixed malformed prompt template frontmatter being silently ignored instead of reported as a resource warning (#9830 by @christianklotz).
- Fixed inherited unknown OpenAI-compatible Chat Completions endpoints receiving strict tool schemas unless they explicitly advertise support (#9816).
download
unix · zip
curl -fL -o v0.87.0.zip https://ratatoskr.space/pkg/earendil-pi/v0.87.0.zip
printf '%s %s\n' 'ea967c75372f79e7dde1113f43ae8a971429a5a128895363fae48df6420e4ac8' 'v0.87.0.zip' | sha256sum -c -
windows · zip
$url = "https://ratatoskr.space/pkg/earendil-pi/v0.87.0.zip"
$out = "v0.87.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "ea967c75372f79e7dde1113f43ae8a971429a5a128895363fae48df6420e4ac8") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.87.0.tar.gz https://ratatoskr.space/pkg/earendil-pi/v0.87.0.tar.gz
printf '%s %s\n' '90fd94a2ece8ff25e0f025e4becf5e7e197b407f13bf0583599d7bdd1491311e' 'v0.87.0.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "https://ratatoskr.space/pkg/earendil-pi/v0.87.0.tar.gz"
$out = "v0.87.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "90fd94a2ece8ff25e0f025e4becf5e7e197b407f13bf0583599d7bdd1491311e") { throw "sha256 mismatch" }
download via yggdrasil mesh
unix · zip
curl -fL -o v0.87.0.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/earendil-pi/v0.87.0.zip
printf '%s %s\n' 'ea967c75372f79e7dde1113f43ae8a971429a5a128895363fae48df6420e4ac8' 'v0.87.0.zip' | sha256sum -c -
windows · zip
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/earendil-pi/v0.87.0.zip"
$out = "v0.87.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "ea967c75372f79e7dde1113f43ae8a971429a5a128895363fae48df6420e4ac8") { throw "sha256 mismatch" }
unix · tar.gz
curl -fL -o v0.87.0.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/earendil-pi/v0.87.0.tar.gz
printf '%s %s\n' '90fd94a2ece8ff25e0f025e4becf5e7e197b407f13bf0583599d7bdd1491311e' 'v0.87.0.tar.gz' | sha256sum -c -
windows · tar.gz
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/earendil-pi/v0.87.0.tar.gz"
$out = "v0.87.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "90fd94a2ece8ff25e0f025e4becf5e7e197b407f13bf0583599d7bdd1491311e") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.87.0.zip | zip | 8.6 MiB |
blake3-24 99d6a68e4e191a81b64ae6bcd1aedb7cea560486c7fea9d8
sha256 ea967c75372f79e7dde1113f43ae8a971429a5a128895363fae48df6420e4ac8
sha1 8ead7fb5b09ac6808bb188faafcf75cc64c3a410
|
| v0.87.0.tar.gz | tar.gz | 7.6 MiB |
blake3-24 e6fab2dd51c67f53fa0517ae155e22f13b8dec41b7761d0a
sha256 90fd94a2ece8ff25e0f025e4becf5e7e197b407f13bf0583599d7bdd1491311e
sha1 abd965b41f1ed09704bfcb47bc93d3c93d4ce05b
|
install
bazel
http_archive(
name = "earendil-pi",
urls = ["https://ratatoskr.space/pkg/earendil-pi/v0.87.0.tar.gz"],
integrity = "sha256-kP2Uouzo/yXg8CXkvs9efhl7QH8TvwWDWZ173RSRMR4=",
strip_prefix = "earendil-pi-v0.87.0",
)
zig
.url = "https://ratatoskr.space/pkg/earendil-pi/v0.87.0.tar.gz",
install via yggdrasil mesh
bazel
http_archive(
name = "earendil-pi",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/earendil-pi/v0.87.0.tar.gz"],
integrity = "sha256-kP2Uouzo/yXg8CXkvs9efhl7QH8TvwWDWZ173RSRMR4=",
strip_prefix = "earendil-pi-v0.87.0",
)
zig
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/earendil-pi/v0.87.0.tar.gz",