Three critical fixes to the iai-mcp-memory-inject.js plugin:
- Race condition: inflight is now a Map<sessionID, Promise> so concurrent
callers (warm-on-create event + first transform hook) await the same
fetch instead of getting empty string. First turn now gets memory.
- Empty-memory ban: fetchMemory returns {ok, text} tuple. HTTP 200 with
empty body is memoized as valid (new user, minimal mode). Only actual
network errors count against the retry budget.
- Turn-limited injection: new INJECT_MAX_TURNS (default 3) stops injecting
after N turns. Memory was already in system prompt; the model has seen
it. Controls per-turn token cost that was 50x the old approach.
Also: README now documents memory-inject.js (not session-init), and
session-init.js is marked @deprecated.