page-agent-sdk 4.12.0 → 4.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/README.zh-CN.md +2 -0
- package/dist/page-agent-sdk.headless.js +756 -755
- package/package.json +2 -1
- package/types/headless.d.ts +556 -36
- package/types/index.d.ts +523 -38
package/types/index.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
// ===== vue 类型内联桩(E2 API 面收口,2026-09-09 audit-remediation)=====
|
|
2
|
+
// d.ts 不再 import 'vue':未装 vue 的 TS 项目(纯 headless 集成)也能完整解析本声明文件,Ref 字段不再退化为 error type。
|
|
3
|
+
// 桩形状与 vue 3.x 公开类型结构兼容(Ref = { value };InjectionKey = symbol 接口,与 vue 源码同式;DefineComponent = 构造器形态)。
|
|
4
|
+
// 已知限制:真 vue 项目把 ChatDialog 等直接塞进 SFC components:{} 时,vue-tsc 期望真 DefineComponent —— SDK 定位
|
|
5
|
+
// mount() 挂载式对话框(框架无关),直接组件复用是次级路径;需要时集成方自行 as 断言。详见 usage-guide 依赖说明。
|
|
6
|
+
type Ref<T = any> = { value: T };
|
|
7
|
+
type InjectionKey<T> = symbol & { __pgInjType?: T };
|
|
8
|
+
type DefineComponent<P = any> = { new (...args: any[]): { $props?: P; [key: string]: any } };
|
|
2
9
|
export { z } from 'zod';
|
|
3
10
|
|
|
4
11
|
// 代理连接模块(防 apiKey 泄露:proxy 代理模式 / direct 直连模式)
|
|
@@ -152,13 +159,15 @@ export interface AgentState {
|
|
|
152
159
|
error: string | null;
|
|
153
160
|
}
|
|
154
161
|
|
|
162
|
+
/** 流式事件,由 Agent 在流式生成过程中逐个抛出(与 src/core/types 同步;approval_request 仅流内,不进 onEvent) */
|
|
155
163
|
export type StreamEvent =
|
|
156
164
|
| { type: 'round_start'; round: number }
|
|
157
165
|
| { type: 'reasoning'; delta: string }
|
|
158
166
|
| { type: 'text'; delta: string }
|
|
159
|
-
| { type: 'tool_call'; name: string; args: any }
|
|
160
|
-
| { type: 'tool_result'; name: string; result: string; status: 'done' | 'error' }
|
|
161
|
-
| { type: 'subagent'; taskId: string; label: string; kind: 'tool_call' | 'tool_result'; name: string; args?: any; result?: string; status?: 'done' | 'error' }
|
|
167
|
+
| { type: 'tool_call'; name: string; args: any; id?: string }
|
|
168
|
+
| { type: 'tool_result'; name: string; result: string; status: 'done' | 'error'; durationMs?: number; id?: string }
|
|
169
|
+
| { type: 'subagent'; taskId: string; label: string; kind: 'tool_call' | 'tool_result' | 'reasoning'; name: string; args?: any; result?: string; status?: 'done' | 'error'; delta?: string; toolCallId?: string }
|
|
170
|
+
| { type: 'approval_request'; toolName: string; args: any; resolve: (approved: boolean | string) => void; hold?: () => void; preview?: ApprovalWritePreview }
|
|
162
171
|
| { type: 'done'; content: string };
|
|
163
172
|
|
|
164
173
|
export type StreamHandler = (event: StreamEvent) => void;
|
|
@@ -174,7 +183,7 @@ export type SdkEvent =
|
|
|
174
183
|
| { type: 'text'; delta: string }
|
|
175
184
|
| { type: 'tool_call'; name: string; args: any; id?: string }
|
|
176
185
|
| { type: 'tool_result'; name: string; result: string; status: 'done' | 'error'; durationMs?: number; id?: string }
|
|
177
|
-
| { type: 'subagent'; taskId: string; label: string; kind: 'tool_call' | 'tool_result'; name: string; args?: any; result?: string; status?: 'done' | 'error'; /** 关联主循环工具调用 id(并行双委派各归各 UI step) */ toolCallId?: string }
|
|
186
|
+
| { type: 'subagent'; taskId: string; label: string; kind: 'tool_call' | 'tool_result' | 'reasoning'; name: string; args?: any; result?: string; status?: 'done' | 'error'; delta?: string; /** 关联主循环工具调用 id(并行双委派各归各 UI step) */ toolCallId?: string }
|
|
178
187
|
| { type: 'done'; content: string }
|
|
179
188
|
| { type: 'data_change'; operation: 'set' | 'edit' | 'delete' | 'restore'; value?: unknown }
|
|
180
189
|
| { type: 'message_update'; count: number }
|
|
@@ -226,6 +235,8 @@ export interface DebugLog {
|
|
|
226
235
|
timestamp: number;
|
|
227
236
|
type: 'context' | 'llm_request' | 'llm_response' | 'tool_call' | 'tool_result' | 'error' | 'middleware';
|
|
228
237
|
data: any;
|
|
238
|
+
/** 日志来源(主 agent 省;子 agent 转发时为 '子:label',便于区分) */
|
|
239
|
+
source?: string;
|
|
229
240
|
}
|
|
230
241
|
|
|
231
242
|
/** ChatDialog 区块显隐控制(chatdialog-component-split):键=区块,false 关闭整块(含 slot);默认 undefined=全开 */
|
|
@@ -723,8 +734,8 @@ export interface ContextSnapshot {
|
|
|
723
734
|
thresholdRatio: number;
|
|
724
735
|
/** 分类明细(按 tokens 降序) */
|
|
725
736
|
categories: ContextCategory[];
|
|
726
|
-
/** 最近一次压缩统计(
|
|
727
|
-
compression?:
|
|
737
|
+
/** 最近一次压缩统计(直接引用 state.lastCompression,非新增写入) */
|
|
738
|
+
compression?: CompressionStats;
|
|
728
739
|
}
|
|
729
740
|
/** analyzeContext 选项(context-inspector) */
|
|
730
741
|
export interface AnalyzeContextOptions {
|
|
@@ -813,7 +824,62 @@ export declare function useChatContext(): ChatContext;
|
|
|
813
824
|
export declare const MessageContent: DefineComponent<any>;
|
|
814
825
|
export declare const CodePreview: DefineComponent<any>;
|
|
815
826
|
export declare const SkillPanel: DefineComponent<any>;
|
|
816
|
-
|
|
827
|
+
/** useChat 选项(自定义 fetcher/持久化回调/共享 messages 引用;E1 API 面收口,与 src composables/useChat 对齐) */
|
|
828
|
+
export interface UseChatOptions {
|
|
829
|
+
fetchResponse?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<string>;
|
|
830
|
+
fetchStream?: (messages: AgentMessage[], onEvent: StreamHandler, signal?: AbortSignal) => Promise<string>;
|
|
831
|
+
/** 外部共享的消息数组(持久化恢复时传入,与父级共用同一响应式引用) */
|
|
832
|
+
messages?: AgentMessage[];
|
|
833
|
+
/** 一轮对话完成后回调(用于持久化;可返回 Promise,sendMessage 会 await 确保落盘后再关 loading) */
|
|
834
|
+
onPersist?: (messages: AgentMessage[]) => void | Promise<void>;
|
|
835
|
+
/** 清空对话时回调(用于新建会话) */
|
|
836
|
+
onClear?: () => void;
|
|
837
|
+
/** stop() 清空排队任务时回调(丢弃条数与内容由消费方记日志,防无声丢失) */
|
|
838
|
+
onQueuedCleared?: (dropped: string[]) => void;
|
|
839
|
+
/** regenerate 前回调(清代码资产复用缓存,强制子 agent 重新生成而非复用工作副本) */
|
|
840
|
+
onBeforeRegenerate?: () => void;
|
|
841
|
+
/** 取当前实时焦点(排队任务开始执行时快照进 user 消息;与 invoke-freeze 生效口径一致) */
|
|
842
|
+
getFocuses?: () => Focus[];
|
|
843
|
+
}
|
|
844
|
+
/** 挂起的审批(approval 中间件 ask-first;UI 据此渲染审批条,resolveApproval 收口) */
|
|
845
|
+
export interface PendingApproval {
|
|
846
|
+
toolName: string;
|
|
847
|
+
args: any;
|
|
848
|
+
resolve: (approved: boolean | string) => void;
|
|
849
|
+
/** write 审批 diff 预览(approval_request 载荷透传;无则 undefined 走 args JSON 兜底呈现) */
|
|
850
|
+
preview?: ApprovalWritePreview;
|
|
851
|
+
}
|
|
852
|
+
/** useChat 返回(对话状态 + 操作;内置 ChatDialog 消费,自建 UI 可直接用) */
|
|
853
|
+
export interface UseChatReturn {
|
|
854
|
+
/** 对话状态(messages/loading/error,reactive) */
|
|
855
|
+
state: AgentState;
|
|
856
|
+
/** 消息列表容器 DOM 引用(自动滚动) */
|
|
857
|
+
scrollContainer: Ref<HTMLElement | null>;
|
|
858
|
+
/** 挂起的审批 */
|
|
859
|
+
pendingApproval: Ref<PendingApproval | null>;
|
|
860
|
+
/** 排队待发的任务内容(生成中再发 → 入队显示在排队区) */
|
|
861
|
+
queuedTasks: Ref<string[]>;
|
|
862
|
+
/** 发送(生成中再发 → 入排队区;images 需主模型多模态或 images.describe 配置,否则拒绝并 emit 结构化错误不静默丢图) */
|
|
863
|
+
sendMessage(content: string, focuses?: Focus[], images?: AgentImage[]): Promise<void>;
|
|
864
|
+
/** 手动撤销排队任务 */
|
|
865
|
+
removeQueuedTask(idx: number): void;
|
|
866
|
+
/** 清空对话(onClear 回调) */
|
|
867
|
+
clearMessages(): void;
|
|
868
|
+
/** 停止当前生成(abort 保留 partial + 清排队) */
|
|
869
|
+
stop(): void;
|
|
870
|
+
/** 重置(state 清空 + pendingApproval 收口) */
|
|
871
|
+
reset(): void;
|
|
872
|
+
/** 重试失败轮(移除失败 user/assistant 占位后重发) */
|
|
873
|
+
retry(): Promise<void>;
|
|
874
|
+
/** 重新生成最后一轮(onBeforeRegenerate 清复用缓存) */
|
|
875
|
+
regenerate(): Promise<void>;
|
|
876
|
+
/** 审批响应(true/false 或 RHC 方案 id 字符串) */
|
|
877
|
+
resolveApproval(approved: boolean | string): void;
|
|
878
|
+
/** 滚动绑定(保留给 @scroll;sticky 由 onWheel 管) */
|
|
879
|
+
onScroll(): void;
|
|
880
|
+
onWheel(e: WheelEvent): void;
|
|
881
|
+
}
|
|
882
|
+
export declare function useChat(opts?: UseChatOptions): UseChatReturn;
|
|
817
883
|
/** 单代码块超过此字符数跳过 hljs 高亮(转义直出),防巨代码块单帧卡顿(P1-26 尺寸闸) */
|
|
818
884
|
export declare const HLJS_BLOCK_MAX_CHARS: number;
|
|
819
885
|
/** markdown → 未净化 HTML(marked + 代码块渲染,含 hljs 尺寸闸;**不含** DOMPurify;⚠️ 勿直接 v-html)。P1-26 抽离可单测 */
|
|
@@ -1242,7 +1308,7 @@ export interface ChatSdkOptions {
|
|
|
1242
1308
|
maxRetries?: number;
|
|
1243
1309
|
/** LLM 流停滞看门狗(fix-hang-and-feedback P1-7):chunk 间隔(含等首个)超此 ms → 中断抛错防 loading 永转。默认 90s;0 = 关闭 */
|
|
1244
1310
|
streamStallMs?: number;
|
|
1245
|
-
/** 单次模型调用流总时长上限:防空转帧黑洞(keepalive 空转不断喂饱间隔看门狗,超限 → StreamMaxDurationError,重委派/重发即自愈)。默认 600s;0 = 关闭 */
|
|
1311
|
+
/** 单次模型调用流总时长上限:防空转帧黑洞(keepalive 空转不断喂饱间隔看门狗,超限 → StreamMaxDurationError,重委派/重发即自愈)。默认 1800s(2026-08-28 抬升:100K+ 输出长生成需 20min+,600s 掐死合法长生成;空转仍由 stall 90s 主防);0 = 关闭 */
|
|
1246
1312
|
streamMaxDurationMs?: number;
|
|
1247
1313
|
/**
|
|
1248
1314
|
* per-tool 看门狗:单工具执行超此 ms → 放弃等待,recoverable 错误结果回灌自纠(防集成方工具永不 settle 拖死整轮:loading 永转 + stop 无效)。只对集成方注入工具生效(defineTool / actions / skill 工具工厂 / rag retriever);内置/MCP/委派与 conflict ask 挂起是设计内等待,豁免。默认 120s;0 = 关闭
|
|
@@ -1428,7 +1494,7 @@ export interface ChatSdk {
|
|
|
1428
1494
|
/** 列出当前 agent 的所有历史会话(供「历史列表」UI;storage 未开启 → []) */
|
|
1429
1495
|
listSessions(): Promise<SessionMeta[]>;
|
|
1430
1496
|
/** 历史会话列表(响应式;switchSession/deleteSession/onClear/init 后自动 refresh;直接消费无需手动 listSessions/refresh/hook) */
|
|
1431
|
-
readonly sessions:
|
|
1497
|
+
readonly sessions: Ref<SessionMeta[]>;
|
|
1432
1498
|
/** 删除指定历史会话;不可删除当前会话(删当前请先 switchSession 切走);storage 未开启 → no-op + warn */
|
|
1433
1499
|
deleteSession(sessionId: string): Promise<void>;
|
|
1434
1500
|
/** 当前会话 id(switchSession/onClear 后实时反映;供历史列表高亮当前项) */
|
|
@@ -1733,7 +1799,7 @@ export declare function resolveLlm(options: any): { modelCaps: any; summaryLlmIn
|
|
|
1733
1799
|
export declare function deriveTitle(msgs: AgentMessage[]): string | undefined;
|
|
1734
1800
|
// ============ 乐观锁冲突管理器(conflictManager,refactor-module-extraction 期二 从 createChatSdk 抽离)============
|
|
1735
1801
|
export interface ConflictManager {
|
|
1736
|
-
pendingConflict:
|
|
1802
|
+
pendingConflict: Ref<any | null>;
|
|
1737
1803
|
set(info: any): Promise<any>;
|
|
1738
1804
|
resolve(action: any): void;
|
|
1739
1805
|
}
|
|
@@ -1851,10 +1917,175 @@ export declare const domInspectSkill: SkillSpec;
|
|
|
1851
1917
|
export declare const fetchTools: any[];
|
|
1852
1918
|
export declare function defineDataToolset(config: DataConfig, opts?: DataOpsOptions): any[];
|
|
1853
1919
|
export declare function defineSkill(spec: SkillSpec): SkillSpec;
|
|
1854
|
-
|
|
1920
|
+
/** createAgent 选项(ReAct 循环 + 中间件 harness;createChatSdk 之下的层,集成方可直接用;E1 API 面收口) */
|
|
1921
|
+
export interface CreateAgentOptions {
|
|
1922
|
+
/** 预构造的 LLM 实例(任意 provider);提供则优先于 apiKey/model 配置 */
|
|
1923
|
+
llm?: import('@langchain/core/language_models/chat_models').BaseChatModel;
|
|
1924
|
+
apiKey?: string;
|
|
1925
|
+
baseUrl?: string;
|
|
1926
|
+
model?: string;
|
|
1927
|
+
temperature?: number;
|
|
1928
|
+
maxTokens?: number;
|
|
1929
|
+
/** 集成方显式声明模型上下文窗口(token);缺省按 model 名查表,再缺省 32K。影响 offload 阈值与压缩触发 */
|
|
1930
|
+
contextWindow?: number;
|
|
1931
|
+
/** 集成方显式声明模型最大输出(token);缺省按 model 名查表,再缺省 4K。maxTokens 未传时作其缺省 */
|
|
1932
|
+
maxOutputTokens?: number;
|
|
1933
|
+
/** 透传 modelKwargs:额外请求 body 参数(如 deepseek thinking)。仅按配置构造时生效 */
|
|
1934
|
+
extraBody?: Record<string, any>;
|
|
1935
|
+
/** 透传 configuration 额外字段(headers/timeout/customFetch),与 baseUrl 合并。仅按配置构造时生效 */
|
|
1936
|
+
extraConfig?: Record<string, any>;
|
|
1937
|
+
systemPrompt?: string;
|
|
1938
|
+
/** 用户自定义工具(与中间件贡献的工具合并) */
|
|
1939
|
+
tools?: import('@langchain/core/tools').StructuredToolInterface[];
|
|
1940
|
+
/** 中间件栈(顺序:内置在前,用户在后) */
|
|
1941
|
+
middleware?: Middleware[];
|
|
1942
|
+
maxToolRounds?: number;
|
|
1943
|
+
/** 会话是否具备子 agent 委派能力(轮次预算提醒 70% 档按此感知;false 不点名 spawn_agent 等不存在的工具) */
|
|
1944
|
+
hasSubagent?: boolean;
|
|
1945
|
+
/** 循环总迭代硬上限(防自纠死循环;默认 max(maxToolRounds*3, 30)) */
|
|
1946
|
+
maxIterations?: number;
|
|
1947
|
+
/** 模型调用失败自动重试次数(默认 2;网络/429/5xx 重试,4xx 与 abort 不重试) */
|
|
1948
|
+
maxRetries?: number;
|
|
1949
|
+
/** 重试退避基数 ms(默认 500,第 n 次重试等待 = base*2^n + jitter) */
|
|
1950
|
+
retryDelayMs?: number;
|
|
1951
|
+
/** LLM 流停滞看门狗:chunk 间隔(含等首个)超此 ms → 中断抛错。默认 90s;0 = 关闭 */
|
|
1952
|
+
stallMs?: number;
|
|
1953
|
+
/** 单次模型调用流总时长上限(防空转帧黑洞)。默认 1800s(100K+ 输出长生成需 20min+);0 = 关闭 */
|
|
1954
|
+
streamMaxMs?: number;
|
|
1955
|
+
/** per-tool 看门狗:单工具执行超此 ms → recoverable 错误回灌自纠。只对集成方注入工具生效(内置/委派/冲突挂起豁免);默认 120s;0 = 关闭 */
|
|
1956
|
+
toolTimeoutMs?: number;
|
|
1957
|
+
/** 同轮多个工具调用的并发上限(默认 1 = 串行);>1 时并发执行 */
|
|
1958
|
+
maxParallelTools?: number;
|
|
1959
|
+
/** beforeReturn 自纠上限(默认 0 = 关闭,纯放行);>0 时 agent 返回前跑 beforeReturn 钩子 */
|
|
1960
|
+
maxVerifyAttempts?: number;
|
|
1961
|
+
/** 单次 invoke 的 token 预算上限(0=关;超限 → 中断收口 observable,已完成部分保留) */
|
|
1962
|
+
roundTokenBudget?: number;
|
|
1963
|
+
/** 日志下沉:每条 debugLog 产生时回调(子 agent 经此把日志转发到主 debugLogs) */
|
|
1964
|
+
onLog?: (entry: DebugLog) => void;
|
|
1965
|
+
/** 子 agent 标记(子栈门禁据此豁免:子纯文本收口是正常形态) */
|
|
1966
|
+
__pgIsSubagent?: boolean;
|
|
1967
|
+
/** LLM 运行时切换回调(setLlm 后触发,供重解析模型能力 contextWindow/maxOutputTokens) */
|
|
1968
|
+
onLlmChange?: (newLlm: import('@langchain/core/language_models/chat_models').BaseChatModel) => void;
|
|
1969
|
+
/** 显式声明主模型是否多模态识图(声明 > 查表 > 缺省 false) */
|
|
1970
|
+
vision?: boolean;
|
|
1971
|
+
/** content parts 协议形态(默认 'openai' LangChain 标准多模态格式;'anthropic' 原生 image block) */
|
|
1972
|
+
imageContentFormat?: 'openai' | 'anthropic';
|
|
1973
|
+
/** 写驱动过期读失效(默认 true);false = 主/子一致关闭 */
|
|
1974
|
+
staleReadInvalidation?: boolean;
|
|
1975
|
+
debug?: boolean;
|
|
1976
|
+
}
|
|
1977
|
+
/** createAgent 返回实例(headless/高级集成直接驱动的面) */
|
|
1978
|
+
export interface AgentInstance {
|
|
1979
|
+
/** 单次对话 invoke(完整 ReAct 循环,返回最终文本) */
|
|
1980
|
+
invoke(messages: AgentMessage[], signal?: AbortSignal, onEvent?: StreamHandler): Promise<string>;
|
|
1981
|
+
/** 流式对话(事件逐个 onEvent,返回最终文本) */
|
|
1982
|
+
stream(messages: AgentMessage[], onEvent: StreamHandler, signal?: AbortSignal): Promise<string>;
|
|
1983
|
+
/** 运行态快照(messages/todos/files/mission/focuses 等) */
|
|
1984
|
+
getState(): HarnessState;
|
|
1985
|
+
/** 全部工具(getter:setTools 后重赋值,始终取最新) */
|
|
1986
|
+
readonly allTools: import('@langchain/core/tools').StructuredToolInterface[];
|
|
1987
|
+
/** stale-read-invalidation 会话累计失效数 */
|
|
1988
|
+
getStaleReadsInvalidated(): number;
|
|
1989
|
+
/** 模型调用重试会话累计(环境故障 vs SDK 回归的第一判据) */
|
|
1990
|
+
getLlmRetries(): number;
|
|
1991
|
+
getLlmCallFailures(): number;
|
|
1992
|
+
/** 会话切换/重置时清零(stale-read + 重试/终败三计数) */
|
|
1993
|
+
resetSessionCounters(): void;
|
|
1994
|
+
/** 运行时重设用户工具(与中间件贡献工具合并) */
|
|
1995
|
+
setTools(userTools: import('@langchain/core/tools').StructuredToolInterface[]): void;
|
|
1996
|
+
/** 运行时切换 LLM 实例(替换 + rebind + onLlmChange 回调;新模型不支持 tool calling 时退裸 llm 不崩) */
|
|
1997
|
+
setLlm(newLlm: import('@langchain/core/language_models/chat_models').BaseChatModel): void;
|
|
1998
|
+
/** setLlm 后回灌模型能力(contextWindow/maxOutputTokens) */
|
|
1999
|
+
setModelCaps(newCaps: ModelCaps): void;
|
|
2000
|
+
/** 调试日志(响应式;FIFO ≤300,单条体积守卫) */
|
|
2001
|
+
debugLogs: Ref<DebugLog[]>;
|
|
2002
|
+
/** 内部权威拼装的最终 system prompt(base + Σ augmentPrompt,单一真相源) */
|
|
2003
|
+
getEffectiveSystemPrompt(): string;
|
|
2004
|
+
}
|
|
2005
|
+
export declare function createAgent(options: CreateAgentOptions): AgentInstance;
|
|
1855
2006
|
/** 检测模型把工具调用写成文本(伪 XML/标签)而非标准 tool_calls 的异常格式;主循环据此回灌 feedback 自纠 */
|
|
1856
2007
|
export declare function detectGarbledToolCall(content: string): boolean;
|
|
1857
|
-
|
|
2008
|
+
/** 子 agent LLM 配置(createSubagentMiddleware/子 agent 走 LLMConfig 构造时的模型面) */
|
|
2009
|
+
export interface SubagentLlmConfig {
|
|
2010
|
+
apiKey: string;
|
|
2011
|
+
/** provider 透传:缺省 'openai';'anthropic' 子 agent 同走 Claude 原生协议(动态 import 异步构造) */
|
|
2012
|
+
provider?: 'openai' | 'anthropic';
|
|
2013
|
+
baseUrl?: string;
|
|
2014
|
+
model?: string;
|
|
2015
|
+
temperature?: number;
|
|
2016
|
+
maxTokens?: number;
|
|
2017
|
+
/** 透传 openai configuration 额外字段(headers/fetch 等;子 agent 兜底构造时同主 LLM 生效) */
|
|
2018
|
+
extraConfig?: Record<string, any>;
|
|
2019
|
+
/** 透传 modelKwargs(如 deepseek thinking);子 agent 兜底构造时同主 LLM 生效 */
|
|
2020
|
+
extraBody?: Record<string, any>;
|
|
2021
|
+
/** Anthropic prompt caching(provider:'anthropic' 时经构造透传生效) */
|
|
2022
|
+
cacheControl?: boolean | '5m' | '1h';
|
|
2023
|
+
/** Anthropic extended thinking(provider:'anthropic');通常不手配 —— 用 thinkingMode:'deep' 自动注入 */
|
|
2024
|
+
thinking?: { type: 'enabled'; budget_tokens: number };
|
|
2025
|
+
}
|
|
2026
|
+
/** createSubagentMiddleware 选项(spawn_agent 的运行时覆盖参数是 spawn 工具 zod args,非此类型) */
|
|
2027
|
+
export interface SubagentOptions {
|
|
2028
|
+
/** 主 agent 的 LLM(配置对象或预构造实例,子 agent 复用) */
|
|
2029
|
+
llm: SubagentLlmConfig | import('@langchain/core/language_models/chat_models').BaseChatModel;
|
|
2030
|
+
/** 主 agent 全部工具(子 agent 按白名单筛选只读子集);支持 getter:setTools 动态加的工具对子 agent 立即可见 */
|
|
2031
|
+
allTools: import('@langchain/core/tools').StructuredToolInterface[] | (() => import('@langchain/core/tools').StructuredToolInterface[]);
|
|
2032
|
+
/** 子 agent 额外可用的工具名(默认仅只读主数据 + fetch) */
|
|
2033
|
+
allowedTools?: string[];
|
|
2034
|
+
/** 子 agent 默认身份(spawn 运行时的 role 优先;都缺省用兜底) */
|
|
2035
|
+
systemPrompt?: string;
|
|
2036
|
+
/** 子 agent 温度(仅 llm 配置对象时生效;覆盖主 llm 温度) */
|
|
2037
|
+
temperature?: number;
|
|
2038
|
+
/** 子 agent maxTokens(仅 llm 配置对象时生效;覆盖主) */
|
|
2039
|
+
maxTokens?: number;
|
|
2040
|
+
/** 子 agent 专属 skills(独立,不继承主 agent skills) */
|
|
2041
|
+
skills?: SkillSpec[];
|
|
2042
|
+
/** 子 agent 额外工具(直接进工具池,不经 allTools 白名单筛选;供预声明子 agent 的专属 tools) */
|
|
2043
|
+
extraTools?: import('@langchain/core/tools').StructuredToolInterface[];
|
|
2044
|
+
/** 最大递归深度(默认 1:主可 spawn,子不可再 spawn) */
|
|
2045
|
+
maxDepth?: number;
|
|
2046
|
+
/** spawn_agents 并发上限(默认 4) */
|
|
2047
|
+
maxParallel?: number;
|
|
2048
|
+
/** 子 agent 最大工具轮次(默认 6) */
|
|
2049
|
+
maxToolRounds?: number;
|
|
2050
|
+
/** 当前递归深度(内部用;主=0) */
|
|
2051
|
+
depth?: number;
|
|
2052
|
+
debug?: boolean;
|
|
2053
|
+
/** 子 agent 可写路径前缀白名单(写工具包 path guard,越界 PATH_OUT_OF_SCOPE;整体 set 禁) */
|
|
2054
|
+
writablePaths?: string[];
|
|
2055
|
+
/** 读主 agent 全部焦点(multi-focus:子 agent 继承主焦点 → 构造 initialFocuses) */
|
|
2056
|
+
getFocuses?: () => Focus[];
|
|
2057
|
+
/** 取主数据 schema getter(focus 视野收敛 + path 校验用;透传主 liveData schema) */
|
|
2058
|
+
getSchema?: () => import('zod').ZodType | null | undefined;
|
|
2059
|
+
/** 取主数据 bind getter(focus 尾部追加分判:读数组实际长度;透传主 liveData bind) */
|
|
2060
|
+
getBind?: () => unknown;
|
|
2061
|
+
/** 子 agent 自定义中间件(如给规划能力);装在 skills/递归/focus 之后,对齐主「内置→用户」序 */
|
|
2062
|
+
middleware?: Middleware[];
|
|
2063
|
+
/** 跨轮上下文压缩;true=默认索引摘要(零 LLM),或 SummarizationOptions 自配(含 llmInvoke 升级 LLM 摘要)。不传=不装 */
|
|
2064
|
+
summarization?: boolean | SummarizationOptions;
|
|
2065
|
+
/** 观察层 tracker(createChatSdk 注入共享实例;记录委派 active/history)。不传=不记录 */
|
|
2066
|
+
tracker?: SubagentTracker;
|
|
2067
|
+
/** 子栈继承的把关中间件(主 permissions/approval 同实例;序同主栈)。不传=无 guard */
|
|
2068
|
+
guardMiddleware?: Middleware[];
|
|
2069
|
+
/** 主 vfs files getter(子 offload 大结果桥接进主 vfs 共享池,子 vfs_* 回读不 404)。不传=无桥接 */
|
|
2070
|
+
getVfsFiles?: () => Record<string, VfsFile>;
|
|
2071
|
+
/** 进入数据 scope(子 agent 委派期间 autoLock 基线归属切到子 scope,防子 read 污染主基线)。返回恢复函数 */
|
|
2072
|
+
enterDataScope?: (scopeId: string) => () => void;
|
|
2073
|
+
/** 退出数据 scope(委派结束清子 scope 基线条目) */
|
|
2074
|
+
exitDataScope?: (scopeId: string) => void;
|
|
2075
|
+
/** 子流 settle 通知(内部 per-call:use_<id> 组件锁的 release 挂此点,防超时旧 wind-down 与重委派竞态) */
|
|
2076
|
+
onStreamSettled?: (p: Promise<unknown>) => void;
|
|
2077
|
+
/** 子 agent LLM usage 回传(createChatSdk 累加进 core.usage)。不传=不回传 */
|
|
2078
|
+
onUsage?: (u: TokenUsage) => void;
|
|
2079
|
+
/** 单个子 agent 执行超时 ms(超时 abort 子流 + recoverable 回灌;0/负 = 关) */
|
|
2080
|
+
timeoutMs?: number;
|
|
2081
|
+
/** beforeReturn 自纠上限(默认 0 = 关闭);>0 时子 agent 返回前跑中间件 beforeReturn 钩子(如 verify 格式门禁) */
|
|
2082
|
+
maxVerifyAttempts?: number;
|
|
2083
|
+
/** 思考深度锁定('deep' 注入 thinking / 'simple' 剥除)。仅 LLMConfig 构造路径生效;实例路径 warn + no-op */
|
|
2084
|
+
thinkingMode?: 'simple' | 'deep';
|
|
2085
|
+
/** 写驱动过期读失效透传(顶层 false 必须主/子一致;未设 = 子 agent 默认 true 与主一致) */
|
|
2086
|
+
staleReadInvalidation?: boolean;
|
|
2087
|
+
}
|
|
2088
|
+
export declare function createSubagentMiddleware(opts: SubagentOptions): Middleware;
|
|
1858
2089
|
export declare function createVerifyMiddleware(opts: VerifyMiddlewareOptions): any;
|
|
1859
2090
|
export declare function createWriteBackCheck(opts?: WriteBackCheckOptions): VerifyCheck;
|
|
1860
2091
|
export declare function createMemoryMiddleware(memory?: string | (() => string | Promise<string>)): any;
|
|
@@ -1988,7 +2219,12 @@ export declare function agentError(severity: ErrorSeverity, message: string, cod
|
|
|
1988
2219
|
|
|
1989
2220
|
// === 与 src/core/index.ts 导出对齐(消费者类型完整;复杂内部类型用宽松声明,消费者主要消费工厂返回值) ===
|
|
1990
2221
|
// 上下文压缩预设
|
|
1991
|
-
|
|
2222
|
+
/** createChatSdk/contextPreset 的压缩配置入口形态 */
|
|
2223
|
+
export interface ContextOptionsInput {
|
|
2224
|
+
contextPreset?: ContextPreset;
|
|
2225
|
+
contextOptions?: Partial<ContextManagerOptions> | false;
|
|
2226
|
+
}
|
|
2227
|
+
export declare function resolveContextOptions(options: ContextOptionsInput, modelContextWindow: number): Partial<ContextManagerOptions>;
|
|
1992
2228
|
export type ContextPreset = 'auto' | 'conservative' | 'aggressive' | 'complex';
|
|
1993
2229
|
export declare const CONTEXT_PRESETS: Record<string, any>;
|
|
1994
2230
|
|
|
@@ -1998,13 +2234,171 @@ export declare function extractText(result: any): string;
|
|
|
1998
2234
|
export type McpTransport = 'http' | 'sse' | 'websocket';
|
|
1999
2235
|
export interface McpConnection { [k: string]: any }
|
|
2000
2236
|
|
|
2001
|
-
// harness / 中间件
|
|
2002
|
-
|
|
2003
|
-
export
|
|
2004
|
-
|
|
2005
|
-
export interface
|
|
2006
|
-
|
|
2007
|
-
|
|
2237
|
+
// ===== harness / 中间件(E1 API 面收口:真实签名投射,与 src/core/harness 逐字段对齐;types-alignment Same<> 门禁锁定) =====
|
|
2238
|
+
/** todo 状态 */
|
|
2239
|
+
export type TodoStatus = 'pending' | 'in_progress' | 'completed';
|
|
2240
|
+
/** 计划项(write_todos 整表替换 + update_todo 增量更新) */
|
|
2241
|
+
export interface Todo {
|
|
2242
|
+
/** 稳定标识:write_todos 时框架按 index 生成 t-1/t-2…(LLM 也可显式传);输出必有、输入可选(向后兼容) */
|
|
2243
|
+
id: string;
|
|
2244
|
+
content: string;
|
|
2245
|
+
status: TodoStatus;
|
|
2246
|
+
/** 父 todo id(表达层级;可选) */
|
|
2247
|
+
parentId?: string;
|
|
2248
|
+
/** 依赖的 todo id 数组(必须先完成;渲染标 ✓/⏳) */
|
|
2249
|
+
deps?: string[];
|
|
2250
|
+
/** 完成标准(可选,LLM 自填) */
|
|
2251
|
+
criteria?: string;
|
|
2252
|
+
/** 完成证据(可选,如实际写入的 jsonPath) */
|
|
2253
|
+
evidence?: string;
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
/** 虚拟工作区文件 */
|
|
2257
|
+
export interface VfsFile {
|
|
2258
|
+
content: string;
|
|
2259
|
+
mimeType?: string;
|
|
2260
|
+
updatedAt: number;
|
|
2261
|
+
}
|
|
2262
|
+
|
|
2263
|
+
/** skill 元数据(渐进式披露的索引层) */
|
|
2264
|
+
export interface SkillMeta {
|
|
2265
|
+
name: string;
|
|
2266
|
+
description: string;
|
|
2267
|
+
}
|
|
2268
|
+
|
|
2269
|
+
/** 上下文压缩事件(cutoff-event 模式:不删消息,记录截断点 + 摘要) */
|
|
2270
|
+
export interface SummarizationEvent {
|
|
2271
|
+
cutoffIndex: number;
|
|
2272
|
+
summary: string;
|
|
2273
|
+
evictedTo?: string;
|
|
2274
|
+
}
|
|
2275
|
+
|
|
2276
|
+
/** 单次 invoke 的执行进度(agent 自感知预算的数据源;中间件只读勿改) */
|
|
2277
|
+
export interface LoopProgress {
|
|
2278
|
+
/** 已消耗工具轮次 */
|
|
2279
|
+
rounds: number;
|
|
2280
|
+
/** 本 invoke 工具轮预算(maxToolRounds) */
|
|
2281
|
+
maxToolRounds: number;
|
|
2282
|
+
/** 本 invoke 累计 token 用量(每轮模型调用后累加;与 sdk.usage 会话级口径区分) */
|
|
2283
|
+
invokeUsage: { prompt_tokens: number; completion_tokens: number; total_tokens: number };
|
|
2284
|
+
/** 写工具同路径连续失败计数(path → 次数;写成功清零) */
|
|
2285
|
+
writeFailures: Record<string, number>;
|
|
2286
|
+
/** 预算提示是否已注入(每任务一次,防每轮复读刷存在感) */
|
|
2287
|
+
budgetHinted: boolean;
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
/** Harness 运行态(中间件维护 state 字段,last-writer 合并;Deep Agents 的 agent state 同位物) */
|
|
2291
|
+
export interface HarnessState {
|
|
2292
|
+
/** 用户层对话历史(跨轮) */
|
|
2293
|
+
messages: AgentMessage[];
|
|
2294
|
+
/** 计划清单(planning 中间件维护) */
|
|
2295
|
+
todos: Todo[];
|
|
2296
|
+
/** 内存虚拟工作区(vfs 中间件维护) */
|
|
2297
|
+
files: Record<string, VfsFile>;
|
|
2298
|
+
/** 已注册 skill 的索引(name + description),注入 system prompt */
|
|
2299
|
+
skillsMetadata: SkillMeta[];
|
|
2300
|
+
/** 已加载全文的 skill 名(避免重复加载) */
|
|
2301
|
+
skillsLoaded: string[];
|
|
2302
|
+
/** AGENTS.md 风格持久指令 */
|
|
2303
|
+
memory: string;
|
|
2304
|
+
/** 上下文压缩事件(summarization 中间件维护) */
|
|
2305
|
+
summarization?: SummarizationEvent;
|
|
2306
|
+
/** 最近一次跨轮压缩统计(createAgent 写入,供 DebugDrawer 可观测) */
|
|
2307
|
+
lastCompression?: CompressionStats;
|
|
2308
|
+
/** beforeReturn 自纠计数(达 maxVerifyAttempts 强制 return 防死循环) */
|
|
2309
|
+
verifyAttempts: number;
|
|
2310
|
+
/** 子 agent 标记(spawn/use 委派建的子循环置 true;主栈门禁据此豁免) */
|
|
2311
|
+
__pgIsSubagent?: boolean;
|
|
2312
|
+
/** 会话级任务目标锚定(mission 中间件;augmentPrompt 每轮注入,天然跨压缩) */
|
|
2313
|
+
mission?: Mission;
|
|
2314
|
+
/** 跨压缩工作记忆(workingMemory 中间件;pin 最近定位 path + read hash) */
|
|
2315
|
+
workingMemory?: WorkingMemory;
|
|
2316
|
+
/** 聚焦焦点(focus=首个兼容旧读,focuses=全量数组 multi-focus) */
|
|
2317
|
+
focus?: Focus;
|
|
2318
|
+
focuses?: Focus[];
|
|
2319
|
+
/** 当前 invoke 的执行进度(createAgent 每轮更新) */
|
|
2320
|
+
loopProgress?: LoopProgress;
|
|
2321
|
+
}
|
|
2322
|
+
|
|
2323
|
+
/** 模型调用请求 */
|
|
2324
|
+
export interface ModelRequest {
|
|
2325
|
+
messages: import('@langchain/core/messages').BaseMessage[];
|
|
2326
|
+
state: HarnessState;
|
|
2327
|
+
}
|
|
2328
|
+
|
|
2329
|
+
/** 模型调用响应 */
|
|
2330
|
+
export interface ModelResponse {
|
|
2331
|
+
message: import('@langchain/core/messages').BaseMessage;
|
|
2332
|
+
toolCalls: Array<{ id?: string; name: string; args: Record<string, unknown> }>;
|
|
2333
|
+
content: string;
|
|
2334
|
+
/** 模型流被 abort(用户停止):true 时 content 为已累积的 partial,应保留并结束本轮(不再执行工具) */
|
|
2335
|
+
aborted?: boolean;
|
|
2336
|
+
}
|
|
2337
|
+
|
|
2338
|
+
/** beforeReturn 钩子上下文(agent 即将返回最终结果前) */
|
|
2339
|
+
export interface BeforeReturnContext {
|
|
2340
|
+
messages: import('@langchain/core/messages').BaseMessage[];
|
|
2341
|
+
state: HarnessState;
|
|
2342
|
+
response: ModelResponse;
|
|
2343
|
+
/** 日志下沉:写主 debugLogs(verify 对抗审查等用它记录可观察日志) */
|
|
2344
|
+
log?: (type: string, data: unknown) => void;
|
|
2345
|
+
}
|
|
2346
|
+
|
|
2347
|
+
/** beforeReturn 钩子:返回 feedback 字符串 → 回灌 user 消息继续循环(自纠);null/undefined → 放行 return */
|
|
2348
|
+
export type BeforeReturnHook = (ctx: BeforeReturnContext) => Promise<string | null> | string | null;
|
|
2349
|
+
|
|
2350
|
+
/** 中间件返回的 state 更新(last-writer 合并) */
|
|
2351
|
+
export type StateUpdate = Partial<HarnessState>;
|
|
2352
|
+
|
|
2353
|
+
/** 工具执行结果 */
|
|
2354
|
+
export interface ToolExecResult {
|
|
2355
|
+
content: string;
|
|
2356
|
+
status: 'done' | 'error';
|
|
2357
|
+
}
|
|
2358
|
+
|
|
2359
|
+
/** 工具调用上下文 */
|
|
2360
|
+
export interface ToolCallContext {
|
|
2361
|
+
id: string;
|
|
2362
|
+
name: string;
|
|
2363
|
+
args: Record<string, unknown>;
|
|
2364
|
+
state: HarnessState;
|
|
2365
|
+
/** 当前 agent 循环的 abort signal(中间件可据此感知用户停止) */
|
|
2366
|
+
signal?: AbortSignal;
|
|
2367
|
+
/** 主循环事件转发(供 spawn 把子 agent 进度冒泡到 UI;不进入主 LLM 上下文) */
|
|
2368
|
+
emit?: (event: StreamEvent) => void;
|
|
2369
|
+
/** 日志下沉(供 spawn 把子 agent 的 debugLog 转发到主;子日志带 source 标签) */
|
|
2370
|
+
logSink?: (entry: any) => void;
|
|
2371
|
+
/** per-call 注入 bag:中间件在 wrapToolCall 往 ctx 写键值,coreExecTool 经 RunnableConfig.configurable 透传到工具 fn 第二参 */
|
|
2372
|
+
callConfig?: Record<string, unknown>;
|
|
2373
|
+
}
|
|
2374
|
+
|
|
2375
|
+
/**
|
|
2376
|
+
* 中间件契约(10 钩子;生命周期 before 类正序、after 类逆序、wrap 类洋葱,装载序见 doc/architecture.md §②)。
|
|
2377
|
+
* ⚠️ 4.13.0 起为真实签名(原 [k:string]:any 收紧):拼错的钩子名此前运行期静默失效,现在编译期报错(揭示已坏代码)。
|
|
2378
|
+
*/
|
|
2379
|
+
export interface Middleware {
|
|
2380
|
+
name: string;
|
|
2381
|
+
/** 该中间件贡献的工具,合并进工具集 */
|
|
2382
|
+
tools?: import('@langchain/core/tools').StructuredToolInterface[];
|
|
2383
|
+
/** 追加到 system prompt 的段(每轮模型调用前收集渲染) */
|
|
2384
|
+
augmentPrompt?: (state: HarnessState) => string | undefined;
|
|
2385
|
+
/** 构建上下文前压缩历史消息(summarization 中间件用,链式) */
|
|
2386
|
+
compressInput?: (messages: AgentMessage[]) => Promise<{ messages: AgentMessage[]; stats?: unknown }> | AgentMessage[];
|
|
2387
|
+
/** agent 启动时(正序) */
|
|
2388
|
+
beforeAgent?: (state: HarnessState) => StateUpdate | void | Promise<StateUpdate | void>;
|
|
2389
|
+
/** 每次模型调用前(正序,同步),可更新 state(随后重渲染 system) */
|
|
2390
|
+
beforeModel?: (req: ModelRequest) => StateUpdate | void;
|
|
2391
|
+
/** 包裹模型调用(洋葱,可改 messages / 拦截) */
|
|
2392
|
+
wrapModelCall?: (req: ModelRequest, next: (req: ModelRequest) => Promise<ModelResponse>) => Promise<ModelResponse>;
|
|
2393
|
+
/** 模型返回后(逆序) */
|
|
2394
|
+
afterModel?: (res: ModelResponse, state: HarnessState) => StateUpdate | void;
|
|
2395
|
+
/** 包裹工具执行(洋葱) */
|
|
2396
|
+
wrapToolCall?: (ctx: ToolCallContext, next: (ctx: ToolCallContext) => Promise<ToolExecResult>) => Promise<ToolExecResult>;
|
|
2397
|
+
/** agent 结束时(逆序,必跑含早退路径) */
|
|
2398
|
+
afterAgent?: (state: HarnessState) => StateUpdate | void | Promise<StateUpdate | void>;
|
|
2399
|
+
/** agent 即将返回最终结果前(正序):feedback 触发自纠(回灌 user 消息继续循环);null 放行。受 createAgent maxVerifyAttempts 约束 */
|
|
2400
|
+
beforeReturn?: BeforeReturnHook;
|
|
2401
|
+
}
|
|
2008
2402
|
|
|
2009
2403
|
// 子 agent
|
|
2010
2404
|
export declare function createSubagentsMiddleware(opts: any): any;
|
|
@@ -2014,17 +2408,6 @@ export interface SubagentsController {
|
|
|
2014
2408
|
remove(id: string): boolean;
|
|
2015
2409
|
get(): SubagentConfig[];
|
|
2016
2410
|
}
|
|
2017
|
-
/** spawn_agent / spawn_agents 运行时选项(role/tools/writablePaths 等可运行时覆盖) */
|
|
2018
|
-
export interface SubagentOptions {
|
|
2019
|
-
role?: string;
|
|
2020
|
-
tools?: string[];
|
|
2021
|
-
/** 子 agent 可写路径前缀白名单(运行时覆盖;写工具包 path guard,越界 PATH_OUT_OF_SCOPE)。subagent-writable Phase 2 */
|
|
2022
|
-
writablePaths?: string[];
|
|
2023
|
-
model?: string;
|
|
2024
|
-
[k: string]: any;
|
|
2025
|
-
}
|
|
2026
|
-
export interface SubagentLlmConfig { [k: string]: any }
|
|
2027
|
-
|
|
2028
2411
|
// 能力包(专用子 agent 工厂):RAG 多源检索 + HTML 代码组件生成(add-capability-packs)
|
|
2029
2412
|
export interface RagHit { content: string; source?: string; score?: number }
|
|
2030
2413
|
export interface RagRetrieveOptions { topK?: number }
|
|
@@ -2186,11 +2569,103 @@ export interface DataAuditEntry { [k: string]: any }
|
|
|
2186
2569
|
export interface DataSnapshotEntry { [k: string]: any }
|
|
2187
2570
|
export type PermissionOp = string;
|
|
2188
2571
|
|
|
2189
|
-
// vfs
|
|
2190
|
-
|
|
2572
|
+
// vfs(E1 API 面收口:createVfs 真实签名 + 四池配置类型;与 src backends/vfs 对齐)
|
|
2573
|
+
/** vfs 持久化钩子 */
|
|
2574
|
+
export interface VfsPersist {
|
|
2575
|
+
/** 文件变更后回调(debounce 由 createChatSdk 控制落盘) */
|
|
2576
|
+
save?: (files: Record<string, VfsFile>) => void;
|
|
2577
|
+
}
|
|
2578
|
+
/** vfs 分池键(按 path 前缀路由:large_results/* / drafts/* / resources/* / 其他) */
|
|
2579
|
+
export type VfsPoolKey = 'largeResults' | 'drafts' | 'userFiles' | 'resources';
|
|
2580
|
+
/** createVfs 选项 */
|
|
2581
|
+
export interface VfsOptions {
|
|
2582
|
+
/** 持久化钩子(可选) */
|
|
2583
|
+
persist?: VfsPersist;
|
|
2584
|
+
/** 工作区总内存上限(默认 8MB,OOM 兜底;四池独立上限之和可能超过,由总上限最后约束);纯内存也生效 */
|
|
2585
|
+
maxBytes?: number;
|
|
2586
|
+
/** 单池上限(可选,覆盖默认 largeResults=4MB / drafts=2MB / userFiles=2MB / resources=4MB);四池独立 LRU 互不挤占 */
|
|
2587
|
+
poolBytes?: Partial<Record<VfsPoolKey, number>>;
|
|
2588
|
+
}
|
|
2589
|
+
/** vfs 实例(Proxy 包裹 files:变更捕获 → 记账 + LRU;读写经工具层) */
|
|
2590
|
+
export interface VfsStore {
|
|
2591
|
+
files: Record<string, VfsFile>;
|
|
2592
|
+
/** 持久化恢复:直接灌入 raw target,不触发 save(仅 persist 模式) */
|
|
2593
|
+
hydrate?: (files: Record<string, VfsFile>) => void;
|
|
2594
|
+
/** 立即落盘(清 debounce 窗口);pagehide 兜底用(仅 persist 模式) */
|
|
2595
|
+
flush?: () => void;
|
|
2596
|
+
/** 清空工作区 + 触发落盘空(新会话用,仅 persist 模式) */
|
|
2597
|
+
clear?: () => void;
|
|
2598
|
+
/** 是否有未捕获到 checkpoint 的写(供 checkpoint 增量 save 检查;非持久化模式也暴露) */
|
|
2599
|
+
isDirty?: () => boolean;
|
|
2600
|
+
/** 读后清脏标记,返回是否脏;checkpoint save 消费(脏→clone 新基线,不脏→复用上次 clone) */
|
|
2601
|
+
consumeDirty?: () => boolean;
|
|
2602
|
+
/** 设置被引用保护集(LRU 淘汰时跳过被消息引用的 large_results,防 vfs_read 404) */
|
|
2603
|
+
setProtectedRefs?: (refs: Set<string>) => void;
|
|
2604
|
+
/** path → 所属池(超池预检用) */
|
|
2605
|
+
getPoolOf?: (path: string) => string;
|
|
2606
|
+
/** 池上限字节(超池预检用) */
|
|
2607
|
+
getPoolLimit?: (pool: string) => number;
|
|
2608
|
+
}
|
|
2609
|
+
/**
|
|
2610
|
+
* 创建一个 vfs 实例。
|
|
2611
|
+
* @param initialFiles 初始文件(path → content)
|
|
2612
|
+
* @param opts.persist 持久化钩子;提供则用 Proxy 捕获 store.files 变更 → debounce save
|
|
2613
|
+
*/
|
|
2614
|
+
export declare function createVfs(initialFiles?: Record<string, string>, opts?: VfsOptions): VfsStore;
|
|
2191
2615
|
|
|
2192
|
-
// 上下文管理
|
|
2193
|
-
export interface ContextManagerOptions {
|
|
2616
|
+
// 上下文管理(E1 API 面收口:与 src composables/useContextManager 对齐)
|
|
2617
|
+
export interface ContextManagerOptions {
|
|
2618
|
+
/** 滑动窗口:保留最近几轮完整对话(轮数模式用) */
|
|
2619
|
+
windowRounds: number;
|
|
2620
|
+
/** 超过多少轮触发摘要压缩(轮数模式用,含窗口内) */
|
|
2621
|
+
summaryThresholdRounds: number;
|
|
2622
|
+
/** 旧工具结果截断长度(单轮 ReAct 内) */
|
|
2623
|
+
toolResultMaxChars: number;
|
|
2624
|
+
/** 是否启用关键词召回相关历史 */
|
|
2625
|
+
enableRecall: boolean;
|
|
2626
|
+
/** 召回的最大轮次数 */
|
|
2627
|
+
recallTopK: number;
|
|
2628
|
+
/** 是否启用 LLM 增强摘要(否则用零成本索引摘要) */
|
|
2629
|
+
enableLLMSummary: boolean;
|
|
2630
|
+
/** 用于摘要的 LLM invoke 函数(可选) */
|
|
2631
|
+
llmInvoke?: (prompt: string) => Promise<string>;
|
|
2632
|
+
/** 模型上下文窗口(token);提供则按 token 触发压缩 + token 窗口,否则按轮数 */
|
|
2633
|
+
contextWindow?: number;
|
|
2634
|
+
/** 触发压缩的 token 比例(默认 0.5) */
|
|
2635
|
+
summaryThresholdRatio?: number;
|
|
2636
|
+
/** prompt 软上限(token,成本维度);窗口 ≥320K 未传时默认 160K;显式传 0 关闭 */
|
|
2637
|
+
promptSoftCapTokens?: number;
|
|
2638
|
+
/** 保留最近窗口的 token 预算比例(默认 0.4) */
|
|
2639
|
+
windowRatio?: number;
|
|
2640
|
+
/** 压缩时注入「当前可操作数据」快照(防 LLM 基于过时记忆操作已卸载/新增的动态组件) */
|
|
2641
|
+
getRegisteredData?: () => { description: string }[];
|
|
2642
|
+
/** @deprecated 旧多对象模型遗留(单对象 data 模式用 getRegisteredData);仍兼容,返回值 path 字段忽略 */
|
|
2643
|
+
getRegisteredSlots?: () => { path: string; description: string }[];
|
|
2644
|
+
/** 跨轮摘要时,对这些工具的步骤 result 额外保留摘要片段进 summaryMsg(防字段描述被摘要掉) */
|
|
2645
|
+
preserveLastToolResults?: string[];
|
|
2646
|
+
}
|
|
2647
|
+
/** 压缩决策输入(agent-driven-compression;decideInvoke 的载荷) */
|
|
2648
|
+
export interface CompressDecisionInput {
|
|
2649
|
+
/** 当前消息(供 inspect_context 组合 rounds + totalTokens) */
|
|
2650
|
+
getMessages: () => AgentMessage[];
|
|
2651
|
+
/** contextInspector 快照(可选,inspect_context 的 categories 来源) */
|
|
2652
|
+
getSnapshot?: () => ContextSnapshot | undefined;
|
|
2653
|
+
/** 模型上下文窗口(inspect_context occupancy + 决策 prompt) */
|
|
2654
|
+
contextWindow?: number;
|
|
2655
|
+
/** 压缩触发阈值比例(进 prompt 供 LLM 参考) */
|
|
2656
|
+
thresholdRatio?: number;
|
|
2657
|
+
/** 触发原因(进 prompt,如「token 超阈值」「轮数超阈值」) */
|
|
2658
|
+
triggerReason: string;
|
|
2659
|
+
/** 触发模式(决定 LLM 填 keepRounds 还是 windowRatio) */
|
|
2660
|
+
triggerMode: 'token' | 'rounds';
|
|
2661
|
+
}
|
|
2662
|
+
/** summarization 中间件选项(压缩策略;Partial<ContextManagerOptions> + LLM 决策钩子) */
|
|
2663
|
+
export interface SummarizationOptions extends Partial<ContextManagerOptions> {
|
|
2664
|
+
/** 压缩决策 invoke(agentCompression 开启时;成功 → 用决策,失败/null → 降级静态) */
|
|
2665
|
+
decideInvoke?: (input: CompressDecisionInput) => Promise<CompressDecision | null>;
|
|
2666
|
+
/** contextInspector 快照 getter(供 inspect_context 的 categories + decide) */
|
|
2667
|
+
getSnapshot?: () => ContextSnapshot | undefined;
|
|
2668
|
+
}
|
|
2194
2669
|
export interface CompressionStats {
|
|
2195
2670
|
triggered: boolean; roundsTotal: number; roundsSummarized: number; roundsRecalled: number;
|
|
2196
2671
|
originalMessages: number; compressedMessages: number; strategy: string;
|
|
@@ -2229,7 +2704,17 @@ export declare function lowCapsHint(model: string | undefined, caps: { contextWi
|
|
|
2229
2704
|
export declare function estimateTokens(text: string): number;
|
|
2230
2705
|
export declare function offloadThresholdChars(contextWindow: number): number;
|
|
2231
2706
|
export declare function offloadPassThroughChars(contextWindow: number): number;
|
|
2232
|
-
|
|
2707
|
+
/** 模型能力(集成方声明 > model 名查表 > 缺省) */
|
|
2708
|
+
export interface ModelCaps {
|
|
2709
|
+
/** 模型上下文窗口(token) */
|
|
2710
|
+
contextWindow: number;
|
|
2711
|
+
/** 模型最大输出(token) */
|
|
2712
|
+
maxOutputTokens: number;
|
|
2713
|
+
/** 是否支持多模态识图:true = user 消息 images 组装 content parts 直发;缺省 false(保守,宁走旁路/报错不误发 parts 吃 400) */
|
|
2714
|
+
vision?: boolean;
|
|
2715
|
+
/** 是否支持思考/推理模式:true = 集成方未显式配置时默认注入 thinking(deep)保质量;缺省 false(未知模型不猜,防 400) */
|
|
2716
|
+
thinking?: boolean;
|
|
2717
|
+
}
|
|
2233
2718
|
|
|
2234
2719
|
// 剪贴板复制(clipboard API + execCommand 降级,兼容非 secure context / 旧浏览器)
|
|
2235
2720
|
export declare function copyText(text: string): Promise<boolean>;
|
|
@@ -2294,7 +2779,7 @@ export declare function diffReport(current: Record<string, number>, baseline: Re
|
|
|
2294
2779
|
/** harness 依赖的最小 sdk 面(结构子集;ChatSdk 满足 —— 直接传 sdk 即可) */
|
|
2295
2780
|
export interface EvalSdkLike {
|
|
2296
2781
|
messages: unknown[];
|
|
2297
|
-
debugLogs:
|
|
2782
|
+
debugLogs: Ref<DebugLog[]>;
|
|
2298
2783
|
usage?: { prompt: number; completion: number; cacheRead?: number; cacheCreate?: number };
|
|
2299
2784
|
inspect?: () => { subagent?: { active?: unknown[] } };
|
|
2300
2785
|
}
|