背景
edge-server/internal/adapters/ 顶层平铺 80+ 文件、9K LOC:claude / codex / anthropic / openai / opencode / acp / sdk_common / surfacing / scanner / hooks / registry 全在一个目录。找代码靠记忆,新增 adapter 无自然落点。
方案
按厂商与职责分子包(保持 adapters.Registry 对外契约不变):
adapters/claude/(claude_code.go、claude_acp.go)
adapters/codex/、adapters/anthropic/(anthropic_sdk*.go)、adapters/openai/(openai_sdk*.go)、adapters/opencode/
adapters/acp/(acp.go、acp_client.go、acp_events.go、opencode_acp.go)
adapters/internal/(surfacing、scanner、parser_ndjson、event_emitter、hooks 等共享实现)
- registry.go / adapter.go 留在
adapters 根,负责注册与接口
依赖 / 阻塞
- 无外部阻塞。纯包内重组,不改 wire 协议。
- 注意
control_protocol.go、model_config.go、mcp_config.go 被多厂商共享,应归 internal/ 而非单一厂商包,避免反向依赖。
风险
- 中:同包私有符号跨文件可见,分包后需显式导出或下沉 internal/。
- 缓解:每次只搬一个厂商族,搬完即
go build ./... && go test ./internal/adapters/...。
验收
背景
edge-server/internal/adapters/顶层平铺 80+ 文件、9K LOC:claude / codex / anthropic / openai / opencode / acp / sdk_common / surfacing / scanner / hooks / registry 全在一个目录。找代码靠记忆,新增 adapter 无自然落点。方案
按厂商与职责分子包(保持
adapters.Registry对外契约不变):adapters/claude/(claude_code.go、claude_acp.go)adapters/codex/、adapters/anthropic/(anthropic_sdk*.go)、adapters/openai/(openai_sdk*.go)、adapters/opencode/adapters/acp/(acp.go、acp_client.go、acp_events.go、opencode_acp.go)adapters/internal/(surfacing、scanner、parser_ndjson、event_emitter、hooks 等共享实现)adapters根,负责注册与接口依赖 / 阻塞
control_protocol.go、model_config.go、mcp_config.go被多厂商共享,应归internal/而非单一厂商包,避免反向依赖。风险
go build ./... && go test ./internal/adapters/...。验收
go build ./...+go vet ./...全绿go test ./internal/adapters/... -short全绿