e724a59f2d
Design-note-first for gitea #7. Extract HerdrPeerLauncher abstract base (Template Method) + kind: discriminator + OpenCodeLauncher + routing CompositePeerLauncher; finish the Stage-A caster migration off ClaudeCodeLauncher. opencode proves the SPI for a non-Claude peer (no subscription guard, OPENCODE_CONFIG MCP mount, config-based charter).