import type { PersistedTaskResult, RunCancelContext } from "./plugins/store-contracts.js"; /** * @param taskId 这条 run 的账本 id(turn 活性登记的键)。 * @param startedAtMs 这条 run 起跑的墙钟时刻(epoch ms):取消腿手上有行就用行的 `createdAt`, * 只有本腿起点时用本腿起点(两者在同一条 run 上相差 ms 级)。**非有限值** * (坏 `createdAt` 解析出的 NaN)⇒ `elapsedMs` 诚实缺席,绝不折成 0 * ——0 会被读成「刚起跑就取消了」,与「模型挂死 8 分钟后用户放弃」正好相反。 * @param nowMs 取样时刻(缺省 `Date.now()`;测试注入用)。 * @returns 三键至少有一键可证时的快照;**一键都证不出** ⇒ `undefined`(写一只空对象等于在 wire 上 * 断言「我看过现场,什么都没有」,而事实是「我什么都没看见」)。 */ export declare function buildCancelContext(taskId: string, startedAtMs: number, nowMs?: number): RunCancelContext | undefined; /** * 🔴 **用户取消的机器码 —— 全仓单源**(合并重扫 [5])。 * * run 行的 `errorCode` 列、因由臂上的 `terminal.code`、`tasks_total{status}` 的 metrics 标签、fleet 行的 * 终态词,是**同一个词**;同一个词就该同一个来源。此前仓里是「一个词两只常量 + 十余处字面量」 * (`approval-reconciler.ts` 另有一份 `CANCELLED_ERROR_CODE`),改它的值会让 recordDone / fleet 标签 / * reconciler 的 VOID 判据 / cancel 端点的幂等判据静默分叉。 * * 机器门(新写者当场红):`test/cancel-terminal-single-owner.test.ts` 的 G2/G3。 */ export declare const CANCELLED_CODE = "cancelled"; /** * S-104 —— **取消终局的唯一铸点**。三条用户取消腿(sync stream 的断连支与 cancel-verb 支、durable bg 腿) * 都从这里出结果,于是「一次取消在账本/wire 上长什么样」只有一份口径。 * * ## 两种到达形,一条规则 * `engineResult` 在场与否 = 「引擎有没有给出终局」,不是两条规则: * · **在场**(现行常态):**跑起来之后**的 `signal.aborted` 被 core 当成流内事件优雅收尾 —— 流照常 * 发 `done`,`terminal` 是一条**不带码**的 `failed`。这里在**它**之上补标,不另造一份结果(另造会把 * 引擎已经算出的 `stats` / `result` / `editedFiles` 全丢掉)。 * · **缺席**:根本没读到 done —— 客户端断连后迭代器早收,或**开跑之前**就已经立起的旗 * (亲核 core 7.11.2 `dist/core/runner/runtask.js`:`runLocked` 入口对已 aborted 的 signal * 抛 `AbortError`)⇒ 合成一条诚实的取消终局。 * * ## 「只补空座」纪律(与 core 的 `amendTerminal` 同规),而且**补码与补快照同进同退** * · 引擎给的终局**不是无码的 failed**(它完成了 / 阻塞了 / 自己带了码)⇒ **整只原样返回**。 * 这一条是本车自查轮逮住的自造缺陷:首版只让**补码**受这条纪律管、快照却无条件挂,于是「取消动词 * 到了、但活其实已经干完了」会产出一条 `completed` 却带着取消便签的终局 —— 契约 §5.3 逐字写着 * 「只在用户取消形上铸」,两个方向的读者都会读错。一次与 abort 赛跑的真失败(`brain.network`)同理: * 贴成 `cancelled` 会把故障统计洗白。 * · `cancelContext`:已经有快照就不重铸(重铸会把「上一条引擎事件多久以前」重新计时)。 * * ## 为什么不判「这条 failed 是不是 abort 形」 * 判据在**调用点**:调用点问的是「本腿这次是不是被取消动词打中了」(`cancelCtrl.signal.aborted` / * `cancelledViaVerb`),那是 server 自己的事实。让本函数去嗅 `terminal.message` 的字面就是再造事实 * —— [ref] 二那次事故的同一个形。 */ export declare function mintCancelledResult(args: { /** 这条 run 的账本 id(活性登记的键;账本不在场时给空串,快照按「证不出」处理)。 */ taskId: string; /** 会话 id(合成形要写进结果;引擎给了结果时不用)。 */ sessionId: string; /** 本腿起跑的墙钟时刻(epoch ms)。语义与缺席纪律见 {@link buildCancelContext}。 */ startedAtMs: number; /** 合成形的失败文案(引擎给了终局时不用)。 */ message: string; /** 引擎给出的终局(在场 ⇒ 在它之上补标)。 */ engineResult?: PersistedTaskResult; }): PersistedTaskResult; //# sourceMappingURL=run-cancel-context.d.ts.map