/** * Guard Controller -- 从 engine.ts 抽离的迭代守卫、数据获取循环检测、 * 连续失败熔断、渐进式结果交付等"nudge/guard"逻辑。 * * 设计说明:engine.ts 主类在 agentLoop 迭代中调用这些函数, * 将"何时注入提醒消息、何时禁用工具"的策略集中在独立模块, * 便于独立测试与调参。 */ import type { ToolCallRecord, ToolCall } from '../types.js'; import type { GuardConfig } from './types.js'; import type { HookEvent, HookContext, HookResult } from '../hooks/types.js'; import type { HistoryManager } from './history-manager.js'; import type { LoopState } from './engine.js'; /** Guard 控制器所需的 Engine 依赖 */ export interface GuardControllerDeps { historyManager: HistoryManager; dataFetchTools: Set; outputTools: Set; guardConfig: Required; maxIterations: number; hasTool: (name: string) => boolean; runHooks: (event: HookEvent, ctx: HookContext) => Promise; } /** * 进度叙述提醒 * 当 LLM 连续 2 次迭代仅发出 tool_calls 而无 content 时,注入 user 消息提醒输出进度说明。 * 确保用户在对话中有可见的文字输出,而不是所有内容都收在执行步骤中。 */ export declare function injectProgressNudge(deps: GuardControllerDeps, state: LoopState): void; /** * 迭代预算提醒 * 当剩余迭代不足 30% 时,注入 user 消息提醒 LLM 停止数据收集、转向完成任务。 * 解决 agent 在数据查询循环中耗尽迭代、永远无法进入文档生成/委托阶段的问题。 */ export declare function injectIterationGuard(deps: GuardControllerDeps, state: LoopState): void; /** * 从可用工具列表中移除数据获取类工具,强制 LLM 转向产出。 * 在 iterationGuard / dataFetchGuard 触发后调用。 * 仅移除尚未执行的 toolDefs,不影响正在执行的工具。 */ export declare function disableDataFetchTools(deps: GuardControllerDeps, state: LoopState): void; /** * 数据获取循环检测 + 连续失败熔断 * * 两类触发条件: * 1. 数据获取循环:最近 3+ 条工具调用全部是数据获取类且无产出型工具 * 2. 连续失败熔断:最近 5+ 条工具调用中 4+ 条失败,强制停止试错、转向产出 */ export declare function checkDataFetchLoop(deps: GuardControllerDeps, state: LoopState): void; /** 注入数据获取循环/连续失败熔断提示 */ export declare function injectDataFetchGuard(deps: GuardControllerDeps, state: LoopState, recent: ToolCallRecord[], reason: 'loop' | 'failures' | 'cumulative_failures'): void; /** * 任务继续提示 * 当 LLM 在工具调用后提前停止(无新工具调用也无明确总结)时,注入提示让其继续完成剩余任务。 * 典型场景:多步委托任务中,第一步数据采集完成后 LLM 未生成后续步骤的 delegate_task。 */ export declare function injectContinuationNudge(deps: GuardControllerDeps, state: LoopState): void; /** * 渐进式结果交付 * 当主 Agent 并行分发了多个 delegate_task 后,注入提示让 LLM 逐步呈现每个子任务的结果, * 而不是等所有结果全部返回后才开始输出。减少用户感知等待时间。 */ export declare function injectProgressiveNudge(deps: GuardControllerDeps, state: LoopState, toolCalls: ToolCall[]): void; //# sourceMappingURL=guard-controller.d.ts.map