Conversation
Add missing ToolExecutionEndEvent, ToolExecutionStartEvent, and ToolExecutionUpdateEvent type exports to packages/coding-agent/src/index.ts so they are available to consumers of the package. Fixes earendil-works#6687
Contributor
|
This PR was auto-closed. Only contributors approved with Maintainers review auto-closed issues daily. Issues that do not meet the quality bar in CONTRIBUTING.md will not be reopened or receive a reply. If a maintainer replies See CONTRIBUTING.md. |
tunght13488
added a commit
to tunght13488/pi
that referenced
this pull request
Aug 26, 2026
* upstream/main: (119 commits) fix: persist default to scoped if non-empty feat(coding-agent): expose RPC queue clearing feat(ai): add deepseek-v4-flash-vision-exp docs(coding-agent): update provider links to api fix(ai): omit tool_choice without tools closes earendil-works#8607 fix(coding-agent): append run-time custom messages after the turn's tool results fix(ai): derive OpenRouter reasoning controls (earendil-works#8614) chore: approve contributors from issue earendil-works#8594 chore: approve contributors from issue earendil-works#8574 fix: export ToolExecution*Event types from public API (earendil-works#6847) feat(coding-agent): export image MIME detector (earendil-works#8600) fix(ai): concatenate openai completions reasoning deltas (earendil-works#8605) fix(ai-test): update glm 5.3 price fix(ai): cloudflare gateway type, include workers chore: approve contributors from issue earendil-works#8409 chore: approve contributors from issue earendil-works#8388 feat: show llama presets if autoload enabled (earendil-works#8558) fix(coding-agent): reject truncated compaction summaries closes earendil-works#7048 fix: extract Windows release ZIPs in CI Add [Unreleased] section for next cycle ...
scepion1d
added a commit
to HomeLab-Forge/pi
that referenced
this pull request
Sep 6, 2026
* fix(coding-agent): discard failed extension factory state (earendil-works#8424) * feat(coding-agent): include context in Radius session shares * fix(coding-agent): use Windows-friendly keybinding defaults closes earendil-works#8372 * docs(coding-agent): clarify custom footer usage APIs (earendil-works#8482) Fixes earendil-works#8392 * fix(coding-agent): expose finish reason compatibility override (earendil-works#8487) Closes earendil-works#8460 * feat(coding-agent): update managed installations in place * feat(coding-agent): add optional PowerShell tool (earendil-works#8512) * feat(agent): add durable drive foundations * feat(agent): simplify durable drive ownership * fix(agent): preserve legacy upgrade commit stats * docs: audit unreleased changelogs * Release v0.84.3 * Add [Unreleased] section for next cycle * fix: extract Windows release ZIPs in CI * fix(coding-agent): reject truncated compaction summaries closes earendil-works#7048 * feat: show llama presets if autoload enabled (earendil-works#8558) * fix(coding-agent): support bundled experimental processes * feat(sqlite): databasePath, sessionId for sharding * docs(agent): simplify durable drive ownership * docs(agent): restore direct tool batch procedure * feat(agent): add durable terminal mechanics * feat(agent): add durable generation procedures * feat(agent): add explicit session mutations * fix(agent): make service hydration readiness explicit * fix(agent): make durable assistant framing burst-safe Rename the harness runtime2 directory to runtime. * chore: approve contributors from issue earendil-works#8388 * chore: approve contributors from issue earendil-works#8409 * fix(ai): cloudflare gateway type, include workers Fixes https://github.com/earendil-works/pi/actions/runs/32825925694/job/97733792662?pr=8605 build error * fix(ai-test): update glm 5.3 price * fix(ai): concatenate openai completions reasoning deltas (earendil-works#8605) * feat(coding-agent): export image MIME detector (earendil-works#8600) * fix: export ToolExecution*Event types from public API (earendil-works#6847) Add missing ToolExecutionEndEvent, ToolExecutionStartEvent, and ToolExecutionUpdateEvent type exports to packages/coding-agent/src/index.ts so they are available to consumers of the package. Fixes earendil-works#6687 * chore: approve contributors from issue earendil-works#8574 * chore: approve contributors from issue earendil-works#8594 * fix(ai): derive OpenRouter reasoning controls (earendil-works#8614) Fixes earendil-works#8454 Co-authored-by: Petr Houška <houskape@gmail.com> * fix(coding-agent): append run-time custom messages after the turn's tool results Extension messages sent with triggerTurn: false while the agent was running were pushed into agent state and the session tree immediately, landing between an assistant tool call and its result. Providers that validate message order reject the replayed history. Queue them during the run and append at turn_end, mirroring recordBashResult. closes earendil-works#8537 * fix(ai): omit tool_choice without tools closes earendil-works#8607 * docs(coding-agent): update provider links to api * feat(ai): add deepseek-v4-flash-vision-exp * feat(coding-agent): expose RPC queue clearing closes earendil-works#8432 * Remove outdated docs * feat(coding-agent): add setup-driven facet generations Replace ad hoc service assembly with atomic local and remote facet generations. Gate service proxy access by lifecycle and move the experimental Session worker and TUI onto facets. * feat(agent): separate sessions, branches, and lanes * fix(ai): keep cloudflare ai gateway workers-ai models when models.dev drops them models.dev's cloudflare-ai-gateway catalog no longer lists workers-ai/* entries, which removed every openai-completions model from the generated gateway catalog and narrowed the inferred provider api union. Derive the gateway's workers-ai models from the cloudflare-workers-ai catalog and pin the provider's api generic. Also move the zai glm-5.3 cost assertion, now that models.dev prices it in the zai API catalog. * fix(client): update unix transport test to renamed pi.session-directory service id * fix: persist default to scoped if non-empty * feat(agent): add durable retry and deferred polling * feat(agent): add durable tool execution * feat(agent): simplify durable drive runtime * feat(agent): clarify operation continuation semantics * feat(agent): simplify durable runtime procedures * fix(coding-agent): prevent Windows taskkill spawn crashes closes earendil-works#6596 * fix(coding-agent): remove explicit tool choice from compaction calls Fixes earendil-works#8649\n\nFixes earendil-works#8638 * fix(tui): let drag select text over the editor The editor consumed left mouse presses to position the cursor, which made the alternate screen route the whole gesture to it and never start its screen-level text selection. Handle the synthesized click event instead so press/drag/release stay available for selection and copy. * feat(agent): add structural drive foundation * fix(tui): autocomplete orders nested results (earendil-works#8669) * fix(coding-agent): repair unterminated session files Append a newline after loading a valid session so subsequent entries cannot fuse with an unterminated tail.\n\nFixes earendil-works#8345 * fix(ai): serialize thinking signature once (earendil-works#8671) * fix(tui): chunk large main-screen renders closes earendil-works#8028 * docs(agent): redesign WP05 around lane inbox, result records, and neutral leaves Withdraw the standalone-compaction promotion design. Add redesign milestones R1 (lane-owned tagged inbox with mode-respecting drains and one-commit boundaries), R2 (neutral OperationOutcome plus immutable pi.result records, drive(id) total for settled ids), and R3 (22 to 14 family-neutral leaves with a closed ResultBoundary datum). Update M7/M8 for drain-and-return abort and continuation as a second ordinary run via the public empty-prompt accept, add M9 documentation reconciliation, and gate M10 before final guard removal. Incorporates the independent review consensus (B1-B7, O1-O8). * fix(coding-agent): preserve partial Bash output when toggling thinking closes earendil-works#8611 * fix(tui): make alt screen not segment on - and / (earendil-works#8676) * fix(tui): make alt screen not segment on - and / * cleanup * chore: changelog entries Forgot to add the changelog entries :P * feat(agent): simplify durable operation graph * docs(settings): default model and thinking * feat(agent): fuse structural boundary routing * feat(agent): make run boundaries atomic * feat(tui): add terminal capability overrides closes earendil-works#8665 * docs(agent): resolve M7 cancellation decisions * feat(agent): make durable drive total * feat(coding-agent): add mini, a three-process coding agent on the durable harness An experimental client for the new AgentHarness, built to find out what an RPC-shaped presentation actually needs from it. Three hosts: presentations (TUI) connect to a server over a unix socket, the server spawns one worker process per session over stdio pipes and routes between them. A peer provides named services and forwards names it does not provide to its next hop, so a TUI reaches server-provided and worker-provided services through one connection, and a worker reaches server services the same way. The worker owns every live object: storage, harness, lane, model runtime. A presentation holds a replicated LaneSnapshot and nothing else. Each presentation opens its own lane.watch() in the worker and applies events with the harness's reduceLaneSnapshot, so no client re-implements snapshot/stream alignment. The TUI reuses interactive-mode components and holds no live objects. * feat(coding-agent): address mini lane events to one presentation Each presentation opens its own harness watch, and the server broadcast every worker event to every attached presentation, so with N presentations each event crossed N^2 times and each client discarded the copies that were not its own. The event frame now carries an optional destination. A presentation mints an id and passes it to both sessions.attach and lane.watch, so the server learns it at attach and the worker learns it at watch. The worker addresses that subscription's events; the server routes them to exactly one presentation without parsing a payload. Shared events, such as models state, still broadcast. The client keeps its subscription id check: after a rebase the superseded subscription is still open until unwatch lands, and its events carry the same destination. * feat(agent): expose durable lane operations * fix(agent): finalize durable lane replication * feat(agent,ai): add narrow subpath exports so clients skip the barrel A barrel forces Node to evaluate its whole graph: importing reduceLaneSnapshot (1 file, 6 KB) through pi-agent-core's index evaluated 106 files, and mini's server loaded 112 files to enumerate JSONL headers. Types are free, so this only ever affected value imports. pi-ai gains ./utils/* alongside the existing ./providers/* and ./api/* wildcards. pi-agent-core gains ./harness/context, ./harness/env/nodejs, ./harness/runtime/reducer and ./harness/session, and ./session/testing becomes ./harness/session/testing so every export mirrors its source path. The barrel and ./node keep their batteries-included semantics. The session layer takes uuidv7 from @earendil-works/pi-ai/utils/uuid rather than the pi-ai barrel, which is what let ./harness/session drop from 42 files to 19. Two imports there were written `import { type Usage } from` - not a type-only statement, so it emitted a runtime import of the barrel. scripts/check-entry-graphs.mjs walks each declared entry's value-import graph and enforces per-entry budgets and forbidden paths, so a stray `export *` cannot silently undo this. It caught the two `import { type ... }` regressions above. Measured with mini: server 112 files and 98 MB to 28 files and 69 MB, presentation 204 files and 125 MB to 99 files and 110 MB. The worker still loads the provider graph, correctly. * docs(agent): audit post-WP05 roadmap * feat(coding-agent): split tool renderers and theme validation from their implementations A presentation draws tool calls and colours; it executes nothing and validates nothing. Both cost it typebox anyway, which is 17 MB of module graph: 682 ESM modules whose narrowest entry re-exports ~300 of them, so there is no cherry-picking and both doors had to close before any process stopped paying. ToolExecutionComponent no longer looks up createAllToolDefinitions by tool name; callers pass what to render, and its parameter type now says so. Each built-in tool's presentation moves to core/tools/renderers/<tool>.ts, leaving the schema and execute path behind; bash and powershell share createShellRenderers(prompt). Tool definitions keep their exact public shape and spread the renderers in. withBuiltInRenderers() preserves the old fallback, where an extension override without renderers still draws like the built-in - that behaviour used to live inside the component, and two tests caught its absence. theme.ts keeps palettes; the typebox schema and its error formatting move to theme-json.ts, installed through setThemeJsonValidator. Built-in themes were never validated, so only processes that load user-authored themes need it. pi installs it during startup, before the first theme loads, and the invalid-theme message is unchanged. Measured with mini, running built output: the presentation drops from 87 MB and 99 files to 72 MB and 88 files, with typebox absent from its graph, while still rendering tool output through the real built-in renderers. Also: packages/server's vitest aliases were prefix matches, so a subpath import resolved onto index.ts/utils/uuid and failed five suites; they are exact now with explicit subpath rules. And mini-test.sh spawns mini the way pi-test.sh spawns pi, with --fresh/--stop for the detached session server. * docs(agent): condense harness specification * docs(agent): clarify harness alignment corrections * feat(coding-agent): replace facet attributes with services Make facets non-generic and resolve host-local dependencies through service bindings. Rename local assembly to createFacetHost and consolidate TUI host mechanics behind one service. * feat(coding-agent): derive facet service routing * feat(coding-agent): expose experimental TUI service Keep attachment routing in the TUI host and simplify loaded facet generation ownership. * feat(coding-agent): preserve handles across facet reloads * feat(agent): remove remote service events * feat(coding-agent): wire Chat into experimental TUI * fix(agent): align facet service contracts and errors * docs(agent): restore subtle harness contracts * feat(extensions): ui prompt events (earendil-works#8355) * feat(extensions): ui prompt events * fix: handlers should not delay the prompt * fix(coding-agent): expose https-proxy-agent named export (earendil-works#8723) - closes earendil-works#8610 * feat(coding-agent): run experimental client as direct chat Replace raw Harness and Chat service exposure with AgentController and replicated lane state. Start directly in new or resumed sessions and persist model selection. * fix(coding-agent): remove unnecessary local service tokens * feat(tui): allow disable copy on fullscreen, ctrl + x copies selection (earendil-works#8731) * feat(coding-agent): share fullscreen TUI with experimental client Reuse the stable renderer, viewport layout, theme detection, and terminal appearance updates. Keep successful operation status derived from replicated lane state. * feat(coding-agent): connect experimental sessions through Radius * fix(coding-agent): allow exit while Radius reconnects * feat(agent,coding-agent): unify process-local service lifecycle * feat(coding-agent): add facet-based slash commands * fix(ai): remove retired Fireworks turbo router test * fix(coding-agent): restore client compatibility entrypoint * fix(coding-agent): compact before post-tool model requests (earendil-works#8782) Run next-turn preparation only when the agent loop continues, allowing threshold compaction before the next provider request. Restore interactive progress when the same run resumes. Closes earendil-works#6879 Important to notice: this changes when prepareNextTurn & prepareNextTurnWithContext are invoked: the now run only when a next turn actually happens, and after shouldStopAfterTurn. * docs(coding-agent): remove issue-specific regression test placement rule (earendil-works#8775) * fix(ai): merge indexed Mistral tool call chunks fixes earendil-works#8387 * fix(coding-agent): reconnect after abnormal Radius closure * docs: audit unreleased changelogs * fix(ai): refresh generated image model catalog * Release v0.84.4 * Add [Unreleased] section for next cycle * feat: add Chord runtime foundation * feat: move facet services into Chord Move service, replicated-state, facet host, and loader ownership into the standalone Chord package. Migrate consumers and leave runtime JSON enforcement to serializers. * feat: simplify Chord service instance API Deliver observed services as ordinary typed proxies, expose optional instance-key lookup, and rename the deferred multi-instance capability to ServiceSpawner. * feat: consolidate Chord public API * feat: isolate Chord context API * feat: simplify Chord service APIs * feat: simplify Chord service slots * feat: clarify Chord remote service APIs * fix: harden Chord service lifecycle semantics * feat: add bundled facet distribution and reload Bundle content-addressed Chord facet entries, distribute server-selected presentation artifacts during the handshake, and reload Session and TUI generations through /reload. * feat: add package-based facet plugins Bundle declarative plugin packages with Chord and load fresh generations. Scope client selections to persisted Session and TUI branches, and replace stale local server generations after protocol changes. * feat: simplify plugin facet lifecycle Remove handshake-based facet delivery and host only the selected Session presentation branch. Simplify worker selection, startup options, package profiles, and serialized builds. * feat(coding-agent): simplify experimental services and CLI * fix(coding-agent): remove obsolete plugin app fixture * feat(coding-agent): remove legacy session RPC facade Route discovery, management, and prompting through Chord services. Retain low-level lane watches and reattach Radius clients through SessionManagement. * feat: make Chord facet generations collectible * docs(agent): align SQLite ownership with session workers * feat(coding-agent): tighten experimental service boundaries * feat(coding-agent): reduce experimental test duplication * docs(agent): add mobile design handoff * feat(chord): add JSON delta tracking * feat(chord): generate deltas at flush * docs(chord): introduce delta operations upfront * docs(chord): keep delta guide user-focused * docs(chord): explain delta stream encoding * docs(agent): add streaming fork work package * fix(agent): align SQLite ownership with session workers * docs(chord): clarify delta ownership and array costs * docs(agent): align assistant output handoff with Chord * delta updates, on behalf on mario * feat(coding-agent): replace lane RPC with Chord service * feat: add delta-backed replicated state Track mutable provider state and publish immutable operation batches. Keep path codecs isolated per client subscription and state member. * fix(coding-agent): allow Chord delta bundle import * fix: remove dead experimental protocol code * feat: move service wire semantics into Chord Keep protocol payloads transport-opaque and validate service calls, state snapshots, updates, and errors at Chord boundaries. Ensure successful OpenAI Responses messages remain strict JSON so terminal Transcript updates reach clients. * docs(agent): close delta append API decision * feat(tui): add large transcript render benchmark * feat: consolidate remote service adapters * feat: remove experimental compatibility shims * feat(chord): keep services available during facet reloads * fix(coding-agent): settle active turn before in-memory fork (earendil-works#8937) Fixes earendil-works#8724 Co-authored-by: yaogangqiang <yaogangqiang@kanyun.com> * fix(agent): stop prepared tools after preflight abort (earendil-works#8936) fixes earendil-works#8935 Co-authored-by: yaogangqiang <yaogangqiang@kanyun.com> * feat(coding-agent): adjust TUI selections in thinking-mode, models and scoped models (earendil-works#8900) * fix(coding-agent): keep selector status markers visible - place status markers before labels - strike unavailable scoped models and update tests * fix(coding-agent): align scoped model toggle behavior - show checks for the all-enabled state - toggle individual models consistently and add coverage * docs(coding-agent): add changelog entry * fix(coding-agent): keep trust marker visible while browsing - move the saved marker before the trust option - update tests and changelog * fix(coding-agent): mark per-model thinking overrides - add the leading level marker - update tests and changelog * fix(tui): detect Zed terminal capabilities (earendil-works#8828) * fix(coding-agent): use ctx.cwd for cwd-sensitive tools when available (earendil-works#8627) When tools are registered by an extension (e.g. Kimchi) the execute callback receives an ExtensionContext with the real session cwd. Use ctx.cwd || cwd so tools resolve paths against the current session cwd instead of the cwd captured at tool creation time. Applies to read, write, edit, grep, find, ls, bash, and powershell. Co-authored-by: Kimchi <noreply@kimchi.dev> * fix(ai): match subdomains and root domains in NO_PROXY (earendil-works#8737) * fix(coding-agent): keep theme markers visible (earendil-works#8950) - follow up of missed commits for feat(coding-agent): adjust TUI selections in thinking-mode, models and scoped models earendil-works#8900 * fix(coding-agent): keep fixed theme marker visible - distinguish the saved theme from the preview cursor - align the automatic option and update coverage * fix(coding-agent): keep automatic theme marker visible - mark configured light and dark themes during preview - reuse shared theme formatting and update coverage * feat(agent): require explicit named branches for session forks Require fork scope and source branch selection, preserve the branch name in the destination, and cover named-branch behavior across backends. * chore: approve contributors from issue earendil-works#8885 * fix(tui): wrap SIGWINCH self-signal so restricted seccomp policies do not crash startup (earendil-works#8898) * fix(ai): add supportsMaxOutputTokens compat flag for openai-responses (earendil-works#8941) Some OpenAI Responses-compatible gateways (e.g. Codex-protocol proxies) reject the max_output_tokens parameter with a 400 BadRequest. The openai-responses API always sent it when maxTokens was set, with no way to opt out. Add a supportsMaxOutputTokens compat flag (default: true) to OpenAIResponsesCompat. When false, buildParams omits max_output_tokens from the request body. Also register the flag in the coding-agent model-config schema so custom providers can set it. * fix(agent): validate fork entries against named branch ancestry Reject off-branch and unknown fork points, handle null tips and before-root placement, and make SQLite validate from the named branch tip. * fix(agent): require configured lanes for branch forks Reject data-only source branches, preserve tree-scope support for them, and update fork fixtures to provide complete lane configuration and state. * feat(agent): centralize scalar fork namespace policy Add a closed fork classifier, copy application scalars for tree forks, exclude them from branch forks, and reject surviving unknown reserved state. * update wp08 doc * fix(chord): make post-cutover reload failures terminal * update harness.md to fork changes defined in wp08 * feat: add deslop prompt * fix: resolve workspace source dependencies in tests * fix(coding-agent): recover mini operations and forward aborts * fix(agent): bound shell execution output * docs(agent): add scoped storage implementation handoff * fix(agent): finalize bounded shell output integration * fix(coding-agent): tunnel proxied HTTP requests closes earendil-works#8134 * fix(ai): bump claude code user agent version * Handoff for tool settlemenet * chore: approve contributors from issue earendil-works#8971 * fix(agent): surface proxy stream EOF without terminal event as an error (earendil-works#8997) streamProxy dropped a final SSE event that was not newline-terminated (the residual line buffer was never flushed after the read loop) and called stream.end() without a result when no done/error event had been seen, leaving EventStream.result() pending forever. Consumers like agentLoop awaiting response.result() hung indefinitely when the server closed the connection mid-response. Flush the decoder and process the residual buffer after EOF, and push a synthesized error event when the stream ended without a terminal event. fixes earendil-works#8996 * feat(ai): add vllmPriority compat flag for vLLM scheduler priority (earendil-works#9004) OpenAI-compatible providers can now send vLLM's top-level 'priority' request field (lower value = earlier handling, server default 0), which matters when vLLM runs with --scheduling-policy priority and a box serves both interactive and background/batch work: setting vllmPriority on a background model defers its long prefills behind interactive sessions. - types.ts: OpenAICompletionsCompat.vllmPriority?: number (off by default) - openai-completions.ts: resolved through getCompat, injected in buildParams - model-config.ts: models.json schema accepts compat.vllmPriority - test: priority sent when set, omitted otherwise Co-authored-by: Daniel-Clegg <daniel.clegg@civica.co.uk> * fix(ai): route GitHub Copilot Fable 5 through Anthropic Messages closes earendil-works#8961 * fix(ai): use completions API for all Fireworks GLM models Route every GLM model through the OpenAI-compatible completions API. Closes earendil-works#8978 * docs(coding-agent): clarify session-scoped model/thinking-level changes (earendil-works#9009) - fixes earendil-works#8976 * fix: remove misleading write byte counts The write tools reported UTF-16 code units as bytes. Remove the count from success messages instead of scanning content again. Closes earendil-works#8979 * fix(coding-agent): remove duplicate auto retry event type fixes earendil-works#8783 * fix(agent): retain settled tools until placement * fix: resolve plugin and conformance tests from source * feat(ai): preserve Anthropic per-turn thinking effort Route eligible OpenRouter Claude models through the native Messages API and surface provider thinking-drop diagnostics. * fix(coding-agent): cancel compaction on session abort Include compaction and branch summarization in session idle tracking so abort waits for cancellation to settle.\n\nfixes earendil-works#8920 * fix(coding-agent): update interactive mode test fixture * fix(ai): remove unnecessary Chord dependency * chore: approve contributors from issue earendil-works#9033 * feat(tui): render relational algebra join symbols & fix(coding-agent): type error in test (earendil-works#9050) * feat(tui): render relational algebra join symbols * fix(coding-agent): update interactive mode test fixture * fix(coding-agent): preserve compaction boundary when forking (earendil-works#8990) Fixes earendil-works#8989 * fix(coding-agent): avoid overwriting imported sessions (earendil-works#8985) * feat(coding-agent): ingest external entries in in-memory sessions (earendil-works#8980) * feat(coding-agent): ingest external entries in in-memory sessions SessionManager.inMemory() takes the entries to start from, so a session held outside the filesystem can be resumed as it was stored. Replaying through appendMessage/appendCompaction cannot do this: ids are minted fresh, so every stored firstKeptEntryId, targetId and fromId has to be remapped, timestamps are rewritten, and parentId always comes from the current leaf, so a branched tree needs the original branch() choreography reproduced call by call. The entry-adoption half of _setSessionFile becomes _loadEntries, which the constructor also uses when there are entries but no file. Entries carrying a session header keep it; without one, the header comes from the options and the entries become its body. * fix(coding-agent): carry the stored version through restored entries inMemory() took SessionEntry[], which excludes SessionHeader, so an external store could not pass the header it saved and the header branch of _loadEntries was unreachable through the public API. A restore therefore always synthesised a current-version header, and the migration that ran next read that header and skipped: a v2 session kept its hookMessage roles forever. Widening to FileEntry[] lets the stored header through, version included. Migration moves inside the header branch, where a version exists to compare against; without a header the entries are adopted as current-version, which is the only thing they can mean. * fix(coding-agent): resolve fd/rg release versions without the GitHub API (earendil-works#8708) The fd/ripgrep auto-download resolved the latest version through api.github.com, which shares the anonymous API quota (60 requests/hour per IP). Behind shared egress IPs (corporate proxies, CI runners, NAT) that quota is permanently exhausted by unrelated traffic, so the download failed with 'GitHub API error: 403' on every launch while the actual release download endpoint would have worked fine. Resolve the version from the /releases/latest web redirect instead: it carries the tag in the Location header, is not subject to the API quota, and lives on the same origin as the binary download itself. The redirect body is discarded so the connection can be reused, and the pinned fd version on darwin/x64 now skips the lookup entirely. Also improve download failure diagnostics: status messages include the error cause chain so transport errors surface their actionable detail instead of a bare 'fetch failed', and HTTP download errors include the failing URL. Fixes earendil-works#8594 Co-authored-by: Terminator666666 <Terminator666666@users.noreply.github.com> * fix(coding-agent): scan past non-EXIF APP1 segments (earendil-works#8616) * fix(coding-agent): isolate concurrent session shares (earendil-works#8613) * fix(coding-agent): keep skills available with bash-only tools (earendil-works#8552) * fix(ai): keep Baseten GLM-5.2 text-only (earendil-works#8293) * Replace the AI Gateway binding shim with a plain binding fetch (earendil-works#8287) createGatewayBindingFetch (0.84.2) translated requests from a gateway HTTPS prefix into the AI binding's universal endpoint, building the [{provider, endpoint, headers, query}] envelope by splicing the request body into a JSON string. The gateway now serves its provider-native passthrough over the binding at /ai-gateway/gateways/{gateway}/{provider}/..., the HTTPS path minus the account id, so a model can simply name that route as its baseUrl and there is nothing left to translate. * fix(ai): process unterminated Codex SSE terminal events Flush the SSE decoder at EOF and treat the residual buffer as a complete frame. fixes earendil-works#9047 * fix: repair Baseten and coding-agent test checks Drop the misleading Baseten default-model test and remove a duplicate coding-agent mock declaration rejected by Biome. * fix(tui): remove coding-agent config reads from pi-tui Fixes earendil-works#8698 * docs(tui): clarify standalone renderer configuration Follow-up to c505f4c. * fix(ai): add Qwen3.8 Flash to individual token plan Derive Token Plan reasoning effort levels directly from models.dev metadata, retaining fallbacks for GLM-5 and GLM-5.1. fixes earendil-works#9021 * fix(ai): restore stream compatibility * fix(ai): preserve provider thinking level in frames * feat(tui): search improvements (earendil-works#8800) * fix(coding-agent): raise branch summary output cap closes earendil-works#8845 * feat(tui): prettier Working... spinner (earendil-works#8799) * feat(tui): add clickable jump-to-end indicator to fullscreen transcript Adds TuiAltScreenOptions.scrollToEndIndicator, composited onto the last row of the follow-end primary scroll view while it is scrolled up. A left press on the label resumes end-following. Minimal rebuild of earendil-works#9080. * feat(tui): alt mode scrollbar but prettier (earendil-works#8801) * fix(agent): map signal-killed processes to non-zero exit codes (earendil-works#8994) waitForChildProcess resolved null for the exit code when a child was killed by a signal (e.g. OOM killer), and exec mapped it with code ?? 0, so the bash tool treated killed commands as successful. Track the termination signal and fall back to the shell convention of 128 + signal number (137 for SIGKILL) when no exit code is available. fixes earendil-works#8992 closes earendil-works#8882 * fix(coding-agent): download statically linked musl builds of fd and ripgrep on Linux (earendil-works#9070) * fix(ai): remove Grok Build 0.1 from built-in xAI model catalog (earendil-works#9093) Add grok-build-0.1 to XAI_BUILTIN_EXCLUDED_MODEL_IDS so the generated xAI catalog only lists grok-4.3, grok-4.5 and grok-4.6. Update the exclusion test and drop the thinking-level assertion for the removed model. Co-authored-by: Jaaneek <Jaaneek@users.noreply.github.com> * fix(tui): make fullscreen transcript search scale linearly * fix(ai): keep Copilot tests aligned with current model catalog Derive catalog-sensitive test IDs from generated models and update tool-call normalization coverage to GPT-5.5. * fix(coding-agent): use current Copilot model in registry test * docs: audit unreleased changelogs * Release v0.85.0 * Add [Unreleased] section for next cycle * docs(coding-agent): document running pi in Docker Sandboxes (earendil-works#9077) * fix(coding-agent): selector save keybindings (earendil-works#9149) - fixes earendil-works#8797 * feat(ai): add GPT-6 Astra support * fix(tui): keep list selection unchanged on mouse hover * fix(coding-agent): keep remote harness dependencies development-only Separate stable and development entrypoints, exclude remote harness code from distributions, and verify isolated consumer installs before release. Fixes earendil-works#9132. * feat(tui): accelerate Alt-modified wheel scrolling (earendil-works#9166) * docs: audit changelogs for v0.85.1 * fix(coding-agent): assert source-only experimental package exports * fix(coding-agent): make footer debounce tests deterministic * docs(tui): document Alt-wheel scrolling in unreleased changelogs * feat(ai): refresh generated image model catalog * Release v0.85.1 * Add [Unreleased] section for next cycle * feat(tui): Simplify clipboard handling (earendil-works#9163) Replace the external clipboard dependency with small macOS, Windows, and X11 helpers and integrate them into coding-agent. Run native clipboard operations on worker threads and make command fallbacks asynchronous. Preserve incremental X11 transfers, legacy text encodings, native image formats, and existing Wayland and platform tools. Include native prebuilds with ARM64 page alignment, packaging updates, and regression coverage. * feat(coding-agent): prefer strict sampling for built-in tools by default * fix(coding-agent): select Radius models after catalog discovery * ci: stop gating on shellcheck style in upstream's workflows The fork refresh pulled upstream's newer build-binaries.yml, which trips SC2016/SC2046/SC2155 in the org's actionlint gate. The file is byte-identical to upstream and we do not edit it — patching one would conflict on every refresh. These three codes are advisory rather than correctness, so they no longer fail the gate for workflow scripts. Real shellcheck errors still do. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: yaogangqiang <acmerfight@gmail.com> Co-authored-by: Armin Ronacher <armin.ronacher@active-4.com> Co-authored-by: Petr Houška <houskape@gmail.com> Co-authored-by: David Brailovsky <davidbrai@gmail.com> Co-authored-by: Mario Zechner <badlogicgames@gmail.com> Co-authored-by: Vegard Stikbakke <vegard.stikbakke@gmail.com> Co-authored-by: Cristina Poncela Cubeiro <140309543+cristinaponcela@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Alexey Zaytsev <alexey.zaytsev@gmail.com> Co-authored-by: PiedPiper911 <32931126+PiedPiper911@users.noreply.github.com> Co-authored-by: Ramiz Wachtler <ramiz@earendil.com> Co-authored-by: yaogangqiang <yaogangqiang@kanyun.com> Co-authored-by: Sviatoslav Abakumov <dust.harvesting@gmail.com> Co-authored-by: Vytautas <vmizgiris@hotmail.com> Co-authored-by: Kimchi <noreply@kimchi.dev> Co-authored-by: Nefelibata <124799179+MeiSiristhebest@users.noreply.github.com> Co-authored-by: Bartłomiej Kida <bartlomiej@kida.info> Co-authored-by: scturtle <scturtle@gmail.com> Co-authored-by: Qiaochu Hu <110hqc@gmail.com> Co-authored-by: AppleDannyClegg <117488935+AppleDannyClegg@users.noreply.github.com> Co-authored-by: Daniel-Clegg <daniel.clegg@civica.co.uk> Co-authored-by: xu0o0 <hq.xu0o0@gmail.com> Co-authored-by: wutongyuonce <147830929+wutongyuonce@users.noreply.github.com> Co-authored-by: Julien Barbay <julien.barbay@gmail.com> Co-authored-by: Terminator666666 <104662484+Terminator666666@users.noreply.github.com> Co-authored-by: Terminator666666 <Terminator666666@users.noreply.github.com> Co-authored-by: Panoplos <makoto@genbalabs.com> Co-authored-by: Maximo Guk <62088388+Maximo-Guk@users.noreply.github.com> Co-authored-by: Anton Geraschenko <geraschenko@gmail.com> Co-authored-by: Stickman Charles <charlesisworkinghard@gmail.com> Co-authored-by: Milosz Jankiewicz <25470423+Jaaneek@users.noreply.github.com> Co-authored-by: Jaaneek <Jaaneek@users.noreply.github.com> Co-authored-by: Manuel de la Peña <social.mdelapenya@gmail.com> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
jinhuang712
pushed a commit
to jinhuang712/pi
that referenced
this pull request
Sep 11, 2026
…#6847) Add missing ToolExecutionEndEvent, ToolExecutionStartEvent, and ToolExecutionUpdateEvent type exports to packages/coding-agent/src/index.ts so they are available to consumers of the package. Fixes earendil-works#6687
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds the missing
ToolExecution*Eventtype exports to the public API of@earendil-works/pi-coding-agent, making them importable by extension developers and consumers of the package.Problem
Unlike other event types such as
SessionStartEvent,ToolCallEvent, andToolResultEvent, theToolExecution*Eventtypes were not re-exported frompackages/coding-agent/src/index.ts. This meant they were absent from the generateddist/index.d.ts, preventing users from importing them:These types are already defined and exported from the internal
./core/extensions/index.tsmodule but were simply overlooked when the public barrel export was composed.Fix
Added the three missing type exports to the
export type { ... } from "./core/extensions/index.ts"block inpackages/coding-agent/src/index.ts, in alphabetical order consistent with the existing style:ToolExecutionEndEventToolExecutionStartEventToolExecutionUpdateEventFiles Changed
packages/coding-agent/src/index.ts— AddedToolExecutionEndEvent,ToolExecutionStartEvent, andToolExecutionUpdateEventto the extension system type re-exports.Fixes #6687