@ai-agent-forge/plugin-subagent-delegate 0.88.14 → 0.88.16

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.
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-runtime.js","sourceRoot":"","sources":["../src/subagent-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 子代理运行时调度器(D-044,《子代理运行时设计》§4-§6)——插件级 `SubagentRuntime`:\n * 队列 / 准入 / 预算 / 终态 / 权限的唯一编排入口。\n *\n * - 只组合既有 primitive,不重建生命周期:`AgentTaskAdapter`\n * (../core/extensions/public-api.ts,裸执行 primitive,仅 admitted 之后调用)\n * 与 `createAgentTaskRegistry`(./multi-agent-tasks.ts,状态注册表 primitive,\n * 作为调度终态的投影写入,不作为第二权威;timed_out 经 checkDeadlines 原生直映,\n * 例外路径见 projectTerminalToRegistry,§4.3)。\n * - 生命周期:submit -> queued -> admitted -> allocated(此刻才 `adapter.create`,\n * 之前零 child session、零模型资源)-> running -> 终态。\n * - 预算执行点是调度器本身:submit 拒绝(prompt/metadata UTF-8 字节上限、队列深度),\n * settle 截断(maxMessages/maxResultBytes + `truncated` 标志)。registry 自建时显式传\n * Infinity 预算:并发与结果预算不得依赖 registry 缺省,也不能让 registry 成为第二准入权威。\n * - 终态不可覆盖:settle 先查终态守卫,迟到的 `host.run` 结算一律抑制;取消是幂等 fence,\n * running 取消走有界 drain,超时终态 `drain_timeout`(reasonCode `subagent_drain_timeout`)。\n * - 权限:`result(taskId, requester)` 仅在 owner 与 parentSessionId 均匹配时返回记录,\n * 不区分\"不存在\"与\"无权\";durable 回读走结构化校验,不做裸断言。persist 失败不吞终态:\n * 内存记录已捕获,persist 错误经 cancel()/drain() 的 reject 挂 cause 暴露。\n * - 崩溃孤儿自愈(§5.8):任务进入 running 时经 durable 落一条非终态 started 记录(与\n * 终态同键,WAL last-write-wins);装载期发现 started-无-终态即综合终态 `runner_lost`\n * (reasonCode `subagent_runner_lost`)并回写,重启后 `result()`/`peek` 据此可见。\n * - 父栅栏(§4.2):宿主注入 `parentSignal` getter,每次 admitted 时读取当前信号\n * (epoch 正确);信号已 aborted 的任务 admitted 即取消;abort 监听触发 cancelAll 语义。\n * - 确定性:deadline 由显式 `tick()` 推进(无隐藏定时器,生产 tick 驱动由消费者挂载,\n * 见 delegate 的惰性 ticker);drain 超时是对 `host.run` promise 的定时 race(契约允许\n * \"clock 推进或 race\" 二选一,race 便于注入测试)。共享 globalAdmission 的跨实例推进\n * 同样由显式 `tick()`(或任意实例的 submit/settle)驱动,不引入轮询。\n * - `runner_lost` 的生产来源是装载期崩溃孤儿自愈(本实现);运行路径本身不产生该状态。\n * `outputArtifactRef` / `messagesArtifactRef` 为 artifact 分页保留字段,本切片不产出。\n *\n * 迁自宿主 `src/plugins/subagent-runtime.ts`(D-075 S4 第三批);除 import 来源外\n * 逐字保持:公共契约(AgentTaskAdapter/JsonValue/durable 类型)改自 plugin-sdk。\n */\nimport { randomUUID } from \"node:crypto\";\nimport type {\n\tAgentTaskAdapter,\n\tAgentTaskHost,\n\tDurableArtifactRecordV1,\n\tDurableServiceV1,\n\tJsonValue,\n\tPluginConfigValue,\n} from \"@agent-forge/plugin-sdk\";\nimport { AgentTaskError, type AgentTaskRegistryV1, createAgentTaskRegistry } from \"./multi-agent-tasks.ts\";\n\n/** 调度器权威状态(§4.3);其余词汇(DTO/registry/Operation)都是它的投影。 */\nexport type SubagentRuntimeStatus =\n\t| \"queued\"\n\t| \"admitted\"\n\t| \"running\"\n\t| \"succeeded\"\n\t| \"failed\"\n\t| \"cancelled\"\n\t| \"timed_out\"\n\t| \"drain_timeout\"\n\t// runner_lost 为 pooled 切片保留值:本切片无进程池,任何路径都不产生该状态。\n\t| \"runner_lost\";\n\nexport interface SubagentRuntimeLimitsV1 {\n\t/** 同时运行的最大子代理数(admission gate 容量)。默认 8。 */\n\tmaxConcurrentSubagents?: number;\n\t/** 等待准入的最大排队深度;超出即 submit 结构化失败。默认 200。 */\n\tmaxQueueDepth?: number;\n\t/** prompt 的 UTF-8 字节上限;submit 时拒绝。默认 65536。 */\n\tmaxPromptBytes?: number;\n\t/** metadata 经 JSON.stringify 后的 UTF-8 字节上限;submit 时拒绝。默认 16384。 */\n\tmaxMetadataBytes?: number;\n\t/** 终态消息快照的逐条累计字节上限;settle 时截断。默认 524288。 */\n\tmaxResultBytes?: number;\n\t/** 终态消息快照的最大条数;settle 时截断。默认 2000。 */\n\tmaxMessages?: number;\n\t/** 取消/drain 的有界等待时长;超时终态 drain_timeout。默认 30000。 */\n\tdrainTimeoutMs?: number;\n\t/**\n\t * 终态记录(`result()` 回读的权威存储)保留条数上限,默认 256。超出按落库顺序淘汰\n\t * 最旧记录(被淘汰的 taskId 回读为 undefined)——长会话高频委派不能无界增长。\n\t */\n\tmaxRetainedRecords?: number;\n}\n\nexport interface SubagentRuntimeSubmitRequestV1 {\n\tprompt: string;\n\tmetadata?: Record<string, unknown>;\n\t/** 相对 clock 的绝对时刻;已过期或运行中过期的任务由 tick() 推进为 timed_out。 */\n\tdeadlineAt?: number;\n}\n\n/** 并发准入槽位。多 root 共享全局上限时注入同一实例;缺省由 runtime 按 maxConcurrentSubagents 自建。 */\nexport interface SubagentAdmissionGateV1 {\n\t/** claim 一个槽位;容量满返回 \"limit\"(此时调用方不得再 release)。 */\n\ttryAcquire(): \"claimed\" | \"limit\";\n\trelease(): void;\n}\n\n/** 调度器自有终态信封(§4.4):有界、带归属三元组;持久化与回读都以它为准。 */\nexport interface SchedulerTaskRecordV1 {\n\treadonly schedulerVersion: 1;\n\treadonly taskId: string;\n\treadonly owner: string;\n\treadonly parentSessionId: string;\n\treadonly status: SubagentRuntimeStatus;\n\treadonly reasonCode?: string;\n\treadonly reason?: string;\n\t/** messages 按 maxMessages/maxResultBytes 截断时为 true。 */\n\treadonly truncated: boolean;\n\t/** 子会话自身的 sessionId(D-060 S1):可按它在会话目录(`sessions/_agents/`)定位 transcript。 */\n\treadonly sessionId: string;\n\t/** 已按预算截断的有界消息快照。 */\n\treadonly messages: readonly unknown[];\n\t/** artifact 分页保留字段:本切片不产出。 */\n\treadonly outputArtifactRef?: string;\n\treadonly messagesArtifactRef?: string;\n}\n\nexport interface SubagentTaskHandleV1 {\n\treadonly id: string;\n\tstatus(): SubagentRuntimeStatus;\n\t/** 任务级取消信号:cancel()、deadline fence 与父栅栏都会触发 abort。 */\n\treadonly signal: AbortSignal;\n\t/** 终态解析为调度记录;终态前挂起。 */\n\tresult(): Promise<SchedulerTaskRecordV1>;\n\t/** 幂等取消 fence:queued 直接终态;running abort 后有界 drain。返回等待至终态。 */\n\tcancel(reason?: string): Promise<void>;\n\t/** 等待执行体结束(timeoutMs 覆盖 drainTimeoutMs);超时终态 drain_timeout。 */\n\tdrain(options?: { timeoutMs?: number }): Promise<SchedulerTaskRecordV1>;\n}\n\nexport interface SubagentRuntimeOptionsV1 {\n\tadapter: AgentTaskAdapter;\n\towner: string;\n\tparentSessionId: string;\n\t/** 宿主注入的父取消信号 getter(§4.2);每次 admitted 时读取当前信号(epoch 正确)。 */\n\tparentSignal?: () => AbortSignal | undefined;\n\t/** 确定性时钟;缺省 `Date.now`。deadline 判定与 registry 时间戳使用。 */\n\tclock?: () => number;\n\tlimits?: SubagentRuntimeLimitsV1;\n\t/** 缺省自建(显式 Infinity 预算);多 root 共享状态投影时注入同一实例。 */\n\tregistry?: AgentTaskRegistryV1;\n\t/** 缺省按 maxConcurrentSubagents 自建;多 root 全局并发上限时注入同一实例。 */\n\tglobalAdmission?: SubagentAdmissionGateV1;\n\t/**\n\t * 可选 durable 持久化(§4.4 replay 通道 + §5.8 孤儿自愈):终态以\n\t * `subagent-task:<taskId>` 落库;任务 running 时同键落非终态 started 痕迹;\n\t * 装载期扫描 started-无-终态综合为 `runner_lost` 终态。缺席 = 不持久化、无自愈。\n\t */\n\tresults?: { readonly store: DurableServiceV1; readonly writerId: string };\n\t/**\n\t * 可选错误观察通道:settle 快照失败(如父会话 dispose 级联后子会话 capability API\n\t * 已 revoke)等不影响终态语义的错误摘要经 `warn` 暴露;未注入时跳过,终态照常落库。\n\t * fields 限 `PluginConfigValue`(可序列化):生产 LoggerAPI 会对 fields 做序列化校验。\n\t */\n\tlogger?: { warn(message: string, fields?: PluginConfigValue): void };\n}\n\n/**\n * `cancelById` 三态结果(§5.2,S6 后台委派配套):\n * - `cancelled`:命中未终态任务,取消 fence 已落并等待到终态(status 为最终落定的\n * 调度状态——正常路径 `cancelled`,drain 预算耗尽则 `drain_timeout`);\n * - `already_terminal`:调用时任务已终态(附原 status),幂等 no-op;\n * - `not_found`:内存与终态记录均无此 taskId(作用域越界同型,不泄漏他人任务存在性)。\n */\nexport type SubagentCancelByIdResultV1 =\n\t| { readonly outcome: \"cancelled\"; readonly status: SubagentRuntimeStatus }\n\t| { readonly outcome: \"already_terminal\"; readonly status: SubagentRuntimeStatus }\n\t| { readonly outcome: \"not_found\" };\n\nexport interface SubagentRuntimeV1 {\n\t/**\n\t * 提交子代理任务。同步抛出契约(非 async 函数):预算超限/非法请求/queue full/\n\t * runtime 已 revoked 以同步 throw 结算,`promise.catch()` 接不到,必须 try/catch;\n\t * 成功路径返回已 resolve 的 Promise。\n\t */\n\tsubmit(request: SubagentRuntimeSubmitRequestV1): Promise<SubagentTaskHandleV1>;\n\t/**\n\t * 范围化回读:内存/durable 记录的 owner 与 parentSessionId 均匹配 requester 才返回;\n\t * 否则返回 undefined(不区分不存在与无权)。\n\t */\n\tresult(\n\t\ttaskId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): Promise<SchedulerTaskRecordV1 | undefined>;\n\t/**\n\t * 按子会话 id 找活跃任务(D-060 S4):owner 与 parentSessionId 均匹配 requester 才返回;\n\t * 返回taskId 与终态与否,供 steer 定位与 resume 的 busy 判定。\n\t */\n\tfindBySession(\n\t\tsessionId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): { readonly taskId: string; readonly settled: boolean } | undefined;\n\t/**\n\t * 对**运行中**的子会话投递一条有界引导消息(§5.1):复用会话自身的 steer 语义,\n\t * 不新增队列。已终态/尚无执行体/宿主不支持 steer 都以结构化错误拒绝。\n\t */\n\tsteer(\n\t\ttaskId: string,\n\t\ttext: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): Promise<void>;\n\t/**\n\t * 有界等待某任务进入终态(D-060 S6 后台委派):范围化(owner+parent 匹配),\n\t * 超时返回 undefined(不区分未结算与不存在——先用 peek 区分)。\n\t */\n\twait(\n\t\ttaskId: string,\n\t\ttimeoutMs: number,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): Promise<SchedulerTaskRecordV1 | undefined>;\n\t/**\n\t * 不等待的当前状态快照(D-060 S6 后台委派):范围化;未命中返回 undefined,\n\t * 未结算返回当前状态词汇,已结算 settled=true。\n\t */\n\tpeek(\n\t\ttaskId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): { readonly settled: boolean; readonly status: SubagentRuntimeStatus } | undefined;\n\t/**\n\t * 按 id 取消(§5.2,2026-10-01 落地,S6 后台委派配套):作用域校验同 `peek`\n\t * (owner 必须匹配、parentSessionId 必须匹配,越界视同 `not_found`);命中未终态\n\t * 任务时复用与 `cancel()` 相同的幂等取消 fence 并等待终态(不复制 drain 逻辑)。\n\t * 三态结果见 {@link SubagentCancelByIdResultV1}。\n\t */\n\tcancelById(\n\t\ttaskId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t\treason?: string,\n\t): Promise<SubagentCancelByIdResultV1>;\n\tstats(): { readonly queued: number; readonly admitted: number; readonly running: number; readonly terminal: number };\n\tcancelAll(reason?: string): Promise<void>;\n\t/** 显式 deadline 推进;返回本次转 timed_out(running 侧为转入有界 drain)的 taskId。 */\n\ttick(): readonly string[];\n\tdispose(): Promise<void>;\n}\n\nexport type SubagentRuntimeErrorCodesV1 =\n\t| \"subagent_queue_full\"\n\t| \"subagent_prompt_too_large\"\n\t| \"subagent_metadata_too_large\"\n\t| \"subagent_invalid_request\"\n\t// 保留:按 id 定位任务未命中时的结构化错误码(当前读取面按契约返回 undefined)。\n\t| \"subagent_unknown_task\"\n\t| \"subagent_drain_timeout\"\n\t// S4 steer:目标非运行态(queued 未 admitted / 已终态 / 执行体已回收)或宿主会话无 steer 面。\n\t| \"subagent_not_running\"\n\t| \"subagent_steer_unsupported\";\n\nexport class SubagentRuntimeError extends Error {\n\treadonly code: SubagentRuntimeErrorCodesV1;\n\n\tconstructor(code: SubagentRuntimeErrorCodesV1, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SubagentRuntimeError\";\n\t\tthis.code = code;\n\t}\n}\n\n/** 状态投影(§4.3):调度器权威状态 -> `AgentTaskStatus` DTO 词汇;不产生映射表之外的值。 */\nexport function toAgentTaskStatusProjection(\n\tstatus: SubagentRuntimeStatus,\n): \"created\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\" {\n\tswitch (status) {\n\t\tcase \"queued\":\n\t\tcase \"admitted\":\n\t\t\treturn \"created\";\n\t\tcase \"running\":\n\t\t\treturn \"running\";\n\t\tcase \"succeeded\":\n\t\t\treturn \"succeeded\";\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"cancelled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"timed_out\":\n\t\tcase \"drain_timeout\":\n\t\tcase \"runner_lost\":\n\t\t\treturn \"failed\";\n\t}\n}\n\ninterface Deferred<T> {\n\treadonly promise: Promise<T>;\n\tresolve(value: T): void;\n}\n\nfunction createDeferred<T>(): Deferred<T> {\n\tlet resolve!: (value: T) => void;\n\tconst promise = new Promise<T>((res) => {\n\t\tresolve = res;\n\t});\n\treturn { promise, resolve };\n}\n\n/** 可取消的定时 deferred(wait 的超时臂);cancel 同时清定时器并立即 resolve。 */\nfunction sleepDeferred(ms: number): { readonly promise: Promise<void>; readonly cancel: () => void } {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet resolve!: () => void;\n\tconst promise = new Promise<void>((res) => {\n\t\tresolve = res;\n\t\ttimer = setTimeout(res, ms);\n\t});\n\treturn {\n\t\tpromise,\n\t\tcancel: () => {\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\tresolve();\n\t\t},\n\t};\n}\n\nfunction createSlotGate(capacity: number): SubagentAdmissionGateV1 {\n\tlet held = 0;\n\treturn {\n\t\ttryAcquire() {\n\t\t\tif (held >= capacity) return \"limit\";\n\t\t\theld += 1;\n\t\t\treturn \"claimed\";\n\t\t},\n\t\trelease() {\n\t\t\theld -= 1;\n\t\t},\n\t};\n}\n\nconst textEncoder = new TextEncoder();\n\nfunction utf8ByteLength(value: string): number {\n\treturn textEncoder.encode(value).length;\n}\n\n/** JSON 序列化用于字节预算计算;不可序列化的值按空串计,不因预算计算抛错。 */\nfunction safeStringify(value: unknown): string {\n\ttry {\n\t\tconst serialized = JSON.stringify(value);\n\t\treturn serialized === undefined ? \"\" : serialized;\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n\nfunction errorText(error: unknown): string {\n\tif (error instanceof Error) return error.message;\n\tif (typeof error === \"string\") return error;\n\treturn safeStringify(error);\n}\n\n/**\n * settle 有界化:先按 maxMessages 截断条数,再逐条累计 UTF-8 字节、超出 maxResultBytes\n * 停止;任一截断发生即置 truncated(信封只持有有界快照,原文分页属后续 artifact 切片)。\n */\nfunction boundMessages(\n\tmessages: readonly unknown[],\n\tmaxMessages: number,\n\tmaxResultBytes: number,\n): { readonly messages: readonly unknown[]; readonly truncated: boolean } {\n\tlet truncated = false;\n\tlet selected = messages;\n\tif (selected.length > maxMessages) {\n\t\tselected = selected.slice(0, maxMessages);\n\t\ttruncated = true;\n\t}\n\tconst bounded: unknown[] = [];\n\tlet used = 0;\n\tfor (const message of selected) {\n\t\tconst size = utf8ByteLength(safeStringify(message));\n\t\tif (used + size > maxResultBytes) {\n\t\t\ttruncated = true;\n\t\t\tbreak;\n\t\t}\n\t\tused += size;\n\t\tbounded.push(message);\n\t}\n\treturn { messages: bounded, truncated };\n}\n\nconst RUNTIME_STATUSES: readonly SubagentRuntimeStatus[] = [\n\t\"queued\",\n\t\"admitted\",\n\t\"running\",\n\t\"succeeded\",\n\t\"failed\",\n\t\"cancelled\",\n\t\"timed_out\",\n\t\"drain_timeout\",\n\t\"runner_lost\",\n];\n\nfunction isRuntimeStatus(value: string): value is SubagentRuntimeStatus {\n\treturn RUNTIME_STATUSES.includes(value as SubagentRuntimeStatus);\n}\n\n/**\n * 终态子集:`result()` 是**终态**回读契约,记录只在 settle 时落库,因此持久层里出现\n * 非终态状态(queued/admitted/running)只能是脏数据或别的写入者——按不合格处理,\n * 绝不把它当成\"任务已完成\"返回给调用方。\n */\nconst TERMINAL_RUNTIME_STATUSES: readonly SubagentRuntimeStatus[] = [\n\t\"succeeded\",\n\t\"failed\",\n\t\"cancelled\",\n\t\"timed_out\",\n\t\"drain_timeout\",\n\t\"runner_lost\",\n];\n\nfunction isTerminalRuntimeStatus(value: SubagentRuntimeStatus): boolean {\n\treturn TERMINAL_RUNTIME_STATUSES.includes(value);\n}\n\n/**\n * durable 记录的结构化字段校验(终态回读与 started 标记共用,不做裸断言):字段类型\n * 逐一核对后显式重建记录,不合格按 undefined 处理,与\"不存在/无权\"同型返回。状态词汇\n * 合法即可通过;终态/非终态的分流由两个包装器表达。\n */\nfunction parseSchedulerRecordFields(\n\tvalue: unknown,\n): (Omit<SchedulerTaskRecordV1, \"schedulerVersion\"> & { status: SubagentRuntimeStatus }) | undefined {\n\tif (typeof value !== \"object\" || value === null) return undefined;\n\tconst candidate = value as Record<string, unknown>;\n\tif (candidate.schedulerVersion !== 1) return undefined;\n\tconst taskId = candidate.taskId;\n\tif (typeof taskId !== \"string\" || taskId.length === 0) return undefined;\n\tconst owner = candidate.owner;\n\tif (typeof owner !== \"string\" || owner.length === 0) return undefined;\n\tconst parentSessionId = candidate.parentSessionId;\n\tif (typeof parentSessionId !== \"string\" || parentSessionId.length === 0) return undefined;\n\tconst status = candidate.status;\n\tif (typeof status !== \"string\" || !isRuntimeStatus(status)) return undefined;\n\tconst truncated = candidate.truncated;\n\tif (typeof truncated !== \"boolean\") return undefined;\n\tconst sessionId = candidate.sessionId;\n\tif (typeof sessionId !== \"string\" || sessionId.length === 0) return undefined;\n\tconst messages = candidate.messages;\n\tif (!Array.isArray(messages)) return undefined;\n\tconst reasonCode = candidate.reasonCode;\n\tif (reasonCode !== undefined && typeof reasonCode !== \"string\") return undefined;\n\tconst reason = candidate.reason;\n\tif (reason !== undefined && typeof reason !== \"string\") return undefined;\n\tconst outputArtifactRef = candidate.outputArtifactRef;\n\tif (outputArtifactRef !== undefined && typeof outputArtifactRef !== \"string\") return undefined;\n\tconst messagesArtifactRef = candidate.messagesArtifactRef;\n\tif (messagesArtifactRef !== undefined && typeof messagesArtifactRef !== \"string\") return undefined;\n\treturn {\n\t\ttaskId,\n\t\towner,\n\t\tparentSessionId,\n\t\tstatus,\n\t\t...(reasonCode === undefined ? {} : { reasonCode }),\n\t\t...(reason === undefined ? {} : { reason }),\n\t\ttruncated,\n\t\tsessionId,\n\t\tmessages: Object.freeze([...messages]),\n\t\t...(outputArtifactRef === undefined ? {} : { outputArtifactRef }),\n\t\t...(messagesArtifactRef === undefined ? {} : { messagesArtifactRef }),\n\t};\n}\n\n/**\n * `result()` 的终态回读校验:只接受**终态**记录。持久层里的非终态记录是合法的在途\n * 痕迹(started 标记,§5.8),但 `result()` 是终态读契约——started 记录由装载期\n * 孤儿自愈综合为 `runner_lost` 后才可读,这里绝不把\"任务在途\"冒充\"任务已完成\"。\n */\nfunction parseSchedulerRecord(value: unknown): SchedulerTaskRecordV1 | undefined {\n\tconst fields = parseSchedulerRecordFields(value);\n\tif (fields === undefined || !isTerminalRuntimeStatus(fields.status)) return undefined;\n\treturn { schedulerVersion: 1, ...fields };\n}\n\n/**\n * 崩溃孤儿自愈的 started 记录校验(§5.8):调度器形状且状态**非终态**——在途任务\n * 崩溃后留在 durable 的痕迹。终态记录(正常 settle)与异形数据都不参与自愈。\n */\nfunction parseStartedRecord(value: unknown): SchedulerTaskRecordV1 | undefined {\n\tconst fields = parseSchedulerRecordFields(value);\n\tif (fields === undefined || isTerminalRuntimeStatus(fields.status)) return undefined;\n\treturn { schedulerVersion: 1, ...fields };\n}\n\nfunction matchesRequester(\n\trecord: SchedulerTaskRecordV1,\n\trequester: { readonly owner: string; readonly parentSessionId: string },\n): boolean {\n\treturn record.owner === requester.owner && record.parentSessionId === requester.parentSessionId;\n}\n\ninterface RuntimeTaskEntry {\n\treadonly taskId: string;\n\treadonly request: SubagentRuntimeSubmitRequestV1;\n\treadonly deadlineAt: number | undefined;\n\t/** 任务级控制器在 submit 时创建(handle.signal 需要在排队期可用);它不是子会话分配。 */\n\treadonly controller: AbortController;\n\tstatus: SubagentRuntimeStatus;\n\t/** 当前持有的准入槽位;settle 时统一释放。 */\n\tgate: SubagentAdmissionGateV1 | undefined;\n\tsettled: boolean;\n\t/** 取消 fence:cancel()/deadline/父栅栏都会置位;首个置位者决定 pendingTerminal。 */\n\tcancelRequested: boolean;\n\tpendingTerminal: \"cancelled\" | \"timed_out\" | undefined;\n\tpendingReasonCode: string | undefined;\n\tcancelReason: string | undefined;\n\tdrainDriverStarted: boolean;\n\thost: AgentTaskHost | undefined;\n\t/** 子会话 id(D-060 S4):host 创建即捕获,供 steer/resume 按 sessionId 定位活跃任务。 */\n\trecordSessionId: string | undefined;\n\trunSettled: Deferred<void>;\n\tparentSignal: AbortSignal | undefined;\n\tparentListener: (() => void) | undefined;\n\tsettleDeferred: Deferred<SchedulerTaskRecordV1>;\n\tpersistDone: Deferred<void>;\n\tpersistFailed: boolean;\n\tpersistError: unknown;\n}\n\nexport function createSubagentRuntime(options: SubagentRuntimeOptionsV1): SubagentRuntimeV1 {\n\tconst clock = options.clock ?? (() => Date.now());\n\tconst limits = options.limits ?? {};\n\tconst maxConcurrentSubagents = limits.maxConcurrentSubagents ?? 8;\n\tconst maxQueueDepth = limits.maxQueueDepth ?? 200;\n\tconst maxPromptBytes = limits.maxPromptBytes ?? 65536;\n\tconst maxMetadataBytes = limits.maxMetadataBytes ?? 16384;\n\tconst maxResultBytes = limits.maxResultBytes ?? 524288;\n\tconst maxMessages = limits.maxMessages ?? 2000;\n\tconst drainTimeoutMs = limits.drainTimeoutMs ?? 30000;\n\tconst maxRetainedRecords = limits.maxRetainedRecords ?? 256;\n\tconst results = options.results;\n\t// registry 是状态投影 primitive,不是第二准入/预算权威:并发与结果预算由调度器\n\t// 自己的 gate 与 settle 截断执行,因此自建时显式传 Infinity(不依赖其缺省值)。\n\tconst registry =\n\t\toptions.registry ??\n\t\tcreateAgentTaskRegistry({\n\t\t\tnow: clock,\n\t\t\tmaxConcurrent: Number.POSITIVE_INFINITY,\n\t\t\tmaxResultBytes: Number.POSITIVE_INFINITY,\n\t\t});\n\tconst localAdmission = createSlotGate(maxConcurrentSubagents);\n\tconst admission = (): SubagentAdmissionGateV1 => options.globalAdmission ?? localAdmission;\n\n\tconst tasks = new Map<string, RuntimeTaskEntry>();\n\tconst records = new Map<string, SchedulerTaskRecordV1>();\n\tconst queue: RuntimeTaskEntry[] = [];\n\tlet seq = 0;\n\tlet disposed = false;\n\tlet pumping = false;\n\n\t// ---------------------------------------------------------------------------\n\t// 终态 settle:终态守卫 -> 有界消息 -> 信封 -> 释放 -> 投影 -> 持久化\n\t// ---------------------------------------------------------------------------\n\n\tfunction settleEntry(\n\t\tentry: RuntimeTaskEntry,\n\t\tstatus: SubagentRuntimeStatus,\n\t\treasonCode: string | undefined,\n\t\treason: string | undefined,\n\t): void {\n\t\t// 终态守卫:settle 一律先查此标志,迟到结算(迟到的 host.run 结算、重复 fence)抑制。\n\t\tif (entry.settled) return;\n\t\tentry.settled = true;\n\t\t// 快照降级(终态语义优先,快照是次生增强):父会话 dispose 级联取消时,子会话\n\t\t// capability API 可能已被 revoke(getMessages/sessionId 读取抛 \"Capability API is\n\t\t// revoked\")——该异常不得发生在 records.set 与 settleDeferred.resolve 之前,否则\n\t\t// 终态永不落库、result() 永悬。失败降级为空快照 + sessionId 回退 taskId(快照失败\n\t\t// 时身份一并不可得),错误摘要(message 文本)经 options.logger best-effort 暴露。\n\t\tlet messages: readonly unknown[] = [];\n\t\tlet truncated = false;\n\t\tlet sessionId = entry.taskId;\n\t\tif (entry.host !== undefined) {\n\t\t\ttry {\n\t\t\t\tconst bounded = boundMessages(entry.host.session.getMessages(), maxMessages, maxResultBytes);\n\t\t\t\tmessages = bounded.messages;\n\t\t\t\ttruncated = bounded.truncated;\n\t\t\t\t// 子会话身份(D-060 S1):优先取\"agent 会话自身的 id\"(池化下宿主可见的 id 是\n\t\t\t\t// wire 任务 id),退回宿主会话 id;两者都在终态前读取(settle 之后 host 被清空)。\n\t\t\t\t// 注意 getAgentSessionId?.() 可选链只防 undefined 不防 throw,必须留在 try 内。\n\t\t\t\tsessionId = entry.host.session.getAgentSessionId?.() ?? entry.host.session.getSessionId();\n\t\t\t} catch (error) {\n\t\t\t\tmessages = [];\n\t\t\t\ttruncated = false;\n\t\t\t\tsessionId = entry.taskId;\n\t\t\t\t// 观察通道 best-effort:logger.warn 自身可抛(生产 LoggerAPI 先 assertUsable——\n\t\t\t\t// revoke 后抛 \"Capability API is revoked\"——再做 fields 可序列化校验),其故障\n\t\t\t\t// 不得吞终态:独立 try/catch 静默,payload 只放可序列化标量(cause 取 message 文本)。\n\t\t\t\ttry {\n\t\t\t\t\toptions.logger?.warn(\"subagent scheduler settle snapshot failed\", {\n\t\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\t\tcause: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t} catch {\n\t\t\t\t\t// 观察通道故障不改变已定的降级快照与终态语义。\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst record: SchedulerTaskRecordV1 = Object.freeze({\n\t\t\tschedulerVersion: 1 as const,\n\t\t\ttaskId: entry.taskId,\n\t\t\towner: options.owner,\n\t\t\tparentSessionId: options.parentSessionId,\n\t\t\tstatus,\n\t\t\t...(reasonCode === undefined ? {} : { reasonCode }),\n\t\t\t...(reason === undefined ? {} : { reason }),\n\t\t\ttruncated,\n\t\t\tsessionId,\n\t\t\tmessages: Object.freeze([...messages]),\n\t\t});\n\t\tentry.status = status;\n\t\trecords.set(entry.taskId, record);\n\t\t// 有界保留:Map 按插入序迭代,淘汰最旧的终态记录。\n\t\tevictOldestRecords();\n\t\tif (entry.gate !== undefined) {\n\t\t\tconst gate = entry.gate;\n\t\t\tentry.gate = undefined;\n\t\t\tgate.release();\n\t\t}\n\t\tif (entry.parentSignal !== undefined && entry.parentListener !== undefined) {\n\t\t\tentry.parentSignal.removeEventListener(\"abort\", entry.parentListener);\n\t\t\tentry.parentSignal = undefined;\n\t\t\tentry.parentListener = undefined;\n\t\t}\n\t\tif (entry.host !== undefined) {\n\t\t\t// 终态后释放子会话(§5.2:cleanup 失败终态仍必须落库)——消息快照已在上方读取。\n\t\t\tconst host = entry.host;\n\t\t\tentry.host = undefined;\n\t\t\tvoid host.dispose().catch(() => {\n\t\t\t\t// dispose 失败不改变已落的调度终态,任务记录已捕获。\n\t\t\t});\n\t\t}\n\t\tentry.settleDeferred.resolve(record);\n\t\tprojectTerminalToRegistry(record);\n\t\tpersistRecord(entry, record);\n\t\t// 槽位已释放:FIFO 推进队列(pumping 守卫保证与进行中的准入循环互斥)。\n\t\tpump();\n\t}\n\n\tfunction projectTerminalToRegistry(record: SchedulerTaskRecordV1): void {\n\t\t// registry 抛 AgentTaskError(如 duplicate_terminal / unknown_task)不得让调度器\n\t\t// 崩溃,也不得覆盖调度终态:调度记录是权威,投影失败按忽略处理。\n\t\ttry {\n\t\t\tif (record.status === \"succeeded\") {\n\t\t\t\tregistry.complete(record.taskId, record.messages as unknown as JsonValue);\n\t\t\t} else if (record.status === \"cancelled\") {\n\t\t\t\tregistry.cancel(record.taskId, record.reason ?? \"cancelled\");\n\t\t\t} else if (record.status === \"timed_out\") {\n\t\t\t\t// §4.3:timed_out 直映 registry 原生 timed_out——正常路径下注入的 registry 已在\n\t\t\t\t// tick() 的 checkDeadlines 原生置 timed_out,此处不得再改写(会 duplicate_terminal);\n\t\t\t\t// 仅当仍未终态(过期降级创建等例外路径,原生 checkDeadlines 覆盖不到)才以\n\t\t\t\t// fail + reason \"deadline_passed\" 落投影。\n\t\t\t\tconst projected = registry.get(record.taskId);\n\t\t\t\tif (projected !== undefined && (projected.status === \"pending\" || projected.status === \"running\")) {\n\t\t\t\t\tregistry.fail(record.taskId, record.reason ?? record.reasonCode ?? \"deadline_passed\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tregistry.fail(record.taskId, record.reason ?? record.reasonCode ?? record.status);\n\t\t\t}\n\t\t} catch {\n\t\t\t// 投影失败不改变调度终态。\n\t\t}\n\t}\n\n\tfunction persistRecord(entry: RuntimeTaskEntry, record: SchedulerTaskRecordV1): void {\n\t\tif (results === undefined) {\n\t\t\tentry.persistDone.resolve();\n\t\t\treturn;\n\t\t}\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tawait results.store.persistArtifact({\n\t\t\t\t\twriterId: results.writerId,\n\t\t\t\t\tartifactId: `subagent-task:${entry.taskId}`,\n\t\t\t\t\tsessionId: options.parentSessionId,\n\t\t\t\t\tdata: record,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// persist 失败不吞任务终态:内存记录已捕获;错误挂 cause 经 cancel()/drain()\n\t\t\t\t// 的 reject 通道暴露(对齐 capability-runtime-guards 的 cause 模式)。\n\t\t\t\tentry.persistFailed = true;\n\t\t\t\tentry.persistError = error;\n\t\t\t} finally {\n\t\t\t\tentry.persistDone.resolve();\n\t\t\t}\n\t\t})();\n\t}\n\n\t/** 有界保留:Map 按插入序迭代,淘汰最旧的记录(settle 与孤儿自愈共用同一淘汰纪律)。 */\n\tfunction evictOldestRecords(): void {\n\t\twhile (records.size > maxRetainedRecords) {\n\t\t\tconst oldest = records.keys().next();\n\t\t\tif (oldest.done === true) break;\n\t\t\trecords.delete(oldest.value);\n\t\t}\n\t}\n\n\t/**\n\t * 在途痕迹(崩溃孤儿自愈 §5.8):任务进入 running 时同步落一条非终态 started 记录,\n\t * 键与终态相同(`subagent-task:<taskId>`)——WAL 重放 last-write-wins,正常 settle\n\t * 的终态信封按程序序覆盖 started;进程在途崩溃时它就是装载期自愈的唯一证据。同步\n\t * 调用(非异步 IIFE)保证与 settle 终态 persist 的写序 = 程序序,不会出现 started\n\t * 迟到覆盖终态的假孤儿。落库失败不影响任务本身(trace 是 best-effort 增强),\n\t * 经 logger warn 暴露。\n\t */\n\tfunction persistStartedRecord(entry: RuntimeTaskEntry): void {\n\t\tif (results === undefined) return;\n\t\tconst started: SchedulerTaskRecordV1 = Object.freeze({\n\t\t\tschedulerVersion: 1,\n\t\t\ttaskId: entry.taskId,\n\t\t\towner: options.owner,\n\t\t\tparentSessionId: options.parentSessionId,\n\t\t\tstatus: \"running\",\n\t\t\ttruncated: false,\n\t\t\tsessionId:\n\t\t\t\tentry.recordSessionId === undefined || entry.recordSessionId === \"\" ? entry.taskId : entry.recordSessionId,\n\t\t\tmessages: Object.freeze([]),\n\t\t});\n\t\ttry {\n\t\t\tresults.store.persistArtifact({\n\t\t\t\twriterId: results.writerId,\n\t\t\t\tartifactId: `subagent-task:${entry.taskId}`,\n\t\t\t\tsessionId: options.parentSessionId,\n\t\t\t\tdata: started,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\toptions.logger?.warn(\"subagent scheduler started-record persist failed; crash-orphan tracing unavailable\", {\n\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\tcause: errorText(error),\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// 观察通道故障不改变任务语义。\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * 崩溃孤儿自愈(§5.8,装载期执行一次):扫描 durable artifacts,对 started-无-终态\n\t * 的在途痕迹综合终态 `runner_lost`(reasonCode `subagent_runner_lost`),置入内存\n\t * records(`result()`/`peek` 立即可见)并回写 durable(幂等:终态记录下次装载不再\n\t * 参与自愈)。作用域约束:只综合 owner 与 parentSessionId 均匹配本 runtime 的记录,\n\t * 跨作用域痕迹不泄漏。回写失败(如 writer 租约未恢复)不影响本进程可见性,下次\n\t * 装载从 started 记录重新综合。\n\t */\n\tfunction healCrashOrphans(): void {\n\t\tif (results === undefined) return;\n\t\tlet artifacts: readonly DurableArtifactRecordV1[];\n\t\ttry {\n\t\t\tartifacts = results.store.exportState().artifacts;\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\toptions.logger?.warn(\"subagent scheduler orphan scan failed; crash-orphan healing skipped this load\", {\n\t\t\t\t\tcause: errorText(error),\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// 观察通道故障不影响启动。\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet healed = 0;\n\t\tfor (const artifact of artifacts) {\n\t\t\tif (!artifact.artifactId.startsWith(\"subagent-task:\")) continue;\n\t\t\tconst started = parseStartedRecord(artifact.data);\n\t\t\tif (started === undefined) continue;\n\t\t\tif (started.owner !== options.owner || started.parentSessionId !== options.parentSessionId) continue;\n\t\t\tconst record: SchedulerTaskRecordV1 = Object.freeze({\n\t\t\t\tschedulerVersion: 1,\n\t\t\t\ttaskId: started.taskId,\n\t\t\t\towner: started.owner,\n\t\t\t\tparentSessionId: started.parentSessionId,\n\t\t\t\tstatus: \"runner_lost\",\n\t\t\t\treasonCode: \"subagent_runner_lost\",\n\t\t\t\treason: \"runner lost before the task settled (crash-orphan recovery at scheduler load)\",\n\t\t\t\ttruncated: started.truncated,\n\t\t\t\tsessionId: started.sessionId,\n\t\t\t\tmessages: started.messages,\n\t\t\t});\n\t\t\trecords.set(record.taskId, record);\n\t\t\thealed += 1;\n\t\t\ttry {\n\t\t\t\tresults.store.persistArtifact({\n\t\t\t\t\twriterId: results.writerId,\n\t\t\t\t\tartifactId: artifact.artifactId,\n\t\t\t\t\tsessionId: options.parentSessionId,\n\t\t\t\t\tdata: record,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\toptions.logger?.warn(\n\t\t\t\t\t\t\"subagent scheduler orphan-heal persist failed; heal stays in-memory for this load\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttaskId: record.taskId,\n\t\t\t\t\t\t\tcause: errorText(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\t// 观察通道故障不改变综合终态的内存可见性。\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevictOldestRecords();\n\t\tif (healed > 0) {\n\t\t\ttry {\n\t\t\t\toptions.logger?.warn(\"subagent scheduler healed crash orphan task(s) to runner_lost\", { count: healed });\n\t\t\t} catch {\n\t\t\t\t// 观察通道故障不影响启动。\n\t\t\t}\n\t\t}\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// 运行与取消\n\t// ---------------------------------------------------------------------------\n\n\tfunction startRun(entry: RuntimeTaskEntry, host: AgentTaskHost): void {\n\t\tconst runPromise = host.run(entry.request.prompt, entry.controller.signal);\n\t\tvoid runPromise.then(\n\t\t\t() => onRunSettled(entry, undefined),\n\t\t\t(error: unknown) => onRunSettled(entry, error),\n\t\t);\n\t}\n\n\t/**\n\t * adapter 抛出的结构化 `code` → 调度器 reasonCode。纪律:只接受保留前缀 `subagent_`\n\t * 与既有特例 `runner_lost`(映射为 `subagent_runner_lost`,D-044 §4.3)——记录里的\n\t * reasonCode 沿用调度器词汇表,不让第三方错误码污染 §4.3 的映射表。\n\t */\n\tfunction adapterReasonCode(error: unknown): string | undefined {\n\t\tif (typeof error !== \"object\" || error === null) return undefined;\n\t\tconst code = (error as { code?: unknown }).code;\n\t\tif (typeof code !== \"string\" || code.length === 0) return undefined;\n\t\tif (code === \"runner_lost\") return \"subagent_runner_lost\";\n\t\treturn code.startsWith(\"subagent_\") ? code : undefined;\n\t}\n\n\tfunction onRunSettled(entry: RuntimeTaskEntry, error: unknown): void {\n\t\tentry.runSettled.resolve();\n\t\tif (entry.settled) return; // 迟到结算:终态已落,抑制\n\t\tif (entry.cancelRequested) return; // fence 已落:由取消/drain 路径按 pendingTerminal 结算\n\t\tif (error !== undefined) {\n\t\t\t// failed 取原始错误 message(含字符串 throw 的原始文本);\n\t\t\t// adapter 可用结构化 code 声明原因(见 adapterReasonCode 的白名单纪律)。\n\t\t\tsettleEntry(entry, \"failed\", adapterReasonCode(error), errorText(error));\n\t\t\treturn;\n\t\t}\n\t\tsettleEntry(entry, \"succeeded\", undefined, undefined);\n\t}\n\n\t/**\n\t * 有界 drain:对 host.run promise 的定时 race(真实定时器,不依赖 scheduler clock;\n\t * 测试可用小 drainTimeoutMs 或 fake timers)。runSettled 已决时立即返回。\n\t */\n\tfunction raceDrain(entry: RuntimeTaskEntry, timeoutMs: number): Promise<\"settled\" | \"timeout\"> {\n\t\tlet settleOutcome!: (outcome: \"settled\" | \"timeout\") => void;\n\t\tconst outcomePromise = new Promise<\"settled\" | \"timeout\">((resolve) => {\n\t\t\tsettleOutcome = resolve;\n\t\t});\n\t\tconst timer = setTimeout(() => settleOutcome(\"timeout\"), timeoutMs);\n\t\tvoid entry.runSettled.promise.then(() => settleOutcome(\"settled\"));\n\t\tvoid outcomePromise.then(() => clearTimeout(timer));\n\t\treturn outcomePromise;\n\t}\n\n\t/** 每个任务至多一个 drain driver:首个启动者的预算生效,后续调用只共享其结果。 */\n\tfunction startDrainDriver(entry: RuntimeTaskEntry, timeoutMs: number): void {\n\t\tif (entry.drainDriverStarted) return;\n\t\tentry.drainDriverStarted = true;\n\t\tvoid (async () => {\n\t\t\tconst outcome = await raceDrain(entry, timeoutMs);\n\t\t\tif (entry.settled) return;\n\t\t\tif (outcome === \"timeout\") {\n\t\t\t\t// 执行体未在预算内结束:终态 drain_timeout(reasonCode subagent_drain_timeout),\n\t\t\t\t// 仍按 settle 路径保留现场消息快照,并尽力 abort + dispose 清理。\n\t\t\t\tentry.controller.abort(\"subagent drain timeout\");\n\t\t\t\tsettleEntry(entry, \"drain_timeout\", \"subagent_drain_timeout\", entry.cancelReason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.pendingTerminal !== undefined) {\n\t\t\t\tsettleEntry(entry, entry.pendingTerminal, entry.pendingReasonCode, entry.cancelReason);\n\t\t\t}\n\t\t\t// 无 fence 的 drain():in-time 结算已由 onRunSettled 自然完成。\n\t\t})();\n\t}\n\n\t/** 取消 fence(幂等):queued 直接出队终态;admitted 由分配路径结算;running 有界 drain。 */\n\tfunction cancelEntry(entry: RuntimeTaskEntry, reason: string | undefined): void {\n\t\tif (entry.settled || entry.cancelRequested) return;\n\t\tentry.cancelRequested = true;\n\t\tentry.pendingTerminal = \"cancelled\";\n\t\tentry.pendingReasonCode = undefined;\n\t\tentry.cancelReason = reason;\n\t\tentry.controller.abort(reason);\n\t\tapplyFence(entry);\n\t}\n\n\t/** deadline fence:终态方向为 timed_out(reasonCode deadline_passed)。 */\n\tfunction deadlineFence(entry: RuntimeTaskEntry): void {\n\t\tif (entry.settled || entry.cancelRequested) return;\n\t\tentry.cancelRequested = true;\n\t\tentry.pendingTerminal = \"timed_out\";\n\t\tentry.pendingReasonCode = \"deadline_passed\";\n\t\tentry.cancelReason = undefined;\n\t\tentry.controller.abort(\"deadline passed\");\n\t\tapplyFence(entry);\n\t}\n\n\tfunction applyFence(entry: RuntimeTaskEntry): void {\n\t\tswitch (entry.status) {\n\t\t\tcase \"queued\": {\n\t\t\t\tconst index = queue.indexOf(entry);\n\t\t\t\tif (index >= 0) queue.splice(index, 1);\n\t\t\t\tsettleEntry(entry, entry.pendingTerminal ?? \"cancelled\", entry.pendingReasonCode, entry.cancelReason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"admitted\":\n\t\t\t\t// 分配进行中:admitEntry 在 create 结算后按 fence 终态(终态守卫保证只结算一次)。\n\t\t\t\treturn;\n\t\t\tcase \"running\":\n\t\t\t\tstartDrainDriver(entry, drainTimeoutMs);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\t// 已终态:fence 幂等 no-op(entry.settled 守卫已挡住重复进入)。\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// 准入(严格 FIFO)\n\t// ---------------------------------------------------------------------------\n\n\tfunction pump(): void {\n\t\tif (pumping) return;\n\t\tpumping = true;\n\t\tvoid admitNext();\n\t}\n\n\tasync function admitNext(): Promise<void> {\n\t\ttry {\n\t\t\twhile (queue.length > 0) {\n\t\t\t\tconst gate = admission();\n\t\t\t\tif (gate.tryAcquire() === \"limit\") break;\n\t\t\t\tconst entry = queue.shift();\n\t\t\t\tif (entry === undefined) {\n\t\t\t\t\tgate.release();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (entry.settled) {\n\t\t\t\t\tgate.release();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tawait admitEntry(entry, gate);\n\t\t\t}\n\t\t} finally {\n\t\t\tpumping = false;\n\t\t}\n\t}\n\n\tasync function admitEntry(entry: RuntimeTaskEntry, gate: SubagentAdmissionGateV1): Promise<void> {\n\t\tentry.status = \"admitted\";\n\t\tentry.gate = gate;\n\t\tbindParentSignal(entry);\n\t\tif (entry.cancelRequested) {\n\t\t\tsettleEntry(entry, entry.pendingTerminal ?? \"cancelled\", entry.pendingReasonCode, entry.cancelReason);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tregistry.start(entry.taskId);\n\t\t} catch (error) {\n\t\t\t// registry 抛 AgentTaskError 不得让调度器崩溃:包装为调度终态 failed。\n\t\t\tsettleEntry(entry, \"failed\", undefined, errorText(error));\n\t\t\treturn;\n\t\t}\n\t\t// 延迟分配(§4.1):只有 admitted 才 adapter.create;queued 任务零 child session。\n\t\tlet host: AgentTaskHost;\n\t\ttry {\n\t\t\thost = await options.adapter.create({\n\t\t\t\tprompt: entry.request.prompt,\n\t\t\t\t...(entry.request.metadata === undefined ? {} : { metadata: entry.request.metadata }),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tsettleEntry(entry, \"failed\", adapterReasonCode(error), errorText(error));\n\t\t\treturn;\n\t\t}\n\t\tif (entry.cancelRequested) {\n\t\t\t// 分配期间 fence 落下:host 立即进入 settle(dispose)路径,不启动 run。\n\t\t\tentry.host = host;\n\t\t\tsettleEntry(entry, entry.pendingTerminal ?? \"cancelled\", entry.pendingReasonCode, entry.cancelReason);\n\t\t\treturn;\n\t\t}\n\t\tentry.host = host;\n\t\t// 子会话 id 即刻捕获(D-060 S4):steer/resume 需要在运行期按 sessionId 定位任务。\n\t\tentry.recordSessionId = host.session.getAgentSessionId?.() ?? host.session.getSessionId();\n\t\tentry.status = \"running\";\n\t\t// 在途痕迹先行(§5.8):同步落库保证相对 settle 终态 persist 的写序 = 程序序。\n\t\tpersistStartedRecord(entry);\n\t\tstartRun(entry, host);\n\t}\n\n\t/** 父栅栏(§4.2):每次 admitted 读取当前信号(epoch 正确);已 aborted 立即按 fence 处理。 */\n\tfunction bindParentSignal(entry: RuntimeTaskEntry): void {\n\t\tconst signal = options.parentSignal?.();\n\t\tif (signal === undefined) return;\n\t\tif (signal.aborted) {\n\t\t\tentry.cancelRequested = true;\n\t\t\tentry.pendingTerminal = \"cancelled\";\n\t\t\tentry.pendingReasonCode = undefined;\n\t\t\tentry.cancelReason = \"parent signal aborted\";\n\t\t\treturn;\n\t\t}\n\t\tconst listener = (): void => {\n\t\t\t// 父栅栏级联(§5.2):cancel fence 全量子任务(queued 移除 + running 有界 drain)。\n\t\t\t// runtime 实例绑定单一 owner/parentSessionId,cancelAll 即该父的全部任务;\n\t\t\t// abort 之后以新 epoch 信号提交的任务不受本次级联影响。\n\t\t\tvoid cancelAllEntries(\"parent signal aborted\").catch(() => {\n\t\t\t\t// 无调用方的级联路径:persist 失败等收尾错误已在各任务 cancel()/drain() 的\n\t\t\t\t// reject 通道暴露,这里不能也不需要再抛。\n\t\t\t});\n\t\t};\n\t\tentry.parentSignal = signal;\n\t\tentry.parentListener = listener;\n\t\tsignal.addEventListener(\"abort\", listener, { once: true });\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// 公共 API\n\t// ---------------------------------------------------------------------------\n\n\tfunction handleOf(entry: RuntimeTaskEntry): SubagentTaskHandleV1 {\n\t\treturn {\n\t\t\tid: entry.taskId,\n\t\t\tstatus: () => entry.status,\n\t\t\tsignal: entry.controller.signal,\n\t\t\tresult: () => awaitTerminalRecord(entry),\n\t\t\tcancel: (reason?: string) => {\n\t\t\t\tcancelEntry(entry, reason);\n\t\t\t\treturn awaitTerminalVoid(entry);\n\t\t\t},\n\t\t\tdrain: (drainOptions?: { timeoutMs?: number }) => {\n\t\t\t\t// queued/admitted 尚无执行体可 drain:等待其自然终态;running 才挂有界预算。\n\t\t\t\tif (!entry.settled && entry.status === \"running\") {\n\t\t\t\t\tstartDrainDriver(entry, drainOptions?.timeoutMs ?? drainTimeoutMs);\n\t\t\t\t}\n\t\t\t\treturn awaitTerminalRecord(entry);\n\t\t\t},\n\t\t};\n\t}\n\n\tasync function awaitTerminalRecord(entry: RuntimeTaskEntry): Promise<SchedulerTaskRecordV1> {\n\t\tconst record = await entry.settleDeferred.promise;\n\t\tawait entry.persistDone.promise;\n\t\tif (entry.persistFailed) {\n\t\t\tthrow new Error(\"Subagent task result could not be persisted\", { cause: entry.persistError });\n\t\t}\n\t\treturn record;\n\t}\n\n\tasync function awaitTerminalVoid(entry: RuntimeTaskEntry): Promise<void> {\n\t\tawait entry.settleDeferred.promise;\n\t\tawait entry.persistDone.promise;\n\t\tif (entry.persistFailed) {\n\t\t\tthrow new Error(\"Subagent task result could not be persisted\", { cause: entry.persistError });\n\t\t}\n\t}\n\n\tasync function cancelAllEntries(reason: string | undefined): Promise<void> {\n\t\tconst pending = [...tasks.values()].filter((entry) => !entry.settled);\n\t\tfor (const entry of pending) cancelEntry(entry, reason);\n\t\tawait Promise.all(pending.map((entry) => awaitTerminalVoid(entry)));\n\t}\n\n\t// 装载期孤儿自愈(§5.8):一次性扫描(构造即装载点;results 缺席时为 no-op)。\n\thealCrashOrphans();\n\n\treturn {\n\t\tsubmit(request) {\n\t\t\tif (disposed) {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_invalid_request\",\n\t\t\t\t\t\"Subagent runtime has been disposed; submit is revoked\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof request !== \"object\" || request === null || typeof request.prompt !== \"string\") {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_invalid_request\",\n\t\t\t\t\t\"Subagent submit request requires a string prompt\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (utf8ByteLength(request.prompt) > maxPromptBytes) {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_prompt_too_large\",\n\t\t\t\t\t`Prompt of ${utf8ByteLength(request.prompt)} UTF-8 bytes exceeds the ${maxPromptBytes}-byte limit`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (request.metadata !== undefined) {\n\t\t\t\tlet serialized: string;\n\t\t\t\ttry {\n\t\t\t\t\tserialized = JSON.stringify(request.metadata);\n\t\t\t\t} catch {\n\t\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\t\"subagent_invalid_request\",\n\t\t\t\t\t\t\"Subagent submit metadata is not JSON-serializable\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (utf8ByteLength(serialized) > maxMetadataBytes) {\n\t\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\t\"subagent_metadata_too_large\",\n\t\t\t\t\t\t`Metadata of ${utf8ByteLength(serialized)} UTF-8 bytes exceeds the ${maxMetadataBytes}-byte limit`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (queue.length >= maxQueueDepth) {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_queue_full\",\n\t\t\t\t\t`Subagent queue depth ${queue.length} reached the ${maxQueueDepth}-entry limit`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tseq += 1;\n\t\t\tconst taskId = `subagent:${options.owner}:${seq}:${randomUUID().slice(0, 8)}`;\n\t\t\tconst deadlineAt = request.deadlineAt;\n\t\t\t// §4.3:deadline 优先写入 registry 投影(原生 checkDeadlines 可直映 timed_out)。\n\t\t\t// registry 对已过期 deadline fail fast(deadline_passed 类 AgentTaskError),此时\n\t\t\t// 降级为不带 deadline 的 createTask:过期任务由调度器 tick 结算,registry 投影\n\t\t\t// 走 fail + reason 的例外路径(projectTerminalToRegistry)。\n\t\t\ttry {\n\t\t\t\tregistry.createTask({\n\t\t\t\t\ttaskId,\n\t\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\t\t...(deadlineAt === undefined ? {} : { deadlineAt }),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof AgentTaskError && error.code === \"deadline_passed\")) throw error;\n\t\t\t\tregistry.createTask({ taskId, parentSessionId: options.parentSessionId });\n\t\t\t}\n\t\t\tconst entry: RuntimeTaskEntry = {\n\t\t\t\ttaskId,\n\t\t\t\trequest,\n\t\t\t\tdeadlineAt,\n\t\t\t\tcontroller: new AbortController(),\n\t\t\t\tstatus: \"queued\",\n\t\t\t\tgate: undefined,\n\t\t\t\tsettled: false,\n\t\t\t\tcancelRequested: false,\n\t\t\t\tpendingTerminal: undefined,\n\t\t\t\tpendingReasonCode: undefined,\n\t\t\t\tcancelReason: undefined,\n\t\t\t\tdrainDriverStarted: false,\n\t\t\t\thost: undefined,\n\t\t\t\trecordSessionId: undefined,\n\t\t\t\trunSettled: createDeferred(),\n\t\t\t\tparentSignal: undefined,\n\t\t\t\tparentListener: undefined,\n\t\t\t\tsettleDeferred: createDeferred(),\n\t\t\t\tpersistDone: createDeferred(),\n\t\t\t\tpersistFailed: false,\n\t\t\t\tpersistError: undefined,\n\t\t\t};\n\t\t\ttasks.set(taskId, entry);\n\t\t\tqueue.push(entry);\n\t\t\tpump();\n\t\t\treturn Promise.resolve(handleOf(entry));\n\t\t},\n\t\tresult(taskId, requester) {\n\t\t\tconst cached = records.get(taskId);\n\t\t\tif (cached !== undefined) {\n\t\t\t\treturn Promise.resolve(matchesRequester(cached, requester) ? cached : undefined);\n\t\t\t}\n\t\t\tif (results === undefined) return Promise.resolve(undefined);\n\t\t\tlet loaded: DurableArtifactRecordV1 | undefined;\n\t\t\ttry {\n\t\t\t\tloaded = results.store.loadArtifact({ artifactId: `subagent-task:${taskId}` });\n\t\t\t} catch (error) {\n\t\t\t\t// 存储故障必须作为 **rejected promise** 冒泡:result 的签名是 Promise,\n\t\t\t\t// 同步抛出会让 `runtime.result(...).catch(...)` 直接崩在调用点。\n\t\t\t\treturn Promise.reject(error);\n\t\t\t}\n\t\t\tif (loaded === undefined) return Promise.resolve(undefined);\n\t\t\tconst record = parseSchedulerRecord(loaded.data);\n\t\t\tif (record === undefined || !matchesRequester(record, requester)) return Promise.resolve(undefined);\n\t\t\treturn Promise.resolve(record);\n\t\t},\n\t\tfindBySession(sessionId, requester) {\n\t\t\tif (requester.owner !== options.owner || requester.parentSessionId !== options.parentSessionId) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tfor (const entry of tasks.values()) {\n\t\t\t\tif (entry.recordSessionId !== sessionId) continue;\n\t\t\t\treturn { taskId: entry.taskId, settled: entry.settled };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tasync steer(taskId, text, requester) {\n\t\t\tif (requester.owner !== options.owner || requester.parentSessionId !== options.parentSessionId) {\n\t\t\t\tthrow new SubagentRuntimeError(\"subagent_unknown_task\", `no task ${taskId} in this scheduler scope`);\n\t\t\t}\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (entry === undefined) {\n\t\t\t\tthrow new SubagentRuntimeError(\"subagent_unknown_task\", `no task ${taskId} in this scheduler scope`);\n\t\t\t}\n\t\t\tconst host = entry.settled ? undefined : entry.host;\n\t\t\tif (host === undefined) {\n\t\t\t\tthrow new SubagentRuntimeError(\"subagent_not_running\", `task ${taskId} is not running (queued or settled)`);\n\t\t\t}\n\t\t\tconst steerFn = host.session.steer;\n\t\t\tif (typeof steerFn !== \"function\") {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_steer_unsupported\",\n\t\t\t\t\t`task ${taskId}'s host session exposes no steer`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait steerFn.call(host.session, text);\n\t\t},\n\t\tasync wait(taskId, timeoutMs, requester) {\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (\n\t\t\t\tentry === undefined ||\n\t\t\t\trequester.owner !== options.owner ||\n\t\t\t\trequester.parentSessionId !== options.parentSessionId\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (entry.settled) return records.get(taskId);\n\t\t\tconst boundedTimeout = Math.max(0, Math.min(timeoutMs, 120_000));\n\t\t\tconst timer = sleepDeferred(boundedTimeout);\n\t\t\tconst settled = Promise.race([entry.settleDeferred.promise, timer.promise]);\n\t\t\tawait settled.catch(() => {});\n\t\t\ttimer.cancel();\n\t\t\t// settle 后记录必已落(settleEntry 先 records.set 再 resolve settleDeferred)。\n\t\t\treturn entry.settled ? records.get(taskId) : undefined;\n\t\t},\n\t\tpeek(taskId, requester) {\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (entry !== undefined) {\n\t\t\t\tif (requester.owner !== options.owner || requester.parentSessionId !== options.parentSessionId) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn { settled: entry.settled, status: entry.status };\n\t\t\t}\n\t\t\t// 无内存条目但有记录:只可能是装载期崩溃孤儿自愈综合的终态(§5.8)——\n\t\t\t// 活跃条目从不删除,正常 settle 必有内存条目;此时按已结算可见(knownTask)。\n\t\t\tconst healed = records.get(taskId);\n\t\t\tif (healed === undefined || !matchesRequester(healed, requester)) return undefined;\n\t\t\treturn { settled: true, status: healed.status };\n\t\t},\n\t\tasync cancelById(taskId, requester, reason) {\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (\n\t\t\t\tentry === undefined ||\n\t\t\t\trequester.owner !== options.owner ||\n\t\t\t\trequester.parentSessionId !== options.parentSessionId\n\t\t\t) {\n\t\t\t\t// 作用域校验同 peek:越界与不存在同型 not_found(不泄漏他人任务存在性)。\n\t\t\t\t// 内存条目缺席时终态记录兜底 already_terminal;两者皆无才 not_found。\n\t\t\t\tconst cached = records.get(taskId);\n\t\t\t\tif (cached !== undefined && matchesRequester(cached, requester)) {\n\t\t\t\t\treturn { outcome: \"already_terminal\", status: cached.status };\n\t\t\t\t}\n\t\t\t\treturn { outcome: \"not_found\" };\n\t\t\t}\n\t\t\tif (entry.settled) return { outcome: \"already_terminal\", status: entry.status };\n\t\t\t// 复用 cancel() 的幂等取消 fence(不复制 drain 逻辑);等待方式对齐\n\t\t\t// cancelAllEntries(settle + persist 收尾,persist 失败沿用 reject 通道)。\n\t\t\tcancelEntry(entry, reason);\n\t\t\tawait awaitTerminalVoid(entry);\n\t\t\treturn { outcome: \"cancelled\", status: entry.status };\n\t\t},\n\t\tstats() {\n\t\t\tlet queued = 0;\n\t\t\tlet admitted = 0;\n\t\t\tlet running = 0;\n\t\t\tlet terminal = 0;\n\t\t\tfor (const entry of tasks.values()) {\n\t\t\t\tif (entry.status === \"queued\") queued += 1;\n\t\t\t\telse if (entry.status === \"admitted\") admitted += 1;\n\t\t\t\telse if (entry.status === \"running\") running += 1;\n\t\t\t\telse terminal += 1;\n\t\t\t}\n\t\t\treturn { queued, admitted, running, terminal };\n\t\t},\n\t\tasync cancelAll(reason?: string): Promise<void> {\n\t\t\tawait cancelAllEntries(reason);\n\t\t},\n\t\ttick() {\n\t\t\tconst now = clock();\n\t\t\t// §4.3:先推进注入 registry 的原生 deadline(running 任务原生直映 timed_out),\n\t\t\t// 再与调度器自身计算的过期任务取并集;原生先行保证后续调度终态投影不会把\n\t\t\t// 原生 timed_out 改写为 duplicate_terminal 失败。\n\t\t\tlet registryExpired: readonly string[] = [];\n\t\t\ttry {\n\t\t\t\tif (typeof registry.checkDeadlines === \"function\") registryExpired = registry.checkDeadlines();\n\t\t\t} catch {\n\t\t\t\t// 注入 registry 的原生推进失败不得让调度器崩溃:调度器自身计算仍会兜底。\n\t\t\t}\n\t\t\tconst expired = new Set<string>(registryExpired);\n\t\t\tfor (const entry of tasks.values()) {\n\t\t\t\tif (entry.deadlineAt !== undefined && !entry.settled && now >= entry.deadlineAt) {\n\t\t\t\t\texpired.add(entry.taskId);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst converted: string[] = [];\n\t\t\tfor (const id of expired) {\n\t\t\t\tconst entry = tasks.get(id);\n\t\t\t\tif (entry === undefined || entry.settled || entry.cancelRequested) continue;\n\t\t\t\tif (entry.status === \"queued\") {\n\t\t\t\t\t// queued 过期:直接出队终态 timed_out。\n\t\t\t\t\tconst index = queue.indexOf(entry);\n\t\t\t\t\tif (index >= 0) queue.splice(index, 1);\n\t\t\t\t\tsettleEntry(entry, \"timed_out\", \"deadline_passed\", undefined);\n\t\t\t\t} else {\n\t\t\t\t\t// running/admitted 过期:走 cancel fence + 有界 drain,终态 timed_out\n\t\t\t\t\t//(drain 自身再超时则按 drain_timeout 收敛)。\n\t\t\t\t\tdeadlineFence(entry);\n\t\t\t\t}\n\t\t\t\tconverted.push(id);\n\t\t\t}\n\t\t\t// 共享 globalAdmission 时,其他实例的槽位释放无法回调本实例;与其他显式推进\n\t\t\t// 一致,由 tick()/submit/settle 的 pump 重试准入,不引入隐藏轮询。\n\t\t\tpump();\n\t\t\treturn Object.freeze(converted);\n\t\t},\n\t\tasync dispose(): Promise<void> {\n\t\t\tdisposed = true;\n\t\t\tawait cancelAllEntries(\"subagent runtime disposed\");\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"subagent-runtime.js","sourceRoot":"","sources":["../src/subagent-runtime.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * 子代理运行时调度器(D-044,《子代理运行时设计》§4-§6)——插件级 `SubagentRuntime`:\n * 队列 / 准入 / 预算 / 终态 / 权限的唯一编排入口。\n *\n * - 只组合既有 primitive,不重建生命周期:`AgentTaskAdapter`\n * (../core/extensions/public-api.ts,裸执行 primitive,仅 admitted 之后调用)\n * 与 `createAgentTaskRegistry`(./multi-agent-tasks.ts,状态注册表 primitive,\n * 作为调度终态的投影写入,不作为第二权威;timed_out 经 checkDeadlines 原生直映,\n * 例外路径见 projectTerminalToRegistry,§4.3)。\n * - 生命周期:submit -> queued -> admitted -> allocated(此刻才 `adapter.create`,\n * 之前零 child session、零模型资源)-> running -> 终态。\n * - 预算执行点是调度器本身:submit 拒绝(prompt/metadata UTF-8 字节上限、队列深度),\n * settle 截断(maxMessages/maxResultBytes + `truncated` 标志)。registry 自建时显式传\n * Infinity 预算:并发与结果预算不得依赖 registry 缺省,也不能让 registry 成为第二准入权威。\n * - 终态不可覆盖:settle 先查终态守卫,迟到的 `host.run` 结算一律抑制;取消是幂等 fence,\n * running 取消走有界 drain,超时终态 `drain_timeout`(reasonCode `subagent_drain_timeout`)。\n * - 权限:`result(taskId, requester)` 仅在 owner 与 parentSessionId 均匹配时返回记录,\n * 不区分\"不存在\"与\"无权\";durable 回读走结构化校验,不做裸断言。persist 失败不吞终态:\n * 内存记录已捕获,persist 错误经 cancel()/drain() 的 reject 挂 cause 暴露。\n * - 崩溃孤儿自愈(§5.8):任务进入 running 时经 durable 落一条非终态 started 记录(与\n * 终态同键,WAL last-write-wins);装载期发现 started-无-终态即综合终态 `runner_lost`\n * (reasonCode `subagent_runner_lost`)并回写,重启后 `result()`/`peek` 据此可见。\n * - 父栅栏(§4.2):宿主注入 `parentSignal` getter,每次 admitted 时读取当前信号\n * (epoch 正确);信号已 aborted 的任务 admitted 即取消;abort 监听触发 cancelAll 语义。\n * - 确定性:deadline 由显式 `tick()` 推进(无隐藏定时器,生产 tick 驱动由消费者挂载,\n * 见 delegate 的惰性 ticker);drain 超时是对 `host.run` promise 的定时 race(契约允许\n * \"clock 推进或 race\" 二选一,race 便于注入测试)。共享 globalAdmission 的跨实例推进\n * 同样由显式 `tick()`(或任意实例的 submit/settle)驱动,不引入轮询。\n * - `runner_lost` 的生产来源是装载期崩溃孤儿自愈(本实现);运行路径本身不产生该状态。\n * `outputArtifactRef` / `messagesArtifactRef` 为 artifact 分页保留字段,本切片不产出。\n *\n * 迁自宿主 `src/plugins/subagent-runtime.ts`(D-075 S4 第三批);除 import 来源外\n * 逐字保持:公共契约(AgentTaskAdapter/JsonValue/durable 类型)改自 plugin-sdk。\n */\nimport { randomUUID } from \"node:crypto\";\nimport type {\n\tAgentTaskAdapter,\n\tAgentTaskHost,\n\tAgentTaskSchedulerFactsV1,\n\tDurableArtifactRecordV1,\n\tDurableServiceV1,\n\tJsonValue,\n\tPluginConfigValue,\n} from \"@agent-forge/plugin-sdk\";\nimport { readAgentTaskChildProfileV1 } from \"@agent-forge/plugin-sdk\";\n// limits fallback 的单一定义源(与 manifest config / plugin.json 共用)。\nimport { DEFAULT_SUBAGENT_LIMITS } from \"./defaults.ts\";\nimport { AgentTaskError, type AgentTaskRegistryV1, createAgentTaskRegistry } from \"./multi-agent-tasks.ts\";\n\n/** 调度器权威状态(§4.3);其余词汇(DTO/registry/Operation)都是它的投影。 */\nexport type SubagentRuntimeStatus =\n\t| \"queued\"\n\t| \"admitted\"\n\t| \"running\"\n\t| \"succeeded\"\n\t| \"failed\"\n\t| \"cancelled\"\n\t| \"timed_out\"\n\t| \"drain_timeout\"\n\t// runner_lost 为 pooled 切片保留值:本切片无进程池,任何路径都不产生该状态。\n\t| \"runner_lost\";\n\nexport interface SubagentRuntimeLimitsV1 {\n\t/** 同时运行的最大子代理数(admission gate 容量)。默认 12(DEFAULT_SUBAGENT_LIMITS)。 */\n\tmaxConcurrentSubagents?: number;\n\t/** 等待准入的最大排队深度;超出即 submit 结构化失败。默认 200。 */\n\tmaxQueueDepth?: number;\n\t/** prompt 的 UTF-8 字节上限;submit 时拒绝。默认 65536。 */\n\tmaxPromptBytes?: number;\n\t/** metadata 经 JSON.stringify 后的 UTF-8 字节上限;submit 时拒绝。默认 16384。 */\n\tmaxMetadataBytes?: number;\n\t/** 终态消息快照的逐条累计字节上限;settle 时截断。默认 524288。 */\n\tmaxResultBytes?: number;\n\t/** 终态消息快照的最大条数;settle 时截断。默认 2000。 */\n\tmaxMessages?: number;\n\t/** 取消/drain 的有界等待时长;超时终态 drain_timeout。默认 30000。 */\n\tdrainTimeoutMs?: number;\n\t/**\n\t * 终态记录(`result()` 回读的权威存储)保留条数上限,默认 512。超出按落库顺序淘汰\n\t * 最旧记录(被淘汰的 taskId 回读为 undefined)——长会话高频委派不能无界增长。\n\t */\n\tmaxRetainedRecords?: number;\n}\n\nexport interface SubagentRuntimeSubmitRequestV1 {\n\tprompt: string;\n\tmetadata?: Record<string, unknown>;\n\t/** 相对 clock 的绝对时刻;已过期或运行中过期的任务由 tick() 推进为 timed_out。 */\n\tdeadlineAt?: number;\n}\n\n/** 并发准入槽位。多 root 共享全局上限时注入同一实例;缺省由 runtime 按 maxConcurrentSubagents 自建。 */\nexport interface SubagentAdmissionGateV1 {\n\t/** claim 一个槽位;容量满返回 \"limit\"(此时调用方不得再 release)。 */\n\ttryAcquire(): \"claimed\" | \"limit\";\n\trelease(): void;\n}\n\n/** 调度器自有终态信封(§4.4):有界、带归属三元组;持久化与回读都以它为准。 */\nexport interface SchedulerTaskRecordV1 {\n\treadonly schedulerVersion: 1;\n\treadonly taskId: string;\n\treadonly owner: string;\n\treadonly parentSessionId: string;\n\treadonly status: SubagentRuntimeStatus;\n\treadonly reasonCode?: string;\n\treadonly reason?: string;\n\t/** messages 按 maxMessages/maxResultBytes 截断时为 true。 */\n\treadonly truncated: boolean;\n\t/** 子会话自身的 sessionId(D-060 S1):可按它在会话目录(`sessions/_agents/`)定位 transcript。 */\n\treadonly sessionId: string;\n\t/** 已按预算截断的有界消息快照。 */\n\treadonly messages: readonly unknown[];\n\t/**\n\t * 子会话创建后的可核验事实(联网检索设计 §5.6,P1b):allocate 路径在 `adapter.create`\n\t * 成功后读取(getActiveTools/getModel + child profile 的 mode);宿主不暴露\n\t * `getActiveTools` 或读取失败时整个 facts 省略——消费方(research 验收)据此失败,\n\t * 绝不伪造。对象冻结、JSON 可序列化。\n\t */\n\treadonly facts?: AgentTaskSchedulerFactsV1;\n\t/**\n\t * 任务层结果:仅任务级拒绝时出现——子代理活着但声明不做该任务,结算仍是调度终态\n\t * `succeeded`,\"做完\"与\"拒做\"由本字段区分。字面量封闭联合,未来可扩。\n\t */\n\treadonly taskOutcome?: \"refused\";\n\t/** 拒绝原因;仅与 taskOutcome 同时出现。 */\n\treadonly refusalReason?: string;\n\t/** artifact 分页保留字段:本切片不产出。 */\n\treadonly outputArtifactRef?: string;\n\treadonly messagesArtifactRef?: string;\n}\n\nexport interface SubagentTaskHandleV1 {\n\treadonly id: string;\n\tstatus(): SubagentRuntimeStatus;\n\t/** 任务级取消信号:cancel()、deadline fence 与父栅栏都会触发 abort。 */\n\treadonly signal: AbortSignal;\n\t/** 终态解析为调度记录;终态前挂起。 */\n\tresult(): Promise<SchedulerTaskRecordV1>;\n\t/** 幂等取消 fence:queued 直接终态;running abort 后有界 drain。返回等待至终态。 */\n\tcancel(reason?: string): Promise<void>;\n\t/** 等待执行体结束(timeoutMs 覆盖 drainTimeoutMs);超时终态 drain_timeout。 */\n\tdrain(options?: { timeoutMs?: number }): Promise<SchedulerTaskRecordV1>;\n}\n\nexport interface SubagentRuntimeOptionsV1 {\n\tadapter: AgentTaskAdapter;\n\towner: string;\n\tparentSessionId: string;\n\t/** 宿主注入的父取消信号 getter(§4.2);每次 admitted 时读取当前信号(epoch 正确)。 */\n\tparentSignal?: () => AbortSignal | undefined;\n\t/** 确定性时钟;缺省 `Date.now`。deadline 判定与 registry 时间戳使用。 */\n\tclock?: () => number;\n\tlimits?: SubagentRuntimeLimitsV1;\n\t/** 缺省自建(显式 Infinity 预算);多 root 共享状态投影时注入同一实例。 */\n\tregistry?: AgentTaskRegistryV1;\n\t/** 缺省按 maxConcurrentSubagents 自建;多 root 全局并发上限时注入同一实例。 */\n\tglobalAdmission?: SubagentAdmissionGateV1;\n\t/**\n\t * 可选 durable 持久化(§4.4 replay 通道 + §5.8 孤儿自愈):终态以\n\t * `subagent-task:<taskId>` 落库;任务 running 时同键落非终态 started 痕迹;\n\t * 装载期扫描 started-无-终态综合为 `runner_lost` 终态。缺席 = 不持久化、无自愈。\n\t */\n\tresults?: { readonly store: DurableServiceV1; readonly writerId: string };\n\t/**\n\t * 可选错误观察通道:settle 快照失败(如父会话 dispose 级联后子会话 capability API\n\t * 已 revoke)等不影响终态语义的错误摘要经 `warn` 暴露;未注入时跳过,终态照常落库。\n\t * fields 限 `PluginConfigValue`(可序列化):生产 LoggerAPI 会对 fields 做序列化校验。\n\t */\n\tlogger?: { warn(message: string, fields?: PluginConfigValue): void };\n}\n\n/**\n * `cancelById` 三态结果(§5.2,S6 后台委派配套):\n * - `cancelled`:命中未终态任务,取消 fence 已落并等待到终态(status 为最终落定的\n * 调度状态——正常路径 `cancelled`,drain 预算耗尽则 `drain_timeout`);\n * - `already_terminal`:调用时任务已终态(附原 status),幂等 no-op;\n * - `not_found`:内存与终态记录均无此 taskId(作用域越界同型,不泄漏他人任务存在性)。\n */\nexport type SubagentCancelByIdResultV1 =\n\t| { readonly outcome: \"cancelled\"; readonly status: SubagentRuntimeStatus }\n\t| { readonly outcome: \"already_terminal\"; readonly status: SubagentRuntimeStatus }\n\t| { readonly outcome: \"not_found\" };\n\nexport interface SubagentRuntimeV1 {\n\t/**\n\t * 提交子代理任务。同步抛出契约(非 async 函数):预算超限/非法请求/queue full/\n\t * runtime 已 revoked 以同步 throw 结算,`promise.catch()` 接不到,必须 try/catch;\n\t * 成功路径返回已 resolve 的 Promise。\n\t */\n\tsubmit(request: SubagentRuntimeSubmitRequestV1): Promise<SubagentTaskHandleV1>;\n\t/**\n\t * 范围化回读:内存/durable 记录的 owner 与 parentSessionId 均匹配 requester 才返回;\n\t * 否则返回 undefined(不区分不存在与无权)。\n\t */\n\tresult(\n\t\ttaskId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): Promise<SchedulerTaskRecordV1 | undefined>;\n\t/**\n\t * 按子会话 id 找活跃任务(D-060 S4):owner 与 parentSessionId 均匹配 requester 才返回;\n\t * 返回taskId 与终态与否,供 steer 定位与 resume 的 busy 判定。\n\t */\n\tfindBySession(\n\t\tsessionId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): { readonly taskId: string; readonly settled: boolean } | undefined;\n\t/**\n\t * 对**运行中**的子会话投递一条有界引导消息(§5.1):复用会话自身的 steer 语义,\n\t * 不新增队列。已终态/尚无执行体/宿主不支持 steer 都以结构化错误拒绝。\n\t */\n\tsteer(\n\t\ttaskId: string,\n\t\ttext: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): Promise<void>;\n\t/**\n\t * 有界等待某任务进入终态(D-060 S6 后台委派):范围化(owner+parent 匹配),\n\t * 超时返回 undefined(不区分未结算与不存在——先用 peek 区分)。\n\t */\n\twait(\n\t\ttaskId: string,\n\t\ttimeoutMs: number,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): Promise<SchedulerTaskRecordV1 | undefined>;\n\t/**\n\t * 不等待的当前状态快照(D-060 S6 后台委派):范围化;未命中返回 undefined,\n\t * 未结算返回当前状态词汇,已结算 settled=true。\n\t */\n\tpeek(\n\t\ttaskId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t): { readonly settled: boolean; readonly status: SubagentRuntimeStatus } | undefined;\n\t/**\n\t * 按 id 取消(§5.2,2026-10-01 落地,S6 后台委派配套):作用域校验同 `peek`\n\t * (owner 必须匹配、parentSessionId 必须匹配,越界视同 `not_found`);命中未终态\n\t * 任务时复用与 `cancel()` 相同的幂等取消 fence 并等待终态(不复制 drain 逻辑)。\n\t * 三态结果见 {@link SubagentCancelByIdResultV1}。\n\t */\n\tcancelById(\n\t\ttaskId: string,\n\t\trequester: { readonly owner: string; readonly parentSessionId: string },\n\t\treason?: string,\n\t): Promise<SubagentCancelByIdResultV1>;\n\tstats(): { readonly queued: number; readonly admitted: number; readonly running: number; readonly terminal: number };\n\tcancelAll(reason?: string): Promise<void>;\n\t/** 显式 deadline 推进;返回本次转 timed_out(running 侧为转入有界 drain)的 taskId。 */\n\ttick(): readonly string[];\n\tdispose(): Promise<void>;\n}\n\nexport type SubagentRuntimeErrorCodesV1 =\n\t| \"subagent_queue_full\"\n\t| \"subagent_prompt_too_large\"\n\t| \"subagent_metadata_too_large\"\n\t| \"subagent_invalid_request\"\n\t// 保留:按 id 定位任务未命中时的结构化错误码(当前读取面按契约返回 undefined)。\n\t| \"subagent_unknown_task\"\n\t| \"subagent_drain_timeout\"\n\t// S4 steer:目标非运行态(queued 未 admitted / 已终态 / 执行体已回收)或宿主会话无 steer 面。\n\t| \"subagent_not_running\"\n\t| \"subagent_steer_unsupported\";\n\nexport class SubagentRuntimeError extends Error {\n\treadonly code: SubagentRuntimeErrorCodesV1;\n\n\tconstructor(code: SubagentRuntimeErrorCodesV1, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SubagentRuntimeError\";\n\t\tthis.code = code;\n\t}\n}\n\n/** 状态投影(§4.3):调度器权威状态 -> `AgentTaskStatus` DTO 词汇;不产生映射表之外的值。 */\nexport function toAgentTaskStatusProjection(\n\tstatus: SubagentRuntimeStatus,\n): \"created\" | \"running\" | \"succeeded\" | \"failed\" | \"cancelled\" {\n\tswitch (status) {\n\t\tcase \"queued\":\n\t\tcase \"admitted\":\n\t\t\treturn \"created\";\n\t\tcase \"running\":\n\t\t\treturn \"running\";\n\t\tcase \"succeeded\":\n\t\t\treturn \"succeeded\";\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"cancelled\":\n\t\t\treturn \"cancelled\";\n\t\tcase \"timed_out\":\n\t\tcase \"drain_timeout\":\n\t\tcase \"runner_lost\":\n\t\t\treturn \"failed\";\n\t}\n}\n\ninterface Deferred<T> {\n\treadonly promise: Promise<T>;\n\tresolve(value: T): void;\n}\n\nfunction createDeferred<T>(): Deferred<T> {\n\tlet resolve!: (value: T) => void;\n\tconst promise = new Promise<T>((res) => {\n\t\tresolve = res;\n\t});\n\treturn { promise, resolve };\n}\n\n/** 可取消的定时 deferred(wait 的超时臂);cancel 同时清定时器并立即 resolve。 */\nfunction sleepDeferred(ms: number): { readonly promise: Promise<void>; readonly cancel: () => void } {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet resolve!: () => void;\n\tconst promise = new Promise<void>((res) => {\n\t\tresolve = res;\n\t\ttimer = setTimeout(res, ms);\n\t});\n\treturn {\n\t\tpromise,\n\t\tcancel: () => {\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\tresolve();\n\t\t},\n\t};\n}\n\nfunction createSlotGate(capacity: number): SubagentAdmissionGateV1 {\n\tlet held = 0;\n\treturn {\n\t\ttryAcquire() {\n\t\t\tif (held >= capacity) return \"limit\";\n\t\t\theld += 1;\n\t\t\treturn \"claimed\";\n\t\t},\n\t\trelease() {\n\t\t\theld -= 1;\n\t\t},\n\t};\n}\n\nconst textEncoder = new TextEncoder();\n\nfunction utf8ByteLength(value: string): number {\n\treturn textEncoder.encode(value).length;\n}\n\n/** JSON 序列化用于字节预算计算;不可序列化的值按空串计,不因预算计算抛错。 */\nfunction safeStringify(value: unknown): string {\n\ttry {\n\t\tconst serialized = JSON.stringify(value);\n\t\treturn serialized === undefined ? \"\" : serialized;\n\t} catch {\n\t\treturn \"\";\n\t}\n}\n\nfunction errorText(error: unknown): string {\n\tif (error instanceof Error) return error.message;\n\tif (typeof error === \"string\") return error;\n\treturn safeStringify(error);\n}\n\n/**\n * settle 有界化:先按 maxMessages 截断条数,再逐条累计 UTF-8 字节、超出 maxResultBytes\n * 停止;任一截断发生即置 truncated(信封只持有有界快照,原文分页属后续 artifact 切片)。\n */\nfunction boundMessages(\n\tmessages: readonly unknown[],\n\tmaxMessages: number,\n\tmaxResultBytes: number,\n): { readonly messages: readonly unknown[]; readonly truncated: boolean } {\n\tlet truncated = false;\n\tlet selected = messages;\n\tif (selected.length > maxMessages) {\n\t\tselected = selected.slice(0, maxMessages);\n\t\ttruncated = true;\n\t}\n\tconst bounded: unknown[] = [];\n\tlet used = 0;\n\tfor (const message of selected) {\n\t\tconst size = utf8ByteLength(safeStringify(message));\n\t\tif (used + size > maxResultBytes) {\n\t\t\ttruncated = true;\n\t\t\tbreak;\n\t\t}\n\t\tused += size;\n\t\tbounded.push(message);\n\t}\n\treturn { messages: bounded, truncated };\n}\n\nconst RUNTIME_STATUSES: readonly SubagentRuntimeStatus[] = [\n\t\"queued\",\n\t\"admitted\",\n\t\"running\",\n\t\"succeeded\",\n\t\"failed\",\n\t\"cancelled\",\n\t\"timed_out\",\n\t\"drain_timeout\",\n\t\"runner_lost\",\n];\n\nfunction isRuntimeStatus(value: string): value is SubagentRuntimeStatus {\n\treturn RUNTIME_STATUSES.includes(value as SubagentRuntimeStatus);\n}\n\n/**\n * 终态子集:`result()` 是**终态**回读契约,记录只在 settle 时落库,因此持久层里出现\n * 非终态状态(queued/admitted/running)只能是脏数据或别的写入者——按不合格处理,\n * 绝不把它当成\"任务已完成\"返回给调用方。\n */\nconst TERMINAL_RUNTIME_STATUSES: readonly SubagentRuntimeStatus[] = [\n\t\"succeeded\",\n\t\"failed\",\n\t\"cancelled\",\n\t\"timed_out\",\n\t\"drain_timeout\",\n\t\"runner_lost\",\n];\n\nfunction isTerminalRuntimeStatus(value: SubagentRuntimeStatus): boolean {\n\treturn TERMINAL_RUNTIME_STATUSES.includes(value);\n}\n\n/**\n * durable 记录的结构化字段校验(终态回读与 started 标记共用,不做裸断言):字段类型\n * 逐一核对后显式重建记录,不合格按 undefined 处理,与\"不存在/无权\"同型返回。状态词汇\n * 合法即可通过;终态/非终态的分流由两个包装器表达。\n */\nfunction parseSchedulerRecordFields(\n\tvalue: unknown,\n): (Omit<SchedulerTaskRecordV1, \"schedulerVersion\"> & { status: SubagentRuntimeStatus }) | undefined {\n\tif (typeof value !== \"object\" || value === null) return undefined;\n\tconst candidate = value as Record<string, unknown>;\n\tif (candidate.schedulerVersion !== 1) return undefined;\n\tconst taskId = candidate.taskId;\n\tif (typeof taskId !== \"string\" || taskId.length === 0) return undefined;\n\tconst owner = candidate.owner;\n\tif (typeof owner !== \"string\" || owner.length === 0) return undefined;\n\tconst parentSessionId = candidate.parentSessionId;\n\tif (typeof parentSessionId !== \"string\" || parentSessionId.length === 0) return undefined;\n\tconst status = candidate.status;\n\tif (typeof status !== \"string\" || !isRuntimeStatus(status)) return undefined;\n\tconst truncated = candidate.truncated;\n\tif (typeof truncated !== \"boolean\") return undefined;\n\tconst sessionId = candidate.sessionId;\n\tif (typeof sessionId !== \"string\" || sessionId.length === 0) return undefined;\n\tconst messages = candidate.messages;\n\tif (!Array.isArray(messages)) return undefined;\n\tconst reasonCode = candidate.reasonCode;\n\tif (reasonCode !== undefined && typeof reasonCode !== \"string\") return undefined;\n\tconst reason = candidate.reason;\n\tif (reason !== undefined && typeof reason !== \"string\") return undefined;\n\tconst outputArtifactRef = candidate.outputArtifactRef;\n\tif (outputArtifactRef !== undefined && typeof outputArtifactRef !== \"string\") return undefined;\n\tconst messagesArtifactRef = candidate.messagesArtifactRef;\n\tif (messagesArtifactRef !== undefined && typeof messagesArtifactRef !== \"string\") return undefined;\n\t// 任务层结果(taskOutcome/refusalReason):可选字段,与 reasonCode 等可选结构化字段\n\t// 同一纪律——异形值让整条记录按不合格处理,不静默剥掉。\n\tconst taskOutcome = candidate.taskOutcome;\n\tif (taskOutcome !== undefined && taskOutcome !== \"refused\") return undefined;\n\tconst refusalReason = candidate.refusalReason;\n\tif (refusalReason !== undefined && typeof refusalReason !== \"string\") return undefined;\n\t// facts(§5.6):可选字段,逐键校验后重建冻结副本;异形 facts 让整条记录按不合格\n\t// 处理(与 reasonCode 等可选结构化字段同一纪律),不静默剥掉。\n\tlet facts: AgentTaskSchedulerFactsV1 | undefined;\n\tconst rawFacts = candidate.facts;\n\tif (rawFacts !== undefined) {\n\t\tif (typeof rawFacts !== \"object\" || rawFacts === null || Array.isArray(rawFacts)) return undefined;\n\t\tconst shape = rawFacts as Record<string, unknown>;\n\t\tif (!Array.isArray(shape.tools) || shape.tools.some((entry) => typeof entry !== \"string\")) return undefined;\n\t\tif (shape.model !== undefined && typeof shape.model !== \"string\") return undefined;\n\t\tif (shape.mode !== \"readonly\" && shape.mode !== \"full-control\") return undefined;\n\t\tfacts = Object.freeze({\n\t\t\ttools: Object.freeze([...(shape.tools as readonly string[])]),\n\t\t\t...(shape.model === undefined ? {} : { model: shape.model as string }),\n\t\t\tmode: shape.mode,\n\t\t});\n\t}\n\treturn {\n\t\ttaskId,\n\t\towner,\n\t\tparentSessionId,\n\t\tstatus,\n\t\t...(reasonCode === undefined ? {} : { reasonCode }),\n\t\t...(reason === undefined ? {} : { reason }),\n\t\ttruncated,\n\t\tsessionId,\n\t\tmessages: Object.freeze([...messages]),\n\t\t...(facts === undefined ? {} : { facts }),\n\t\t...(taskOutcome === undefined ? {} : { taskOutcome }),\n\t\t...(refusalReason === undefined ? {} : { refusalReason }),\n\t\t...(outputArtifactRef === undefined ? {} : { outputArtifactRef }),\n\t\t...(messagesArtifactRef === undefined ? {} : { messagesArtifactRef }),\n\t};\n}\n\n/**\n * `result()` 的终态回读校验:只接受**终态**记录。持久层里的非终态记录是合法的在途\n * 痕迹(started 标记,§5.8),但 `result()` 是终态读契约——started 记录由装载期\n * 孤儿自愈综合为 `runner_lost` 后才可读,这里绝不把\"任务在途\"冒充\"任务已完成\"。\n */\nfunction parseSchedulerRecord(value: unknown): SchedulerTaskRecordV1 | undefined {\n\tconst fields = parseSchedulerRecordFields(value);\n\tif (fields === undefined || !isTerminalRuntimeStatus(fields.status)) return undefined;\n\treturn { schedulerVersion: 1, ...fields };\n}\n\n/**\n * 崩溃孤儿自愈的 started 记录校验(§5.8):调度器形状且状态**非终态**——在途任务\n * 崩溃后留在 durable 的痕迹。终态记录(正常 settle)与异形数据都不参与自愈。\n */\nfunction parseStartedRecord(value: unknown): SchedulerTaskRecordV1 | undefined {\n\tconst fields = parseSchedulerRecordFields(value);\n\tif (fields === undefined || isTerminalRuntimeStatus(fields.status)) return undefined;\n\treturn { schedulerVersion: 1, ...fields };\n}\n\nfunction matchesRequester(\n\trecord: SchedulerTaskRecordV1,\n\trequester: { readonly owner: string; readonly parentSessionId: string },\n): boolean {\n\treturn record.owner === requester.owner && record.parentSessionId === requester.parentSessionId;\n}\n\n/**\n * facts 捕获(联网检索设计 §5.6):allocate 路径在 `adapter.create` 成功后调用一次。\n * 只有宿主暴露 `getActiveTools` 且读取成功才产出 facts;`getModel` 缺席或无 id 时只省略\n * `model`;mode 取 metadata 里 child profile 的 mode(`readAgentTaskChildProfileV1`),\n * profile 缺失或不可解析时按 \"full-control\" 落地(缺失不是伪造只读)。读取抛错按\n * \"不可核验\"处理——省略 facts(消费方验收失败),经 logger best-effort 暴露,不影响任务。\n */\nfunction captureFacts(\n\tentry: Pick<RuntimeTaskEntry, \"taskId\" | \"request\">,\n\thost: AgentTaskHost,\n\tlogger: SubagentRuntimeOptionsV1[\"logger\"],\n): AgentTaskSchedulerFactsV1 | undefined {\n\tconst session = host.session as {\n\t\tgetActiveTools?: () => string[];\n\t\tgetModel?: () => { id?: string } | undefined;\n\t};\n\tconst getActiveTools = session.getActiveTools;\n\tif (typeof getActiveTools !== \"function\") return undefined;\n\tlet tools: readonly string[];\n\ttry {\n\t\tconst active = getActiveTools.call(session);\n\t\tif (!Array.isArray(active)) return undefined;\n\t\ttools = Object.freeze([...active]);\n\t} catch (error) {\n\t\ttry {\n\t\t\tlogger?.warn(\"subagent scheduler facts capture failed; result will omit facts\", {\n\t\t\t\ttaskId: entry.taskId,\n\t\t\t\tcause: errorText(error),\n\t\t\t});\n\t\t} catch {\n\t\t\t// 观察通道故障不改变\"省略 facts\"的降级结果。\n\t\t}\n\t\treturn undefined;\n\t}\n\tconst parsedProfile = readAgentTaskChildProfileV1(entry.request.metadata);\n\tconst mode = parsedProfile?.ok === true ? (parsedProfile.profile.mode ?? \"full-control\") : \"full-control\";\n\tlet model: string | undefined;\n\ttry {\n\t\tconst resolved = session.getModel?.()?.id;\n\t\tif (typeof resolved === \"string\") model = resolved;\n\t} catch {\n\t\t// getModel is optional host evidence; a throwing accessor omits model\n\t\t// without invalidating the tools fact.\n\t}\n\treturn Object.freeze({\n\t\ttools,\n\t\t...(model === undefined ? {} : { model }),\n\t\tmode,\n\t});\n}\n\ninterface RuntimeTaskEntry {\n\treadonly taskId: string;\n\treadonly request: SubagentRuntimeSubmitRequestV1;\n\treadonly deadlineAt: number | undefined;\n\t/** 任务级控制器在 submit 时创建(handle.signal 需要在排队期可用);它不是子会话分配。 */\n\treadonly controller: AbortController;\n\tstatus: SubagentRuntimeStatus;\n\t/** 当前持有的准入槽位;settle 时统一释放。 */\n\tgate: SubagentAdmissionGateV1 | undefined;\n\tsettled: boolean;\n\t/** 取消 fence:cancel()/deadline/父栅栏都会置位;首个置位者决定 pendingTerminal。 */\n\tcancelRequested: boolean;\n\tpendingTerminal: \"cancelled\" | \"timed_out\" | undefined;\n\tpendingReasonCode: string | undefined;\n\tcancelReason: string | undefined;\n\tdrainDriverStarted: boolean;\n\thost: AgentTaskHost | undefined;\n\t/** 子会话 id(D-060 S4):host 创建即捕获,供 steer/resume 按 sessionId 定位活跃任务。 */\n\trecordSessionId: string | undefined;\n\t/** 可核验事实(§5.6):host 创建即捕获,settle 时随终态信封落库;不可核验时 undefined。 */\n\tfacts: AgentTaskSchedulerFactsV1 | undefined;\n\trunSettled: Deferred<void>;\n\tparentSignal: AbortSignal | undefined;\n\tparentListener: (() => void) | undefined;\n\tsettleDeferred: Deferred<SchedulerTaskRecordV1>;\n\tpersistDone: Deferred<void>;\n\tpersistFailed: boolean;\n\tpersistError: unknown;\n}\n\nexport function createSubagentRuntime(options: SubagentRuntimeOptionsV1): SubagentRuntimeV1 {\n\tconst clock = options.clock ?? (() => Date.now());\n\tconst limits = options.limits ?? {};\n\tconst maxConcurrentSubagents = limits.maxConcurrentSubagents ?? DEFAULT_SUBAGENT_LIMITS.maxConcurrentSubagents;\n\tconst maxQueueDepth = limits.maxQueueDepth ?? DEFAULT_SUBAGENT_LIMITS.maxQueueDepth;\n\tconst maxPromptBytes = limits.maxPromptBytes ?? DEFAULT_SUBAGENT_LIMITS.maxPromptBytes;\n\tconst maxMetadataBytes = limits.maxMetadataBytes ?? DEFAULT_SUBAGENT_LIMITS.maxMetadataBytes;\n\tconst maxResultBytes = limits.maxResultBytes ?? DEFAULT_SUBAGENT_LIMITS.maxResultBytes;\n\tconst maxMessages = limits.maxMessages ?? DEFAULT_SUBAGENT_LIMITS.maxMessages;\n\tconst drainTimeoutMs = limits.drainTimeoutMs ?? DEFAULT_SUBAGENT_LIMITS.drainTimeoutMs;\n\tconst maxRetainedRecords = limits.maxRetainedRecords ?? DEFAULT_SUBAGENT_LIMITS.maxRetainedRecords;\n\tconst results = options.results;\n\t// registry 是状态投影 primitive,不是第二准入/预算权威:并发与结果预算由调度器\n\t// 自己的 gate 与 settle 截断执行,因此自建时显式传 Infinity(不依赖其缺省值)。\n\tconst registry =\n\t\toptions.registry ??\n\t\tcreateAgentTaskRegistry({\n\t\t\tnow: clock,\n\t\t\tmaxConcurrent: Number.POSITIVE_INFINITY,\n\t\t\tmaxResultBytes: Number.POSITIVE_INFINITY,\n\t\t});\n\tconst localAdmission = createSlotGate(maxConcurrentSubagents);\n\tconst admission = (): SubagentAdmissionGateV1 => options.globalAdmission ?? localAdmission;\n\n\tconst tasks = new Map<string, RuntimeTaskEntry>();\n\tconst records = new Map<string, SchedulerTaskRecordV1>();\n\tconst queue: RuntimeTaskEntry[] = [];\n\tlet seq = 0;\n\tlet disposed = false;\n\tlet pumping = false;\n\n\t// ---------------------------------------------------------------------------\n\t// 终态 settle:终态守卫 -> 有界消息 -> 信封 -> 释放 -> 投影 -> 持久化\n\t// ---------------------------------------------------------------------------\n\n\tfunction settleEntry(\n\t\tentry: RuntimeTaskEntry,\n\t\tstatus: SubagentRuntimeStatus,\n\t\treasonCode: string | undefined,\n\t\treason: string | undefined,\n\t): void {\n\t\t// 终态守卫:settle 一律先查此标志,迟到结算(迟到的 host.run 结算、重复 fence)抑制。\n\t\tif (entry.settled) return;\n\t\tentry.settled = true;\n\t\t// 快照降级(终态语义优先,快照是次生增强):父会话 dispose 级联取消时,子会话\n\t\t// capability API 可能已被 revoke(getMessages/sessionId 读取抛 \"Capability API is\n\t\t// revoked\")——该异常不得发生在 records.set 与 settleDeferred.resolve 之前,否则\n\t\t// 终态永不落库、result() 永悬。失败降级为空快照 + sessionId 回退 taskId(快照失败\n\t\t// 时身份一并不可得),错误摘要(message 文本)经 options.logger best-effort 暴露。\n\t\tlet messages: readonly unknown[] = [];\n\t\tlet truncated = false;\n\t\tlet sessionId = entry.taskId;\n\t\tif (entry.host !== undefined) {\n\t\t\ttry {\n\t\t\t\tconst bounded = boundMessages(entry.host.session.getMessages(), maxMessages, maxResultBytes);\n\t\t\t\tmessages = bounded.messages;\n\t\t\t\ttruncated = bounded.truncated;\n\t\t\t\t// 子会话身份(D-060 S1):优先取\"agent 会话自身的 id\"(池化下宿主可见的 id 是\n\t\t\t\t// wire 任务 id),退回宿主会话 id;两者都在终态前读取(settle 之后 host 被清空)。\n\t\t\t\t// 注意 getAgentSessionId?.() 可选链只防 undefined 不防 throw,必须留在 try 内。\n\t\t\t\tsessionId = entry.host.session.getAgentSessionId?.() ?? entry.host.session.getSessionId();\n\t\t\t} catch (error) {\n\t\t\t\tmessages = [];\n\t\t\t\ttruncated = false;\n\t\t\t\tsessionId = entry.taskId;\n\t\t\t\t// 观察通道 best-effort:logger.warn 自身可抛(生产 LoggerAPI 先 assertUsable——\n\t\t\t\t// revoke 后抛 \"Capability API is revoked\"——再做 fields 可序列化校验),其故障\n\t\t\t\t// 不得吞终态:独立 try/catch 静默,payload 只放可序列化标量(cause 取 message 文本)。\n\t\t\t\ttry {\n\t\t\t\t\toptions.logger?.warn(\"subagent scheduler settle snapshot failed\", {\n\t\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\t\tcause: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t});\n\t\t\t\t} catch {\n\t\t\t\t\t// 观察通道故障不改变已定的降级快照与终态语义。\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// 任务层结果:只随自然成功结算附标(failed/围栏分支不附)。检测用上方同一份\n\t\t// 快照——快照失败降级为空时无 transcript,即无拒绝标注(终态语义优先的既有次序)。\n\t\tlet taskOutcome: \"refused\" | undefined;\n\t\tlet refusalReason: string | undefined;\n\t\tif (status === \"succeeded\") {\n\t\t\tconst refusal = detectTaskRefusal(messages);\n\t\t\tif (refusal !== undefined) {\n\t\t\t\ttaskOutcome = \"refused\";\n\t\t\t\trefusalReason = refusal.reason;\n\t\t\t}\n\t\t}\n\t\tconst record: SchedulerTaskRecordV1 = Object.freeze({\n\t\t\tschedulerVersion: 1 as const,\n\t\t\ttaskId: entry.taskId,\n\t\t\towner: options.owner,\n\t\t\tparentSessionId: options.parentSessionId,\n\t\t\tstatus,\n\t\t\t...(reasonCode === undefined ? {} : { reasonCode }),\n\t\t\t...(reason === undefined ? {} : { reason }),\n\t\t\ttruncated,\n\t\t\tsessionId,\n\t\t\tmessages: Object.freeze([...messages]),\n\t\t\t...(entry.facts === undefined ? {} : { facts: entry.facts }),\n\t\t\t...(taskOutcome === undefined ? {} : { taskOutcome }),\n\t\t\t...(refusalReason === undefined ? {} : { refusalReason }),\n\t\t});\n\t\tentry.status = status;\n\t\trecords.set(entry.taskId, record);\n\t\t// 有界保留:Map 按插入序迭代,淘汰最旧的终态记录。\n\t\tevictOldestRecords();\n\t\tif (entry.gate !== undefined) {\n\t\t\tconst gate = entry.gate;\n\t\t\tentry.gate = undefined;\n\t\t\tgate.release();\n\t\t}\n\t\tif (entry.parentSignal !== undefined && entry.parentListener !== undefined) {\n\t\t\tentry.parentSignal.removeEventListener(\"abort\", entry.parentListener);\n\t\t\tentry.parentSignal = undefined;\n\t\t\tentry.parentListener = undefined;\n\t\t}\n\t\tif (entry.host !== undefined) {\n\t\t\t// 终态后释放子会话(§5.2:cleanup 失败终态仍必须落库)——消息快照已在上方读取。\n\t\t\tconst host = entry.host;\n\t\t\tentry.host = undefined;\n\t\t\tvoid host.dispose().catch(() => {\n\t\t\t\t// dispose 失败不改变已落的调度终态,任务记录已捕获。\n\t\t\t});\n\t\t}\n\t\tentry.settleDeferred.resolve(record);\n\t\tprojectTerminalToRegistry(record);\n\t\tpersistRecord(entry, record);\n\t\t// 槽位已释放:FIFO 推进队列(pumping 守卫保证与进行中的准入循环互斥)。\n\t\tpump();\n\t}\n\n\tfunction projectTerminalToRegistry(record: SchedulerTaskRecordV1): void {\n\t\t// registry 抛 AgentTaskError(如 duplicate_terminal / unknown_task)不得让调度器\n\t\t// 崩溃,也不得覆盖调度终态:调度记录是权威,投影失败按忽略处理。\n\t\ttry {\n\t\t\tif (record.status === \"succeeded\") {\n\t\t\t\tregistry.complete(record.taskId, record.messages as unknown as JsonValue);\n\t\t\t} else if (record.status === \"cancelled\") {\n\t\t\t\tregistry.cancel(record.taskId, record.reason ?? \"cancelled\");\n\t\t\t} else if (record.status === \"timed_out\") {\n\t\t\t\t// §4.3:timed_out 直映 registry 原生 timed_out——正常路径下注入的 registry 已在\n\t\t\t\t// tick() 的 checkDeadlines 原生置 timed_out,此处不得再改写(会 duplicate_terminal);\n\t\t\t\t// 仅当仍未终态(过期降级创建等例外路径,原生 checkDeadlines 覆盖不到)才以\n\t\t\t\t// fail + reason \"deadline_passed\" 落投影。\n\t\t\t\tconst projected = registry.get(record.taskId);\n\t\t\t\tif (projected !== undefined && (projected.status === \"pending\" || projected.status === \"running\")) {\n\t\t\t\t\tregistry.fail(record.taskId, record.reason ?? record.reasonCode ?? \"deadline_passed\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tregistry.fail(record.taskId, record.reason ?? record.reasonCode ?? record.status);\n\t\t\t}\n\t\t} catch {\n\t\t\t// 投影失败不改变调度终态。\n\t\t}\n\t}\n\n\tfunction persistRecord(entry: RuntimeTaskEntry, record: SchedulerTaskRecordV1): void {\n\t\tif (results === undefined) {\n\t\t\tentry.persistDone.resolve();\n\t\t\treturn;\n\t\t}\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tawait results.store.persistArtifact({\n\t\t\t\t\twriterId: results.writerId,\n\t\t\t\t\tartifactId: `subagent-task:${entry.taskId}`,\n\t\t\t\t\tsessionId: options.parentSessionId,\n\t\t\t\t\tdata: record,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\t// persist 失败不吞任务终态:内存记录已捕获;错误挂 cause 经 cancel()/drain()\n\t\t\t\t// 的 reject 通道暴露(对齐 capability-runtime-guards 的 cause 模式)。\n\t\t\t\tentry.persistFailed = true;\n\t\t\t\tentry.persistError = error;\n\t\t\t} finally {\n\t\t\t\tentry.persistDone.resolve();\n\t\t\t}\n\t\t})();\n\t}\n\n\t/** 有界保留:Map 按插入序迭代,淘汰最旧的记录(settle 与孤儿自愈共用同一淘汰纪律)。 */\n\tfunction evictOldestRecords(): void {\n\t\twhile (records.size > maxRetainedRecords) {\n\t\t\tconst oldest = records.keys().next();\n\t\t\tif (oldest.done === true) break;\n\t\t\trecords.delete(oldest.value);\n\t\t}\n\t}\n\n\t/**\n\t * 在途痕迹(崩溃孤儿自愈 §5.8):任务进入 running 时同步落一条非终态 started 记录,\n\t * 键与终态相同(`subagent-task:<taskId>`)——WAL 重放 last-write-wins,正常 settle\n\t * 的终态信封按程序序覆盖 started;进程在途崩溃时它就是装载期自愈的唯一证据。同步\n\t * 调用(非异步 IIFE)保证与 settle 终态 persist 的写序 = 程序序,不会出现 started\n\t * 迟到覆盖终态的假孤儿。落库失败不影响任务本身(trace 是 best-effort 增强),\n\t * 经 logger warn 暴露。\n\t */\n\tfunction persistStartedRecord(entry: RuntimeTaskEntry): void {\n\t\tif (results === undefined) return;\n\t\tconst started: SchedulerTaskRecordV1 = Object.freeze({\n\t\t\tschedulerVersion: 1,\n\t\t\ttaskId: entry.taskId,\n\t\t\towner: options.owner,\n\t\t\tparentSessionId: options.parentSessionId,\n\t\t\tstatus: \"running\",\n\t\t\ttruncated: false,\n\t\t\tsessionId:\n\t\t\t\tentry.recordSessionId === undefined || entry.recordSessionId === \"\" ? entry.taskId : entry.recordSessionId,\n\t\t\tmessages: Object.freeze([]),\n\t\t\t// facts 已在 allocate 路径捕获(§5.6):随在途痕迹落库,崩溃孤儿综合的\n\t\t\t// runner_lost 终态因此同样如实可核验,而不是凭空省略。\n\t\t\t...(entry.facts === undefined ? {} : { facts: entry.facts }),\n\t\t});\n\t\ttry {\n\t\t\tresults.store.persistArtifact({\n\t\t\t\twriterId: results.writerId,\n\t\t\t\tartifactId: `subagent-task:${entry.taskId}`,\n\t\t\t\tsessionId: options.parentSessionId,\n\t\t\t\tdata: started,\n\t\t\t});\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\toptions.logger?.warn(\"subagent scheduler started-record persist failed; crash-orphan tracing unavailable\", {\n\t\t\t\t\ttaskId: entry.taskId,\n\t\t\t\t\tcause: errorText(error),\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// 观察通道故障不改变任务语义。\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * 崩溃孤儿自愈(§5.8,装载期执行一次):扫描 durable artifacts,对 started-无-终态\n\t * 的在途痕迹综合终态 `runner_lost`(reasonCode `subagent_runner_lost`),置入内存\n\t * records(`result()`/`peek` 立即可见)并回写 durable(幂等:终态记录下次装载不再\n\t * 参与自愈)。作用域约束:只综合 owner 与 parentSessionId 均匹配本 runtime 的记录,\n\t * 跨作用域痕迹不泄漏。回写失败(如 writer 租约未恢复)不影响本进程可见性,下次\n\t * 装载从 started 记录重新综合。\n\t */\n\tfunction healCrashOrphans(): void {\n\t\tif (results === undefined) return;\n\t\tlet artifacts: readonly DurableArtifactRecordV1[];\n\t\ttry {\n\t\t\tartifacts = results.store.exportState().artifacts;\n\t\t} catch (error) {\n\t\t\ttry {\n\t\t\t\toptions.logger?.warn(\"subagent scheduler orphan scan failed; crash-orphan healing skipped this load\", {\n\t\t\t\t\tcause: errorText(error),\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\t// 观察通道故障不影响启动。\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet healed = 0;\n\t\tfor (const artifact of artifacts) {\n\t\t\tif (!artifact.artifactId.startsWith(\"subagent-task:\")) continue;\n\t\t\tconst started = parseStartedRecord(artifact.data);\n\t\t\tif (started === undefined) continue;\n\t\t\tif (started.owner !== options.owner || started.parentSessionId !== options.parentSessionId) continue;\n\t\t\tconst record: SchedulerTaskRecordV1 = Object.freeze({\n\t\t\t\tschedulerVersion: 1,\n\t\t\t\ttaskId: started.taskId,\n\t\t\t\towner: started.owner,\n\t\t\t\tparentSessionId: started.parentSessionId,\n\t\t\t\tstatus: \"runner_lost\",\n\t\t\t\treasonCode: \"subagent_runner_lost\",\n\t\t\t\treason: \"runner lost before the task settled (crash-orphan recovery at scheduler load)\",\n\t\t\t\ttruncated: started.truncated,\n\t\t\t\tsessionId: started.sessionId,\n\t\t\t\tmessages: started.messages,\n\t\t\t\t...(started.facts === undefined ? {} : { facts: started.facts }),\n\t\t\t});\n\t\t\trecords.set(record.taskId, record);\n\t\t\thealed += 1;\n\t\t\ttry {\n\t\t\t\tresults.store.persistArtifact({\n\t\t\t\t\twriterId: results.writerId,\n\t\t\t\t\tartifactId: artifact.artifactId,\n\t\t\t\t\tsessionId: options.parentSessionId,\n\t\t\t\t\tdata: record,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\toptions.logger?.warn(\n\t\t\t\t\t\t\"subagent scheduler orphan-heal persist failed; heal stays in-memory for this load\",\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttaskId: record.taskId,\n\t\t\t\t\t\t\tcause: errorText(error),\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} catch {\n\t\t\t\t\t// 观察通道故障不改变综合终态的内存可见性。\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevictOldestRecords();\n\t\tif (healed > 0) {\n\t\t\ttry {\n\t\t\t\toptions.logger?.warn(\"subagent scheduler healed crash orphan task(s) to runner_lost\", { count: healed });\n\t\t\t} catch {\n\t\t\t\t// 观察通道故障不影响启动。\n\t\t\t}\n\t\t}\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// 运行与取消\n\t// ---------------------------------------------------------------------------\n\n\tfunction startRun(entry: RuntimeTaskEntry, host: AgentTaskHost): void {\n\t\tconst runPromise = host.run(entry.request.prompt, entry.controller.signal);\n\t\tvoid runPromise.then(\n\t\t\t() => onRunSettled(entry, undefined),\n\t\t\t(error: unknown) => onRunSettled(entry, error),\n\t\t);\n\t}\n\n\t/**\n\t * adapter 抛出的结构化 `code` → 调度器 reasonCode。纪律:只接受保留前缀 `subagent_`\n\t * 与既有特例 `runner_lost`(映射为 `subagent_runner_lost`,D-044 §4.3)——记录里的\n\t * reasonCode 沿用调度器词汇表,不让第三方错误码污染 §4.3 的映射表。\n\t */\n\tfunction adapterReasonCode(error: unknown): string | undefined {\n\t\tif (typeof error !== \"object\" || error === null) return undefined;\n\t\tconst code = (error as { code?: unknown }).code;\n\t\tif (typeof code !== \"string\" || code.length === 0) return undefined;\n\t\tif (code === \"runner_lost\") return \"subagent_runner_lost\";\n\t\treturn code.startsWith(\"subagent_\") ? code : undefined;\n\t}\n\n\t/**\n\t * A run that resolves after the model provider rejected the call still\n\t * counts as a completed prompt, but the child produced no answer. Without\n\t * this check the result would be `succeeded` with no text and consumers\n\t * would lose the original provider error (2026-10-20 real E2E).\n\t */\n\tfunction terminalAssistantError(entry: RuntimeTaskEntry): string | undefined {\n\t\tif (entry.host === undefined) return undefined;\n\t\tlet messages: readonly unknown[];\n\t\ttry {\n\t\t\tmessages = entry.host.session.getMessages();\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\t\tconst message = messages[index];\n\t\t\tif (!message || typeof message !== \"object\") continue;\n\t\t\tconst record = message as Record<string, unknown>;\n\t\t\tif (record.role !== \"assistant\") continue;\n\t\t\tif (record.stopReason !== \"error\") return undefined;\n\t\t\tconst detail = typeof record.errorMessage === \"string\" ? record.errorMessage.trim() : \"\";\n\t\t\treturn detail === \"\" ? \"assistant message stopped with an error\" : detail;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t/**\n\t * 任务级拒绝检测(settle 成功分支专用):只认子会话 transcript 里 `subagent_message`\n\t * 工具调用入参 `type: \"refuse\"` 的记录(取最后一条),与 `terminalAssistantError`\n\t * 同一信任级——同为 settle 时点的 transcript 结构检查,禁止任何文本关键词启发式。\n\t * text 入参缺失或非字符串时仍判定拒绝,但省略 refusalReason(无则省略纪律)。\n\t */\n\tfunction detectTaskRefusal(messages: readonly unknown[]): { readonly reason: string | undefined } | undefined {\n\t\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\t\tconst message = messages[index];\n\t\t\tif (!message || typeof message !== \"object\") continue;\n\t\t\tconst record = message as Record<string, unknown>;\n\t\t\tif (record.role !== \"assistant\" || !Array.isArray(record.content)) continue;\n\t\t\tfor (let blockIndex = record.content.length - 1; blockIndex >= 0; blockIndex -= 1) {\n\t\t\t\tconst block = record.content[blockIndex];\n\t\t\t\tif (!block || typeof block !== \"object\") continue;\n\t\t\t\tconst call = block as Record<string, unknown>;\n\t\t\t\tif (call.type !== \"toolCall\" || call.name !== \"subagent_message\") continue;\n\t\t\t\tconst input = call.arguments;\n\t\t\t\tif (typeof input !== \"object\" || input === null || (input as Record<string, unknown>).type !== \"refuse\") {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst text = (input as Record<string, unknown>).text;\n\t\t\t\treturn { reason: typeof text === \"string\" ? text : undefined };\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tfunction onRunSettled(entry: RuntimeTaskEntry, error: unknown): void {\n\t\tentry.runSettled.resolve();\n\t\tif (entry.settled) return; // 迟到结算:终态已落,抑制\n\t\tif (entry.cancelRequested) return; // fence 已落:由取消/drain 路径按 pendingTerminal 结算\n\t\tif (error !== undefined) {\n\t\t\t// failed 取原始错误 message(含字符串 throw 的原始文本);\n\t\t\t// adapter 可用结构化 code 声明原因(见 adapterReasonCode 的白名单纪律)。\n\t\t\tsettleEntry(entry, \"failed\", adapterReasonCode(error), errorText(error));\n\t\t\treturn;\n\t\t}\n\t\tconst terminalError = terminalAssistantError(entry);\n\t\tif (terminalError !== undefined) {\n\t\t\t// The prompt resolved, but the last model call ended in an error: the\n\t\t\t// task has no usable answer, so preserve the provider message instead\n\t\t\t// of projecting an empty `succeeded` result.\n\t\t\tsettleEntry(entry, \"failed\", \"subagent_provider_error\", terminalError);\n\t\t\treturn;\n\t\t}\n\t\tsettleEntry(entry, \"succeeded\", undefined, undefined);\n\t}\n\n\t/**\n\t * 有界 drain:对 host.run promise 的定时 race(真实定时器,不依赖 scheduler clock;\n\t * 测试可用小 drainTimeoutMs 或 fake timers)。runSettled 已决时立即返回。\n\t */\n\tfunction raceDrain(entry: RuntimeTaskEntry, timeoutMs: number): Promise<\"settled\" | \"timeout\"> {\n\t\tlet settleOutcome!: (outcome: \"settled\" | \"timeout\") => void;\n\t\tconst outcomePromise = new Promise<\"settled\" | \"timeout\">((resolve) => {\n\t\t\tsettleOutcome = resolve;\n\t\t});\n\t\tconst timer = setTimeout(() => settleOutcome(\"timeout\"), timeoutMs);\n\t\tvoid entry.runSettled.promise.then(() => settleOutcome(\"settled\"));\n\t\tvoid outcomePromise.then(() => clearTimeout(timer));\n\t\treturn outcomePromise;\n\t}\n\n\t/** 每个任务至多一个 drain driver:首个启动者的预算生效,后续调用只共享其结果。 */\n\tfunction startDrainDriver(entry: RuntimeTaskEntry, timeoutMs: number): void {\n\t\tif (entry.drainDriverStarted) return;\n\t\tentry.drainDriverStarted = true;\n\t\tvoid (async () => {\n\t\t\tconst outcome = await raceDrain(entry, timeoutMs);\n\t\t\tif (entry.settled) return;\n\t\t\tif (outcome === \"timeout\") {\n\t\t\t\t// 执行体未在预算内结束:终态 drain_timeout(reasonCode subagent_drain_timeout),\n\t\t\t\t// 仍按 settle 路径保留现场消息快照,并尽力 abort + dispose 清理。\n\t\t\t\tentry.controller.abort(\"subagent drain timeout\");\n\t\t\t\tsettleEntry(entry, \"drain_timeout\", \"subagent_drain_timeout\", entry.cancelReason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (entry.pendingTerminal !== undefined) {\n\t\t\t\tsettleEntry(entry, entry.pendingTerminal, entry.pendingReasonCode, entry.cancelReason);\n\t\t\t}\n\t\t\t// 无 fence 的 drain():in-time 结算已由 onRunSettled 自然完成。\n\t\t})();\n\t}\n\n\t/** 取消 fence(幂等):queued 直接出队终态;admitted 由分配路径结算;running 有界 drain。 */\n\tfunction cancelEntry(entry: RuntimeTaskEntry, reason: string | undefined): void {\n\t\tif (entry.settled || entry.cancelRequested) return;\n\t\tentry.cancelRequested = true;\n\t\tentry.pendingTerminal = \"cancelled\";\n\t\tentry.pendingReasonCode = undefined;\n\t\tentry.cancelReason = reason;\n\t\tentry.controller.abort(reason);\n\t\tapplyFence(entry);\n\t}\n\n\t/** deadline fence:终态方向为 timed_out(reasonCode deadline_passed)。 */\n\tfunction deadlineFence(entry: RuntimeTaskEntry): void {\n\t\tif (entry.settled || entry.cancelRequested) return;\n\t\tentry.cancelRequested = true;\n\t\tentry.pendingTerminal = \"timed_out\";\n\t\tentry.pendingReasonCode = \"deadline_passed\";\n\t\tentry.cancelReason = undefined;\n\t\tentry.controller.abort(\"deadline passed\");\n\t\tapplyFence(entry);\n\t}\n\n\tfunction applyFence(entry: RuntimeTaskEntry): void {\n\t\tswitch (entry.status) {\n\t\t\tcase \"queued\": {\n\t\t\t\tconst index = queue.indexOf(entry);\n\t\t\t\tif (index >= 0) queue.splice(index, 1);\n\t\t\t\tsettleEntry(entry, entry.pendingTerminal ?? \"cancelled\", entry.pendingReasonCode, entry.cancelReason);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"admitted\":\n\t\t\t\t// 分配进行中:admitEntry 在 create 结算后按 fence 终态(终态守卫保证只结算一次)。\n\t\t\t\treturn;\n\t\t\tcase \"running\":\n\t\t\t\tstartDrainDriver(entry, drainTimeoutMs);\n\t\t\t\treturn;\n\t\t\tdefault:\n\t\t\t\t// 已终态:fence 幂等 no-op(entry.settled 守卫已挡住重复进入)。\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// 准入(严格 FIFO)\n\t// ---------------------------------------------------------------------------\n\n\tfunction pump(): void {\n\t\tif (pumping) return;\n\t\tpumping = true;\n\t\tvoid admitNext();\n\t}\n\n\tasync function admitNext(): Promise<void> {\n\t\ttry {\n\t\t\twhile (queue.length > 0) {\n\t\t\t\tconst gate = admission();\n\t\t\t\tif (gate.tryAcquire() === \"limit\") break;\n\t\t\t\tconst entry = queue.shift();\n\t\t\t\tif (entry === undefined) {\n\t\t\t\t\tgate.release();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (entry.settled) {\n\t\t\t\t\tgate.release();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tawait admitEntry(entry, gate);\n\t\t\t}\n\t\t} finally {\n\t\t\tpumping = false;\n\t\t}\n\t}\n\n\tasync function admitEntry(entry: RuntimeTaskEntry, gate: SubagentAdmissionGateV1): Promise<void> {\n\t\tentry.status = \"admitted\";\n\t\tentry.gate = gate;\n\t\tbindParentSignal(entry);\n\t\tif (entry.cancelRequested) {\n\t\t\tsettleEntry(entry, entry.pendingTerminal ?? \"cancelled\", entry.pendingReasonCode, entry.cancelReason);\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tregistry.start(entry.taskId);\n\t\t} catch (error) {\n\t\t\t// registry 抛 AgentTaskError 不得让调度器崩溃:包装为调度终态 failed。\n\t\t\tsettleEntry(entry, \"failed\", undefined, errorText(error));\n\t\t\treturn;\n\t\t}\n\t\t// 延迟分配(§4.1):只有 admitted 才 adapter.create;queued 任务零 child session。\n\t\tlet host: AgentTaskHost;\n\t\ttry {\n\t\t\thost = await options.adapter.create({\n\t\t\t\tprompt: entry.request.prompt,\n\t\t\t\t...(entry.request.metadata === undefined ? {} : { metadata: entry.request.metadata }),\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tsettleEntry(entry, \"failed\", adapterReasonCode(error), errorText(error));\n\t\t\treturn;\n\t\t}\n\t\tif (entry.cancelRequested) {\n\t\t\t// 分配期间 fence 落下:host 立即进入 settle(dispose)路径,不启动 run。\n\t\t\tentry.host = host;\n\t\t\tsettleEntry(entry, entry.pendingTerminal ?? \"cancelled\", entry.pendingReasonCode, entry.cancelReason);\n\t\t\treturn;\n\t\t}\n\t\tentry.host = host;\n\t\t// 子会话 id 即刻捕获(D-060 S4):steer/resume 需要在运行期按 sessionId 定位任务。\n\t\tentry.recordSessionId = host.session.getAgentSessionId?.() ?? host.session.getSessionId();\n\t\t// 可核验事实即刻捕获(§5.6):create 成功后的会话面是权威事实源;settle 前读取。\n\t\tentry.facts = captureFacts(entry, host, options.logger);\n\t\tentry.status = \"running\";\n\t\t// 在途痕迹先行(§5.8):同步落库保证相对 settle 终态 persist 的写序 = 程序序。\n\t\tpersistStartedRecord(entry);\n\t\tstartRun(entry, host);\n\t}\n\n\t/** 父栅栏(§4.2):每次 admitted 读取当前信号(epoch 正确);已 aborted 立即按 fence 处理。 */\n\tfunction bindParentSignal(entry: RuntimeTaskEntry): void {\n\t\tconst signal = options.parentSignal?.();\n\t\tif (signal === undefined) return;\n\t\tif (signal.aborted) {\n\t\t\tentry.cancelRequested = true;\n\t\t\tentry.pendingTerminal = \"cancelled\";\n\t\t\tentry.pendingReasonCode = undefined;\n\t\t\tentry.cancelReason = \"parent signal aborted\";\n\t\t\treturn;\n\t\t}\n\t\tconst listener = (): void => {\n\t\t\t// 父栅栏级联(§5.2):cancel fence 全量子任务(queued 移除 + running 有界 drain)。\n\t\t\t// runtime 实例绑定单一 owner/parentSessionId,cancelAll 即该父的全部任务;\n\t\t\t// abort 之后以新 epoch 信号提交的任务不受本次级联影响。\n\t\t\tvoid cancelAllEntries(\"parent signal aborted\").catch(() => {\n\t\t\t\t// 无调用方的级联路径:persist 失败等收尾错误已在各任务 cancel()/drain() 的\n\t\t\t\t// reject 通道暴露,这里不能也不需要再抛。\n\t\t\t});\n\t\t};\n\t\tentry.parentSignal = signal;\n\t\tentry.parentListener = listener;\n\t\tsignal.addEventListener(\"abort\", listener, { once: true });\n\t}\n\n\t// ---------------------------------------------------------------------------\n\t// 公共 API\n\t// ---------------------------------------------------------------------------\n\n\tfunction handleOf(entry: RuntimeTaskEntry): SubagentTaskHandleV1 {\n\t\treturn {\n\t\t\tid: entry.taskId,\n\t\t\tstatus: () => entry.status,\n\t\t\tsignal: entry.controller.signal,\n\t\t\tresult: () => awaitTerminalRecord(entry),\n\t\t\tcancel: (reason?: string) => {\n\t\t\t\tcancelEntry(entry, reason);\n\t\t\t\treturn awaitTerminalVoid(entry);\n\t\t\t},\n\t\t\tdrain: (drainOptions?: { timeoutMs?: number }) => {\n\t\t\t\t// queued/admitted 尚无执行体可 drain:等待其自然终态;running 才挂有界预算。\n\t\t\t\tif (!entry.settled && entry.status === \"running\") {\n\t\t\t\t\tstartDrainDriver(entry, drainOptions?.timeoutMs ?? drainTimeoutMs);\n\t\t\t\t}\n\t\t\t\treturn awaitTerminalRecord(entry);\n\t\t\t},\n\t\t};\n\t}\n\n\tasync function awaitTerminalRecord(entry: RuntimeTaskEntry): Promise<SchedulerTaskRecordV1> {\n\t\tconst record = await entry.settleDeferred.promise;\n\t\tawait entry.persistDone.promise;\n\t\tif (entry.persistFailed) {\n\t\t\tthrow new Error(\"Subagent task result could not be persisted\", { cause: entry.persistError });\n\t\t}\n\t\treturn record;\n\t}\n\n\tasync function awaitTerminalVoid(entry: RuntimeTaskEntry): Promise<void> {\n\t\tawait entry.settleDeferred.promise;\n\t\tawait entry.persistDone.promise;\n\t\tif (entry.persistFailed) {\n\t\t\tthrow new Error(\"Subagent task result could not be persisted\", { cause: entry.persistError });\n\t\t}\n\t}\n\n\tasync function cancelAllEntries(reason: string | undefined): Promise<void> {\n\t\tconst pending = [...tasks.values()].filter((entry) => !entry.settled);\n\t\tfor (const entry of pending) cancelEntry(entry, reason);\n\t\tawait Promise.all(pending.map((entry) => awaitTerminalVoid(entry)));\n\t}\n\n\t// 装载期孤儿自愈(§5.8):一次性扫描(构造即装载点;results 缺席时为 no-op)。\n\thealCrashOrphans();\n\n\treturn {\n\t\tsubmit(request) {\n\t\t\tif (disposed) {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_invalid_request\",\n\t\t\t\t\t\"Subagent runtime has been disposed; submit is revoked\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof request !== \"object\" || request === null || typeof request.prompt !== \"string\") {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_invalid_request\",\n\t\t\t\t\t\"Subagent submit request requires a string prompt\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (utf8ByteLength(request.prompt) > maxPromptBytes) {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_prompt_too_large\",\n\t\t\t\t\t`Prompt of ${utf8ByteLength(request.prompt)} UTF-8 bytes exceeds the ${maxPromptBytes}-byte limit`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (request.metadata !== undefined) {\n\t\t\t\tlet serialized: string;\n\t\t\t\ttry {\n\t\t\t\t\tserialized = JSON.stringify(request.metadata);\n\t\t\t\t} catch {\n\t\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\t\"subagent_invalid_request\",\n\t\t\t\t\t\t\"Subagent submit metadata is not JSON-serializable\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (utf8ByteLength(serialized) > maxMetadataBytes) {\n\t\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\t\"subagent_metadata_too_large\",\n\t\t\t\t\t\t`Metadata of ${utf8ByteLength(serialized)} UTF-8 bytes exceeds the ${maxMetadataBytes}-byte limit`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (queue.length >= maxQueueDepth) {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_queue_full\",\n\t\t\t\t\t`Subagent queue depth ${queue.length} reached the ${maxQueueDepth}-entry limit`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tseq += 1;\n\t\t\tconst taskId = `subagent:${options.owner}:${seq}:${randomUUID().slice(0, 8)}`;\n\t\t\tconst deadlineAt = request.deadlineAt;\n\t\t\t// §4.3:deadline 优先写入 registry 投影(原生 checkDeadlines 可直映 timed_out)。\n\t\t\t// registry 对已过期 deadline fail fast(deadline_passed 类 AgentTaskError),此时\n\t\t\t// 降级为不带 deadline 的 createTask:过期任务由调度器 tick 结算,registry 投影\n\t\t\t// 走 fail + reason 的例外路径(projectTerminalToRegistry)。\n\t\t\ttry {\n\t\t\t\tregistry.createTask({\n\t\t\t\t\ttaskId,\n\t\t\t\t\tparentSessionId: options.parentSessionId,\n\t\t\t\t\t...(deadlineAt === undefined ? {} : { deadlineAt }),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tif (!(error instanceof AgentTaskError && error.code === \"deadline_passed\")) throw error;\n\t\t\t\tregistry.createTask({ taskId, parentSessionId: options.parentSessionId });\n\t\t\t}\n\t\t\tconst entry: RuntimeTaskEntry = {\n\t\t\t\ttaskId,\n\t\t\t\trequest,\n\t\t\t\tdeadlineAt,\n\t\t\t\tcontroller: new AbortController(),\n\t\t\t\tstatus: \"queued\",\n\t\t\t\tgate: undefined,\n\t\t\t\tsettled: false,\n\t\t\t\tcancelRequested: false,\n\t\t\t\tpendingTerminal: undefined,\n\t\t\t\tpendingReasonCode: undefined,\n\t\t\t\tcancelReason: undefined,\n\t\t\t\tdrainDriverStarted: false,\n\t\t\t\thost: undefined,\n\t\t\t\trecordSessionId: undefined,\n\t\t\t\tfacts: undefined,\n\t\t\t\trunSettled: createDeferred(),\n\t\t\t\tparentSignal: undefined,\n\t\t\t\tparentListener: undefined,\n\t\t\t\tsettleDeferred: createDeferred(),\n\t\t\t\tpersistDone: createDeferred(),\n\t\t\t\tpersistFailed: false,\n\t\t\t\tpersistError: undefined,\n\t\t\t};\n\t\t\ttasks.set(taskId, entry);\n\t\t\tqueue.push(entry);\n\t\t\tpump();\n\t\t\treturn Promise.resolve(handleOf(entry));\n\t\t},\n\t\tresult(taskId, requester) {\n\t\t\tconst cached = records.get(taskId);\n\t\t\tif (cached !== undefined) {\n\t\t\t\treturn Promise.resolve(matchesRequester(cached, requester) ? cached : undefined);\n\t\t\t}\n\t\t\tif (results === undefined) return Promise.resolve(undefined);\n\t\t\tlet loaded: DurableArtifactRecordV1 | undefined;\n\t\t\ttry {\n\t\t\t\tloaded = results.store.loadArtifact({ artifactId: `subagent-task:${taskId}` });\n\t\t\t} catch (error) {\n\t\t\t\t// 存储故障必须作为 **rejected promise** 冒泡:result 的签名是 Promise,\n\t\t\t\t// 同步抛出会让 `runtime.result(...).catch(...)` 直接崩在调用点。\n\t\t\t\treturn Promise.reject(error);\n\t\t\t}\n\t\t\tif (loaded === undefined) return Promise.resolve(undefined);\n\t\t\tconst record = parseSchedulerRecord(loaded.data);\n\t\t\tif (record === undefined || !matchesRequester(record, requester)) return Promise.resolve(undefined);\n\t\t\treturn Promise.resolve(record);\n\t\t},\n\t\tfindBySession(sessionId, requester) {\n\t\t\tif (requester.owner !== options.owner || requester.parentSessionId !== options.parentSessionId) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tfor (const entry of tasks.values()) {\n\t\t\t\tif (entry.recordSessionId !== sessionId) continue;\n\t\t\t\treturn { taskId: entry.taskId, settled: entry.settled };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\tasync steer(taskId, text, requester) {\n\t\t\tif (requester.owner !== options.owner || requester.parentSessionId !== options.parentSessionId) {\n\t\t\t\tthrow new SubagentRuntimeError(\"subagent_unknown_task\", `no task ${taskId} in this scheduler scope`);\n\t\t\t}\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (entry === undefined) {\n\t\t\t\tthrow new SubagentRuntimeError(\"subagent_unknown_task\", `no task ${taskId} in this scheduler scope`);\n\t\t\t}\n\t\t\tconst host = entry.settled ? undefined : entry.host;\n\t\t\tif (host === undefined) {\n\t\t\t\tthrow new SubagentRuntimeError(\"subagent_not_running\", `task ${taskId} is not running (queued or settled)`);\n\t\t\t}\n\t\t\tconst steerFn = host.session.steer;\n\t\t\tif (typeof steerFn !== \"function\") {\n\t\t\t\tthrow new SubagentRuntimeError(\n\t\t\t\t\t\"subagent_steer_unsupported\",\n\t\t\t\t\t`task ${taskId}'s host session exposes no steer`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait steerFn.call(host.session, text);\n\t\t},\n\t\tasync wait(taskId, timeoutMs, requester) {\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (\n\t\t\t\tentry === undefined ||\n\t\t\t\trequester.owner !== options.owner ||\n\t\t\t\trequester.parentSessionId !== options.parentSessionId\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif (entry.settled) return records.get(taskId);\n\t\t\tconst boundedTimeout = Math.max(0, Math.min(timeoutMs, 120_000));\n\t\t\tconst timer = sleepDeferred(boundedTimeout);\n\t\t\tconst settled = Promise.race([entry.settleDeferred.promise, timer.promise]);\n\t\t\tawait settled.catch(() => {});\n\t\t\ttimer.cancel();\n\t\t\t// settle 后记录必已落(settleEntry 先 records.set 再 resolve settleDeferred)。\n\t\t\treturn entry.settled ? records.get(taskId) : undefined;\n\t\t},\n\t\tpeek(taskId, requester) {\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (entry !== undefined) {\n\t\t\t\tif (requester.owner !== options.owner || requester.parentSessionId !== options.parentSessionId) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\treturn { settled: entry.settled, status: entry.status };\n\t\t\t}\n\t\t\t// 无内存条目但有记录:只可能是装载期崩溃孤儿自愈综合的终态(§5.8)——\n\t\t\t// 活跃条目从不删除,正常 settle 必有内存条目;此时按已结算可见(knownTask)。\n\t\t\tconst healed = records.get(taskId);\n\t\t\tif (healed === undefined || !matchesRequester(healed, requester)) return undefined;\n\t\t\treturn { settled: true, status: healed.status };\n\t\t},\n\t\tasync cancelById(taskId, requester, reason) {\n\t\t\tconst entry = tasks.get(taskId);\n\t\t\tif (\n\t\t\t\tentry === undefined ||\n\t\t\t\trequester.owner !== options.owner ||\n\t\t\t\trequester.parentSessionId !== options.parentSessionId\n\t\t\t) {\n\t\t\t\t// 作用域校验同 peek:越界与不存在同型 not_found(不泄漏他人任务存在性)。\n\t\t\t\t// 内存条目缺席时终态记录兜底 already_terminal;两者皆无才 not_found。\n\t\t\t\tconst cached = records.get(taskId);\n\t\t\t\tif (cached !== undefined && matchesRequester(cached, requester)) {\n\t\t\t\t\treturn { outcome: \"already_terminal\", status: cached.status };\n\t\t\t\t}\n\t\t\t\treturn { outcome: \"not_found\" };\n\t\t\t}\n\t\t\tif (entry.settled) return { outcome: \"already_terminal\", status: entry.status };\n\t\t\t// 复用 cancel() 的幂等取消 fence(不复制 drain 逻辑);等待方式对齐\n\t\t\t// cancelAllEntries(settle + persist 收尾,persist 失败沿用 reject 通道)。\n\t\t\tcancelEntry(entry, reason);\n\t\t\tawait awaitTerminalVoid(entry);\n\t\t\treturn { outcome: \"cancelled\", status: entry.status };\n\t\t},\n\t\tstats() {\n\t\t\tlet queued = 0;\n\t\t\tlet admitted = 0;\n\t\t\tlet running = 0;\n\t\t\tlet terminal = 0;\n\t\t\tfor (const entry of tasks.values()) {\n\t\t\t\tif (entry.status === \"queued\") queued += 1;\n\t\t\t\telse if (entry.status === \"admitted\") admitted += 1;\n\t\t\t\telse if (entry.status === \"running\") running += 1;\n\t\t\t\telse terminal += 1;\n\t\t\t}\n\t\t\treturn { queued, admitted, running, terminal };\n\t\t},\n\t\tasync cancelAll(reason?: string): Promise<void> {\n\t\t\tawait cancelAllEntries(reason);\n\t\t},\n\t\ttick() {\n\t\t\tconst now = clock();\n\t\t\t// §4.3:先推进注入 registry 的原生 deadline(running 任务原生直映 timed_out),\n\t\t\t// 再与调度器自身计算的过期任务取并集;原生先行保证后续调度终态投影不会把\n\t\t\t// 原生 timed_out 改写为 duplicate_terminal 失败。\n\t\t\tlet registryExpired: readonly string[] = [];\n\t\t\ttry {\n\t\t\t\tif (typeof registry.checkDeadlines === \"function\") registryExpired = registry.checkDeadlines();\n\t\t\t} catch {\n\t\t\t\t// 注入 registry 的原生推进失败不得让调度器崩溃:调度器自身计算仍会兜底。\n\t\t\t}\n\t\t\tconst expired = new Set<string>(registryExpired);\n\t\t\tfor (const entry of tasks.values()) {\n\t\t\t\tif (entry.deadlineAt !== undefined && !entry.settled && now >= entry.deadlineAt) {\n\t\t\t\t\texpired.add(entry.taskId);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst converted: string[] = [];\n\t\t\tfor (const id of expired) {\n\t\t\t\tconst entry = tasks.get(id);\n\t\t\t\tif (entry === undefined || entry.settled || entry.cancelRequested) continue;\n\t\t\t\tif (entry.status === \"queued\") {\n\t\t\t\t\t// queued 过期:直接出队终态 timed_out。\n\t\t\t\t\tconst index = queue.indexOf(entry);\n\t\t\t\t\tif (index >= 0) queue.splice(index, 1);\n\t\t\t\t\tsettleEntry(entry, \"timed_out\", \"deadline_passed\", undefined);\n\t\t\t\t} else {\n\t\t\t\t\t// running/admitted 过期:走 cancel fence + 有界 drain,终态 timed_out\n\t\t\t\t\t//(drain 自身再超时则按 drain_timeout 收敛)。\n\t\t\t\t\tdeadlineFence(entry);\n\t\t\t\t}\n\t\t\t\tconverted.push(id);\n\t\t\t}\n\t\t\t// 共享 globalAdmission 时,其他实例的槽位释放无法回调本实例;与其他显式推进\n\t\t\t// 一致,由 tick()/submit/settle 的 pump 重试准入,不引入隐藏轮询。\n\t\t\tpump();\n\t\t\treturn Object.freeze(converted);\n\t\t},\n\t\tasync dispose(): Promise<void> {\n\t\t\tdisposed = true;\n\t\t\tawait cancelAllEntries(\"subagent runtime disposed\");\n\t\t},\n\t};\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-agent-forge/plugin-subagent-delegate",
3
- "version": "0.88.14",
3
+ "version": "0.88.16",
4
4
  "description": "Subagent delegate capability plugin for Agent Forge (subagent_run delegation over the SubagentRuntime scheduler)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -46,11 +46,10 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "typebox": "1.3.27",
