@zqagent/core 0.1.30 → 0.2.4
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/CONTRIBUTING.md +65 -0
- package/LICENSE +190 -0
- package/README.md +42 -165
- package/README.oss.en.md +161 -0
- package/README.oss.md +165 -0
- package/README.oss.zh-TW.md +165 -0
- package/SECURITY.md +51 -0
- package/dist/{ToolRegistry-BmvPxgMr.d.cts → ToolRegistry-C3pTFiaJ.d.cts} +13 -4
- package/dist/{ToolRegistry-BmvPxgMr.d.ts → ToolRegistry-C3pTFiaJ.d.ts} +13 -4
- package/dist/cli/index.cjs +17799 -2062
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +16729 -985
- package/dist/cli/index.js.map +1 -1
- package/dist/{explore-OI6htHN1.d.cts → explore-D4lCKXbA.d.ts} +160 -19
- package/dist/{explore-Pmhyk4gv.d.ts → explore-Dj1j_GyN.d.cts} +160 -19
- package/dist/index.cjs +3626 -453
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +337 -27
- package/dist/index.d.ts +337 -27
- package/dist/index.js +3617 -452
- package/dist/index.js.map +1 -1
- package/dist/server/index.cjs +14029 -1482
- package/dist/server/index.cjs.map +1 -1
- package/dist/server/index.js +14036 -1482
- package/dist/server/index.js.map +1 -1
- package/dist/tools/ask.cjs +14 -0
- package/dist/tools/ask.cjs.map +1 -1
- package/dist/tools/ask.d.cts +8 -2
- package/dist/tools/ask.d.ts +8 -2
- package/dist/tools/ask.js +13 -0
- package/dist/tools/ask.js.map +1 -1
- package/dist/tools/diff.cjs +59 -30
- package/dist/tools/diff.cjs.map +1 -1
- package/dist/tools/diff.d.cts +1 -1
- package/dist/tools/diff.d.ts +1 -1
- package/dist/tools/diff.js +59 -30
- package/dist/tools/diff.js.map +1 -1
- package/dist/tools/directories.d.cts +1 -1
- package/dist/tools/directories.d.ts +1 -1
- package/dist/tools/explore.cjs +1050 -309
- package/dist/tools/explore.cjs.map +1 -1
- package/dist/tools/explore.d.cts +2 -2
- package/dist/tools/explore.d.ts +2 -2
- package/dist/tools/explore.js +1057 -309
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/files.cjs +58 -43
- package/dist/tools/files.cjs.map +1 -1
- package/dist/tools/files.d.cts +10 -4
- package/dist/tools/files.d.ts +10 -4
- package/dist/tools/files.js +56 -42
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/git.cjs +816 -63
- package/dist/tools/git.cjs.map +1 -1
- package/dist/tools/git.d.cts +200 -2
- package/dist/tools/git.d.ts +200 -2
- package/dist/tools/git.js +788 -62
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/media.cjs +1191 -0
- package/dist/tools/media.cjs.map +1 -0
- package/dist/tools/media.d.cts +31 -0
- package/dist/tools/media.d.ts +31 -0
- package/dist/tools/media.js +1159 -0
- package/dist/tools/media.js.map +1 -0
- package/dist/tools/plan.d.cts +1 -1
- package/dist/tools/plan.d.ts +1 -1
- package/dist/tools/search.cjs +513 -33
- package/dist/tools/search.cjs.map +1 -1
- package/dist/tools/search.d.cts +12 -1
- package/dist/tools/search.d.ts +12 -1
- package/dist/tools/search.js +508 -33
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/shell.cjs +631 -41
- package/dist/tools/shell.cjs.map +1 -1
- package/dist/tools/shell.d.cts +37 -4
- package/dist/tools/shell.d.ts +37 -4
- package/dist/tools/shell.js +626 -40
- package/dist/tools/shell.js.map +1 -1
- package/dist/tools/todo.d.cts +1 -1
- package/dist/tools/todo.d.ts +1 -1
- package/dist/tools/web.cjs +51 -18
- package/dist/tools/web.cjs.map +1 -1
- package/dist/tools/web.d.cts +1 -1
- package/dist/tools/web.d.ts +1 -1
- package/dist/tools/web.js +51 -18
- package/dist/tools/web.js.map +1 -1
- package/package.json +43 -8
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { E as EngineHook, a as
|
|
2
|
-
export { A as ApprovalOutcome,
|
|
3
|
-
import { a as TokenUsage, M as Message, T as ToolRegistry, R as ReasoningEffort } from './ToolRegistry-
|
|
4
|
-
export { A as AssistantTurn, d as RiskClass, S as StreamChunk, e as ToolCall, b as ToolMetadata, c as ToolSchema, f as ToolSpec } from './ToolRegistry-
|
|
5
|
-
export { registerFileTools } from './tools/files.js';
|
|
1
|
+
import { E as EngineHook, C as CompactionStartInfo, a as CompactionDoneInfo, b as EventType, c as EngineErrorInfo, T as TurnEngine, P as ProviderClient, M as Mode } from './explore-D4lCKXbA.js';
|
|
2
|
+
export { A as ApprovalOutcome, d as Approver, e as CompactionTrigger, D as Decision, O as OpenAIProvider, f as PermissionEngine, g as PermissionRequest, h as TurnEngineOpts, W as WsEvent, r as registerExploreTool } from './explore-D4lCKXbA.js';
|
|
3
|
+
import { a as TokenUsage, M as Message, T as ToolRegistry, R as ReasoningEffort } from './ToolRegistry-C3pTFiaJ.js';
|
|
4
|
+
export { A as AssistantTurn, d as RiskClass, S as StreamChunk, e as ToolCall, b as ToolMetadata, c as ToolSchema, f as ToolSpec } from './ToolRegistry-C3pTFiaJ.js';
|
|
5
|
+
export { registerFileTools, registerReadOnlyFileTools } from './tools/files.js';
|
|
6
6
|
export { registerShellTool } from './tools/shell.js';
|
|
7
7
|
export { registerSearchTool } from './tools/search.js';
|
|
8
8
|
export { registerWebTools } from './tools/web.js';
|
|
9
9
|
export { registerGitTools } from './tools/git.js';
|
|
10
10
|
export { registerDiffTools } from './tools/diff.js';
|
|
11
11
|
export { TodoList, registerTodoTool } from './tools/todo.js';
|
|
12
|
-
export {
|
|
12
|
+
export { registerMediaTool } from './tools/media.js';
|
|
13
|
+
export { QuestionHandler, parsePicks, registerAskTool, setQuestionHandler } from './tools/ask.js';
|
|
13
14
|
export { PlanHandler, registerPlanTool, setPlanHandler } from './tools/plan.js';
|
|
14
15
|
export { DirectoryHandler, registerDirectoryTool, setDirectoryHandler } from './tools/directories.js';
|
|
15
16
|
import 'openai/resources/chat/completions.js';
|
|
@@ -22,9 +23,69 @@ import 'openai/core.mjs';
|
|
|
22
23
|
* WsBroadcastHook、SqliteHook 等任意实现。
|
|
23
24
|
*/
|
|
24
25
|
|
|
26
|
+
/** ConsoleHook 构造选项 */
|
|
27
|
+
interface ConsoleHookOptions {
|
|
28
|
+
/**
|
|
29
|
+
* 结果卡片只显示一行摘要的工具名(可选)。
|
|
30
|
+
*
|
|
31
|
+
* 用于「完整结果已由别的渲染器输出」的工具:例如 explore 的子代理报告由
|
|
32
|
+
* SubagentHook 完整渲染在上方,卡片里再贴一份被截断到 200 字符的 JSON 预览
|
|
33
|
+
* 纯属重复噪音。默认空 —— 结果原样多行展示(原有行为)。
|
|
34
|
+
*/
|
|
35
|
+
compactResultTools?: string[];
|
|
36
|
+
}
|
|
25
37
|
declare class ConsoleHook implements EngineHook {
|
|
38
|
+
/** 流式 Markdown 渲染器 */
|
|
39
|
+
private _md;
|
|
40
|
+
/** 思考内容渲染器:同样是 Markdown,但统一灰色(不做彩色/语法高亮) */
|
|
41
|
+
private _reasoningMd;
|
|
42
|
+
/** 本轮是否已输出过思考(reasoning)内容 */
|
|
43
|
+
private _reasoningSeen;
|
|
44
|
+
/** 思考内容是否已闭合(已追加分隔换行) */
|
|
45
|
+
private _reasoningClosed;
|
|
46
|
+
/**
|
|
47
|
+
* 本轮待执行工具的参数:onToolProposed 依次入队(同名 FIFO),
|
|
48
|
+
* onToolFinished 时取出,用于在结果卡片中展示「参数」一项。
|
|
49
|
+
* 每轮 LLM 回复开始时清空,避免被拒/中断的工具残留参数错配到下一轮。
|
|
50
|
+
*/
|
|
51
|
+
private _proposedArgs;
|
|
52
|
+
/**
|
|
53
|
+
* 上一次输出是否已经留下一个空行(卡片/正文块尾部自带空行):
|
|
54
|
+
* 段首统一用 _lead() 补空行,靠这个标志避免叠出两行空行。
|
|
55
|
+
*/
|
|
56
|
+
private _blankEmitted;
|
|
57
|
+
/** 结果卡片只显示一行摘要的工具 */
|
|
58
|
+
private _compactResult;
|
|
59
|
+
constructor(opts?: ConsoleHookOptions);
|
|
60
|
+
/** 段首空行:上一块已留空行则不再补,保证相邻两块之间恰好一行空行 */
|
|
61
|
+
private _lead;
|
|
62
|
+
/** 输出一段已成块的渲染文本,并记下它尾部是否已自带空行 */
|
|
63
|
+
private _writeBlock;
|
|
64
|
+
/** 取出某个工具最早入队的参数(无则 undefined) */
|
|
65
|
+
private _takeArgs;
|
|
66
|
+
/** 用统一的 MarkdownRenderer 渲染一段 Markdown(与审批表同样的彩色终端输出) */
|
|
67
|
+
private _renderMarkdown;
|
|
68
|
+
/**
|
|
69
|
+
* 渲染「标签: 值」一项:首行紧跟标签,换行后的续行按标签宽度缩进对齐,
|
|
70
|
+
* 制表符展开为空格,避免工具结果里的缩进破坏对齐。
|
|
71
|
+
*/
|
|
72
|
+
private _field;
|
|
73
|
+
/**
|
|
74
|
+
* 结果字段的文本:紧凑工具(compactResultTools)压成一行,其余保留原始换行
|
|
75
|
+
* 交给 _field 缩进呈现。压行后按终端列数截断,保证单行不折行。
|
|
76
|
+
*/
|
|
77
|
+
private _resultText;
|
|
78
|
+
/**
|
|
79
|
+
* 工具执行结果卡片:标题(工具 + 状态)后,逐项列出「标签: 值」,项与项之间空行。
|
|
80
|
+
*
|
|
81
|
+
* 不用表格:参数/结果常是长文本(含中英文混排),表格列宽会被最长内容撑开、
|
|
82
|
+
* 触发终端折行后边框错乱;一项一行更稳定、也更好扫读。结果保留原有换行并按值列
|
|
83
|
+
* 缩进(多行报错、diff、文件片段都能看出结构);参数压成一行并截断(细节价值低、
|
|
84
|
+
* 长了必然折行)。字段名与审批表(approvalToMarkdownTable)的用词保持一致。
|
|
85
|
+
*/
|
|
86
|
+
private _toolCard;
|
|
26
87
|
onTurnStart(input: string): void;
|
|
27
|
-
onTurnEnd(status: string,
|
|
88
|
+
onTurnEnd(status: string, iterations: number, producedFiles: string[]): void;
|
|
28
89
|
onAssistantDelta(text: string): void;
|
|
29
90
|
onReasoningDelta(text: string): void;
|
|
30
91
|
onAssistantMessage(text: string | null, toolCalls: string[], usage?: TokenUsage): void;
|
|
@@ -33,13 +94,69 @@ declare class ConsoleHook implements EngineHook {
|
|
|
33
94
|
onToolFinished(name: string, status: string, resultPreview: string): void;
|
|
34
95
|
onPermissionRequired(name: string, reason: string): void;
|
|
35
96
|
onIterationEnd(_iteration: number): void;
|
|
36
|
-
onCompacting(): void;
|
|
37
|
-
onCompacted(text: string): void;
|
|
38
|
-
onError(error: string,
|
|
97
|
+
onCompacting(info?: CompactionStartInfo): void;
|
|
98
|
+
onCompacted(text: string, info?: CompactionDoneInfo): void;
|
|
99
|
+
onError(error: string, errorType: string): void;
|
|
100
|
+
onRetry(attempt: number, max: number, reason: string): void;
|
|
39
101
|
onInterrupted(_iterations: number): void;
|
|
40
102
|
onEvent(type: EventType, data: Record<string, unknown>): void;
|
|
41
103
|
}
|
|
42
104
|
|
|
105
|
+
/**
|
|
106
|
+
* SubagentHook — 把子代理(explore)的执行情况缩进打印到控制台
|
|
107
|
+
*
|
|
108
|
+
* 子代理在独立上下文中运行,它的事件流默认被 explore 工具吞掉(只留最终报告),
|
|
109
|
+
* 于是「它读了哪些文件、搜了哪些关键字」在 CLI 上完全不可见。把本 Hook 注入
|
|
110
|
+
* 子引擎后,子代理的每一步会以缩进树的形式,穿插在主代理的「⚙ explore ...」
|
|
111
|
+
* 进度行与随后的结果卡片之间。
|
|
112
|
+
*
|
|
113
|
+
* 渲染工具活动、终态,以及最终报告:子代理的流式正文/思考不回显——它们不会进入
|
|
114
|
+
* 主上下文,回显只会制造噪音;但最终报告是子代理唯一的产出,必须完整给出(见
|
|
115
|
+
* _emitReport:它回给主代理时只是一段被截断的结果预览)。
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
declare class SubagentHook implements EngineHook {
|
|
119
|
+
/** 全局递增序号:同一条回复里并发的多个 explore 子代理靠它区分输出行 */
|
|
120
|
+
private static _seq;
|
|
121
|
+
private _tag;
|
|
122
|
+
/** 本轮已执行的工具数 */
|
|
123
|
+
private _steps;
|
|
124
|
+
/**
|
|
125
|
+
* 待执行工具的参数:onToolProposed 依次入队(同名 FIFO),onToolStarted 时
|
|
126
|
+
* 取出,用于在进度行里显示子代理到底在看什么。每轮 LLM 回复开始时清空,
|
|
127
|
+
* 避免被拒/中断的工具残留参数错配到下一轮。
|
|
128
|
+
*/
|
|
129
|
+
private _args;
|
|
130
|
+
/** onTurnEnd 只收尾一次 */
|
|
131
|
+
private _open;
|
|
132
|
+
/**
|
|
133
|
+
* 子代理最后一条带正文的回复 —— 即它交给主代理的最终报告。口径与 explore 工具
|
|
134
|
+
* 取报告一致(见 explore.ts:报告 = 最后一条带正文的 assistant 消息)。
|
|
135
|
+
*/
|
|
136
|
+
private _report;
|
|
137
|
+
constructor(label?: string);
|
|
138
|
+
/** 输出一行缩进的子代理日志,整行按终端列数截断,避免折行打乱主输出排版 */
|
|
139
|
+
private _line;
|
|
140
|
+
/** 取出某个工具最早入队的参数(无则 undefined) */
|
|
141
|
+
private _takeArgs;
|
|
142
|
+
onTurnStart(input: string): void;
|
|
143
|
+
onAssistantMessage(text: string | null, _toolCalls: string[]): void;
|
|
144
|
+
onToolProposed(name: string, args: Record<string, unknown>): void;
|
|
145
|
+
onToolStarted(name: string): void;
|
|
146
|
+
onToolFinished(name: string, status: string, resultPreview: string): void;
|
|
147
|
+
onError(error: string): void;
|
|
148
|
+
onTurnEnd(status: string, _iterations: number, _producedFiles: string[]): void;
|
|
149
|
+
/**
|
|
150
|
+
* 打印子代理的最终报告。
|
|
151
|
+
*
|
|
152
|
+
* 报告是子代理唯一的产出,但它回给主代理时只以「某次工具调用的结果」出现,
|
|
153
|
+
* 而结果预览被截断到 200 字符——正文在 CLI 上根本看不全。这里按 Markdown
|
|
154
|
+
* 完整渲染,缩进到子代理块之下,与上面的进度行连成一体。
|
|
155
|
+
*/
|
|
156
|
+
private _emitReport;
|
|
157
|
+
onEvent(_type: EventType, _data: Record<string, unknown>): void;
|
|
158
|
+
}
|
|
159
|
+
|
|
43
160
|
/**
|
|
44
161
|
* CompositeHook — 将多个 EngineHook 组合为一个
|
|
45
162
|
*
|
|
@@ -60,13 +177,123 @@ declare class CompositeHook implements EngineHook {
|
|
|
60
177
|
onToolFinished(name: string, status: string, resultPreview: string): void;
|
|
61
178
|
onPermissionRequired(name: string, reason: string): void;
|
|
62
179
|
onIterationEnd(iteration: number): void;
|
|
63
|
-
onCompacting(): void;
|
|
64
|
-
onCompacted(text: string): void;
|
|
180
|
+
onCompacting(info?: CompactionStartInfo): void;
|
|
181
|
+
onCompacted(text: string, info?: CompactionDoneInfo): void;
|
|
65
182
|
onError(error: string, errorType: string, info?: EngineErrorInfo): void;
|
|
183
|
+
onRetry(attempt: number, max: number, reason: string): void;
|
|
66
184
|
onInterrupted(iterations: number): void;
|
|
67
185
|
onEvent(type: EventType, data: Record<string, unknown>): void;
|
|
68
186
|
}
|
|
69
187
|
|
|
188
|
+
/** 渲染能力配置 */
|
|
189
|
+
interface MarkdownRendererOptions {
|
|
190
|
+
/** 是否输出 ANSI 颜色(默认自动检测 TTY + chalk 环境) */
|
|
191
|
+
color?: boolean;
|
|
192
|
+
/** 是否支持 Unicode(表格边框 / emoji,默认 true) */
|
|
193
|
+
unicode?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* 灰阶模式:保留 Markdown 排版(列表/表格/段落/标题),
|
|
196
|
+
* 但所有前景色统一为灰色(等价于整段包裹灰色,内部不再产生彩色)。
|
|
197
|
+
*/
|
|
198
|
+
gray?: boolean;
|
|
199
|
+
}
|
|
200
|
+
declare class MarkdownRenderer {
|
|
201
|
+
/** 未完整块的内容缓冲 */
|
|
202
|
+
private _buffer;
|
|
203
|
+
/** 是否输出颜色 */
|
|
204
|
+
private _color;
|
|
205
|
+
/** 是否支持 Unicode */
|
|
206
|
+
private _unicode;
|
|
207
|
+
/** 灰阶模式:仅灰色前景,无其他颜色 */
|
|
208
|
+
private _gray;
|
|
209
|
+
/** 列表栈:每层 { ordered, counter } */
|
|
210
|
+
private _listStack;
|
|
211
|
+
/** 表格收集:行(每行是单元格纯文本数组) */
|
|
212
|
+
private _tableRows;
|
|
213
|
+
/** 表格收集:当前行 */
|
|
214
|
+
private _tableRow;
|
|
215
|
+
/** 是否正在收集表格单元格内容 */
|
|
216
|
+
private _inTable;
|
|
217
|
+
/** 当前链接 href(link_open 记录,link_close 消费) */
|
|
218
|
+
private _pendingLinkHref;
|
|
219
|
+
constructor(opts?: MarkdownRendererOptions);
|
|
220
|
+
/**
|
|
221
|
+
* 输入一段流式文本,返回本次可输出的渲染结果(块未完整时可能为空)。
|
|
222
|
+
*/
|
|
223
|
+
push(text: string): string;
|
|
224
|
+
/** 回复结束:输出剩余缓冲并复位 */
|
|
225
|
+
flush(): string;
|
|
226
|
+
/** 复位状态(一轮回复结束) */
|
|
227
|
+
reset(): void;
|
|
228
|
+
/** 提取并渲染所有「完整块」,返回输出;未完整块留在 buffer */
|
|
229
|
+
private _drain;
|
|
230
|
+
/**
|
|
231
|
+
* 从 buffer 提取第一个完整块;无完整块返回 null(继续缓冲)。
|
|
232
|
+
* 块边界:代码块围栏闭合、表格结束(非 | 行)、空行。
|
|
233
|
+
*/
|
|
234
|
+
private _extractBlock;
|
|
235
|
+
/** 从 buffer 截取前 n 行作为块,更新 buffer */
|
|
236
|
+
private _takeBlock;
|
|
237
|
+
/** 用 markdown-it 解析并渲染一段完整 Markdown */
|
|
238
|
+
private _renderMarkdown;
|
|
239
|
+
private _renderTokens;
|
|
240
|
+
private _renderToken;
|
|
241
|
+
private _headingOpen;
|
|
242
|
+
private _listItemPrefix;
|
|
243
|
+
private _renderCode;
|
|
244
|
+
private _renderTable;
|
|
245
|
+
private _renderInlineChildren;
|
|
246
|
+
private _renderInlineToken;
|
|
247
|
+
/** 纯文本渲染(无颜色、无 Markdown 符号),用于表格单元格 */
|
|
248
|
+
private _renderInlinePlain;
|
|
249
|
+
/** emoji:Unicode 支持时 :smile: → 😄;否则 😄 → :smile: */
|
|
250
|
+
private _emoji;
|
|
251
|
+
/** 颜色开关:启用时返回 ANSI 码,否则返回空串 */
|
|
252
|
+
private _c;
|
|
253
|
+
/** 前景色码:灰阶模式下省略(由 _renderMarkdown 统一包裹灰色) */
|
|
254
|
+
private _fg;
|
|
255
|
+
/** 前景色重置:灰阶模式下省略,避免打断外层灰色 */
|
|
256
|
+
private _fgReset;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* 审批视图:把审批请求(工具 / 原因 / 参数详情)规范化为统一的「字段行」,
|
|
261
|
+
* 供 CLI、QQ、通用通知、邮件、MQTT、Web 等各端渲染成同一套表格。
|
|
262
|
+
*
|
|
263
|
+
* 唯一数据源是审批事件负载(toolName / reason / arguments),各通道只负责
|
|
264
|
+
* 把这里产出的字段渲染成自己端上最好看的形态(终端框线表 / Markdown / HTML)。
|
|
265
|
+
*/
|
|
266
|
+
/** 审批表格中的一行 */
|
|
267
|
+
interface ApprovalField {
|
|
268
|
+
/** 字段名(工具 / 原因 / 参数名) */
|
|
269
|
+
label: string;
|
|
270
|
+
/** 字段值(已完成换行折叠与截断) */
|
|
271
|
+
value: string;
|
|
272
|
+
}
|
|
273
|
+
/** 统一审批输入 */
|
|
274
|
+
interface ApprovalViewInput {
|
|
275
|
+
toolName: string;
|
|
276
|
+
reason: string;
|
|
277
|
+
arguments?: Record<string, unknown> | null;
|
|
278
|
+
}
|
|
279
|
+
/** 单个字段值的默认最大长度(超出以 … 截断) */
|
|
280
|
+
declare const APPROVAL_VALUE_MAX = 120;
|
|
281
|
+
/** 表格列标题(各端保持一致) */
|
|
282
|
+
declare const APPROVAL_COLUMNS: readonly ["项目", "详情"];
|
|
283
|
+
/** 从 NotifyEvent.data(审批事件负载)提取统一输入 */
|
|
284
|
+
declare function approvalInputFromData(data: Record<string, unknown>): ApprovalViewInput;
|
|
285
|
+
/**
|
|
286
|
+
* 规范化为统一字段行:工具 → 原因 → 每个参数各一行(行序在所有通道一致)。
|
|
287
|
+
*/
|
|
288
|
+
declare function approvalFields(input: ApprovalViewInput, maxLen?: number): ApprovalField[];
|
|
289
|
+
/** 渲染为统一的两列 Markdown 表格 */
|
|
290
|
+
declare function approvalToMarkdownTable(input: ApprovalViewInput, opts?: {
|
|
291
|
+
maxLen?: number;
|
|
292
|
+
title?: string;
|
|
293
|
+
}): string;
|
|
294
|
+
/** 渲染为 HTML 表格(邮件 / Web 端直接展示为真正的表格) */
|
|
295
|
+
declare function approvalToHtmlTable(input: ApprovalViewInput, maxLen?: number): string;
|
|
296
|
+
|
|
70
297
|
/** 保存的引擎状态(用于恢复) */
|
|
71
298
|
interface SavedState {
|
|
72
299
|
sessionId: string;
|
|
@@ -74,6 +301,18 @@ interface SavedState {
|
|
|
74
301
|
messages: Message[];
|
|
75
302
|
compaction: Record<string, unknown> | null;
|
|
76
303
|
savedAt: string;
|
|
304
|
+
/** 会话名称(AI 自动生成或用户指定) */
|
|
305
|
+
name?: string;
|
|
306
|
+
/** 名称来源:auto=自动生成(可被后续自动生成覆盖);user=用户手动指定(不再自动生成) */
|
|
307
|
+
nameSource?: "auto" | "user";
|
|
308
|
+
/** 已成功完成的任务数(用于第 1/3/5 次自动命名) */
|
|
309
|
+
taskCount?: number;
|
|
310
|
+
}
|
|
311
|
+
/** 会话命名相关的元数据(由 CLI 维护,随 state 快照持久化) */
|
|
312
|
+
interface SessionNameMeta {
|
|
313
|
+
name?: string;
|
|
314
|
+
nameSource?: "auto" | "user";
|
|
315
|
+
taskCount?: number;
|
|
77
316
|
}
|
|
78
317
|
declare class FileLogHook implements EngineHook {
|
|
79
318
|
private sessionId;
|
|
@@ -90,15 +329,16 @@ declare class FileLogHook implements EngineHook {
|
|
|
90
329
|
onToolFinished(name: string, status: string, resultPreview: string): void;
|
|
91
330
|
onPermissionRequired(name: string, reason: string): void;
|
|
92
331
|
onIterationEnd(iteration: number): void;
|
|
93
|
-
onCompacting(): void;
|
|
94
|
-
onCompacted(text: string): void;
|
|
332
|
+
onCompacting(info?: CompactionStartInfo): void;
|
|
333
|
+
onCompacted(text: string, info?: CompactionDoneInfo): void;
|
|
95
334
|
onError(error: string, errorType: string): void;
|
|
335
|
+
onRetry(attempt: number, max: number, reason: string): void;
|
|
96
336
|
onInterrupted(iterations: number): void;
|
|
97
337
|
onPaused(iteration: number, at: string): void;
|
|
98
338
|
onResumed(iteration: number): void;
|
|
99
339
|
onEvent(type: EventType, data: Record<string, unknown>): void;
|
|
100
340
|
/** 保存完整引擎状态快照(检查点) */
|
|
101
|
-
saveState(engine: TurnEngine): void;
|
|
341
|
+
saveState(engine: TurnEngine, meta?: SessionNameMeta): void;
|
|
102
342
|
/** 读取保存的引擎状态 */
|
|
103
343
|
static loadState(sessionId: string, stateDir: string): SavedState | null;
|
|
104
344
|
/** 读取事件日志 */
|
|
@@ -132,14 +372,6 @@ declare const EXPLORER_INSTRUCTIONS = "\u4F60\u662F\u4E00\u4E2A\u53EA\u8BFB\u768
|
|
|
132
372
|
* 保证所有 agent 的系统提示词尾部环境信息一致。
|
|
133
373
|
*/
|
|
134
374
|
declare function buildEnvBlock(workspace: string, today: string): string;
|
|
135
|
-
/**
|
|
136
|
-
* 组装完整的系统提示词
|
|
137
|
-
*
|
|
138
|
-
* @param agentType 代理类型(code=编程助手 / cowork=通用协作)
|
|
139
|
-
* @param workspace 工作区路径(注入到环境信息块中)
|
|
140
|
-
* @param today 当前日期(ISO 格式,注入到环境信息块中)
|
|
141
|
-
* @returns 拼接后的完整系统提示词(代理提示词 + 叙述规则 + 环境信息)
|
|
142
|
-
*/
|
|
143
375
|
declare function buildInstructions(agentType: "code" | "cowork", workspace: string, today: string): string;
|
|
144
376
|
|
|
145
377
|
/**
|
|
@@ -162,7 +394,7 @@ interface AgentDef {
|
|
|
162
394
|
prompt: string;
|
|
163
395
|
/**
|
|
164
396
|
* 可选:切换到此 agent 时同步切换的模型标识
|
|
165
|
-
* (如 "gpt-4o" / "deepseek-
|
|
397
|
+
* (如 "gpt-4o" / "deepseek-flash")。未设置则沿用当前模型。
|
|
166
398
|
*/
|
|
167
399
|
model?: string;
|
|
168
400
|
}
|
|
@@ -214,7 +446,7 @@ declare class AgentRegistry {
|
|
|
214
446
|
switch(name: string): AgentDef | undefined;
|
|
215
447
|
/**
|
|
216
448
|
* 为指定 agent 组装完整系统提示词:
|
|
217
|
-
* agent prompt + 叙述规则 + 环境信息块。
|
|
449
|
+
* agent prompt + 叙述规则 + OCR/语言引导 + 环境信息块。
|
|
218
450
|
*
|
|
219
451
|
* @param name agent 名称(不存在时回退到当前 agent)
|
|
220
452
|
* @param workspace 工作区路径(注入环境信息块)
|
|
@@ -371,6 +603,74 @@ declare class McpManager {
|
|
|
371
603
|
private unregisterServerTools;
|
|
372
604
|
}
|
|
373
605
|
|
|
606
|
+
/** 二进制的来源(用于错误信息与文档,也便于诊断「为什么用的是那个」) */
|
|
607
|
+
type BinSource = "env" | "agent-bin" | "bundled" | "path";
|
|
608
|
+
interface ResolvedBin {
|
|
609
|
+
path: string;
|
|
610
|
+
source: BinSource;
|
|
611
|
+
}
|
|
612
|
+
interface ResolvedMedia {
|
|
613
|
+
ffmpeg: ResolvedBin | null;
|
|
614
|
+
ffprobe: ResolvedBin | null;
|
|
615
|
+
}
|
|
616
|
+
interface ResolveMediaOptions {
|
|
617
|
+
platform?: NodeJS.Platform;
|
|
618
|
+
env?: NodeJS.ProcessEnv;
|
|
619
|
+
/** 判断文件存在,便于测试注入 */
|
|
620
|
+
fileExists?: (p: string) => boolean;
|
|
621
|
+
}
|
|
622
|
+
/** 解析可用的 ffmpeg / ffprobe(结果带缓存) */
|
|
623
|
+
declare function resolveMedia(workspace: string, opts?: ResolveMediaOptions): ResolvedMedia;
|
|
624
|
+
/** 测试用 / 安装完成后:清除解析缓存 */
|
|
625
|
+
declare function resetFfmpegCache(): void;
|
|
626
|
+
/**
|
|
627
|
+
* 返回目标平台的精确安装命令(按推荐顺序)。
|
|
628
|
+
*
|
|
629
|
+
* 这些命令同时用于第 3 级(模型转用 run_shell 安装)与第 4 级(用户手工安装),
|
|
630
|
+
* 因此必须是可以直接复制执行的、非交互的形式。
|
|
631
|
+
*/
|
|
632
|
+
declare function installHints(platform?: NodeJS.Platform): string[];
|
|
633
|
+
type ArchiveKind = "tar.xz" | "zip";
|
|
634
|
+
type ChecksumAlgo = "sha256" | "md5";
|
|
635
|
+
/** 下载源里的单个二进制 */
|
|
636
|
+
interface DownloadComponent {
|
|
637
|
+
/** 期望的二进制名(不含 .exe) */
|
|
638
|
+
name: string;
|
|
639
|
+
/** 直接下载地址(与 infoUrl 二选一) */
|
|
640
|
+
url?: string;
|
|
641
|
+
/** 通过 JSON 元数据接口动态取当前版本地址(evermeet 用) */
|
|
642
|
+
infoUrl?: string;
|
|
643
|
+
archive: ArchiveKind;
|
|
644
|
+
/** 校验和边车文件地址(内容为 `<hash> <文件名>`,或纯 hash) */
|
|
645
|
+
checksumUrl?: string;
|
|
646
|
+
checksumAlgo?: ChecksumAlgo;
|
|
647
|
+
}
|
|
648
|
+
interface DistSpec {
|
|
649
|
+
components: DownloadComponent[];
|
|
650
|
+
}
|
|
651
|
+
interface DownloadResult {
|
|
652
|
+
ok: boolean;
|
|
653
|
+
/** 成功时:安装到 .agent/bin 的绝对路径 */
|
|
654
|
+
installed?: Record<string, string>;
|
|
655
|
+
error?: string;
|
|
656
|
+
/** 完成但值得提示的信息(缺校验和、许可证义务等) */
|
|
657
|
+
notes?: string[];
|
|
658
|
+
}
|
|
659
|
+
interface DownloadOptions {
|
|
660
|
+
platform?: NodeJS.Platform;
|
|
661
|
+
arch?: string;
|
|
662
|
+
/** 覆盖下载源(测试注入) */
|
|
663
|
+
spec?: DistSpec | null;
|
|
664
|
+
log?: (msg: string) => void;
|
|
665
|
+
}
|
|
666
|
+
/**
|
|
667
|
+
* 下载并安装静态构建到 `<workspace>/.agent/bin`。
|
|
668
|
+
*
|
|
669
|
+
* 供 media 工具的 `op="setup"` 调用——不静默触发:下载数十 MB 并写入工作区,
|
|
670
|
+
* 必须是用户明确发起的动作(由权限引擎弹审批)。
|
|
671
|
+
*/
|
|
672
|
+
declare function downloadFfmpeg(workspace: string, opts?: DownloadOptions): Promise<DownloadResult>;
|
|
673
|
+
|
|
374
674
|
/**
|
|
375
675
|
* @zqagent/core — AI Agent 核心库
|
|
376
676
|
*
|
|
@@ -402,7 +702,7 @@ interface CreateEngineOpts {
|
|
|
402
702
|
provider?: ProviderClient;
|
|
403
703
|
/** 运行模式(默认 INTERACTIVE) */
|
|
404
704
|
mode?: Mode;
|
|
405
|
-
/** 单轮最大迭代次数(默认
|
|
705
|
+
/** 单轮最大迭代次数(默认 300) */
|
|
406
706
|
maxIterations?: number;
|
|
407
707
|
/**
|
|
408
708
|
* 推理强度(可选)。缺省时取环境变量 OPENAI_REASONING_EFFORT
|
|
@@ -420,8 +720,18 @@ interface CreateEngineOpts {
|
|
|
420
720
|
messages?: Message[];
|
|
421
721
|
/** 引擎生命周期钩子(可选) */
|
|
422
722
|
hook?: EngineHook;
|
|
723
|
+
/**
|
|
724
|
+
* explore 子代理的钩子工厂(可选):每次 explore 调用生成一个新实例,
|
|
725
|
+
* 用于渲染子代理的执行过程(如 CLI 的 SubagentHook)。
|
|
726
|
+
* 不传时子代理保持静默(只有最终报告返回给主代理)。
|
|
727
|
+
*/
|
|
728
|
+
subagentHookFactory?: () => EngineHook;
|
|
423
729
|
/** 模型上下文窗口大小(token 数),设置后覆盖自动检测与默认值 */
|
|
424
730
|
contextWindow?: number;
|
|
731
|
+
/** 压缩触发阈值比例(占窗口比例,默认 0.8) */
|
|
732
|
+
thresholdPct?: number;
|
|
733
|
+
/** 压缩触发阈值绝对上限(token 数;缺省不限制) */
|
|
734
|
+
capTokens?: number | null;
|
|
425
735
|
/** LLM 请求日志根目录(按日期分目录),不传则不记录 */
|
|
426
736
|
logDir?: string;
|
|
427
737
|
}
|
|
@@ -439,4 +749,4 @@ interface CreateEngineOpts {
|
|
|
439
749
|
*/
|
|
440
750
|
declare function createDefaultEngine(opts: CreateEngineOpts): TurnEngine;
|
|
441
751
|
|
|
442
|
-
export { type AgentDef, AgentRegistry, BUILTIN_AGENTS, CODE_INSTRUCTIONS, COWORK_INSTRUCTIONS, CompositeHook, ConsoleHook, type CreateEngineOpts, DISCUSS_MODE_CONTEXT, EXPLORER_INSTRUCTIONS, EngineErrorInfo, EngineHook, EventType, FileLogHook, McpClient, type McpConnectResult, McpManager, type McpServerConfig, type McpToolInfo, Message, Mode, PLAN_MODE_CONTEXT, ProviderClient, ReasoningEffort, type SavedState, TokenUsage, ToolRegistry, TurnEngine, buildEnvBlock, buildInstructions, createDefaultEngine, mcpToolKey, sanitizeToolName };
|
|
752
|
+
export { APPROVAL_COLUMNS, APPROVAL_VALUE_MAX, type AgentDef, AgentRegistry, type ApprovalField, type ApprovalViewInput, BUILTIN_AGENTS, CODE_INSTRUCTIONS, COWORK_INSTRUCTIONS, CompactionDoneInfo, CompactionStartInfo, CompositeHook, ConsoleHook, type ConsoleHookOptions, type CreateEngineOpts, DISCUSS_MODE_CONTEXT, type DownloadResult, EXPLORER_INSTRUCTIONS, EngineErrorInfo, EngineHook, EventType, FileLogHook, MarkdownRenderer, McpClient, type McpConnectResult, McpManager, type McpServerConfig, type McpToolInfo, Message, Mode, PLAN_MODE_CONTEXT, ProviderClient, ReasoningEffort, type ResolvedBin, type ResolvedMedia, type SavedState, SubagentHook, TokenUsage, ToolRegistry, TurnEngine, approvalFields, approvalInputFromData, approvalToHtmlTable, approvalToMarkdownTable, buildEnvBlock, buildInstructions, createDefaultEngine, downloadFfmpeg, installHints, mcpToolKey, resetFfmpegCache, resolveMedia, sanitizeToolName };
|