67a5eb3805
applyAction (cmd/mavend/voice.go) dispatched all 7 intents from one giant switch. Extract each case body verbatim into its own actionXxx method in new cmd/mavend/actions.go, dispatched from an actionHandlers table keyed by router.Intent. applyAction itself is now just the dec.Clarify guard plus a table lookup. No behaviour change: same reply strings, same side-effect order, comments moved verbatim. The destructive-act confirm gate and the enabled-tool allowlist stay entirely inside actionAct, exactly where they lived in the old switch's IntentAct case — they're act-specific, not cross-cutting, so they don't move to a separate layer. dec.Clarify short-circuit, dialogue bookkeeping and detectPattern stay outside the table since they run regardless of intent. voice.go: 1638 -> 1344 lines. New actions.go: 362 lines. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