6418 Commits
Author SHA1 Message Date
Armin Ronacher 984846b785 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.
2026-08-31 00:13:43 +02:00
Mario Zechner 7731f1cfe2 fix(coding-agent): remove obsolete plugin app fixture 2026-08-30 23:36:39 +02:00
Armin Ronacher d3697e65ca feat(coding-agent): simplify experimental services and CLI 2026-08-30 22:51:00 +02:00
Armin Ronacher 5245aba7c8 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.
2026-08-30 22:36:30 +02:00
Armin Ronacher 429f4e756c 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.
2026-08-30 22:05:12 +02:00
Armin Ronacher 0252dff886 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.
2026-08-30 12:52:58 +02:00
Armin Ronacher 45d0174eed fix: harden Chord service lifecycle semantics 2026-08-30 01:00:26 +02:00
Armin Ronacher 024439d151 feat: clarify Chord remote service APIs 2026-08-29 21:43:01 +02:00
Armin Ronacher b1e9b9ea8f feat: simplify Chord service slots 2026-08-29 21:08:04 +02:00
Armin Ronacher 1bf0de2144 feat: simplify Chord service APIs 2026-08-29 20:31:33 +02:00
Armin Ronacher e6dc574d1b feat: isolate Chord context API 2026-08-29 20:01:32 +02:00
Armin Ronacher 6ec57e6e5f feat: consolidate Chord public API 2026-08-29 18:56:26 +02:00
Armin Ronacher 4151e5754c 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.
2026-08-29 18:24:18 +02:00
Armin Ronacher 34dc9d055a 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.
2026-08-29 14:55:51 +02:00
Armin Ronacher 28b49a6b3b feat: add Chord runtime foundation 2026-08-29 14:54:19 +02:00
David Brailovsky 58ea6c0ba5 Merge remote-tracking branch 'origin/main' into dev 2026-08-29 08:21:44 +00:00
Armin Ronacher 853a80d26c Add [Unreleased] section for next cycle 2026-08-28 23:56:06 +02:00
Armin Ronacher b79e4cc834 Release v0.84.4 v0.84.4 2026-08-28 23:56:03 +02:00
Armin Ronacher 5ce4afbd95 fix(ai): refresh generated image model catalog 2026-08-28 23:52:49 +02:00
Armin Ronacher bba6be972e docs: audit unreleased changelogs 2026-08-28 23:51:36 +02:00
Armin Ronacher 35c49350fd fix(coding-agent): reconnect after abnormal Radius closure 2026-08-28 22:22:10 +02:00
David Brailovsky 6c87d9a026 fix(ai): merge indexed Mistral tool call chunks
fixes #8387
2026-08-28 16:49:44 +02:00
David Brailovsky e54d45d119 docs(coding-agent): remove issue-specific regression test placement rule (#8775) 2026-08-28 16:39:28 +02:00
David Brailovsky 56700d42ed fix(coding-agent): compact before post-tool model requests (#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 #6879

Important to notice:
this changes when prepareNextTurn & prepareNextTurnWithContext are invoked:
the now run only when a next turn actually happens, and after shouldStopAfterTurn.
2026-08-28 13:40:59 +02:00
Cristina Poncela Cubeiro 35741a456d fix(coding-agent): restore client compatibility entrypoint 2026-08-28 13:31:05 +02:00
Cristina Poncela Cubeiro 758a0ee9b7 Merge branch 'main' into dev
# Conflicts:
#	packages/agent/CHANGELOG.md
#	packages/ai/scripts/generate-models.ts
#	packages/ai/src/providers/cloudflare-ai-gateway.ts
#	packages/ai/test/zai-coding-plan-models.test.ts
#	packages/coding-agent/src/modes/interactive/interactive-mode.ts
#	packages/tui/src/tui-alt-screen.ts
2026-08-28 13:19:43 +02:00
David Brailovsky 56f3f33a9a fix(ai): remove retired Fireworks turbo router test 2026-08-28 10:39:45 +02:00
Armin Ronacher fcbb0b3405 feat(coding-agent): add facet-based slash commands 2026-08-28 10:35:21 +02:00
Armin Ronacher d4ce5d5a22 feat(agent,coding-agent): unify process-local service lifecycle 2026-08-28 10:08:19 +02:00
Armin Ronacher f55da4a9df fix(coding-agent): allow exit while Radius reconnects 2026-08-28 09:38:19 +02:00
Armin Ronacher 1d0d110ab4 feat(coding-agent): connect experimental sessions through Radius 2026-08-28 02:09:53 +02:00
Armin Ronacher b6c8797459 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.
2026-08-27 19:09:26 +02:00
Cristina Poncela Cubeiro 4e49492999 feat(tui): allow disable copy on fullscreen, ctrl + x copies selection (#8731) 2026-08-27 18:07:54 +02:00
Armin Ronacher ecd31642d7 fix(coding-agent): remove unnecessary local service tokens 2026-08-27 17:19:51 +02:00
Armin Ronacher 4bd9438e5d 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.
2026-08-27 17:19:51 +02:00
Ramiz Wachtler 1defa151e0 fix(coding-agent): expose https-proxy-agent named export (#8723)
- closes #8610
2026-08-27 15:51:29 +02:00
Cristina Poncela Cubeiro ccfe79ed23 feat(extensions): ui prompt events (#8355)
* feat(extensions): ui prompt events

* fix: handlers should not delay the prompt
2026-08-27 11:28:05 +02:00
Mario Zechner 35fb116a6a docs(agent): restore subtle harness contracts 2026-08-27 10:54:40 +02:00
Armin Ronacher 6441fa68b5 fix(agent): align facet service contracts and errors 2026-08-27 10:20:33 +02:00
Armin Ronacher 8288bc3543 feat(coding-agent): wire Chat into experimental TUI 2026-08-27 10:20:09 +02:00
Armin Ronacher a17ead3292 feat(agent): remove remote service events 2026-08-27 10:19:02 +02:00
Armin Ronacher 6f0ea81e8b feat(coding-agent): preserve handles across facet reloads 2026-08-27 10:19:02 +02:00
Armin Ronacher 75223072b8 feat(coding-agent): expose experimental TUI service
Keep attachment routing in the TUI host and simplify loaded facet generation ownership.
2026-08-27 10:19:02 +02:00
Armin Ronacher e44ecea8fb feat(coding-agent): derive facet service routing 2026-08-27 10:19:02 +02:00
Armin Ronacher 97f7472f4e 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.
2026-08-27 10:19:02 +02:00
Mario Zechner f0bfae2a96 docs(agent): clarify harness alignment corrections 2026-08-27 00:30:54 +02:00
Mario Zechner 2d675d069a docs(agent): condense harness specification 2026-08-27 00:22:46 +02:00
Mario Zechner eb3e9feed1 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.
2026-08-26 23:08:57 +02:00
Mario Zechner 5976a2f8b9 docs(agent): audit post-WP05 roadmap 2026-08-26 22:41:05 +02:00
Mario Zechner 5507d76ee8 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.
2026-08-26 22:02:31 +02:00