feat(agent): separate sessions, branches, and lanes

This commit is contained in:
Mario Zechner 2026-08-25 16:35:13 +02:00
parent cbaec01048
commit 423e20cb78
82 changed files with 3933 additions and 4299 deletions

View file

@ -4,7 +4,7 @@
## Goal
`Session`, `SessionTree`, `AgentLane`, and `AgentHarness` receive invocation-scoped control data explicitly through a required trailing `Context` parameter. The same receiver may serve concurrent local callers or RPC clients, so it cannot retain a mutable or default caller context.
`Session`, `Branch`, `AgentLane`, and `AgentHarness` receive invocation-scoped control data explicitly through a required trailing `Context` parameter. The same receiver may serve concurrent local callers or RPC clients, so it cannot retain a mutable or default caller context.
The invocation context must solve two related problems without `AsyncLocalStorage`:
@ -61,7 +61,7 @@ Shared receivers retain identity and durable/process state, not invocation conte
AgentHarness receiver ── no caller context
AgentLane receiver ── no caller context
Session receiver ── no caller context
SessionTree receiver ── no caller context
Branch receiver ── no caller context
```
Every invocation supplies its own context. This prevents concurrent callers from overwriting each other's telemetry parent or cancellation signal.
@ -247,7 +247,7 @@ Current tests cover immutable typed-value layering and shadowing, distinct empty
## Resolved migration decisions
- Receiver methods use one required trailing `Context`.
- Shared harness, lane, session, and tree receivers retain no default invocation context.
- Shared Harness, AgentLane, Session, and Branch receivers retain no default invocation context.
- `Context`, `AbortSignal`, and `TelemetryContext` objects are never serialized across RPC boundaries.
## Open decisions before `harness.md`