@whispering233/ai-editor-agent 0.0.30 → 0.0.32

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.
Files changed (68) hide show
  1. package/dist/index.d.ts +2 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/runtime/events.d.ts +21 -0
  6. package/dist/runtime/events.d.ts.map +1 -0
  7. package/dist/runtime/events.js +235 -0
  8. package/dist/runtime/events.js.map +1 -0
  9. package/dist/runtime/index.d.ts +11 -0
  10. package/dist/runtime/index.d.ts.map +1 -0
  11. package/dist/runtime/index.js +12 -0
  12. package/dist/runtime/index.js.map +1 -0
  13. package/dist/runtime/message-projection.d.ts +57 -0
  14. package/dist/runtime/message-projection.d.ts.map +1 -0
  15. package/dist/runtime/message-projection.js +94 -0
  16. package/dist/runtime/message-projection.js.map +1 -0
  17. package/dist/runtime/paths.d.ts +11 -0
  18. package/dist/runtime/paths.d.ts.map +1 -0
  19. package/dist/runtime/paths.js +23 -0
  20. package/dist/runtime/paths.js.map +1 -0
  21. package/dist/runtime/project-runtime.d.ts +57 -0
  22. package/dist/runtime/project-runtime.d.ts.map +1 -0
  23. package/dist/runtime/project-runtime.js +78 -0
  24. package/dist/runtime/project-runtime.js.map +1 -0
  25. package/dist/runtime/proposals.d.ts +85 -0
  26. package/dist/runtime/proposals.d.ts.map +1 -0
  27. package/dist/runtime/proposals.js +173 -0
  28. package/dist/runtime/proposals.js.map +1 -0
  29. package/dist/runtime/resources.d.ts +14 -0
  30. package/dist/runtime/resources.d.ts.map +1 -0
  31. package/dist/runtime/resources.js +39 -0
  32. package/dist/runtime/resources.js.map +1 -0
  33. package/dist/runtime/sessions.d.ts +35 -0
  34. package/dist/runtime/sessions.d.ts.map +1 -0
  35. package/dist/runtime/sessions.js +89 -0
  36. package/dist/runtime/sessions.js.map +1 -0
  37. package/dist/{prompts.d.ts → runtime/system-prompt.d.ts} +4 -12
  38. package/dist/runtime/system-prompt.d.ts.map +1 -0
  39. package/dist/runtime/system-prompt.js +22 -0
  40. package/dist/runtime/system-prompt.js.map +1 -0
  41. package/dist/runtime/tool-result.d.ts +12 -0
  42. package/dist/runtime/tool-result.d.ts.map +1 -0
  43. package/dist/runtime/tool-result.js +53 -0
  44. package/dist/runtime/tool-result.js.map +1 -0
  45. package/dist/runtime/tools.d.ts +28 -0
  46. package/dist/runtime/tools.d.ts.map +1 -0
  47. package/dist/runtime/tools.js +54 -0
  48. package/dist/runtime/tools.js.map +1 -0
  49. package/package.json +5 -4
  50. package/dist/context.d.ts +0 -96
  51. package/dist/context.d.ts.map +0 -1
  52. package/dist/context.js +0 -149
  53. package/dist/context.js.map +0 -1
  54. package/dist/executor.d.ts +0 -86
  55. package/dist/executor.d.ts.map +0 -1
  56. package/dist/executor.js +0 -259
  57. package/dist/executor.js.map +0 -1
  58. package/dist/prompts.d.ts.map +0 -1
  59. package/dist/prompts.js +0 -29
  60. package/dist/prompts.js.map +0 -1
  61. package/dist/run.d.ts +0 -182
  62. package/dist/run.d.ts.map +0 -1
  63. package/dist/run.js +0 -430
  64. package/dist/run.js.map +0 -1
  65. package/dist/session.d.ts +0 -60
  66. package/dist/session.d.ts.map +0 -1
  67. package/dist/session.js +0 -204
  68. package/dist/session.js.map +0 -1
