Back to Picoclaw

Pipeline Restructuring Plan

docs/architecture/agent-refactor/pipeline-restructuring-plan.md

0.2.83.2 KB
Original Source

Pipeline Restructuring Plan

Goal

Split agent/pipeline.go (~1400 lines) into multiple logical files, organizing code by responsibility.

Final File Structure

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)

Actual Line Counts

FileLines
pipeline.go39
pipeline_setup.go115
pipeline_llm.go519
pipeline_execute.go693
pipeline_finalize.go78
Total1444

Responsibility Matrix

FileMethodResponsibility
pipeline.goPipeline struct, NewPipeline()Pipeline dependency container
pipeline_setup.goSetupTurn()Turn initialization: history assembly, message building, candidate selection
pipeline_llm.goCallLLM()LLM call: PreLLM hooks, fallback, retry, AfterLLM hooks
pipeline_execute.goExecuteTools()Tool execution: BeforeTool/ApproveTool/AfterTool hooks, media sending, steering handling
pipeline_finalize.goFinalize()Turn finalization: session save, compression, status setting

Relationship Between Pipeline and Turn Coordinator

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)

Verification Results

  • go build ./pkg/agent/... - Pass
  • go vet ./pkg/agent/... - No warnings
  • go test ./pkg/agent/... -skip "TestSeahorse|TestGlobalSkillFileContentChange" - Pass