Commit Graph

6603 Commits

Author SHA1 Message Date
Tianyi Cui
68ccf50a77 refactor(code-runtime): generate shared subprocess runner 2026-08-08 21:27:58 +08:00
Tianyi Cui
ff86795b15 fix(pty): close provider cancellation races 2026-08-08 21:27:58 +08:00
Tianyi Cui
b71dbbe766 fix(runtime): close review lifecycle and bound gaps 2026-08-08 21:27:58 +08:00
Tianyi Cui
674d23118b fix(runtime): close measured portability defects 2026-08-08 21:27:58 +08:00
Tianyi Cui
124fc6a611 fix(runtime): close portable backend boundary gaps 2026-08-08 21:27:58 +08:00
Tianyi Cui
c1d550de58 refactor(runtime): collapse speculative portability layers
Remove the one-consumer bounded-read primitive and shared terminal lifecycle controller, make terminal cleanup one awaited provider operation, and reuse one Code Runtime contract suite. Keep only reproduced cancellation and policy fixes; defer unproven replacement, prompt-attribution, and streaming-frame concerns to scoped markers.
2026-08-08 21:27:58 +08:00
Tianyi Cui
4fecc54998 fix(runtime): close teardown gaps and simplify framing 2026-08-08 21:27:58 +08:00
Tianyi Cui
045e8462ee fix(pty): drain public signals during close 2026-08-08 21:27:58 +08:00
Tianyi Cui
727546ce6d fix(code-runtime): bound every subprocess frame hop 2026-08-08 21:27:58 +08:00
Tianyi Cui
7eedfda961 fix(pty): fence delayed signal prompts 2026-08-08 21:27:57 +08:00
Tianyi Cui
277870dac2 Revert "fix(pty): fence delayed signal prompts"
This reverts commit a78958eeeaf04a3acdf22ef8a26dec370661a51d.
2026-08-08 21:27:57 +08:00
Tianyi Cui
d6b3de6e0d fix(pty): fence delayed signal prompts 2026-08-08 21:27:57 +08:00
Tianyi Cui
be3533fa19 fix(subprocess): clean runtime state after teardown failure 2026-08-08 21:27:57 +08:00
Tianyi Cui
0fec058a48 fix(pty): retain send ownership through cancellation 2026-08-08 21:27:57 +08:00
Tianyi Cui
4d63552d00 fix(lsp): preserve workspace cancellation reason 2026-08-08 21:27:57 +08:00
Tianyi Cui
098f826001 fix(subprocess): honor teardown and PATH semantics 2026-08-08 21:27:57 +08:00
Tianyi Cui
f61a4943bd fix(lsp): preserve POSIX backslash paths 2026-08-08 21:27:57 +08:00
Tianyi Cui
71e0eeac40 fix(code-runtime): contain hostile boundary failures 2026-08-08 21:27:57 +08:00
Tianyi Cui
f84f63ccd7 test(runtime): finish zombie quiescence migration 2026-08-08 21:27:57 +08:00
Tianyi Cui
562cd154a8 docs(lsp): remove resolved URI limitation 2026-08-08 21:27:57 +08:00
Tianyi Cui
ea047cc634 test(subprocess): accept zombie quiescence 2026-08-08 21:27:57 +08:00
Tianyi Cui
06a9224904 fix(subprocess): retain failed terminal cleanup 2026-08-08 21:27:57 +08:00
Tianyi Cui
a95e01d8b0 fix(pty): detach cancellation before close drain 2026-08-08 21:27:57 +08:00
Tianyi Cui
6e5d711099 fix(lsp): cancel executable setup on disposal 2026-08-08 21:27:57 +08:00
Tianyi Cui
f2a3cc450e fix(lsp): retain drive syntax in UNC worlds 2026-08-08 21:27:57 +08:00
Tianyi Cui
3572c65d57 fix(pty): join asynchronous terminal operations 2026-08-08 21:27:57 +08:00
Tianyi Cui
d29c73ddd6 fix(subprocess): treat zombie-only groups as quiescent 2026-08-08 21:27:56 +08:00
Tianyi Cui
ea75333c92 fix(lsp): compare UNC paths case-insensitively 2026-08-08 21:27:56 +08:00
Tianyi Cui
f5f40c7403 fix(pty): discard pre-write readiness evidence 2026-08-08 21:27:56 +08:00
Tianyi Cui
587fff9fe7 fix(runtime): honor platform quiescence semantics 2026-08-08 21:27:56 +08:00
Tianyi Cui
4997fb219e fix(lsp): preserve execution-world URI semantics 2026-08-08 21:27:56 +08:00
Tianyi Cui
3537665806 fix(subprocess): honor Windows environment key casing 2026-08-08 21:27:56 +08:00
Tianyi Cui
03f1c8eb43 fix(subprocess): absolutize relative PATH lookups 2026-08-08 21:27:56 +08:00
Tianyi Cui
a0200376a1 fix(pty): defer the first readiness poll 2026-08-08 21:27:56 +08:00
Tianyi Cui
65264f6c80 refactor(subprocess): share terminal lifecycle 2026-08-08 21:27:56 +08:00
Tianyi Cui
32bce339da fix(runtime): close lifecycle teardown races 2026-08-08 21:27:56 +08:00
Tianyi Cui
c17727d43d test(subprocess): cover terminal release cleanup 2026-08-08 21:27:56 +08:00
Tianyi Cui
e5f3a67363 fix(runtime): publish completion before pipe cleanup 2026-08-08 21:27:56 +08:00
Tianyi Cui
ac81165662 fix(runtime): close async cleanup and framing races 2026-08-08 21:27:56 +08:00
Tianyi Cui
16cac3b5af fix(runtime): close remote cleanup and readiness races 2026-08-08 21:27:56 +08:00
Tianyi Cui
8917ff8ef4 refactor(runtime): compose consumers over fs and subprocess 2026-08-08 21:27:55 +08:00
Tianyi Cui
d21917f4cf refactor(subagent): resolve list tool inputs explicitly 2026-08-08 21:05:58 +08:00
Tianyi Cui
5f755d5717 fix(web): keep Send beside subagent Stop 2026-08-08 21:05:58 +08:00
Hypatia May
ddea7b398e docs: refresh tool catalog after stack merge 2026-08-08 20:02:37 +08:00
Hypatia May
656dbadbad test(subagent): close descendant listing coverage 2026-08-08 20:02:37 +08:00
Hypatia May
5e1ec10d5a fix(subagent): address descendant listing review 2026-08-08 20:02:37 +08:00
Hypatia May
d769d3cbb7 feat(subagent): let ancestors interrupt descendants
interrupt_agent(agent_id) passes the calling agent as the ancestor
authority for ctx.subagents.interrupt(); the service verifies live
registry identity and recorded lineage, so a direct child or deeper
descendant stops with the same generic parameter while send_message keeps
its exact-direct-parent authority.

