@whispering233/ai-editor-agent 0.0.1
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/dist/context.d.ts +96 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +150 -0
- package/dist/context.js.map +1 -0
- package/dist/executor.d.ts +86 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +268 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +13 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +30 -0
- package/dist/prompts.js.map +1 -0
- package/dist/run.d.ts +182 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +446 -0
- package/dist/run.js.map +1 -0
- package/dist/session.d.ts +60 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +205 -0
- package/dist/session.js.map +1 -0
- package/package.json +35 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const AGENT_PKG_NAME = "@whispering233/ai-editor-agent";
|
|
2
|
+
export declare const AGENT_PKG_VERSION = "0.1.0";
|
|
3
|
+
export declare const TOOLS_DEP = "@whispering233/ai-editor-tools";
|
|
4
|
+
export * from "./session.js";
|
|
5
|
+
export * from "./prompts.js";
|
|
6
|
+
export * from "./context.js";
|
|
7
|
+
export * from "./run.js";
|
|
8
|
+
export * from "./executor.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,cAAc,mCAAmC,CAAC;AAC/D,eAAO,MAAM,iBAAiB,UAAU,CAAC;AACzC,eAAO,MAAM,SAAS,mCAAiB,CAAC;AAExC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// @whispering233/ai-editor-agent 入口
|
|
2
|
+
// S7.1 会话管理(session.ts):历史重建 / 成对裁剪 / 喂回格式 / 末条约束——纯内存、无 I/O
|
|
3
|
+
// S7.2 上下文组装(context.ts + prompts.ts):三层提示词注入 / 聚焦注入 / 工具清单 / 分层 token 预算
|
|
4
|
+
// S7.3 主循环(run.ts):runAgent 三重保险 / 工具调度接口 ToolDispatcher / AgentEvent 事件流
|
|
5
|
+
// S7.4 工具调度(executor.ts):ToolDispatcher 真实现 / 提案内存仓(TTL + 上限 + 项目绑定)
|
|
6
|
+
import { TOOLS_PKG_NAME } from "@whispering233/ai-editor-tools";
|
|
7
|
+
export const AGENT_PKG_NAME = "@whispering233/ai-editor-agent";
|
|
8
|
+
export const AGENT_PKG_VERSION = "0.1.0";
|
|
9
|
+
export const TOOLS_DEP = TOOLS_PKG_NAME;
|
|
10
|
+
export * from "./session.js";
|
|
11
|
+
export * from "./prompts.js";
|
|
12
|
+
export * from "./context.js";
|
|
13
|
+
export * from "./run.js";
|
|
14
|
+
export * from "./executor.js";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,6DAA6D;AAC7D,0EAA0E;AAC1E,0EAA0E;AAC1E,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAG,gCAAgC,CAAC;AAC/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AACzC,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC;AAExC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** 内核提示词(决策 7 内核层):创作顾问角色定义 + 行为规范,代码固定不可用户编辑 */
|
|
2
|
+
export declare const KERNEL_PROMPT = "\u4F60\u662F\u300C\u521B\u4F5C\u987E\u95EE\u300D\uFF0C\u4E00\u540D\u8D44\u6DF1\u5C0F\u8BF4\u521B\u4F5C\u642D\u6863\uFF0C\u670D\u52A1\u4E8E\u4F5C\u8005\u7684 AI \u5199\u4F5C\u5DE5\u4F5C\u53F0\u3002\n\u4F60\u7684\u804C\u8D23\u662F\u5E2E\u52A9\u4F5C\u8005\u5206\u6790\u5927\u7EB2\u3001\u4EBA\u7269\u3001\u5173\u7CFB\u3001\u60C5\u8282\u4E0E\u4F0F\u7B14\uFF0C\u63D0\u51FA\u53EF\u6267\u884C\u7684\u4FEE\u6539\u5EFA\u8BAE\u2014\u2014\u4F60\u662F\u5206\u6790\u987E\u95EE\uFF0C\u4E0D\u662F\u64CD\u4F5C\u5458\uFF0C\u4E5F\u4E0D\u4EE3\u5199\u6B63\u6587\u3002\n\n\u884C\u4E3A\u51C6\u5219\uFF1A\n1. \u4E0D\u751F\u6210\u6B63\u6587\uFF1A\u4E0D\u4EE3\u5199\u5C0F\u8BF4\u6B63\u6587\u6216\u7AE0\u8282\u5185\u5BB9\uFF0C\u8F93\u51FA\u59CB\u7EC8\u662F\u5206\u6790\u3001\u5EFA\u8BAE\u4E0E\u65B9\u6848\u3002\n2. \u4E0D\u76F4\u63A5\u5199\u5165\uFF1A\u7EDD\u4E0D\u76F4\u63A5\u5199\u5165\u3001\u4FEE\u6539\u6216\u5220\u9664\u4EFB\u4F55\u6570\u636E\uFF08\u5B9E\u4F53/\u5173\u7CFB/\u5927\u7EB2\u8282\u70B9/\u4F0F\u7B14/Delta\uFF09\uFF1B\u5199\u64CD\u4F5C\u4E00\u5F8B\u901A\u8FC7 propose_* \u5DE5\u5177\u751F\u6210\u63D0\u6848\uFF0C\u7531\u7528\u6237\u786E\u8BA4\u540E\u6267\u884C\u2014\u2014\u7528\u6237\u59CB\u7EC8\u662F\u6700\u7EC8\u51B3\u7B56\u8005\u3002\n3. \u67E5\u8BE2\u4E0E\u5206\u6790\u81EA\u7531\uFF1A\u53EF\u968F\u65F6\u8C03\u7528\u67E5\u8BE2\u7C7B\u4E0E\u5206\u6790\u7C7B\u5DE5\u5177\u83B7\u53D6\u6570\u636E\u3001\u8FD0\u884C\u7ED3\u6784\u5316\u5206\u6790\u3002\n4. \u7ED3\u679C\u622A\u65AD\u987B\u77E5\uFF1A\u5DE5\u5177\u7ED3\u679C\u82E5\u542B\u300C\u5DF2\u622A\u65AD\u300D\u6807\u8BB0\u5373\u6570\u636E\u4E0D\u5B8C\u6574\u2014\u2014\u8BF7\u7F29\u5C0F\u67E5\u8BE2\u8303\u56F4\u6216\u5206\u9875\u83B7\u53D6\uFF0C\u4E0D\u5F97\u57FA\u4E8E\u6B8B\u7F3A\u6570\u636E\u4E0B\u7ED3\u8BBA\u3002\n5. \u957F\u5EA6\u622A\u65AD\u987B\u77E5\uFF1A\u82E5\u4F60\u7684\u56DE\u590D\u56E0\u957F\u5EA6\u9650\u5236\u88AB\u622A\u65AD\uFF0C\u7CFB\u7EDF\u4E0D\u4F1A\u91CD\u53D1\u4F60\u7684\u534A\u6761\u56DE\u590D\uFF1B\u8BF7\u63A7\u5236\u7BC7\u5E45\uFF0C\u4F18\u5148\u7ED9\u51FA\u7ED3\u8BBA\u4E0E\u8981\u70B9\u3002\n6. \u805A\u7126\u4F18\u5148\uFF1Asystem \u6D88\u606F\u4E2D\u300C\u5F53\u524D\u805A\u7126\u300D\u6BB5\u843D\u662F\u4F5C\u8005\u6B63\u5728\u67E5\u770B\u7684\u5185\u5BB9\uFF0C\u4F18\u5148\u56F4\u7ED5\u5B83\u5C55\u5F00\u3002\n7. \u63D0\u6848\u8BED\u4E49\uFF1A\u8C03\u7528\u63D0\u6848\u5DE5\u5177\u540E\u9700\u7528\u6237\u786E\u8BA4\u624D\u751F\u6548\uFF1B\u786E\u8BA4\u524D\u4E0D\u8981\u5047\u8BBE\u4EFB\u4F55\u4FEE\u6539\u5DF2\u53D1\u751F\u3002\n8. \u56DE\u590D\u4F7F\u7528\u9879\u76EE\u914D\u7F6E\u7684\u8BED\u8A00\u3002";
|
|
3
|
+
/** 项目提示词段标题(决策 7 项目层,来自 project.json 的 prompt 字段) */
|
|
4
|
+
export declare const PROJECT_PROMPT_TITLE = "## \u9879\u76EE\u8BBE\u5B9A";
|
|
5
|
+
/** 临时指令段标题(决策 7 临时层,即时输入、不持久化) */
|
|
6
|
+
export declare const INSTRUCTION_TITLE = "## \u672C\u6B21\u6307\u4EE4";
|
|
7
|
+
/** 可用工具清单段标题(name + description 一行,来自 registry listTools) */
|
|
8
|
+
export declare const TOOL_LIST_TITLE = "## \u53EF\u7528\u5DE5\u5177";
|
|
9
|
+
/** 聚焦上下文段标题(决策 6 聚焦层:当前视图中的实体/大纲节点,由调用方查询后传入) */
|
|
10
|
+
export declare const FOCUS_TITLE = "## \u5F53\u524D\u805A\u7126";
|
|
11
|
+
/** 聚焦上下文截断提示(决策 15 精神:截断必须显式告知,不得静默丢数据) */
|
|
12
|
+
export declare const FOCUS_TRUNCATION_NOTICE = "\n\n[\u805A\u7126\u4E0A\u4E0B\u6587\u5DF2\u622A\u65AD\uFF1A\u8D85\u51FA token \u9884\u7B97\uFF0C\u6570\u636E\u4E0D\u5B8C\u6574\uFF1B\u8BF7\u7F29\u5C0F\u67E5\u770B\u8303\u56F4]";
|
|
13
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAMA,iDAAiD;AACjD,eAAO,MAAM,aAAa,oiFAWV,CAAC;AAIjB,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,gCAAY,CAAC;AAE9C,kCAAkC;AAClC,eAAO,MAAM,iBAAiB,gCAAY,CAAC;AAE3C,6DAA6D;AAC7D,eAAO,MAAM,eAAe,gCAAY,CAAC;AAEzC,iDAAiD;AACjD,eAAO,MAAM,WAAW,gCAAY,CAAC;AAErC,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB,oLAA6C,CAAC"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// @whispering233/ai-editor-agent 提示词(S7.2)
|
|
2
|
+
// 契约来源:doc/design/decisions.md 决策 7(提示词三层注入——本文件是**内核层**:
|
|
3
|
+
// 开发者编辑、代码固定、不持久化)、doc/api/tools.md「核心设计原则」(AI 角色是分析顾问
|
|
4
|
+
// 不是操作员、写操作走提案、截断显式告知)。
|
|
5
|
+
// 项目层(用户可编辑,project.json)与临时层(即时输入)由调用方传入 context.ts 组装。
|
|
6
|
+
/** 内核提示词(决策 7 内核层):创作顾问角色定义 + 行为规范,代码固定不可用户编辑 */
|
|
7
|
+
export const KERNEL_PROMPT = `你是「创作顾问」,一名资深小说创作搭档,服务于作者的 AI 写作工作台。
|
|
8
|
+
你的职责是帮助作者分析大纲、人物、关系、情节与伏笔,提出可执行的修改建议——你是分析顾问,不是操作员,也不代写正文。
|
|
9
|
+
|
|
10
|
+
行为准则:
|
|
11
|
+
1. 不生成正文:不代写小说正文或章节内容,输出始终是分析、建议与方案。
|
|
12
|
+
2. 不直接写入:绝不直接写入、修改或删除任何数据(实体/关系/大纲节点/伏笔/Delta);写操作一律通过 propose_* 工具生成提案,由用户确认后执行——用户始终是最终决策者。
|
|
13
|
+
3. 查询与分析自由:可随时调用查询类与分析类工具获取数据、运行结构化分析。
|
|
14
|
+
4. 结果截断须知:工具结果若含「已截断」标记即数据不完整——请缩小查询范围或分页获取,不得基于残缺数据下结论。
|
|
15
|
+
5. 长度截断须知:若你的回复因长度限制被截断,系统不会重发你的半条回复;请控制篇幅,优先给出结论与要点。
|
|
16
|
+
6. 聚焦优先:system 消息中「当前聚焦」段落是作者正在查看的内容,优先围绕它展开。
|
|
17
|
+
7. 提案语义:调用提案工具后需用户确认才生效;确认前不要假设任何修改已发生。
|
|
18
|
+
8. 回复使用项目配置的语言。`;
|
|
19
|
+
// ============ 组装段标题与提示文案(context.ts 拼装 system 消息使用) ============
|
|
20
|
+
/** 项目提示词段标题(决策 7 项目层,来自 project.json 的 prompt 字段) */
|
|
21
|
+
export const PROJECT_PROMPT_TITLE = "## 项目设定";
|
|
22
|
+
/** 临时指令段标题(决策 7 临时层,即时输入、不持久化) */
|
|
23
|
+
export const INSTRUCTION_TITLE = "## 本次指令";
|
|
24
|
+
/** 可用工具清单段标题(name + description 一行,来自 registry listTools) */
|
|
25
|
+
export const TOOL_LIST_TITLE = "## 可用工具";
|
|
26
|
+
/** 聚焦上下文段标题(决策 6 聚焦层:当前视图中的实体/大纲节点,由调用方查询后传入) */
|
|
27
|
+
export const FOCUS_TITLE = "## 当前聚焦";
|
|
28
|
+
/** 聚焦上下文截断提示(决策 15 精神:截断必须显式告知,不得静默丢数据) */
|
|
29
|
+
export const FOCUS_TRUNCATION_NOTICE = "\n\n[聚焦上下文已截断:超出 token 预算,数据不完整;请缩小查看范围]";
|
|
30
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,0DAA0D;AAC1D,uDAAuD;AACvD,wBAAwB;AACxB,yDAAyD;AAEzD,iDAAiD;AACjD,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;gBAWb,CAAC;AAEjB,kEAAkE;AAElE,qDAAqD;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC;AAE9C,kCAAkC;AAClC,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAE3C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAAG,SAAS,CAAC;AAEzC,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC;AAErC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,0CAA0C,CAAC"}
|
package/dist/run.d.ts
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
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
|
+
/** 轮次上限(决策 15:8 轮;持续 tool_call 死循环兜底) */
|
|
5
|
+
export declare const DEFAULT_MAX_ROUNDS = 8;
|
|
6
|
+
/** 单轮总预算 ms(决策 15:120s,含 LLM 重试退避与工具执行;测试可覆盖) */
|
|
7
|
+
export declare const DEFAULT_ROUND_TIMEOUT_MS = 120000;
|
|
8
|
+
/**
|
|
9
|
+
* 单次 attempt 超时 ms(决策 15:「LLM 单次 attempt 另有自身 fetch 超时」落地——
|
|
10
|
+
* 独立于 120s 单轮总预算;attempt 超时映射为可重试错误,轮内重试仍受 roundDeadline 兜底)。
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_ATTEMPT_TIMEOUT_MS = 60000;
|
|
13
|
+
/** 上下文 token 预算(决策 15:60K——DeepSeek 64K 窗口留余量;测试可覆盖) */
|
|
14
|
+
export declare const DEFAULT_TOKEN_BUDGET = 60000;
|
|
15
|
+
/** 提案载荷(S7.4 工具调度层构造 preview;对齐 endpoints.md proposal 事件 data 形态) */
|
|
16
|
+
export interface ProposalPayload {
|
|
17
|
+
proposal_id: string;
|
|
18
|
+
/** 提案类型 = 产生它的 propose_* 工具名(endpoints.md 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 之后、循环继续之前发送(endpoints.md 顺序约定)
|
|
30
|
+
* - done:自然终止(无工具调用),携带 session_id
|
|
31
|
+
* - error:终止(决策 15:模型最终失败 / 8 轮上限 / 超时 / token 超限 / 调度器缺陷)或
|
|
32
|
+
* 用户取消(aborted=true,决策 16);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 的内容须含错误说明(决策 15 结构化喂回自纠) */
|
|
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 错位配对——决策 18)
|
|
88
|
+
* - signal:决策 16 ③「工具执行中检查取消」(S7.4 executor 承担;长工具执行须监听)
|
|
89
|
+
* - 本层不抛错(失败编码进 isError 结果);抛错视为调度器缺陷 → 循环终止。
|
|
90
|
+
* **例外:AbortedError(tools analysis/utils,决策 16 ③ 取消语义)→ 原样抛穿**——
|
|
91
|
+
* S7.4 executor 在工具执行中检查 signal,命中取消即抛 AbortedError;本层 dispatcher
|
|
92
|
+
* catch 识别后按用户取消终止(aborted=true、不重试、不视为缺陷),与循环其他环节的
|
|
93
|
+
* 取消语义一致(决策 16:取消不喂回)
|
|
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 与用户取消分离,决策 15)。
|
|
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
|
+
/** 聚焦上下文文本(决策 6 聚焦层;S7.6 查询实体/大纲节点后拼好传入) */
|
|
128
|
+
focus?: string;
|
|
129
|
+
/** 项目提示词(决策 7 项目层) */
|
|
130
|
+
projectPrompt?: string;
|
|
131
|
+
/** 临时指令(决策 7 临时层) */
|
|
132
|
+
instruction?: string;
|
|
133
|
+
deps: RunAgentDeps;
|
|
134
|
+
/** 用户取消信号(决策 16:全链路第 0 层;abort 永不重试) */
|
|
135
|
+
signal?: AbortSignalLike;
|
|
136
|
+
/** 分层上下文预算覆盖(S7.2) */
|
|
137
|
+
budgets?: Partial<ContextBudgets>;
|
|
138
|
+
/** 工具清单(默认 registry listTools;S7.2 注入 system 消息) */
|
|
139
|
+
tools?: ToolListEntry[];
|
|
140
|
+
/** 轮次上限(决策 15:默认 8;测试可覆盖) */
|
|
141
|
+
maxRounds?: number;
|
|
142
|
+
/** 单轮总预算 ms(决策 15:默认 120s 含重试退避;测试可覆盖) */
|
|
143
|
+
roundTimeoutMs?: number;
|
|
144
|
+
/** 单次 attempt 超时 ms(决策 15:默认 60s——LLM 单次调用独立超时,与轮次总预算分离;测试可覆盖) */
|
|
145
|
+
attemptTimeoutMs?: number;
|
|
146
|
+
/** 上下文 token 预算(决策 15:默认 60K;测试可覆盖) */
|
|
147
|
+
tokenBudget?: number;
|
|
148
|
+
/** 每次模型调用最大重试次数(决策 15:默认 3;测试可覆盖) */
|
|
149
|
+
maxRetries?: number;
|
|
150
|
+
/** 重试退避基数 ms(决策 15:默认 2000;测试可覆盖) */
|
|
151
|
+
retryBaseDelayMs?: number;
|
|
152
|
+
}
|
|
153
|
+
export interface RunAgentResult {
|
|
154
|
+
ok: boolean;
|
|
155
|
+
/** 用户取消(决策 16: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
|
+
* 重试累计(决策 15:重试与轮次分开计量、不互相消耗;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 标错喂回(不执行,决策 15)
|
|
174
|
+
* - 有合法 tool_call → dispatcher 执行 → tool_result 事件(按 id 回填)→ proposal 事件
|
|
175
|
+
* (在 tool_result 后、循环继续前)→ 结果回填会话 → 下一轮
|
|
176
|
+
* 三重保险(决策 15):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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|