package/dist/executor.js DELETED
@@ -1,259 +0,0 @@
1
- // @whispering233/ai-editor-agent 工具调度器 + 提案内存仓(S7.4)
2
- //
3
- // 架构边界:本包**不依赖 db**——ToolContext(db/outlineDir/projectId)由 S7.6 server 层注入
4
- // (createToolDispatcher 闭包捕获),这里只透传给工具 run/build;agent 侧不触碰 db 类型。
5
- import { AbortedError, buildProposeAbandonHook, buildProposeAddDelta, buildProposeAddRelation, buildProposeAdvanceHook, buildProposeCreateEntity, buildProposeCreateHook, buildProposeCreateReference, buildProposeDeleteEntity, buildProposeDeleteNode, buildProposeMoveNode, buildProposeOutlineNode, buildProposeRemoveRelation, buildProposeReorderTimepoints, buildProposeResolveHook, buildProposeUpdateEntity, buildProposeUpdateHook, getTool, throwIfAborted, } from "@whispering233/ai-editor-tools";
6
- // ============ 提案内存仓(仅内存、不落盘) ============
7
- /** 提案 TTL(10 分钟;S7.5 confirm/reject 引用——超期按不存在处理) */
8
- export const PROPOSAL_TTL_MS = 10 * 60_000;
9
- /**
10
- * 提案条数上限(超限淘汰 createdAt 最旧)。
11
- * 决策原文未定数——取 200 为数量级防御:正常会话一轮最多 15 个提案、挂卡不确认的
12
- * 残留按 TTL 自动过期,200 足以覆盖极端多轮场景且内存占用可忽略(防无限增长)。
13
- */
14
- export const PROPOSAL_MAX_COUNT = 200;
15
- /**
16
- * 创建提案仓实例。
17
- * 过期策略:**惰性过期 + 按需清理**(「超期自动清除」落地)——get/peek 只清理命中的
18
- * 单条,set 前扫全仓清理;无定时器(定时器引入时钟耦合且小仓无必要,测试用假时钟直接断言)。
19
- * 淘汰策略:条数超限时淘汰 createdAt **最旧**的提案(sweep 过期后仍满则循环淘汰最旧)。
20
- */
21
- export function createProposalStore(options = {}) {
22
- const ttlMs = options.ttlMs ?? PROPOSAL_TTL_MS;
23
- const maxCount = options.maxCount ?? PROPOSAL_MAX_COUNT;
24
- /** 仓内条目:proposal + 过期时刻(set 时按 createdAt 预计算;createdAt 不可解析按立即过期防御) */
25
- const entries = new Map();
26
- const isExpired = (entry) => Date.now() >= entry.expiresAt;
27
- const sweepExpired = () => {
28
- for (const [id, entry] of entries) {
29
- if (isExpired(entry))
30
- entries.delete(id);
31
- }
32
- };
33
- return {
34
- set(proposal) {
35
- sweepExpired();
36
- const createdAtMs = Date.parse(proposal.createdAt);
37
- entries.set(proposal.proposal_id, {
38
- proposal,
39
- expiresAt: Number.isNaN(createdAtMs) ? 0 : createdAtMs + ttlMs,
40
- });
41
- // 条数上限:循环淘汰最旧直到回到上限内(createdAt 同值取先插入者——迭代序即插入序)
42
- while (entries.size > maxCount) {
43
- let oldestId = null;
44
- let oldestTime = Number.POSITIVE_INFINITY;
45
- for (const [id, entry] of entries) {
46
- const t = Date.parse(entry.proposal.createdAt);
47
- if (t < oldestTime) {
48
- oldestTime = t;
49
- oldestId = id;
50
- }
51
- }
52
- if (oldestId === null)
53
- break; // 防御:理论不可达(size > 0 必有最旧)
54
- entries.delete(oldestId);
55
- }
56
- },
57
- get(proposalId, projectId) {
58
- const entry = entries.get(proposalId);
59
- if (entry === undefined)
60
- return null;
61
- if (isExpired(entry)) {
62
- entries.delete(proposalId); // 惰性过期清理
63
- return null;
64
- }
65
- if (entry.proposal.project_id !== projectId)
66
- return null; // 项目绑定
67
- return entry.proposal;
68
- },
69
- peek(proposalId) {
70
- const entry = entries.get(proposalId);
71
- if (entry === undefined)
72
- return null;
73
- if (isExpired(entry)) {
74
- entries.delete(proposalId);
75
- return null;
76
- }
77
- return entry.proposal;
78
- },
79
- remove(proposalId) {
80
- entries.delete(proposalId);
81
- },
82
- clear() {
83
- entries.clear();
84
- },
85
- size() {
86
- return entries.size;
87
- },
88
- };
89
- }
90
- /** 默认提案仓单例(S7.5 confirm/reject 与 S7.6 切换项目 clear 直接引用;测试用 createProposalStore 独立实例) */
91
- export const defaultProposalStore = createProposalStore();
92
- /**
93
- * 15 个 propose_* 工具名 → build 层函数。
94
- * 运行时查表缺失(非 propose 工具)走普通结果路径;完整性由测试断言覆盖
95
- * (Object.keys(PROPOSAL_BUILDERS) === PROPOSAL_TOOLS)——S6.6 后续新增提案工具须同步登记。
96
- * 导出仅为完整性测试断言;业务侧经 createToolDispatcher 间接使用。
97
- */
98
- export const PROPOSAL_BUILDERS = {
99
- propose_create_entity: (ctx, args) => buildProposeCreateEntity(ctx, args),
100
- propose_update_entity: (ctx, args) => buildProposeUpdateEntity(ctx, args),
101
- propose_delete_entity: (ctx, args) => buildProposeDeleteEntity(ctx, args),
102
- propose_add_relation: (ctx, args) => buildProposeAddRelation(ctx, args),
103
- propose_remove_relation: (ctx, args) => buildProposeRemoveRelation(ctx, args),
104
- propose_add_delta: (ctx, args) => buildProposeAddDelta(ctx, args),
105
- propose_outline_node: (ctx, args) => buildProposeOutlineNode(ctx, args),
106
- propose_move_node: (ctx, args) => buildProposeMoveNode(ctx, args),
107
- propose_delete_node: (ctx, args) => buildProposeDeleteNode(ctx, args),
108
- propose_create_hook: (ctx, args) => buildProposeCreateHook(ctx, args),
109
- propose_update_hook: (ctx, args) => buildProposeUpdateHook(ctx, args),
110
- propose_advance_hook: (ctx, args) => buildProposeAdvanceHook(ctx, args),
111
- propose_resolve_hook: (ctx, args) => buildProposeResolveHook(ctx, args),
112
- propose_abandon_hook: (ctx, args) => buildProposeAbandonHook(ctx, args),
113
- propose_reorder_timepoints: (ctx, args) => buildProposeReorderTimepoints(ctx, args), // G2(取代 F9 的 propose_reorder_events)
114
- propose_create_reference: (ctx, args) => buildProposeCreateReference(ctx, args), //
115
- };
116
- /**
117
- * 创建工具调度器(run.ts ToolDispatcher 真实现):
118
- * 1. **批量校验 fail fast**(「工具执行」):先全部 getTool(name).argsSchema
119
- * safeParse——工具不存在 / 参数非法 → 该调用合成 isError 结果(**不中断其他调用**,
120
- * 「fail fast」指校验先于执行,错误编码进 isError 喂回 LLM 自纠);全部校验完再逐个执行
121
- * 2. **执行中检查 signal**:调度前 + 每个工具执行前 throwIfAborted,run 调用
122
- * 透传 signal(长分析工具内部周期检查);命中取消抛 AbortedError **按取消语义传播**
123
- * (原样抛穿,run.ts 识别后按用户取消终止——不喂回、不视为工具失败)
124
- * 3. 工具执行抛错(非 AbortedError)→ 统一 isError 结构化(工具名+参数+错误信息)
125
- * 4. propose_* 执行成功 → build 层重建完整 Proposal 入仓 + 构造 preview(S7.6 推 GUI)→
126
- * DispatchResult.proposal 透传 run.ts(proposal 事件在 tool_result 后、循环继续前——run.ts 保证)
127
- */
128
- export function createToolDispatcher(ctx, options = {}) {
129
- const store = options.store ?? defaultProposalStore;
130
- return async (calls, signal) => {
131
- // 调度前取消检查:已取消则一个工具都不执行,直接按取消传播
132
- throwIfAborted(toAbortSignal(signal));
133
- // ---- 1. 批量校验 fail fast:全部先校验,再逐个执行 ----
134
- const plans = calls.map((call) => {
135
- const def = getTool(call.tool);
136
- if (def === undefined) {
137
- // 工具不存在:执行类工具不注册不暴露(「核心设计原则」——AI 只能提案不能直接写)
138
- return {
139
- call,
140
- error: `工具不存在或不可调用:${call.tool}(AI 只能调用已注册的查询/分析/提案工具,执行类工具不暴露)`,
141
- };
142
- }
143
- const parsed = def.argsSchema.safeParse(call.args);
144
- if (!parsed.success) {
145
- return { call, error: formatValidationError(call, parsed.error) };
146
- }
147
- return { call, def, parsed: parsed.data };
148
- });
149
- // ---- 2. 逐个执行(结果按输入顺序一一回填,同序等长——run.ts) ----
150
- const results = [];
151
- for (const plan of plans) {
152
- // 批量执行间隙被取消:立即中止后续工具并传播取消
153
- throwIfAborted(toAbortSignal(signal));
154
- const def = plan.def;
155
- if (def === undefined) {
156
- // 校验失败槽位:isError 直接回填(不执行——校验即失败,喂回 LLM 自纠)
157
- results.push({
158
- id: plan.call.id,
159
- tool: plan.call.tool,
160
- ok: false,
161
- isError: true,
162
- content: plan.error ?? "工具参数校验失败",
163
- });
164
- continue;
165
- }
166
- try {
167
- const raw = await def.run(ctx, plan.parsed, toAbortSignal(signal));
168
- const builder = PROPOSAL_BUILDERS[plan.call.tool];
169
- if (builder === undefined) {
170
- // 普通工具(query/analysis):结果序列化为 content 回填
171
- results.push({
172
- id: plan.call.id,
173
- tool: plan.call.tool,
174
- ok: true,
175
- isError: false,
176
- content: serializeToolResult(raw),
177
- });
178
- continue;
179
- }
180
- // ---- 提案路径(propose_*,「提案类」) ----
181
- // run 层裁剪只返回 { proposal_id, summary };完整 Proposal 经 build 层重建入仓——
182
- // proposal_id 以 run 返回为准覆盖(build 每次生成新 id),保证
183
- // tool_result / proposal 事件 / 仓 key 三处同一 id(S7.5 confirm 按事件 id 取仓)
184
- const runResult = raw;
185
- if (runResult === null ||
186
- typeof runResult !== "object" ||
187
- typeof runResult.proposal_id !== "string") {
188
- throw new Error(`提案工具 ${plan.call.tool} 返回结果不符合(缺 proposal_id)`);
189
- }
190
- const summary = typeof runResult.summary === "string" ? runResult.summary : "";
191
- const proposal = { ...builder(ctx, plan.parsed), proposal_id: runResult.proposal_id };
192
- store.set(proposal); // 供 S7.5 confirm/reject 取用
193
- results.push({
194
- id: plan.call.id,
195
- tool: plan.call.tool,
196
- ok: true,
197
- isError: false,
198
- // tool_result 严格 { proposal_id, summary }——不含预览细节(避免 LLM 误以为提案已生效而重复提案)
199
- content: JSON.stringify({ proposal_id: proposal.proposal_id, summary }),
200
- // preview 由 S7.6 经 SSE proposal 事件推 GUI(完整预览不走 tool_result);
201
- // F9/G2 起 build 可携带结构化 preview(如 propose_reorder_timepoints 的 { changes })——
202
- // 有则透传,无则回退默认 { type, summary, args }(既有提案工具行为不变)
203
- proposal: {
204
- proposal_id: proposal.proposal_id,
205
- type: proposal.type,
206
- preview: proposal.preview ?? { type: proposal.type, summary: proposal.summary, args: proposal.args },
207
- },
208
- });
209
- }
210
- catch (err) {
211
- // 取消语义传播:AbortedError 不喂回、不计失败轮——原样抛出,
212
- // run.ts dispatcher catch 识别后按用户取消终止(aborted=true,不重试)。
213
- // signal 已置位时一律按取消传播(双保险,与 run.ts catch 对称):覆盖「工具未检查
214
- // signal 即抛普通 Error」的取消竞态,以及跨包副本 AbortedError 的 instanceof 失效场景
215
- // (工具包内抛出的 AbortedError 若经打包/深拷贝丢失原型链,仍可按 signal 状态识别)
216
- if (err instanceof AbortedError || signal?.aborted === true)
217
- throw err;
218
- // 其余抛错:结构化 isError 回填(工具名 + 参数 + 错误信息,喂回 LLM 自纠)
219
- results.push({
220
- id: plan.call.id,
221
- tool: plan.call.tool,
222
- ok: false,
223
- isError: true,
224
- content: formatRunError(plan.call, err),
225
- });
226
- }
227
- }
228
- return results;
229
- };
230
- }
231
- /**
232
- * AbortSignalLike → 工具层 AbortSignal(同一运行时对象;llm 包为免 DOM lib 依赖只声明了
233
- * 最小结构,工具 run 签名用 DOM 类型——结构兼容,仅类型适配)
234
- */
235
- function toAbortSignal(signal) {
236
- return signal;
237
- }
238
- /** 参数校验失败结构化回填(工具名 + 校验问题明细 + 参数,喂回 LLM 修正后重试) */
239
- function formatValidationError(call, error) {
240
- const detail = (error.issues ?? [])
241
- .map((issue) => `${(issue.path ?? []).map(String).join(".") || "(根)"}:${issue.message ?? "未知错误"}`)
242
- .join(";");
243
- return `工具 ${call.tool} 参数校验失败(未执行,请修正参数后重试):${detail};参数:${JSON.stringify(call.args)}`;
244
- }
245
- /** 工具执行失败结构化回填(工具名 + 参数 + 错误信息,喂回 LLM 自纠) */
246
- function formatRunError(call, err) {
247
- const message = err instanceof Error ? err.message : String(err);
248
- return `工具 ${call.tool} 执行失败:${message};参数:${JSON.stringify(call.args)}`;
249
- }
250
- /** 工具结果序列化(content 恒为字符串):字符串原样;对象 JSON;undefined/不可序列化兜底 */
251
- function serializeToolResult(raw) {
252
- if (typeof raw === "string")
253
- return raw;
254
- if (raw === undefined)
255
- return "undefined";
256
- const json = JSON.stringify(raw);
257
- return json === undefined ? String(raw) : json;
258
- }
259
- //# sourceMappingURL=executor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAKA,4CAA4C;AAC5C,eAAO,MAAM,aAAa,oiFAWV,CAAC;AAIjB,gDAAgD;AAChD,eAAO,MAAM,oBAAoB,gCAAY,CAAC;AAE9C,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB,gCAAY,CAAC;AAE3C,6DAA6D;AAC7D,eAAO,MAAM,eAAe,gCAAY,CAAC;AAEzC,4CAA4C;AAC5C,eAAO,MAAM,WAAW,gCAAY,CAAC;AAErC,kCAAkC;AAClC,eAAO,MAAM,uBAAuB,oLAA6C,CAAC"}
package/dist/prompts.js DELETED
@@ -1,29 +0,0 @@
1
- // @whispering233/ai-editor-agent 提示词(S7.2)
2
- // 开发者编辑、代码固定、不持久化)、「核心设计原则」(AI 角色是分析顾问
3
- // 不是操作员、写操作走提案、截断显式告知)。
4
- // 项目层(用户可编辑,project.json)与临时层(即时输入)由调用方传入 context.ts 组装。
5
- /** 内核提示词(内核层):创作顾问角色定义 + 行为规范,代码固定不可用户编辑 */
6
- export const KERNEL_PROMPT = `你是「创作顾问」,一名资深小说创作搭档,服务于作者的 AI 写作工作台。
7
- 你的职责是帮助作者分析大纲、人物、关系、情节与伏笔,提出可执行的修改建议——你是分析顾问,不是操作员,也不代写正文。
8
-
9
- 行为准则:
10
- 1. 不生成正文:不代写小说正文或章节内容,输出始终是分析、建议与方案。
11
- 2. 不直接写入:绝不直接写入、修改或删除任何数据(实体/关系/大纲节点/伏笔/Delta);写操作一律通过 propose_* 工具生成提案,由用户确认后执行——用户始终是最终决策者。
12
- 3. 查询与分析自由:可随时调用查询类与分析类工具获取数据、运行结构化分析。
13
- 4. 结果截断须知:工具结果若含「已截断」标记即数据不完整——请缩小查询范围或分页获取,不得基于残缺数据下结论。
14
- 5. 长度截断须知:若你的回复因长度限制被截断,系统不会重发你的半条回复;请控制篇幅,优先给出结论与要点。
15
- 6. 聚焦优先:system 消息中「当前聚焦」段落是作者正在查看的内容,优先围绕它展开。
16
- 7. 提案语义:调用提案工具后需用户确认才生效;确认前不要假设任何修改已发生。
17
- 8. 回复使用项目配置的语言。`;
18
- // ============ 组装段标题与提示文案(context.ts 拼装 system 消息使用) ============
19
- /** 项目提示词段标题(项目层,来自 project.json 的 prompt 字段) */
20
- export const PROJECT_PROMPT_TITLE = "## 项目设定";
21
- /** 临时指令段标题(临时层,即时输入、不持久化) */
22
- export const INSTRUCTION_TITLE = "## 本次指令";
23
- /** 可用工具清单段标题(name + description 一行,来自 registry listTools) */
24
- export const TOOL_LIST_TITLE = "## 可用工具";
25
- /** 聚焦上下文段标题(聚焦层:当前视图中的实体/大纲节点,由调用方查询后传入) */
26
- export const FOCUS_TITLE = "## 当前聚焦";
27
- /** 聚焦上下文截断提示(截断必须显式告知,不得静默丢数据) */
28
- export const FOCUS_TRUNCATION_NOTICE = "\n\n[聚焦上下文已截断:超出 token 预算,数据不完整;请缩小查看范围]";
29
- //# sourceMappingURL=prompts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,uCAAuC;AACvC,wBAAwB;AACxB,yDAAyD;AAEzD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;gBAWb,CAAC;AAEjB,kEAAkE;AAElE,gDAAgD;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC,kCAAkC;AAClC,MAAM,CAAC,MAAM,uBAAuB,GAAG,0CAA0C,CAAC"}
package/dist/run.d.ts DELETED
@@ -1,182 +0,0 @@
1
- import { type AbortSignalLike, type ChatStreamResult, type LLMError, type LLMMessage, type LLMStreamEvent } from "@whispering233/ai-editor-llm";
2
- import { type ContextBudgets, type ToolListEntry } from "./context.js";
3
- import { type SessionMessage, type SessionState } from "./session.js";
4
- /** 轮次上限(8 轮;持续 tool_call 死循环兜底) */
5
- export declare const DEFAULT_MAX_ROUNDS = 8;
6
- /** 单轮总预算 ms(120s,含 LLM 重试退避与工具执行;测试可覆盖) */
7
- export declare const DEFAULT_ROUND_TIMEOUT_MS = 120000;
8
- /**
9
- * 单次 attempt 超时 ms(「LLM 单次 attempt 另有自身 fetch 超时」落地——
10
- * 独立于 120s 单轮总预算;attempt 超时映射为可重试错误,轮内重试仍受 roundDeadline 兜底)。
11
- */
12
- export declare const DEFAULT_ATTEMPT_TIMEOUT_MS = 60000;
13
- /** 上下文 token 预算(60K——DeepSeek 64K 窗口留余量;测试可覆盖) */
14
- export declare const DEFAULT_TOKEN_BUDGET = 60000;
15
- /** 提案载荷(S7.4 工具调度层构造 preview;对齐 proposal 事件 data 形态) */
16
- export interface ProposalPayload {
17
- proposal_id: string;
18
- /** 提案类型 = 产生它的 propose_* 工具名(data.type) */
19
- type: string;
20
- /** 提案预览(前端提案卡渲染数据;本层透传不构造) */
21
- preview: Record<string, unknown>;
22
- }
23
- /**
24
- * runAgent 输出事件流:
25
- * - turn_start:循环内部事件(每轮开始;S7.6 可不映射 SSE 帧,用于日志/调试)
26
- * - text:AI 文本增量(实时转发,失败轮可能已流出的半条文本属重试语义,接受)
27
- * - tool_call / tool_result:工具调用与结果(按 tool_call_id 配对;length 截断的调用
28
- * 不发 dispatcher,仍发 tool_call 事件)
29
- * - proposal:恒在对应 tool_result 之后、循环继续之前发送(顺序约定)
30
- * - done:自然终止(无工具调用),携带 session_id
31
- * - error:终止(模型最终失败 / 8 轮上限 / 超时 / token 超限 / 调度器缺陷)或
32
- * 用户取消(aborted=true);S7.6 收到 error 后立即关闭流
33
- */
34
- export type AgentEvent = {
35
- type: "turn_start";
36
- round: number;
37
- } | {
38
- type: "text";
39
- delta: string;
40
- } | {
41
- type: "tool_call";
42
- tool: string;
43
- args: Record<string, unknown> | null;
44
- id: string;
45
- } | {
46
- type: "tool_result";
47
- tool: string;
48
- result: string;
49
- id: string;
50
- } | {
51
- type: "proposal";
52
- proposal: ProposalPayload;
53
- } | {
54
- type: "done";
55
- sessionId: string;
56
- } | {
57
- type: "error";
58
- code: string;
59
- message: string;
60
- aborted: boolean;
61
- };
62
- /** 待调度工具调用(LLMToolCallResult 解析成功后的形态:id/tool/parsed args——S7.4 executor 直接 zod 校验执行) */
63
- export interface DispatchToolCall {
64
- id: string;
65
- tool: string;
66
- args: Record<string, unknown>;
67
- }
68
- /** 单个工具调度结果(S7.4 构造;isError=true 结构化回填、不终止循环) */
69
- export interface DispatchResult {
70
- id: string;
71
- tool: string;
72
- /**
73
- * 执行成功与否(与 isError 同义冗余——按任务卡接口保留双字段;ora S7.3 审核 S4:
74
- * 本卡不消费 ok,留 S7.4 真实现构造时使用,接口不动)
75
- */
76
- ok: boolean;
77
- /** 失败标记:喂回 LLM 的内容须含错误说明(结构化喂回自纠) */
78
- isError: boolean;
79
- /** 回填 LLM 的 tool 消息内容(成功 = 结果 JSON/文本;失败 = 错误说明) */
80
- content: string;
81
- /** 提案数据(仅 propose_* 工具返回;触发 proposal 事件) */
82
- proposal?: ProposalPayload;
83
- }
84
- /**
85
- * 工具调度器:
86
- * - 输入按原 tool_call 顺序;输出**必须同序等长**(防御:条数不符 → AGENT_DISPATCH_ERROR 终止,
87
- * 防止 tool_call ↔ tool_result 错位配对)
88
- * - signal:「工具执行中检查取消」(S7.4 executor 承担;长工具执行须监听)
89
- * - 本层不抛错(失败编码进 isError 结果);抛错视为调度器缺陷 → 循环终止。
90
- * **例外:AbortedError(tools analysis/utils,取消语义)→ 原样抛穿**——
91
- * S7.4 executor 在工具执行中检查 signal,命中取消即抛 AbortedError;本层 dispatcher
92
- * catch 识别后按用户取消终止(aborted=true、不重试、不视为缺陷),与循环其他环节的
93
- * 取消语义一致(取消不喂回)
94
- */
95
- export type ToolDispatcher = (calls: DispatchToolCall[], signal?: AbortSignalLike) => Promise<DispatchResult[]>;
96
- /** runAgent 依赖注入(S7.6 组装) */
97
- export interface RunAgentDeps {
98
- /**
99
- * 模型调用(S7.6 注入:闭包持有 apiKey/model/tools,内部调用 llm chatStream)。
100
- * ****:必须把 onEvent 转发给 chatStream 的 onEvent——runAgent 依赖它累积文本与
101
- * 收集工具调用(失败轮的重试会自动丢弃旧累积,无需调用方处理);失败按 chatStream
102
- * resolve 出 { ok:false, ... },不 throw。
103
- * signal 由 runAgent 注入 attempt 级独立控制器(超时 abort 与用户取消分离)。
104
- */
105
- produce: (messages: LLMMessage[], signal: AbortSignalLike, onEvent?: (event: LLMStreamEvent) => void) => Promise<ChatStreamResult>;
106
- /** 工具调度(S7.4 真实现) */
107
- dispatcher: ToolDispatcher;
108
- /**
109
- * 事件输出(S7.6 转 SSE 帧;缺省丢弃)。
110
- * **硬(ora S7.3 审核 S3)**:回调抛错不逃逸——run 侧统一兜底吞掉(防 runAgent
111
- * 直接 reject 导致 SSE 异常关流而非 error 事件);S7.6 不得依赖异常传播通知故障。
112
- */
113
- onEvent?: (event: AgentEvent) => void;
114
- /**
115
- * 每轮新消息序列(S7.6 持久化到 chat_messages;本层不落库)。
116
- * **硬同上**:抛错不逃逸(落库失败由 S7.6 自行处理,不中断 agent 循环)。
117
- */
118
- onMessages?: (messages: SessionMessage[]) => void;
119
- }
120
- export interface RunAgentInput {
121
- /** 会话 ID(done 事件携带;S7.6 必传——创建/复用会话后传入) */
122
- sessionId?: string;
123
- /** 本轮用户消息(由本层追加进会话——S7.6 传入的 session 不应已含它,避免双写) */
124
- userMessage: string;
125
- /** 初始会话(S7.6 经 loadHistory/trimSession 加载的历史;不含本轮 userMessage) */
126
- session: SessionState;
127
- /** 聚焦上下文文本(聚焦层;S7.6 查询实体/大纲节点后拼好传入) */
128
- focus?: string;
129
- /** 项目提示词(项目层) */
130
- projectPrompt?: string;
131
- /** 临时指令(临时层) */
132
- instruction?: string;
133
- deps: RunAgentDeps;
134
- /** 用户取消信号(全链路第 0 层;abort 永不重试) */
135
- signal?: AbortSignalLike;
136
- /** 分层上下文预算覆盖(S7.2) */
137
- budgets?: Partial<ContextBudgets>;
138
- /** 工具清单(默认 registry listTools;S7.2 注入 system 消息) */
139
- tools?: ToolListEntry[];
140
- /** 轮次上限(默认 8;测试可覆盖) */
141
- maxRounds?: number;
142
- /** 单轮总预算 ms(默认 120s 含重试退避;测试可覆盖) */
143
- roundTimeoutMs?: number;
144
- /** 单次 attempt 超时 ms(默认 60s——LLM 单次调用独立超时,与轮次总预算分离;测试可覆盖) */
145
- attemptTimeoutMs?: number;
146
- /** 上下文 token 预算(默认 60K;测试可覆盖) */
147
- tokenBudget?: number;
148
- /** 每次模型调用最大重试次数(默认 3;测试可覆盖) */
149
- maxRetries?: number;
150
- /** 重试退避基数 ms(默认 2000;测试可覆盖) */
151
- retryBaseDelayMs?: number;
152
- }
153
- export interface RunAgentResult {
154
- ok: boolean;
155
- /** 用户取消(abort 不重试,立即终止) */
156
- aborted: boolean;
157
- /** 终止原因(ok=false 时;code 为 AGENT_MAX_ITERATIONS / AGENT_TIMEOUT / AGENT_TOKEN_BUDGET
158
- * 或模型错误码 / 调度器缺陷码) */
159
- error: LLMError | null;
160
- /** 实际执行轮数(≤ maxRounds) */
161
- rounds: number;
162
- /**
163
- * 重试累计(重试与轮次分开计量、不互相消耗;ora S7.3 审核 S6 断言口径——
164
- * 报告值不清零,为全程累计:最后一次成功轮前重试过几次即为其值;「成功即清零」的预算
165
- * 语义由 withRetry maxRetries 独立限制 + roundDeadline 兜底承担,无跨轮累计消耗问题)
166
- */
167
- retries: number;
168
- }
169
- /**
170
- * runAgent:对话主循环(S7.3)。每轮:buildContext(含 lastUsage 回写链)→ LLM 调用
171
- * (withRetry + classifyRunOutcome + attempt 独立超时)→ 文本实时转发 → 成功收尾:
172
- * - 无 tool_call → done 事件终止
173
- * - stopReason=length → 全部 tool_call 标错喂回(不执行)
174
- * - 有合法 tool_call → dispatcher 执行 → tool_result 事件(按 id 回填)→ proposal 事件
175
- * (在 tool_result 后、循环继续前)→ 结果回填会话 → 下一轮
176
- * 三重保险:8 轮上限 / 120s 单轮总预算(含重试退避**与工具执行**——调度前与
177
- * dispatcher 返回后均校验 deadline)/ token 预算,各自发 error 事件终止。工具失败(isError)
178
- * 结构化回填不终止(喂回自纠);模型失败按重试策略退避重试,重试与轮次分开计量(报告值
179
- * 累计不清零,见 result.retries 注释);abort 双形态归一后循环只处理 resolve 形态。
180
- */
181
- export declare function runAgent(input: RunAgentInput): Promise<RunAgentResult>;
182
- //# sourceMappingURL=run.d.ts.map
package/dist/run.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AASA,OAAO,EAOL,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,cAAc,EAKpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAA+B,KAAK,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAInG,mCAAmC;AACnC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,2CAA2C;AAC3C,eAAO,MAAM,wBAAwB,SAAU,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,kDAAkD;AAClD,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAI3C,wDAAwD;AACxD,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACd,8BAA8B;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAIvE,yFAAyF;AACzF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACd;;;MAGE;IACD,EAAE,EAAE,OAAO,CAAC;IACb,qCAAqC;IACpC,OAAO,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACnD,OAAO,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC3C,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,gBAAgB,EAAE,EACzB,MAAM,CAAC,EAAE,eAAe,KACrB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAI/B,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC5B;;;;;;MAME;IACD,OAAO,EAAE,CACP,QAAQ,EAAE,UAAU,EAAE,EACtB,MAAM,EAAE,eAAe,EACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,KACtC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChC,qBAAqB;IACpB,UAAU,EAAE,cAAc,CAAC;IAC5B;;;;MAIE;IACD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACvC;;;MAGE;IACD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,aAAa;IAC7B,2CAA2C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACnD,WAAW,EAAE,MAAM,CAAC;IACrB,kEAAkE;IACjE,OAAO,EAAE,YAAY,CAAC;IACvB,uCAAuC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC;IACpB,kCAAkC;IACjC,MAAM,CAAC,EAAE,eAAe,CAAC;IAC1B,sBAAsB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,oDAAoD;IACnD,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,uBAAuB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACzB,4DAA4D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3B,iCAAiC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACrB,+BAA+B;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACb,2BAA2B;IAC1B,OAAO,EAAE,OAAO,CAAC;IAClB;yBACqB;IACpB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,0BAA0B;IACzB,MAAM,EAAE,MAAM,CAAC;IAChB;;;;MAIE;IACD,OAAO,EAAE,MAAM,CAAC;CACjB;AAgJD;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAwS5E"}