5.1 KiB
05 - AssistantService Extraction Map
Purpose
This document maps the current architectural overload of assistantService.ts and identifies what should stop living there over time.
The goal is not to empty the file arbitrarily.
The goal is to turn it from a god-service into a thinner coordinator.
Current Situation
assistantService.ts is currently the largest and most overloaded module in the assistant runtime.
Approximate size:
6243lines
It currently mixes concerns from:
- living route selection;
- follow-up carryover;
- continuation contracts;
- mode boundaries;
- meta-followup logic;
- memory recap detection;
- provider-aware predecompose orchestration;
- chat/data-scope/address boundary policy.
Extraction Principle
assistantService should remain the top-level coordinator.
It should stop being the main owner of:
- policy logic;
- transition semantics;
- boundary semantics;
- meta semantics.
Extraction Targets
1. Living Route Policy
Current owner:
resolveAssistantOrchestrationDecision()
Current location:
Target owner:
assistantRoutePolicyRuntimeAdapter
Expected artifact:
- explicit living-route decision contract
Done when:
- route policy can be reviewed without reading the full coordinator;
- top-level mode decisions are data-driven or contract-driven enough to be testable as a separate unit.
2. Carryover And Transition Policy
Current owner:
resolveAddressFollowupCarryoverContext()buildAddressDialogContinuationContractV2()
Current location:
Target owner:
assistantTransitionRuntimeAdapterassistantContinuationContractBuilder
Expected artifact:
- explicit transition classes with state inputs and carryover depth
Done when:
- follow-up continuation is understood in terms of transitions, not just heuristic carryover.
3. Meta Follow-Up Policy
Current owner:
- meta and evaluative follow-up detection inside route decision logic
Target owner:
assistantMetaFollowupPolicy
Expected artifact:
- meta question class registry
- legal source answer object types
Done when:
- meta questions no longer depend on implicit branches buried inside living route logic.
4. Data-Scope And Boundary Policy
Current owner:
assistant_data_scope_query_detectedbranches
Current references:
Target owner:
assistantBoundaryPolicy
Expected artifact:
- explicit boundary mode contract:
data_scopeoperational_boundarycapability_contractnon_domain_chat
Done when:
- emotional or colloquial user messages cannot accidentally trigger data-scope selection through hidden shared logic.
5. Memory Recap Policy
Current owner:
- route decision + living chat cooperation
Related consumer:
Target owner:
assistantMemoryRecapPolicy
Expected artifact:
- truthful recap contract over grounded prior answer objects
Done when:
- memory recap logic becomes a named subsystem with its own truth rules.
6. Provider-Aware Orchestration Glue
Current owner:
- coordinator-level logic that adapts to
openaivslocal
Target owner:
assistantProviderExecutionPolicy
Expected artifact:
- provider/runtime compatibility layer for orchestration expectations
Done when:
- provider quirks no longer leak into business routing logic.
What Should Stay In AssistantService
After extraction, assistantService should still own:
- high-level request coordination;
- dependency wiring;
- stage invocation order;
- final turn assembly and persistence orchestration.
It should not be removed as an architectural object.
It should become thinner.
Proposed Extraction Order
- extract route decision contract
- extract transition/carryover policy
- extract boundary/data-scope policy
- extract meta and memory recap policy
- isolate provider-aware orchestration glue
This order is chosen because route and transition pressure are currently the main source of runtime fragility.
Non-Goals
- do not split the file mechanically just to reduce line count;
- do not create many tiny helpers with no architectural ownership;
- do not move exact execution logic out of its proper lane.
Done Criteria
This extraction plan is complete only when:
- the remaining
assistantServicecan be described as a coordinator; - major policy categories have explicit owners outside
assistantService; - scenario regressions can point to policy subsystems instead of a single god-service.