49
- "@ai-agent-forge/plugin-sdk": "^0.88.14"
49
+ "@ai-agent-forge/plugin-sdk": "^0.88.16"
50
50
  },
51
51
  "devDependencies": {
52
52
  "shx": "0.3.4",
53
- "vitest": "4.1.11",
54
- "@ai-agent-forge/agent-forge": "^0.88.14"
53
+ "vitest": "4.1.11"
55
54
  }
56
55
  }
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "id": "agent-forge.plugin.subagent-delegate",
3
- "version": "0.88.14",
3
+ "version": "0.88.16",
4
4
  "apiVersion": "1-draft",
5
5
  "entry": "./dist/entry.js",
6
6
  "hostVersion": ">=0.84.4",
@@ -16,24 +16,26 @@
16
16
  ],
17
17
  "provides": [
18
18
  {
19
- "id": "subagent-delegate.agent-task",
19
+ "id": "agent-forge.agent-task-scheduler",
20
20
  "version": 1,
21
21
  "kind": "service"
22
22
  }
23
23
  ],
24
24
  "config": {
25
- "maxConcurrentSubagents": 8,
25
+ "maxConcurrentSubagents": 12,
26
26
  "maxQueueDepth": 200,
27
27
  "maxPromptBytes": 65536,
28
28
  "maxMetadataBytes": 16384,
29
29
  "maxResultBytes": 524288,
30
30
  "maxMessages": 2000,
31
31
  "drainTimeoutMs": 30000,
32
- "maxRetainedRecords": 256,
33
- "maxTasksPerCall": 4,
34
- "taskTimeoutMs": 300000,
32
+ "maxRetainedRecords": 512,
33
+ "maxTasksPerCall": 8,
34
+ "taskTimeoutMs": 600000,
35
+ "maxTotalPerParent": 500,
36
+ "maxNestedDepth": 2,
35
37
  "runnerMaxProcesses": 0,
36
- "runnerMaxSessionsPerRunner": 8,
38
+ "runnerMaxSessionsPerRunner": 12,
37
39
  "runnerIdleTimeoutMs": 300000,
38
40
  "runnerSweepIntervalMs": 60000,
39
41
  "runnerEntryAuto": false