docs/architecture/agent-refactor/pipeline-restructuring-plan.md
Split agent/pipeline.go (~1400 lines) into multiple logical files, organizing code by responsibility.
pkg/agent/
├── pipeline.go # Pipeline struct + NewPipeline (~39 lines)
├── pipeline_setup.go # SetupTurn method (~115 lines)
├── pipeline_llm.go # CallLLM method (~519 lines)
├── pipeline_execute.go # ExecuteTools method (~693 lines)
└── pipeline_finalize.go # Finalize method (~78 lines)
| File | Lines |
|---|---|
pipeline.go | 39 |
pipeline_setup.go | 115 |
pipeline_llm.go | 519 |
pipeline_execute.go | 693 |
pipeline_finalize.go | 78 |
| Total | 1444 |
| File | Method | Responsibility |
|---|---|---|
pipeline.go | Pipeline struct, NewPipeline() | Pipeline dependency container |
pipeline_setup.go | SetupTurn() | Turn initialization: history assembly, message building, candidate selection |
pipeline_llm.go | CallLLM() | LLM call: PreLLM hooks, fallback, retry, AfterLLM hooks |
pipeline_execute.go | ExecuteTools() | Tool execution: BeforeTool/ApproveTool/AfterTool hooks, media sending, steering handling |
pipeline_finalize.go | Finalize() | Turn finalization: session save, compression, status setting |
AgentLoop (agent.go)
│
├── runAgentLoop() ──────────────────┐
│ │
│ ┌───────────────────────────────▼───────────────────────────────┐
│ │ Turn Coordinator (turn_coord.go) │
│ │ │
│ │ runTurn() { │
│ │ exec = pipeline.SetupTurn() │
│ │ loop { │
│ │ ctrl = pipeline.CallLLM() ──► Pipeline (pipeline_*.go) │
│ │ if ctrl == ToolLoop { │
│ │ toolCtrl = pipeline.ExecuteTools() │
│ │ } │
│ │ } │
│ │ return pipeline.Finalize() │
│ │ } │
│ └─────────────────────────────────────────────────────────────┘
│
└── Publish response (agent_outbound.go)
go build ./pkg/agent/... - Passgo vet ./pkg/agent/... - No warningsgo test ./pkg/agent/... -skip "TestSeahorse|TestGlobalSkillFileContentChange" - Pass