Decisions
Why the harness hub maps Link's threads onto a harness's sessions and carries agent state through the same endpoint.
Why is the hub a package?
Every adapter needs the same ACP transport, thread mapping and sender handling. Linking that code into each adapter's endpoint shares one implementation without adding another process to a running agent.
Why does a session keep its thread's name?
A bridge knows its conversation by its thread, while a harness assigns its own session IDs. The hub persists the mapping and names exported sessions by their threads. An imported session becomes that thread's session, so the next message continues it without another mapping in the bridge.
Why does state come from the harness or its store?
A harness advertising ASP handles its own state. Otherwise its adapter reads and writes its native store, and the hub can export sessions by replaying ACP's list and load methods. This keeps private file formats inside adapters. Unsupported imports are reported as not taken, so an export capability never promises an import the harness cannot perform.
Why does state wait until a turn ends?
Exporting or importing while the harness writes a turn could capture half a conversation or replace an active session. State operations run between turns, preserving the harness's own session boundary.