* refactor(agent): introduce interfaces for MessageBus and ChannelManager Phase 2 of loop.go refactor — dependency inversion using adapter pattern. - Add interfaces.MessageBus and interfaces.ChannelManager interfaces - Create adapters/messagebus.go wrapping *bus.MessageBus - Create adapters/channelmanager.go wrapping *channels.Manager - Update AgentLoop to use interfaces instead of concrete types - Update registerSharedTools to accept interfaces.MessageBus Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor(agent): restructure pipeline and rename loop files Pipeline refactoring: - Split pipeline.go (1400 lines) into focused files: - pipeline_setup.go (~115 lines): SetupTurn method - pipeline_llm.go (~519 lines): CallLLM method - pipeline_execute.go (~693 lines): ExecuteTools method - pipeline_finalize.go (~78 lines): Finalize method - Pipeline struct and NewPipeline remain in pipeline.go (~39 lines) Agent file renaming: - Rename loop_*.go to agent_*.go for consistent naming: - loop.go -> agent.go, loop_message.go -> agent_message.go, etc. - Merge turn.go + turn_exec.go into turn_state.go - Rename loop_turn.go -> turn_coord.go Documentation: - Update docs/pipeline-restructuring-plan.md - Add docs/agent-rename-plan.md Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(agent): code format fixed * refactor(agent): code test file added/renamed * docs(agent): update agent refactor docs * fix(agent): fix agent hardAbortX --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
3.3 KiB
AgentLoop File Split
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.
Overview
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.
Goals
- Reduce cognitive load when navigating agent loop code
- Enable parallel work by decoupling concerns
- Maintain all existing functionality and tests
- Keep imports minimal per file
Original File Map (Renamed in Phase 2)
| 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 |
Current File Structure
See agent-rename-plan.md for the complete current file structure.
Phase 2: Rename and Pipeline Restructuring
Phase 2 completed the following:
- File renaming: All
loop_*files renamed toagent_*orturn_* - Turn state merging:
turn.go+turn_exec.go→turn_state.go - Pipeline extraction: Split large
runTurninto Pipeline methods
Pipeline Architecture
The 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 |
Core Principles Applied
1. Same Package, Independent Files
All files belong to the agent package and compile together. This preserves the original visibility rules.
2. No Logic Changes
All functions were moved verbatim. The extraction preserved behavioral equivalence.
3. Shared Types in turn_state.go
The turnState, turnExecution, Control, ToolControl, and LLMPhase types are centralized in turn_state.go.
Testing
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.
See Also
- agent-rename-plan.md — Current file naming convention
- context.md — context management and session handling