/** * Insert text into the current session's composer draft through the * conversation service — the shared path behind the explorer's @-reference * button and the viewer selection popup. The service is resolved lazily * through `ctx.get` (the inject-free read the app's own plugins use); a * missing service or scope degrades to a logged no-op, never a crash. * * Insert position (fixes upstream issue #425): the draft store only exposes * the whole string (`getSnapshot().draft` + `setDraft(text)`) — there is no * caret API on the conversation service. The composer's `