@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.
- package/dist/index.d.ts +2 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/runtime/events.d.ts +21 -0
- package/dist/runtime/events.d.ts.map +1 -0
- package/dist/runtime/events.js +235 -0
- package/dist/runtime/events.js.map +1 -0
- package/dist/runtime/index.d.ts +11 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +12 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/message-projection.d.ts +57 -0
- package/dist/runtime/message-projection.d.ts.map +1 -0
- package/dist/runtime/message-projection.js +94 -0
- package/dist/runtime/message-projection.js.map +1 -0
- package/dist/runtime/paths.d.ts +11 -0
- package/dist/runtime/paths.d.ts.map +1 -0
- package/dist/runtime/paths.js +23 -0
- package/dist/runtime/paths.js.map +1 -0
- package/dist/runtime/project-runtime.d.ts +57 -0
- package/dist/runtime/project-runtime.d.ts.map +1 -0
- package/dist/runtime/project-runtime.js +78 -0
- package/dist/runtime/project-runtime.js.map +1 -0
- package/dist/runtime/proposals.d.ts +85 -0
- package/dist/runtime/proposals.d.ts.map +1 -0
- package/dist/runtime/proposals.js +173 -0
- package/dist/runtime/proposals.js.map +1 -0
- package/dist/runtime/resources.d.ts +14 -0
- package/dist/runtime/resources.d.ts.map +1 -0
- package/dist/runtime/resources.js +39 -0
- package/dist/runtime/resources.js.map +1 -0
- package/dist/runtime/sessions.d.ts +35 -0
- package/dist/runtime/sessions.d.ts.map +1 -0
- package/dist/runtime/sessions.js +89 -0
- package/dist/runtime/sessions.js.map +1 -0
- package/dist/{prompts.d.ts → runtime/system-prompt.d.ts} +4 -12
- package/dist/runtime/system-prompt.d.ts.map +1 -0
- package/dist/runtime/system-prompt.js +22 -0
- package/dist/runtime/system-prompt.js.map +1 -0
- package/dist/runtime/tool-result.d.ts +12 -0
- package/dist/runtime/tool-result.d.ts.map +1 -0
- package/dist/runtime/tool-result.js +53 -0
- package/dist/runtime/tool-result.js.map +1 -0
- package/dist/runtime/tools.d.ts +28 -0
- package/dist/runtime/tools.d.ts.map +1 -0
- package/dist/runtime/tools.js +54 -0
- package/dist/runtime/tools.js.map +1 -0
- package/package.json +5 -4
- package/dist/context.d.ts +0 -96
- package/dist/context.d.ts.map +0 -1
- package/dist/context.js +0 -149
- package/dist/context.js.map +0 -1
- package/dist/executor.d.ts +0 -86
- package/dist/executor.d.ts.map +0 -1
- package/dist/executor.js +0 -259
- package/dist/executor.js.map +0 -1
- package/dist/prompts.d.ts.map +0 -1
- package/dist/prompts.js +0 -29
- package/dist/prompts.js.map +0 -1
- package/dist/run.d.ts +0 -182
- package/dist/run.d.ts.map +0 -1
- package/dist/run.js +0 -430
- package/dist/run.js.map +0 -1
- package/dist/session.d.ts +0 -60
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -204
- package/dist/session.js.map +0 -1
package/dist/run.js
DELETED
|
@@ -1,430 +0,0 @@
|
|
|
1
|
-
// @whispering233/ai-editor-agent 主循环(S7.3)
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
// 架构边界:本包**不依赖 db**——消息持久化由 S7.6 server 层负责(onMessages 回调输出每轮
|
|
5
|
-
// 新消息序列,本文件只定义接口不落库);工具执行 / 批量校验 / 提案仓在 S7.4(本文件只定义
|
|
6
|
-
// ToolDispatcher 接口与消费,测试用 mock,S7.4 提供真实现)。
|
|
7
|
-
import { ERROR_CODES } from "@whispering233/ai-editor-shared/schemas";
|
|
8
|
-
import { ABORT_ERROR, classifyLLMError, DEFAULT_BASE_DELAY_MS, DEFAULT_MAX_RETRIES, LLM_TRANSPORT_ERROR_CODES, withRetry, } from "@whispering233/ai-editor-llm";
|
|
9
|
-
import { AbortedError } from "@whispering233/ai-editor-tools";
|
|
10
|
-
import { buildContext, } from "./context.js";
|
|
11
|
-
import { appendMessage, retryPayload } from "./session.js";
|
|
12
|
-
// ============ 三重保险默认值 ============
|
|
13
|
-
/** 轮次上限(8 轮;持续 tool_call 死循环兜底) */
|
|
14
|
-
export const DEFAULT_MAX_ROUNDS = 8;
|
|
15
|
-
/** 单轮总预算 ms(120s,含 LLM 重试退避与工具执行;测试可覆盖) */
|
|
16
|
-
export const DEFAULT_ROUND_TIMEOUT_MS = 120_000;
|
|
17
|
-
/**
|
|
18
|
-
* 单次 attempt 超时 ms(「LLM 单次 attempt 另有自身 fetch 超时」落地——
|
|
19
|
-
* 独立于 120s 单轮总预算;attempt 超时映射为可重试错误,轮内重试仍受 roundDeadline 兜底)。
|
|
20
|
-
*/
|
|
21
|
-
export const DEFAULT_ATTEMPT_TIMEOUT_MS = 60_000;
|
|
22
|
-
/** 上下文 token 预算(60K——DeepSeek 64K 窗口留余量;测试可覆盖) */
|
|
23
|
-
export const DEFAULT_TOKEN_BUDGET = 60_000;
|
|
24
|
-
// ============ 内部辅助 ============
|
|
25
|
-
/** attempt 超时合成错误(超时映射为**可重试**类,与用户取消分离——勿把 AbortSignal.timeout 直挂用户取消链路) */
|
|
26
|
-
const ATTEMPT_TIMEOUT_CODE = "ATTEMPT_TIMEOUT";
|
|
27
|
-
const ATTEMPT_TIMEOUT_ERROR = {
|
|
28
|
-
status: 0,
|
|
29
|
-
code: ATTEMPT_TIMEOUT_CODE,
|
|
30
|
-
message: "单次模型调用超时(轮次预算内可重试)",
|
|
31
|
-
};
|
|
32
|
-
const ATTEMPT_TIMEOUT_RESULT = {
|
|
33
|
-
ok: false,
|
|
34
|
-
aborted: false,
|
|
35
|
-
error: ATTEMPT_TIMEOUT_ERROR,
|
|
36
|
-
};
|
|
37
|
-
/** length 截断兜底说明(LLMToolCallResult.error 缺失时——finalizeToolCalls 正常必已标记) */
|
|
38
|
-
const LENGTH_TRUNCATION_NOTICE = "finish_reason=length:参数可能不完整,不执行";
|
|
39
|
-
/**
|
|
40
|
-
* 终止类错误码取值(ErrorCode 单一来源;shared barrel 仅类型导出,运行时常量走 schemas 子路径——
|
|
41
|
-
* 与 tools 包同款导入策略)。
|
|
42
|
-
*/
|
|
43
|
-
function codeOf(name) {
|
|
44
|
-
const found = ERROR_CODES.find((c) => c === name);
|
|
45
|
-
if (!found)
|
|
46
|
-
throw new Error(`run.ts: ErrorCode ${name} 不在枚举中`);
|
|
47
|
-
return found;
|
|
48
|
-
}
|
|
49
|
-
const CODE_MAX_ITERATIONS = codeOf("AGENT_MAX_ITERATIONS");
|
|
50
|
-
const CODE_TIMEOUT = codeOf("AGENT_TIMEOUT");
|
|
51
|
-
const CODE_TOKEN_BUDGET = codeOf("AGENT_TOKEN_BUDGET");
|
|
52
|
-
const CODE_DISPATCH = codeOf("AGENT_DISPATCH_ERROR");
|
|
53
|
-
const CODE_INTERNAL = codeOf("AGENT_INTERNAL_ERROR");
|
|
54
|
-
/** 创建 AbortController(结构取用,避免依赖 DOM lib) */
|
|
55
|
-
function createAbortController() {
|
|
56
|
-
const Ctor = globalThis.AbortController;
|
|
57
|
-
if (!Ctor)
|
|
58
|
-
throw new Error("当前环境缺少 AbortController(需要 Node ≥ 18 或浏览器)");
|
|
59
|
-
return new Ctor();
|
|
60
|
-
}
|
|
61
|
-
/** 一次性定时器(结构取用 setTimeout/clearTimeout;返回 clear 句柄) */
|
|
62
|
-
function createTimer(callback, ms) {
|
|
63
|
-
const { setTimeout: schedule, clearTimeout: cancel } = globalThis;
|
|
64
|
-
if (!schedule || !cancel)
|
|
65
|
-
throw new Error("当前环境缺少 setTimeout/clearTimeout(需要 Node ≥ 18 或浏览器)");
|
|
66
|
-
const handle = schedule(callback, ms);
|
|
67
|
-
return { clear: () => cancel(handle) };
|
|
68
|
-
}
|
|
69
|
-
/** ABORT_ERROR 判等(按码匹配——容忍拷贝形态) */
|
|
70
|
-
function isAbortError(err) {
|
|
71
|
-
return (typeof err === "object" &&
|
|
72
|
-
err !== null &&
|
|
73
|
-
err.code === LLM_TRANSPORT_ERROR_CODES.ABORTED);
|
|
74
|
-
}
|
|
75
|
-
/** attempt 超时错误判等 */
|
|
76
|
-
function isAttemptTimeoutError(err) {
|
|
77
|
-
return (typeof err === "object" &&
|
|
78
|
-
err !== null &&
|
|
79
|
-
err.code === ATTEMPT_TIMEOUT_CODE);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* 主循环重试分类:可重试 = llm 传输类(429/5xx/网络断开/流截断)∪ attempt 超时;
|
|
83
|
-
* abort(ABORTED 码)由 classifyLLMError 判为不可重试(取消不重试)。
|
|
84
|
-
*/
|
|
85
|
-
function classifyRunOutcome(outcome) {
|
|
86
|
-
if (outcome.type === "error")
|
|
87
|
-
return isAttemptTimeoutError(outcome.error) || classifyLLMError(outcome.error);
|
|
88
|
-
if (outcome.value.ok)
|
|
89
|
-
return false;
|
|
90
|
-
return isAttemptTimeoutError(outcome.value.error) || classifyLLMError(outcome.value.error);
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* abort 双形态归一(ora S6.2 审核 2026-08):
|
|
94
|
-
* chatStream 流中返回 { ok:false, aborted }(resolve 形态)vs withRetry 尝试前/退避 sleep
|
|
95
|
-
* 抛 ABORT_ERROR(throw 形态)——此处统一为 resolve 形态 { ok:false, aborted, error },
|
|
96
|
-
* 主循环只处理一种形态。同时实现「超时信号与用户取消分离」:
|
|
97
|
-
* attempt 超时(timedOut=true 且非用户取消)→ 归一为**可重试** ATTEMPT_TIMEOUT;
|
|
98
|
-
* 用户取消 → aborted 原样(不重试)。
|
|
99
|
-
* 非 abort 异常照原样抛出(防御路径——chatStream 本不 throw,交 withRetry 分类)。
|
|
100
|
-
*/
|
|
101
|
-
function normalizeAttemptError(err, timedOut, userAborted) {
|
|
102
|
-
if (isAbortError(err)) {
|
|
103
|
-
if (!userAborted && timedOut)
|
|
104
|
-
return ATTEMPT_TIMEOUT_RESULT;
|
|
105
|
-
return { ok: false, aborted: true, error: ABORT_ERROR };
|
|
106
|
-
}
|
|
107
|
-
throw err;
|
|
108
|
-
}
|
|
109
|
-
/** 同上(resolve 形态入口:produce 正常返回但被 attempt 超时中止时 timedOut=true) */
|
|
110
|
-
function normalizeAttemptResult(result, timedOut, userAborted) {
|
|
111
|
-
// S2(ora 审核):超时定时器触发与 produce 成功 resolve 的竞态防御——定时器先置 timedOut、
|
|
112
|
-
// abort 尚未生效时 produce 恰返回 ok,该轮不得按成功轮处理(否则超时轮被当成功轮进入调度)
|
|
113
|
-
if (result.ok && timedOut && !userAborted)
|
|
114
|
-
return ATTEMPT_TIMEOUT_RESULT;
|
|
115
|
-
if (result.ok)
|
|
116
|
-
return result;
|
|
117
|
-
if (result.aborted && !userAborted) {
|
|
118
|
-
return timedOut ? ATTEMPT_TIMEOUT_RESULT : result; // 超时 → 可重试;未知来源 abort 原样(防御不可重试)
|
|
119
|
-
}
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* S7.2 回写历史段真实用量换算(口径统一,ora S7.3 审核 S1——三处注释等价表述,
|
|
124
|
-
* 见 context.ts BuildContextInput.lastUsage 与 llm/token.ts EstimateMessagesTokensOptions.lastUsage):
|
|
125
|
-
* - 以 usage.prompt_tokens 为起点:减 system + toolList + focus 估算(completion 属输出、
|
|
126
|
-
* 不占 prompt_tokens,无需扣除)
|
|
127
|
-
* - 以 usage.total_tokens 为起点:再减 completion_tokens(total = prompt + completion,
|
|
128
|
-
* 两式等价:total - (system+toolList+focus+completion) = prompt - (system+toolList+focus))
|
|
129
|
-
* 下一轮 buildContext 以该值作 lastUsage(estimateMessagesTokens 基线);上下文触发裁剪后
|
|
130
|
-
* buildContext 会重置基线(meta.effectiveLastUsage=null),下轮从此处按最新 usage 重新换算——
|
|
131
|
-
* 防预算漂移。
|
|
132
|
-
*/
|
|
133
|
-
function toHistoryBaseline(usage, tokens) {
|
|
134
|
-
if (usage === null)
|
|
135
|
-
return null;
|
|
136
|
-
const historyTokens = Math.max(0, usage.prompt_tokens - tokens.system - tokens.toolList - tokens.focus);
|
|
137
|
-
return { prompt_tokens: historyTokens, completion_tokens: 0, total_tokens: historyTokens };
|
|
138
|
-
}
|
|
139
|
-
/** LLMToolCallResult(解析后形态)→ wire 请求形态(assistant.tool_calls 回填原始 arguments 串—— 配对依赖 id) */
|
|
140
|
-
function toWireToolCalls(calls) {
|
|
141
|
-
return calls.map((c) => ({
|
|
142
|
-
id: c.id,
|
|
143
|
-
type: "function",
|
|
144
|
-
function: { name: c.name, arguments: c.rawArguments },
|
|
145
|
-
}));
|
|
146
|
-
}
|
|
147
|
-
// ============ 主循环 ============
|
|
148
|
-
/**
|
|
149
|
-
* runAgent:对话主循环(S7.3)。每轮:buildContext(含 lastUsage 回写链)→ LLM 调用
|
|
150
|
-
* (withRetry + classifyRunOutcome + attempt 独立超时)→ 文本实时转发 → 成功收尾:
|
|
151
|
-
* - 无 tool_call → done 事件终止
|
|
152
|
-
* - stopReason=length → 全部 tool_call 标错喂回(不执行)
|
|
153
|
-
* - 有合法 tool_call → dispatcher 执行 → tool_result 事件(按 id 回填)→ proposal 事件
|
|
154
|
-
* (在 tool_result 后、循环继续前)→ 结果回填会话 → 下一轮
|
|
155
|
-
* 三重保险:8 轮上限 / 120s 单轮总预算(含重试退避**与工具执行**——调度前与
|
|
156
|
-
* dispatcher 返回后均校验 deadline)/ token 预算,各自发 error 事件终止。工具失败(isError)
|
|
157
|
-
* 结构化回填不终止(喂回自纠);模型失败按重试策略退避重试,重试与轮次分开计量(报告值
|
|
158
|
-
* 累计不清零,见 result.retries 注释);abort 双形态归一后循环只处理 resolve 形态。
|
|
159
|
-
*/
|
|
160
|
-
export async function runAgent(input) {
|
|
161
|
-
const { sessionId, userMessage, focus, projectPrompt, instruction, deps, signal, budgets, tools, maxRounds = DEFAULT_MAX_ROUNDS, roundTimeoutMs = DEFAULT_ROUND_TIMEOUT_MS, attemptTimeoutMs = DEFAULT_ATTEMPT_TIMEOUT_MS, tokenBudget = DEFAULT_TOKEN_BUDGET, maxRetries = DEFAULT_MAX_RETRIES, retryBaseDelayMs = DEFAULT_BASE_DELAY_MS, } = input;
|
|
162
|
-
// 安全 emit / onMessages(ora S7.3 审核 S3):消费者回调抛错不逃逸——runAgent 不得因
|
|
163
|
-
// S7.6 的 SSE 写入或落库异常直接 reject(那会导致 SSE 异常关流而非 error 事件)
|
|
164
|
-
const emit = (event) => {
|
|
165
|
-
try {
|
|
166
|
-
deps.onEvent?.(event);
|
|
167
|
-
}
|
|
168
|
-
catch {
|
|
169
|
-
// 消费者抛错被吞:事件流继续(S7.6 不得依赖异常传播)
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
const emitMessages = (messages) => {
|
|
173
|
-
try {
|
|
174
|
-
deps.onMessages?.(messages);
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
// 落库抛错被吞:循环继续(S7.6 应自行处理持久化失败)
|
|
178
|
-
}
|
|
179
|
-
};
|
|
180
|
-
// 用户消息入会话(S7.6 传入的 session 不应已含本轮消息——由本层追加,避免双写)
|
|
181
|
-
let session = appendMessage(input.session, { role: "user", content: userMessage });
|
|
182
|
-
let rounds = 0;
|
|
183
|
-
let retries = 0; // 重试累计(重试与轮次分开计量、不互相消耗;报告值不清零——见下方说明)
|
|
184
|
-
let lastUsage = null; // 历史段基线(S7.2 回写换算)
|
|
185
|
-
while (rounds < maxRounds) {
|
|
186
|
-
rounds += 1;
|
|
187
|
-
emit({ type: "turn_start", round: rounds });
|
|
188
|
-
// ---- 1. 组装上下文(S7.2:三层注入 + 聚焦 + 工具清单 + 成对裁剪 + usage 基线) ----
|
|
189
|
-
const ctx = buildContext({
|
|
190
|
-
history: session,
|
|
191
|
-
focus,
|
|
192
|
-
projectPrompt,
|
|
193
|
-
instruction,
|
|
194
|
-
lastUsage,
|
|
195
|
-
budgets,
|
|
196
|
-
tools,
|
|
197
|
-
});
|
|
198
|
-
// ---- 2. 取消检查(优先于预算:已取消且并发超限时先 aborted 终止,不发 token error) ----
|
|
199
|
-
if (signal?.aborted) {
|
|
200
|
-
emit({ type: "error", code: ABORT_ERROR.code ?? "ABORTED", message: ABORT_ERROR.message, aborted: true });
|
|
201
|
-
return { ok: false, aborted: true, error: ABORT_ERROR, rounds, retries };
|
|
202
|
-
}
|
|
203
|
-
// ---- 3. token 预算(三重保险之三;超限发 error 终止) ----
|
|
204
|
-
if (ctx.tokens.total > tokenBudget) {
|
|
205
|
-
const message = `上下文 token 估算 ${ctx.tokens.total} 超出预算 ${tokenBudget}`;
|
|
206
|
-
emit({ type: "error", code: CODE_TOKEN_BUDGET, message, aborted: false });
|
|
207
|
-
return { ok: false, aborted: false, error: { status: 0, code: CODE_TOKEN_BUDGET, message }, rounds, retries };
|
|
208
|
-
}
|
|
209
|
-
// ---- 4. 单轮 deadline(三重保险之二:120s 含重试退避与工具执行) ----
|
|
210
|
-
const roundDeadline = Date.now() + roundTimeoutMs;
|
|
211
|
-
// ---- 5. 模型调用:withRetry + attempt 独立超时控制器 + abort 双形态归一 ----
|
|
212
|
-
// 本轮文本/工具调用累积(attempt 级变量——重试自动丢弃失败轮累积,半条 assistant 不重发)
|
|
213
|
-
let attemptText = "";
|
|
214
|
-
let attemptCalls = [];
|
|
215
|
-
const attempt = async () => {
|
|
216
|
-
const remaining = roundDeadline - Date.now();
|
|
217
|
-
if (remaining <= 0)
|
|
218
|
-
return ATTEMPT_TIMEOUT_RESULT; // 轮次预算耗尽(含退避):不再发起请求
|
|
219
|
-
attemptText = "";
|
|
220
|
-
attemptCalls = [];
|
|
221
|
-
// 独立 AbortController:超时 abort 与用户取消分离——勿把 AbortSignal.timeout
|
|
222
|
-
// 直挂用户取消链路(会把超时误判为取消、吞掉可重试机会)。
|
|
223
|
-
// attempt 超时 = min(剩余轮次预算, attemptTimeoutMs):单次调用有自身超时(
|
|
224
|
-
// 「LLM 单次 attempt 另有自身 fetch 超时」),轮内重试仍受 roundDeadline 兜底
|
|
225
|
-
const controller = createAbortController();
|
|
226
|
-
let timedOut = false;
|
|
227
|
-
const timer = createTimer(() => {
|
|
228
|
-
timedOut = true;
|
|
229
|
-
controller.abort();
|
|
230
|
-
}, Math.min(remaining, attemptTimeoutMs));
|
|
231
|
-
const onUserAbort = () => controller.abort();
|
|
232
|
-
signal?.addEventListener("abort", onUserAbort, { once: true });
|
|
233
|
-
try {
|
|
234
|
-
// 失败轮重试复用原 payload(半条 assistant 绝不追加)
|
|
235
|
-
const payload = retryPayload(ctx.messages);
|
|
236
|
-
const result = await deps.produce(payload, controller.signal, (event) => {
|
|
237
|
-
if (event.type === "text") {
|
|
238
|
-
attemptText += event.delta;
|
|
239
|
-
emit({ type: "text", delta: event.delta }); // 文本实时转发(失败轮已流出的半条文本属重试语义,接受)
|
|
240
|
-
}
|
|
241
|
-
else if (event.type === "tool_call") {
|
|
242
|
-
attemptCalls.push(event.toolCall); // 缓冲:produce 成功后才发 tool_call 事件
|
|
243
|
-
}
|
|
244
|
-
});
|
|
245
|
-
return normalizeAttemptResult(result, timedOut, signal?.aborted === true);
|
|
246
|
-
}
|
|
247
|
-
catch (err) {
|
|
248
|
-
return normalizeAttemptError(err, timedOut, signal?.aborted === true);
|
|
249
|
-
}
|
|
250
|
-
finally {
|
|
251
|
-
timer.clear();
|
|
252
|
-
signal?.removeEventListener("abort", onUserAbort);
|
|
253
|
-
}
|
|
254
|
-
};
|
|
255
|
-
// 可重试分类 + 轮次预算兜底(预算耗尽即不再重试,最终以超时错误终止)
|
|
256
|
-
const isRetryable = (outcome) => {
|
|
257
|
-
if (roundDeadline - Date.now() <= 0)
|
|
258
|
-
return false;
|
|
259
|
-
return classifyRunOutcome(outcome);
|
|
260
|
-
};
|
|
261
|
-
let result;
|
|
262
|
-
try {
|
|
263
|
-
result = await withRetry(attempt, {
|
|
264
|
-
isRetryable,
|
|
265
|
-
signal, // 用户取消不重试;退避 sleep 即时中断(llm/retry.ts 承担)
|
|
266
|
-
maxRetries,
|
|
267
|
-
baseDelayMs: retryBaseDelayMs,
|
|
268
|
-
onRetry: () => {
|
|
269
|
-
retries += 1; // 重试与轮次分开计量
|
|
270
|
-
},
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
catch (err) {
|
|
274
|
-
// withRetry 抛出的 ABORT_ERROR(尝试前检查 / 退避 sleep 中断):用户取消,归一为 aborted 结果
|
|
275
|
-
if (isAbortError(err)) {
|
|
276
|
-
emit({ type: "error", code: ABORT_ERROR.code ?? "ABORTED", message: ABORT_ERROR.message, aborted: true });
|
|
277
|
-
return { ok: false, aborted: true, error: ABORT_ERROR, rounds, retries };
|
|
278
|
-
}
|
|
279
|
-
// 防御路径:未知异常(chatStream 不 throw,理论不可达)
|
|
280
|
-
const error = { status: 0, code: CODE_INTERNAL, message: err instanceof Error ? err.message : String(err) };
|
|
281
|
-
emit({ type: "error", code: CODE_INTERNAL, message: error.message, aborted: false });
|
|
282
|
-
return { ok: false, aborted: false, error, rounds, retries };
|
|
283
|
-
}
|
|
284
|
-
// ---- 5. 模型调用最终失败 → error 事件终止(最终失败以 error 呈现,不静默) ----
|
|
285
|
-
if (!result.ok) {
|
|
286
|
-
// attempt 超时耗尽重试后终止:错误码映射为 ErrorCode 的 AGENT_TIMEOUT(SSE 事件)
|
|
287
|
-
const code = isAttemptTimeoutError(result.error) ? CODE_TIMEOUT : (result.error.code ?? "MODEL_ERROR");
|
|
288
|
-
const error = { ...result.error, code };
|
|
289
|
-
emit({ type: "error", code, message: error.message, aborted: result.aborted });
|
|
290
|
-
return { ok: false, aborted: result.aborted, error, rounds, retries };
|
|
291
|
-
}
|
|
292
|
-
// ---- 6. 成功:历史段基线换算(S7.2 回写)。
|
|
293
|
-
// 注:retries 报告值**不清零**(ora S7.3 审核 S6 断言口径)——「成功即清零」
|
|
294
|
-
// 针对的是预算计数语义(防跨轮累计吃满 8 轮预算),本实现每轮重试由 withRetry 的
|
|
295
|
-
// maxRetries 独立限制、轮次预算由 roundDeadline 兜底,不存在跨轮累计消耗预算的问题,
|
|
296
|
-
// 报告值取全程累计便于诊断(retries=1 即「本轮成功前重试过 1 次」) ----
|
|
297
|
-
lastUsage = toHistoryBaseline(result.usage, ctx.tokens);
|
|
298
|
-
const calls = attemptCalls;
|
|
299
|
-
const assistantContent = attemptText === "" ? null : attemptText;
|
|
300
|
-
const assistantMsg = calls.length > 0
|
|
301
|
-
? { role: "assistant", content: assistantContent, tool_calls: toWireToolCalls(calls) }
|
|
302
|
-
: { role: "assistant", content: assistantContent };
|
|
303
|
-
// ---- 7. 无工具调用 → done 终止(done 携带 session_id) ----
|
|
304
|
-
if (calls.length === 0) {
|
|
305
|
-
session = appendMessage(session, assistantMsg);
|
|
306
|
-
emitMessages([assistantMsg]);
|
|
307
|
-
emit({ type: "done", sessionId: sessionId ?? "" });
|
|
308
|
-
return { ok: true, aborted: false, error: null, rounds, retries };
|
|
309
|
-
}
|
|
310
|
-
// ---- 8. 工具调用事件(produce 成功后才发出——失败轮的缓冲调用丢弃,不产生脏事件) ----
|
|
311
|
-
for (const c of calls) {
|
|
312
|
-
emit({ type: "tool_call", tool: c.name, args: c.arguments ?? null, id: c.id });
|
|
313
|
-
}
|
|
314
|
-
// ---- 9. 调度前检查轮次预算(ora S7.3 审核 M2:「单轮总预算含工具执行」——
|
|
315
|
-
// attempt 成功后若预算已耗尽,直接 AGENT_TIMEOUT 终止、不再调度工具) ----
|
|
316
|
-
if (roundDeadline - Date.now() <= 0) {
|
|
317
|
-
const message = `单轮预算耗尽(${roundTimeoutMs}ms 含工具执行)`;
|
|
318
|
-
emit({ type: "error", code: CODE_TIMEOUT, message, aborted: false });
|
|
319
|
-
return { ok: false, aborted: false, error: { status: 0, code: CODE_TIMEOUT, message }, rounds, retries };
|
|
320
|
-
}
|
|
321
|
-
// ---- 10. 调度:length 截断与参数解析失败/缺 id 的调用一律不执行、标错喂回 ----
|
|
322
|
-
const truncated = result.stopReason === "length";
|
|
323
|
-
const results = new Array(calls.length);
|
|
324
|
-
const toDispatch = [];
|
|
325
|
-
const pending = [];
|
|
326
|
-
for (const [i, c] of calls.entries()) {
|
|
327
|
-
if (truncated || c.error !== undefined) {
|
|
328
|
-
// 截断/解析失败的调用:合成失败结果(LLMToolCallResult.error 已含说明,含 length 口径)
|
|
329
|
-
results[i] = {
|
|
330
|
-
id: c.id,
|
|
331
|
-
tool: c.name,
|
|
332
|
-
ok: false,
|
|
333
|
-
isError: true,
|
|
334
|
-
content: c.error ?? LENGTH_TRUNCATION_NOTICE,
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
else {
|
|
338
|
-
toDispatch.push({ id: c.id, tool: c.name, args: c.arguments ?? {} });
|
|
339
|
-
pending.push(i);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
if (toDispatch.length > 0) {
|
|
343
|
-
let dispatched;
|
|
344
|
-
try {
|
|
345
|
-
dispatched = await deps.dispatcher(toDispatch, signal); // 工具执行中检查取消(S7.4 承担)
|
|
346
|
-
}
|
|
347
|
-
catch (err) {
|
|
348
|
-
// 取消语义传播(S7.4 约定):executor 在工具执行中检查 signal,
|
|
349
|
-
// 命中取消抛 AbortedError(tools analysis/utils)——此处识别并按**用户取消**终止
|
|
350
|
-
// (aborted=true、不重试、不喂回),不得落入调度器缺陷分支(否则取消会被误报为
|
|
351
|
-
// AGENT_DISPATCH_ERROR 且 aborted=false,与「取消不重试」语义冲突)
|
|
352
|
-
const cancelled = signal?.aborted === true || err instanceof AbortedError;
|
|
353
|
-
if (cancelled) {
|
|
354
|
-
emit({ type: "error", code: ABORT_ERROR.code ?? "ABORTED", message: ABORT_ERROR.message, aborted: true });
|
|
355
|
-
return { ok: false, aborted: true, error: ABORT_ERROR, rounds, retries };
|
|
356
|
-
}
|
|
357
|
-
// 其余抛错视为调度器缺陷:终止(不喂回——避免把内部错误当工具结果循环重试)
|
|
358
|
-
const message = `工具调度器抛错:${err instanceof Error ? err.message : String(err)}`;
|
|
359
|
-
emit({ type: "error", code: CODE_DISPATCH, message, aborted: false });
|
|
360
|
-
return {
|
|
361
|
-
ok: false,
|
|
362
|
-
aborted: false,
|
|
363
|
-
error: { status: 0, code: CODE_DISPATCH, message },
|
|
364
|
-
rounds,
|
|
365
|
-
retries,
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
// 同序等长(防御——错位回填破坏 tool_call ↔ tool_result 配对)
|
|
369
|
-
if (dispatched.length !== toDispatch.length) {
|
|
370
|
-
const message = `工具调度结果条数不符:期望 ${toDispatch.length},实际 ${dispatched.length}`;
|
|
371
|
-
emit({ type: "error", code: CODE_DISPATCH, message, aborted: false });
|
|
372
|
-
return {
|
|
373
|
-
ok: false,
|
|
374
|
-
aborted: false,
|
|
375
|
-
error: { status: 0, code: CODE_DISPATCH, message },
|
|
376
|
-
rounds,
|
|
377
|
-
retries,
|
|
378
|
-
};
|
|
379
|
-
}
|
|
380
|
-
// id 交叉校验(ora S7.3 审核 S5——条数虽等但结果 id 与输入错位同样破坏配对)
|
|
381
|
-
for (let k = 0; k < dispatched.length; k++) {
|
|
382
|
-
if (dispatched[k].id !== toDispatch[k].id) {
|
|
383
|
-
const message = `工具调度结果 id 错位:期望 ${toDispatch[k].id},实际 ${dispatched[k].id}`;
|
|
384
|
-
emit({ type: "error", code: CODE_DISPATCH, message, aborted: false });
|
|
385
|
-
return {
|
|
386
|
-
ok: false,
|
|
387
|
-
aborted: false,
|
|
388
|
-
error: { status: 0, code: CODE_DISPATCH, message },
|
|
389
|
-
rounds,
|
|
390
|
-
retries,
|
|
391
|
-
};
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
dispatched.forEach((r, k) => {
|
|
395
|
-
results[pending[k]] = r;
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
// 调度后检查轮次预算(ora S7.3 审核 M2:工具执行可能耗时——执行中的工具无法中止
|
|
399
|
-
// (仅用户取消可中断),超出的后果 = 终止,即满足「120s 含工具执行」的预算语义)
|
|
400
|
-
if (roundDeadline - Date.now() <= 0) {
|
|
401
|
-
const message = `单轮预算耗尽(${roundTimeoutMs}ms 含工具执行)`;
|
|
402
|
-
emit({ type: "error", code: CODE_TIMEOUT, message, aborted: false });
|
|
403
|
-
return { ok: false, aborted: false, error: { status: 0, code: CODE_TIMEOUT, message }, rounds, retries };
|
|
404
|
-
}
|
|
405
|
-
// 调度后检查取消(工具执行期间可能被取消——S7.4 执行中检查外的最后兜底)
|
|
406
|
-
if (signal?.aborted) {
|
|
407
|
-
emit({ type: "error", code: ABORT_ERROR.code ?? "ABORTED", message: ABORT_ERROR.message, aborted: true });
|
|
408
|
-
return { ok: false, aborted: true, error: ABORT_ERROR, rounds, retries };
|
|
409
|
-
}
|
|
410
|
-
// ---- 11. 结构化回填会话 + 事件(tool_result → proposal,proposal 在循环继续前) ----
|
|
411
|
-
const toolMsgs = [];
|
|
412
|
-
for (const r of results) {
|
|
413
|
-
toolMsgs.push({ role: "tool", content: r.content, tool_call_id: r.id });
|
|
414
|
-
emit({ type: "tool_result", tool: r.tool, result: r.content, id: r.id });
|
|
415
|
-
if (r.proposal !== undefined) {
|
|
416
|
-
emit({ type: "proposal", proposal: r.proposal }); //:proposal 在 tool_result 后、循环继续前
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
session = appendMessage(session, assistantMsg);
|
|
420
|
-
for (const t of toolMsgs)
|
|
421
|
-
session = appendMessage(session, t);
|
|
422
|
-
emitMessages([assistantMsg, ...toolMsgs]);
|
|
423
|
-
// 循环继续:下一轮模型看到工具结果后自纠或收尾
|
|
424
|
-
}
|
|
425
|
-
// ---- 11. 8 轮上限(三重保险之一;持续 tool_call 死循环兜底) ----
|
|
426
|
-
const message = `达到最大轮数上限 ${maxRounds}`;
|
|
427
|
-
emit({ type: "error", code: CODE_MAX_ITERATIONS, message, aborted: false });
|
|
428
|
-
return { ok: false, aborted: false, error: { status: 0, code: CODE_MAX_ITERATIONS, message }, rounds, retries };
|
|
429
|
-
}
|
|
430
|
-
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import type { ChatMessageRow } from "@whispering233/ai-editor-shared";
|
|
2
|
-
import type { LLMMessage, LLMToolCallRequest } from "@whispering233/ai-editor-llm";
|
|
3
|
-
/**
|
|
4
|
-
* 运行时会话消息:LLMMessage 的子集(不含 system——系统指令由 S7.2 上下文组装注入)。
|
|
5
|
-
* 与 llm 包 wire 形态完全一致,喂回模型时无需二次转换。
|
|
6
|
-
*/
|
|
7
|
-
export type SessionMessage = {
|
|
8
|
-
role: "user";
|
|
9
|
-
content: string;
|
|
10
|
-
} | {
|
|
11
|
-
role: "assistant";
|
|
12
|
-
content: string | null;
|
|
13
|
-
tool_calls?: LLMToolCallRequest[];
|
|
14
|
-
} | {
|
|
15
|
-
role: "tool";
|
|
16
|
-
content: string;
|
|
17
|
-
tool_call_id: string;
|
|
18
|
-
};
|
|
19
|
-
/** 会话状态:按时间序排列的消息数组(immutable,追加/裁剪均返回新数组) */
|
|
20
|
-
export type SessionState = SessionMessage[];
|
|
21
|
-
/** 新建空会话(初始状态;随后 loadHistory 或 appendMessage 填充) */
|
|
22
|
-
export declare function createSession(): SessionState;
|
|
23
|
-
/**
|
|
24
|
-
* 加载历史:持久化行 → 运行时消息(成对重组)。
|
|
25
|
-
* 输入 ChatMessageRow[](由 server 层经 db 包查询得到),纯内存重组、无 I/O。
|
|
26
|
-
* - 按 created_at 升序稳定排序(同时间戳保持输入序,与 db 查询口径一致)
|
|
27
|
-
* - 孤儿半对整对丢弃(tool_call 已写 tool_result 未写,或反之)
|
|
28
|
-
* - 输出为无孤儿的完整配对序列,可直接 trimSession / buildPayload
|
|
29
|
-
*/
|
|
30
|
-
export declare function loadHistory(rows: ChatMessageRow[]): SessionState;
|
|
31
|
-
/** 追加一条运行时消息(纯函数,返回新数组,不修改入参) */
|
|
32
|
-
export declare function appendMessage(session: SessionState, message: SessionMessage): SessionState;
|
|
33
|
-
/**
|
|
34
|
-
* 滑动窗口成对裁剪(tool_call 与对应 tool_result **同裁同留**)。
|
|
35
|
-
* 以「配对块」为单位从尾部保留,最多 maxCount 条:
|
|
36
|
-
* - 窗口边界恰在 tool 消息处时**不拆对**——放不下的块整块丢弃(宁可窗口略小,不拆散配对)
|
|
37
|
-
* - 裁剪前先经 toBlocks 清理孤儿(孤儿半对整对丢弃,不进入窗口)
|
|
38
|
-
* - 输出不含孤儿;末条约束(末条必须 user/tool)由 buildPayload 统一兜底修正
|
|
39
|
-
*/
|
|
40
|
-
export declare function trimSession(session: SessionState, maxCount: number): SessionState;
|
|
41
|
-
/**
|
|
42
|
-
* 输出喂回模型的 messages 数组(末条约束的最终防御)。
|
|
43
|
-
* 末条**必须**是 user 或 tool 消息——assistant 结尾 DeepSeek 直接拒绝。
|
|
44
|
-
* 修正策略(最简防御):从尾部丢弃连续的 assistant 消息。tool 消息的配对 assistant
|
|
45
|
-
* 位于其**前方**,丢弃尾部 assistant 不会产生新孤儿;带 tool_calls 的 assistant 若以
|
|
46
|
-
* 结尾出现(典型:失败轮半条产物),其 tool 结果本就不存在,整条丢弃即「失败轮半条
|
|
47
|
-
* assistant 不喂回」。输入应为 loadHistory / trimSession 处理过的无孤儿序列;
|
|
48
|
-
* 返回空数组时调用方(S7.3)应视为无有效上下文(需重新引导用户输入)。
|
|
49
|
-
*/
|
|
50
|
-
export declare function buildPayload(session: SessionState): LLMMessage[];
|
|
51
|
-
/**
|
|
52
|
-
* 重试 payload 复用(末条约束补充,S7.3 主循环消费)。
|
|
53
|
-
* 模型调用失败重试时**必须复用原请求的 messages 数组**——绝不追加失败轮的半条
|
|
54
|
-
* assistant 产物(失败轮未产出完整回复,其内容不入重试序列)。
|
|
55
|
-
* 本函数返回原数组的浅拷贝,防御调用方原地修改;调用方直接传原 payload 亦等效。
|
|
56
|
-
*/
|
|
57
|
-
export declare function retryPayload(payload: LLMMessage[]): LLMMessage[];
|
|
58
|
-
/** 服务重启续聊组合入口:加载历史 → 成对裁剪(喂回格式由 buildPayload 兜底) */
|
|
59
|
-
export declare function restoreSession(rows: ChatMessageRow[], maxCount: number): SessionState;
|
|
60
|
-
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAInF;;;GAGG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG,cAAc,EAAE,CAAC;AAoG5C,oDAAoD;AACpD,wBAAgB,aAAa,IAAI,YAAY,CAE5C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,YAAY,CAmChE;AAED,iCAAiC;AACjC,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,GAAG,YAAY,CAE1F;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAYjF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,UAAU,EAAE,CAMhE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAEhE;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAErF"}
|