仓库是“通用 Harness 内核 + 完整 Coding Agent 产品层”的双轨架构
packages/agent 的 AgentHarness 直接拥有 session、model、tools、resources、queue 和 hooks;packages/coding-agent 的 AgentSession 仍有自己的 runtime build、resource loader、tool registry、retry 与 compaction 适配。
一边是可嵌入任何产品的发动机,一边是已经带 CLI、会话、扩展和交互界面的整车;当前两套代码有重叠,不能把发动机的新接口直接当成整车每条路径都已采用。
架构抽象领先,但迁移期会产生两个 session/compaction/tool 生命周期,需要明确长期收敛边界。
171 export class AgentHarness<
172 TContext extends object | undefined = undefined,
173 TSkill extends Skill = Skill,
174 TPromptTemplate extends PromptTemplate = PromptTemplate,
175 TTool extends AgentHarnessTool<TContext> = AgentHarnessTool<TContext>,
176 > {
177 private session: Session;
178 readonly models: Models;
179 private phase: AgentHarnessPhase = "idle";
180 private runAbortController?: AbortController;
181 private runPromise?: Promise<void>;
182 private pendingSessionWrites: PendingSessionWrite[] = [];
183 private model: Model<any>;
184 private thinkingLevel: ThinkingLevel;
185 private systemPrompt: AgentHarnessSystemPrompt<TContext, TSkill, TPromptTemplate, TTool> | undefined;
186 private toolContext: AgentHarnessToolContextSource<TContext> | undefined;
187 private streamOptions: AgentHarnessStreamOptions;
188 private retry: RetryPolicy | undefined;
189 private resources: AgentHarnessResources<TSkill, TPromptTemplate>;
190 private tools = new Map<string, TTool>();
191 private activeToolNames: string[];
192 private steerQueue: UserMessage[] = [];
193 private steeringQueueMode: QueueMode;
194 private followUpQueue: UserMessage[] = [];
… 19 lines omitted; exact range 171–223 …
214 this.model = options.model;
215 this.thinkingLevel = options.thinkingLevel ?? "off";
216 this.activeToolNames = options.activeToolNames
217 ? [...options.activeToolNames]
218 : (options.tools ?? []).map((tool) => tool.name);
219 this.validateUniqueNames(this.activeToolNames, "Duplicate active tool name(s)");
220 this.validateToolNames(this.activeToolNames);
221 this.steeringQueueMode = options.steeringMode ?? "one-at-a-time";
222 this.followUpQueueMode = options.followUpMode ?? "one-at-a-time";
223 }
查看全部 3 处证据
-
实现
packages/agent/src/harness/agent-harness.ts:171–223AgentHarness 持有通用运行时状态和 hook。 -
实现
packages/coding-agent/src/core/agent-session.ts:375–400产品 AgentSession 仍自行订阅 agent、安装 hooks、构造 runtime。 -
实现
packages/coding-agent/src/core/agent-session.ts:2560–2598产品层独立构造工具和 Agent runtime。