Cluster D from the structural analysis: parsePlan/parseBlockDraft/
parseConnections and their JSON-extraction helpers (readJsonObject,
extractJsonObject/OrArray, tryExtractBalancedJson, isLikelyNoConnectionsText)
had zero field dependencies - a pure string/JSON parsing layer.
- New AssistantResponseParser holds the parsing logic and the
LENIENT_ASSISTANT_MAPPER it needs
- AssistantFlowPlan, AssistantBlockPlan, AssistantContainerPlan,
PlanOperation, AssistantConfiguredBlockDraft, AssistantConnectionDraft,
ParsedPlan, ParsedBlockDraft, ParsedConnections promoted from private
to package-private nested types in FlowAssistantService so the new
parser (and future extractions) can share them without duplication
- parseConnectionsOrInferSequential stays in FlowAssistantService since
it also calls inferSequentialConnections (connection-resolution
cluster, not yet extracted)
3175 -> 2988 lines (-187, now under 3000). Behavior-preserving: pure
extraction, no logic changes.
Verified with `mvn test`: 462 tests, 0 failures, 0 errors.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>