docs/architecture/agent-refactor/loop-split.md
Note: This document describes the file split that was completed in a previous phase. The
loop_*naming has since been renamed toagent_*andturn_*. See agent-rename-plan.md for the current file structure.
The pkg/agent/loop.go file (originally 4384 lines) has been split into 12 focused source files. This is a pure refactoring with no behavioral changes.
| Old File | New File | Responsibility |
|---|---|---|
loop.go | agent.go | Core AgentLoop struct, Run, Stop, Close |
loop_turn.go | turn_coord.go + pipeline_*.go | Turn execution: coordinator + Pipeline methods |
loop_utils.go | agent_utils.go | Standalone utility functions |
loop_init.go | agent_init.go | NewAgentLoop constructor and tool registration |
loop_message.go | agent_message.go | Message handling and routing |
loop_command.go | agent_command.go | Command processing |
loop_mcp.go | agent_mcp.go | MCP runtime |
loop_event.go | agent_event.go | Event system helpers |
loop_media.go | agent_media.go | Media resolution |
loop_outbound.go | agent_outbound.go | Response publishing |
loop_transcribe.go | agent_transcribe.go | Audio transcription |
loop_steering.go | agent_steering.go | Steering queue |
loop_inject.go | agent_inject.go | Setter injection |
See agent-rename-plan.md for the complete current file structure.
Phase 2 completed the following:
loop_* files renamed to agent_* or turn_*turn.go + turn_exec.go → turn_state.gorunTurn into Pipeline methodsThe Pipeline methods provide structured turn execution:
| Method | File | Responsibility |
|---|---|---|
SetupTurn() | pipeline_setup.go | History assembly, message building, candidate selection |
CallLLM() | pipeline_llm.go | PreLLM hooks, fallback, retry, AfterLLM hooks |
ExecuteTools() | pipeline_execute.go | Tool execution with hooks |
Finalize() | pipeline_finalize.go | Session persistence, compression |
All files belong to the agent package and compile together. This preserves the original visibility rules.
All functions were moved verbatim. The extraction preserved behavioral equivalence.
The turnState, turnExecution, Control, ToolControl, and LLMPhase types are centralized in turn_state.go.
All existing tests pass. The 5 failing tests (TestGlobalSkillFileContentChange and 4 Seahorse tests) are pre-existing failures unrelated to this refactor.
Build status: go build ./pkg/agent/... passes with no errors.