Address the review bot's five genuinely-new findings on the current code: - disposal now discards any still-pending inbox items before the loop exits, so every enqueued id gets a terminal lifecycle event. - injection (next-step/no-wakeup) validates its payload up front, before opening the idle one-shot turn, honoring 'invalid input throws before any append'; and rejects attached contexts (which belong only to inbox messages) rather than silently dropping them. - agentMessage() freezes the agent/inbox/* payload so a listener cannot mutate the shared correlation object mid-dispatch. - refresh the package READMEs (compact, goal, guard, hook-protocol, plan-mode, time-context, workspace-context) that still referenced the removed context/message event, with the source-based user/message distinction. The up-front injection validation makes two finally branches unreachable (v8-ignored as the turn-enclosure backstop). Adds regression tests for disposal discard, context rejection, up-front validation, and the frozen payload; per-file coverage stays 100%.
context/ — request-context extensions
Product plugins that add model-visible request context without defining a tool. workspace-context is included by the default dsh-agent-spine-demo bundle and can be disabled through bundle config; time-context is opt-in, while the standard TUI and ACP bundles compose session-reference explicitly.
| Package | Role | ctx key |
|---|---|---|
session-reference/ |
Bounded current-surface snapshots of other sessions | ctx.sessionReferences |
time-context/ |
Durable per-step current time and elapsed-time context | (none) |
workspace-context/ |
AGENTS.md/CLAUDE.md workspace context loader |
(listens on agent/session-prefix + tools/post-execute) |
The workspace-context decision record explains its per-agent/session isolation and lifecycle split.