@zmzai/agent-framework 0.9.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/openai-provider.d.ts +6 -3
- package/dist/adapters/openai-provider.d.ts.map +1 -1
- package/dist/adapters/openai-provider.js +1 -1
- package/dist/adapters/openai-provider.js.map +1 -1
- package/dist/core/events/manifest.d.ts +2 -2
- package/dist/core/runtime/active-run-registry.d.ts +34 -0
- package/dist/core/runtime/active-run-registry.d.ts.map +1 -0
- package/dist/core/runtime/active-run-registry.js +44 -0
- package/dist/core/runtime/active-run-registry.js.map +1 -0
- package/dist/core/runtime/attempt-executor.d.ts +67 -0
- package/dist/core/runtime/attempt-executor.d.ts.map +1 -0
- package/dist/core/runtime/attempt-executor.js +683 -0
- package/dist/core/runtime/attempt-executor.js.map +1 -0
- package/dist/core/runtime/command-service.d.ts +48 -0
- package/dist/core/runtime/command-service.d.ts.map +1 -0
- package/dist/core/runtime/command-service.js +148 -0
- package/dist/core/runtime/command-service.js.map +1 -0
- package/dist/core/runtime/compaction.d.ts +30 -6
- package/dist/core/runtime/compaction.d.ts.map +1 -1
- package/dist/core/runtime/compaction.js +5 -4
- package/dist/core/runtime/compaction.js.map +1 -1
- package/dist/core/runtime/context-builder.d.ts +66 -0
- package/dist/core/runtime/context-builder.d.ts.map +1 -0
- package/dist/core/runtime/context-builder.js +187 -0
- package/dist/core/runtime/context-builder.js.map +1 -0
- package/dist/core/runtime/run-scheduler.d.ts +44 -0
- package/dist/core/runtime/run-scheduler.d.ts.map +1 -0
- package/dist/core/runtime/run-scheduler.js +136 -0
- package/dist/core/runtime/run-scheduler.js.map +1 -0
- package/dist/core/runtime/runner.d.ts +25 -178
- package/dist/core/runtime/runner.d.ts.map +1 -1
- package/dist/core/runtime/runner.js +105 -1457
- package/dist/core/runtime/runner.js.map +1 -1
- package/dist/core/runtime/task-lifecycle.d.ts +165 -0
- package/dist/core/runtime/task-lifecycle.d.ts.map +1 -0
- package/dist/core/runtime/task-lifecycle.js +424 -0
- package/dist/core/runtime/task-lifecycle.js.map +1 -0
- package/dist/core/session/sqlite-store.d.ts.map +1 -1
- package/dist/core/session/sqlite-store.js +110 -1
- package/dist/core/session/sqlite-store.js.map +1 -1
- package/dist/core/session/store.d.ts +9 -1
- package/dist/core/session/store.d.ts.map +1 -1
- package/dist/core/session/types.d.ts +16 -0
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/session/workflow.d.ts +49 -2
- package/dist/core/session/workflow.d.ts.map +1 -1
- package/dist/core/session/workflow.js.map +1 -1
- package/dist/core/subagents/coordinator.d.ts +187 -0
- package/dist/core/subagents/coordinator.d.ts.map +1 -0
- package/dist/core/subagents/coordinator.js +446 -0
- package/dist/core/subagents/coordinator.js.map +1 -0
- package/dist/core/subagents/parked.d.ts +50 -0
- package/dist/core/subagents/parked.d.ts.map +1 -0
- package/dist/core/subagents/parked.js +75 -0
- package/dist/core/subagents/parked.js.map +1 -0
- package/dist/core/subagents/tools.d.ts +29 -0
- package/dist/core/subagents/tools.d.ts.map +1 -0
- package/dist/core/subagents/tools.js +164 -0
- package/dist/core/subagents/tools.js.map +1 -0
- package/dist/core/subagents/types.d.ts +107 -0
- package/dist/core/subagents/types.d.ts.map +1 -0
- package/dist/core/subagents/types.js +44 -0
- package/dist/core/subagents/types.js.map +1 -0
- package/dist/core/task/completion.d.ts +3 -0
- package/dist/core/task/completion.d.ts.map +1 -1
- package/dist/core/task/completion.js +4 -0
- package/dist/core/task/completion.js.map +1 -1
- package/dist/core/task/types.d.ts +5 -0
- package/dist/core/task/types.d.ts.map +1 -1
- package/dist/core/task/types.js.map +1 -1
- package/dist/core/tools/adapter.d.ts.map +1 -1
- package/dist/core/tools/adapter.js +87 -61
- package/dist/core/tools/adapter.js.map +1 -1
- package/dist/core/tools/builtins.d.ts.map +1 -1
- package/dist/core/tools/builtins.js +7 -0
- package/dist/core/tools/builtins.js.map +1 -1
- package/dist/core/tools/context.d.ts +1 -0
- package/dist/core/tools/context.d.ts.map +1 -1
- package/dist/core/tools/def.d.ts +25 -0
- package/dist/core/tools/def.d.ts.map +1 -1
- package/dist/core/tools/def.js.map +1 -1
- package/dist/core/tools/git.d.ts.map +1 -1
- package/dist/core/tools/git.js +4 -0
- package/dist/core/tools/git.js.map +1 -1
- package/dist/core/tools/patch.d.ts.map +1 -1
- package/dist/core/tools/patch.js +1 -0
- package/dist/core/tools/patch.js.map +1 -1
- package/dist/core/tools/qa-check.d.ts +2 -2
- package/dist/core/tools/qa-check.d.ts.map +1 -1
- package/dist/core/tools/qa-check.js +1 -0
- package/dist/core/tools/qa-check.js.map +1 -1
- package/dist/core/tools/repomap.d.ts.map +1 -1
- package/dist/core/tools/repomap.js +1 -0
- package/dist/core/tools/repomap.js.map +1 -1
- package/dist/core/tools/task-block.d.ts.map +1 -1
- package/dist/core/tools/task-block.js +1 -0
- package/dist/core/tools/task-block.js.map +1 -1
- package/dist/core/tools/task-deliver.d.ts +1 -1
- package/dist/core/tools/task-deliver.d.ts.map +1 -1
- package/dist/core/tools/task-deliver.js +1 -0
- package/dist/core/tools/task-deliver.js.map +1 -1
- package/dist/core/tools/task.d.ts.map +1 -1
- package/dist/core/tools/task.js +3 -0
- package/dist/core/tools/task.js.map +1 -1
- package/dist/core/tools/terminal.d.ts.map +1 -1
- package/dist/core/tools/terminal.js +5 -0
- package/dist/core/tools/terminal.js.map +1 -1
- package/dist/core/tools/webfetch.d.ts.map +1 -1
- package/dist/core/tools/webfetch.js +1 -0
- package/dist/core/tools/webfetch.js.map +1 -1
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js +1 -0
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/server/create-agent-runtime.d.ts +3 -1
- package/dist/server/create-agent-runtime.d.ts.map +1 -1
- package/dist/server/create-agent-runtime.js +8 -1
- package/dist/server/create-agent-runtime.js.map +1 -1
- package/dist/server/create-server.d.ts +6 -0
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +9 -0
- package/dist/server/create-server.js.map +1 -1
- package/package.json +12 -11
|
@@ -5,13 +5,15 @@ import type { AgentResolver } from "../agent/resolver.js";
|
|
|
5
5
|
import { type EventLog } from "../events/bus.js";
|
|
6
6
|
import { PermissionEngine, type Reply } from "../permission/engine.js";
|
|
7
7
|
import type { Ruleset } from "../permission/ruleset.js";
|
|
8
|
+
import { type RunOutcome } from "./task-lifecycle.js";
|
|
9
|
+
export { isRetryableError } from "./task-lifecycle.js";
|
|
8
10
|
import type { SessionStore } from "../session/store.js";
|
|
9
|
-
import type { ModelRef, SelectedSkill, SessionInfo
|
|
11
|
+
import type { ModelRef, SelectedSkill, SessionInfo } from "../session/types.js";
|
|
10
12
|
import type { ToolContext, WorkspaceFiles } from "../tools/context.js";
|
|
11
13
|
import type { AnyToolDef } from "../tools/def.js";
|
|
12
14
|
import { type LifecycleHook } from "./lifecycle.js";
|
|
13
15
|
import type { SandboxExecutor } from "../../adapters/index.js";
|
|
14
|
-
import type { PromptReceipt } from "../session/workflow.js";
|
|
16
|
+
import type { PromptInput, PromptReceipt } from "../session/workflow.js";
|
|
15
17
|
import { type NoProgressPolicy } from "../task/completion.js";
|
|
16
18
|
/** SessionRunner (spec §8.1): owns one session's full lifecycle — prompt →
|
|
17
19
|
* PI agent loop → persisted parts + framework events → terminal settlement
|
|
@@ -21,45 +23,8 @@ import { type NoProgressPolicy } from "../task/completion.js";
|
|
|
21
23
|
* M5: fully storage/backend-agnostic. All product surfaces (model, sandbox,
|
|
22
24
|
* workspace files, event log, lease) are injected. */
|
|
23
25
|
export type { ThinkingEffort } from "../session/types.js";
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
/** 旧契约(v1,data URL)。 */
|
|
27
|
-
attachments?: readonly import("./attachments.js").InputAttachment[];
|
|
28
|
-
/** 新契约(v2):附件描述符(规格 2 §11)。与 `attachments` 可并存,便于迁移期混用。 */
|
|
29
|
-
attachmentRefs?: readonly import("./attachments.js").InputAttachmentRef[];
|
|
30
|
-
text: string;
|
|
31
|
-
agent?: string;
|
|
32
|
-
model?: ModelRef;
|
|
33
|
-
images?: readonly {
|
|
34
|
-
url: string;
|
|
35
|
-
mediaType: string;
|
|
36
|
-
}[];
|
|
37
|
-
effort?: ThinkingEffort;
|
|
38
|
-
skill?: SelectedSkill;
|
|
39
|
-
references?: readonly string[];
|
|
40
|
-
/** 归属的持久任务(规格 3 §6)。服务端在创建/复用任务后写入。 */
|
|
41
|
-
taskId?: string;
|
|
42
|
-
/** 内部续跑标记(规格 3 §8.2)。
|
|
43
|
-
*
|
|
44
|
-
* 【为什么这个字段决定「有没有多出一条用户消息」】它存在时,本次运行是
|
|
45
|
-
* 任务自动推进触发的,不是一个用户回合:runner 必须跳过用户消息的投影、
|
|
46
|
-
* 跳过新建 message,只在 systemPrompt 里注入任务契约。规格 §19 禁止的
|
|
47
|
-
* 「用新增一条伪用户消息作为内部 continuation」,防的就是这里做错。 */
|
|
48
|
-
continuation?: {
|
|
49
|
-
attempt: number;
|
|
50
|
-
advisory?: string;
|
|
51
|
-
};
|
|
52
|
-
/** 人工放行后的续跑标记(规格 3 §13.2 的 `resume`)。
|
|
53
|
-
*
|
|
54
|
-
* 【与 `continuation` 的区别,以及为什么必须是两个字段】`continuation` 是
|
|
55
|
-
* 任务自己决定「我还没做完」,由 `runTask` 的循环内部产生;`resume` 是**用户
|
|
56
|
-
* 按了一个按钮**。两者都不创建用户消息,但入口不同:`continuation` 永远在
|
|
57
|
-
* `runTask` 的 while 里自己接着跑,而 `resume` 时的 workflow run 早已
|
|
58
|
-
* `completed`(任务是因为预算/无进展/等待而停下的,不是排队等认领),
|
|
59
|
-
* `claimPrompt` 取不到任何东西——所以它必须由 `resumeTask` 直接驱动。
|
|
60
|
-
* 混成一个字段会让「谁有权推进这个任务」变得不可判定。 */
|
|
61
|
-
resume?: true;
|
|
62
|
-
};
|
|
26
|
+
/** 提交协议类型已移至 session/workflow.ts(W6 S2);此处再导出保持外部导入路径不变。 */
|
|
27
|
+
export type { PromptInput } from "../session/workflow.js";
|
|
63
28
|
/** Product-owned resolver. It must be session-root aware and return trusted, bounded text. */
|
|
64
29
|
export type MandatorySkillResolver = (session: SessionInfo, skill: SelectedSkill) => Promise<{
|
|
65
30
|
context: string;
|
|
@@ -102,6 +67,9 @@ export type RunnerDeps = {
|
|
|
102
67
|
agentResolver?: AgentResolver;
|
|
103
68
|
/** Max subagent nesting depth (spec §6.4, default 1). */
|
|
104
69
|
subagentDepth: number;
|
|
70
|
+
/** 子代理协调器(M3-S21):注入后 agent_* 工具可用,spawnSubagent 走
|
|
71
|
+
* 持久协调(SubagentRecord/限额队列);未注入时保持旧嵌套 runLoop 行为。 */
|
|
72
|
+
subagentCoordinator?: import("../subagents/coordinator.js").SubagentCoordinator;
|
|
105
73
|
/** Auto-compaction (spec §8.3). Disabled when summaryModel is null. */
|
|
106
74
|
compaction?: {
|
|
107
75
|
enabled: boolean;
|
|
@@ -128,21 +96,15 @@ export type RunnerDeps = {
|
|
|
128
96
|
noProgress?: Partial<NoProgressPolicy>;
|
|
129
97
|
};
|
|
130
98
|
};
|
|
131
|
-
/** 上游中断类错误(F6):模型流偶发终止/连接断开时自动重试,避免偶发中断
|
|
132
|
-
* 直接结束任务(实测 relay 透传 "terminated"、上游断流
|
|
133
|
-
* "upstream_http2_stream_error" 等)。余额/鉴权等确定性错误不重试。
|
|
134
|
-
* P1 增强:限流/网关类(429/5xx)也按可重试处理——这类错误本质是上游
|
|
135
|
-
* 暂时不可用,与 terminated 同属"等等就好",自动退避重试比直接报错体验好。 */
|
|
136
|
-
export declare function isRetryableError(message: string): boolean;
|
|
137
99
|
export declare class SessionRunner {
|
|
138
100
|
#private;
|
|
139
101
|
private readonly deps;
|
|
102
|
+
private readonly scheduler;
|
|
103
|
+
private readonly lifecycle;
|
|
104
|
+
private readonly contextBuilder;
|
|
105
|
+
private readonly attemptExecutor;
|
|
106
|
+
private readonly commandService;
|
|
140
107
|
constructor(deps: RunnerDeps);
|
|
141
|
-
private draining;
|
|
142
|
-
private stopRequested;
|
|
143
|
-
/** 已被用户放行、等待驱动链接手推进的会话(见 `drain` 的第三条分支)。 */
|
|
144
|
-
private resumeRequests;
|
|
145
|
-
private drain;
|
|
146
108
|
/** 推进一个「用户已放行」的任务(规格 §11.2 / §13.2)。
|
|
147
109
|
*
|
|
148
110
|
* 不创建用户消息、不新建 workflow run:`resumeTask` 走的是 `runTask` 的直接
|
|
@@ -155,34 +117,18 @@ export declare class SessionRunner {
|
|
|
155
117
|
private driveResumedTask;
|
|
156
118
|
/** 供 runLoop 取归一化钩子数组(lazy:constructor 后仍可由 deps 引用共享)。 */
|
|
157
119
|
private get hooks();
|
|
120
|
+
/** 会话级 registry 解析(T02:createServer 给 SubagentCoordinator 绑定同源
|
|
121
|
+
* 解析——子代理类型检查/默认子会话工厂与 runner 看到同一份 workspace
|
|
122
|
+
* 自定义 Agent,不会出现「runner 认识、协调器拒绝」的分叉)。 */
|
|
123
|
+
registryFor(session: SessionInfo): Promise<AgentRegistry>;
|
|
158
124
|
/** fallbackSessionId 由 runLoop 闭包传入(而非实例字段):runner 是进程级
|
|
159
125
|
* 单例,两个会话并发时实例字段会互相覆盖,导致 message.part.delta 等
|
|
160
126
|
* 无自带 sessionId 的事件落到错误的会话事件流里(串台)。 */
|
|
161
127
|
private persist;
|
|
162
128
|
private publish;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
*
|
|
167
|
-
* 四种处置的判定依据是**任务当前状态**,不是模型对文本的猜测:
|
|
168
|
-
* - 无活跃任务 → 开新任务;
|
|
169
|
-
* - 任务在 waiting_permission / waiting_input / waiting_external / blocked
|
|
170
|
-
* → 这条消息就是那个「用户动作」,任务恢复;
|
|
171
|
-
* - 任务在 running → 这条消息是补充/纠正,并入约束。
|
|
172
|
-
*
|
|
173
|
-
* 【为什么不做「这是不是无关新目标」的语义分类】那需要模型判断,代价是一次
|
|
174
|
-
* 额外的往返,而且判错的后果不对称:把无关目标误并进当前任务,用户会看到
|
|
175
|
-
* 自己的话被当成补充说明;反过来把补充说明误判成新任务,则会产生两个抢同一
|
|
176
|
-
* 个工作区的任务(规格 §18.9 禁止的情况)。所以默认并入,并由约束文本明确
|
|
177
|
-
* 标注「这是用户在你执行期间补充的」,让模型自己决定是否改变方向。 */
|
|
178
|
-
private resolveTaskForPrompt;
|
|
179
|
-
/** 提交被拒时把任务改回这一步之前的样子(见 `prompt` 里的调用点)。
|
|
180
|
-
*
|
|
181
|
-
* 新建的任务**不回滚**:它是这个 requestId 的幂等锚点,删掉会让「同一 requestId
|
|
182
|
-
* 重试」失去依据。留着它没有代价——下一次同 requestId 的提交会命中
|
|
183
|
-
* `findTaskByRequestId` 拿回同一个任务,别的消息则会被 `getActiveTask` 收编成
|
|
184
|
-
* steering。 */
|
|
185
|
-
private rollbackTaskResolution;
|
|
129
|
+
/** 非 async 直通:async 方法 `return promise` 会多一拍 microtask 才让调用方
|
|
130
|
+
* 的 await 恢复,实测足以翻转 prompt 提交与 drain 链之间的交错时序(FIFO
|
|
131
|
+
* 用例的读偏斜)。委托层一律直通,不包 async。 */
|
|
186
132
|
prompt(sessionId: string, input: PromptInput): Promise<{
|
|
187
133
|
queued: boolean;
|
|
188
134
|
} & Partial<PromptReceipt>>;
|
|
@@ -227,98 +173,12 @@ export declare class SessionRunner {
|
|
|
227
173
|
ok: boolean;
|
|
228
174
|
reason?: string;
|
|
229
175
|
}>;
|
|
230
|
-
/** 当前会话的压缩阈值:优先取模型目录给的真实上下文窗口,回落 runtime 级
|
|
231
|
-
* 全局配置。旧行为恒取 deps.compaction.contextWindow;模型目录未覆盖该
|
|
232
|
-
* modelId 时 model.contextWindow 即等于该全局值,行为不变。
|
|
233
|
-
* modelFor 抛错(宿主 provider 不认识该 ref)时同样回落,绝不阻断压缩。 */
|
|
234
|
-
private contextWindowFor;
|
|
235
|
-
/** Builds the compaction transformContext (spec §8.3) when the runner has a
|
|
236
|
-
* summary model configured. Emits a `compaction` part on the latest
|
|
237
|
-
* assistant message so the boundary shows in the transcript. force=true
|
|
238
|
-
* skips the threshold/滞回 early-outs (手动「压缩当前会话」). */
|
|
239
|
-
private buildCompaction;
|
|
240
176
|
/** Layers the session's workspace custom agents (`.zmzai/agents/*.md`) on top
|
|
241
177
|
* of the shared registry without mutating it (spec §6.3). Load failures
|
|
242
178
|
* degrade to the base registry — a malformed md never blocks a run. */
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
* and standalone consumers remain valid. */
|
|
247
|
-
private resolvedAgentFor;
|
|
248
|
-
/** 一次 Attempt:从模型上下文构造到终态收尾的完整内部运行。
|
|
249
|
-
*
|
|
250
|
-
* `taskContext` 存在时,任务契约会注入 systemPrompt(**不落成消息**,
|
|
251
|
-
* 规格 §19 禁止伪用户消息)。它同时携带 continuation 的 advisory,
|
|
252
|
-
* 保证「续跑指令」与「任务契约」在同一条系统指令里,不会互相矛盾。
|
|
253
|
-
* 它还携带 `loopGuard`:任务层自己持有一个跨 Attempt 的实例,避免每轮
|
|
254
|
-
* 重置循环防护的计数(见下方注释)。 */
|
|
255
|
-
private runLoop;
|
|
256
|
-
/** 带重试的 CAS 写入。
|
|
257
|
-
*
|
|
258
|
-
* 【为什么不「冲突就返回 latest」】那会让调用方以为补丁生效了,而库里没变——
|
|
259
|
-
* 结算路径尤其致命:它会照常发出 `task.delivered`,于是客户端显示「已完成」
|
|
260
|
-
* 而持久化状态还是 `running`,重启后任务像个卡住的僵尸。写不进去就必须知道。
|
|
261
|
-
* 重试几次是给「恰好撞上另一个 drain 的收尾写」留余地;仍然失败就是真的有人
|
|
262
|
-
* 在并发改同一个任务,那种情况必须浮出来(drain 会把它落成 recovery_required)。 */
|
|
263
|
-
private casTask;
|
|
264
|
-
/** 权限等待的进入 / 退出(规格 3 §11.1 / §11.2)。
|
|
265
|
-
*
|
|
266
|
-
* 进入时把任务置 `waiting_permission` 并挂 permission blocker;退出(授权通过
|
|
267
|
-
* 或被拒)时置回 `running` 并清 blocker。
|
|
268
|
-
*
|
|
269
|
-
* 【为什么退出后不是 blocked/failed】这次 Attempt 根本没被中断——`engine.ask()`
|
|
270
|
-
* 只是在 `beforeToolCall` 里挂住,决定一到就接着跑同一个工具循环。所以既不发
|
|
271
|
-
* `task.attempt.finished`,也不创建用户消息、不新建 workflow run(§11.2 明文)。
|
|
272
|
-
* 唯一例外是被拒:拒绝结果会作为工具错误交回模型去试替代方案(§11.3)。
|
|
273
|
-
*
|
|
274
|
-
* 【为什么挂在引擎回调上,而不是 beforeToolCall 里】规则表已经允许的调用不会
|
|
275
|
-
* 弹卡(`ask()` 在 undecided 为空时直接返回),挂在调用点会为这些「秒过」的
|
|
276
|
-
* 调用也标一次等待再撤回,产生成对的假 blocker 事件。`onAsked` 只在真的抛出
|
|
277
|
-
* 一张授权卡时触发。
|
|
278
|
-
*
|
|
279
|
-
* 【为什么按 taskId 重读而不是接一个快照】`runLoop` 会被子代理嵌套调用
|
|
280
|
-
* (`spawnSubagent`),同一个 runner 实例上同时存在两轮运行。用实例字段记
|
|
281
|
-
* 「当前任务」会被嵌套那轮清掉,父轮的权限等待于是静默丢失。按 id 重读没有
|
|
282
|
-
* 这个共享状态,代价是一次读,而权限询问本来就不是热路径。 */
|
|
283
|
-
private markPermissionWait;
|
|
284
|
-
/** 完成判定用的运行时事实。全部来自本轮可观测结果,**不接受模型自述**。
|
|
285
|
-
*
|
|
286
|
-
* 权限等待不在此列:`beforeToolCall` 里的 `engine.ask()` 会一直挂到用户回复,
|
|
287
|
-
* 所以一次 Attempt 收尾时不会有悬空请求(`engine.dispose()` 也会兜底)。
|
|
288
|
-
* 这里仍读一次实际值,是为了覆盖 abort / 异常路径。
|
|
289
|
-
*
|
|
290
|
-
* 【`task_block` 是这条规则的例外吗】不是。它确实由模型发起,但**内容是结构化
|
|
291
|
-
* 的声明**,不是自述的结论:模型说的是「我缺 X」「请你在 A 和 B 之间选」
|
|
292
|
-
* 「你需要去登录」,而不是「我已完成」。前者是事实的输入(只有模型知道自己在
|
|
293
|
-
* 等什么),后者才是不能采信的东西——完成与否始终由 Completion Gate 按步骤、
|
|
294
|
-
* 验收条件与证据独立判定,模型无法用 task_block 换来一个 delivered。 */
|
|
295
|
-
private completionStateOf;
|
|
296
|
-
/** 步骤变化 → 事件。粒度按「状态真的变了」算,重放时不会重复累计。 */
|
|
297
|
-
private publishStepEvents;
|
|
298
|
-
/** 把本轮的可观测事实投影进任务契约:步骤、证据、隐式验收条件、进度指纹。
|
|
299
|
-
*
|
|
300
|
-
* 顺序不能换:证据先于验收条件(条件要引用 evidence id),而指纹最后算
|
|
301
|
-
* (它是对「投影后的完整状态」取摘要)。 */
|
|
302
|
-
private syncTaskFromAttempt;
|
|
303
|
-
/** 任务进入终态(或阻塞):落库 + 发事件,返回这次 run 的 workflow 状态。
|
|
304
|
-
*
|
|
305
|
-
* blocked 返回 `"completed"` 而不是 `"failed"`:这次运行本身正常结束了,
|
|
306
|
-
* 任务是在等外部动作。返回 failed 会让 workflow 层把它当成运行崩溃处理
|
|
307
|
-
* (还会触发 recovery 路径),那是错的。 */
|
|
308
|
-
private settleTask;
|
|
309
|
-
/** 一个持久任务的执行循环(规格 §8.1 总流程)。
|
|
310
|
-
*
|
|
311
|
-
* 【为什么续跑在同一次调用内循环,而不是每轮新建一个 workflow run】
|
|
312
|
-
* 1. lease 与串行队列:任务执行期间必须持有 session 的执行权。每轮重建 run
|
|
313
|
-
* 意味着每轮都要重新 claim/lease,中间会出现「谁都没持有」的窗口——那
|
|
314
|
-
* 正是两个 runner 并行改同一工作区的入口。
|
|
315
|
-
* 2. 规格 §8.2.5 要求「继续使用 session 级串行队列和 lease」,循环是最直接
|
|
316
|
-
* 的实现。轮次计数落在 `TaskRecord.attemptCount` 上,所以进程重启后恢复
|
|
317
|
-
* 扫描仍能知道跑到第几轮。
|
|
318
|
-
*
|
|
319
|
-
* 出口只有两个:任务进入终态,或需要用户/外部动作。单次模型停止、step 上限、
|
|
320
|
-
* 本轮没有工具调用,**都不是**出口(规格 §8.3 逐条列出)。 */
|
|
321
|
-
private runTask;
|
|
179
|
+
/** 子代理嵌套运行的内部入口(W7-S7:runLoop 已迁 AttemptExecutor)。
|
|
180
|
+
* 非 async 直通——委托层禁止 async 包 promise(会多一拍,见 W6 §8)。 */
|
|
181
|
+
runAttempt(session: SessionInfo, input: PromptInput): Promise<RunOutcome>;
|
|
322
182
|
/** Spawns a subagent child session (spec §6.4): depth-capped, permission
|
|
323
183
|
* stamped from parent session + subagent preset, runs a nested PI loop to
|
|
324
184
|
* completion, and returns the child's final assistant text as the parent
|
|
@@ -327,14 +187,8 @@ export declare class SessionRunner {
|
|
|
327
187
|
/** Persists a subtask part on the parent's latest assistant message so the
|
|
328
188
|
* transcript links to the child session (spec §6.4 step 5). */
|
|
329
189
|
private recordSubtask;
|
|
330
|
-
/** 任务终态小结(N5):run 收尾时用 summary 模型生成一句自然语言总结,
|
|
331
|
-
* 附本轮结构化统计,发布 session.summary 事件供前端渲染「任务完成卡」。
|
|
332
|
-
* 失败/中断也发(kind 区分),让 UI 的收尾永远有明确落点。生成失败或
|
|
333
|
-
* 无 summaryModel 时静默跳过(不阻塞 run 收尾)。 */
|
|
334
|
-
private summarizeRun;
|
|
335
190
|
private lastAssistantText;
|
|
336
191
|
private sessionDepth;
|
|
337
|
-
private rebuildMessages;
|
|
338
192
|
}
|
|
339
193
|
export declare function createFrameworkSession(input: {
|
|
340
194
|
store: SessionStore;
|
|
@@ -353,12 +207,5 @@ export declare function createFrameworkSession(input: {
|
|
|
353
207
|
creationRequestId?: string;
|
|
354
208
|
creationPayloadHash?: string;
|
|
355
209
|
}): Promise<SessionInfo>;
|
|
356
|
-
export
|
|
357
|
-
/** 会话当前 run 是否挂起等待人工授权(HITL 待确认)。宿主会话列表用它把
|
|
358
|
-
* 「待确认」从笼统的「运行中」里区分出来,否则后台会话被权限卡住时
|
|
359
|
-
* 侧边栏毫无信号。无 run 或 run 无 pending 请求均为 false。 */
|
|
360
|
-
export declare function isSessionAwaitingPermission(sessionId: string): boolean;
|
|
361
|
-
/** 当前所有 running 会话 id(Electron 优雅退出等收尾场景枚举用,P2)。
|
|
362
|
-
* activeRuns 是模块级 globalThis 单例,跨项目/跨 runtime 共享。 */
|
|
363
|
-
export declare function listActiveSessions(): string[];
|
|
210
|
+
export { isSessionActive, isSessionAwaitingPermission, listActiveSessions } from "./active-run-registry.js";
|
|
364
211
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/runner.ts"],"names":[],"mappings":"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"}
|