{"version":"2.1.246","anchor":"the-interactive-session-was-split-into-controllers-and-store","canonical_anchor":"the-interactive-session-was-split-into-controllers-and-store","heading":"The interactive session was split into controllers and stores","tier":"internal","area":"Session Loop","scope":null,"heads_up":null,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.246\/e\/the-interactive-session-was-split-into-controllers-and-store","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.246","markdown":"### The interactive session was split into controllers and stores\n\nThe interactive session loop was reorganised into controllers and stores with no behaviour change.\n\n**What**\n\nThe main interactive loop was reorganised internally with no behaviour change identified. It is the largest single rework in this release, which matters mainly because it touches nearly everything the prompt does.\n\n**Details**\n\n- Prompt draft state (text, mode, pasted contents, stash, vim editing, overlay flags) moved into a dedicated store with its own methods instead of living in component state.\n- The three remote transports (ssh, direct and ccr) now feed one shared sink object rather than each wiring up its own transcript and turn callbacks.\n- Session resume, conversation reset, background queries, idle notifications and cost-threshold prompting all moved into separate controller classes.\n- The response stream now surfaces tool progress, and the old mount\/unmount debug logging was dropped.\n\n**Evidence**\n\n`[REPL:unmount] REPL unmounting`\n\n- Area: Session Loop\n- Tier: Under the hood\n- Useful: 1\/5\n- Signal: 2\/5"}