Discovery: list_agents gains an optional scope. descendants walks the new
SubagentService.listDescendants() — one lineage trace flattened in stable
pre-order across ordinary and one-shot intermediates, each entry carrying
its verified parentId and depth — and every status now comes from the
live Agent registry (running/idle/complete).

Refs #1535
2026-08-08 20:02:37 +08:00
Hypatia May
5793614b86 feat(web): expose continuable subagent interrupt
The composer's single primary action now stops a running continuable
child: Session.cancel() routes a continuable address through
subagent.interrupt (ordinary sessions keep session.cancel; one-shot
addresses stay uncancellable), and InputBar switches the same Send button
to Stop while a continuable child runs. A running parent-offline child
keeps the default composer with disabled input so that Stop stays
reachable; the read-only takeover returns once it stops.

Refs #1535
2026-08-08 20:02:36 +08:00
Hypatia May
336c84baf0 docs(subagent): clarify interrupt edge cases 2026-08-08 20:02:36 +08:00
Hypatia May
66a21a38b1 feat(subagent): add current-turn interrupt RPC
ctx.subagents.interrupt() stops one live continuable child's current turn
via Agent.cancel(cause, { keepInbox: true }) under either a human durable
parent address or an exact live ancestor Agent. Fire-and-return: admission
is synchronous, quiescence is not awaited. Pending inbox work, the
Activation, and published descendants are preserved; only a later waking
send resumes the parked FIFO queue. Absent, one-shot, and disposing
targets are accepted no-ops.

The new Host RPC subagent.interrupt calls only that primitive with user
authority — no catalog, history, persistence, or parent-registry lookup —
so a live child stays stoppable while its parent Agent is offline.

Refs #1535
2026-08-08 20:02:36 +08:00