Files
picoclaw/docs/architecture/agent-refactor/pipeline-restructuring-plan.md
T
sky5454 329e68e017 refactor(agent): Agent Looper refactor phase2, restructure pipeline and rename loop files to agent (#2585)
* 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>
2026-04-21 10:55:50 +08:00

3.2 KiB

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

File Lines
pipeline.go 39
pipeline_setup.go 115
pipeline_llm.go 519
pipeline_execute.go 693
pipeline_finalize.go 78
Total 1444

Responsibility Matrix

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

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