背景
hub-server/internal/service/ 顶层平铺 30 个非测试 .go 文件(5.5K LOC),agent / audit / auth / delivery_outbox / execution_target / relay / skill / mcp_server 各成一域却同挤一处。agent_edge_callback.go 659 行、execution_target.go 578 行偏大。已有 agentevent/、agentteam/、deliveryoutbox/、dispatchsvc/ 子包模式可循。
方案
沿用既有子包模式,按域归组(保持 service 层对 handler 的公开方法签名不变):
service/agent/(agent*.go、agent_edge_callback.go、agent_run_event.go)
service/audit/、service/auth/、service/execution/(execution_target*.go)
- 共享 helper(cache_fallback.go、eventbus.go)留根或入 internal
- 先做耦合度低的域(audit、auth),再做 agent(耦合最高,最后)
依赖 / 阻塞
- 无外部阻塞,但 agent 域与 relay/dispatch/seqalloc 交叉引用多,必须最后做且单独 PR。
- 每个域的搬迁独立成 PR,避免一个巨型 diff。
风险
- 中高:service 内跨文件私有 helper 多,分包需显式导出或下沉,易引入 import cycle。
- 缓解:逐域小步,每步
go build ./... && go test ./internal/service/... -short;用 go vet 抓 cycle。
验收
背景
hub-server/internal/service/顶层平铺 30 个非测试 .go 文件(5.5K LOC),agent / audit / auth / delivery_outbox / execution_target / relay / skill / mcp_server 各成一域却同挤一处。agent_edge_callback.go659 行、execution_target.go578 行偏大。已有agentevent/、agentteam/、deliveryoutbox/、dispatchsvc/子包模式可循。方案
沿用既有子包模式,按域归组(保持 service 层对 handler 的公开方法签名不变):
service/agent/(agent*.go、agent_edge_callback.go、agent_run_event.go)service/audit/、service/auth/、service/execution/(execution_target*.go)依赖 / 阻塞
风险
go build ./... && go test ./internal/service/... -short;用go vet抓 cycle。验收
go build/go vet/go test -short