## Fixes

### OpenCode — bounded `session.messages` calls

AFT's wake-up and status-cleanup paths previously called `client.session.messages()` without a `query.limit`, causing OpenCode to hydrate the entire session into memory. On long sessions (30k+ messages, 100k+ parts) this could exhaust host memory. Both call sites now request only the recent tail (50 messages).

### OpenCode — lazy bridge spawn

AFT no longer spawns an `aft` bridge for every project loaded in OpenCode Desktop's sidebar at startup. Bridges now spawn lazily on the first tool call against a project, so opening Desktop with many projects in the sidebar no longer multiplies AFT bridge processes for projects you never interact with.

`/aft-status` and the TUI sidebar show "Waiting for first tool call to populate" until a bridge actually exists.
</content>
