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

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":"delegate.js","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * First-party builtin subagent-delegate capability: the first production\n * orchestrator over the plugin-level `SubagentRuntime` (D-044).\n *\n * The capability consumes only the public face — `session`, `agents`,\n * `sessionAbortSignal` and `tools` — and owns exactly one scheduler instance\n * per plugin load. It adds no scheduling policy of its own: queue, admission,\n * budgets, terminal states and the parent cancel fence all stay in the\n * scheduler; this module is the model-facing `subagent_run` tool plus a bounded\n * result projection (status / reason codes / message counts / short summary).\n * Raw child messages never enter the tool result (context budget spec).\n *\n * The scheduler's deadline fence is tick-driven by design (no hidden timers in\n * the scheduler; `tick()` is the only enforcement point). This consumer owns\n * the production wall-clock driver: a lazy ticker runs at\n * `BACKGROUND_DEADLINE_TICK_INTERVAL_MS` while background tasks with pending\n * deadlines are in flight and only calls `runtime.tick()`, so `subagent_run`\n * can expose `deadlineMs` for background submissions (default\n * `DEFAULT_BACKGROUND_TASK_DEADLINE_MS`, 60 minutes). Wait bounds are\n * `taskTimeoutMs` (drain) and the host's `limits.drainTimeoutMs` inside the\n * scheduler.\n *\n * 迁自宿主 `src/capabilities/subagent-delegate.ts`(D-075 S4 第三批拆包)。除 import\n * 来源外保持宿主行为:公共契约(agent-task 键/档案、通信接线、血缘读取、快照)改自\n * plugin-sdk;信箱类型/错误改自 @agent-forge/protocol;调度器与 runner 模块改包内\n * 相对路径。三处语义收敛见 `SubagentDelegateCapabilityOptions` 与 createCapability\n * 内的迁移注记(agentDir 单源、runnerEntryAuto 驱动自动池化、lineage 深度经 SDK 读取)。\n */\nimport { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n\tAGENT_TASK_CHILD_PROFILE_KEY,\n\tAGENT_TASK_PARENT_SESSION_KEY,\n\tAGENT_TASK_PARENT_TRACE_KEY,\n\tAGENT_TASK_RESUME_SESSION_KEY,\n\ttype AgentTaskAdapter,\n\ttype AgentTaskChildProfileV1,\n\ttype CapabilityAPI,\n\tcreateDisposableRegistration,\n\ttype DisposableRegistration,\n\ttype DurableServiceV1,\n\tdetachedSessionSnapshot,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype LoggerAPI,\n\tparseAgentTaskChildProfileV1,\n\ttype SessionAPI,\n\ttype SessionEntryView,\n\ttype SubagentCommunicationWiringV1,\n} from \"@agent-forge/plugin-sdk\";\nimport { readAgentSessionLineage } from \"@agent-forge/plugin-sdk/session-lineage\";\nimport {\n\tSUBAGENT_MAILBOX_MAX_MESSAGE_BYTES,\n\tSubagentMailboxErrorV1,\n\tsubscribeTaskProgressV1,\n} from \"@agent-forge/protocol/subagent\";\nimport { type TSchema, Type } from \"typebox\";\n// 出厂默认值单一定义源(含 manifest config 与 fallback):数值不在此处复制。\nimport {\n\tDEFAULT_SUBAGENT_LIMITS,\n\tDEFAULT_SUBAGENT_MAX_NESTED_DEPTH,\n\tDEFAULT_SUBAGENT_MAX_TASKS_PER_CALL,\n\tDEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT,\n\tDEFAULT_SUBAGENT_TASK_TIMEOUT_MS,\n} from \"./defaults.ts\";\nimport { createSubagentRunRenderCall, subagentRunResultRenderer } from \"./render.ts\";\nimport {\n\tcreatePooledAgentTaskAdapterV1,\n\ttype SubagentRunnerPoolV1,\n\ttype SubagentRunnerSpawnHandleV1,\n} from \"./runner-pool.ts\";\nimport { createNodeSubagentRunnerSpawnerV1 } from \"./runner-spawn.ts\";\nimport { createAgentTaskSchedulerCapabilityProviderV1 } from \"./scheduler-capability.ts\";\nimport { resolveSelfInvocationV1, type SelfInvocationV1 } from \"./self-invocation.ts\";\nimport { createAgentTaskApiAdapterV1 } from \"./shared-adapter.ts\";\nimport {\n\tcreateSubagentRuntime,\n\ttype SchedulerTaskRecordV1,\n\tSubagentRuntimeError,\n\ttype SubagentRuntimeLimitsV1,\n\ttype SubagentRuntimeStatus,\n\ttype SubagentRuntimeV1,\n\ttype SubagentTaskHandleV1,\n} from \"./subagent-runtime.ts\";\n\nexport const capabilityManifest = {\n\tid: \"agent-forge.builtin.subagent-delegate\",\n\tversion: \"0.1.0\",\n\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t// `agents` 是可选能力:runner 的叶子会话刻意关闭 agent tasks(enableAgentTasks: false),\n\t// 此时本能力\"不适用\"而非\"加载失败\",缺失时静默不注册工具,避免每个叶子会话刷拒绝警告。\n\trequiredCapabilities: [\"session\", \"tools\"],\n\toptionalCapabilities: [\"agents\"],\n\tprovides: [{ id: \"agent-forge.agent-task-scheduler\", version: 1, kind: \"service\" }],\n\t/**\n\t * 用户可配置默认值(D-044 §6 四层归属的 Profile/capability 配置层):\n\t * 经 agent-dir 配置通道 `<agentDir>/capabilities/builtin.subagent-delegate.json`\n\t * 浅合并覆盖;宿主显式 options 优先级最高;非法值在装载时 fail fast。\n\t */\n\tconfig: {\n\t\t...DEFAULT_SUBAGENT_LIMITS,\n\t\tmaxTasksPerCall: DEFAULT_SUBAGENT_MAX_TASKS_PER_CALL,\n\t\ttaskTimeoutMs: DEFAULT_SUBAGENT_TASK_TIMEOUT_MS,\n\t\tmaxTotalPerParent: DEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT,\n\t\tmaxNestedDepth: DEFAULT_SUBAGENT_MAX_NESTED_DEPTH,\n\t\t// pooled 模式(D-045):0 = 关闭(默认,shared 形态,零额外进程)。\n\t\t// 每 runner 12 会话与默认并发 12 对齐:runnerMaxProcesses=1 即可覆盖默认并发。\n\t\trunnerMaxProcesses: 0,\n\t\trunnerMaxSessionsPerRunner: 12,\n\t\trunnerIdleTimeoutMs: 300_000,\n\t\trunnerSweepIntervalMs: 60_000,\n\t\trunnerEntryAuto: false,\n\t},\n} as const;\n\nexport interface SubagentDelegateCapabilityOptions {\n\t/** 宿主可注入调度器 adapter(如 pooled runner adapter);优先级高于配置驱动的 pooled 装配与共享模式。 */\n\tadapter?: AgentTaskAdapter;\n\tlimits?: SubagentRuntimeLimitsV1;\n\t/** 单次工具调用的并行任务上限(默认 8)与单任务 drain 超时(默认 600000ms)。 */\n\tmaxTasksPerCall?: number;\n\ttaskTimeoutMs?: number;\n\t/**\n\t * 测试/宿主注入的 runner spawn 工厂(优先级高于 `runnerEntryPath` 配置):\n\t * 生产默认由 `createNodeSubagentRunnerSpawnerV1` 派生真实进程,测试注入进程内 fake。\n\t */\n\trunnerSpawner?: () => SubagentRunnerSpawnHandleV1;\n\t/**\n\t * 角色目录与方案关联(角色只来自磁盘 `<agentDir>/roles/<id>.json`,见\n\t * {@link resolveSubagentRoleCatalog})。库面调用方(测试/第三方)显式注入;\n\t * 插件 entry 由 `api.host.roleAssociations` + `api.host.agentDir` 组装。\n\t * 未提供时该会话**不暴露任何角色**(不是\"回退到内置\"——引擎没有内置角色)。\n\t */\n\troles?: { readonly agentDir: string; readonly associations: readonly string[] };\n\t/**\n\t * 通信面宿主接线(D-060 S4):父装配域注入 `drainEscalations`(取子→父上抛),\n\t * 子装配域注入 `postEscalate`/`sendSibling`/`drainInbox`(发上抛/发兄弟/取收件箱,\n\t * 身份与血缘都由宿主绑定校验)。未接线时通信工具一律不注册。\n\t */\n\tcommunicationWiring?: SubagentCommunicationWiringV1;\n\t/**\n\t * agentDir(承载退役切片 2):嵌套深度硬限沿 S2 落盘头行回溯血缘,需要 agentDir\n\t * 定位会话目录。库面显式注入优先;缺省回落到 `api.host.agentDir`(插件 entry 的\n\t * 单源通道,D-075 S4 第三批收敛——原 `roles.agentDir` 双通道已退役);两者都不在\n\t * 时深度门不生效(配额仍在)。\n\t */\n\tagentDir?: string;\n\t/**\n\t * 后台委派结算摘要 sink(D-060 S6):`background` 提交的任务每结算一个,宿主收到\n\t * 一条有界 JSON 行(taskId/sessionId/status/reasonCode),由宿主注入父的下一次\n\t * 模型轮次。未接线时后台照常可跑,只是没有推送感知。\n\t */\n\tbackgroundDigestSink?: (line: string) => void;\n\t/**\n\t * 委派提交时刻的回合 correlationId(第 3 期第二批):background 委派的提交动作\n\t * 发生在父回合工具阶段、此时有值。getter 缺席或返回 undefined 时不写键,行为回退。\n\t */\n\tgetTurnCorrelationId?: () => string | undefined;\n\t/**\n\t * Durable 终态持久化(durable replay assembly,2026-10-13 用户裁决):宿主注入\n\t * durable 设施(store + writerId,写者租约生命周期由宿主持有),调度器按 `subagent-task:<taskId>` 落库终态\n\t * 信封,`subagent_task`(type `result`)跨进程重启后仍可读回(日志在 `<agentDir>/durable/`,\n\t * 独立于 sessions 树,主会话删除/清理不波及)。未注入 = 优雅降级为现状(内存\n\t * 记录 + transcript 落盘,`result()` 回 undefined);持久化失败不吞终态——错误经\n\t * drain()/dispose() 的 reject 通道暴露(两处调用点都有 catch 臂)。\n\t */\n\tresults?: { readonly store: DurableServiceV1; readonly writerId: string };\n}\n\n// 通信面的宿主接线 `SubagentCommunicationWiringV1`(含信箱消息形状)是 plugin-sdk\n// 公共契约(D-075 S4 第三批迁入 SDK),本包经上方 import 消费并在 index 再导出。\n// 通信面配置键已移除(D-060 裁决 15,2026-10-03):resume/escalate/sibling 曾是\n// 出厂默认全开的显式开关(裁决 13/14 翻转后仅剩\"显式 false 关闭\"形态),随开关\n// 形态一并退役——功能基本面只有\"有\"与\"没有\",配置键出现即装载期失败。\n\n/** 把宿主/调度器/信箱的结构化错误映射为工具面的同码委托错误(保留原始 message)。 */\nfunction mapCommunicationError(error: unknown): never {\n\tif (error instanceof SubagentMailboxErrorV1) {\n\t\tthrow new SubagentDelegateError(error.code, error.message);\n\t}\n\tif (\n\t\terror instanceof SubagentRuntimeError &&\n\t\t(error.code === \"subagent_unknown_task\" ||\n\t\t\terror.code === \"subagent_not_running\" ||\n\t\t\terror.code === \"subagent_steer_unsupported\")\n\t) {\n\t\tthrow new SubagentDelegateError(error.code, error.message);\n\t}\n\tthrow error as Error;\n}\n\n/** 结构化错误码:调用形状错误、批上限错误与未知角色分开表达,便于调用方分支。 */\nexport type SubagentDelegateErrorCodesV1 =\n\t| \"subagent_invalid_input\"\n\t| \"subagent_batch_too_large\"\n\t| \"subagent_unknown_role\"\n\t/** 宿主未落地或无法自证档案收窄:宁可失败,也不让\"只读评审者\"变成一句空话。 */\n\t| \"subagent_profile_not_applied\"\n\t// S4 通信面:目标定位、运行态与池化边界分开表达。\n\t| \"subagent_unknown_task\"\n\t| \"subagent_unknown_session\"\n\t| \"subagent_not_running\"\n\t| \"subagent_steer_unsupported\"\n\t| \"subagent_session_busy\"\n\t| \"subagent_message_too_large\"\n\t| \"subagent_escalate_quota\"\n\t| \"subagent_inbox_quota\"\n\t/** 嵌套委派深度超限(提交侧执行;与 S5 shared 侧同一语义)。 */\n\t| \"subagent_depth_exceeded\"\n\t/** 本会话累计创建的子代理达到每父级总量上限(提交侧执行)。 */\n\t| \"subagent_child_quota\"\n\t/** 会话角色与当前可见磁盘角色撞名:磁盘角色是用户资产,会话不隐式改写其含义(改用其他 id)。 */\n\t| \"subagent_role_conflict\"\n\t/** 会话角色超过既有硬上限(16 个 / 菜单 ≤2000 字符,磁盘+会话合并计算):拒绝注册并提示精简。 */\n\t| \"subagent_role_quota\"\n\t/** submit 同步拒绝且无结构化 code 时的本地兜底码(与投影 reasonCode 同名)。 */\n\t| \"subagent_submit_rejected\";\n\nexport class SubagentDelegateError extends Error {\n\treadonly code: SubagentDelegateErrorCodesV1;\n\n\tconstructor(code: SubagentDelegateErrorCodesV1, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SubagentDelegateError\";\n\t\tthis.code = code;\n\t}\n}\n\n/** 终态投影:调度器权威状态词汇 + 本地 submit 拒绝(\"rejected\")。 */\nexport type SubagentDelegateTaskStatusV1 = SubagentRuntimeStatus | \"rejected\";\n\nexport interface SubagentDelegateTaskProjectionV1 {\n\t/** 调度器任务 id;submit 同步抛错的 rejected 条目尚未生成 id,回空串。 */\n\treadonly taskId: string;\n\treadonly status: SubagentDelegateTaskStatusV1;\n\t/**\n\t * 结构化原因码(如 `subagent_queue_full`);无则省略。调度器/适配器抛出的错误\n\t * 无结构化 code 时用本地兜底码 `subagent_submit_rejected`。\n\t */\n\treadonly reasonCode?: string;\n\t/** 失败/取消的原始原因文本。 */\n\treadonly reason?: string;\n\t/** 调度器 settle 截断过消息快照时为 true;未截断时省略。 */\n\treadonly truncated?: true;\n\t/** 有界消息快照的条数(rejected/failed 无记录时为 0)。 */\n\treadonly messageCount: number;\n\t/** 子会话自身的 sessionId(D-060 S1):可按它在会话目录里定位这份 transcript。 */\n\treadonly sessionId?: string;\n\t/** 最后一条 assistant 文本的前 200 字符;找不到则省略。 */\n\treadonly summary?: string;\n\t/**\n\t * 子会话 escalate 上抛的有界消息(D-060 S4):落在父侧下一次工具结果里(这里或\n\t * `subagent_task` type `result`),父回合不被打断;无积压时省略。\n\t */\n\treadonly escalations?: readonly string[];\n\t/**\n\t * 任务层结果(任务级拒绝):子代理以 `subagent_message`(type `refuse`)声明不做该\n\t * 任务时随自然成功结算附 `taskOutcome: \"refused\"`——该拒绝是终局声明;无则省略。\n\t */\n\treadonly taskOutcome?: \"refused\";\n\t/** 拒绝原因;仅与 taskOutcome 同时出现。 */\n\treadonly refusalReason?: string;\n\t/**\n\t * 该子会话相关的兄弟消息流量摘录(D-060 裁决 14 父可见性):from/to 命中的最新\n\t * 至多 8 条,每条 text 截 256 utf-8 字节;无流量时省略。审计日志在信箱侧,drain\n\t * 后摘录仍可回读(历史摘录以信箱日志滚动窗口为界)。\n\t */\n\treadonly siblingTraffic?: readonly { from: string; to: string; text: string }[];\n}\n\nexport interface SubagentDelegateResultV1 {\n\treadonly tasks: readonly SubagentDelegateTaskProjectionV1[];\n}\n\n/** 后台委派票据(D-060 S6):提交即返回,结果稍后经 subagent_task(type `result`)/ 摘要注入获得。 */\nexport interface SubagentDelegateBackgroundTaskV1 {\n\treadonly taskId: string;\n}\n\nexport interface SubagentDelegateBackgroundResultV1 {\n\treadonly background: true;\n\treadonly tasks: readonly SubagentDelegateBackgroundTaskV1[];\n}\n\n/**\n * `subagent_task`(type `cancel`)的返回形状(S4 补充裁决,2026-10-01):调度器 `cancelById` 的\n * 三态 outcome + 寻址 taskId;cancelled / already_terminal 附调度器最终状态,\n * not_found 不带 status(不抛异常——未知 taskId 是可表达的正常结果)。\n */\nexport interface SubagentCancelResultV1 {\n\treadonly outcome: \"cancelled\" | \"already_terminal\" | \"not_found\";\n\treadonly taskId: string;\n\t/** 调度器权威状态;not_found 时省略。 */\n\treadonly status?: SubagentRuntimeStatus;\n}\n\n/**\n * 角色(persona):子代理侧身份,主代理按名调用。\n *\n * **定义只在磁盘上**(与 skill/MCP/插件同构,不搞内置特权):\n * - 共享目录 `<agentDir>/roles/<id>.json` → `{ \"description\": …, \"instructions\": … }`;\n * - 可见性由**当前方案**决定:只有 `suite.associations.roles` 关联到的 id 才出现在\n * `subagent_run` 的菜单里;没关联的角色对主代理不可见(不报错)。\n * - 工厂只做**种子落盘**({@link seedFactoryRoleCatalog},首次缺文件时写入 explore/reviewer/\n * design-proposer/visual-reviewer 四个普通文件,可改可删),默认方案关联它们,因此开箱即用;\n * 引擎从不回退到编译内的定义。\n *\n * 角色今天**确定性地决定子任务的任务框定**(instructions 组装进送交子会话的提示词),\n * 但**不改变子会话的模型与工具面**——后者需要\"子任务档案\"这一公共契约(见\n * docs/design/子代理运行时设计.md §13)。因此角色文件里出现 `model`/`tools`/`readonly`\n * 等键时在装载期直接报错,而不是静默忽略让用户以为\"只读评审者不会写文件\"。\n */\nexport interface SubagentDelegateRoleV1 {\n\treadonly id: string;\n\t/** 给主代理看的一句话说明(工具描述里列出),不送进子会话提示词。 */\n\treadonly description: string;\n\t/** 送进子会话提示词的角色指令(系统提示词由子会话继承父会话,不在这里重复)。 */\n\treadonly instructions: string;\n\t/**\n\t * 子任务档案(收窄语义,公共契约 AgentTaskChildProfileV1):模型 / 思考级别 /\n\t * 工具面 / 会话模式 / 追加系统提示词。子会话创建时由宿主落地,**创建后核验**;\n\t * 宿主不落地或无法核验时该条目失败(`subagent_profile_not_applied`),绝不静默忽略。\n\t * shared 与 pooled 两种形态都落地全部字段——见设计文档 §6。\n\t */\n\treadonly profile?: AgentTaskChildProfileV1;\n\t/**\n\t * 子读父的有界投影(D-060 §4,默认关闭):开启时把父会话的**目标**(最后一条用户文本,\n\t * ≤2KB)、父 sessionId 与父工具面名单拼进子任务提示词。只给目标不给历史——子会话拿不到\n\t * 父上下文全文。\n\t */\n\treadonly parentView?: boolean;\n}\n\n/**\n * 出厂种子(仅用于首次落盘,不是运行期定义):默认方案关联 explore / reviewer /\n * design-proposer / visual-reviewer,因此新装环境开箱即用;用户改文件即生效,删文件则该关联\n * 成为 dangling 诊断。design-proposer / visual-reviewer 共用形式、内容与情境之间恰当而有表现力的关系\n * 这一工作定义,并以六项项目归纳方法组织判断;根据意图、约束与可观察效果取舍。提案角色据此提出方向\n * 与可检查表现,评审角色据此检查实际呈现并按证据判断。两者职责与指令各自落实,不要求逐字共享失败模式\n * 或裁决顺序。角色仍为 readonly + 只读工具档案,种子仅用于首次落盘;结构上不能写代码、不能改文件,\n * 用户改文件即生效。\n */\nconst FACTORY_ROLE_SEEDS: readonly SubagentDelegateRoleV1[] = Object.freeze([\n\tObject.freeze({\n\t\tid: \"explore\",\n\t\tdescription: \"Read-only explorer: locates code and reports file:line evidence\",\n\t\tinstructions:\n\t\t\t\"You are an exploration subagent. Find the relevant code, configuration or documentation and report concrete \" +\n\t\t\t\"evidence as file:line references with a one-line note per hit. Do not modify any file and do not run commands \" +\n\t\t\t\"with side effects. Answer with findings first, then the smallest set of next steps.\",\n\t}),\n\tObject.freeze({\n\t\tid: \"reviewer\",\n\t\tdescription: \"Code reviewer: reads a diff or change set and reports findings and risks\",\n\t\tinstructions:\n\t\t\t\"You are a code-review subagent. Read the change set you are given (diff, files or description) and report \" +\n\t\t\t\"findings ordered by severity: correctness first, then contract/regression risk, then clarity. For each finding \" +\n\t\t\t\"give the location, why it is wrong or risky, and the proper fix at the root cause, not a symptom patch. Do not \" +\n\t\t\t\"modify files. State explicitly when you found nothing in a category instead of inventing issues.\",\n\t}),\n\tObject.freeze({\n\t\tid: \"design-proposer\",\n\t\tdescription: \"设计提案者:只读产出视觉方向提案与验收清单;不写实现代码,不自我判定观感\",\n\t\tinstructions: `你是设计提案者,负责提出视觉方向;功能正确性由编码角色负责,最终视觉判断由视觉审核者负责。你不写实现代码、不修改文件,也不以自我观感代替评审。\n\n【输入】从用户需求、内容、受众、媒介与约束中提炼表达目的和文化气质。缺少信息时标为待确认或明示假设,不把个人偏好设为所有用户的默认。\n\n【工作方法】美是形式、内容与情境之间恰当而有表现力的关系。先表达意图,再组织关系,结合情境取舍,最后观察效果。以下六原理是可选用的方法,不要求使用中国符号、固定风格、特定色相或质感:以意统形(表达意图指导形式);虚实相生(显露与保留协同,必需信息不能隐藏);疏密有致(密处有组织、疏处有作用,不强求低密度);气韵贯通(用节奏、呼应、动势维系整体气质);变化有度(按目的安排统一与变化,有意的微差可以形成层次);因境制宜(根据需求、受众、内容、媒介与约束取舍)。有理由不等于效果成立,形式须在提案中说明如何服务意图。不要承诺设计方法会在所有情境稳定产出美。\n\n【提案结构】按六节组织提案,写清表达意图、元素关系、情境取舍和可检查的表现:\n1. 风格宣言:用 1-2 个词命名方向,再用 3-5 句话说明表达目的、受众感受与文化气质,以及空间形式、色彩材质、构图节奏如何共同承载它。\n2. 配色角色表:按背景、主色、强调色、中性阶(语义色按需)说明角色、作用及相对明度与饱和度。色彩和质感依表达意图、内容与约束决定;不预设色相或数量。需要色相变化时说明它带来的表达或语义作用,给出的色值注明仅示意。\n3. 布局与层级策略:说明主要信息及视觉入口如何对应表达目的;允许一个或多个焦点,按内容关系组织层级。可组合尺寸、字重、颜色、位置、隔离等信号;分组可使用邻近、间距或容器,并说明关系是否清晰。间距与节奏服务整体组织,不要求固定阶梯。\n4. 文案密度预算:说明信息取舍、各区域的信息量和密度如何服务内容与阅读;需要删减、保留或集中信息时说明理由,不默认砍字或追求低密度。\n5. 验收清单:交给视觉审核者的可检查清单,保留层级、焦点、对齐、间距、密度、对比、一致性、平衡、色彩秩序、动线、收口 11 个维度;按本次意图与约束写成可核对的表现,不把偏好写成普遍要求。\n6. 明确不做项:列出本轮不采用的做法及其理由;加、减或保留元素都根据目的与效果取舍。\n\n【判断纪律】这些是观察线索,不是自动判错规则:平、挤、花、歪、噪、脏以及层级、密度、色彩、对齐等仅在具体元素和关系影响表达目的、必要信息可读性或用户约束时指明。颜色、材质、容器、留白、疏密和构图不因风格偏好本身被排除。有理由不等于效果成立,实际呈现仍须支持意图;表达意图不能豁免用户硬约束或必要信息的可读性。`,\n\t\tprofile: Object.freeze({ version: 1, tools: Object.freeze([\"read\"]), mode: \"readonly\" }),\n\t}),\n\tObject.freeze({\n\t\tid: \"visual-reviewer\",\n\t\tdescription: \"视觉审核者:只读检查实际可观察的视觉呈现,按证据支持的维度判断;不审代码功能,不修改文件\",\n\t\tinstructions: `你是视觉审核者,只读检查任务中实际可观察的视觉呈现。美是形式、内容与情境之间恰当而有表现力的关系;它不是科学评分或跨文化唯一答案。根据用户需求、内容、受众、媒介与约束理解表达目的和文化气质,不把个人偏好设为所有用户的默认;证据支持什么判断什么。不审代码功能正确性,不修改任何文件。\n\n【方法】先表达意图,再组织关系,结合情境取舍,最后观察效果。以下六原理是可按意图选用的组织方法,不要求使用中国符号、固定风格、特定色相或质感:以意统形(表达意图指导形式);虚实相生(显露与保留协同,必需信息不能隐藏);疏密有致(密处有组织、疏处有作用,不强求低密度);气韵贯通(节奏、呼应、动势维系整体气质);变化有度(统一与变化依目的取舍,有意的微差可形成层次);因境制宜(按用户需求、内容、受众、媒介与约束取舍)。对照已有意图和约束检查这些关系如何体现在呈现中;实际效果是否支持表达意图,应由可观察证据判断,有理由不等于效果成立。\n\n【六原理的审核动作】对照已有意图与用户约束检查:以意统形,观察形式是否支持表达目的;虚实相生,观察显露与保留是否协作、必要信息是否可见;疏密有致,观察信息密度和留白是否共同组织内容;气韵贯通,观察节奏、呼应、动势是否通过具体元素关系维系气质;变化有度,观察统一与变化是否服务目的,有意的微差可形成层次;因境制宜,观察选择是否适合需求、受众、内容、媒介与约束。\n\n【输入】待审视觉呈现及任务背景;如有设计提案或验收清单,一并作为本次对照。只评审实际读到并能观察的内容。多份同类产物逐份检查,并比较其一致性(如边距、色彩、字级及组件待遇)。证据缺失、无法访问或无法解读时,如实说明具体原因;没有任何可观察证据时,总评为 Unverified,并报告\"无法执行视觉评审\"。\n\n【观察动线(按序执行,先整体后局部)】\n1. 意图与入口:先回看表达目的与内容重点,再观察一个或多个视觉入口是否帮助理解;不能仅因焦点不唯一判错。\n2. 关系观察:略去局部细节后,观察主要关系、层次、疏密与节奏是否支持表达意图;不把均匀、低密度或某种构图单独判错。\n3. 灰度观察:需要判断色彩是否承担层级作用时,可借灰度观察层次;它是辅助证据,不替代完整呈现,也不以结果单独判错。\n4. 维度走查:根据任务目标与验收要求检查必要维度。\n5. 细节观察:检查对齐、间距、边缘与细节是否符合本次媒介、意图和约束。\n\n【评审维度】按本次意图与约束解释:层级(信息关系是否支持理解与目的);焦点(视觉入口是否对应重点,允许多个);对齐(对齐关系是否有意且连贯);间距(疏密是否组织内容关系与节奏);密度(信息量是否适合目的、内容与阅读);对比(差异是否服务表达且不相互冲突);一致性(重复与变化是否形成有意关系);平衡(视觉重量是否支持表达);色彩秩序(色彩角色、关系及其表达作用,不按固定色数判错);动线(视线关系是否帮助理解);收口(细节是否影响本次表达或约束)。\n\n容器可以服务层级、语义、交互、情绪、气质或文化表达;不能仅因邻近也能分组就判错。观察容器是否确实支持本次表达目的;只有缺少可观察作用且造成额外视觉负担,或同类容器待遇无理由不一致时,才指认问题。这些是观察线索,不是自动判错规则:诸如平、挤、花、歪、噪、脏,只有在具体元素与关系损害表达意图、必要信息可读性或用户约束时才报告。效果可以服务功能、理解、情感、气质或文化意味,不限于层级与语义。\n\n六原理的运用本身不是验收项。主观改进建议不能冒充违规;“缺少气韵”等抽象评价,必须指出具体元素、关系与目标证据。艺术意图不能豁免必要信息可读性或用户硬约束。必要信息不可读或违反用户明确约束时,按实际证据判定问题。\n\n【证据与评审范围】先按任务目标与已有验收清单确定必要检查的维度和范围。必要项不能因证据缺失改标不适用;只有任务目标本身不要求的维度才可标不适用并说明理由。必要信息缺失时对应项为 Unverified;结论只覆盖实际检查范围,不能外推为完整视觉已通过。已发现问题但其他必要项仍未知时,总评为 fail,并保留未知项。\n\n【输出协议】总结论条件:已证实违反评审要求的问题 → fail;无已知违反但必要检查证据不足 → Unverified(无法确认);必要检查完成且无违反 → pass。逐条列出已证实问题,每条包含:维度、位置(哪个元素)、为什么(违反了什么)、最小改法。必要时列出 Unverified 项;结尾列出本次已检查的维度。禁止虚构像素测量。pass 仅说明本次要求范围通过,不代表普遍的美或保证用户喜欢。`,\n\t\tprofile: Object.freeze({ version: 1, tools: Object.freeze([\"read\"]), mode: \"readonly\" }),\n\t}),\n]);\n\nconst ROLE_ID_PATTERN = /^[a-z0-9][a-z0-9_-]{0,31}$/;\nconst ROLE_DESCRIPTION_CHARS = 200;\nconst ROLE_INSTRUCTIONS_CHARS = 8000;\n/** 角色数量与\"菜单\"总长上限:菜单是主代理工具描述的一部分,必须有界。 */\nconst ROLE_COUNT_LIMIT = 16;\nconst ROLE_MENU_CHARS = 2000;\nconst ROLE_KNOWN_KEYS = [\n\t\"description\",\n\t\"instructions\",\n\t\"model\",\n\t\"thinkingLevel\",\n\t\"tools\",\n\t\"writeScope\",\n\t\"mode\",\n\t\"webSearch\",\n\t\"systemPromptAppend\",\n\t\"parentView\",\n] as const;\n/** 用户角色目录(agentDir 下),与 `<agentDir>/capabilities/` 并列。 */\nconst ROLE_CATALOG_DIR = \"roles\";\n/** 解析结果:暴露集(按方案关联过滤后)+ 可诊断的异常,装载与诊断共用同一实现。 */\nexport interface SubagentRoleCatalogResolutionV1 {\n\t/** 当前方案可见的角色(内置定义 ∪ 用户目录,再按 associations 过滤)。 */\n\treadonly roles: ReadonlyMap<string, SubagentDelegateRoleV1>;\n\t/** 被方案关联、但内置与用户目录都没有定义的角色 id(诊断,不阻断)。 */\n\treadonly dangling: readonly string[];\n\t/** 未被关联、但用户文件非法的角色文件:只在被关联时才致命,这里记录用于诊断。 */\n\treadonly brokenUnassociated: readonly string[];\n}\n\nfunction validateRoleDefinition(id: string, value: unknown, origin: string): SubagentDelegateRoleV1 | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`${origin} must be an object with description and instructions`);\n\t}\n\tconst fields = value as Record<string, unknown>;\n\tfor (const key of Object.keys(fields)) {\n\t\tif (!(ROLE_KNOWN_KEYS as readonly string[]).includes(key)) {\n\t\t\tthrow new Error(`${origin}.${key} is not a recognized role field (known: ${ROLE_KNOWN_KEYS.join(\", \")})`);\n\t\t}\n\t}\n\tconst description = fields.description;\n\tif (typeof description !== \"string\" || description.trim() === \"\" || description.length > ROLE_DESCRIPTION_CHARS) {\n\t\tthrow new Error(\n\t\t\t`${origin}.description must be a non-empty string of at most ${ROLE_DESCRIPTION_CHARS} chars, got ` +\n\t\t\t\tJSON.stringify(description),\n\t\t);\n\t}\n\tconst instructions = fields.instructions;\n\tif (\n\t\ttypeof instructions !== \"string\" ||\n\t\tinstructions.trim() === \"\" ||\n\t\tinstructions.length > ROLE_INSTRUCTIONS_CHARS\n\t) {\n\t\tthrow new Error(`${origin}.instructions must be a non-empty string of at most ${ROLE_INSTRUCTIONS_CHARS} chars`);\n\t}\n\t// 档案字段交给公共解析器校验(类型/范围/未知键都在那里拦),错误文本带上文件来源。\n\tconst profileInput: Record<string, unknown> = { version: 1, roleId: id };\n\tfor (const key of [\n\t\t\"model\",\n\t\t\"thinkingLevel\",\n\t\t\"tools\",\n\t\t\"writeScope\",\n\t\t\"mode\",\n\t\t\"webSearch\",\n\t\t\"systemPromptAppend\",\n\t] as const) {\n\t\tif (fields[key] !== undefined) profileInput[key] = fields[key];\n\t}\n\tconst hasProfile = Object.keys(profileInput).length > 1;\n\tlet profile: AgentTaskChildProfileV1 | undefined;\n\tif (hasProfile) {\n\t\tconst parsed = parseAgentTaskChildProfileV1(profileInput);\n\t\tif (!parsed.ok) throw new Error(`${origin}: ${parsed.message}`);\n\t\tprofile = parsed.profile;\n\t}\n\tconst parentView = fields.parentView;\n\tif (parentView !== undefined && typeof parentView !== \"boolean\") {\n\t\tthrow new Error(`${origin}.parentView must be a boolean`);\n\t}\n\treturn {\n\t\tid,\n\t\tdescription,\n\t\tinstructions,\n\t\t...(profile === undefined ? {} : { profile }),\n\t\t...(parentView === true ? { parentView: true } : {}),\n\t};\n}\n\n/** 角色菜单字符数(工具描述里每个角色占 `id — description`;装载期与注册期共用同一公式)。 */\nfunction roleMenuChars(roles: Iterable<SubagentDelegateRoleV1>): number {\n\tlet total = 0;\n\tfor (const role of roles) total += role.id.length + role.description.length + 3;\n\treturn total;\n}\n\n/** 未知角色 id 的拒绝文本(resolveRole 与角色工具共用,措辞保持稳定)。 */\nfunction unknownRoleMessage(id: string, roles: ReadonlyMap<string, SubagentDelegateRoleV1>): string {\n\tconst available = [...roles.keys()].sort();\n\treturn (\n\t\t`unknown subagent role ${JSON.stringify(id)}; available roles: ` +\n\t\t(available.length === 0 ? \"(none configured)\" : available.join(\", \"))\n\t);\n}\n\n/**\n * 角色是否带**收窄档案**(profile 里除基线 version/roleId 外还有 model/thinkingLevel/\n * tools/writeScope/mode/systemPromptAppend)。`role.profile !== undefined` 不是这个意思:档案基线\n * 恒含 roleId,因此任何角色都带 profile;\"带收窄\"看的是有没有收窄字段。\n */\nfunction hasNarrowingProfile(role: SubagentDelegateRoleV1): boolean {\n\tconst profile = role.profile;\n\treturn (\n\t\tprofile !== undefined &&\n\t\t(profile.model !== undefined ||\n\t\t\tprofile.thinkingLevel !== undefined ||\n\t\t\tprofile.tools !== undefined ||\n\t\t\tprofile.writeScope !== undefined ||\n\t\t\tprofile.mode !== undefined ||\n\t\t\tprofile.webSearch !== undefined ||\n\t\t\tprofile.systemPromptAppend !== undefined)\n\t);\n}\n\n// ---------------------------------------------------------------------------\n// 会话级子代理角色(session-scoped roles,D-081,2026-10-03 用户裁决落地)\n//\n// 主代理可用角色 = 磁盘角色(方案 associations ∩ 目录文件)∪ 会话角色。会话角色由\n// 主代理在会话内用 `subagent_role`(type `set`)注册,随会话文件持久化(下次打开仍在),\n// 不写 `<agentDir>/roles/`、不跨会话共享、子代理不继承。磁盘角色优先:撞名的注册\n// 被结构化拒绝,装载期合并时撞名的会话角色被忽略并 warn。\n// ---------------------------------------------------------------------------\n\n/**\n * 会话角色快照条目的 customType(跨插件契约,workflow 软校验按此字面量读取):\n * data = `{ version: 1, roles: [...] }` **全量快照**、append-only;恢复时反向扫描\n * 最近一条可解析快照(与 goal/plan/todo/workflow 的 loadState 同构)。压缩只影响\n * LLM 上下文投影,`getBranchEntries` 始终返回完整分支,按分支重建因此压缩安全。\n */\nexport const SESSION_ROLE_STATE_ENTRY = \"subagent.roles.state\" as const;\n\n/**\n * 快照里的单个角色:与角色文件同构的**平铺定义** + id(文件形态的 id 来自文件名,\n * 条目里必须自带)。收窄字段平铺为 model/thinkingLevel/tools/writeScope/mode/systemPromptAppend,\n * 载入内存时仍归一化为 `SubagentDelegateRoleV1`(profile 嵌套形态)。\n */\nexport interface SubagentSessionRoleRecordV1 {\n\treadonly id: string;\n\treadonly description: string;\n\treadonly instructions: string;\n\treadonly model?: string;\n\treadonly thinkingLevel?: string;\n\treadonly tools?: readonly string[];\n\treadonly writeScope?: readonly string[];\n\treadonly mode?: \"readonly\" | \"full-control\";\n\treadonly webSearch?: \"off\" | \"auto\";\n\treadonly systemPromptAppend?: string;\n\treadonly parentView?: boolean;\n}\n\n/** 会话角色快照条目 data 的形状(必须 JSON 可序列化)。 */\nexport interface SubagentSessionRolesStateV1 {\n\treadonly version: 1;\n\treadonly roles: readonly SubagentSessionRoleRecordV1[];\n}\n\n/** `subagent_role`(type `list`,无 id)的摘要条目:来源 + 一句话说明 + 收窄面有无。 */\nexport interface SubagentRoleListEntryV1 {\n\treadonly id: string;\n\treadonly origin: \"disk\" | \"session\";\n\treadonly description: string;\n\treadonly hasProfile: boolean;\n\treadonly hasParentView: boolean;\n}\n\nexport interface SubagentRoleListResultV1 {\n\treadonly roles: readonly SubagentRoleListEntryV1[];\n}\n\n/** `subagent_role`(type `list`,带 `id`)的完整定义(含 instructions 与收窄字段,供读-改-写)。 */\nexport interface SubagentRoleDefinitionViewV1 extends SubagentSessionRoleRecordV1 {\n\treadonly origin: \"disk\" | \"session\";\n}\n\nexport interface SubagentRoleViewResultV1 {\n\treadonly role: SubagentRoleDefinitionViewV1;\n}\n\n/** `subagent_role`(type `set`)的结果:created/updated + 合并后全部可用角色 id(排序)。 */\nexport interface SubagentRoleSetResultV1 {\n\treadonly id: string;\n\treadonly status: \"created\" | \"updated\";\n\treadonly roles: readonly string[];\n}\n\n/** `subagent_role`(type `remove`)的结果:removed + 合并后全部可用角色 id(排序)。 */\nexport interface SubagentRoleRemoveResultV1 {\n\treadonly id: string;\n\treadonly status: \"removed\";\n\treadonly roles: readonly string[];\n}\n\n/** 运行期角色 → 会话快照条目(平铺收窄字段,读-改-写与角色文件同构)。 */\nexport function toSessionRoleRecord(role: SubagentDelegateRoleV1): SubagentSessionRoleRecordV1 {\n\tconst profile = role.profile;\n\treturn {\n\t\tid: role.id,\n\t\tdescription: role.description,\n\t\tinstructions: role.instructions,\n\t\t...(profile?.model === undefined ? {} : { model: profile.model }),\n\t\t...(profile?.thinkingLevel === undefined ? {} : { thinkingLevel: profile.thinkingLevel }),\n\t\t...(profile?.tools === undefined ? {} : { tools: profile.tools }),\n\t\t...(profile?.writeScope === undefined ? {} : { writeScope: profile.writeScope }),\n\t\t...(profile?.mode === undefined ? {} : { mode: profile.mode }),\n\t\t...(profile?.webSearch === undefined ? {} : { webSearch: profile.webSearch }),\n\t\t...(profile?.systemPromptAppend === undefined ? {} : { systemPromptAppend: profile.systemPromptAppend }),\n\t\t...(role.parentView === true ? { parentView: true } : {}),\n\t};\n}\n\n/**\n * 恢复水合(D-081):从 `getBranchEntries()` 反向扫描最近一条**可解析**的会话角色\n * 快照。快照级损坏(非对象/版本不符/roles 非数组)→ warn 后继续向前找;快照合法但\n * 个别角色非法(id 形状、字段/档案校验不过)→ 丢弃该角色并 warn、保留其余;全部\n * 不可解析 → 空数组。损坏不阻断会话启动。\n */\nexport function readSessionRoles(\n\tsession: Pick<SessionAPI, \"getBranchEntries\"> | undefined,\n\tlogger?: LoggerAPI,\n): readonly SubagentDelegateRoleV1[] {\n\tconst entries = session?.getBranchEntries() ?? [];\n\tfor (let index = entries.length - 1; index >= 0; index -= 1) {\n\t\tconst entry = entries[index] as SessionEntryView | undefined;\n\t\tif (entry?.customType !== SESSION_ROLE_STATE_ENTRY) continue;\n\t\tconst snapshot = entry.data;\n\t\tif (!isPlainRecord(snapshot) || snapshot.version !== 1 || !Array.isArray(snapshot.roles)) {\n\t\t\tlogger?.warn?.(\n\t\t\t\t`session role state entry ${entry.id} is not a readable snapshot (want { version: 1, roles: [...] }); ` +\n\t\t\t\t\t\"reading the previous snapshot\",\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst roles: SubagentDelegateRoleV1[] = [];\n\t\tfor (const [roleIndex, raw] of (snapshot.roles as readonly unknown[]).entries()) {\n\t\t\tconst origin = `${SESSION_ROLE_STATE_ENTRY}[${roleIndex}]`;\n\t\t\tif (!isPlainRecord(raw) || typeof raw.id !== \"string\" || !ROLE_ID_PATTERN.test(raw.id)) {\n\t\t\t\tlogger?.warn?.(`${origin} has no valid role id; entry dropped`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// id 来自条目本身;其余键原样交给与角色文件同一套校验(未知键照样拒绝)。\n\t\t\tconst definition: Record<string, unknown> = {};\n\t\t\tfor (const [key, value] of Object.entries(raw)) {\n\t\t\t\tif (key !== \"id\") definition[key] = value;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst role = validateRoleDefinition(raw.id, definition, origin);\n\t\t\t\tif (role !== undefined) roles.push(role);\n\t\t\t} catch (error) {\n\t\t\t\tlogger?.warn?.(\n\t\t\t\t\t`${origin} (role ${JSON.stringify(raw.id)}) is invalid and was dropped: ${errorText(error)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn Object.freeze(roles);\n\t}\n\treturn Object.freeze([]);\n}\n\n/**\n * 磁盘角色与会话角色的合并结果(装载期水合与注册期预算共用同一实现)。\n *\n * **数据与视图分离**:预算是**暴露**预算,不是数据删除——未被暴露的会话角色仍留在\n * 会话文件里(后续任何一次 set/remove 重写全量快照都不会把它们抹掉),只是当前不进\n * 可用集。监视语义 = 数据保留(sessionRoles)、视图收窄(roles)。\n */\nexport interface SubagentSessionRoleMergeV1 {\n\t/**\n\t * 快照读取到的**全部**合法会话角色(快照顺序):含被磁盘遮蔽与超出暴露预算的项。\n\t * 这是会话文件里的数据(持久化写它),不等于主代理当前可见的可用集。\n\t */\n\treadonly sessionRoles: ReadonlyMap<string, SubagentDelegateRoleV1>;\n\t/** 可用集 = 可见磁盘角色 ∪ 通过暴露预算的会话角色(磁盘优先)——菜单/`role` 枚举只看它。 */\n\treadonly roles: ReadonlyMap<string, SubagentDelegateRoleV1>;\n\t/** 与可见磁盘角色撞名而被遮蔽的会话角色 id:保留在会话文件中,当前不暴露(诊断)。 */\n\treadonly shadowedByDisk: readonly string[];\n\t/** 超出 16 个 / 2000 字符**暴露**预算而未被暴露的会话角色 id:保留在会话文件中(诊断)。 */\n\treadonly droppedForQuota: readonly string[];\n}\n\n/**\n * 合并磁盘角色与会话角色(D-081):**磁盘优先**——撞名的会话角色不暴露并 warn(磁盘\n * 角色是用户资产),但其数据仍留在会话文件里;水合按快照顺序把会话角色收进暴露预算\n * (≤16 个、菜单 ≤2000 字符,磁盘+会话合并计算),超出部分不暴露并 warn——历史快照\n * 可能因上限收紧或磁盘角色增加而超限,但不阻断会话启动,也不删除数据。\n */\nexport function mergeSubagentRoles(\n\tdiskRoles: ReadonlyMap<string, SubagentDelegateRoleV1>,\n\tsessionRoles: readonly SubagentDelegateRoleV1[],\n\tlogger?: LoggerAPI,\n): SubagentSessionRoleMergeV1 {\n\t// 数据层:快照里的合法会话角色全量保留(同 id 后者覆盖前者,与快照顺序一致)。\n\tconst data = new Map<string, SubagentDelegateRoleV1>();\n\t// 视图层:磁盘角色优先,会话角色按快照顺序通过暴露预算。\n\tconst roles = new Map(diskRoles);\n\tconst shadowedByDisk: string[] = [];\n\tconst droppedForQuota: string[] = [];\n\tfor (const role of sessionRoles) {\n\t\tdata.set(role.id, role);\n\t\tif (diskRoles.has(role.id)) {\n\t\t\tshadowedByDisk.push(role.id);\n\t\t\tlogger?.warn?.(\n\t\t\t\t`session role \"${role.id}\" is shadowed by a visible disk role: kept in the session file but not exposed ` +\n\t\t\t\t\t\"(the disk role wins)\",\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst prospectiveChars = roleMenuChars([...roles.values(), role]);\n\t\tif (roles.size + 1 > ROLE_COUNT_LIMIT || prospectiveChars > ROLE_MENU_CHARS) {\n\t\t\tdroppedForQuota.push(role.id);\n\t\t\tlogger?.warn?.(\n\t\t\t\t`session role \"${role.id}\" exceeds the ${ROLE_COUNT_LIMIT}-role / ${ROLE_MENU_CHARS}-char exposure budget: ` +\n\t\t\t\t\t\"kept in the session file but not exposed\",\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\troles.set(role.id, role);\n\t}\n\treturn {\n\t\tsessionRoles: data,\n\t\troles,\n\t\tshadowedByDisk: Object.freeze(shadowedByDisk),\n\t\tdroppedForQuota: Object.freeze(droppedForQuota),\n\t};\n}\n\n/** 注册点的预算错误文本(undefined = 在预算内):与装载期上限同一常量,附精简建议。 */\nfunction roleQuotaViolation(roles: ReadonlyMap<string, SubagentDelegateRoleV1>): string | undefined {\n\tif (roles.size > ROLE_COUNT_LIMIT) {\n\t\treturn (\n\t\t\t`registering this session role would expose ${roles.size} roles; at most ${ROLE_COUNT_LIMIT} are allowed ` +\n\t\t\t\"(the menu rides in the parent's tool description on every request) — remove unused session roles first\"\n\t\t);\n\t}\n\tconst chars = roleMenuChars(roles.values());\n\tif (chars > ROLE_MENU_CHARS) {\n\t\treturn (\n\t\t\t`registering this session role would grow the role menu to ${chars} chars; at most ${ROLE_MENU_CHARS} are ` +\n\t\t\t\"allowed — shorten descriptions or remove session roles first\"\n\t\t);\n\t}\n\treturn undefined;\n}\n\n/**\n * 解析当前方案的角色目录(**全部来自磁盘**,无编译内定义)。装载期一次性完成,\n * 任何会让\"配置了但没生效\"的情况都显式失败:\n * - 被关联 + 文件存在但非法 → 抛错(指名文件);\n * - 被关联但目录里没有该 id → dangling(诊断,角色不可见),调用该名走 `subagent_unknown_role`;\n * - 未被关联的坏文件只进诊断:别的方案不该被一个用不到的文件拖垮;\n * - 暴露集受 16 个 / 2000 字符上限约束(菜单是主代理工具描述的一部分)。\n */\nexport function resolveSubagentRoleCatalog(options: {\n\treadonly agentDir: string;\n\treadonly associations: readonly string[];\n}): SubagentRoleCatalogResolutionV1 {\n\tconst associated = [...new Set(options.associations)];\n\tconst roles = new Map<string, SubagentDelegateRoleV1>();\n\tconst dangling: string[] = [];\n\tconst brokenUnassociated: string[] = [];\n\tconst catalogDir = join(options.agentDir, ROLE_CATALOG_DIR);\n\tlet entries: string[] = [];\n\ttry {\n\t\tentries = readdirSync(catalogDir).filter((name) => name.endsWith(\".json\"));\n\t} catch {\n\t\t// 目录不存在(未种子化/未配置)是正常状态。\n\t\tentries = [];\n\t}\n\tfor (const entry of entries) {\n\t\tconst id = entry.slice(0, -\".json\".length);\n\t\tif (!ROLE_ID_PATTERN.test(id)) continue;\n\t\tconst origin = `${catalogDir}/${entry}`;\n\t\tconst isAssociated = associated.includes(id);\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(readFileSync(join(catalogDir, entry), \"utf8\"));\n\t\t} catch (error) {\n\t\t\tif (isAssociated) {\n\t\t\t\tthrow new Error(`subagent role \"${id}\" is associated by this suite but ${origin} is unreadable`, {\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t}\n\t\t\tbrokenUnassociated.push(id);\n\t\t\tcontinue;\n\t\t}\n\t\tlet role: SubagentDelegateRoleV1 | undefined;\n\t\ttry {\n\t\t\trole = validateRoleDefinition(id, parsed, origin);\n\t\t} catch (error) {\n\t\t\tif (isAssociated) throw error;\n\t\t\tbrokenUnassociated.push(id);\n\t\t\tcontinue;\n\t\t}\n\t\tif (isAssociated && role !== undefined) roles.set(id, role);\n\t}\n\tfor (const id of associated) {\n\t\tif (!ROLE_ID_PATTERN.test(id)) {\n\t\t\tthrow new Error(\n\t\t\t\t`suite associations.roles entry ${JSON.stringify(id)} is not a valid role id (expect lowercase [a-z0-9_-], ` +\n\t\t\t\t\t\"max 32 chars)\",\n\t\t\t);\n\t\t}\n\t\tif (!roles.has(id)) dangling.push(id);\n\t}\n\tif (roles.size > ROLE_COUNT_LIMIT) {\n\t\tthrow new Error(\n\t\t\t`suite associations.roles exposes ${roles.size} roles; at most ${ROLE_COUNT_LIMIT} are allowed — the role menu ` +\n\t\t\t\t\"rides in the parent's tool description on every request, and an unbounded menu degrades the main agent's own context\",\n\t\t);\n\t}\n\tconst menuChars = roleMenuChars(roles.values());\n\tif (menuChars > ROLE_MENU_CHARS) {\n\t\tthrow new Error(\n\t\t\t`suite associations.roles menu is ${menuChars} chars; at most ${ROLE_MENU_CHARS} are allowed — shorten role ` +\n\t\t\t\t\"descriptions or associate fewer roles (the menu is part of the parent's tool description)\",\n\t\t);\n\t}\n\treturn { roles, dangling: Object.freeze(dangling), brokenUnassociated: Object.freeze(brokenUnassociated) };\n}\n\n/** 角色文件名(`<agentDir>/roles/<id>.json`),供种子与目录与文档共用一处。 */\nexport function subagentRoleCatalogPath(agentDir: string, id: string): string {\n\treturn join(agentDir, ROLE_CATALOG_DIR, `${id}.json`);\n}\n\n/**\n * 出厂种子落盘(仅补缺,绝不覆盖既有文件):默认方案关联四个种子角色,\n * 因此新环境开箱即用;这些文件与用户自己写的角色完全同权——改文件即生效,\n * 删文件使关联成为 dangling 诊断。引擎运行期从不回退到编译内的角色定义。\n */\nexport function seedFactoryRoleCatalog(agentDir: string): void {\n\tconst dir = join(agentDir, ROLE_CATALOG_DIR);\n\ttry {\n\t\tmkdirSync(dir, { recursive: true });\n\t} catch {\n\t\treturn; // 不可写(只读 agentDir):角色可选,不阻断启动。\n\t}\n\tfor (const role of FACTORY_ROLE_SEEDS) {\n\t\tconst path = subagentRoleCatalogPath(agentDir, role.id);\n\t\tif (existsSync(path)) continue;\n\t\t// 文件形状与用户手写角色一致(平铺键):description/instructions + 可选档案键。\n\t\tconst file: Record<string, unknown> = { description: role.description, instructions: role.instructions };\n\t\tfor (const key of [\n\t\t\t\"model\",\n\t\t\t\"thinkingLevel\",\n\t\t\t\"tools\",\n\t\t\t\"writeScope\",\n\t\t\t\"mode\",\n\t\t\t\"webSearch\",\n\t\t\t\"systemPromptAppend\",\n\t\t] as const) {\n\t\t\tconst value = role.profile?.[key];\n\t\t\tif (value !== undefined) file[key] = value;\n\t\t}\n\t\tif (role.parentView === true) file.parentView = true;\n\t\ttry {\n\t\t\twriteFileSync(path, `${JSON.stringify(file, null, 2)}\\n`, {\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tflag: \"wx\",\n\t\t\t});\n\t\t} catch {\n\t\t\t// 并发种子化或只读目录:已在磁盘上或不需要,保持现状。\n\t\t}\n\t}\n}\n\n/** 父投影上限:目标文本与工具面名单都取小值(这是\"背景\",不是父上下文回灌)。 */\nconst PARENT_VIEW_GOAL_CHARS = 2000;\nconst PARENT_VIEW_TOOL_LIMIT = 40;\n\n/** 从父会话消息里取最后一条用户文本(有界),作为\"父当前目标\"。 */\nfunction lastUserText(messages: readonly unknown[], limit: number): string | undefined {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (typeof message !== \"object\" || message === null) continue;\n\t\tconst record = message as { role?: string; content?: unknown };\n\t\tif (record.role !== \"user\") continue;\n\t\tconst raw =\n\t\t\ttypeof record.content === \"string\"\n\t\t\t\t? record.content\n\t\t\t\t: Array.isArray(record.content)\n\t\t\t\t\t? record.content.map((part) => (part as { type?: string; text?: string }).text ?? \"\").join(\"\")\n\t\t\t\t\t: \"\";\n\t\tconst trimmed = raw.trim();\n\t\tif (trimmed === \"\") continue;\n\t\treturn trimmed.length <= limit ? trimmed : `${trimmed.slice(0, limit)}…`;\n\t}\n\treturn undefined;\n}\n\n/**\n * 子读父(D-060 §4):父会话的**有界投影**——sessionId、当前目标(最后一条用户文本,截断)、\n * 工具面名单。默认关闭;开启后拼在角色指令与任务之间。父历史全文永不进入子会话。\n */\nfunction composeParentView(session: CapabilityAPI[\"session\"], parentSessionId: string): string | undefined {\n\tconst goal = session === undefined ? undefined : lastUserText(session.getMessages(), PARENT_VIEW_GOAL_CHARS);\n\tconst tools = session?.getActiveTools?.() ?? [];\n\tconst toolList = tools.slice(0, PARENT_VIEW_TOOL_LIMIT).join(\", \");\n\treturn [\n\t\t\"Parent context (bounded projection; the parent's full history is not available to you):\",\n\t\t`- parent session: ${parentSessionId}`,\n\t\t...(goal === undefined ? [] : [`- current goal: ${goal}`]),\n\t\t...(toolList === \"\" ? [] : [`- parent tools: ${toolList}`]),\n\t].join(\"\\n\");\n}\n\n/**\n * 角色框定:角色指令在上、任务在下,任务原文原样保留(子会话看不到父会话历史,\n * 因此这段文本是它唯一的\"我是谁 + 做什么\"来源)。组装后的字节数仍走 submit 侧\n * maxPromptBytes 预算,超限按预算拒绝而不是静默截断。\n */\nfunction composeRolePrompt(role: SubagentDelegateRoleV1, prompt: string): string {\n\treturn `${role.instructions}\\n\\nTask:\\n${prompt}`;\n}\n\n/**\n * 父→子指针注入(错误教训与召回质量护栏设计 §2.3):可选结构化 `context`(文件:行\n * 锚点、已试失败命令清单),确定性渲染进子会话首条 prompt 头部。只传路标不传内容:\n * 子代理仍自行读取真实文件,指针过期不产生错误事实。硬边界超限走 schema 校验失败\n * 整体拒绝——拒绝优于静默截断:父代理必须知道子代理没拿到完整锚点。\n */\nexport interface SubagentDelegateContextAnchorV1 {\n\treadonly path: string;\n\treadonly line?: number;\n\treadonly note?: string;\n}\n\nexport interface SubagentDelegateContextFailedAttemptV1 {\n\treadonly command: string;\n\treadonly note?: string;\n}\n\nexport interface SubagentDelegateContextV1 {\n\treadonly anchors?: readonly SubagentDelegateContextAnchorV1[];\n\treadonly failedAttempts?: readonly SubagentDelegateContextFailedAttemptV1[];\n}\n\n/** context 硬边界(设计 §2.3):两个列表 ≤10 项、note ≤200 字符、path/command ≤500 字符。 */\nconst CONTEXT_LIST_MAX_ITEMS = 10;\nconst CONTEXT_NOTE_MAX_CHARS = 200;\nconst CONTEXT_PATH_MAX_CHARS = 500;\nconst CONTEXT_COMMAND_MAX_CHARS = 500;\n\nfunction parseContextNote(value: unknown, origin: string): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"string\" || value.length > CONTEXT_NOTE_MAX_CHARS) {\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t`${origin} must be a string of at most ${CONTEXT_NOTE_MAX_CHARS} chars`,\n\t\t);\n\t}\n\treturn value === \"\" ? undefined : value;\n}\n\nfunction parseContextList<T>(\n\tvalue: unknown,\n\tlabel: string,\n\tparseEntry: (entry: Record<string, unknown>, origin: string) => T,\n): readonly T[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `subagent_run context.${label} must be an array`);\n\t}\n\tif (value.length > CONTEXT_LIST_MAX_ITEMS) {\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t`subagent_run context.${label} accepts at most ${CONTEXT_LIST_MAX_ITEMS} entries; received ${value.length}`,\n\t\t);\n\t}\n\treturn value.map((entry, index) => {\n\t\tconst origin = `subagent_run context.${label}[${index}]`;\n\t\tif (!isPlainRecord(entry)) {\n\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `${origin} must be an object`);\n\t\t}\n\t\treturn parseEntry(entry, origin);\n\t});\n}\n\n/**\n * 解析工具入参里的 `context`(形状/边界违规都以 `subagent_invalid_input` 整体拒绝);\n * 两个列表皆空时归一化为 undefined——与 context 缺省同一路径,整块不渲染。\n */\nfunction parseDelegateContext(value: unknown): SubagentDelegateContextV1 | undefined {\n\tif (value === undefined) return undefined;\n\tif (!isPlainRecord(value)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run context must be an object\");\n\t}\n\tconst anchors =\n\t\tvalue.anchors === undefined\n\t\t\t? undefined\n\t\t\t: parseContextList(value.anchors, \"anchors\", (entry, origin): SubagentDelegateContextAnchorV1 => {\n\t\t\t\t\tconst path = entry.path;\n\t\t\t\t\tif (typeof path !== \"string\" || path === \"\" || path.length > CONTEXT_PATH_MAX_CHARS) {\n\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t`${origin}.path must be a non-empty string of at most ${CONTEXT_PATH_MAX_CHARS} chars`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst rawLine = entry.line;\n\t\t\t\t\tconst line =\n\t\t\t\t\t\trawLine === undefined\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: ((): number => {\n\t\t\t\t\t\t\t\t\tif (typeof rawLine !== \"number\" || !Number.isInteger(rawLine) || rawLine < 1) {\n\t\t\t\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t\t\t\t`${origin}.line must be a positive integer`,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn rawLine;\n\t\t\t\t\t\t\t\t})();\n\t\t\t\t\tconst note = parseContextNote(entry.note, `${origin}.note`);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\t...(line === undefined ? {} : { line }),\n\t\t\t\t\t\t...(note === undefined ? {} : { note }),\n\t\t\t\t\t};\n\t\t\t\t});\n\tconst failedAttempts =\n\t\tvalue.failedAttempts === undefined\n\t\t\t? undefined\n\t\t\t: parseContextList(\n\t\t\t\t\tvalue.failedAttempts,\n\t\t\t\t\t\"failedAttempts\",\n\t\t\t\t\t(entry, origin): SubagentDelegateContextFailedAttemptV1 => {\n\t\t\t\t\t\tconst command = entry.command;\n\t\t\t\t\t\tif (typeof command !== \"string\" || command === \"\" || command.length > CONTEXT_COMMAND_MAX_CHARS) {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`${origin}.command must be a non-empty string of at most ${CONTEXT_COMMAND_MAX_CHARS} chars`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst note = parseContextNote(entry.note, `${origin}.note`);\n\t\t\t\t\t\treturn { command, ...(note === undefined ? {} : { note }) };\n\t\t\t\t\t},\n\t\t\t\t);\n\tif ((anchors?.length ?? 0) === 0 && (failedAttempts?.length ?? 0) === 0) return undefined;\n\treturn {\n\t\t...(anchors === undefined ? {} : { anchors }),\n\t\t...(failedAttempts === undefined ? {} : { failedAttempts }),\n\t};\n}\n\n/**\n * 把 context 确定性渲染为子会话首条 prompt 的头部块(模板逐字,设计 §2.3):line\n * 缺省只输出 path、note 缺省省略 \" — <note>\"、某列表为空不渲染对应小节、两个列表\n * 皆空(context 已在解析侧归一化)返回 undefined——子会话 prompt 与现状逐字节一致。\n */\nfunction renderDelegateContext(context: SubagentDelegateContextV1 | undefined): string | undefined {\n\tif (context === undefined) return undefined;\n\tconst lines = [\"[parent context anchors — may be stale; verify against current files]\"];\n\tconst anchors = context.anchors ?? [];\n\tif (anchors.length > 0) {\n\t\tlines.push(\"Key locations:\");\n\t\tfor (const anchor of anchors) {\n\t\t\tconst location = anchor.line === undefined ? anchor.path : `${anchor.path}:${anchor.line}`;\n\t\t\tlines.push(`- ${location}${anchor.note === undefined ? \"\" : ` — ${anchor.note}`}`);\n\t\t}\n\t}\n\tconst failedAttempts = context.failedAttempts ?? [];\n\tif (failedAttempts.length > 0) {\n\t\tlines.push(\"Tried and failed:\");\n\t\tfor (const attempt of failedAttempts) {\n\t\t\tlines.push(`- \\`${attempt.command}\\`${attempt.note === undefined ? \"\" : ` — ${attempt.note}`}`);\n\t\t}\n\t}\n\treturn lines.length === 1 ? undefined : lines.join(\"\\n\");\n}\n\n/**\n * 核验档案是否真的落到了子会话上:工具面必须是请求白名单的子集,模型必须等于请求值,\n * 模式请求 `readonly` 时必须已是只读。宿主不暴露可核验事实(getActiveTools/getModel)\n * 也算未落地——\"要求了但无法证明\"与\"没要求\"对上层是同一种风险。\n */\nfunction verifyChildProfileApplied(host: { session: unknown }, requested: unknown): string | undefined {\n\tconst parsed = parseAgentTaskChildProfileV1(requested);\n\tif (!parsed.ok) return `child task profile is invalid: ${parsed.message}`;\n\tconst profile = parsed.profile;\n\tconst session = host.session as {\n\t\tgetActiveTools?: () => string[];\n\t\tgetModel?: () => { id?: string } | undefined;\n\t\tgetWebSearch?: () => \"off\" | \"auto\";\n\t};\n\tif (profile.tools !== undefined || profile.mode === \"readonly\") {\n\t\tconst active = session.getActiveTools?.();\n\t\tif (active === undefined) {\n\t\t\treturn \"host does not expose getActiveTools(); the requested tool narrowing cannot be verified\";\n\t\t}\n\t\tif (profile.tools !== undefined) {\n\t\t\tconst extra = active.filter((name) => !profile.tools?.includes(name));\n\t\t\tif (extra.length > 0) {\n\t\t\t\treturn `child session kept tools outside the requested allowlist: ${extra.join(\", \")}`;\n\t\t\t}\n\t\t}\n\t}\n\tif (profile.model !== undefined) {\n\t\tconst model = session.getModel?.();\n\t\tif (model === undefined) {\n\t\t\treturn \"host does not expose getModel(); the requested model cannot be verified\";\n\t\t}\n\t\tif (model.id !== profile.model) {\n\t\t\treturn `child session is on model ${JSON.stringify(model.id)} instead of the requested ${JSON.stringify(profile.model)}`;\n\t\t}\n\t}\n\tif (profile.webSearch !== undefined) {\n\t\tconst actual = session.getWebSearch?.();\n\t\tif (actual === undefined) {\n\t\t\treturn \"host does not expose getWebSearch(); the requested web search mode cannot be verified\";\n\t\t}\n\t\tif (actual !== profile.webSearch) {\n\t\t\treturn `child session web search is ${JSON.stringify(actual)} instead of the requested ${JSON.stringify(profile.webSearch)}`;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveRole(\n\tvalue: unknown,\n\troles: ReadonlyMap<string, SubagentDelegateRoleV1>,\n): SubagentDelegateRoleV1 | undefined {\n\tif (value === undefined || value === null) return undefined;\n\tif (typeof value !== \"string\" || value.trim() === \"\") {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run role must be a non-empty string\");\n\t}\n\tconst role = roles.get(value);\n\tif (role === undefined) {\n\t\tthrow new SubagentDelegateError(\"subagent_unknown_role\", unknownRoleMessage(value, roles));\n\t}\n\treturn role;\n}\n\n/** 单条 summary 的字符上限(上下文预算:只回摘要,不回 messages 原文)。 */\nconst SUMMARY_CHARS = 200;\n\n/** `subagent_task`(type `result`)默认/上限返回条数(有界回读,绝不默认回灌全文)。 */\nconst RESULT_READ_DEFAULT_MESSAGES = 20;\nconst RESULT_READ_MAX_MESSAGES = 50;\n/** `subagent_task`(type `result`)的有界等待上限(后台结算收割),默认 0 = 只查一次。 */\nconst RESULT_READ_MAX_WAIT_MS = 120_000;\n/**\n * 每任务随结算投影/信封返回的兄弟流量摘录条数(D-060 裁决 14 父可见性):有界——\n * 这是审计摘录不是消息回灌,全量以信箱审计日志为准。\n */\nconst SIBLING_TRAFFIC_EXCERPTS = 8;\n\n/** `subagent_task`(type `result`)的返回形状:两个来源(调度记录 / 持久化 transcript)共用一个有界信封。 */\nexport interface SubagentResultReadResultV1 {\n\treadonly found: boolean;\n\treadonly source: \"record\" | \"session\";\n\treadonly taskId?: string;\n\treadonly sessionId?: string;\n\treadonly status?: string;\n\treadonly reasonCode?: string;\n\treadonly reason?: string;\n\treadonly roleId?: string;\n\t/** 来源里的总条数(截断前)。 */\n\treadonly messageCount?: number;\n\treadonly entryCount?: number;\n\treadonly returnedMessages?: number;\n\t/** 整份来源的 UTF-8 字节数。 */\n\treadonly bytes?: number;\n\treadonly truncated?: boolean;\n\treadonly messages?: readonly unknown[];\n\t/** 该子会话 escalate 上抛的有界消息(取后即清);无积压时省略。 */\n\treadonly escalations?: readonly string[];\n\t/** 该子会话相关的兄弟流量摘录(只读不删;D-060 裁决 14);无流量时省略。 */\n\treadonly siblingTraffic?: readonly { from: string; to: string; text: string }[];\n\t/** 任务层结果(任务级拒绝);仅调度记录来源携带(transcript 回读无调度记录)。 */\n\treadonly taskOutcome?: \"refused\";\n\t/** 拒绝原因;仅与 taskOutcome 同时出现。 */\n\treadonly refusalReason?: string;\n\t/** taskId 已知但尚未结算(后台委派):稍后再取或带 waitMs 等待。 */\n\treadonly knownTask?: true;\n\t/** 未结算任务的当前调度器状态(queued/admitted/running)。 */\n\treadonly taskStatus?: string;\n}\n\n/** `subagent_task`(type `list`)的条目:store 摘要 + 调度器状态富化(有则附)。 */\nexport interface SubagentSessionListEntryV1 {\n\treadonly sessionId: string;\n\treadonly agentRole?: string;\n\treadonly createdAt?: string;\n\treadonly modifiedAt: number;\n\treadonly bytes: number;\n\t/** 本调度器里仍有未结算任务时为 true。 */\n\treadonly active?: true;\n\t/** 终态记录可查时为调度器权威状态词汇。 */\n\treadonly status?: SubagentRuntimeStatus;\n\treadonly reasonCode?: string;\n\treadonly reason?: string;\n}\n\nexport interface SubagentSessionListResultV1 {\n\treadonly count: number;\n\treadonly sessions: readonly SubagentSessionListEntryV1[];\n}\n\n/** UTF-8 字节数(回读信封如实报告体积)。 */\nfunction utf8ByteLength(text: string): number {\n\treturn Buffer.byteLength(text, \"utf8\");\n}\n\nconst DEFAULT_MAX_TASKS_PER_CALL = DEFAULT_SUBAGENT_MAX_TASKS_PER_CALL;\nconst DEFAULT_TASK_TIMEOUT_MS = DEFAULT_SUBAGENT_TASK_TIMEOUT_MS;\n\n/**\n * 后台委派缺省死线(60 分钟,出厂默认登记见 docs/design/产品默认值清单.md):挂死\n * 后台任务的兜底寿命。`subagent_run background:true` 提交即带 `deadlineAt`;工具参数\n * `deadlineMs`(正整数)可按调用覆盖。死线到达由调度器 tick 强制为 `timed_out`\n * (设计 §5.7);前台任务不走死线(父侧 drain 预算 `taskTimeoutMs` 已有界)。\n */\nconst DEFAULT_BACKGROUND_TASK_DEADLINE_MS = 3_600_000;\n/**\n * 生产 tick 驱动间隔:存在带未决死线的在途后台任务时才启动的墙钟 ticker(惰性启停)。\n * ticker 只调用 `runtime.tick()`,不携带策略——tick 仍是唯一强制点,调度器\"测试可控\n * 时钟\"语义不变(测试注入 clock 或以假 timers 驱动本间隔即得确定性死线)。\n */\nconst BACKGROUND_DEADLINE_TICK_INTERVAL_MS = 30_000;\n\n/**\n * 配置通道读取(manifest 默认 + agent-dir 文件合并后的 `api.config`):\n * 非整数/低于下限即 fail fast 并指名键,不让错误配置静默生效。\n */\nfunction configInt(api: CapabilityAPI, key: string, min: number): number | undefined {\n\tconst value = api.config[key];\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"number\" || !Number.isInteger(value) || value < min) {\n\t\tthrow new Error(`subagent-delegate config ${key} must be an integer >= ${min}, got ${JSON.stringify(value)}`);\n\t}\n\treturn value;\n}\n\n/** options > config > 默认,最终值仍需通过同一套下限校验。 */\nfunction resolveInt(\n\texplicit: number | undefined,\n\tconfigured: number | undefined,\n\tfallback: number,\n\tmin: number,\n\tlabel: string,\n): number {\n\tconst value = explicit ?? configured ?? fallback;\n\tif (!Number.isInteger(value) || value < min) {\n\t\tthrow new Error(`subagent-delegate ${label} must be an integer >= ${min}, got ${JSON.stringify(value)}`);\n\t}\n\treturn value;\n}\n\n/**\n * 宽松调用兼容(对齐 goal/plan/todo-set):标准签名的第二参为 params,直接调用时第一参即 params。\n * 生产装配向 runtime invoke 面注入 toolExecutionContext 作为 execute 的第二参(公共契约),\n * 因此\"第二参非 undefined 即输入\"的判定会把 context 误当输入(prompts 读成 undefined)。\n * 改按形状判定:第一参是普通对象即取第一参,否则看第二参。\n */\nfunction objectInput(first: unknown, second: unknown, tool = \"subagent_run\"): Record<string, unknown> {\n\tconst primary = isPlainRecord(first) ? first : second;\n\tif (!isPlainRecord(primary)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `${tool} input must be an object`);\n\t}\n\treturn primary;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Merge per-operation parameter schemas into one all-optional property map.\n *\n * A merged tool's schema cannot reuse the operation schemas verbatim: their\n * `required` lists would leak across types (cancel's required `taskId` would\n * make it required for every type). The dispatcher validates the required set\n * per type instead; constraints and descriptions survive.\n */\nfunction optionalParams(...maps: readonly (Record<string, TSchema> | undefined)[]): Record<string, TSchema> {\n\tconst merged: Record<string, TSchema> = {};\n\tfor (const map of maps) {\n\t\tif (map === undefined) continue;\n\t\tfor (const [key, schema] of Object.entries(map)) merged[key] = Type.Optional(schema);\n\t}\n\treturn merged;\n}\n\n/**\n * Keep a tool's definition local without registering it: merged tools\n * (`subagent_task` / `subagent_message` / `subagent_role`) register one entry\n * and dispatch to these specs, instead of each operation owning a top-level\n * tool name (2026-10-21 user ruling: one tool per large category).\n */\nfunction toolSpec<T extends { readonly name: string }>(spec: T): T {\n\treturn spec;\n}\n\n/** Drop `type` before delegating to an operation that validates its own keys. */\nfunction withoutDiscriminator(input: Record<string, unknown>): Record<string, unknown> {\n\tconst { type: _type, ...rest } = input;\n\treturn rest;\n}\n\n/** Read and validate a merged tool's `type` discriminator. */\nfunction readDiscriminator(input: Record<string, unknown>, tool: string, allowed: readonly string[]): string {\n\tconst value = input.type;\n\tif (typeof value !== \"string\" || !allowed.includes(value)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `${tool}.type must be one of: ${allowed.join(\", \")}`);\n\t}\n\treturn value;\n}\n\n/**\n * Reject parameters that belong to a different operation of the same merged\n * tool. Fail-closed on purpose: silently ignoring `taskId` on `type:\"list\"`\n * would look like it filtered by that task.\n */\nfunction rejectForeignParams(\n\tinput: Record<string, unknown>,\n\ttool: string,\n\ttype: string,\n\tallowed: readonly string[],\n): void {\n\tfor (const key of Object.keys(input)) {\n\t\tif (key === \"type\" || allowed.includes(key)) continue;\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t`${tool} type \"${type}\" does not accept ${JSON.stringify(key)}`,\n\t\t);\n\t}\n}\n\nfunction readPrompts(value: unknown, maxTasksPerCall: number): string[] {\n\tif (!Array.isArray(value) || value.length === 0) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run requires a non-empty prompts array\");\n\t}\n\tconst prompts: string[] = [];\n\tfor (const entry of value) {\n\t\tif (typeof entry !== \"string\" || entry.trim() === \"\") {\n\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run prompts must be non-empty strings\");\n\t\t}\n\t\tprompts.push(entry);\n\t}\n\tif (prompts.length > maxTasksPerCall) {\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_batch_too_large\",\n\t\t\t`subagent_run accepts at most ${maxTasksPerCall} prompts per call; received ${prompts.length}`,\n\t\t);\n\t}\n\treturn prompts;\n}\n\nfunction errorText(error: unknown): string {\n\tif (error instanceof Error) return error.message;\n\tif (typeof error === \"string\") return error;\n\ttry {\n\t\tconst serialized = JSON.stringify(error);\n\t\treturn serialized === undefined ? String(error) : serialized;\n\t} catch {\n\t\treturn String(error);\n\t}\n}\n\n/** 结构化原因码:优先取错误自带的 code(调度器/适配器的结构化错误),否则表达为 submit 拒绝。 */\nfunction reasonCodeOf(error: unknown): string {\n\tif (error && typeof error === \"object\" && typeof (error as { code?: unknown }).code === \"string\") {\n\t\treturn (error as { code: string }).code;\n\t}\n\treturn \"subagent_submit_rejected\";\n}\n\n/** 文本块抽取:content 为字符串或 text 块数组;无文本返回 undefined。 */\nfunction messageText(content: unknown): string | undefined {\n\tif (typeof content === \"string\") return content === \"\" ? undefined : content;\n\tif (!Array.isArray(content)) return undefined;\n\tconst parts: string[] = [];\n\tfor (const item of content) {\n\t\tif (!item || typeof item !== \"object\") continue;\n\t\tconst block = item as Record<string, unknown>;\n\t\tif (block.type !== \"text\" || typeof block.text !== \"string\") continue;\n\t\tparts.push(block.text);\n\t}\n\tconst text = parts.join(\"\");\n\treturn text === \"\" ? undefined : text;\n}\n\n/** 最后一条带文本的 assistant 消息 → 有界 summary;找不到(或全无文本)省略。 */\nfunction assistantSummary(messages: readonly unknown[]): string | undefined {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (!message || typeof message !== \"object\") continue;\n\t\tconst record = message as Record<string, unknown>;\n\t\tif (record.role !== \"assistant\" && record.type !== \"assistant\") continue;\n\t\tconst text = messageText(record.content);\n\t\tif (text === undefined) continue;\n\t\treturn text.length <= SUMMARY_CHARS ? text : text.slice(0, SUMMARY_CHARS);\n\t}\n\treturn undefined;\n}\n\nfunction projectRecord(record: SchedulerTaskRecordV1): SubagentDelegateTaskProjectionV1 {\n\tconst summary = assistantSummary(record.messages);\n\treturn {\n\t\ttaskId: record.taskId,\n\t\tstatus: record.status,\n\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t...(record.reason === undefined ? {} : { reason: record.reason }),\n\t\t...(record.truncated ? { truncated: true as const } : {}),\n\t\tmessageCount: record.messages.length,\n\t\t...(record.sessionId === undefined || record.sessionId === \"\" ? {} : { sessionId: record.sessionId }),\n\t\t...(summary === undefined ? {} : { summary }),\n\t\t...(record.taskOutcome === undefined ? {} : { taskOutcome: record.taskOutcome }),\n\t\t...(record.refusalReason === undefined ? {} : { refusalReason: record.refusalReason }),\n\t};\n}\n\n/**\n * 血缘深度(承载退役切片 2,Option A):沿 S2 落盘头行的 `parentAgentSession` 上行,\n * 返回本会话的祖先层数。root(无头行/非落盘会话)返回 undefined——不设限。\n * 最多上行走 `maxWalk` 步(有界,防环按步数截断)。\n *\n * 迁移注记(D-075 S4 第三批):宿主实现的逐头回读(`readAgentSession` 循环)改为\n * plugin-sdk 的 `readAgentSessionLineage`——同一落盘契约的只读首行实现。语义对齐点:\n * `ancestors` 只含**可解析**的祖先,而宿主 depth 对\"父指针存在但父会话未落盘\"的\n * 最后一条边也计数(root 在内存里、文件不可达是常态),因此 dangling 边补 +1;\n * `truncated`(走满 maxWalk 步仍有可解析父)时 ancestors.length 与宿主的 maxWalk\n * 返回值一致。\n */\nfunction lineageDepth(sessionId: string, agentDir: string, maxWalk: number): number | undefined {\n\tconst lineage = readAgentSessionLineage(agentDir, sessionId, maxWalk);\n\tif (lineage.self === undefined) return undefined;\n\tconst last = lineage.ancestors.at(-1) ?? lineage.self;\n\tconst danglingParent = last.parentAgentSession !== undefined && last.parentAgentSession !== last.sessionId;\n\treturn lineage.ancestors.length + (danglingParent && !lineage.truncated ? 1 : 0);\n}\n\n/**\n * 第一方编排 capability:一个调度器实例 + `subagent_run` 工具 + 释放登记。\n * 只消费公共 API(session/agents/sessionAbortSignal/tools),不 import core 内部私有模块。\n */\nexport function createCapability(\n\tapi: CapabilityAPI,\n\toptions?: SubagentDelegateCapabilityOptions,\n): DisposableRegistration[] {\n\tconst session = api.session;\n\tconst agents = api.agents;\n\tif (!session) throw new Error(\"subagent-delegate requires the session capability\");\n\t// 通信面配置键已移除(D-060 裁决 15):出现即装载期失败,不留\"配置了但没生效\"的假象。\n\tif (api.config.communication !== undefined) {\n\t\tthrow new Error(\n\t\t\t\"subagent-delegate config communication was removed (D-060 ruling 15): communication tools register unconditionally; remove the key\",\n\t\t);\n\t}\n\tconst wiring = options?.communicationWiring;\n\t// 子侧通信面(子→父 / 子↔子):只要宿主接线了 post 通道就注册——\n\t// 叶子会话(无 agents)只拿这一面;获准自建会话(D-060 S5,agents 在场)两面都要:\n\t// 它既能向下委派(parent face),也仍能向自己的父上抛/收兄弟消息(child face)。\n\tconst childTools: DisposableRegistration[] = [];\n\t// 子侧通信面合并为单工具 `subagent_message`(2026-10-21 用户裁决:大类型一个工具,\n\t// 用 type + 参数区分)。可用 type 取决于宿主接线:只接 post 通道的叶子会话只有\n\t// escalate;接了兄弟通道的会话有 send/inbox。\n\tconst escalateSpec =\n\t\twiring?.postEscalate === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_message.escalate\",\n\t\t\t\t\tlabel: \"Escalate to parent\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Send one bounded message up to your parent agent. It does NOT interrupt the parent; it is delivered \" +\n\t\t\t\t\t\t\"with the parent's next task result. Use it for a blocker or a key finding the task result alone would lose.\",\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\tdescription: `Message to the parent (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes)`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_message type \"escalate\"');\n\t\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\t\tif (text.trim() === \"\") {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`subagent_message type \"escalate\" requires non-empty text`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twiring.postEscalate?.(text);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { delivered: true, note: \"the parent reads this with its next task result\" };\n\t\t\t\t\t},\n\t\t\t\t});\n\t// 任务级拒绝出口:子代理声明\"活着但不做这个任务\"的结构化终局声明。不调用\n\t// postEscalate、不触发任何取消/结算(子侧触不到父 runtime)——调度器在 settle 时\n\t// 从 transcript 里的本调用记录检测(取最后一条),随自然成功结算附 taskOutcome。\n\t// 随 subagent_message 工具的既有注册条件走,不新增独立注册开关。\n\t// 缺参报错必须教形状:只说\"拒了什么\"模型无法自纠,会重试同错直至放弃,\n\t// refusalReason 随之丢失。入参字段名随 subagent_message 面内 \"text\" 惯例——\n\t// 真实模型四轮取证:schema 含 reason 时模型仍按 text 先验传参(运行时设计 §4.4)。\n\tconst refuseInputError = (): SubagentDelegateError =>\n\t\tnew SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t'subagent_message type \"refuse\" requires {\"type\":\"refuse\",\"text\":\"<why>\"} — the refusal explanation goes in \"text\" like your other messages',\n\t\t);\n\tconst refuseSpec = toolSpec({\n\t\tname: \"subagent_message.refuse\",\n\t\tlabel: \"Refuse this task\",\n\t\tdescription:\n\t\t\t\"Declare this task refused: you are alive but will not do this task (missing access, out of scope, or in \" +\n\t\t\t\"conflict with your instructions). The refusal is recorded as the terminal declaration for the task — the \" +\n\t\t\t'parent reads it as taskOutcome \"refused\" with your reason. Do not use it to report partial progress; ' +\n\t\t\t\"escalate is for that.\",\n\t\tparameters: Type.Object({\n\t\t\ttext: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: \"Why this task is refused; recorded verbatim as the task's refusalReason for the parent\",\n\t\t\t}),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, 'subagent_message type \"refuse\"');\n\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\tif (text.trim() === \"\") {\n\t\t\t\tthrow refuseInputError();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trefused: true,\n\t\t\t\tnote: \"Your refusal has been recorded as the terminal declaration for this task. End your turn now and do not call any other tools.\",\n\t\t\t};\n\t\t},\n\t});\n\tconst sendSpec =\n\t\twiring?.sendSibling === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_message.send\",\n\t\t\t\t\tlabel: \"Message a sibling\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Send one bounded message to a sibling subagent (a child of the same parent), addressed by its sessionId. \" +\n\t\t\t\t\t\t\"Cross-family addressing is rejected. This channel is for data and intermediate artifacts only: task \" +\n\t\t\t\t\t\t\"assignment and result acceptance stay with the parent agent. Sibling messages are visible to the parent \" +\n\t\t\t\t\t\t\"(audited as excerpts with task results).\",\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\tto: Type.String({ description: \"Recipient child session id\" }),\n\t\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\tdescription: `Message (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes)`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_message type \"send\"');\n\t\t\t\t\t\tconst to = typeof input.to === \"string\" ? input.to : \"\";\n\t\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\t\tif (to === \"\" || text.trim() === \"\") {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`subagent_message type \"send\" requires to and non-empty text`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twiring.sendSibling?.(to, text);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { delivered: true };\n\t\t\t\t\t},\n\t\t\t\t});\n\tconst inboxSpec =\n\t\twiring?.sendSibling === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_message.inbox\",\n\t\t\t\t\tlabel: \"Read sibling inbox\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Read and clear the earliest bounded messages your siblings sent you (subagent_message type \"send\"). ' +\n\t\t\t\t\t\t\"Messages are consumed by this call; poll it when coordination is expected. The sibling channel carries \" +\n\t\t\t\t\t\t\"data and intermediate artifacts only — assignment and acceptance stay with the parent, which can audit \" +\n\t\t\t\t\t\t\"this traffic.\",\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\tlimit: Type.Optional(\n\t\t\t\t\t\t\tType.Number({ description: \"Max messages to take (1..20, default 10)\", minimum: 1, maximum: 20 }),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_message type \"inbox\"');\n\t\t\t\t\t\tconst requested = input.limit === undefined ? 10 : Number(input.limit);\n\t\t\t\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > 20) {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`subagent_message type \"inbox\" limit must be an integer in 1..20`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst messages = wiring.drainInbox?.(requested) ?? [];\n\t\t\t\t\t\treturn { messages };\n\t\t\t\t\t},\n\t\t\t\t});\n\tif (escalateSpec !== undefined || sendSpec !== undefined) {\n\t\tconst messageOps = [\n\t\t\t...(escalateSpec === undefined ? [] : [\"escalate\"]),\n\t\t\t...(sendSpec === undefined ? [] : [\"send\", \"inbox\"]),\n\t\t\t\"refuse\",\n\t\t];\n\t\tchildTools.push(\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_message\",\n\t\t\t\tlabel: \"Message a subagent\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"One bounded messaging surface. \" +\n\t\t\t\t\t[\n\t\t\t\t\t\t...(escalateSpec === undefined\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: ['type=\"escalate\": send a message up to your parent (delivered with its next task result)']),\n\t\t\t\t\t\t...(sendSpec === undefined\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t'type=\"send\": send data or an intermediate artifact to a sibling subagent by sessionId',\n\t\t\t\t\t\t\t\t\t'type=\"inbox\": read and clear messages your siblings sent you',\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t'type=\"refuse\": declare this task refused with an explanation in \"text\" (a terminal declaration for the task; the parent sees taskOutcome \"refused\" — end your turn right after)',\n\t\t\t\t\t].join(\"; \") +\n\t\t\t\t\t\"; task assignment and result acceptance stay with the parent agent, which can audit sibling traffic.\",\n\t\t\t\tparameters: Type.Object({\n\t\t\t\t\ttype: Type.Union(\n\t\t\t\t\t\tmessageOps.map((op) => Type.Literal(op)),\n\t\t\t\t\t\t{ description: `Operation: ${messageOps.join(\" | \")}` },\n\t\t\t\t\t),\n\t\t\t\t\t...optionalParams(\n\t\t\t\t\t\tescalateSpec?.parameters.properties,\n\t\t\t\t\t\tsendSpec?.parameters.properties,\n\t\t\t\t\t\tinboxSpec?.parameters.properties,\n\t\t\t\t\t\t// refuse 无条件创建,属性总是合入:type 进了 messageOps 而 schema 漏合\n\t\t\t\t\t\t// = 模型被 schema 约束永远发不出该 type 的合法参数(教形状也救不回)。\n\t\t\t\t\t\trefuseSpec.parameters.properties,\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\tconst input = objectInput(first, second, \"subagent_message\");\n\t\t\t\t\tconst type = readDiscriminator(input, \"subagent_message\", messageOps);\n\t\t\t\t\tif (type === \"escalate\") {\n\t\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"text\"]);\n\t\t\t\t\t\treturn escalateSpec?.execute(withoutDiscriminator(input), second);\n\t\t\t\t\t}\n\t\t\t\t\tif (type === \"send\") {\n\t\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"to\", \"text\"]);\n\t\t\t\t\t\treturn sendSpec?.execute(withoutDiscriminator(input), second);\n\t\t\t\t\t}\n\t\t\t\t\tif (type === \"refuse\") {\n\t\t\t\t\t\t// text 前置校验先于外参拒绝(教形状优先于 fail-closed):缺 text 时先给出\n\t\t\t\t\t\t// 可自纠的形状;合法 text 带外来参数(如旧先验的 reason)仍走\n\t\t\t\t\t\t// rejectForeignParams,不放松。\n\t\t\t\t\t\tconst text = input.text;\n\t\t\t\t\t\tif (typeof text !== \"string\" || text.trim() === \"\") throw refuseInputError();\n\t\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"text\"]);\n\t\t\t\t\t\treturn refuseSpec.execute(withoutDiscriminator(input), second);\n\t\t\t\t\t}\n\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"limit\"]);\n\t\t\t\t\treturn inboxSpec?.execute(withoutDiscriminator(input), second);\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\t// 调度器限额:options.limits 显式覆盖优先;否则由配置通道逐键取值,缺省回落到调度器默认。\n\tconst configuredLimits = {\n\t\tmaxConcurrentSubagents: configInt(api, \"maxConcurrentSubagents\", 1),\n\t\tmaxQueueDepth: configInt(api, \"maxQueueDepth\", 1),\n\t\tmaxPromptBytes: configInt(api, \"maxPromptBytes\", 1),\n\t\tmaxMetadataBytes: configInt(api, \"maxMetadataBytes\", 1),\n\t\tmaxResultBytes: configInt(api, \"maxResultBytes\", 1),\n\t\tmaxMessages: configInt(api, \"maxMessages\", 1),\n\t\tdrainTimeoutMs: configInt(api, \"drainTimeoutMs\", 1),\n\t\tmaxRetainedRecords: configInt(api, \"maxRetainedRecords\", 1),\n\t};\n\tconst limits =\n\t\toptions?.limits ??\n\t\t(Object.values(configuredLimits).every((value) => value === undefined)\n\t\t\t? undefined\n\t\t\t: (configuredLimits as SubagentRuntimeLimitsV1));\n\tconst sessionAbortSignal = api.sessionAbortSignal;\n\n\t/**\n\t * adapter 选择(优先级):宿主显式 adapter > 配置驱动的 pooled runner 池 > 共享模式(裸 primitive)。\n\t * pooled 关闭时零额外进程;启用时 entryPath 必须显式给出(不猜安装形态),缺失即装载失败。\n\t * 退役切片 1(生产默认 pooled,D-075 S4 第三批收敛):自动池化旗标不再由宿主 options\n\t * 注入,改由既有配置键 `runnerEntryAuto: true` 驱动——未显式配置 `runnerMaxProcesses`/\n\t * `runnerEntryPath` 且未注入 spawner 时,若 self-invocation 可解析则自动以池化装配\n\t * (默认 2 个 runner、每池 12 会话);不可解析则保持共享模式。\n\t */\n\tconst pool: SubagentRunnerPoolV1 | undefined = (() => {\n\t\tconst configuredMaxProcesses = configInt(api, \"runnerMaxProcesses\", 0);\n\t\tlet runnerMaxProcesses = resolveInt(undefined, configuredMaxProcesses, 0, 0, \"runnerMaxProcesses\");\n\t\tconst selfInvocation = resolveSelfInvocationV1();\n\t\tconst autoPool =\n\t\t\trunnerMaxProcesses === 0 &&\n\t\t\tapi.config.runnerEntryAuto === true &&\n\t\t\toptions?.runnerSpawner === undefined &&\n\t\t\ttypeof api.config.runnerEntryPath !== \"string\";\n\t\tif (autoPool && selfInvocation !== undefined) runnerMaxProcesses = 2;\n\t\tif (runnerMaxProcesses === 0) return undefined;\n\t\t// runner 配置存在即做一致性校验(即使宿主注入了 adapter,错误配置也不得静默):\n\t\t// 非法值/缺失入口/容量不覆盖并发都在装载期暴露。\n\t\tconst maxSessionsPerRunner = resolveInt(\n\t\t\tundefined,\n\t\t\tconfigInt(api, \"runnerMaxSessionsPerRunner\", 1),\n\t\t\t8,\n\t\t\t1,\n\t\t\t\"runnerMaxSessionsPerRunner\",\n\t\t);\n\t\tconst idleRunnerTimeoutMs = resolveInt(\n\t\t\tundefined,\n\t\t\tconfigInt(api, \"runnerIdleTimeoutMs\", 1),\n\t\t\t300_000,\n\t\t\t1,\n\t\t\t\"runnerIdleTimeoutMs\",\n\t\t);\n\t\tconst idleCheckIntervalMs = resolveInt(\n\t\t\tundefined,\n\t\t\tconfigInt(api, \"runnerSweepIntervalMs\", 1),\n\t\t\t60_000,\n\t\t\t1,\n\t\t\t\"runnerSweepIntervalMs\",\n\t\t);\n\t\t// 有效并发取\"已配并发\"或调度器默认值:容量校验必须在未显式配置并发时也生效,\n\t\t// 否则池化容量小于默认并发(12)会被静默容忍,直到运行期才以 capacity 错误暴露。\n\t\tconst effectiveMaxConcurrent =\n\t\t\toptions?.limits?.maxConcurrentSubagents ??\n\t\t\tlimits?.maxConcurrentSubagents ??\n\t\t\tDEFAULT_SUBAGENT_LIMITS.maxConcurrentSubagents;\n\t\t// spawn 工厂优先用注入;否则要求配置显式给出 runner 入口(装载期校验,不推迟到首次 spawn)。\n\t\tlet spawnRunner = options?.runnerSpawner;\n\t\tif (spawnRunner === undefined) {\n\t\t\tconst entryPath = api.config.runnerEntryPath;\n\t\t\tif (typeof entryPath === \"string\" && entryPath.trim() !== \"\") {\n\t\t\t\tconst nodeArgs = Array.isArray(api.config.runnerNodeArgs)\n\t\t\t\t\t? api.config.runnerNodeArgs.filter((value): value is string => typeof value === \"string\")\n\t\t\t\t\t: entryPath.endsWith(\".ts\")\n\t\t\t\t\t\t? [\"--experimental-strip-types\"]\n\t\t\t\t\t\t: [];\n\t\t\t\tconst spawner = createNodeSubagentRunnerSpawnerV1({ entryPath, nodeArgs });\n\t\t\t\tspawnRunner = () => spawner();\n\t\t\t} else if (autoPool) {\n\t\t\t\t// 退役切片 1:CLI 宿主的自动池化——self-invocation 已在上方预检可解析。\n\t\t\t\tconst self = selfInvocation as SelfInvocationV1;\n\t\t\t\tconst nodeArgs = Array.isArray(api.config.runnerNodeArgs)\n\t\t\t\t\t? api.config.runnerNodeArgs.filter((value): value is string => typeof value === \"string\")\n\t\t\t\t\t: [...self.nodeArgs];\n\t\t\t\tconst spawner = createNodeSubagentRunnerSpawnerV1({ entryPath: self.entryPath, nodeArgs });\n\t\t\t\tspawnRunner = () => spawner();\n\t\t\t} else if (api.config.runnerEntryAuto === true) {\n\t\t\t\t// 显式开启的零配置路径:把当前进程的启动方式当作 runner 入口(见 self-invocation)。\n\t\t\t\tconst self = resolveSelfInvocationV1();\n\t\t\t\tif (self === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"subagent-delegate config runnerEntryAuto is enabled but the current process has no script entry \" +\n\t\t\t\t\t\t\t\"(compiled binaries must set runnerEntryPath explicitly)\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst nodeArgs = Array.isArray(api.config.runnerNodeArgs)\n\t\t\t\t\t? api.config.runnerNodeArgs.filter((value): value is string => typeof value === \"string\")\n\t\t\t\t\t: [...self.nodeArgs];\n\t\t\t\tconst spawner = createNodeSubagentRunnerSpawnerV1({ entryPath: self.entryPath, nodeArgs });\n\t\t\t\tspawnRunner = () => spawner();\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"subagent-delegate config runnerEntryPath is required when runnerMaxProcesses >= 1 \" +\n\t\t\t\t\t\t\"(or enable runnerEntryAuto to reuse this process's own entry)\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (options?.adapter !== undefined) return undefined;\n\t\t// 开发态 runner(TS 引导的 CLI)冷启动可能超过默认 5s 握手预算,宿主可配置放宽。\n\t\tconst handshakeTimeoutMs = configInt(api, \"runnerHandshakeTimeoutMs\", 1);\n\t\treturn createPooledAgentTaskAdapterV1({\n\t\t\tspawnRunner,\n\t\t\tmaxRunnerProcesses: runnerMaxProcesses,\n\t\t\tmaxSessionsPerRunner,\n\t\t\tidleRunnerTimeoutMs,\n\t\t\tidleCheckIntervalMs,\n\t\t\tmaxConcurrentSubagents: effectiveMaxConcurrent,\n\t\t\t...(handshakeTimeoutMs === undefined ? {} : { handshakeTimeoutMs }),\n\t\t\tonDiagnostic: (message) => {\n\t\t\t\tapi.logger?.debug?.(`subagent-delegate runner: ${message}`);\n\t\t\t},\n\t\t});\n\t})();\n\t// 桥转换只在 agents 暴露任务面(create)时成立(承载退役切片 2:reader-only 宿主的\n\t// agents 只承载回读,不承载委派)。父面 = 宿主 adapter > 配置/自动池 > 桥。\n\tconst baseAdapter =\n\t\toptions?.adapter ?? pool ?? (agents?.create === undefined ? undefined : createAgentTaskApiAdapterV1(agents));\n\n\t// 门控(承载退役):父面 = 池或宿主 adapter 任一在即可,不再依赖 agents 能力——\n\t// runner 叶子带自动池化(退役切片 1)因此同样获得委派父面(嵌套委派,深度硬限兜底)。\n\t// 无任何 adapter 时委派不适用:只保留子侧通信面(fail-closed)。\n\tif (baseAdapter === undefined) {\n\t\tif (childTools.length === 0) {\n\t\t\tapi.logger?.debug?.(\n\t\t\t\t\"subagent-delegate: no runner pool and no host adapter; delegation tool stays unregistered\",\n\t\t\t);\n\t\t\treturn [];\n\t\t}\n\t\treturn childTools;\n\t}\n\t// 配置错误在装载时 fail fast,不让 0/负数静默地拒绝每一次调用或永不超时。\n\tconst maxTasksPerCall = resolveInt(\n\t\toptions?.maxTasksPerCall,\n\t\tconfigInt(api, \"maxTasksPerCall\", 1),\n\t\tDEFAULT_MAX_TASKS_PER_CALL,\n\t\t1,\n\t\t\"maxTasksPerCall\",\n\t);\n\tconst taskTimeoutMs = resolveInt(\n\t\toptions?.taskTimeoutMs,\n\t\tconfigInt(api, \"taskTimeoutMs\", 1),\n\t\tDEFAULT_TASK_TIMEOUT_MS,\n\t\t1,\n\t\t\"taskTimeoutMs\",\n\t);\n\t// 嵌套深度硬限(承载退役切片 2,Option A):runner 叶子带自动池化后同样获得委派\n\t// 父面,递归边界由血缘深度兜底——本会话已是第 maxNestedDepth 层时再委派按\n\t// `subagent_depth_exceeded` 结构化拒绝。与 S5 shared 侧的深度上限同一默认\n\t// (DEFAULT_SUBAGENT_MAX_NESTED_DEPTH = 2 层)。\n\tconst maxNestedDepth = resolveInt(\n\t\tundefined,\n\t\tconfigInt(api, \"maxNestedDepth\", 1),\n\t\tDEFAULT_SUBAGENT_MAX_NESTED_DEPTH,\n\t\t1,\n\t\t\"maxNestedDepth\",\n\t);\n\t// 每父级累计可创建的子代理总量(承载退役切片 2,Option A;与 S5 shared 侧同一默认\n\t// DEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT):对**非 resume** 的每次 submit 计数,\n\t// 超限按 `subagent_child_quota` 拒绝。\n\tconst maxTotalPerParent = resolveInt(\n\t\tundefined,\n\t\tconfigInt(api, \"maxTotalPerParent\", 0),\n\t\tDEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT,\n\t\t0,\n\t\t\"maxTotalPerParent\",\n\t);\n\tlet createdSubagentCount = 0;\n\t// background 配置键已移除(D-060 裁决 15,2026-10-03):后台委派是功能基本面,\n\t// 无条件注册(`subagent_run` 的 background 参数与 `subagent_task` 的 cancel / steer\n\t// 随之常在);键出现即装载期失败,不留\"配置了但没生效\"的假象。\n\tif (api.config.background !== undefined) {\n\t\tthrow new Error(\n\t\t\t\"subagent-delegate config background was removed (D-060 ruling 15): background delegation registers unconditionally; remove the key\",\n\t\t);\n\t}\n\t// 角色目录 + 方案关联在装载期解析:非法文件/非法关联直接失败,不留\"配置了但没生效\"的假象。\n\tconst roleCatalog =\n\t\toptions?.roles === undefined\n\t\t\t? { roles: new Map<string, SubagentDelegateRoleV1>(), dangling: [], brokenUnassociated: [] }\n\t\t\t: resolveSubagentRoleCatalog(options.roles);\n\tconst diskRoles = roleCatalog.roles;\n\tfor (const id of roleCatalog.dangling) {\n\t\tapi.logger?.warn?.(\n\t\t\t`suite associations.roles lists \"${id}\" but no role file exists: ${subagentRoleCatalogPath(\n\t\t\t\toptions?.roles?.agentDir ?? \"\",\n\t\t\t\tid,\n\t\t\t)} (role stays unavailable for this session)`,\n\t\t);\n\t}\n\tfor (const id of roleCatalog.brokenUnassociated) {\n\t\tapi.logger?.warn?.(\n\t\t\t`role file for \"${id}\" is invalid and is not associated by this suite; ignored (fix it or remove the file)`,\n\t\t);\n\t}\n\t// 会话角色水合(D-081):磁盘目录解析之后从分支快照重建(最近一条可解析快照,\n\t// 损坏向前回退并 warn,全部不可解析则为空);磁盘优先、16 个 / 2000 字符菜单\n\t// (磁盘+会话合并计算)都是**暴露**预算——未暴露的项保留在数据表里,不删除。\n\tconst hydratedRoles = mergeSubagentRoles(diskRoles, readSessionRoles(session, api.logger), api.logger);\n\t/**\n\t * 会话角色数据表 = 快照里的**全部**合法会话角色(含被磁盘遮蔽/未暴露项):\n\t * 先 appendEntry 成功再提交,写失败即注册失败(内存与文件不背离)。持久化写它——\n\t * 视图收窄(遮蔽/超预算)不抹掉数据。\n\t */\n\tconst sessionRoles = new Map<string, SubagentDelegateRoleV1>(hydratedRoles.sessionRoles);\n\t/** 可用集 = 磁盘 ∪ 通过暴露预算的会话角色(磁盘优先):resolveRole/菜单/role 枚举只看它。 */\n\tconst roles = new Map<string, SubagentDelegateRoleV1>(hydratedRoles.roles);\n\tconst renderRoleMenu = (): string =>\n\t\t[...roles.values()]\n\t\t\t.sort((left, right) => (left.id < right.id ? -1 : 1))\n\t\t\t.map((role) => `${role.id} — ${role.description}`)\n\t\t\t.join(\"; \");\n\t/** 全量快照落盘(append-only):只存会话角色,绝不把磁盘角色写进条目。 */\n\tconst persistSessionRoles = (next: Iterable<SubagentDelegateRoleV1>): void => {\n\t\tconst snapshot: SubagentSessionRolesStateV1 = {\n\t\t\tversion: 1,\n\t\t\troles: Object.freeze([...next].map(toSessionRoleRecord)),\n\t\t};\n\t\tsession.appendEntry(SESSION_ROLE_STATE_ENTRY, snapshot);\n\t};\n\n\t/**\n\t * D-044 §5.6:把支持进度面的 adapter 装饰一层,累计\"运行中 step\"与最近一条\n\t * 摘要,供工具 onUpdate 节流上报父 UI(只回计数与摘要,不回正文)。\n\t */\n\tconst progressState = { steps: 0, last: undefined as string | undefined };\n\tconst progressUnsubscribes = new Set<() => void>();\n\tconst adapter: AgentTaskAdapter = {\n\t\tcreate: async (request) => {\n\t\t\tconst requestedProfile = request.metadata?.[AGENT_TASK_CHILD_PROFILE_KEY];\n\t\t\tconst host = await baseAdapter.create(request);\n\t\t\t// 档案核验:宿主必须把收窄落到了子会话上,且要能自证(getActiveTools/getModel)。\n\t\t\t// 核验失败 = 上层以为的\"只读评审者\"没有生效,因此这里就地失败并回收该子会话,\n\t\t\t// 而不是让它带着比预期更大的权限去跑。\n\t\t\tif (requestedProfile !== undefined) {\n\t\t\t\tconst violation = verifyChildProfileApplied(host, requestedProfile);\n\t\t\t\tif (violation !== undefined) {\n\t\t\t\t\tawait host.dispose().catch(() => {});\n\t\t\t\t\tthrow new SubagentDelegateError(\"subagent_profile_not_applied\", violation);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst taskId = host.session.getSessionId();\n\t\t\tconst unsubscribe = subscribeTaskProgressV1(baseAdapter, taskId, (message) => {\n\t\t\t\tprogressState.steps += 1;\n\t\t\t\tif (message !== undefined) progressState.last = message;\n\t\t\t});\n\t\t\tprogressUnsubscribes.add(unsubscribe);\n\t\t\treturn host;\n\t\t},\n\t};\n\n\tconst runtime: SubagentRuntimeV1 = createSubagentRuntime({\n\t\tadapter,\n\t\towner: capabilityManifest.id,\n\t\tparentSessionId: session.getSessionId(),\n\t\t...(sessionAbortSignal === undefined ? {} : { parentSignal: sessionAbortSignal }),\n\t\t...(limits === undefined ? {} : { limits }),\n\t\t...(api.logger === undefined ? {} : { logger: api.logger }),\n\t\t// Durable replay assembly(2026-10-13):宿主 durable 设施原样下传(形状即\n\t\t// runtime 的 results 契约);缺席 = 不持久化(回读 undefined,既有语义)。\n\t\t...(options?.results === undefined ? {} : { results: options.results }),\n\t});\n\n\t// P1b(联网检索设计 §5.6):把调度器的 one-shot 面经能力目录暴露为公共能力\n\t// `agent-forge.agent-task-scheduler@1`(消费方经目录调用)。requester\n\t// 作用域绑定本会话(owner + 当前父会话 id),调用方不可传。registration 放在返回\n\t// 数组的 runtime 项之后:逆序 dispose 时先摘能力、再释放调度器。\n\tconst schedulerRegistration = createAgentTaskSchedulerCapabilityProviderV1({\n\t\truntime,\n\t\towner: capabilityManifest.id,\n\t\tparentSessionId: session.getSessionId(),\n\t})(api);\n\n\t// ---------------------------------------------------------------------------\n\t// 生产 tick 驱动(设计 §5.7):调度器的死线强制点是显式 tick(),本消费者挂载唯一\n\t// 的墙钟驱动——存在带未决死线的在途后台任务时才启动 ticker(惰性启停),每跳只调\n\t// runtime.tick(),不携带任何策略。无未决死线的用法零定时器;dispose 必停。\n\t// ---------------------------------------------------------------------------\n\n\t/** 受监视的后台任务:taskId -> 提交时的绝对死线(仅作记账,强制语义全在 tick)。 */\n\tconst pendingDeadlines = new Map<string, number>();\n\tlet deadlineTicker: ReturnType<typeof setInterval> | undefined;\n\n\tconst ensureDeadlineTicker = (): void => {\n\t\tif (deadlineTicker !== undefined || pendingDeadlines.size === 0) return;\n\t\tdeadlineTicker = setInterval(() => {\n\t\t\t// tick 自身不抛(终态投影等内部故障均已兜底);保险兜底不吞任务面,下一跳重试。\n\t\t\ttry {\n\t\t\t\truntime.tick();\n\t\t\t} catch {\n\t\t\t\t// 留待下一跳;显式 tick / cancel 仍可用。\n\t\t\t}\n\t\t}, BACKGROUND_DEADLINE_TICK_INTERVAL_MS);\n\t\tdeadlineTicker.unref?.();\n\t};\n\n\tconst stopDeadlineTickerIfIdle = (): void => {\n\t\tif (deadlineTicker === undefined || pendingDeadlines.size > 0) return;\n\t\tclearInterval(deadlineTicker);\n\t\tdeadlineTicker = undefined;\n\t};\n\n\tconst unwatchBackgroundDeadline = (taskId: string): void => {\n\t\tif (!pendingDeadlines.delete(taskId)) return;\n\t\tstopDeadlineTickerIfIdle();\n\t};\n\n\t/** 任务结算(含被死线强制、取消、异常)即解除监视;reject 通道(persist 失败等)同样解除。 */\n\tconst watchBackgroundDeadline = (handle: SubagentTaskHandleV1, deadlineAt: number): void => {\n\t\tpendingDeadlines.set(handle.id, deadlineAt);\n\t\tensureDeadlineTicker();\n\t\tvoid handle\n\t\t\t.result()\n\t\t\t.catch(() => {})\n\t\t\t.then(() => unwatchBackgroundDeadline(handle.id));\n\t};\n\n\tconst stopDeadlineTicker = (): void => {\n\t\tif (deadlineTicker !== undefined) {\n\t\t\tclearInterval(deadlineTicker);\n\t\t\tdeadlineTicker = undefined;\n\t\t}\n\t\tpendingDeadlines.clear();\n\t};\n\n\t/**\n\t * `subagent_run` 的定义按**当前角色表**现场构建(D-081 即时生效):set/remove 之后\n\t * 以同 owner 同名重注册(runtime 语义 = 更新)让新菜单与 `role` 参数枚举在父会话的\n\t * 下一次模型请求即可见,不需要重启或新建会话。\n\t */\n\tconst buildRunToolDefinition = () => ({\n\t\tname: \"subagent_run\",\n\t\tlabel: \"Run subagents\",\n\t\t// 折叠态一行人类可读摘要,结果 JSON 不进转录(2026-10-19 用户裁决);\n\t\t// 结构性组件、无 TUI import(goal/plan/alignment 同一边界)。\n\t\trenderCall: createSubagentRunRenderCall((roleId) => roles.get(roleId)?.description),\n\t\trenderResult: subagentRunResultRenderer,\n\t\tdescription:\n\t\t\t`Delegate 1..${maxTasksPerCall} independent subagent tasks in one call and return their bounded terminal results. ` +\n\t\t\t\"Each prompt runs in its own isolated child session. Only status, reason codes, message counts and a shortened \" +\n\t\t\t\"final-assistant summary come back; ask a child for more detail in its prompt if you need it.\" +\n\t\t\t\" Optionally pass `context` — file:line anchors and commands already tried and failed are rendered as a \" +\n\t\t\t\"header block at the top of each child prompt (pointers only).\" +\n\t\t\t// fork-join 推荐模式(D-060 裁决 14):大任务拆并行块 + 最终组合任务,中间产物\n\t\t\t// 留子层、主上下文不膨胀;通知粒度——结算必然回注但只有组合任务的报告需验收。\n\t\t\t\" For large splittable work prefer fork-join: launch the parallel chunk tasks with background:true, then submit \" +\n\t\t\t'one final assembly task (a separate background call) that gathers the chunks with subagent_task({type: \"result\", taskId, waitMs}) ' +\n\t\t\t\"— intermediate results stay in the child layer and only the assembled final report enters your context. Every \" +\n\t\t\t\"task's settlement is announced to you (agent-task-settled), but notifications are not per-task acceptances: \" +\n\t\t\t\"accept and act on (todos/goals/next steps) only the final assembly task's report; other settled lines are \" +\n\t\t\t\"status only.\" +\n\t\t\t// 任务级拒绝:子代理可能声明不做该任务;投影 taskOutcome \"refused\" 即终局声明,\n\t\t\t// 父侧不得原样重派,先补条件或上报,细节经 result 回读 refusalReason。\n\t\t\t' A child may declare a task-level refusal via subagent_message (type \"refuse\"): when a settlement ' +\n\t\t\t'projection carries taskOutcome \"refused\", that refusal is final — do not re-dispatch the same task ' +\n\t\t\t\"unchanged; narrow the scope or provide what was missing, or report to the user, and read refusalReason \" +\n\t\t\t'via subagent_task (type \"result\").' +\n\t\t\t// 死线兜底(设计 §5.7):后台任务缺省 60 分钟死线,挂死任务到点被强制 timed_out。\n\t\t\t\" Background tasks carry a watchdog deadline by default (60 minutes; override per call with `deadlineMs`): \" +\n\t\t\t\"a task still running when its deadline passes is force-settled timed_out.\" +\n\t\t\t(roles.size === 0\n\t\t\t\t? \"\"\n\t\t\t\t: ` Configured subagent roles (pass \\`role\\`): ${renderRoleMenu()}. A role's instructions frame every task in the call; ` +\n\t\t\t\t\t\"a role with a narrowing profile also applies its tools/writeScope/mode/model/thinkingLevel to the child, verified after creation.\"),\n\t\tparameters: Type.Object({\n\t\t\tprompts: Type.Array(\n\t\t\t\tType.String({\n\t\t\t\t\tminLength: 1,\n\t\t\t\t\tdescription: \"Self-contained prompt for one subagent task; the child session sees no parent history\",\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tminItems: 1,\n\t\t\t\t\tdescription: `1..${maxTasksPerCall} independent prompts run as separate subagent tasks`,\n\t\t\t\t},\n\t\t\t),\n\t\t\tcontext: Type.Optional(\n\t\t\t\tType.Object(\n\t\t\t\t\t{\n\t\t\t\t\t\tanchors: Type.Optional(\n\t\t\t\t\t\t\tType.Array(\n\t\t\t\t\t\t\t\tType.Object({\n\t\t\t\t\t\t\t\t\tpath: Type.String({\n\t\t\t\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\t\t\t\tmaxLength: CONTEXT_PATH_MAX_CHARS,\n\t\t\t\t\t\t\t\t\t\tdescription: \"File path the child should start from\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tline: Type.Optional(\n\t\t\t\t\t\t\t\t\t\tType.Integer({ minimum: 1, description: \"Line number in path (positive integer)\" }),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tnote: Type.Optional(\n\t\t\t\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\t\t\t\tmaxLength: CONTEXT_NOTE_MAX_CHARS,\n\t\t\t\t\t\t\t\t\t\t\tdescription: \"One-line why-it-matters note\",\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t{ maxItems: CONTEXT_LIST_MAX_ITEMS },\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tfailedAttempts: Type.Optional(\n\t\t\t\t\t\t\tType.Array(\n\t\t\t\t\t\t\t\tType.Object({\n\t\t\t\t\t\t\t\t\tcommand: Type.String({\n\t\t\t\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\t\t\t\tmaxLength: CONTEXT_COMMAND_MAX_CHARS,\n\t\t\t\t\t\t\t\t\t\tdescription: \"Command that was already tried and failed\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tnote: Type.Optional(\n\t\t\t\t\t\t\t\t\t\tType.String({ maxLength: CONTEXT_NOTE_MAX_CHARS, description: \"One-line failure note\" }),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t{ maxItems: CONTEXT_LIST_MAX_ITEMS },\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Parent pointers rendered as a header block into each child prompt: file:line anchors and commands \" +\n\t\t\t\t\t\t\t\"already tried and failed.\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t\t...(roles.size === 0\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\trole: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t`Named subagent role applied to every prompt in this call; one of: ${[...roles.keys()].sort().join(\", \")}. ` +\n\t\t\t\t\t\t\t\t\t\"Omit for a generic task.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t// background(D-060 S6)在 properties 内组合:此前的 `{...parameters, background}`\n\t\t\t// 顶层展开把键放在 properties 之外,模型面 schema(anthropic 只取 schema.properties、\n\t\t\t// openai 原样透传)从未真正声明该参数——D-060 裁决 13 翻转后随默认注册修正,\n\t\t\t// 裁决 15 起开关形态退役、参数无条件声明。\n\t\t\tbackground: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Submit without waiting: return task tickets immediately and keep working; settled results are \" +\n\t\t\t\t\t\t'announced at your next model round and can be read with subagent_task (type \"result\", optionally waiting).',\n\t\t\t\t}),\n\t\t\t),\n\t\t\t// 死线兜底(设计 §5.7):仅后台合法——前台任务已有父侧 drain 预算,两种边界\n\t\t\t// 不混用;前台携带按 invalid_input 拒绝,不留\"配了但不生效\"的假象。\n\t\t\tdeadlineMs: Type.Optional(\n\t\t\t\tType.Integer({\n\t\t\t\t\tminimum: 1,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Watchdog deadline for this call's background tasks, in ms (positive integer; requires background: true). \" +\n\t\t\t\t\t\t`Default ${DEFAULT_BACKGROUND_TASK_DEADLINE_MS} (60 minutes).`,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: executeSubagentRun,\n\t});\n\n\tconst executeSubagentRun = async (\n\t\tfirst: unknown,\n\t\tsecond?: unknown,\n\t\t_signal?: AbortSignal,\n\t\tonUpdate?: (partial: { content: { type: \"text\"; text: string }[]; details: unknown }) => void,\n\t): Promise<SubagentDelegateResultV1 | SubagentDelegateBackgroundResultV1> => {\n\t\tconst input = objectInput(first, second);\n\t\tconst prompts = readPrompts(input.prompts, maxTasksPerCall);\n\t\tconst role = resolveRole(input.role, roles);\n\t\t// context 注入(设计 §2.3):形状/边界违规在此整体拒绝;两个列表皆空归一化为\n\t\t// undefined,后续路径与 context 缺省完全一致。\n\t\tconst contextBlock = renderDelegateContext(parseDelegateContext(input.context));\n\t\tconst background = input.background === true;\n\t\t// 死线兜底(设计 §5.7):正整数校验;仅后台合法——前台任务已有父侧 drain 预算,\n\t\t// 两种边界不混用,前台携带按 invalid_input 拒绝(不留\"配了但不生效\"的假象)。\n\t\tconst rawDeadlineMs = input.deadlineMs;\n\t\tif (rawDeadlineMs !== undefined) {\n\t\t\tif (typeof rawDeadlineMs !== \"number\" || !Number.isInteger(rawDeadlineMs) || rawDeadlineMs < 1) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_run deadlineMs must be a positive integer (ms), got ${JSON.stringify(rawDeadlineMs)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (background !== true) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\"subagent_run deadlineMs applies to background submissions only; pass background: true (foreground tasks are bounded by the drain timeout instead)\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst backgroundDeadlineMs =\n\t\t\tbackground === true ? (rawDeadlineMs ?? DEFAULT_BACKGROUND_TASK_DEADLINE_MS) : undefined;\n\t\t// 嵌套深度硬限(退役切片 2,Option A):沿 S2 血缘头回溯本会话层级,已达\n\t\t// maxNestedDepth 层时整次调用结构化拒绝——递归的兜底边界(不依赖模型自觉)。\n\t\t// resume 不涉深度(S5 裁定:续写既有会话不计新层级,走 `subagent_task` type `resume`)。\n\t\t// agentDir 单源(D-075 S4 第三批):显式 options 优先,缺省回落 api.host.agentDir。\n\t\tconst agentDir = options?.agentDir ?? api.host.agentDir ?? \"\";\n\t\tif (agentDir !== \"\") {\n\t\t\tconst depth = lineageDepth(session.getSessionId(), agentDir, maxNestedDepth + 2);\n\t\t\tif (depth !== undefined && depth + 1 > maxNestedDepth) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_depth_exceeded\",\n\t\t\t\t\t`this session already sits at nested depth ${depth}; delegation beyond maxNestedDepth ${maxNestedDepth} is refused`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// submit 是同步抛出契约(预算/队列/已释放),逐条捕获为条目级 rejected;\n\t\t// 全部提交完成后再逐条 drain,任务因此并行执行。\n\t\tconst pending: { index: number; handle: Promise<SubagentTaskHandleV1>; deadlineAt?: number }[] = [];\n\t\tconst tasks: (SubagentDelegateTaskProjectionV1 | undefined)[] = new Array(prompts.length).fill(undefined);\n\t\t// 回合级血缘(第 3 期第二批):提交动作发生在父回合工具阶段,此时 correlationId\n\t\t// 有值;getter 缺席或返回 undefined 时不写键(行为回退)。仅 subagent_run 新建\n\t\t// 路径携带——resume 打开既有会话、头定格,写键即\"要求了但不生效\"。\n\t\tconst turnCorrelationId = options?.getTurnCorrelationId?.();\n\t\tfor (let index = 0; index < prompts.length; index += 1) {\n\t\t\tconst prompt = prompts[index] as string;\n\t\t\t// 总量硬限(承载退役切片 2,Option A):本会话累计创建数达上限时按结构化\n\t\t\t// 码拒绝该条目(同批其余条目继续)。深度硬限在 execute 开头沿 S2 血缘头\n\t\t\t// 整调用拒绝(见上),不在此重复。\n\t\t\tif (createdSubagentCount >= maxTotalPerParent) {\n\t\t\t\ttasks[index] = {\n\t\t\t\t\ttaskId: \"\",\n\t\t\t\t\tstatus: \"rejected\",\n\t\t\t\t\treasonCode: \"subagent_child_quota\",\n\t\t\t\t\treason: `this session already created ${createdSubagentCount} child sessions (cap ${maxTotalPerParent})`,\n\t\t\t\t\tmessageCount: 0,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcreatedSubagentCount += 1;\n\t\t\t// 首条 prompt 组装(角色框定 + 可选父投影);context 头部块(有则)在最上、\n\t\t\t// 与后续内容空一行,无块时与现状逐字节一致。字节数仍走 submit 侧 maxPromptBytes\n\t\t\t// 预算,超限按预算拒绝而不是静默截断。\n\t\t\tconst composed =\n\t\t\t\trole === undefined\n\t\t\t\t\t? prompt\n\t\t\t\t\t: role.parentView === true\n\t\t\t\t\t\t? `${composeRolePrompt(role, prompt)}\\n\\n${composeParentView(session, session.getSessionId()) ?? \"\"}`.trim()\n\t\t\t\t\t\t: composeRolePrompt(role, prompt);\n\t\t\ttry {\n\t\t\t\t// 后台死线(设计 §5.7):提交即带绝对 deadlineAt(相对调度器墙钟),强制点在\n\t\t\t\t// 调度器 tick;死线只兜\"挂死任务\",正常结算远早于它。\n\t\t\t\tconst deadlineAt = backgroundDeadlineMs === undefined ? undefined : Date.now() + backgroundDeadlineMs;\n\t\t\t\tpending.push({\n\t\t\t\t\tindex,\n\t\t\t\t\thandle: runtime.submit({\n\t\t\t\t\t\tprompt: contextBlock === undefined ? composed : `${contextBlock}\\n\\n${composed}`,\n\t\t\t\t\t\t// 血缘(D-060 S1):父会话 id 随 metadata 过线,宿主写进子会话文件头。\n\t\t\t\t\t\t// 角色存在时 child profile 恒定携带(档案基线含 roleId,无收窄字段的角色\n\t\t\t\t\t\t// 同样有血缘——/agents 与 `subagent_task` 的 list/result 角色血缘对全部\n\t\t\t\t\t\t// 角色生效);`role.profile ?? { version: 1, roleId }` 是防御兜底——对\n\t\t\t\t\t\t// validateRoleDefinition 产出的角色不可达;回归测试钉住该行为。\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t[AGENT_TASK_PARENT_SESSION_KEY]: session.getSessionId(),\n\t\t\t\t\t\t\t...(turnCorrelationId === undefined ? {} : { [AGENT_TASK_PARENT_TRACE_KEY]: turnCorrelationId }),\n\t\t\t\t\t\t\t...(role === undefined\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t[AGENT_TASK_CHILD_PROFILE_KEY]:\n\t\t\t\t\t\t\t\t\t\t\trole.profile ?? ({ version: 1, roleId: role.id } satisfies AgentTaskChildProfileV1),\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...(deadlineAt === undefined ? {} : { deadlineAt }),\n\t\t\t\t\t}),\n\t\t\t\t\t...(deadlineAt === undefined ? {} : { deadlineAt }),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\ttasks[index] = {\n\t\t\t\t\ttaskId: \"\",\n\t\t\t\t\tstatus: \"rejected\",\n\t\t\t\t\treasonCode: reasonCodeOf(error),\n\t\t\t\t\treason: errorText(error),\n\t\t\t\t\tmessageCount: 0,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t// 后台委派(D-060 S6,配置门默认关):提交即返回票据,不 drain——任务挂在\n\t\t// 调度器上继续跑(会话级生命周期,父栅栏/会话销毁统一回收)。每个后台任务\n\t\t// 挂一个结算观察器:结算一行有界 JSON 进宿主 sink,随父的下一次模型轮次注入。\n\t\tif (background === true) {\n\t\t\tconst tickets: SubagentDelegateBackgroundTaskV1[] = [];\n\t\t\tfor (const item of pending) {\n\t\t\t\ttry {\n\t\t\t\t\tconst handle = await item.handle;\n\t\t\t\t\ttickets.push({ taskId: handle.id });\n\t\t\t\t\t// 死线监视(设计 §5.7):登记未决死线并惰性启动生产 tick 驱动;任务结算\n\t\t\t\t\t//(含被死线强制/取消/异常)即解除并在归零时停下 ticker。\n\t\t\t\t\tif (item.deadlineAt !== undefined) watchBackgroundDeadline(handle, item.deadlineAt);\n\t\t\t\t\tconst sink = options?.backgroundDigestSink;\n\t\t\t\t\tif (sink !== undefined) {\n\t\t\t\t\t\t// result() 的 reject 通道在 durable results store persist 失败时打开\n\t\t\t\t\t\t//(durable replay assembly 启用后真实存在):摘要观察失败不影响任务\n\t\t\t\t\t\t// 本身(终态已在调度器落库可查),也不产生未处理 rejection;宿主 sink\n\t\t\t\t\t\t// 自带守卫(sdk.ts 结算回注失败只记 hostLogger warn)。\n\t\t\t\t\t\tvoid handle\n\t\t\t\t\t\t\t.result()\n\t\t\t\t\t\t\t.then((record) => {\n\t\t\t\t\t\t\t\tsink(\n\t\t\t\t\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t\t\t\t\ttaskId: record.taskId,\n\t\t\t\t\t\t\t\t\t\tsessionId: record.sessionId,\n\t\t\t\t\t\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t\t\t\t\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t// 摘要观察失败不影响任务本身(终态已在调度器落库可查)。\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// submit 同步抛错已在上面捕获为条目级 rejected——后台票据只收成功提交。\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { background: true, tasks: tickets };\n\t\t}\n\t\tlet completed = tasks.filter((task) => task !== undefined).length;\n\t\tfor (const item of pending) {\n\t\t\tlet taskId = \"\";\n\t\t\ttry {\n\t\t\t\tconst handle = await item.handle;\n\t\t\t\ttaskId = handle.id;\n\t\t\t\tconst record = await handle.drain({ timeoutMs: taskTimeoutMs });\n\t\t\t\t// escalate 上抛(D-060 S4):随任务投影一起交回父模型(取后即清)。\n\t\t\t\tconst escalations = wiring?.drainEscalations?.(record.sessionId) ?? [];\n\t\t\t\t// 兄弟流量摘录(D-060 裁决 14):只读审计面,随同一信封对父可见。\n\t\t\t\tconst siblingTraffic = wiring?.readSiblingTraffic?.(record.sessionId, SIBLING_TRAFFIC_EXCERPTS) ?? [];\n\t\t\t\ttasks[item.index] = {\n\t\t\t\t\t...projectRecord(record),\n\t\t\t\t\t...(escalations.length === 0 ? {} : { escalations }),\n\t\t\t\t\t...(siblingTraffic.length === 0 ? {} : { siblingTraffic }),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\t// drain 抛错(如持久化失败):保留原始 message,不静默吞掉。\n\t\t\t\ttasks[item.index] = { taskId, status: \"failed\", reason: errorText(error), messageCount: 0 };\n\t\t\t}\n\t\t\tcompleted += 1;\n\t\t\t// D-044 §5.6:进度随任务完成节流上报(累计 step 数 + 最近一条回合摘要);\n\t\t\t// 只回摘要,不回模型正文。\n\t\t\tconst progressSuffix =\n\t\t\t\tprogressState.steps === 0\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: ` · steps ${progressState.steps}${progressState.last === undefined ? \"\" : ` · ${progressState.last}`}`;\n\t\t\tonUpdate?.({\n\t\t\t\tcontent: [{ type: \"text\", text: `subagent ${completed}/${prompts.length}${progressSuffix}` }],\n\t\t\t\tdetails: {},\n\t\t\t});\n\t\t}\n\t\treturn { tasks: tasks.filter((task): task is SubagentDelegateTaskProjectionV1 => task !== undefined) };\n\t};\n\n\t/** `subagent_run` 的注册句柄:set/remove 后刷新替换,释放时以最新句柄为准。 */\n\tconst runTool: { current: DisposableRegistration } = { current: api.registerTool(buildRunToolDefinition()) };\n\t/** 同 owner 同名重注册 = 更新(旧句柄 dispose 因表项已被接手而失效)。 */\n\tconst refreshRunTool = (): void => {\n\t\trunTool.current = api.registerTool(buildRunToolDefinition());\n\t};\n\n\t/**\n\t * 会话角色(D-081,现合并为 `subagent_role`):注册/列出/删除。注册是\"先落盘再提交内存\"——持久化条目\n\t * 写在会话文件里(customType `subagent.roles.state`),下次打开同一会话仍在;会话\n\t * 角色不写 `<agentDir>/roles/`、不跨会话共享、子代理不继承。角色工具未声明 readonlySafe,\n\t * readonly 会话沿用既有\"未声明即不激活\"语义,不做特殊分支。\n\t */\n\tconst roleSetSpec = toolSpec({\n\t\tname: \"subagent_role.set\",\n\t\tlabel: \"Register a session subagent role\",\n\t\tdescription:\n\t\t\t\"Register or update a session-scoped subagent role and use it by name in subagent_run. The role is persisted \" +\n\t\t\t\"in this session file, so it is still available when this session is opened again; it is not written to the \" +\n\t\t\t\"shared roles directory, not shared with other sessions, and not inherited by child subagents. Use it when the \" +\n\t\t\t\"built-in roles are too coarse for the task at hand. id, description and instructions are required; the optional \" +\n\t\t\t\"fields narrow the child the same way a role file does (tools/writeScope/mode/webSearch/model/thinkingLevel/systemPromptAppend) and \" +\n\t\t\t\"parentView adds a bounded parent projection. Same id updates that session role; the change is visible to the \" +\n\t\t\t\"next subagent_run call without restarting anything.\",\n\t\tparameters: Type.Object({\n\t\t\tid: Type.String({\n\t\t\t\tpattern: \"^[a-z0-9][a-z0-9_-]{0,31}$\",\n\t\t\t\tdescription: \"Lowercase role id (letters, digits, - and _, at most 32 chars)\",\n\t\t\t}),\n\t\t\tdescription: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tmaxLength: ROLE_DESCRIPTION_CHARS,\n\t\t\t\tdescription: `One-line role description shown in the subagent_run role menu (at most ${ROLE_DESCRIPTION_CHARS} chars)`,\n\t\t\t}),\n\t\t\tinstructions: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tmaxLength: ROLE_INSTRUCTIONS_CHARS,\n\t\t\t\tdescription: `Role instructions framing every task in a call (at most ${ROLE_INSTRUCTIONS_CHARS} chars)`,\n\t\t\t}),\n\t\t\tmodel: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Narrow the child to this model id (must resolve within this session's scoped models)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tthinkingLevel: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Narrow the child thinking level: minimal | low | medium | high | xhigh | max\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\ttools: Type.Optional(\n\t\t\t\tType.Array(Type.String(), {\n\t\t\t\t\tdescription: \"Tool allowlist intersected with the inherited tool set ([] gives the child no tools)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\twriteScope: Type.Optional(\n\t\t\t\tType.Array(Type.String(), {\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Relative write-path globs for edit/write (POSIX separators; [] denies all writes; absent = unrestricted)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tmode: Type.Optional(\n\t\t\t\tType.Union([Type.Literal(\"readonly\"), Type.Literal(\"full-control\")], {\n\t\t\t\t\tdescription: \"Narrow-only session mode: readonly never widens a readonly parent\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\twebSearch: Type.Optional(\n\t\t\t\tType.Union([Type.Literal(\"off\"), Type.Literal(\"auto\")], {\n\t\t\t\t\tdescription: \"Provider-native web search for this child (auto requires model metadata webSearch.native)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tsystemPromptAppend: Type.Optional(\n\t\t\t\tType.String({ description: \"Text appended to the child system prompt (never replaces inherited content)\" }),\n\t\t\t),\n\t\t\tparentView: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Give the child a bounded projection of the parent goal/tools (parent history stays hidden)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentRoleSetResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_role type \"set\"');\n\t\t\tconst id = input.id;\n\t\t\tif (typeof id !== \"string\" || !ROLE_ID_PATTERN.test(id)) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_role type \"set\" id must match ${String(ROLE_ID_PATTERN)} (lowercase letters, digits, \"-\" and \"_\", ` +\n\t\t\t\t\t\t`at most 32 chars), got ${JSON.stringify(id)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const key of Object.keys(input)) {\n\t\t\t\tif (key === \"id\" || (ROLE_KNOWN_KEYS as readonly string[]).includes(key)) continue;\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_role type \"set\" has unknown parameter ${JSON.stringify(key)} (known: id, ${ROLE_KNOWN_KEYS.join(\", \")})`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst definition: Record<string, unknown> = {};\n\t\t\tfor (const key of ROLE_KNOWN_KEYS) {\n\t\t\t\tif (input[key] !== undefined) definition[key] = input[key];\n\t\t\t}\n\t\t\tlet role: SubagentDelegateRoleV1 | undefined;\n\t\t\ttry {\n\t\t\t\trole = validateRoleDefinition(id, definition, `subagent_role type \"set\" \"${id}\"`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", errorText(error));\n\t\t\t}\n\t\t\tif (role === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_role type \"set\" could not build role ${JSON.stringify(id)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\t// 磁盘角色是用户资产:与**当前可见**磁盘角色撞名的新注册结构化拒绝,不隐式改写\n\t\t\t// 其含义。已有会话数据条目(装载期被磁盘遮蔽的影子角色)走正常 upsert 路径:\n\t\t\t// 更新的是会话文件里的数据,视图仍由磁盘角色当值。\n\t\t\tif (diskRoles.has(id) && !sessionRoles.has(id)) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_role_conflict\",\n\t\t\t\t\t`subagent role ${JSON.stringify(id)} is a disk role declared by this suite; a session role cannot shadow it — ` +\n\t\t\t\t\t\t\"pick another id or edit the role file\",\n\t\t\t\t);\n\t\t\t}\n\t\t\t// 预算检查(暴露预算:可用集 + 新角色,磁盘+会话合并计算):超限结构化拒绝并提示精简。\n\t\t\tconst prospective = new Map(roles);\n\t\t\tprospective.set(id, role);\n\t\t\tconst quota = roleQuotaViolation(prospective);\n\t\t\tif (quota !== undefined) throw new SubagentDelegateError(\"subagent_role_quota\", quota);\n\t\t\t// 写入顺序:先 appendEntry(失败原样抛出,注册即失败),成功后才提交内存——\n\t\t\t// 内存与文件不背离。快照是 append-only 全量形态,写的是**数据表**(含未暴露项,\n\t\t\t// 视图收窄不抹掉数据)。\n\t\t\tconst status = sessionRoles.has(id) ? (\"updated\" as const) : (\"created\" as const);\n\t\t\tconst nextSessionRoles = new Map(sessionRoles);\n\t\t\tnextSessionRoles.set(id, role);\n\t\t\tpersistSessionRoles(nextSessionRoles.values());\n\t\t\tsessionRoles.set(id, role);\n\t\t\t// 视图提交:磁盘角色优先——影子 id 只更新数据,不改变可用集。\n\t\t\tif (!diskRoles.has(id)) roles.set(id, role);\n\t\t\trefreshRunTool();\n\t\t\treturn { id, status, roles: [...roles.keys()].sort() };\n\t\t},\n\t});\n\n\tconst roleListSpec = toolSpec({\n\t\tname: \"subagent_role.list\",\n\t\tlabel: \"List subagent roles\",\n\t\tdescription:\n\t\t\t\"List the subagent roles available in this session: id, origin (disk = shared role file, session = registered \" +\n\t\t\t'here with subagent_role type \"set\"), description, and whether the role narrows the child (hasProfile) or enables the ' +\n\t\t\t\"bounded parent projection (hasParentView). Pass an id to get one role's full definition, including its \" +\n\t\t\t'instructions and narrowing fields, to read, modify and re-register with subagent_role (type \"set\").',\n\t\tparameters: Type.Object({\n\t\t\tid: Type.Optional(Type.String({ description: \"Role id; omit to list every available role\" })),\n\t\t}),\n\t\texecute: async (\n\t\t\tfirst: unknown,\n\t\t\tsecond?: unknown,\n\t\t): Promise<SubagentRoleListResultV1 | SubagentRoleViewResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_role type \"list\"');\n\t\t\tconst requested = input.id;\n\t\t\tif (requested !== undefined && (typeof requested !== \"string\" || requested.trim() === \"\")) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_role type \"list\" id must be a non-empty string when present',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst originOf = (roleId: string): \"disk\" | \"session\" => (diskRoles.has(roleId) ? \"disk\" : \"session\");\n\t\t\tif (requested === undefined) {\n\t\t\t\tconst entries: SubagentRoleListEntryV1[] = [...roles.values()]\n\t\t\t\t\t.sort((left, right) => (left.id < right.id ? -1 : 1))\n\t\t\t\t\t.map((role) => ({\n\t\t\t\t\t\tid: role.id,\n\t\t\t\t\t\torigin: originOf(role.id),\n\t\t\t\t\t\tdescription: role.description,\n\t\t\t\t\t\thasProfile: hasNarrowingProfile(role),\n\t\t\t\t\t\thasParentView: role.parentView === true,\n\t\t\t\t\t}));\n\t\t\t\treturn { roles: entries };\n\t\t\t}\n\t\t\tconst role = roles.get(requested);\n\t\t\tif (role === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_unknown_role\", unknownRoleMessage(requested, roles));\n\t\t\t}\n\t\t\treturn { role: { ...toSessionRoleRecord(role), origin: originOf(role.id) } };\n\t\t},\n\t});\n\n\tconst roleRemoveSpec = toolSpec({\n\t\tname: \"subagent_role.remove\",\n\t\tlabel: \"Remove a session subagent role\",\n\t\tdescription:\n\t\t\t'Remove one session-scoped subagent role (one registered with subagent_role type \"set\") from this session. The removal ' +\n\t\t\t\"is persisted in the session file and takes effect for the next subagent_run call. Disk roles cannot be removed \" +\n\t\t\t\"here — they live in the shared roles directory and are changed by editing their file; such a call is rejected \" +\n\t\t\t\"with a structured error.\",\n\t\tparameters: Type.Object({\n\t\t\tid: Type.String({ description: \"Session role id to remove\" }),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentRoleRemoveResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_role type \"remove\"');\n\t\t\tconst id = input.id;\n\t\t\tif (typeof id !== \"string\" || id.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", 'subagent_role type \"remove\" requires a role id');\n\t\t\t}\n\t\t\t// 会话数据条目优先:被磁盘遮蔽的影子角色也能删(删的是会话文件里的数据,\n\t\t\t// 磁盘角色本身不受影响);没有会话数据时才按\"纯磁盘角色\"结构化拒绝。\n\t\t\tif (!sessionRoles.has(id)) {\n\t\t\t\tif (diskRoles.has(id)) {\n\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\"subagent_role_conflict\",\n\t\t\t\t\t\t`subagent role ${JSON.stringify(id)} is a disk role; disk roles are changed by editing their file, ` +\n\t\t\t\t\t\t\t\"not removed from a session\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_unknown_role\", unknownRoleMessage(id, roles));\n\t\t\t}\n\t\t\t// 同样的写入顺序:先全量快照落盘,成功后才提交内存与刷新工具面。\n\t\t\tconst nextSessionRoles = new Map(sessionRoles);\n\t\t\tnextSessionRoles.delete(id);\n\t\t\tpersistSessionRoles(nextSessionRoles.values());\n\t\t\tsessionRoles.delete(id);\n\t\t\t// 视图提交:磁盘角色优先——删掉影子数据后磁盘角色仍是可用集的当值项。\n\t\t\tif (!diskRoles.has(id)) roles.delete(id);\n\t\t\trefreshRunTool();\n\t\t\treturn { id, status: \"removed\", roles: [...roles.keys()].sort() };\n\t\t},\n\t});\n\n\t/**\n\t * 角色三工具合并为 `subagent_role`(2026-10-21 用户裁决:大类型一个工具,\n\t * `type` + 参数区分)。子操作定义仍是上面的三个 spec,派发前按 type 做\n\t * fail-closed 参数校验——跨 type 传参不会被静默忽略。\n\t */\n\tconst roleTool = api.registerTool({\n\t\tname: \"subagent_role\",\n\t\tlabel: \"Subagent roles\",\n\t\tdescription:\n\t\t\t'Manage session-scoped subagent roles. type=\"set\": register or update a role (id, description, instructions ' +\n\t\t\t'required; optional fields narrow the child); type=\"list\": list the roles available in this session, or one ' +\n\t\t\t'role\\'s full definition when id is given; type=\"remove\": remove one session-scoped role. Disk roles are ' +\n\t\t\t\"read-only here — edit their file instead.\",\n\t\tparameters: Type.Object({\n\t\t\ttype: Type.Union([Type.Literal(\"set\"), Type.Literal(\"list\"), Type.Literal(\"remove\")], {\n\t\t\t\tdescription: \"Operation: set | list | remove\",\n\t\t\t}),\n\t\t\t...optionalParams(\n\t\t\t\troleSetSpec.parameters.properties,\n\t\t\t\troleListSpec.parameters.properties,\n\t\t\t\troleRemoveSpec.parameters.properties,\n\t\t\t),\n\t\t\t// Shared key across the three operations: give one neutral description\n\t\t\t// instead of whichever spec happened to be merged last.\n\t\t\tid: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tpattern: \"^[a-z0-9][a-z0-9_-]{0,31}$\",\n\t\t\t\t\tdescription: \"Role id: set/remove target, or one role to view for list\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, \"subagent_role\");\n\t\t\tconst type = readDiscriminator(input, \"subagent_role\", [\"set\", \"list\", \"remove\"]);\n\t\t\tif (type === \"set\") {\n\t\t\t\trejectForeignParams(input, \"subagent_role\", type, [\"id\", ...ROLE_KNOWN_KEYS]);\n\t\t\t\treturn roleSetSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"list\") {\n\t\t\t\trejectForeignParams(input, \"subagent_role\", type, [\"id\"]);\n\t\t\t\treturn roleListSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\trejectForeignParams(input, \"subagent_role\", type, [\"id\"]);\n\t\t\treturn roleRemoveSpec.execute(withoutDiscriminator(input), second);\n\t\t},\n\t});\n\n\t/**\n\t * `/roles` 视图(D-081 用户面):数据源只有上面的三个闭包表(实时值)——可用集\n\t * `roles`(按来源分区,磁盘 `diskRoles` 优先)、数据表 `sessionRoles`(诊断里\n\t * \"数据仍在会话文件里\"的判据)、水合诊断 `hydratedRoles` 与目录解析诊断\n\t * `roleCatalog.dangling`。分区/诊断行仅在非空时出现,列表按 id 排序。\n\t */\n\tconst renderRolesOverview = (): string => {\n\t\t// roles.agentDir 是角色目录(<agentDir>/roles/)的来源;没有它就没有磁盘角色面,\n\t\t// 路径提示也就无从谈起(未见关联的会话不引导用户去丢文件)。\n\t\tconst roleAgentDir = options?.roles?.agentDir;\n\t\tconst sorted = [...roles.values()].sort((left, right) => (left.id < right.id ? -1 : 1));\n\t\tconst disk = sorted.filter((role) => diskRoles.has(role.id));\n\t\tconst session = sorted.filter((role) => !diskRoles.has(role.id));\n\t\tconst lines: string[] = [];\n\t\tif (sorted.length === 0) {\n\t\t\tlines.push(\n\t\t\t\t'No subagent roles are available in this session. Register one with subagent_role type \"set\"' +\n\t\t\t\t\t(roleAgentDir === undefined\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: `, or drop a role file into ${join(roleAgentDir, ROLE_CATALOG_DIR)}/ and associate its id in the suite.`),\n\t\t\t);\n\t\t} else {\n\t\t\tlines.push(`Subagent roles available in this session: ${sorted.length}`);\n\t\t\tif (disk.length > 0 || session.length > 0) lines.push(\"\");\n\t\t\tif (disk.length > 0) {\n\t\t\t\tlines.push(\"disk:\");\n\t\t\t\tfor (const role of disk) lines.push(` ${role.id} — ${role.description}`);\n\t\t\t}\n\t\t\tif (session.length > 0) {\n\t\t\t\tlines.push(\"session:\");\n\t\t\t\tfor (const role of session) lines.push(` ${role.id} — ${role.description}`);\n\t\t\t}\n\t\t}\n\t\t// 诊断区(仅非空时显示):影子/超预算条目按数据表过滤——已被 remove 的旧诊断\n\t\t// 不再声称\"数据仍保留\";悬空关联只列 id,有角色目录时附逐 id 修复提示。\n\t\tconst shadowed = [...hydratedRoles.shadowedByDisk].filter((id) => sessionRoles.has(id)).sort();\n\t\tconst overBudget = [...hydratedRoles.droppedForQuota].filter((id) => sessionRoles.has(id)).sort();\n\t\tconst dangling = [...roleCatalog.dangling].sort();\n\t\tif (shadowed.length > 0 || overBudget.length > 0) {\n\t\t\tlines.push(\"\", \"Not exposed (data kept in this session file):\");\n\t\t\tif (shadowed.length > 0) lines.push(` shadowed by a visible disk role: ${shadowed.join(\", \")}`);\n\t\t\tif (overBudget.length > 0) {\n\t\t\t\tlines.push(\n\t\t\t\t\t` over the menu budget (${ROLE_COUNT_LIMIT} roles / ${ROLE_MENU_CHARS} chars): ${overBudget.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (dangling.length > 0) {\n\t\t\tlines.push(\"\", `Suite associations without a role file (unavailable): ${dangling.join(\", \")}`);\n\t\t\tif (roleAgentDir !== undefined) {\n\t\t\t\tfor (const id of dangling) {\n\t\t\t\t\tlines.push(` create ${subagentRoleCatalogPath(roleAgentDir, id)} or drop the association`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t};\n\n\t/** `/roles <id>` 视图:单角色完整定义(收窄字段存在才显示,parentView 仅 true 显示)。 */\n\tconst renderRoleDefinitionView = (role: SubagentDelegateRoleV1): string => {\n\t\tconst lines = [\n\t\t\t`id: ${role.id}`,\n\t\t\t`origin: ${diskRoles.has(role.id) ? \"disk\" : \"session\"}`,\n\t\t\t`description: ${role.description}`,\n\t\t\t\"instructions:\",\n\t\t\trole.instructions,\n\t\t];\n\t\tconst profile = role.profile;\n\t\tif (profile?.model !== undefined) lines.push(`model: ${profile.model}`);\n\t\tif (profile?.thinkingLevel !== undefined) lines.push(`thinkingLevel: ${profile.thinkingLevel}`);\n\t\tif (profile?.tools !== undefined) lines.push(`tools: ${profile.tools.join(\", \")}`);\n\t\tif (profile?.writeScope !== undefined) lines.push(`writeScope: ${profile.writeScope.join(\", \")}`);\n\t\tif (profile?.mode !== undefined) lines.push(`mode: ${profile.mode}`);\n\t\tif (profile?.webSearch !== undefined) lines.push(`webSearch: ${profile.webSearch}`);\n\t\tif (profile?.systemPromptAppend !== undefined) lines.push(\"systemPromptAppend:\", profile.systemPromptAppend);\n\t\tif (role.parentView === true) lines.push(\"parentView: true\");\n\t\treturn lines.join(\"\\n\");\n\t};\n\n\t/**\n\t * `/roles` 斜杠命令(D-081 用户面):与角色工具同一注册分支(委派面存在才注册),\n\t * 句柄随插件 dispose。只读视图——不改状态、不引入新配置键;未知 id 是正常结果\n\t * (error + 可用 id 列表),任何异常都收敛为 `{ status: \"error\" }`,命令不崩宿主。\n\t */\n\tconst rolesCommand = api.registerCommand({\n\t\tname: \"roles\",\n\t\tdescription:\n\t\t\t\"List the subagent roles available in this session (disk + session), or show one role's full definition\",\n\t\targumentHint: \"[id]\",\n\t\texecute: async (args: string) => {\n\t\t\ttry {\n\t\t\t\tconst requested = args.trim();\n\t\t\t\tif (requested === \"\") {\n\t\t\t\t\treturn { status: \"success\" as const, message: renderRolesOverview() };\n\t\t\t\t}\n\t\t\t\tconst role = roles.get(requested);\n\t\t\t\tif (role === undefined) {\n\t\t\t\t\treturn { status: \"error\" as const, message: unknownRoleMessage(requested, roles) };\n\t\t\t\t}\n\t\t\t\treturn { status: \"success\" as const, message: renderRoleDefinitionView(role) };\n\t\t\t} catch (error) {\n\t\t\t\t// A slash command must not crash the host (memory /promote precedent).\n\t\t\t\treturn { status: \"error\" as const, message: errorText(error) };\n\t\t\t}\n\t\t},\n\t});\n\n\t/**\n\t * 只读回读工具(D-060 S3):按 `taskId` 或 `sessionId` 取回**有界**的子会话片段。\n\t * - `taskId` → 调度记录(内存/durable,owner+parent 作用域);\n\t * - `sessionId` → 持久化 transcript(宿主注入的会话回读器;未注入时结构化报错)。\n\t * 返回默认只给最后 N 条(可调),并如实报告条数/字节/截断——绝不默认回灌全文。\n\t */\n\tconst resultSpec = toolSpec({\n\t\tname: \"subagent_task.result\",\n\t\tlabel: \"Read subagent result\",\n\t\tdescription:\n\t\t\t\"Read back a bounded slice of a subagent's session: pass the taskId from subagent_run, or the child's sessionId \" +\n\t\t\t\"to read its persisted transcript. Returns at most `maxMessages` trailing entries (default 20) plus counts, \" +\n\t\t\t\"byte size and a truncated flag; it never returns the whole transcript by default.\",\n\t\tparameters: Type.Object({\n\t\t\ttaskId: Type.Optional(Type.String({ description: \"Task id from subagent_run (scheduler record read)\" })),\n\t\t\tsessionId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Child session id (persisted transcript read; requires a host session reader)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tmaxMessages: Type.Optional(\n\t\t\t\tType.Number({ description: \"Trailing entries to return (1..50, default 20)\", minimum: 1, maximum: 50 }),\n\t\t\t),\n\t\t\twaitMs: Type.Optional(\n\t\t\t\tType.Number({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Bounded wait for a background task to settle, in ms (0..120000, default 0 = check once; \" +\n\t\t\t\t\t\t\"unsettled tasks come back with knownTask/taskStatus instead of the transcript)\",\n\t\t\t\t\tminimum: 0,\n\t\t\t\t\tmaximum: 120000,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentResultReadResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"result\"');\n\t\t\tconst taskId = typeof input.taskId === \"string\" && input.taskId.trim() !== \"\" ? input.taskId : undefined;\n\t\t\tconst sessionId =\n\t\t\t\ttypeof input.sessionId === \"string\" && input.sessionId.trim() !== \"\" ? input.sessionId : undefined;\n\t\t\tconst requested = input.maxMessages === undefined ? RESULT_READ_DEFAULT_MESSAGES : Number(input.maxMessages);\n\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > RESULT_READ_MAX_MESSAGES) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_task type \"result\" maxMessages must be an integer in 1..${RESULT_READ_MAX_MESSAGES}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst waitMs = input.waitMs === undefined ? 0 : Number(input.waitMs);\n\t\t\tif (!Number.isInteger(waitMs) || waitMs < 0 || waitMs > RESULT_READ_MAX_WAIT_MS) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_task type \"result\" waitMs must be an integer in 0..${RESULT_READ_MAX_WAIT_MS}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (taskId === undefined && sessionId === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_task type \"result\" requires taskId (scheduler record) or sessionId (persisted transcript)',\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (taskId !== undefined) {\n\t\t\t\tconst requester = {\n\t\t\t\t\towner: capabilityManifest.id,\n\t\t\t\t\tparentSessionId: session.getSessionId(),\n\t\t\t\t};\n\t\t\t\t// 后台委派(D-060 S6):waitMs > 0 时有界等待结算;否则查一次。\n\t\t\t\tconst record =\n\t\t\t\t\twaitMs > 0 ? await runtime.wait(taskId, waitMs, requester) : await runtime.result(taskId, requester);\n\t\t\t\tif (record === undefined) {\n\t\t\t\t\t// 未结算与不存在分开表达:已知任务回当前状态,模型可稍后再取。\n\t\t\t\t\tconst known = runtime.peek(taskId, requester);\n\t\t\t\t\treturn known === undefined\n\t\t\t\t\t\t? { found: false, source: \"record\", taskId }\n\t\t\t\t\t\t: { found: false, source: \"record\", taskId, knownTask: true, taskStatus: known.status };\n\t\t\t\t}\n\t\t\t\tconst messages = record.messages.slice(-requested);\n\t\t\t\t// escalate 上抛(D-060 S4):按子会话 id 取走并随信封返回(取后即清)。\n\t\t\t\tconst escalations = wiring?.drainEscalations?.(record.sessionId) ?? [];\n\t\t\t\tconst siblingTraffic = wiring?.readSiblingTraffic?.(record.sessionId, SIBLING_TRAFFIC_EXCERPTS) ?? [];\n\t\t\t\treturn {\n\t\t\t\t\tfound: true,\n\t\t\t\t\tsource: \"record\",\n\t\t\t\t\ttaskId: record.taskId,\n\t\t\t\t\tsessionId: record.sessionId,\n\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t\t\t\t...(record.reason === undefined ? {} : { reason: record.reason }),\n\t\t\t\t\tmessageCount: record.messages.length,\n\t\t\t\t\treturnedMessages: messages.length,\n\t\t\t\t\tbytes: utf8ByteLength(JSON.stringify(record.messages)),\n\t\t\t\t\ttruncated: record.truncated || messages.length < record.messages.length,\n\t\t\t\t\tmessages: messages.map((message) => detachedSessionSnapshot(message)),\n\t\t\t\t\t...(record.taskOutcome === undefined ? {} : { taskOutcome: record.taskOutcome }),\n\t\t\t\t\t...(record.refusalReason === undefined ? {} : { refusalReason: record.refusalReason }),\n\t\t\t\t\t...(escalations.length === 0 ? {} : { escalations }),\n\t\t\t\t\t...(siblingTraffic.length === 0 ? {} : { siblingTraffic }),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst reader = agents?.session;\n\t\t\tif (reader === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_profile_not_applied\",\n\t\t\t\t\t\"this host exposes no session reader; pass taskId instead (or run on a host that injects one)\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst view = await reader(sessionId as string);\n\t\t\tif (view === undefined) return { found: false, source: \"session\", sessionId };\n\t\t\tconst entries = view.entries.slice(-requested);\n\t\t\tconst escalations = wiring?.drainEscalations?.(view.sessionId) ?? [];\n\t\t\tconst siblingTraffic = wiring?.readSiblingTraffic?.(view.sessionId, SIBLING_TRAFFIC_EXCERPTS) ?? [];\n\t\t\treturn {\n\t\t\t\tfound: true,\n\t\t\t\tsource: \"session\",\n\t\t\t\tsessionId: view.sessionId,\n\t\t\t\t...(view.agentRole === undefined ? {} : { roleId: view.agentRole }),\n\t\t\t\tentryCount: view.entryCount,\n\t\t\t\treturnedMessages: entries.length,\n\t\t\t\tbytes: view.bytes,\n\t\t\t\ttruncated: view.truncated || entries.length < view.entryCount,\n\t\t\t\tmessages: entries.map((entry) => detachedSessionSnapshot(entry)),\n\t\t\t\t...(escalations.length === 0 ? {} : { escalations }),\n\t\t\t\t...(siblingTraffic.length === 0 ? {} : { siblingTraffic }),\n\t\t\t};\n\t\t},\n\t});\n\n\t// steer 的模型面(D-060 裁决 13,2026-10-02 用户裁决):`subagent_task` type `steer` 随\n\t// background 面注册。原 S4 裁决\"steer 不设模型面工具\"的前提——前台阻塞 drain 下\n\t// 父模型无\"运行中窗口\"——在 background 默认开后失效(提交即返回票据,运行中窗口\n\t// 存在),该论证保留为背景说明。语义对齐主流取证(codex v2 send_message /\n\t// ZCode SendMessage 均为模型面排队投递):不打断子代理当前回合,在其下一个模型\n\t// 请求前生效。程序面(agents 桥的 steer 与本调度器的 steer/findBySession 原语)\n\t// 保持不变,供编排插件组合。\n\t// `subagent_task` type `cancel`(S4 补充裁决,2026-10-01):原\"仅 background 委派启用时注册\"\n\t// 的前提(前台 drain 下父模型在 subagent_run 阻塞中不存在运行中窗口)保留为\n\t// 背景说明——cancel 只在 background 委派返回票据后才有可达窗口。\n\t// cancel/steer 操作自 D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst cancelSpec = toolSpec({\n\t\tname: \"subagent_task.cancel\",\n\t\tlabel: \"Cancel a background subagent\",\n\t\tdescription:\n\t\t\t\"Cancel a running background subagent task by its taskId (the ticket returned by subagent_run with \" +\n\t\t\t\"background: true). Only background delegation tickets are cancellable: a foreground subagent_run call \" +\n\t\t\t\"blocks until its tasks finish, so it never leaves a running task behind. Terminal statuses (including a \" +\n\t\t\t\"task cancelled by something else) come back as already_terminal; unknown taskIds as not_found.\",\n\t\tparameters: Type.Object({\n\t\t\ttaskId: Type.String({ description: \"Task id from a background subagent_run ticket\" }),\n\t\t\treason: Type.Optional(Type.String({ description: \"Short reason recorded on the cancellation fence\" })),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentCancelResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"cancel\"');\n\t\t\tconst taskId = typeof input.taskId === \"string\" ? input.taskId : \"\";\n\t\t\tif (taskId.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", 'subagent_task type \"cancel\" requires a taskId');\n\t\t\t}\n\t\t\tconst reason = typeof input.reason === \"string\" && input.reason.trim() !== \"\" ? input.reason : undefined;\n\t\t\tconst result = await runtime.cancelById(\n\t\t\t\ttaskId,\n\t\t\t\t{ owner: capabilityManifest.id, parentSessionId: session.getSessionId() },\n\t\t\t\treason,\n\t\t\t);\n\t\t\treturn result.outcome === \"not_found\"\n\t\t\t\t? { outcome: \"not_found\", taskId }\n\t\t\t\t: { outcome: result.outcome, taskId, status: result.status };\n\t\t},\n\t});\n\n\t// `subagent_task` type `steer`(D-060 裁决 13):与 cancelTool 同属 background 面——有界引导消息\n\t// 投递给运行中的后台子任务(排队语义),需要硬终止时模型仍走 `subagent_task` type `cancel`。\n\t// D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst steerSpec = toolSpec({\n\t\tname: \"subagent_task.steer\",\n\t\tlabel: \"Steer a background subagent\",\n\t\tdescription:\n\t\t\t\"Deliver one bounded steering message to a running background subagent task by its taskId (the ticket \" +\n\t\t\t\"returned by subagent_run with background: true). Queued delivery: it does NOT interrupt the subagent's \" +\n\t\t\t\"current turn — it takes effect before the task's next model request. Use it when user feedback or new \" +\n\t\t\t'information should change the subtask\\'s direction. Use subagent_task with type \"cancel\" when the task must stop instead.',\n\t\tparameters: Type.Object({\n\t\t\ttaskId: Type.String({ description: \"Task id from a background subagent_run ticket\" }),\n\t\t\ttext: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: `Bounded steering message (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes), delivered before the task's next model request`,\n\t\t\t}),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<{ delivered: true; taskId: string }> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"steer\"');\n\t\t\tconst taskId = typeof input.taskId === \"string\" ? input.taskId : \"\";\n\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\tif (taskId.trim() === \"\" || text.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_task type \"steer\" requires a taskId and non-empty text',\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (Buffer.byteLength(text, \"utf8\") > SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_message_too_large\",\n\t\t\t\t\t`subagent_task type \"steer\" text exceeds ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait runtime.steer(taskId, text, {\n\t\t\t\t\towner: capabilityManifest.id,\n\t\t\t\t\tparentSessionId: session.getSessionId(),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tmapCommunicationError(error);\n\t\t\t}\n\t\t\treturn { delivered: true, taskId };\n\t\t},\n\t});\n\n\t/**\n\t * 父→子续跑(D-060 S4):对**已终态且已落盘**的子会话按 sessionId 继续提交一轮\n\t * 任务(同一份 JSONL 续写,多轮子任务)。血缘作用域由宿主会话回读器判定,活跃\n\t * 任务占用以 `subagent_session_busy` 拒绝。shared 与 pooled 都支持——pooled 下\n\t * resume 键随 metadata 过线,runner 打开既有会话文件续写。\n\t * D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\t */\n\tconst resumeSpec = toolSpec({\n\t\tname: \"subagent_task.resume\",\n\t\tlabel: \"Resume a subagent\",\n\t\tdescription:\n\t\t\t\"Continue a finished subagent session by its sessionId: submit one more prompt into the same persisted \" +\n\t\t\t\"transcript (multi-turn subtask) and get the bounded terminal projection, like subagent_run for one task.\",\n\t\tparameters: Type.Object({\n\t\t\tsessionId: Type.String({ description: \"Child session id of a finished subagent task\" }),\n\t\t\tprompt: Type.String({ minLength: 1, description: \"Follow-up prompt for the continued session\" }),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"resume\"');\n\t\t\tconst sessionId = typeof input.sessionId === \"string\" ? input.sessionId : \"\";\n\t\t\tconst prompt = typeof input.prompt === \"string\" ? input.prompt : \"\";\n\t\t\tif (sessionId === \"\" || prompt.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_task type \"resume\" requires sessionId and prompt',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst reader = agents?.session;\n\t\t\tif (reader === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_profile_not_applied\",\n\t\t\t\t\t\"this host exposes no session reader; resume cannot verify the session scope\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst view = await reader(sessionId);\n\t\t\tif (view === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_unknown_session\",\n\t\t\t\t\t`no child session ${sessionId} under this parent`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst requester = { owner: capabilityManifest.id, parentSessionId: session.getSessionId() };\n\t\t\tconst active = runtime.findBySession(sessionId, requester);\n\t\t\tif (active !== undefined && !active.settled) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_session_busy\",\n\t\t\t\t\t`session ${sessionId} still has an unsettled task (${active.taskId}); steer or wait instead`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet handle: SubagentTaskHandleV1;\n\t\t\ttry {\n\t\t\t\thandle = await runtime.submit({\n\t\t\t\t\tprompt,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t[AGENT_TASK_PARENT_SESSION_KEY]: session.getSessionId(),\n\t\t\t\t\t\t[AGENT_TASK_RESUME_SESSION_KEY]: sessionId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_submit_rejected\", errorText(error));\n\t\t\t}\n\t\t\tconst record = await handle.drain({ timeoutMs: taskTimeoutMs });\n\t\t\treturn { tasks: [projectRecord(record)] };\n\t\t},\n\t});\n\n\t/**\n\t * 子会话盘点(D-060 模型面):列出**本会话自己的**子代理会话(最近活动倒序、\n\t * 有界),并用调度器记录富化活跃/终态信息。宿主注入 `agents.list` 才注册;\n\t * 读的是落盘目录,父会话跨进程重启后仍能找回自己的子代理。返回的 sessionId\n\t * 可直接用于 `subagent_task` 的 `result` / `resume`。\n\t */\n\tconst listSpec =\n\t\tagents?.list === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_task.list\",\n\t\t\t\t\tlabel: \"List subagent sessions\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List this session's own subagent sessions (newest activity first) with role, timestamps and transcript \" +\n\t\t\t\t\t\t\"size; tasks still in flight are marked active, settled ones carry their terminal status. Read-only. \" +\n\t\t\t\t\t\t'Use a listed sessionId with subagent_task type \"result\" or \"resume\".',\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\tlimit: Type.Optional(\n\t\t\t\t\t\t\tType.Number({ description: \"Max entries to return (1..50, default 20)\", minimum: 1, maximum: 50 }),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentSessionListResultV1> => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_task type \"list\"');\n\t\t\t\t\t\tconst requested = input.limit === undefined ? 20 : Number(input.limit);\n\t\t\t\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > 50) {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t'subagent_task type \"list\" limit must be an integer in 1..50',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst summaries = (await agents.list?.()) ?? [];\n\t\t\t\t\t\tconst requester = { owner: capabilityManifest.id, parentSessionId: session.getSessionId() };\n\t\t\t\t\t\tconst sessions = [];\n\t\t\t\t\t\tfor (const summary of summaries.slice(0, requested)) {\n\t\t\t\t\t\t\tconst live = runtime.findBySession(summary.sessionId, requester);\n\t\t\t\t\t\t\tif (live !== undefined && !live.settled) {\n\t\t\t\t\t\t\t\tsessions.push({ ...summary, active: true as const });\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (live !== undefined) {\n\t\t\t\t\t\t\t\tconst record = await runtime.result(live.taskId, requester);\n\t\t\t\t\t\t\t\tif (record !== undefined) {\n\t\t\t\t\t\t\t\t\tsessions.push({\n\t\t\t\t\t\t\t\t\t\t...summary,\n\t\t\t\t\t\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t\t\t\t\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t\t\t\t\t\t\t\t\t...(record.reason === undefined ? {} : { reason: record.reason }),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// 无内存记录(父重启前的旧子会话):只回摘要,transcript 仍在盘上。\n\t\t\t\t\t\t\tsessions.push(summary);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { count: sessions.length, sessions };\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t/**\n\t * 任务面合并为 `subagent_task`(2026-10-21 用户裁决:大类型一个工具,\n\t * `type` + 参数区分)。`subagent_run` 保持独立:它是唯一带动态角色枚举与\n\t * 专用渲染的入口,合并进来只会让最常用的调用多背一层判别。\n\t */\n\tconst taskOps = [\"result\", \"cancel\", \"steer\", \"resume\", ...(listSpec === undefined ? [] : [\"list\"])];\n\tconst taskTool = api.registerTool({\n\t\tname: \"subagent_task\",\n\t\tlabel: \"Subagent tasks\",\n\t\tdescription:\n\t\t\t\"Inspect and steer subagent tasks. \" +\n\t\t\t[\n\t\t\t\t'type=\"result\": read a bounded slice of a task record or child session (taskId or sessionId)',\n\t\t\t\t'type=\"cancel\": cancel a running background task by taskId',\n\t\t\t\t'type=\"steer\": queue a bounded steering message to a running background task',\n\t\t\t\t'type=\"resume\": continue a finished child session with one more prompt',\n\t\t\t\t...(listSpec === undefined ? [] : [`type=\"list\": list this session's own subagent sessions`]),\n\t\t\t].join(\"; \") +\n\t\t\t\". Task creation stays in subagent_run.\",\n\t\tparameters: Type.Object({\n\t\t\ttype: Type.Union(\n\t\t\t\ttaskOps.map((op) => Type.Literal(op)),\n\t\t\t\t{ description: `Operation: ${taskOps.join(\" | \")}` },\n\t\t\t),\n\t\t\t...optionalParams(\n\t\t\t\tresultSpec.parameters.properties,\n\t\t\t\tcancelSpec.parameters.properties,\n\t\t\t\tsteerSpec.parameters.properties,\n\t\t\t\tresumeSpec.parameters.properties,\n\t\t\t\tlistSpec?.parameters.properties,\n\t\t\t),\n\t\t\t// Shared keys across operations: neutral descriptions instead of the\n\t\t\t// last merged spec's operation-specific wording.\n\t\t\ttaskId: Type.Optional(Type.String({ description: \"Task id from subagent_run (result/cancel/steer)\" })),\n\t\t\tsessionId: Type.Optional(\n\t\t\t\tType.String({ description: \"Child session id (result reads its transcript, resume continues it)\" }),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, \"subagent_task\");\n\t\t\tconst type = readDiscriminator(input, \"subagent_task\", taskOps);\n\t\t\tif (type === \"result\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"taskId\", \"sessionId\", \"maxMessages\", \"waitMs\"]);\n\t\t\t\treturn resultSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"cancel\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"taskId\", \"reason\"]);\n\t\t\t\treturn cancelSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"steer\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"taskId\", \"text\"]);\n\t\t\t\treturn steerSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"resume\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"sessionId\", \"prompt\"]);\n\t\t\t\treturn resumeSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"limit\"]);\n\t\t\treturn listSpec?.execute(withoutDiscriminator(input), second);\n\t\t},\n\t});\n\n\treturn [\n\t\t// 刷新句柄:释放时以最新一次 subagent_run 注册为准(旧句柄 dispose 因表项被接手而失效)。\n\t\tcreateDisposableRegistration(\n\t\t\t\"subagent-delegate.tool.subagent_run\",\n\t\t\t() => void runTool.current.dispose(),\n\t\t\t`registration:${capabilityManifest.id}:refreshable:tool:subagent_run`,\n\t\t),\n\t\ttaskTool,\n\t\troleTool,\n\t\trolesCommand,\n\t\t// 子侧通信面(D-060 S4/S5):获准自建会话两面并存(向下委派 + 向父上抛/兄弟消息)。\n\t\t...childTools,\n\t\tcreateDisposableRegistration(\n\t\t\t\"subagent-delegate.runtime\",\n\t\t\t// 调度器释放是有界的 async 过程(cancel fence + 有界 drain),但 embedded\n\t\t\t// builtin 走同步 loader(loadCapabilityPluginSync -> disposePluginSync 拒绝\n\t\t\t// 异步 cleanup),因此登记处同步发起、观察 promise,不返回 Promise。\n\t\t\t() => {\n\t\t\t\tfor (const unsubscribe of progressUnsubscribes) unsubscribe();\n\t\t\t\tprogressUnsubscribes.clear();\n\t\t\t\t// 生产 tick 驱动必随 dispose 停止(不允许隐藏定时器活过调度器)。\n\t\t\t\tstopDeadlineTicker();\n\t\t\t\t// 先释放调度器(任务终态落定),再回收 runner 池(先释放任务再杀进程)。\n\t\t\t\t// dispose 的 reject 通道在 durable results store persist 失败时打开(durable\n\t\t\t\t// replay assembly 启用后真实存在):释放失败的收尾错误已由 runtime 内部按\n\t\t\t\t// 任务暴露,同步 cleanup 路径无法再抛,这里只保证不产生未处理的 rejection。\n\t\t\t\tvoid runtime\n\t\t\t\t\t.dispose()\n\t\t\t\t\t.then(() => pool?.shutdown())\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t// 释放失败的收尾错误已由 runtime 内部按任务暴露;同步 cleanup 路径\n\t\t\t\t\t\t// 无法再抛,这里只保证不产生未处理的 rejection。\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t`registration:${capabilityManifest.id}:runtime`,\n\t\t),\n\t\t// 公共调度器能力(P1b):排在 runtime 之后,逆序 dispose 先摘能力再释放调度器。\n\t\tschedulerRegistration,\n\t];\n}\n"]}
1
+ {"version":3,"file":"delegate.js","sourceRoot":"","sources":["../src/delegate.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * First-party builtin subagent-delegate capability: the first production\n * orchestrator over the plugin-level `SubagentRuntime` (D-044).\n *\n * The capability consumes only the public face — `session`, `agents`,\n * `sessionAbortSignal` and `tools` — and owns exactly one scheduler instance\n * per plugin load. It adds no scheduling policy of its own: queue, admission,\n * budgets, terminal states and the parent cancel fence all stay in the\n * scheduler; this module is the model-facing `subagent_run` tool plus a bounded\n * result projection (status / reason codes / message counts / short summary).\n * Raw child messages never enter the tool result (context budget spec).\n *\n * The scheduler's deadline fence is tick-driven by design (no hidden timers in\n * the scheduler; `tick()` is the only enforcement point). This consumer owns\n * the production wall-clock driver: a lazy ticker runs at\n * `BACKGROUND_DEADLINE_TICK_INTERVAL_MS` while background tasks with pending\n * deadlines are in flight and only calls `runtime.tick()`, so `subagent_run`\n * can expose `deadlineMs` for background submissions (default\n * `DEFAULT_BACKGROUND_TASK_DEADLINE_MS`, 60 minutes). Wait bounds are\n * `taskTimeoutMs` (drain) and the host's `limits.drainTimeoutMs` inside the\n * scheduler.\n *\n * 迁自宿主 `src/capabilities/subagent-delegate.ts`(D-075 S4 第三批拆包)。除 import\n * 来源外保持宿主行为:公共契约(agent-task 键/档案、通信接线、血缘读取、快照)改自\n * plugin-sdk;信箱类型/错误改自 @agent-forge/protocol;调度器与 runner 模块改包内\n * 相对路径。三处语义收敛见 `SubagentDelegateCapabilityOptions` 与 createCapability\n * 内的迁移注记(agentDir 单源、runnerEntryAuto 驱动自动池化、lineage 深度经 SDK 读取)。\n */\nimport { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport {\n\tAGENT_TASK_CHILD_PROFILE_KEY,\n\tAGENT_TASK_PARENT_SESSION_KEY,\n\tAGENT_TASK_PARENT_TRACE_KEY,\n\tAGENT_TASK_RESUME_SESSION_KEY,\n\ttype AgentTaskAdapter,\n\ttype AgentTaskChildProfileV1,\n\ttype CapabilityAPI,\n\tcreateDisposableRegistration,\n\ttype DisposableRegistration,\n\ttype DurableServiceV1,\n\tdetachedSessionSnapshot,\n\tEXPERIMENTAL_PUBLIC_API_VERSION,\n\ttype LoggerAPI,\n\tparseAgentTaskChildProfileV1,\n\ttype SessionAPI,\n\ttype SessionEntryView,\n\ttype SubagentCommunicationWiringV1,\n} from \"@agent-forge/plugin-sdk\";\nimport { readAgentSessionLineage } from \"@agent-forge/plugin-sdk/session-lineage\";\nimport {\n\tSUBAGENT_MAILBOX_MAX_MESSAGE_BYTES,\n\tSubagentMailboxErrorV1,\n\tsubscribeTaskProgressV1,\n} from \"@agent-forge/protocol/subagent\";\nimport { type TSchema, Type } from \"typebox\";\n// 出厂默认值单一定义源(含 manifest config 与 fallback):数值不在此处复制。\nimport {\n\tDEFAULT_SUBAGENT_LIMITS,\n\tDEFAULT_SUBAGENT_MAX_NESTED_DEPTH,\n\tDEFAULT_SUBAGENT_MAX_TASKS_PER_CALL,\n\tDEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT,\n\tDEFAULT_SUBAGENT_TASK_TIMEOUT_MS,\n} from \"./defaults.ts\";\nimport { createSubagentRunRenderCall, subagentRunResultRenderer } from \"./render.ts\";\nimport {\n\tcreatePooledAgentTaskAdapterV1,\n\ttype SubagentRunnerPoolV1,\n\ttype SubagentRunnerSpawnHandleV1,\n} from \"./runner-pool.ts\";\nimport { createNodeSubagentRunnerSpawnerV1 } from \"./runner-spawn.ts\";\nimport { createAgentTaskSchedulerCapabilityProviderV1 } from \"./scheduler-capability.ts\";\nimport { resolveSelfInvocationV1, type SelfInvocationV1 } from \"./self-invocation.ts\";\nimport { createAgentTaskApiAdapterV1 } from \"./shared-adapter.ts\";\nimport {\n\tcreateSubagentRuntime,\n\ttype SchedulerTaskRecordV1,\n\tSubagentRuntimeError,\n\ttype SubagentRuntimeLimitsV1,\n\ttype SubagentRuntimeStatus,\n\ttype SubagentRuntimeV1,\n\ttype SubagentTaskHandleV1,\n} from \"./subagent-runtime.ts\";\n\nexport const capabilityManifest = {\n\tid: \"agent-forge.builtin.subagent-delegate\",\n\tversion: \"0.1.0\",\n\tapiVersion: EXPERIMENTAL_PUBLIC_API_VERSION,\n\t// `agents` 是可选能力:runner 的叶子会话刻意关闭 agent tasks(enableAgentTasks: false),\n\t// 此时本能力\"不适用\"而非\"加载失败\",缺失时静默不注册工具,避免每个叶子会话刷拒绝警告。\n\trequiredCapabilities: [\"session\", \"tools\"],\n\toptionalCapabilities: [\"agents\"],\n\tprovides: [{ id: \"agent-forge.agent-task-scheduler\", version: 1, kind: \"service\" }],\n\t/**\n\t * 用户可配置默认值(D-044 §6 四层归属的 Profile/capability 配置层):\n\t * 经 agent-dir 配置通道 `<agentDir>/capabilities/builtin.subagent-delegate.json`\n\t * 浅合并覆盖;宿主显式 options 优先级最高;非法值在装载时 fail fast。\n\t */\n\tconfig: {\n\t\t...DEFAULT_SUBAGENT_LIMITS,\n\t\tmaxTasksPerCall: DEFAULT_SUBAGENT_MAX_TASKS_PER_CALL,\n\t\ttaskTimeoutMs: DEFAULT_SUBAGENT_TASK_TIMEOUT_MS,\n\t\tmaxTotalPerParent: DEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT,\n\t\tmaxNestedDepth: DEFAULT_SUBAGENT_MAX_NESTED_DEPTH,\n\t\t// pooled 模式(D-045):0 = 关闭(默认,shared 形态,零额外进程)。\n\t\t// 每 runner 12 会话与默认并发 12 对齐:runnerMaxProcesses=1 即可覆盖默认并发。\n\t\trunnerMaxProcesses: 0,\n\t\trunnerMaxSessionsPerRunner: 12,\n\t\trunnerIdleTimeoutMs: 300_000,\n\t\trunnerSweepIntervalMs: 60_000,\n\t\trunnerEntryAuto: false,\n\t},\n} as const;\n\nexport interface SubagentDelegateCapabilityOptions {\n\t/** 宿主可注入调度器 adapter(如 pooled runner adapter);优先级高于配置驱动的 pooled 装配与共享模式。 */\n\tadapter?: AgentTaskAdapter;\n\tlimits?: SubagentRuntimeLimitsV1;\n\t/** 单次工具调用的并行任务上限(默认 8)与单任务 drain 超时(默认 600000ms)。 */\n\tmaxTasksPerCall?: number;\n\ttaskTimeoutMs?: number;\n\t/**\n\t * 测试/宿主注入的 runner spawn 工厂(优先级高于 `runnerEntryPath` 配置):\n\t * 生产默认由 `createNodeSubagentRunnerSpawnerV1` 派生真实进程,测试注入进程内 fake。\n\t */\n\trunnerSpawner?: () => SubagentRunnerSpawnHandleV1;\n\t/**\n\t * 角色目录与方案关联(角色只来自磁盘 `<agentDir>/roles/<id>.json`,见\n\t * {@link resolveSubagentRoleCatalog})。库面调用方(测试/第三方)显式注入;\n\t * 插件 entry 由 `api.host.roleAssociations` + `api.host.agentDir` 组装。\n\t * 未提供时该会话**不暴露任何角色**(不是\"回退到内置\"——引擎没有内置角色)。\n\t */\n\troles?: { readonly agentDir: string; readonly associations: readonly string[] };\n\t/**\n\t * 通信面宿主接线(D-060 S4):父装配域注入 `drainEscalations`(取子→父上抛),\n\t * 子装配域注入 `postEscalate`/`sendSibling`/`drainInbox`(发上抛/发兄弟/取收件箱,\n\t * 身份与血缘都由宿主绑定校验)。未接线时通信工具一律不注册。\n\t */\n\tcommunicationWiring?: SubagentCommunicationWiringV1;\n\t/**\n\t * agentDir(承载退役切片 2):嵌套深度硬限沿 S2 落盘头行回溯血缘,需要 agentDir\n\t * 定位会话目录。库面显式注入优先;缺省回落到 `api.host.agentDir`(插件 entry 的\n\t * 单源通道,D-075 S4 第三批收敛——原 `roles.agentDir` 双通道已退役);两者都不在\n\t * 时深度门不生效(配额仍在)。\n\t */\n\tagentDir?: string;\n\t/**\n\t * 后台委派结算摘要 sink(D-060 S6):`background` 提交的任务每结算一个,宿主收到\n\t * 一条有界 JSON 行(taskId/sessionId/status/reasonCode),由宿主注入父的下一次\n\t * 模型轮次。未接线时后台照常可跑,只是没有推送感知。\n\t */\n\tbackgroundDigestSink?: (line: string) => void;\n\t/**\n\t * 委派提交时刻的回合 correlationId(第 3 期第二批):background 委派的提交动作\n\t * 发生在父回合工具阶段、此时有值。getter 缺席或返回 undefined 时不写键,行为回退。\n\t */\n\tgetTurnCorrelationId?: () => string | undefined;\n\t/**\n\t * Durable 终态持久化(durable replay assembly,2026-10-13 用户裁决):宿主注入\n\t * durable 设施(store + writerId,写者租约生命周期由宿主持有),调度器按 `subagent-task:<taskId>` 落库终态\n\t * 信封,`subagent_task`(type `result`)跨进程重启后仍可读回(日志在 `<agentDir>/durable/`,\n\t * 独立于 sessions 树,主会话删除/清理不波及)。未注入 = 优雅降级为现状(内存\n\t * 记录 + transcript 落盘,`result()` 回 undefined);持久化失败不吞终态——错误经\n\t * drain()/dispose() 的 reject 通道暴露(两处调用点都有 catch 臂)。\n\t */\n\tresults?: { readonly store: DurableServiceV1; readonly writerId: string };\n}\n\n// 通信面的宿主接线 `SubagentCommunicationWiringV1`(含信箱消息形状)是 plugin-sdk\n// 公共契约(D-075 S4 第三批迁入 SDK),本包经上方 import 消费并在 index 再导出。\n// 通信面配置键已移除(D-060 裁决 15,2026-10-03):resume/escalate/sibling 曾是\n// 出厂默认全开的显式开关(裁决 13/14 翻转后仅剩\"显式 false 关闭\"形态),随开关\n// 形态一并退役——功能基本面只有\"有\"与\"没有\",配置键出现即装载期失败。\n\n/** 把宿主/调度器/信箱的结构化错误映射为工具面的同码委托错误(保留原始 message)。 */\nfunction mapCommunicationError(error: unknown): never {\n\tif (error instanceof SubagentMailboxErrorV1) {\n\t\tthrow new SubagentDelegateError(error.code, error.message);\n\t}\n\tif (\n\t\terror instanceof SubagentRuntimeError &&\n\t\t(error.code === \"subagent_unknown_task\" ||\n\t\t\terror.code === \"subagent_not_running\" ||\n\t\t\terror.code === \"subagent_steer_unsupported\")\n\t) {\n\t\tthrow new SubagentDelegateError(error.code, error.message);\n\t}\n\tthrow error as Error;\n}\n\n/** 结构化错误码:调用形状错误、批上限错误与未知角色分开表达,便于调用方分支。 */\nexport type SubagentDelegateErrorCodesV1 =\n\t| \"subagent_invalid_input\"\n\t| \"subagent_batch_too_large\"\n\t| \"subagent_unknown_role\"\n\t/** 宿主未落地或无法自证档案收窄:宁可失败,也不让\"只读评审者\"变成一句空话。 */\n\t| \"subagent_profile_not_applied\"\n\t// S4 通信面:目标定位、运行态与池化边界分开表达。\n\t| \"subagent_unknown_task\"\n\t| \"subagent_unknown_session\"\n\t| \"subagent_not_running\"\n\t| \"subagent_steer_unsupported\"\n\t| \"subagent_session_busy\"\n\t| \"subagent_message_too_large\"\n\t| \"subagent_escalate_quota\"\n\t| \"subagent_inbox_quota\"\n\t/** 嵌套委派深度超限(提交侧执行;与 S5 shared 侧同一语义)。 */\n\t| \"subagent_depth_exceeded\"\n\t/** 本会话累计创建的子代理达到每父级总量上限(提交侧执行)。 */\n\t| \"subagent_child_quota\"\n\t/** 会话角色与当前可见磁盘角色撞名:磁盘角色是用户资产,会话不隐式改写其含义(改用其他 id)。 */\n\t| \"subagent_role_conflict\"\n\t/** 会话角色超过既有硬上限(16 个 / 菜单 ≤2000 字符,磁盘+会话合并计算):拒绝注册并提示精简。 */\n\t| \"subagent_role_quota\"\n\t/** submit 同步拒绝且无结构化 code 时的本地兜底码(与投影 reasonCode 同名)。 */\n\t| \"subagent_submit_rejected\";\n\nexport class SubagentDelegateError extends Error {\n\treadonly code: SubagentDelegateErrorCodesV1;\n\n\tconstructor(code: SubagentDelegateErrorCodesV1, message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SubagentDelegateError\";\n\t\tthis.code = code;\n\t}\n}\n\n/** 终态投影:调度器权威状态词汇 + 本地 submit 拒绝(\"rejected\")。 */\nexport type SubagentDelegateTaskStatusV1 = SubagentRuntimeStatus | \"rejected\";\n\nexport interface SubagentDelegateTaskProjectionV1 {\n\t/** 调度器任务 id;submit 同步抛错的 rejected 条目尚未生成 id,回空串。 */\n\treadonly taskId: string;\n\treadonly status: SubagentDelegateTaskStatusV1;\n\t/**\n\t * 结构化原因码(如 `subagent_queue_full`);无则省略。调度器/适配器抛出的错误\n\t * 无结构化 code 时用本地兜底码 `subagent_submit_rejected`。\n\t */\n\treadonly reasonCode?: string;\n\t/** 失败/取消的原始原因文本。 */\n\treadonly reason?: string;\n\t/** 调度器 settle 截断过消息快照时为 true;未截断时省略。 */\n\treadonly truncated?: true;\n\t/** 有界消息快照的条数(rejected/failed 无记录时为 0)。 */\n\treadonly messageCount: number;\n\t/** 子会话自身的 sessionId(D-060 S1):可按它在会话目录里定位这份 transcript。 */\n\treadonly sessionId?: string;\n\t/** 最后一条 assistant 文本的前 200 字符;找不到则省略。 */\n\treadonly summary?: string;\n\t/**\n\t * 子会话 escalate 上抛的有界消息(D-060 S4):落在父侧下一次工具结果里(这里或\n\t * `subagent_task` type `result`),父回合不被打断;无积压时省略。\n\t */\n\treadonly escalations?: readonly string[];\n\t/**\n\t * 任务层结果(任务级拒绝):子代理以 `subagent_message`(type `refuse`)声明不做该\n\t * 任务时随自然成功结算附 `taskOutcome: \"refused\"`——该拒绝是终局声明;无则省略。\n\t */\n\treadonly taskOutcome?: \"refused\";\n\t/** 拒绝原因;仅与 taskOutcome 同时出现。 */\n\treadonly refusalReason?: string;\n\t/**\n\t * 该子会话相关的兄弟消息流量摘录(D-060 裁决 14 父可见性):from/to 命中的最新\n\t * 至多 8 条,每条 text 截 256 utf-8 字节;无流量时省略。审计日志在信箱侧,drain\n\t * 后摘录仍可回读(历史摘录以信箱日志滚动窗口为界)。\n\t */\n\treadonly siblingTraffic?: readonly { from: string; to: string; text: string }[];\n}\n\nexport interface SubagentDelegateResultV1 {\n\treadonly tasks: readonly SubagentDelegateTaskProjectionV1[];\n}\n\n/** 后台委派票据(D-060 S6):提交即返回,结果稍后经 subagent_task(type `result`)/ 摘要注入获得。 */\nexport interface SubagentDelegateBackgroundTaskV1 {\n\treadonly taskId: string;\n}\n\nexport interface SubagentDelegateBackgroundResultV1 {\n\treadonly background: true;\n\treadonly tasks: readonly SubagentDelegateBackgroundTaskV1[];\n}\n\n/**\n * `subagent_task`(type `cancel`)的返回形状(S4 补充裁决,2026-10-01):调度器 `cancelById` 的\n * 三态 outcome + 寻址 taskId;cancelled / already_terminal 附调度器最终状态,\n * not_found 不带 status(不抛异常——未知 taskId 是可表达的正常结果)。\n */\nexport interface SubagentCancelResultV1 {\n\treadonly outcome: \"cancelled\" | \"already_terminal\" | \"not_found\";\n\treadonly taskId: string;\n\t/** 调度器权威状态;not_found 时省略。 */\n\treadonly status?: SubagentRuntimeStatus;\n}\n\n/**\n * 角色(persona):子代理侧身份,主代理按名调用。\n *\n * **定义只在磁盘上**(与 skill/MCP/插件同构,不搞内置特权):\n * - 共享目录 `<agentDir>/roles/<id>.json` → `{ \"description\": …, \"instructions\": … }`;\n * - 可见性由**当前方案**决定:只有 `suite.associations.roles` 关联到的 id 才出现在\n * `subagent_run` 的菜单里;没关联的角色对主代理不可见(不报错)。\n * - 工厂只做**种子落盘**({@link seedFactoryRoleCatalog},首次缺文件时写入 explore/reviewer/\n * design-proposer/visual-reviewer 四个普通文件,可改可删),默认方案关联它们,因此开箱即用;\n * 引擎从不回退到编译内的定义。\n *\n * 角色今天**确定性地决定子任务的任务框定**(instructions 组装进送交子会话的提示词),\n * 但**不改变子会话的模型与工具面**——后者需要\"子任务档案\"这一公共契约(见\n * docs/design/子代理运行时设计.md §13)。因此角色文件里出现 `model`/`tools`/`readonly`\n * 等键时在装载期直接报错,而不是静默忽略让用户以为\"只读评审者不会写文件\"。\n */\nexport interface SubagentDelegateRoleV1 {\n\treadonly id: string;\n\t/** 给主代理看的一句话说明(工具描述里列出),不送进子会话提示词。 */\n\treadonly description: string;\n\t/** 送进子会话提示词的角色指令(系统提示词由子会话继承父会话,不在这里重复)。 */\n\treadonly instructions: string;\n\t/**\n\t * 子任务档案(收窄语义,公共契约 AgentTaskChildProfileV1):模型 / 思考级别 /\n\t * 工具面 / 会话模式 / 追加系统提示词。子会话创建时由宿主落地,**创建后核验**;\n\t * 宿主不落地或无法核验时该条目失败(`subagent_profile_not_applied`),绝不静默忽略。\n\t * shared 与 pooled 两种形态都落地全部字段——见设计文档 §6。\n\t */\n\treadonly profile?: AgentTaskChildProfileV1;\n\t/**\n\t * 子读父的有界投影(D-060 §4,默认关闭):开启时把父会话的**目标**(最后一条用户文本,\n\t * ≤2KB)、父 sessionId 与父工具面名单拼进子任务提示词。只给目标不给历史——子会话拿不到\n\t * 父上下文全文。\n\t */\n\treadonly parentView?: boolean;\n}\n\n/**\n * 出厂种子(仅用于首次落盘,不是运行期定义):默认方案关联 explore / reviewer /\n * design-proposer / visual-reviewer,因此新装环境开箱即用;用户改文件即生效,删文件则该关联\n * 成为 dangling 诊断。design-proposer / visual-reviewer 共用形式、内容与情境之间恰当而有表现力的关系\n * 这一工作定义,并以六项项目归纳方法组织判断;根据意图、约束与可观察效果取舍。提案角色据此提出方向\n * 与可检查表现,评审角色据此检查实际呈现并按证据判断。两者职责与指令各自落实,不要求逐字共享失败模式\n * 或裁决顺序。角色仍为 readonly + 只读工具档案,种子仅用于首次落盘;结构上不能写代码、不能改文件,\n * 用户改文件即生效。\n */\nconst FACTORY_ROLE_SEEDS: readonly SubagentDelegateRoleV1[] = Object.freeze([\n\tObject.freeze({\n\t\tid: \"explore\",\n\t\tdescription: \"Read-only explorer: locates code and reports file:line evidence\",\n\t\tinstructions:\n\t\t\t\"You are an exploration subagent. Find the relevant code, configuration or documentation and report concrete \" +\n\t\t\t\"evidence as file:line references with a one-line note per hit. Do not modify any file and do not run commands \" +\n\t\t\t\"with side effects. Answer with findings first, then the smallest set of next steps.\",\n\t}),\n\tObject.freeze({\n\t\tid: \"reviewer\",\n\t\tdescription: \"Code reviewer: reads a diff or change set and reports findings and risks\",\n\t\tinstructions:\n\t\t\t\"You are a code-review subagent. Read the change set you are given (diff, files or description) and report \" +\n\t\t\t\"findings ordered by severity: correctness first, then contract/regression risk, then clarity. For each finding \" +\n\t\t\t\"give the location, why it is wrong or risky, and the proper fix at the root cause, not a symptom patch. Do not \" +\n\t\t\t\"modify files. State explicitly when you found nothing in a category instead of inventing issues.\",\n\t}),\n\tObject.freeze({\n\t\tid: \"design-proposer\",\n\t\tdescription: \"设计提案者:只读产出视觉方向提案与验收清单;不写实现代码,不自我判定观感\",\n\t\tinstructions: `你是设计提案者,负责提出视觉方向;功能正确性由编码角色负责,最终视觉判断由视觉审核者负责。你不写实现代码、不修改文件,也不以自我观感代替评审。\n\n【输入】从用户需求、内容、受众、媒介与约束中提炼表达目的和文化气质。缺少信息时标为待确认或明示假设,不把个人偏好设为所有用户的默认。\n\n【工作方法】美是形式、内容与情境之间恰当而有表现力的关系。先表达意图,再组织关系,结合情境取舍,最后观察效果。以下六原理是可选用的方法,不要求使用中国符号、固定风格、特定色相或质感:以意统形(表达意图指导形式);虚实相生(显露与保留协同,必需信息不能隐藏);疏密有致(密处有组织、疏处有作用,不强求低密度);气韵贯通(用节奏、呼应、动势维系整体气质);变化有度(按目的安排统一与变化,有意的微差可以形成层次);因境制宜(根据需求、受众、内容、媒介与约束取舍)。有理由不等于效果成立,形式须在提案中说明如何服务意图。不要承诺设计方法会在所有情境稳定产出美。\n\n【提案结构】按六节组织提案,写清表达意图、元素关系、情境取舍和可检查的表现:\n1. 风格宣言:用 1-2 个词命名方向,再用 3-5 句话说明表达目的、受众感受与文化气质,以及空间形式、色彩材质、构图节奏如何共同承载它。\n2. 配色角色表:按背景、主色、强调色、中性阶(语义色按需)说明角色、作用及相对明度与饱和度。色彩和质感依表达意图、内容与约束决定;不预设色相或数量。需要色相变化时说明它带来的表达或语义作用,给出的色值注明仅示意。\n3. 布局与层级策略:说明主要信息及视觉入口如何对应表达目的;允许一个或多个焦点,按内容关系组织层级。可组合尺寸、字重、颜色、位置、隔离等信号;分组可使用邻近、间距或容器,并说明关系是否清晰。间距与节奏服务整体组织,不要求固定阶梯。\n4. 文案密度预算:说明信息取舍、各区域的信息量和密度如何服务内容与阅读;需要删减、保留或集中信息时说明理由,不默认砍字或追求低密度。\n5. 验收清单:交给视觉审核者的可检查清单,保留层级、焦点、对齐、间距、密度、对比、一致性、平衡、色彩秩序、动线、收口 11 个维度;按本次意图与约束写成可核对的表现,不把偏好写成普遍要求。\n6. 明确不做项:列出本轮不采用的做法及其理由;加、减或保留元素都根据目的与效果取舍。\n\n【判断纪律】这些是观察线索,不是自动判错规则:平、挤、花、歪、噪、脏以及层级、密度、色彩、对齐等仅在具体元素和关系影响表达目的、必要信息可读性或用户约束时指明。颜色、材质、容器、留白、疏密和构图不因风格偏好本身被排除。有理由不等于效果成立,实际呈现仍须支持意图;表达意图不能豁免用户硬约束或必要信息的可读性。`,\n\t\tprofile: Object.freeze({ version: 1, tools: Object.freeze([\"read\"]), mode: \"readonly\" }),\n\t}),\n\tObject.freeze({\n\t\tid: \"visual-reviewer\",\n\t\tdescription: \"视觉审核者:只读检查实际可观察的视觉呈现,按证据支持的维度判断;不审代码功能,不修改文件\",\n\t\tinstructions: `你是视觉审核者,只读检查任务中实际可观察的视觉呈现。美是形式、内容与情境之间恰当而有表现力的关系;它不是科学评分或跨文化唯一答案。根据用户需求、内容、受众、媒介与约束理解表达目的和文化气质,不把个人偏好设为所有用户的默认;证据支持什么判断什么。不审代码功能正确性,不修改任何文件。\n\n【方法】先表达意图,再组织关系,结合情境取舍,最后观察效果。以下六原理是可按意图选用的组织方法,不要求使用中国符号、固定风格、特定色相或质感:以意统形(表达意图指导形式);虚实相生(显露与保留协同,必需信息不能隐藏);疏密有致(密处有组织、疏处有作用,不强求低密度);气韵贯通(节奏、呼应、动势维系整体气质);变化有度(统一与变化依目的取舍,有意的微差可形成层次);因境制宜(按用户需求、内容、受众、媒介与约束取舍)。对照已有意图和约束检查这些关系如何体现在呈现中;实际效果是否支持表达意图,应由可观察证据判断,有理由不等于效果成立。\n\n【六原理的审核动作】对照已有意图与用户约束检查:以意统形,观察形式是否支持表达目的;虚实相生,观察显露与保留是否协作、必要信息是否可见;疏密有致,观察信息密度和留白是否共同组织内容;气韵贯通,观察节奏、呼应、动势是否通过具体元素关系维系气质;变化有度,观察统一与变化是否服务目的,有意的微差可形成层次;因境制宜,观察选择是否适合需求、受众、内容、媒介与约束。\n\n【输入】待审视觉呈现及任务背景;如有设计提案或验收清单,一并作为本次对照。只评审实际读到并能观察的内容。多份同类产物逐份检查,并比较其一致性(如边距、色彩、字级及组件待遇)。证据缺失、无法访问或无法解读时,如实说明具体原因;没有任何可观察证据时,总评为 Unverified,并报告\"无法执行视觉评审\"。\n\n【观察动线(按序执行,先整体后局部)】\n1. 意图与入口:先回看表达目的与内容重点,再观察一个或多个视觉入口是否帮助理解;不能仅因焦点不唯一判错。\n2. 关系观察:略去局部细节后,观察主要关系、层次、疏密与节奏是否支持表达意图;不把均匀、低密度或某种构图单独判错。\n3. 灰度观察:需要判断色彩是否承担层级作用时,可借灰度观察层次;它是辅助证据,不替代完整呈现,也不以结果单独判错。\n4. 维度走查:根据任务目标与验收要求检查必要维度。\n5. 细节观察:检查对齐、间距、边缘与细节是否符合本次媒介、意图和约束。\n\n【评审维度】按本次意图与约束解释:层级(信息关系是否支持理解与目的);焦点(视觉入口是否对应重点,允许多个);对齐(对齐关系是否有意且连贯);间距(疏密是否组织内容关系与节奏);密度(信息量是否适合目的、内容与阅读);对比(差异是否服务表达且不相互冲突);一致性(重复与变化是否形成有意关系);平衡(视觉重量是否支持表达);色彩秩序(色彩角色、关系及其表达作用,不按固定色数判错);动线(视线关系是否帮助理解);收口(细节是否影响本次表达或约束)。\n\n容器可以服务层级、语义、交互、情绪、气质或文化表达;不能仅因邻近也能分组就判错。观察容器是否确实支持本次表达目的;只有缺少可观察作用且造成额外视觉负担,或同类容器待遇无理由不一致时,才指认问题。这些是观察线索,不是自动判错规则:诸如平、挤、花、歪、噪、脏,只有在具体元素与关系损害表达意图、必要信息可读性或用户约束时才报告。效果可以服务功能、理解、情感、气质或文化意味,不限于层级与语义。\n\n六原理的运用本身不是验收项。主观改进建议不能冒充违规;“缺少气韵”等抽象评价,必须指出具体元素、关系与目标证据。艺术意图不能豁免必要信息可读性或用户硬约束。必要信息不可读或违反用户明确约束时,按实际证据判定问题。\n\n【证据与评审范围】先按任务目标与已有验收清单确定必要检查的维度和范围。必要项不能因证据缺失改标不适用;只有任务目标本身不要求的维度才可标不适用并说明理由。必要信息缺失时对应项为 Unverified;结论只覆盖实际检查范围,不能外推为完整视觉已通过。已发现问题但其他必要项仍未知时,总评为 fail,并保留未知项。\n\n【输出协议】总结论条件:已证实违反评审要求的问题 → fail;无已知违反但必要检查证据不足 → Unverified(无法确认);必要检查完成且无违反 → pass。逐条列出已证实问题,每条包含:维度、位置(哪个元素)、为什么(违反了什么)、最小改法。必要时列出 Unverified 项;结尾列出本次已检查的维度。禁止虚构像素测量。pass 仅说明本次要求范围通过,不代表普遍的美或保证用户喜欢。`,\n\t\tprofile: Object.freeze({ version: 1, tools: Object.freeze([\"read\"]), mode: \"readonly\" }),\n\t}),\n]);\n\nconst ROLE_ID_PATTERN = /^[a-z0-9][a-z0-9_-]{0,31}$/;\nconst ROLE_DESCRIPTION_CHARS = 200;\nconst ROLE_INSTRUCTIONS_CHARS = 8000;\n/** 角色数量与\"菜单\"总长上限:菜单是主代理工具描述的一部分,必须有界。 */\nconst ROLE_COUNT_LIMIT = 16;\nconst ROLE_MENU_CHARS = 2000;\nconst ROLE_KNOWN_KEYS = [\n\t\"description\",\n\t\"instructions\",\n\t\"model\",\n\t\"thinkingLevel\",\n\t\"tools\",\n\t\"writeScope\",\n\t\"mode\",\n\t\"webSearch\",\n\t\"systemPromptAppend\",\n\t\"parentView\",\n] as const;\n/** 用户角色目录(agentDir 下),与 `<agentDir>/capabilities/` 并列。 */\nconst ROLE_CATALOG_DIR = \"roles\";\n/** 解析结果:暴露集(按方案关联过滤后)+ 可诊断的异常,装载与诊断共用同一实现。 */\nexport interface SubagentRoleCatalogResolutionV1 {\n\t/** 当前方案可见的角色(内置定义 ∪ 用户目录,再按 associations 过滤)。 */\n\treadonly roles: ReadonlyMap<string, SubagentDelegateRoleV1>;\n\t/** 被方案关联、但内置与用户目录都没有定义的角色 id(诊断,不阻断)。 */\n\treadonly dangling: readonly string[];\n\t/** 未被关联、但用户文件非法的角色文件:只在被关联时才致命,这里记录用于诊断。 */\n\treadonly brokenUnassociated: readonly string[];\n}\n\nfunction validateRoleDefinition(id: string, value: unknown, origin: string): SubagentDelegateRoleV1 | undefined {\n\tif (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n\t\tthrow new Error(`${origin} must be an object with description and instructions`);\n\t}\n\tconst fields = value as Record<string, unknown>;\n\tfor (const key of Object.keys(fields)) {\n\t\tif (!(ROLE_KNOWN_KEYS as readonly string[]).includes(key)) {\n\t\t\tthrow new Error(`${origin}.${key} is not a recognized role field (known: ${ROLE_KNOWN_KEYS.join(\", \")})`);\n\t\t}\n\t}\n\tconst description = fields.description;\n\tif (typeof description !== \"string\" || description.trim() === \"\" || description.length > ROLE_DESCRIPTION_CHARS) {\n\t\tthrow new Error(\n\t\t\t`${origin}.description must be a non-empty string of at most ${ROLE_DESCRIPTION_CHARS} chars, got ` +\n\t\t\t\tJSON.stringify(description),\n\t\t);\n\t}\n\tconst instructions = fields.instructions;\n\tif (\n\t\ttypeof instructions !== \"string\" ||\n\t\tinstructions.trim() === \"\" ||\n\t\tinstructions.length > ROLE_INSTRUCTIONS_CHARS\n\t) {\n\t\tthrow new Error(`${origin}.instructions must be a non-empty string of at most ${ROLE_INSTRUCTIONS_CHARS} chars`);\n\t}\n\t// 档案字段交给公共解析器校验(类型/范围/未知键都在那里拦),错误文本带上文件来源。\n\tconst profileInput: Record<string, unknown> = { version: 1, roleId: id };\n\tfor (const key of [\n\t\t\"model\",\n\t\t\"thinkingLevel\",\n\t\t\"tools\",\n\t\t\"writeScope\",\n\t\t\"mode\",\n\t\t\"webSearch\",\n\t\t\"systemPromptAppend\",\n\t] as const) {\n\t\tif (fields[key] !== undefined) profileInput[key] = fields[key];\n\t}\n\tconst hasProfile = Object.keys(profileInput).length > 1;\n\tlet profile: AgentTaskChildProfileV1 | undefined;\n\tif (hasProfile) {\n\t\tconst parsed = parseAgentTaskChildProfileV1(profileInput);\n\t\tif (!parsed.ok) throw new Error(`${origin}: ${parsed.message}`);\n\t\tprofile = parsed.profile;\n\t}\n\tconst parentView = fields.parentView;\n\tif (parentView !== undefined && typeof parentView !== \"boolean\") {\n\t\tthrow new Error(`${origin}.parentView must be a boolean`);\n\t}\n\treturn {\n\t\tid,\n\t\tdescription,\n\t\tinstructions,\n\t\t...(profile === undefined ? {} : { profile }),\n\t\t...(parentView === true ? { parentView: true } : {}),\n\t};\n}\n\n/** 角色菜单字符数(工具描述里每个角色占 `id — description`;装载期与注册期共用同一公式)。 */\nfunction roleMenuChars(roles: Iterable<SubagentDelegateRoleV1>): number {\n\tlet total = 0;\n\tfor (const role of roles) total += role.id.length + role.description.length + 3;\n\treturn total;\n}\n\n/** 未知角色 id 的拒绝文本(resolveRole 与角色工具共用,措辞保持稳定)。 */\nfunction unknownRoleMessage(id: string, roles: ReadonlyMap<string, SubagentDelegateRoleV1>): string {\n\tconst available = [...roles.keys()].sort();\n\treturn (\n\t\t`unknown subagent role ${JSON.stringify(id)}; available roles: ` +\n\t\t(available.length === 0 ? \"(none configured)\" : available.join(\", \"))\n\t);\n}\n\n/**\n * 角色是否带**收窄档案**(profile 里除基线 version/roleId 外还有 model/thinkingLevel/\n * tools/writeScope/mode/systemPromptAppend)。`role.profile !== undefined` 不是这个意思:档案基线\n * 恒含 roleId,因此任何角色都带 profile;\"带收窄\"看的是有没有收窄字段。\n */\nfunction hasNarrowingProfile(role: SubagentDelegateRoleV1): boolean {\n\tconst profile = role.profile;\n\treturn (\n\t\tprofile !== undefined &&\n\t\t(profile.model !== undefined ||\n\t\t\tprofile.thinkingLevel !== undefined ||\n\t\t\tprofile.tools !== undefined ||\n\t\t\tprofile.writeScope !== undefined ||\n\t\t\tprofile.mode !== undefined ||\n\t\t\tprofile.webSearch !== undefined ||\n\t\t\tprofile.systemPromptAppend !== undefined)\n\t);\n}\n\n// ---------------------------------------------------------------------------\n// 会话级子代理角色(session-scoped roles,D-081,2026-10-03 用户裁决落地)\n//\n// 主代理可用角色 = 磁盘角色(方案 associations ∩ 目录文件)∪ 会话角色。会话角色由\n// 主代理在会话内用 `subagent_role`(type `set`)注册,随会话文件持久化(下次打开仍在),\n// 不写 `<agentDir>/roles/`、不跨会话共享、子代理不继承。磁盘角色优先:撞名的注册\n// 被结构化拒绝,装载期合并时撞名的会话角色被忽略并 warn。\n// ---------------------------------------------------------------------------\n\n/**\n * 会话角色快照条目的 customType(跨插件契约,workflow 软校验按此字面量读取):\n * data = `{ version: 1, roles: [...] }` **全量快照**、append-only;恢复时反向扫描\n * 最近一条可解析快照(与 goal/plan/todo/workflow 的 loadState 同构)。压缩只影响\n * LLM 上下文投影,`getBranchEntries` 始终返回完整分支,按分支重建因此压缩安全。\n */\nexport const SESSION_ROLE_STATE_ENTRY = \"subagent.roles.state\" as const;\n\n/**\n * 快照里的单个角色:与角色文件同构的**平铺定义** + id(文件形态的 id 来自文件名,\n * 条目里必须自带)。收窄字段平铺为 model/thinkingLevel/tools/writeScope/mode/systemPromptAppend,\n * 载入内存时仍归一化为 `SubagentDelegateRoleV1`(profile 嵌套形态)。\n */\nexport interface SubagentSessionRoleRecordV1 {\n\treadonly id: string;\n\treadonly description: string;\n\treadonly instructions: string;\n\treadonly model?: string;\n\treadonly thinkingLevel?: string;\n\treadonly tools?: readonly string[];\n\treadonly writeScope?: readonly string[];\n\treadonly mode?: \"readonly\" | \"full-control\";\n\treadonly webSearch?: \"off\" | \"auto\";\n\treadonly systemPromptAppend?: string;\n\treadonly parentView?: boolean;\n}\n\n/** 会话角色快照条目 data 的形状(必须 JSON 可序列化)。 */\nexport interface SubagentSessionRolesStateV1 {\n\treadonly version: 1;\n\treadonly roles: readonly SubagentSessionRoleRecordV1[];\n}\n\n/** `subagent_role`(type `list`,无 id)的摘要条目:来源 + 一句话说明 + 收窄面有无。 */\nexport interface SubagentRoleListEntryV1 {\n\treadonly id: string;\n\treadonly origin: \"disk\" | \"session\";\n\treadonly description: string;\n\treadonly hasProfile: boolean;\n\treadonly hasParentView: boolean;\n}\n\nexport interface SubagentRoleListResultV1 {\n\treadonly roles: readonly SubagentRoleListEntryV1[];\n}\n\n/** `subagent_role`(type `list`,带 `id`)的完整定义(含 instructions 与收窄字段,供读-改-写)。 */\nexport interface SubagentRoleDefinitionViewV1 extends SubagentSessionRoleRecordV1 {\n\treadonly origin: \"disk\" | \"session\";\n}\n\nexport interface SubagentRoleViewResultV1 {\n\treadonly role: SubagentRoleDefinitionViewV1;\n}\n\n/** `subagent_role`(type `set`)的结果:created/updated + 合并后全部可用角色 id(排序)。 */\nexport interface SubagentRoleSetResultV1 {\n\treadonly id: string;\n\treadonly status: \"created\" | \"updated\";\n\treadonly roles: readonly string[];\n}\n\n/** `subagent_role`(type `remove`)的结果:removed + 合并后全部可用角色 id(排序)。 */\nexport interface SubagentRoleRemoveResultV1 {\n\treadonly id: string;\n\treadonly status: \"removed\";\n\treadonly roles: readonly string[];\n}\n\n/** 运行期角色 → 会话快照条目(平铺收窄字段,读-改-写与角色文件同构)。 */\nexport function toSessionRoleRecord(role: SubagentDelegateRoleV1): SubagentSessionRoleRecordV1 {\n\tconst profile = role.profile;\n\treturn {\n\t\tid: role.id,\n\t\tdescription: role.description,\n\t\tinstructions: role.instructions,\n\t\t...(profile?.model === undefined ? {} : { model: profile.model }),\n\t\t...(profile?.thinkingLevel === undefined ? {} : { thinkingLevel: profile.thinkingLevel }),\n\t\t...(profile?.tools === undefined ? {} : { tools: profile.tools }),\n\t\t...(profile?.writeScope === undefined ? {} : { writeScope: profile.writeScope }),\n\t\t...(profile?.mode === undefined ? {} : { mode: profile.mode }),\n\t\t...(profile?.webSearch === undefined ? {} : { webSearch: profile.webSearch }),\n\t\t...(profile?.systemPromptAppend === undefined ? {} : { systemPromptAppend: profile.systemPromptAppend }),\n\t\t...(role.parentView === true ? { parentView: true } : {}),\n\t};\n}\n\n/**\n * 恢复水合(D-081):从 `getBranchEntries()` 反向扫描最近一条**可解析**的会话角色\n * 快照。快照级损坏(非对象/版本不符/roles 非数组)→ warn 后继续向前找;快照合法但\n * 个别角色非法(id 形状、字段/档案校验不过)→ 丢弃该角色并 warn、保留其余;全部\n * 不可解析 → 空数组。损坏不阻断会话启动。\n */\nexport function readSessionRoles(\n\tsession: Pick<SessionAPI, \"getBranchEntries\"> | undefined,\n\tlogger?: LoggerAPI,\n): readonly SubagentDelegateRoleV1[] {\n\tconst entries = session?.getBranchEntries() ?? [];\n\tfor (let index = entries.length - 1; index >= 0; index -= 1) {\n\t\tconst entry = entries[index] as SessionEntryView | undefined;\n\t\tif (entry?.customType !== SESSION_ROLE_STATE_ENTRY) continue;\n\t\tconst snapshot = entry.data;\n\t\tif (!isPlainRecord(snapshot) || snapshot.version !== 1 || !Array.isArray(snapshot.roles)) {\n\t\t\tlogger?.warn?.(\n\t\t\t\t`session role state entry ${entry.id} is not a readable snapshot (want { version: 1, roles: [...] }); ` +\n\t\t\t\t\t\"reading the previous snapshot\",\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst roles: SubagentDelegateRoleV1[] = [];\n\t\tfor (const [roleIndex, raw] of (snapshot.roles as readonly unknown[]).entries()) {\n\t\t\tconst origin = `${SESSION_ROLE_STATE_ENTRY}[${roleIndex}]`;\n\t\t\tif (!isPlainRecord(raw) || typeof raw.id !== \"string\" || !ROLE_ID_PATTERN.test(raw.id)) {\n\t\t\t\tlogger?.warn?.(`${origin} has no valid role id; entry dropped`);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\t// id 来自条目本身;其余键原样交给与角色文件同一套校验(未知键照样拒绝)。\n\t\t\tconst definition: Record<string, unknown> = {};\n\t\t\tfor (const [key, value] of Object.entries(raw)) {\n\t\t\t\tif (key !== \"id\") definition[key] = value;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst role = validateRoleDefinition(raw.id, definition, origin);\n\t\t\t\tif (role !== undefined) roles.push(role);\n\t\t\t} catch (error) {\n\t\t\t\tlogger?.warn?.(\n\t\t\t\t\t`${origin} (role ${JSON.stringify(raw.id)}) is invalid and was dropped: ${errorText(error)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn Object.freeze(roles);\n\t}\n\treturn Object.freeze([]);\n}\n\n/**\n * 磁盘角色与会话角色的合并结果(装载期水合与注册期预算共用同一实现)。\n *\n * **数据与视图分离**:预算是**暴露**预算,不是数据删除——未被暴露的会话角色仍留在\n * 会话文件里(后续任何一次 set/remove 重写全量快照都不会把它们抹掉),只是当前不进\n * 可用集。监视语义 = 数据保留(sessionRoles)、视图收窄(roles)。\n */\nexport interface SubagentSessionRoleMergeV1 {\n\t/**\n\t * 快照读取到的**全部**合法会话角色(快照顺序):含被磁盘遮蔽与超出暴露预算的项。\n\t * 这是会话文件里的数据(持久化写它),不等于主代理当前可见的可用集。\n\t */\n\treadonly sessionRoles: ReadonlyMap<string, SubagentDelegateRoleV1>;\n\t/** 可用集 = 可见磁盘角色 ∪ 通过暴露预算的会话角色(磁盘优先)——菜单/`role` 枚举只看它。 */\n\treadonly roles: ReadonlyMap<string, SubagentDelegateRoleV1>;\n\t/** 与可见磁盘角色撞名而被遮蔽的会话角色 id:保留在会话文件中,当前不暴露(诊断)。 */\n\treadonly shadowedByDisk: readonly string[];\n\t/** 超出 16 个 / 2000 字符**暴露**预算而未被暴露的会话角色 id:保留在会话文件中(诊断)。 */\n\treadonly droppedForQuota: readonly string[];\n}\n\n/**\n * 合并磁盘角色与会话角色(D-081):**磁盘优先**——撞名的会话角色不暴露并 warn(磁盘\n * 角色是用户资产),但其数据仍留在会话文件里;水合按快照顺序把会话角色收进暴露预算\n * (≤16 个、菜单 ≤2000 字符,磁盘+会话合并计算),超出部分不暴露并 warn——历史快照\n * 可能因上限收紧或磁盘角色增加而超限,但不阻断会话启动,也不删除数据。\n */\nexport function mergeSubagentRoles(\n\tdiskRoles: ReadonlyMap<string, SubagentDelegateRoleV1>,\n\tsessionRoles: readonly SubagentDelegateRoleV1[],\n\tlogger?: LoggerAPI,\n): SubagentSessionRoleMergeV1 {\n\t// 数据层:快照里的合法会话角色全量保留(同 id 后者覆盖前者,与快照顺序一致)。\n\tconst data = new Map<string, SubagentDelegateRoleV1>();\n\t// 视图层:磁盘角色优先,会话角色按快照顺序通过暴露预算。\n\tconst roles = new Map(diskRoles);\n\tconst shadowedByDisk: string[] = [];\n\tconst droppedForQuota: string[] = [];\n\tfor (const role of sessionRoles) {\n\t\tdata.set(role.id, role);\n\t\tif (diskRoles.has(role.id)) {\n\t\t\tshadowedByDisk.push(role.id);\n\t\t\tlogger?.warn?.(\n\t\t\t\t`session role \"${role.id}\" is shadowed by a visible disk role: kept in the session file but not exposed ` +\n\t\t\t\t\t\"(the disk role wins)\",\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\tconst prospectiveChars = roleMenuChars([...roles.values(), role]);\n\t\tif (roles.size + 1 > ROLE_COUNT_LIMIT || prospectiveChars > ROLE_MENU_CHARS) {\n\t\t\tdroppedForQuota.push(role.id);\n\t\t\tlogger?.warn?.(\n\t\t\t\t`session role \"${role.id}\" exceeds the ${ROLE_COUNT_LIMIT}-role / ${ROLE_MENU_CHARS}-char exposure budget: ` +\n\t\t\t\t\t\"kept in the session file but not exposed\",\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\t\troles.set(role.id, role);\n\t}\n\treturn {\n\t\tsessionRoles: data,\n\t\troles,\n\t\tshadowedByDisk: Object.freeze(shadowedByDisk),\n\t\tdroppedForQuota: Object.freeze(droppedForQuota),\n\t};\n}\n\n/** 注册点的预算错误文本(undefined = 在预算内):与装载期上限同一常量,附精简建议。 */\nfunction roleQuotaViolation(roles: ReadonlyMap<string, SubagentDelegateRoleV1>): string | undefined {\n\tif (roles.size > ROLE_COUNT_LIMIT) {\n\t\treturn (\n\t\t\t`registering this session role would expose ${roles.size} roles; at most ${ROLE_COUNT_LIMIT} are allowed ` +\n\t\t\t\"(the menu rides in the parent's tool description on every request) — remove unused session roles first\"\n\t\t);\n\t}\n\tconst chars = roleMenuChars(roles.values());\n\tif (chars > ROLE_MENU_CHARS) {\n\t\treturn (\n\t\t\t`registering this session role would grow the role menu to ${chars} chars; at most ${ROLE_MENU_CHARS} are ` +\n\t\t\t\"allowed — shorten descriptions or remove session roles first\"\n\t\t);\n\t}\n\treturn undefined;\n}\n\n/**\n * 解析当前方案的角色目录(**全部来自磁盘**,无编译内定义)。装载期一次性完成,\n * 任何会让\"配置了但没生效\"的情况都显式失败:\n * - 被关联 + 文件存在但非法 → 抛错(指名文件);\n * - 被关联但目录里没有该 id → dangling(诊断,角色不可见),调用该名走 `subagent_unknown_role`;\n * - 未被关联的坏文件只进诊断:别的方案不该被一个用不到的文件拖垮;\n * - 暴露集受 16 个 / 2000 字符上限约束(菜单是主代理工具描述的一部分)。\n */\nexport function resolveSubagentRoleCatalog(options: {\n\treadonly agentDir: string;\n\treadonly associations: readonly string[];\n}): SubagentRoleCatalogResolutionV1 {\n\tconst associated = [...new Set(options.associations)];\n\tconst roles = new Map<string, SubagentDelegateRoleV1>();\n\tconst dangling: string[] = [];\n\tconst brokenUnassociated: string[] = [];\n\tconst catalogDir = join(options.agentDir, ROLE_CATALOG_DIR);\n\tlet entries: string[] = [];\n\ttry {\n\t\tentries = readdirSync(catalogDir).filter((name) => name.endsWith(\".json\"));\n\t} catch {\n\t\t// 目录不存在(未种子化/未配置)是正常状态。\n\t\tentries = [];\n\t}\n\tfor (const entry of entries) {\n\t\tconst id = entry.slice(0, -\".json\".length);\n\t\tif (!ROLE_ID_PATTERN.test(id)) continue;\n\t\tconst origin = `${catalogDir}/${entry}`;\n\t\tconst isAssociated = associated.includes(id);\n\t\tlet parsed: unknown;\n\t\ttry {\n\t\t\tparsed = JSON.parse(readFileSync(join(catalogDir, entry), \"utf8\"));\n\t\t} catch (error) {\n\t\t\tif (isAssociated) {\n\t\t\t\tthrow new Error(`subagent role \"${id}\" is associated by this suite but ${origin} is unreadable`, {\n\t\t\t\t\tcause: error,\n\t\t\t\t});\n\t\t\t}\n\t\t\tbrokenUnassociated.push(id);\n\t\t\tcontinue;\n\t\t}\n\t\tlet role: SubagentDelegateRoleV1 | undefined;\n\t\ttry {\n\t\t\trole = validateRoleDefinition(id, parsed, origin);\n\t\t} catch (error) {\n\t\t\tif (isAssociated) throw error;\n\t\t\tbrokenUnassociated.push(id);\n\t\t\tcontinue;\n\t\t}\n\t\tif (isAssociated && role !== undefined) roles.set(id, role);\n\t}\n\tfor (const id of associated) {\n\t\tif (!ROLE_ID_PATTERN.test(id)) {\n\t\t\tthrow new Error(\n\t\t\t\t`suite associations.roles entry ${JSON.stringify(id)} is not a valid role id (expect lowercase [a-z0-9_-], ` +\n\t\t\t\t\t\"max 32 chars)\",\n\t\t\t);\n\t\t}\n\t\tif (!roles.has(id)) dangling.push(id);\n\t}\n\tif (roles.size > ROLE_COUNT_LIMIT) {\n\t\tthrow new Error(\n\t\t\t`suite associations.roles exposes ${roles.size} roles; at most ${ROLE_COUNT_LIMIT} are allowed — the role menu ` +\n\t\t\t\t\"rides in the parent's tool description on every request, and an unbounded menu degrades the main agent's own context\",\n\t\t);\n\t}\n\tconst menuChars = roleMenuChars(roles.values());\n\tif (menuChars > ROLE_MENU_CHARS) {\n\t\tthrow new Error(\n\t\t\t`suite associations.roles menu is ${menuChars} chars; at most ${ROLE_MENU_CHARS} are allowed — shorten role ` +\n\t\t\t\t\"descriptions or associate fewer roles (the menu is part of the parent's tool description)\",\n\t\t);\n\t}\n\treturn { roles, dangling: Object.freeze(dangling), brokenUnassociated: Object.freeze(brokenUnassociated) };\n}\n\n/** 角色文件名(`<agentDir>/roles/<id>.json`),供种子与目录与文档共用一处。 */\nexport function subagentRoleCatalogPath(agentDir: string, id: string): string {\n\treturn join(agentDir, ROLE_CATALOG_DIR, `${id}.json`);\n}\n\n/**\n * 出厂种子落盘(仅补缺,绝不覆盖既有文件):默认方案关联四个种子角色,\n * 因此新环境开箱即用;这些文件与用户自己写的角色完全同权——改文件即生效,\n * 删文件使关联成为 dangling 诊断。引擎运行期从不回退到编译内的角色定义。\n */\nexport function seedFactoryRoleCatalog(agentDir: string): void {\n\tconst dir = join(agentDir, ROLE_CATALOG_DIR);\n\ttry {\n\t\tmkdirSync(dir, { recursive: true });\n\t} catch {\n\t\treturn; // 不可写(只读 agentDir):角色可选,不阻断启动。\n\t}\n\tfor (const role of FACTORY_ROLE_SEEDS) {\n\t\tconst path = subagentRoleCatalogPath(agentDir, role.id);\n\t\tif (existsSync(path)) continue;\n\t\t// 文件形状与用户手写角色一致(平铺键):description/instructions + 可选档案键。\n\t\tconst file: Record<string, unknown> = { description: role.description, instructions: role.instructions };\n\t\tfor (const key of [\n\t\t\t\"model\",\n\t\t\t\"thinkingLevel\",\n\t\t\t\"tools\",\n\t\t\t\"writeScope\",\n\t\t\t\"mode\",\n\t\t\t\"webSearch\",\n\t\t\t\"systemPromptAppend\",\n\t\t] as const) {\n\t\t\tconst value = role.profile?.[key];\n\t\t\tif (value !== undefined) file[key] = value;\n\t\t}\n\t\tif (role.parentView === true) file.parentView = true;\n\t\ttry {\n\t\t\twriteFileSync(path, `${JSON.stringify(file, null, 2)}\\n`, {\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tflag: \"wx\",\n\t\t\t});\n\t\t} catch {\n\t\t\t// 并发种子化或只读目录:已在磁盘上或不需要,保持现状。\n\t\t}\n\t}\n}\n\n/** 父投影上限:目标文本与工具面名单都取小值(这是\"背景\",不是父上下文回灌)。 */\nconst PARENT_VIEW_GOAL_CHARS = 2000;\nconst PARENT_VIEW_TOOL_LIMIT = 40;\n\n/** 从父会话消息里取最后一条用户文本(有界),作为\"父当前目标\"。 */\nfunction lastUserText(messages: readonly unknown[], limit: number): string | undefined {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (typeof message !== \"object\" || message === null) continue;\n\t\tconst record = message as { role?: string; content?: unknown };\n\t\tif (record.role !== \"user\") continue;\n\t\tconst raw =\n\t\t\ttypeof record.content === \"string\"\n\t\t\t\t? record.content\n\t\t\t\t: Array.isArray(record.content)\n\t\t\t\t\t? record.content.map((part) => (part as { type?: string; text?: string }).text ?? \"\").join(\"\")\n\t\t\t\t\t: \"\";\n\t\tconst trimmed = raw.trim();\n\t\tif (trimmed === \"\") continue;\n\t\treturn trimmed.length <= limit ? trimmed : `${trimmed.slice(0, limit)}…`;\n\t}\n\treturn undefined;\n}\n\n/**\n * 子读父(D-060 §4):父会话的**有界投影**——sessionId、当前目标(最后一条用户文本,截断)、\n * 工具面名单。默认关闭;开启后拼在角色指令与任务之间。父历史全文永不进入子会话。\n */\nfunction composeParentView(session: CapabilityAPI[\"session\"], parentSessionId: string): string | undefined {\n\tconst goal = session === undefined ? undefined : lastUserText(session.getMessages(), PARENT_VIEW_GOAL_CHARS);\n\tconst tools = session?.getActiveTools?.() ?? [];\n\tconst toolList = tools.slice(0, PARENT_VIEW_TOOL_LIMIT).join(\", \");\n\treturn [\n\t\t\"Parent context (bounded projection; the parent's full history is not available to you):\",\n\t\t`- parent session: ${parentSessionId}`,\n\t\t...(goal === undefined ? [] : [`- current goal: ${goal}`]),\n\t\t...(toolList === \"\" ? [] : [`- parent tools: ${toolList}`]),\n\t].join(\"\\n\");\n}\n\n/**\n * 角色框定:角色指令在上、任务在下,任务原文原样保留(子会话看不到父会话历史,\n * 因此这段文本是它唯一的\"我是谁 + 做什么\"来源)。组装后的字节数仍走 submit 侧\n * maxPromptBytes 预算,超限按预算拒绝而不是静默截断。\n */\nfunction composeRolePrompt(role: SubagentDelegateRoleV1, prompt: string): string {\n\treturn `${role.instructions}\\n\\nTask:\\n${prompt}`;\n}\n\n/**\n * 父→子指针注入(错误教训与召回质量护栏设计 §2.3):可选结构化 `context`(文件:行\n * 锚点、已试失败命令清单),确定性渲染进子会话首条 prompt 头部。只传路标不传内容:\n * 子代理仍自行读取真实文件,指针过期不产生错误事实。硬边界超限走 schema 校验失败\n * 整体拒绝——拒绝优于静默截断:父代理必须知道子代理没拿到完整锚点。\n */\nexport interface SubagentDelegateContextAnchorV1 {\n\treadonly path: string;\n\treadonly line?: number;\n\treadonly note?: string;\n}\n\nexport interface SubagentDelegateContextFailedAttemptV1 {\n\treadonly command: string;\n\treadonly note?: string;\n}\n\nexport interface SubagentDelegateContextV1 {\n\treadonly anchors?: readonly SubagentDelegateContextAnchorV1[];\n\treadonly failedAttempts?: readonly SubagentDelegateContextFailedAttemptV1[];\n}\n\n/** context 硬边界(设计 §2.3):两个列表 ≤10 项、note ≤200 字符、path/command ≤500 字符。 */\nconst CONTEXT_LIST_MAX_ITEMS = 10;\nconst CONTEXT_NOTE_MAX_CHARS = 200;\nconst CONTEXT_PATH_MAX_CHARS = 500;\nconst CONTEXT_COMMAND_MAX_CHARS = 500;\n\nfunction parseContextNote(value: unknown, origin: string): string | undefined {\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"string\" || value.length > CONTEXT_NOTE_MAX_CHARS) {\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t`${origin} must be a string of at most ${CONTEXT_NOTE_MAX_CHARS} chars`,\n\t\t);\n\t}\n\treturn value === \"\" ? undefined : value;\n}\n\nfunction parseContextList<T>(\n\tvalue: unknown,\n\tlabel: string,\n\tparseEntry: (entry: Record<string, unknown>, origin: string) => T,\n): readonly T[] {\n\tif (!Array.isArray(value)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `subagent_run context.${label} must be an array`);\n\t}\n\tif (value.length > CONTEXT_LIST_MAX_ITEMS) {\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t`subagent_run context.${label} accepts at most ${CONTEXT_LIST_MAX_ITEMS} entries; received ${value.length}`,\n\t\t);\n\t}\n\treturn value.map((entry, index) => {\n\t\tconst origin = `subagent_run context.${label}[${index}]`;\n\t\tif (!isPlainRecord(entry)) {\n\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `${origin} must be an object`);\n\t\t}\n\t\treturn parseEntry(entry, origin);\n\t});\n}\n\n/**\n * 解析工具入参里的 `context`(形状/边界违规都以 `subagent_invalid_input` 整体拒绝);\n * 两个列表皆空时归一化为 undefined——与 context 缺省同一路径,整块不渲染。\n */\nfunction parseDelegateContext(value: unknown): SubagentDelegateContextV1 | undefined {\n\tif (value === undefined) return undefined;\n\tif (!isPlainRecord(value)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run context must be an object\");\n\t}\n\tconst anchors =\n\t\tvalue.anchors === undefined\n\t\t\t? undefined\n\t\t\t: parseContextList(value.anchors, \"anchors\", (entry, origin): SubagentDelegateContextAnchorV1 => {\n\t\t\t\t\tconst path = entry.path;\n\t\t\t\t\tif (typeof path !== \"string\" || path === \"\" || path.length > CONTEXT_PATH_MAX_CHARS) {\n\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t`${origin}.path must be a non-empty string of at most ${CONTEXT_PATH_MAX_CHARS} chars`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst rawLine = entry.line;\n\t\t\t\t\tconst line =\n\t\t\t\t\t\trawLine === undefined\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: ((): number => {\n\t\t\t\t\t\t\t\t\tif (typeof rawLine !== \"number\" || !Number.isInteger(rawLine) || rawLine < 1) {\n\t\t\t\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t\t\t\t`${origin}.line must be a positive integer`,\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn rawLine;\n\t\t\t\t\t\t\t\t})();\n\t\t\t\t\tconst note = parseContextNote(entry.note, `${origin}.note`);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\t...(line === undefined ? {} : { line }),\n\t\t\t\t\t\t...(note === undefined ? {} : { note }),\n\t\t\t\t\t};\n\t\t\t\t});\n\tconst failedAttempts =\n\t\tvalue.failedAttempts === undefined\n\t\t\t? undefined\n\t\t\t: parseContextList(\n\t\t\t\t\tvalue.failedAttempts,\n\t\t\t\t\t\"failedAttempts\",\n\t\t\t\t\t(entry, origin): SubagentDelegateContextFailedAttemptV1 => {\n\t\t\t\t\t\tconst command = entry.command;\n\t\t\t\t\t\tif (typeof command !== \"string\" || command === \"\" || command.length > CONTEXT_COMMAND_MAX_CHARS) {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`${origin}.command must be a non-empty string of at most ${CONTEXT_COMMAND_MAX_CHARS} chars`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst note = parseContextNote(entry.note, `${origin}.note`);\n\t\t\t\t\t\treturn { command, ...(note === undefined ? {} : { note }) };\n\t\t\t\t\t},\n\t\t\t\t);\n\tif ((anchors?.length ?? 0) === 0 && (failedAttempts?.length ?? 0) === 0) return undefined;\n\treturn {\n\t\t...(anchors === undefined ? {} : { anchors }),\n\t\t...(failedAttempts === undefined ? {} : { failedAttempts }),\n\t};\n}\n\n/**\n * 把 context 确定性渲染为子会话首条 prompt 的头部块(模板逐字,设计 §2.3):line\n * 缺省只输出 path、note 缺省省略 \" — <note>\"、某列表为空不渲染对应小节、两个列表\n * 皆空(context 已在解析侧归一化)返回 undefined——子会话 prompt 与现状逐字节一致。\n */\nfunction renderDelegateContext(context: SubagentDelegateContextV1 | undefined): string | undefined {\n\tif (context === undefined) return undefined;\n\tconst lines = [\"[parent context anchors — may be stale; verify against current files]\"];\n\tconst anchors = context.anchors ?? [];\n\tif (anchors.length > 0) {\n\t\tlines.push(\"Key locations:\");\n\t\tfor (const anchor of anchors) {\n\t\t\tconst location = anchor.line === undefined ? anchor.path : `${anchor.path}:${anchor.line}`;\n\t\t\tlines.push(`- ${location}${anchor.note === undefined ? \"\" : ` — ${anchor.note}`}`);\n\t\t}\n\t}\n\tconst failedAttempts = context.failedAttempts ?? [];\n\tif (failedAttempts.length > 0) {\n\t\tlines.push(\"Tried and failed:\");\n\t\tfor (const attempt of failedAttempts) {\n\t\t\tlines.push(`- \\`${attempt.command}\\`${attempt.note === undefined ? \"\" : ` — ${attempt.note}`}`);\n\t\t}\n\t}\n\treturn lines.length === 1 ? undefined : lines.join(\"\\n\");\n}\n\n/**\n * 核验档案是否真的落到了子会话上:工具面必须是请求白名单的子集,模型必须等于请求值,\n * 模式请求 `readonly` 时必须已是只读。宿主不暴露可核验事实(getActiveTools/getModel)\n * 也算未落地——\"要求了但无法证明\"与\"没要求\"对上层是同一种风险。\n */\nfunction verifyChildProfileApplied(host: { session: unknown }, requested: unknown): string | undefined {\n\tconst parsed = parseAgentTaskChildProfileV1(requested);\n\tif (!parsed.ok) return `child task profile is invalid: ${parsed.message}`;\n\tconst profile = parsed.profile;\n\tconst session = host.session as {\n\t\tgetActiveTools?: () => string[];\n\t\tgetModel?: () => { id?: string } | undefined;\n\t\tgetWebSearch?: () => \"off\" | \"auto\";\n\t};\n\tif (profile.tools !== undefined || profile.mode === \"readonly\") {\n\t\tconst active = session.getActiveTools?.();\n\t\tif (active === undefined) {\n\t\t\treturn \"host does not expose getActiveTools(); the requested tool narrowing cannot be verified\";\n\t\t}\n\t\tif (profile.tools !== undefined) {\n\t\t\tconst extra = active.filter((name) => !profile.tools?.includes(name));\n\t\t\tif (extra.length > 0) {\n\t\t\t\treturn `child session kept tools outside the requested allowlist: ${extra.join(\", \")}`;\n\t\t\t}\n\t\t}\n\t}\n\tif (profile.model !== undefined) {\n\t\tconst model = session.getModel?.();\n\t\tif (model === undefined) {\n\t\t\treturn \"host does not expose getModel(); the requested model cannot be verified\";\n\t\t}\n\t\tif (model.id !== profile.model) {\n\t\t\treturn `child session is on model ${JSON.stringify(model.id)} instead of the requested ${JSON.stringify(profile.model)}`;\n\t\t}\n\t}\n\tif (profile.webSearch !== undefined) {\n\t\tconst actual = session.getWebSearch?.();\n\t\tif (actual === undefined) {\n\t\t\treturn \"host does not expose getWebSearch(); the requested web search mode cannot be verified\";\n\t\t}\n\t\tif (actual !== profile.webSearch) {\n\t\t\treturn `child session web search is ${JSON.stringify(actual)} instead of the requested ${JSON.stringify(profile.webSearch)}`;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction resolveRole(\n\tvalue: unknown,\n\troles: ReadonlyMap<string, SubagentDelegateRoleV1>,\n): SubagentDelegateRoleV1 | undefined {\n\tif (value === undefined || value === null) return undefined;\n\tif (typeof value !== \"string\" || value.trim() === \"\") {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run role must be a non-empty string\");\n\t}\n\tconst role = roles.get(value);\n\tif (role === undefined) {\n\t\tthrow new SubagentDelegateError(\"subagent_unknown_role\", unknownRoleMessage(value, roles));\n\t}\n\treturn role;\n}\n\n/** 单条 summary 的字符上限(上下文预算:只回摘要,不回 messages 原文)。 */\nconst SUMMARY_CHARS = 200;\n\n/** `subagent_task`(type `result`)默认/上限返回条数(有界回读,绝不默认回灌全文)。 */\nconst RESULT_READ_DEFAULT_MESSAGES = 20;\nconst RESULT_READ_MAX_MESSAGES = 50;\n/** `subagent_task`(type `result`)的有界等待上限(后台结算收割),默认 0 = 只查一次。 */\nconst RESULT_READ_MAX_WAIT_MS = 120_000;\n/**\n * 每任务随结算投影/信封返回的兄弟流量摘录条数(D-060 裁决 14 父可见性):有界——\n * 这是审计摘录不是消息回灌,全量以信箱审计日志为准。\n */\nconst SIBLING_TRAFFIC_EXCERPTS = 8;\n\n/** `subagent_task`(type `result`)的返回形状:两个来源(调度记录 / 持久化 transcript)共用一个有界信封。 */\nexport interface SubagentResultReadResultV1 {\n\treadonly found: boolean;\n\treadonly source: \"record\" | \"session\";\n\treadonly taskId?: string;\n\treadonly sessionId?: string;\n\treadonly status?: string;\n\treadonly reasonCode?: string;\n\treadonly reason?: string;\n\treadonly roleId?: string;\n\t/** 来源里的总条数(截断前)。 */\n\treadonly messageCount?: number;\n\treadonly entryCount?: number;\n\treadonly returnedMessages?: number;\n\t/** 整份来源的 UTF-8 字节数。 */\n\treadonly bytes?: number;\n\treadonly truncated?: boolean;\n\treadonly messages?: readonly unknown[];\n\t/** 该子会话 escalate 上抛的有界消息(取后即清);无积压时省略。 */\n\treadonly escalations?: readonly string[];\n\t/** 该子会话相关的兄弟流量摘录(只读不删;D-060 裁决 14);无流量时省略。 */\n\treadonly siblingTraffic?: readonly { from: string; to: string; text: string }[];\n\t/** 任务层结果(任务级拒绝);仅调度记录来源携带(transcript 回读无调度记录)。 */\n\treadonly taskOutcome?: \"refused\";\n\t/** 拒绝原因;仅与 taskOutcome 同时出现。 */\n\treadonly refusalReason?: string;\n\t/** taskId 已知但尚未结算(后台委派):稍后再取或带 waitMs 等待。 */\n\treadonly knownTask?: true;\n\t/** 未结算任务的当前调度器状态(queued/admitted/running)。 */\n\treadonly taskStatus?: string;\n}\n\n/** `subagent_task`(type `list`)的条目:store 摘要 + 调度器状态富化(有则附)。 */\nexport interface SubagentSessionListEntryV1 {\n\treadonly sessionId: string;\n\treadonly agentRole?: string;\n\treadonly createdAt?: string;\n\treadonly modifiedAt: number;\n\treadonly bytes: number;\n\t/** 本调度器里仍有未结算任务时为 true。 */\n\treadonly active?: true;\n\t/** 终态记录可查时为调度器权威状态词汇。 */\n\treadonly status?: SubagentRuntimeStatus;\n\treadonly reasonCode?: string;\n\treadonly reason?: string;\n}\n\nexport interface SubagentSessionListResultV1 {\n\treadonly count: number;\n\treadonly sessions: readonly SubagentSessionListEntryV1[];\n}\n\n/** UTF-8 字节数(回读信封如实报告体积)。 */\nfunction utf8ByteLength(text: string): number {\n\treturn Buffer.byteLength(text, \"utf8\");\n}\n\nconst DEFAULT_MAX_TASKS_PER_CALL = DEFAULT_SUBAGENT_MAX_TASKS_PER_CALL;\nconst DEFAULT_TASK_TIMEOUT_MS = DEFAULT_SUBAGENT_TASK_TIMEOUT_MS;\n\n/**\n * 后台委派缺省死线(60 分钟,出厂默认登记见 docs/design/产品默认值清单.md):挂死\n * 后台任务的兜底寿命。`subagent_run background:true` 提交即带 `deadlineAt`;工具参数\n * `deadlineMs`(正整数)可按调用覆盖。死线到达由调度器 tick 强制为 `timed_out`\n * (设计 §5.7);前台任务不走死线(父侧 drain 预算 `taskTimeoutMs` 已有界)。\n */\nconst DEFAULT_BACKGROUND_TASK_DEADLINE_MS = 3_600_000;\n/**\n * 生产 tick 驱动间隔:存在带未决死线的在途后台任务时才启动的墙钟 ticker(惰性启停)。\n * ticker 只调用 `runtime.tick()`,不携带策略——tick 仍是唯一强制点,调度器\"测试可控\n * 时钟\"语义不变(测试注入 clock 或以假 timers 驱动本间隔即得确定性死线)。\n */\nconst BACKGROUND_DEADLINE_TICK_INTERVAL_MS = 30_000;\n\n/**\n * 配置通道读取(manifest 默认 + agent-dir 文件合并后的 `api.config`):\n * 非整数/低于下限即 fail fast 并指名键,不让错误配置静默生效。\n */\nfunction configInt(api: CapabilityAPI, key: string, min: number): number | undefined {\n\tconst value = api.config[key];\n\tif (value === undefined) return undefined;\n\tif (typeof value !== \"number\" || !Number.isInteger(value) || value < min) {\n\t\tthrow new Error(`subagent-delegate config ${key} must be an integer >= ${min}, got ${JSON.stringify(value)}`);\n\t}\n\treturn value;\n}\n\n/** options > config > 默认,最终值仍需通过同一套下限校验。 */\nfunction resolveInt(\n\texplicit: number | undefined,\n\tconfigured: number | undefined,\n\tfallback: number,\n\tmin: number,\n\tlabel: string,\n): number {\n\tconst value = explicit ?? configured ?? fallback;\n\tif (!Number.isInteger(value) || value < min) {\n\t\tthrow new Error(`subagent-delegate ${label} must be an integer >= ${min}, got ${JSON.stringify(value)}`);\n\t}\n\treturn value;\n}\n\n/**\n * 宽松调用兼容(对齐 goal/plan/todo-set):标准签名的第二参为 params,直接调用时第一参即 params。\n * 生产装配向 runtime invoke 面注入 toolExecutionContext 作为 execute 的第二参(公共契约),\n * 因此\"第二参非 undefined 即输入\"的判定会把 context 误当输入(prompts 读成 undefined)。\n * 改按形状判定:第一参是普通对象即取第一参,否则看第二参。\n */\nfunction objectInput(first: unknown, second: unknown, tool = \"subagent_run\"): Record<string, unknown> {\n\tconst primary = isPlainRecord(first) ? first : second;\n\tif (!isPlainRecord(primary)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `${tool} input must be an object`);\n\t}\n\treturn primary;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Merge per-operation parameter schemas into one all-optional property map.\n *\n * A merged tool's schema cannot reuse the operation schemas verbatim: their\n * `required` lists would leak across types (cancel's required `taskId` would\n * make it required for every type). The dispatcher validates the required set\n * per type instead; constraints and descriptions survive.\n */\nfunction optionalParams(...maps: readonly (Record<string, TSchema> | undefined)[]): Record<string, TSchema> {\n\tconst merged: Record<string, TSchema> = {};\n\tfor (const map of maps) {\n\t\tif (map === undefined) continue;\n\t\tfor (const [key, schema] of Object.entries(map)) merged[key] = Type.Optional(schema);\n\t}\n\treturn merged;\n}\n\n/**\n * Keep a tool's definition local without registering it: merged tools\n * (`subagent_task` / `subagent_message` / `subagent_role`) register one entry\n * and dispatch to these specs, instead of each operation owning a top-level\n * tool name (2026-10-21 user ruling: one tool per large category).\n */\nfunction toolSpec<T extends { readonly name: string }>(spec: T): T {\n\treturn spec;\n}\n\n/** Drop `type` before delegating to an operation that validates its own keys. */\nfunction withoutDiscriminator(input: Record<string, unknown>): Record<string, unknown> {\n\tconst { type: _type, ...rest } = input;\n\treturn rest;\n}\n\n/** Read and validate a merged tool's `type` discriminator. */\nfunction readDiscriminator(input: Record<string, unknown>, tool: string, allowed: readonly string[]): string {\n\tconst value = input.type;\n\tif (typeof value !== \"string\" || !allowed.includes(value)) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", `${tool}.type must be one of: ${allowed.join(\", \")}`);\n\t}\n\treturn value;\n}\n\n/**\n * Reject parameters that belong to a different operation of the same merged\n * tool. Fail-closed on purpose: silently ignoring `taskId` on `type:\"list\"`\n * would look like it filtered by that task.\n */\nfunction rejectForeignParams(\n\tinput: Record<string, unknown>,\n\ttool: string,\n\ttype: string,\n\tallowed: readonly string[],\n): void {\n\tfor (const key of Object.keys(input)) {\n\t\tif (key === \"type\" || allowed.includes(key)) continue;\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t`${tool} type \"${type}\" does not accept ${JSON.stringify(key)}`,\n\t\t);\n\t}\n}\n\nfunction readPrompts(value: unknown, maxTasksPerCall: number): string[] {\n\tif (!Array.isArray(value) || value.length === 0) {\n\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run requires a non-empty prompts array\");\n\t}\n\tconst prompts: string[] = [];\n\tfor (const entry of value) {\n\t\tif (typeof entry !== \"string\" || entry.trim() === \"\") {\n\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", \"subagent_run prompts must be non-empty strings\");\n\t\t}\n\t\tprompts.push(entry);\n\t}\n\tif (prompts.length > maxTasksPerCall) {\n\t\tthrow new SubagentDelegateError(\n\t\t\t\"subagent_batch_too_large\",\n\t\t\t`subagent_run accepts at most ${maxTasksPerCall} prompts per call; received ${prompts.length}`,\n\t\t);\n\t}\n\treturn prompts;\n}\n\nfunction errorText(error: unknown): string {\n\tif (error instanceof Error) return error.message;\n\tif (typeof error === \"string\") return error;\n\ttry {\n\t\tconst serialized = JSON.stringify(error);\n\t\treturn serialized === undefined ? String(error) : serialized;\n\t} catch {\n\t\treturn String(error);\n\t}\n}\n\n/** 结构化原因码:优先取错误自带的 code(调度器/适配器的结构化错误),否则表达为 submit 拒绝。 */\nfunction reasonCodeOf(error: unknown): string {\n\tif (error && typeof error === \"object\" && typeof (error as { code?: unknown }).code === \"string\") {\n\t\treturn (error as { code: string }).code;\n\t}\n\treturn \"subagent_submit_rejected\";\n}\n\n/** 文本块抽取:content 为字符串或 text 块数组;无文本返回 undefined。 */\nfunction messageText(content: unknown): string | undefined {\n\tif (typeof content === \"string\") return content === \"\" ? undefined : content;\n\tif (!Array.isArray(content)) return undefined;\n\tconst parts: string[] = [];\n\tfor (const item of content) {\n\t\tif (!item || typeof item !== \"object\") continue;\n\t\tconst block = item as Record<string, unknown>;\n\t\tif (block.type !== \"text\" || typeof block.text !== \"string\") continue;\n\t\tparts.push(block.text);\n\t}\n\tconst text = parts.join(\"\");\n\treturn text === \"\" ? undefined : text;\n}\n\n/** 最后一条带文本的 assistant 消息 → 有界 summary;找不到(或全无文本)省略。 */\nfunction assistantSummary(messages: readonly unknown[]): string | undefined {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (!message || typeof message !== \"object\") continue;\n\t\tconst record = message as Record<string, unknown>;\n\t\tif (record.role !== \"assistant\" && record.type !== \"assistant\") continue;\n\t\tconst text = messageText(record.content);\n\t\tif (text === undefined) continue;\n\t\treturn text.length <= SUMMARY_CHARS ? text : text.slice(0, SUMMARY_CHARS);\n\t}\n\treturn undefined;\n}\n\nfunction projectRecord(record: SchedulerTaskRecordV1): SubagentDelegateTaskProjectionV1 {\n\tconst summary = assistantSummary(record.messages);\n\treturn {\n\t\ttaskId: record.taskId,\n\t\tstatus: record.status,\n\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t...(record.reason === undefined ? {} : { reason: record.reason }),\n\t\t...(record.truncated ? { truncated: true as const } : {}),\n\t\tmessageCount: record.messages.length,\n\t\t...(record.sessionId === undefined || record.sessionId === \"\" ? {} : { sessionId: record.sessionId }),\n\t\t...(summary === undefined ? {} : { summary }),\n\t\t...(record.taskOutcome === undefined ? {} : { taskOutcome: record.taskOutcome }),\n\t\t...(record.refusalReason === undefined ? {} : { refusalReason: record.refusalReason }),\n\t};\n}\n\n/**\n * 血缘深度(承载退役切片 2,Option A):沿 S2 落盘头行的 `parentAgentSession` 上行,\n * 返回本会话的祖先层数。root(无头行/非落盘会话)返回 undefined——不设限。\n * 最多上行走 `maxWalk` 步(有界,防环按步数截断)。\n *\n * 迁移注记(D-075 S4 第三批):宿主实现的逐头回读(`readAgentSession` 循环)改为\n * plugin-sdk 的 `readAgentSessionLineage`——同一落盘契约的只读首行实现。语义对齐点:\n * `ancestors` 只含**可解析**的祖先,而宿主 depth 对\"父指针存在但父会话未落盘\"的\n * 最后一条边也计数(root 在内存里、文件不可达是常态),因此 dangling 边补 +1;\n * `truncated`(走满 maxWalk 步仍有可解析父)时 ancestors.length 与宿主的 maxWalk\n * 返回值一致。\n */\nfunction lineageDepth(sessionId: string, agentDir: string, maxWalk: number): number | undefined {\n\tconst lineage = readAgentSessionLineage(agentDir, sessionId, maxWalk);\n\tif (lineage.self === undefined) return undefined;\n\tconst last = lineage.ancestors.at(-1) ?? lineage.self;\n\tconst danglingParent = last.parentAgentSession !== undefined && last.parentAgentSession !== last.sessionId;\n\treturn lineage.ancestors.length + (danglingParent && !lineage.truncated ? 1 : 0);\n}\n\n/**\n * 第一方编排 capability:一个调度器实例 + `subagent_run` 工具 + 释放登记。\n * 只消费公共 API(session/agents/sessionAbortSignal/tools),不 import core 内部私有模块。\n */\nexport function createCapability(\n\tapi: CapabilityAPI,\n\toptions?: SubagentDelegateCapabilityOptions,\n): DisposableRegistration[] {\n\tconst session = api.session;\n\tconst agents = api.agents;\n\tif (!session) throw new Error(\"subagent-delegate requires the session capability\");\n\t// 通信面配置键已移除(D-060 裁决 15):出现即装载期失败,不留\"配置了但没生效\"的假象。\n\tif (api.config.communication !== undefined) {\n\t\tthrow new Error(\n\t\t\t\"subagent-delegate config communication was removed (D-060 ruling 15): communication tools register unconditionally; remove the key\",\n\t\t);\n\t}\n\tconst wiring = options?.communicationWiring;\n\t// 子侧通信面(子→父 / 子↔子):只要宿主接线了 post 通道就注册——\n\t// 叶子会话(无 agents)只拿这一面;获准自建会话(D-060 S5,agents 在场)两面都要:\n\t// 它既能向下委派(parent face),也仍能向自己的父上抛/收兄弟消息(child face)。\n\tconst childTools: DisposableRegistration[] = [];\n\t// 子侧通信面合并为单工具 `subagent_message`(2026-10-21 用户裁决:大类型一个工具,\n\t// 用 type + 参数区分)。可用 type 取决于宿主接线:只接 post 通道的叶子会话只有\n\t// escalate;接了兄弟通道的会话有 send/inbox。\n\tconst escalateSpec =\n\t\twiring?.postEscalate === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_message.escalate\",\n\t\t\t\t\tlabel: \"Escalate to parent\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Send one bounded message up to your parent agent. It does NOT interrupt the parent; it is delivered \" +\n\t\t\t\t\t\t\"with the parent's next task result. Use it for a blocker or a key finding the task result alone would lose.\",\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\tdescription: `Message to the parent (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes)`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_message type \"escalate\"');\n\t\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\t\tif (text.trim() === \"\") {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`subagent_message type \"escalate\" requires non-empty text`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twiring.postEscalate?.(text);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { delivered: true, note: \"the parent reads this with its next task result\" };\n\t\t\t\t\t},\n\t\t\t\t});\n\t// 任务级拒绝出口:子代理声明\"活着但不做这个任务\"的结构化终局声明。不调用\n\t// postEscalate、不触发任何取消/结算(子侧触不到父 runtime)——调度器在 settle 时\n\t// 从 transcript 里的本调用记录检测(取最后一条),随自然成功结算附 taskOutcome。\n\t// 随 subagent_message 工具的既有注册条件走,不新增独立注册开关。\n\t// 缺参报错必须教形状:只说\"拒了什么\"模型无法自纠,会重试同错直至放弃,\n\t// refusalReason 随之丢失。入参字段名随 subagent_message 面内 \"text\" 惯例——\n\t// 真实模型四轮取证:schema 含 reason 时模型仍按 text 先验传参(运行时设计 §4.4)。\n\tconst refuseInputError = (): SubagentDelegateError =>\n\t\tnew SubagentDelegateError(\n\t\t\t\"subagent_invalid_input\",\n\t\t\t'subagent_message type \"refuse\" requires {\"type\":\"refuse\",\"text\":\"<why>\"} — the refusal explanation goes in \"text\" like your other messages',\n\t\t);\n\tconst refuseSpec = toolSpec({\n\t\tname: \"subagent_message.refuse\",\n\t\tlabel: \"Refuse this task\",\n\t\tdescription:\n\t\t\t\"Declare this task refused: you are alive but will not do this task (missing access, out of scope, or in \" +\n\t\t\t\"conflict with your instructions). The refusal is recorded as the terminal declaration for the task — the \" +\n\t\t\t'parent reads it as taskOutcome \"refused\" with your reason. Do not use it to report partial progress; ' +\n\t\t\t\"escalate is for that.\",\n\t\tparameters: Type.Object({\n\t\t\ttext: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: \"Why this task is refused; recorded verbatim as the task's refusalReason for the parent\",\n\t\t\t}),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, 'subagent_message type \"refuse\"');\n\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\tif (text.trim() === \"\") {\n\t\t\t\tthrow refuseInputError();\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trefused: true,\n\t\t\t\tnote: \"Your refusal has been recorded as the terminal declaration for this task. End your turn now and do not call any other tools.\",\n\t\t\t};\n\t\t},\n\t});\n\tconst sendSpec =\n\t\twiring?.sendSibling === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_message.send\",\n\t\t\t\t\tlabel: \"Message a sibling\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Send one bounded message to a sibling subagent (a child of the same parent), addressed by its sessionId. \" +\n\t\t\t\t\t\t\"Cross-family addressing is rejected. This channel is for data and intermediate artifacts only: task \" +\n\t\t\t\t\t\t\"assignment and result acceptance stay with the parent agent. Sibling messages are visible to the parent \" +\n\t\t\t\t\t\t\"(audited as excerpts with task results).\",\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\tto: Type.String({ description: \"Recipient child session id\" }),\n\t\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\tdescription: `Message (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes)`,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_message type \"send\"');\n\t\t\t\t\t\tconst to = typeof input.to === \"string\" ? input.to : \"\";\n\t\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\t\tif (to === \"\" || text.trim() === \"\") {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`subagent_message type \"send\" requires to and non-empty text`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\twiring.sendSibling?.(to, text);\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { delivered: true };\n\t\t\t\t\t},\n\t\t\t\t});\n\tconst inboxSpec =\n\t\twiring?.sendSibling === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_message.inbox\",\n\t\t\t\t\tlabel: \"Read sibling inbox\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t'Read and clear the earliest bounded messages your siblings sent you (subagent_message type \"send\"). ' +\n\t\t\t\t\t\t\"Messages are consumed by this call; poll it when coordination is expected. The sibling channel carries \" +\n\t\t\t\t\t\t\"data and intermediate artifacts only — assignment and acceptance stay with the parent, which can audit \" +\n\t\t\t\t\t\t\"this traffic.\",\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\tlimit: Type.Optional(\n\t\t\t\t\t\t\tType.Integer({ description: \"Max messages to take (1..20, default 10)\", minimum: 1, maximum: 20 }),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_message type \"inbox\"');\n\t\t\t\t\t\tconst requested = input.limit === undefined ? 10 : Number(input.limit);\n\t\t\t\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > 20) {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t`subagent_message type \"inbox\" limit must be an integer in 1..20`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst messages = wiring.drainInbox?.(requested) ?? [];\n\t\t\t\t\t\treturn { messages };\n\t\t\t\t\t},\n\t\t\t\t});\n\tif (escalateSpec !== undefined || sendSpec !== undefined) {\n\t\tconst messageOps = [\n\t\t\t...(escalateSpec === undefined ? [] : [\"escalate\"]),\n\t\t\t...(sendSpec === undefined ? [] : [\"send\", \"inbox\"]),\n\t\t\t\"refuse\",\n\t\t];\n\t\tchildTools.push(\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_message\",\n\t\t\t\tlabel: \"Message a subagent\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"One bounded messaging surface. \" +\n\t\t\t\t\t[\n\t\t\t\t\t\t...(escalateSpec === undefined\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: ['type=\"escalate\": send a message up to your parent (delivered with its next task result)']),\n\t\t\t\t\t\t...(sendSpec === undefined\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t\t'type=\"send\": send data or an intermediate artifact to a sibling subagent by sessionId',\n\t\t\t\t\t\t\t\t\t'type=\"inbox\": read and clear messages your siblings sent you',\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t'type=\"refuse\": declare this task refused with an explanation in \"text\" (a terminal declaration for the task; the parent sees taskOutcome \"refused\" — end your turn right after)',\n\t\t\t\t\t].join(\"; \") +\n\t\t\t\t\t\"; task assignment and result acceptance stay with the parent agent, which can audit sibling traffic.\",\n\t\t\t\tparameters: Type.Object({\n\t\t\t\t\ttype: Type.Union(\n\t\t\t\t\t\tmessageOps.map((op) => Type.Literal(op)),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t`Operation: ${messageOps.join(\" | \")}. Per-operation contract: ` +\n\t\t\t\t\t\t\t\t'\"escalate\" needs non-empty text; \"send\" needs to and non-empty text; ' +\n\t\t\t\t\t\t\t\t'\"inbox\" takes only limit; \"refuse\" needs non-empty text. ' +\n\t\t\t\t\t\t\t\t\"Parameters belonging to another operation are rejected\",\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t\t...optionalParams(\n\t\t\t\t\t\tescalateSpec?.parameters.properties,\n\t\t\t\t\t\tsendSpec?.parameters.properties,\n\t\t\t\t\t\tinboxSpec?.parameters.properties,\n\t\t\t\t\t\t// refuse 无条件创建,属性总是合入:type 进了 messageOps 而 schema 漏合\n\t\t\t\t\t\t// = 模型被 schema 约束永远发不出该 type 的合法参数(教形状也救不回)。\n\t\t\t\t\t\trefuseSpec.parameters.properties,\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\t\t\tconst input = objectInput(first, second, \"subagent_message\");\n\t\t\t\t\tconst type = readDiscriminator(input, \"subagent_message\", messageOps);\n\t\t\t\t\tif (type === \"escalate\") {\n\t\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"text\"]);\n\t\t\t\t\t\treturn escalateSpec?.execute(withoutDiscriminator(input), second);\n\t\t\t\t\t}\n\t\t\t\t\tif (type === \"send\") {\n\t\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"to\", \"text\"]);\n\t\t\t\t\t\treturn sendSpec?.execute(withoutDiscriminator(input), second);\n\t\t\t\t\t}\n\t\t\t\t\tif (type === \"refuse\") {\n\t\t\t\t\t\t// text 前置校验先于外参拒绝(教形状优先于 fail-closed):缺 text 时先给出\n\t\t\t\t\t\t// 可自纠的形状;合法 text 带外来参数(如旧先验的 reason)仍走\n\t\t\t\t\t\t// rejectForeignParams,不放松。\n\t\t\t\t\t\tconst text = input.text;\n\t\t\t\t\t\tif (typeof text !== \"string\" || text.trim() === \"\") throw refuseInputError();\n\t\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"text\"]);\n\t\t\t\t\t\treturn refuseSpec.execute(withoutDiscriminator(input), second);\n\t\t\t\t\t}\n\t\t\t\t\trejectForeignParams(input, \"subagent_message\", type, [\"limit\"]);\n\t\t\t\t\treturn inboxSpec?.execute(withoutDiscriminator(input), second);\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\t// 调度器限额:options.limits 显式覆盖优先;否则由配置通道逐键取值,缺省回落到调度器默认。\n\tconst configuredLimits = {\n\t\tmaxConcurrentSubagents: configInt(api, \"maxConcurrentSubagents\", 1),\n\t\tmaxQueueDepth: configInt(api, \"maxQueueDepth\", 1),\n\t\tmaxPromptBytes: configInt(api, \"maxPromptBytes\", 1),\n\t\tmaxMetadataBytes: configInt(api, \"maxMetadataBytes\", 1),\n\t\tmaxResultBytes: configInt(api, \"maxResultBytes\", 1),\n\t\tmaxMessages: configInt(api, \"maxMessages\", 1),\n\t\tdrainTimeoutMs: configInt(api, \"drainTimeoutMs\", 1),\n\t\tmaxRetainedRecords: configInt(api, \"maxRetainedRecords\", 1),\n\t};\n\tconst limits =\n\t\toptions?.limits ??\n\t\t(Object.values(configuredLimits).every((value) => value === undefined)\n\t\t\t? undefined\n\t\t\t: (configuredLimits as SubagentRuntimeLimitsV1));\n\tconst sessionAbortSignal = api.sessionAbortSignal;\n\n\t/**\n\t * adapter 选择(优先级):宿主显式 adapter > 配置驱动的 pooled runner 池 > 共享模式(裸 primitive)。\n\t * pooled 关闭时零额外进程;启用时 entryPath 必须显式给出(不猜安装形态),缺失即装载失败。\n\t * 退役切片 1(生产默认 pooled,D-075 S4 第三批收敛):自动池化旗标不再由宿主 options\n\t * 注入,改由既有配置键 `runnerEntryAuto: true` 驱动——未显式配置 `runnerMaxProcesses`/\n\t * `runnerEntryPath` 且未注入 spawner 时,若 self-invocation 可解析则自动以池化装配\n\t * (默认 2 个 runner、每池 12 会话);不可解析则保持共享模式。\n\t */\n\tconst pool: SubagentRunnerPoolV1 | undefined = (() => {\n\t\tconst configuredMaxProcesses = configInt(api, \"runnerMaxProcesses\", 0);\n\t\tlet runnerMaxProcesses = resolveInt(undefined, configuredMaxProcesses, 0, 0, \"runnerMaxProcesses\");\n\t\tconst selfInvocation = resolveSelfInvocationV1();\n\t\tconst autoPool =\n\t\t\trunnerMaxProcesses === 0 &&\n\t\t\tapi.config.runnerEntryAuto === true &&\n\t\t\toptions?.runnerSpawner === undefined &&\n\t\t\ttypeof api.config.runnerEntryPath !== \"string\";\n\t\tif (autoPool && selfInvocation !== undefined) runnerMaxProcesses = 2;\n\t\tif (runnerMaxProcesses === 0) return undefined;\n\t\t// runner 配置存在即做一致性校验(即使宿主注入了 adapter,错误配置也不得静默):\n\t\t// 非法值/缺失入口/容量不覆盖并发都在装载期暴露。\n\t\tconst maxSessionsPerRunner = resolveInt(\n\t\t\tundefined,\n\t\t\tconfigInt(api, \"runnerMaxSessionsPerRunner\", 1),\n\t\t\t8,\n\t\t\t1,\n\t\t\t\"runnerMaxSessionsPerRunner\",\n\t\t);\n\t\tconst idleRunnerTimeoutMs = resolveInt(\n\t\t\tundefined,\n\t\t\tconfigInt(api, \"runnerIdleTimeoutMs\", 1),\n\t\t\t300_000,\n\t\t\t1,\n\t\t\t\"runnerIdleTimeoutMs\",\n\t\t);\n\t\tconst idleCheckIntervalMs = resolveInt(\n\t\t\tundefined,\n\t\t\tconfigInt(api, \"runnerSweepIntervalMs\", 1),\n\t\t\t60_000,\n\t\t\t1,\n\t\t\t\"runnerSweepIntervalMs\",\n\t\t);\n\t\t// 有效并发取\"已配并发\"或调度器默认值:容量校验必须在未显式配置并发时也生效,\n\t\t// 否则池化容量小于默认并发(12)会被静默容忍,直到运行期才以 capacity 错误暴露。\n\t\tconst effectiveMaxConcurrent =\n\t\t\toptions?.limits?.maxConcurrentSubagents ??\n\t\t\tlimits?.maxConcurrentSubagents ??\n\t\t\tDEFAULT_SUBAGENT_LIMITS.maxConcurrentSubagents;\n\t\t// spawn 工厂优先用注入;否则要求配置显式给出 runner 入口(装载期校验,不推迟到首次 spawn)。\n\t\tlet spawnRunner = options?.runnerSpawner;\n\t\tif (spawnRunner === undefined) {\n\t\t\tconst entryPath = api.config.runnerEntryPath;\n\t\t\tif (typeof entryPath === \"string\" && entryPath.trim() !== \"\") {\n\t\t\t\tconst nodeArgs = Array.isArray(api.config.runnerNodeArgs)\n\t\t\t\t\t? api.config.runnerNodeArgs.filter((value): value is string => typeof value === \"string\")\n\t\t\t\t\t: entryPath.endsWith(\".ts\")\n\t\t\t\t\t\t? [\"--experimental-strip-types\"]\n\t\t\t\t\t\t: [];\n\t\t\t\tconst spawner = createNodeSubagentRunnerSpawnerV1({ entryPath, nodeArgs });\n\t\t\t\tspawnRunner = () => spawner();\n\t\t\t} else if (autoPool) {\n\t\t\t\t// 退役切片 1:CLI 宿主的自动池化——self-invocation 已在上方预检可解析。\n\t\t\t\tconst self = selfInvocation as SelfInvocationV1;\n\t\t\t\tconst nodeArgs = Array.isArray(api.config.runnerNodeArgs)\n\t\t\t\t\t? api.config.runnerNodeArgs.filter((value): value is string => typeof value === \"string\")\n\t\t\t\t\t: [...self.nodeArgs];\n\t\t\t\tconst spawner = createNodeSubagentRunnerSpawnerV1({ entryPath: self.entryPath, nodeArgs });\n\t\t\t\tspawnRunner = () => spawner();\n\t\t\t} else if (api.config.runnerEntryAuto === true) {\n\t\t\t\t// 显式开启的零配置路径:把当前进程的启动方式当作 runner 入口(见 self-invocation)。\n\t\t\t\tconst self = resolveSelfInvocationV1();\n\t\t\t\tif (self === undefined) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\"subagent-delegate config runnerEntryAuto is enabled but the current process has no script entry \" +\n\t\t\t\t\t\t\t\"(compiled binaries must set runnerEntryPath explicitly)\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst nodeArgs = Array.isArray(api.config.runnerNodeArgs)\n\t\t\t\t\t? api.config.runnerNodeArgs.filter((value): value is string => typeof value === \"string\")\n\t\t\t\t\t: [...self.nodeArgs];\n\t\t\t\tconst spawner = createNodeSubagentRunnerSpawnerV1({ entryPath: self.entryPath, nodeArgs });\n\t\t\t\tspawnRunner = () => spawner();\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"subagent-delegate config runnerEntryPath is required when runnerMaxProcesses >= 1 \" +\n\t\t\t\t\t\t\"(or enable runnerEntryAuto to reuse this process's own entry)\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (options?.adapter !== undefined) return undefined;\n\t\t// 开发态 runner(TS 引导的 CLI)冷启动可能超过默认 5s 握手预算,宿主可配置放宽。\n\t\tconst handshakeTimeoutMs = configInt(api, \"runnerHandshakeTimeoutMs\", 1);\n\t\treturn createPooledAgentTaskAdapterV1({\n\t\t\tspawnRunner,\n\t\t\tmaxRunnerProcesses: runnerMaxProcesses,\n\t\t\tmaxSessionsPerRunner,\n\t\t\tidleRunnerTimeoutMs,\n\t\t\tidleCheckIntervalMs,\n\t\t\tmaxConcurrentSubagents: effectiveMaxConcurrent,\n\t\t\t...(handshakeTimeoutMs === undefined ? {} : { handshakeTimeoutMs }),\n\t\t\tonDiagnostic: (message) => {\n\t\t\t\tapi.logger?.debug?.(`subagent-delegate runner: ${message}`);\n\t\t\t},\n\t\t});\n\t})();\n\t// 桥转换只在 agents 暴露任务面(create)时成立(承载退役切片 2:reader-only 宿主的\n\t// agents 只承载回读,不承载委派)。父面 = 宿主 adapter > 配置/自动池 > 桥。\n\tconst baseAdapter =\n\t\toptions?.adapter ?? pool ?? (agents?.create === undefined ? undefined : createAgentTaskApiAdapterV1(agents));\n\n\t// 门控(承载退役):父面 = 池或宿主 adapter 任一在即可,不再依赖 agents 能力——\n\t// runner 叶子带自动池化(退役切片 1)因此同样获得委派父面(嵌套委派,深度硬限兜底)。\n\t// 无任何 adapter 时委派不适用:只保留子侧通信面(fail-closed)。\n\tif (baseAdapter === undefined) {\n\t\tif (childTools.length === 0) {\n\t\t\tapi.logger?.debug?.(\n\t\t\t\t\"subagent-delegate: no runner pool and no host adapter; delegation tool stays unregistered\",\n\t\t\t);\n\t\t\treturn [];\n\t\t}\n\t\treturn childTools;\n\t}\n\t// 配置错误在装载时 fail fast,不让 0/负数静默地拒绝每一次调用或永不超时。\n\tconst maxTasksPerCall = resolveInt(\n\t\toptions?.maxTasksPerCall,\n\t\tconfigInt(api, \"maxTasksPerCall\", 1),\n\t\tDEFAULT_MAX_TASKS_PER_CALL,\n\t\t1,\n\t\t\"maxTasksPerCall\",\n\t);\n\tconst taskTimeoutMs = resolveInt(\n\t\toptions?.taskTimeoutMs,\n\t\tconfigInt(api, \"taskTimeoutMs\", 1),\n\t\tDEFAULT_TASK_TIMEOUT_MS,\n\t\t1,\n\t\t\"taskTimeoutMs\",\n\t);\n\t// 嵌套深度硬限(承载退役切片 2,Option A):runner 叶子带自动池化后同样获得委派\n\t// 父面,递归边界由血缘深度兜底——本会话已是第 maxNestedDepth 层时再委派按\n\t// `subagent_depth_exceeded` 结构化拒绝。与 S5 shared 侧的深度上限同一默认\n\t// (DEFAULT_SUBAGENT_MAX_NESTED_DEPTH = 2 层)。\n\tconst maxNestedDepth = resolveInt(\n\t\tundefined,\n\t\tconfigInt(api, \"maxNestedDepth\", 1),\n\t\tDEFAULT_SUBAGENT_MAX_NESTED_DEPTH,\n\t\t1,\n\t\t\"maxNestedDepth\",\n\t);\n\t// 每父级累计可创建的子代理总量(承载退役切片 2,Option A;与 S5 shared 侧同一默认\n\t// DEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT):对**非 resume** 的每次 submit 计数,\n\t// 超限按 `subagent_child_quota` 拒绝。\n\tconst maxTotalPerParent = resolveInt(\n\t\tundefined,\n\t\tconfigInt(api, \"maxTotalPerParent\", 0),\n\t\tDEFAULT_SUBAGENT_MAX_TOTAL_PER_PARENT,\n\t\t0,\n\t\t\"maxTotalPerParent\",\n\t);\n\tlet createdSubagentCount = 0;\n\t// background 配置键已移除(D-060 裁决 15,2026-10-03):后台委派是功能基本面,\n\t// 无条件注册(`subagent_run` 的 background 参数与 `subagent_task` 的 cancel / steer\n\t// 随之常在);键出现即装载期失败,不留\"配置了但没生效\"的假象。\n\tif (api.config.background !== undefined) {\n\t\tthrow new Error(\n\t\t\t\"subagent-delegate config background was removed (D-060 ruling 15): background delegation registers unconditionally; remove the key\",\n\t\t);\n\t}\n\t// 角色目录 + 方案关联在装载期解析:非法文件/非法关联直接失败,不留\"配置了但没生效\"的假象。\n\tconst roleCatalog =\n\t\toptions?.roles === undefined\n\t\t\t? { roles: new Map<string, SubagentDelegateRoleV1>(), dangling: [], brokenUnassociated: [] }\n\t\t\t: resolveSubagentRoleCatalog(options.roles);\n\tconst diskRoles = roleCatalog.roles;\n\tfor (const id of roleCatalog.dangling) {\n\t\tapi.logger?.warn?.(\n\t\t\t`suite associations.roles lists \"${id}\" but no role file exists: ${subagentRoleCatalogPath(\n\t\t\t\toptions?.roles?.agentDir ?? \"\",\n\t\t\t\tid,\n\t\t\t)} (role stays unavailable for this session)`,\n\t\t);\n\t}\n\tfor (const id of roleCatalog.brokenUnassociated) {\n\t\tapi.logger?.warn?.(\n\t\t\t`role file for \"${id}\" is invalid and is not associated by this suite; ignored (fix it or remove the file)`,\n\t\t);\n\t}\n\t// 会话角色水合(D-081):磁盘目录解析之后从分支快照重建(最近一条可解析快照,\n\t// 损坏向前回退并 warn,全部不可解析则为空);磁盘优先、16 个 / 2000 字符菜单\n\t// (磁盘+会话合并计算)都是**暴露**预算——未暴露的项保留在数据表里,不删除。\n\tconst hydratedRoles = mergeSubagentRoles(diskRoles, readSessionRoles(session, api.logger), api.logger);\n\t/**\n\t * 会话角色数据表 = 快照里的**全部**合法会话角色(含被磁盘遮蔽/未暴露项):\n\t * 先 appendEntry 成功再提交,写失败即注册失败(内存与文件不背离)。持久化写它——\n\t * 视图收窄(遮蔽/超预算)不抹掉数据。\n\t */\n\tconst sessionRoles = new Map<string, SubagentDelegateRoleV1>(hydratedRoles.sessionRoles);\n\t/** 可用集 = 磁盘 ∪ 通过暴露预算的会话角色(磁盘优先):resolveRole/菜单/role 枚举只看它。 */\n\tconst roles = new Map<string, SubagentDelegateRoleV1>(hydratedRoles.roles);\n\tconst renderRoleMenu = (): string =>\n\t\t[...roles.values()]\n\t\t\t.sort((left, right) => (left.id < right.id ? -1 : 1))\n\t\t\t.map((role) => `${role.id} — ${role.description}`)\n\t\t\t.join(\"; \");\n\t/** 全量快照落盘(append-only):只存会话角色,绝不把磁盘角色写进条目。 */\n\tconst persistSessionRoles = (next: Iterable<SubagentDelegateRoleV1>): void => {\n\t\tconst snapshot: SubagentSessionRolesStateV1 = {\n\t\t\tversion: 1,\n\t\t\troles: Object.freeze([...next].map(toSessionRoleRecord)),\n\t\t};\n\t\tsession.appendEntry(SESSION_ROLE_STATE_ENTRY, snapshot);\n\t};\n\n\t/**\n\t * D-044 §5.6:把支持进度面的 adapter 装饰一层,累计\"运行中 step\"与最近一条\n\t * 摘要,供工具 onUpdate 节流上报父 UI(只回计数与摘要,不回正文)。\n\t */\n\tconst progressState = { steps: 0, last: undefined as string | undefined };\n\tconst progressUnsubscribes = new Set<() => void>();\n\tconst adapter: AgentTaskAdapter = {\n\t\tcreate: async (request) => {\n\t\t\tconst requestedProfile = request.metadata?.[AGENT_TASK_CHILD_PROFILE_KEY];\n\t\t\tconst host = await baseAdapter.create(request);\n\t\t\t// 档案核验:宿主必须把收窄落到了子会话上,且要能自证(getActiveTools/getModel)。\n\t\t\t// 核验失败 = 上层以为的\"只读评审者\"没有生效,因此这里就地失败并回收该子会话,\n\t\t\t// 而不是让它带着比预期更大的权限去跑。\n\t\t\tif (requestedProfile !== undefined) {\n\t\t\t\tconst violation = verifyChildProfileApplied(host, requestedProfile);\n\t\t\t\tif (violation !== undefined) {\n\t\t\t\t\tawait host.dispose().catch(() => {});\n\t\t\t\t\tthrow new SubagentDelegateError(\"subagent_profile_not_applied\", violation);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst taskId = host.session.getSessionId();\n\t\t\tconst unsubscribe = subscribeTaskProgressV1(baseAdapter, taskId, (message) => {\n\t\t\t\tprogressState.steps += 1;\n\t\t\t\tif (message !== undefined) progressState.last = message;\n\t\t\t});\n\t\t\tprogressUnsubscribes.add(unsubscribe);\n\t\t\treturn host;\n\t\t},\n\t};\n\n\tconst runtime: SubagentRuntimeV1 = createSubagentRuntime({\n\t\tadapter,\n\t\towner: capabilityManifest.id,\n\t\tparentSessionId: session.getSessionId(),\n\t\t...(sessionAbortSignal === undefined ? {} : { parentSignal: sessionAbortSignal }),\n\t\t...(limits === undefined ? {} : { limits }),\n\t\t...(api.logger === undefined ? {} : { logger: api.logger }),\n\t\t// Durable replay assembly(2026-10-13):宿主 durable 设施原样下传(形状即\n\t\t// runtime 的 results 契约);缺席 = 不持久化(回读 undefined,既有语义)。\n\t\t...(options?.results === undefined ? {} : { results: options.results }),\n\t});\n\n\t// P1b(联网检索设计 §5.6):把调度器的 one-shot 面经能力目录暴露为公共能力\n\t// `agent-forge.agent-task-scheduler@1`(消费方经目录调用)。requester\n\t// 作用域绑定本会话(owner + 当前父会话 id),调用方不可传。registration 放在返回\n\t// 数组的 runtime 项之后:逆序 dispose 时先摘能力、再释放调度器。\n\tconst schedulerRegistration = createAgentTaskSchedulerCapabilityProviderV1({\n\t\truntime,\n\t\towner: capabilityManifest.id,\n\t\tparentSessionId: session.getSessionId(),\n\t})(api);\n\n\t// ---------------------------------------------------------------------------\n\t// 生产 tick 驱动(设计 §5.7):调度器的死线强制点是显式 tick(),本消费者挂载唯一\n\t// 的墙钟驱动——存在带未决死线的在途后台任务时才启动 ticker(惰性启停),每跳只调\n\t// runtime.tick(),不携带任何策略。无未决死线的用法零定时器;dispose 必停。\n\t// ---------------------------------------------------------------------------\n\n\t/** 受监视的后台任务:taskId -> 提交时的绝对死线(仅作记账,强制语义全在 tick)。 */\n\tconst pendingDeadlines = new Map<string, number>();\n\tlet deadlineTicker: ReturnType<typeof setInterval> | undefined;\n\n\tconst ensureDeadlineTicker = (): void => {\n\t\tif (deadlineTicker !== undefined || pendingDeadlines.size === 0) return;\n\t\tdeadlineTicker = setInterval(() => {\n\t\t\t// tick 自身不抛(终态投影等内部故障均已兜底);保险兜底不吞任务面,下一跳重试。\n\t\t\ttry {\n\t\t\t\truntime.tick();\n\t\t\t} catch {\n\t\t\t\t// 留待下一跳;显式 tick / cancel 仍可用。\n\t\t\t}\n\t\t}, BACKGROUND_DEADLINE_TICK_INTERVAL_MS);\n\t\tdeadlineTicker.unref?.();\n\t};\n\n\tconst stopDeadlineTickerIfIdle = (): void => {\n\t\tif (deadlineTicker === undefined || pendingDeadlines.size > 0) return;\n\t\tclearInterval(deadlineTicker);\n\t\tdeadlineTicker = undefined;\n\t};\n\n\tconst unwatchBackgroundDeadline = (taskId: string): void => {\n\t\tif (!pendingDeadlines.delete(taskId)) return;\n\t\tstopDeadlineTickerIfIdle();\n\t};\n\n\t/** 任务结算(含被死线强制、取消、异常)即解除监视;reject 通道(persist 失败等)同样解除。 */\n\tconst watchBackgroundDeadline = (handle: SubagentTaskHandleV1, deadlineAt: number): void => {\n\t\tpendingDeadlines.set(handle.id, deadlineAt);\n\t\tensureDeadlineTicker();\n\t\tvoid handle\n\t\t\t.result()\n\t\t\t.catch(() => {})\n\t\t\t.then(() => unwatchBackgroundDeadline(handle.id));\n\t};\n\n\tconst stopDeadlineTicker = (): void => {\n\t\tif (deadlineTicker !== undefined) {\n\t\t\tclearInterval(deadlineTicker);\n\t\t\tdeadlineTicker = undefined;\n\t\t}\n\t\tpendingDeadlines.clear();\n\t};\n\n\t/**\n\t * `subagent_run` 的定义按**当前角色表**现场构建(D-081 即时生效):set/remove 之后\n\t * 以同 owner 同名重注册(runtime 语义 = 更新)让新菜单与 `role` 参数枚举在父会话的\n\t * 下一次模型请求即可见,不需要重启或新建会话。\n\t */\n\tconst buildRunToolDefinition = () => ({\n\t\tname: \"subagent_run\",\n\t\tlabel: \"Run subagents\",\n\t\t// 折叠态一行人类可读摘要,结果 JSON 不进转录(2026-10-19 用户裁决);\n\t\t// 结构性组件、无 TUI import(goal/plan/alignment 同一边界)。\n\t\trenderCall: createSubagentRunRenderCall((roleId) => roles.get(roleId)?.description),\n\t\trenderResult: subagentRunResultRenderer,\n\t\tdescription:\n\t\t\t`Delegate 1..${maxTasksPerCall} independent subagent tasks in one call and return their bounded terminal results. ` +\n\t\t\t\"Each prompt runs in its own isolated child session. Only status, reason codes, message counts and a shortened \" +\n\t\t\t\"final-assistant summary come back; ask a child for more detail in its prompt if you need it.\" +\n\t\t\t\" Optionally pass `context` — file:line anchors and commands already tried and failed are rendered as a \" +\n\t\t\t\"header block at the top of each child prompt (pointers only).\" +\n\t\t\t// fork-join 推荐模式(D-060 裁决 14):大任务拆并行块 + 最终组合任务,中间产物\n\t\t\t// 留子层、主上下文不膨胀;通知粒度——结算必然回注但只有组合任务的报告需验收。\n\t\t\t\" For large splittable work prefer fork-join: launch the parallel chunk tasks with background:true, then submit \" +\n\t\t\t'one final assembly task (a separate background call) that gathers the chunks with subagent_task({type: \"result\", taskId, waitMs}) ' +\n\t\t\t\"— intermediate results stay in the child layer and only the assembled final report enters your context. Every \" +\n\t\t\t\"task's settlement is announced to you (agent-task-settled), but notifications are not per-task acceptances: \" +\n\t\t\t\"accept and act on (todos/goals/next steps) only the final assembly task's report; other settled lines are \" +\n\t\t\t\"status only.\" +\n\t\t\t// 任务级拒绝:子代理可能声明不做该任务;投影 taskOutcome \"refused\" 即终局声明,\n\t\t\t// 父侧不得原样重派,先补条件或上报,细节经 result 回读 refusalReason。\n\t\t\t' A child may declare a task-level refusal via subagent_message (type \"refuse\"): when a settlement ' +\n\t\t\t'projection carries taskOutcome \"refused\", that refusal is final — do not re-dispatch the same task ' +\n\t\t\t\"unchanged; narrow the scope or provide what was missing, or report to the user, and read refusalReason \" +\n\t\t\t'via subagent_task (type \"result\").' +\n\t\t\t// 死线兜底(设计 §5.7):后台任务缺省 60 分钟死线,挂死任务到点被强制 timed_out。\n\t\t\t\" Background tasks carry a watchdog deadline by default (60 minutes; override per call with `deadlineMs`): \" +\n\t\t\t\"a task still running when its deadline passes is force-settled timed_out.\" +\n\t\t\t// 前台 drain 预算与嵌套深度上限:两者都在长任务里会被真实撞到。\n\t\t\t\" Foreground calls wait at most 10 minutes per task; a task still running then settles timed_out with reasonCode \" +\n\t\t\t\"subagent_drain_timeout — use background: true for longer work. Nested delegation is capped at depth 2: a subagent \" +\n\t\t\t\"already two levels deep cannot delegate further.\" +\n\t\t\t(roles.size === 0\n\t\t\t\t? \"\"\n\t\t\t\t: ` Configured subagent roles (pass \\`role\\`): ${renderRoleMenu()}. A role's instructions frame every task in the call; ` +\n\t\t\t\t\t\"a role with a narrowing profile also applies its tools/writeScope/mode/model/thinkingLevel to the child, verified after creation.\"),\n\t\tparameters: Type.Object({\n\t\t\tprompts: Type.Array(\n\t\t\t\tType.String({\n\t\t\t\t\tminLength: 1,\n\t\t\t\t\tdescription: \"Self-contained prompt for one subagent task; the child session sees no parent history\",\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tminItems: 1,\n\t\t\t\t\tdescription: `1..${maxTasksPerCall} independent prompts run as separate subagent tasks`,\n\t\t\t\t},\n\t\t\t),\n\t\t\tcontext: Type.Optional(\n\t\t\t\tType.Object(\n\t\t\t\t\t{\n\t\t\t\t\t\tanchors: Type.Optional(\n\t\t\t\t\t\t\tType.Array(\n\t\t\t\t\t\t\t\tType.Object({\n\t\t\t\t\t\t\t\t\tpath: Type.String({\n\t\t\t\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\t\t\t\tmaxLength: CONTEXT_PATH_MAX_CHARS,\n\t\t\t\t\t\t\t\t\t\tdescription: \"File path the child should start from\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tline: Type.Optional(\n\t\t\t\t\t\t\t\t\t\tType.Integer({ minimum: 1, description: \"Line number in path (positive integer)\" }),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tnote: Type.Optional(\n\t\t\t\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\t\t\t\tmaxLength: CONTEXT_NOTE_MAX_CHARS,\n\t\t\t\t\t\t\t\t\t\t\tdescription: \"One-line why-it-matters note\",\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t{ maxItems: CONTEXT_LIST_MAX_ITEMS },\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tfailedAttempts: Type.Optional(\n\t\t\t\t\t\t\tType.Array(\n\t\t\t\t\t\t\t\tType.Object({\n\t\t\t\t\t\t\t\t\tcommand: Type.String({\n\t\t\t\t\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\t\t\t\t\tmaxLength: CONTEXT_COMMAND_MAX_CHARS,\n\t\t\t\t\t\t\t\t\t\tdescription: \"Command that was already tried and failed\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\tnote: Type.Optional(\n\t\t\t\t\t\t\t\t\t\tType.String({ maxLength: CONTEXT_NOTE_MAX_CHARS, description: \"One-line failure note\" }),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t{ maxItems: CONTEXT_LIST_MAX_ITEMS },\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\"Parent pointers rendered as a header block into each child prompt: file:line anchors and commands \" +\n\t\t\t\t\t\t\t\"already tried and failed.\",\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t),\n\t\t\t...(roles.size === 0\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\trole: Type.Optional(\n\t\t\t\t\t\t\tType.String({\n\t\t\t\t\t\t\t\tdescription:\n\t\t\t\t\t\t\t\t\t`Named subagent role applied to every prompt in this call; one of: ${[...roles.keys()].sort().join(\", \")}. ` +\n\t\t\t\t\t\t\t\t\t\"Omit for a generic task.\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t// background(D-060 S6)在 properties 内组合:此前的 `{...parameters, background}`\n\t\t\t// 顶层展开把键放在 properties 之外,模型面 schema(anthropic 只取 schema.properties、\n\t\t\t// openai 原样透传)从未真正声明该参数——D-060 裁决 13 翻转后随默认注册修正,\n\t\t\t// 裁决 15 起开关形态退役、参数无条件声明。\n\t\t\tbackground: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Submit without waiting: return task tickets immediately and keep working; settled results are \" +\n\t\t\t\t\t\t'announced at your next model round and can be read with subagent_task (type \"result\", optionally waiting).',\n\t\t\t\t}),\n\t\t\t),\n\t\t\t// 死线兜底(设计 §5.7):仅后台合法——前台任务已有父侧 drain 预算,两种边界\n\t\t\t// 不混用;前台携带按 invalid_input 拒绝,不留\"配了但不生效\"的假象。\n\t\t\tdeadlineMs: Type.Optional(\n\t\t\t\tType.Integer({\n\t\t\t\t\tminimum: 1,\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Watchdog deadline for this call's background tasks, in ms (positive integer; requires background: true). \" +\n\t\t\t\t\t\t`Default ${DEFAULT_BACKGROUND_TASK_DEADLINE_MS} (60 minutes).`,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: executeSubagentRun,\n\t});\n\n\tconst executeSubagentRun = async (\n\t\tfirst: unknown,\n\t\tsecond?: unknown,\n\t\t_signal?: AbortSignal,\n\t\tonUpdate?: (partial: { content: { type: \"text\"; text: string }[]; details: unknown }) => void,\n\t): Promise<SubagentDelegateResultV1 | SubagentDelegateBackgroundResultV1> => {\n\t\tconst input = objectInput(first, second);\n\t\tconst prompts = readPrompts(input.prompts, maxTasksPerCall);\n\t\tconst role = resolveRole(input.role, roles);\n\t\t// context 注入(设计 §2.3):形状/边界违规在此整体拒绝;两个列表皆空归一化为\n\t\t// undefined,后续路径与 context 缺省完全一致。\n\t\tconst contextBlock = renderDelegateContext(parseDelegateContext(input.context));\n\t\tconst background = input.background === true;\n\t\t// 死线兜底(设计 §5.7):正整数校验;仅后台合法——前台任务已有父侧 drain 预算,\n\t\t// 两种边界不混用,前台携带按 invalid_input 拒绝(不留\"配了但不生效\"的假象)。\n\t\tconst rawDeadlineMs = input.deadlineMs;\n\t\tif (rawDeadlineMs !== undefined) {\n\t\t\tif (typeof rawDeadlineMs !== \"number\" || !Number.isInteger(rawDeadlineMs) || rawDeadlineMs < 1) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_run deadlineMs must be a positive integer (ms), got ${JSON.stringify(rawDeadlineMs)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (background !== true) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\"subagent_run deadlineMs applies to background submissions only; pass background: true (foreground tasks are bounded by the drain timeout instead)\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tconst backgroundDeadlineMs =\n\t\t\tbackground === true ? (rawDeadlineMs ?? DEFAULT_BACKGROUND_TASK_DEADLINE_MS) : undefined;\n\t\t// 嵌套深度硬限(退役切片 2,Option A):沿 S2 血缘头回溯本会话层级,已达\n\t\t// maxNestedDepth 层时整次调用结构化拒绝——递归的兜底边界(不依赖模型自觉)。\n\t\t// resume 不涉深度(S5 裁定:续写既有会话不计新层级,走 `subagent_task` type `resume`)。\n\t\t// agentDir 单源(D-075 S4 第三批):显式 options 优先,缺省回落 api.host.agentDir。\n\t\tconst agentDir = options?.agentDir ?? api.host.agentDir ?? \"\";\n\t\tif (agentDir !== \"\") {\n\t\t\tconst depth = lineageDepth(session.getSessionId(), agentDir, maxNestedDepth + 2);\n\t\t\tif (depth !== undefined && depth + 1 > maxNestedDepth) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_depth_exceeded\",\n\t\t\t\t\t`this session already sits at nested depth ${depth}; delegation beyond maxNestedDepth ${maxNestedDepth} is refused`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// submit 是同步抛出契约(预算/队列/已释放),逐条捕获为条目级 rejected;\n\t\t// 全部提交完成后再逐条 drain,任务因此并行执行。\n\t\tconst pending: { index: number; handle: Promise<SubagentTaskHandleV1>; deadlineAt?: number }[] = [];\n\t\tconst tasks: (SubagentDelegateTaskProjectionV1 | undefined)[] = new Array(prompts.length).fill(undefined);\n\t\t// 回合级血缘(第 3 期第二批):提交动作发生在父回合工具阶段,此时 correlationId\n\t\t// 有值;getter 缺席或返回 undefined 时不写键(行为回退)。仅 subagent_run 新建\n\t\t// 路径携带——resume 打开既有会话、头定格,写键即\"要求了但不生效\"。\n\t\tconst turnCorrelationId = options?.getTurnCorrelationId?.();\n\t\tfor (let index = 0; index < prompts.length; index += 1) {\n\t\t\tconst prompt = prompts[index] as string;\n\t\t\t// 总量硬限(承载退役切片 2,Option A):本会话累计创建数达上限时按结构化\n\t\t\t// 码拒绝该条目(同批其余条目继续)。深度硬限在 execute 开头沿 S2 血缘头\n\t\t\t// 整调用拒绝(见上),不在此重复。\n\t\t\tif (createdSubagentCount >= maxTotalPerParent) {\n\t\t\t\ttasks[index] = {\n\t\t\t\t\ttaskId: \"\",\n\t\t\t\t\tstatus: \"rejected\",\n\t\t\t\t\treasonCode: \"subagent_child_quota\",\n\t\t\t\t\treason: `this session already created ${createdSubagentCount} child sessions (cap ${maxTotalPerParent})`,\n\t\t\t\t\tmessageCount: 0,\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tcreatedSubagentCount += 1;\n\t\t\t// 首条 prompt 组装(角色框定 + 可选父投影);context 头部块(有则)在最上、\n\t\t\t// 与后续内容空一行,无块时与现状逐字节一致。字节数仍走 submit 侧 maxPromptBytes\n\t\t\t// 预算,超限按预算拒绝而不是静默截断。\n\t\t\tconst composed =\n\t\t\t\trole === undefined\n\t\t\t\t\t? prompt\n\t\t\t\t\t: role.parentView === true\n\t\t\t\t\t\t? `${composeRolePrompt(role, prompt)}\\n\\n${composeParentView(session, session.getSessionId()) ?? \"\"}`.trim()\n\t\t\t\t\t\t: composeRolePrompt(role, prompt);\n\t\t\ttry {\n\t\t\t\t// 后台死线(设计 §5.7):提交即带绝对 deadlineAt(相对调度器墙钟),强制点在\n\t\t\t\t// 调度器 tick;死线只兜\"挂死任务\",正常结算远早于它。\n\t\t\t\tconst deadlineAt = backgroundDeadlineMs === undefined ? undefined : Date.now() + backgroundDeadlineMs;\n\t\t\t\tpending.push({\n\t\t\t\t\tindex,\n\t\t\t\t\thandle: runtime.submit({\n\t\t\t\t\t\tprompt: contextBlock === undefined ? composed : `${contextBlock}\\n\\n${composed}`,\n\t\t\t\t\t\t// 血缘(D-060 S1):父会话 id 随 metadata 过线,宿主写进子会话文件头。\n\t\t\t\t\t\t// 角色存在时 child profile 恒定携带(档案基线含 roleId,无收窄字段的角色\n\t\t\t\t\t\t// 同样有血缘——/agents 与 `subagent_task` 的 list/result 角色血缘对全部\n\t\t\t\t\t\t// 角色生效);`role.profile ?? { version: 1, roleId }` 是防御兜底——对\n\t\t\t\t\t\t// validateRoleDefinition 产出的角色不可达;回归测试钉住该行为。\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\t[AGENT_TASK_PARENT_SESSION_KEY]: session.getSessionId(),\n\t\t\t\t\t\t\t...(turnCorrelationId === undefined ? {} : { [AGENT_TASK_PARENT_TRACE_KEY]: turnCorrelationId }),\n\t\t\t\t\t\t\t...(role === undefined\n\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\t[AGENT_TASK_CHILD_PROFILE_KEY]:\n\t\t\t\t\t\t\t\t\t\t\trole.profile ?? ({ version: 1, roleId: role.id } satisfies AgentTaskChildProfileV1),\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...(deadlineAt === undefined ? {} : { deadlineAt }),\n\t\t\t\t\t}),\n\t\t\t\t\t...(deadlineAt === undefined ? {} : { deadlineAt }),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\ttasks[index] = {\n\t\t\t\t\ttaskId: \"\",\n\t\t\t\t\tstatus: \"rejected\",\n\t\t\t\t\treasonCode: reasonCodeOf(error),\n\t\t\t\t\treason: errorText(error),\n\t\t\t\t\tmessageCount: 0,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\t// 后台委派(D-060 S6,配置门默认关):提交即返回票据,不 drain——任务挂在\n\t\t// 调度器上继续跑(会话级生命周期,父栅栏/会话销毁统一回收)。每个后台任务\n\t\t// 挂一个结算观察器:结算一行有界 JSON 进宿主 sink,随父的下一次模型轮次注入。\n\t\tif (background === true) {\n\t\t\tconst tickets: SubagentDelegateBackgroundTaskV1[] = [];\n\t\t\tfor (const item of pending) {\n\t\t\t\ttry {\n\t\t\t\t\tconst handle = await item.handle;\n\t\t\t\t\ttickets.push({ taskId: handle.id });\n\t\t\t\t\t// 死线监视(设计 §5.7):登记未决死线并惰性启动生产 tick 驱动;任务结算\n\t\t\t\t\t//(含被死线强制/取消/异常)即解除并在归零时停下 ticker。\n\t\t\t\t\tif (item.deadlineAt !== undefined) watchBackgroundDeadline(handle, item.deadlineAt);\n\t\t\t\t\tconst sink = options?.backgroundDigestSink;\n\t\t\t\t\tif (sink !== undefined) {\n\t\t\t\t\t\t// result() 的 reject 通道在 durable results store persist 失败时打开\n\t\t\t\t\t\t//(durable replay assembly 启用后真实存在):摘要观察失败不影响任务\n\t\t\t\t\t\t// 本身(终态已在调度器落库可查),也不产生未处理 rejection;宿主 sink\n\t\t\t\t\t\t// 自带守卫(sdk.ts 结算回注失败只记 hostLogger warn)。\n\t\t\t\t\t\tvoid handle\n\t\t\t\t\t\t\t.result()\n\t\t\t\t\t\t\t.then((record) => {\n\t\t\t\t\t\t\t\tsink(\n\t\t\t\t\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t\t\t\t\ttaskId: record.taskId,\n\t\t\t\t\t\t\t\t\t\tsessionId: record.sessionId,\n\t\t\t\t\t\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t\t\t\t\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\t\t// 摘要观察失败不影响任务本身(终态已在调度器落库可查)。\n\t\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// submit 同步抛错已在上面捕获为条目级 rejected——后台票据只收成功提交。\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { background: true, tasks: tickets };\n\t\t}\n\t\tlet completed = tasks.filter((task) => task !== undefined).length;\n\t\tfor (const item of pending) {\n\t\t\tlet taskId = \"\";\n\t\t\ttry {\n\t\t\t\tconst handle = await item.handle;\n\t\t\t\ttaskId = handle.id;\n\t\t\t\tconst record = await handle.drain({ timeoutMs: taskTimeoutMs });\n\t\t\t\t// escalate 上抛(D-060 S4):随任务投影一起交回父模型(取后即清)。\n\t\t\t\tconst escalations = wiring?.drainEscalations?.(record.sessionId) ?? [];\n\t\t\t\t// 兄弟流量摘录(D-060 裁决 14):只读审计面,随同一信封对父可见。\n\t\t\t\tconst siblingTraffic = wiring?.readSiblingTraffic?.(record.sessionId, SIBLING_TRAFFIC_EXCERPTS) ?? [];\n\t\t\t\ttasks[item.index] = {\n\t\t\t\t\t...projectRecord(record),\n\t\t\t\t\t...(escalations.length === 0 ? {} : { escalations }),\n\t\t\t\t\t...(siblingTraffic.length === 0 ? {} : { siblingTraffic }),\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\t// drain 抛错(如持久化失败):保留原始 message,不静默吞掉。\n\t\t\t\ttasks[item.index] = { taskId, status: \"failed\", reason: errorText(error), messageCount: 0 };\n\t\t\t}\n\t\t\tcompleted += 1;\n\t\t\t// D-044 §5.6:进度随任务完成节流上报(累计 step 数 + 最近一条回合摘要);\n\t\t\t// 只回摘要,不回模型正文。\n\t\t\tconst progressSuffix =\n\t\t\t\tprogressState.steps === 0\n\t\t\t\t\t? \"\"\n\t\t\t\t\t: ` · steps ${progressState.steps}${progressState.last === undefined ? \"\" : ` · ${progressState.last}`}`;\n\t\t\tonUpdate?.({\n\t\t\t\tcontent: [{ type: \"text\", text: `subagent ${completed}/${prompts.length}${progressSuffix}` }],\n\t\t\t\tdetails: {},\n\t\t\t});\n\t\t}\n\t\treturn { tasks: tasks.filter((task): task is SubagentDelegateTaskProjectionV1 => task !== undefined) };\n\t};\n\n\t/** `subagent_run` 的注册句柄:set/remove 后刷新替换,释放时以最新句柄为准。 */\n\tconst runTool: { current: DisposableRegistration } = { current: api.registerTool(buildRunToolDefinition()) };\n\t/** 同 owner 同名重注册 = 更新(旧句柄 dispose 因表项已被接手而失效)。 */\n\tconst refreshRunTool = (): void => {\n\t\trunTool.current = api.registerTool(buildRunToolDefinition());\n\t};\n\n\t/**\n\t * 会话角色(D-081,现合并为 `subagent_role`):注册/列出/删除。注册是\"先落盘再提交内存\"——持久化条目\n\t * 写在会话文件里(customType `subagent.roles.state`),下次打开同一会话仍在;会话\n\t * 角色不写 `<agentDir>/roles/`、不跨会话共享、子代理不继承。角色工具未声明 readonlySafe,\n\t * readonly 会话沿用既有\"未声明即不激活\"语义,不做特殊分支。\n\t */\n\tconst roleSetSpec = toolSpec({\n\t\tname: \"subagent_role.set\",\n\t\tlabel: \"Register a session subagent role\",\n\t\tdescription:\n\t\t\t\"Register or update a session-scoped subagent role and use it by name in subagent_run. The role is persisted \" +\n\t\t\t\"in this session file, so it is still available when this session is opened again; it is not written to the \" +\n\t\t\t\"shared roles directory, not shared with other sessions, and not inherited by child subagents. Use it when the \" +\n\t\t\t\"built-in roles are too coarse for the task at hand. id, description and instructions are required; the optional \" +\n\t\t\t\"fields narrow the child the same way a role file does (tools/writeScope/mode/webSearch/model/thinkingLevel/systemPromptAppend) and \" +\n\t\t\t\"parentView adds a bounded parent projection. Same id updates that session role; the change is visible to the \" +\n\t\t\t\"next subagent_run call without restarting anything.\",\n\t\tparameters: Type.Object({\n\t\t\tid: Type.String({\n\t\t\t\tpattern: \"^[a-z0-9][a-z0-9_-]{0,31}$\",\n\t\t\t\tdescription: \"Lowercase role id (letters, digits, - and _, at most 32 chars)\",\n\t\t\t}),\n\t\t\tdescription: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tmaxLength: ROLE_DESCRIPTION_CHARS,\n\t\t\t\tdescription: `One-line role description shown in the subagent_run role menu (at most ${ROLE_DESCRIPTION_CHARS} chars)`,\n\t\t\t}),\n\t\t\tinstructions: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tmaxLength: ROLE_INSTRUCTIONS_CHARS,\n\t\t\t\tdescription: `Role instructions framing every task in a call (at most ${ROLE_INSTRUCTIONS_CHARS} chars)`,\n\t\t\t}),\n\t\t\tmodel: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Narrow the child to this model id (must resolve within this session's scoped models)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tthinkingLevel: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Narrow the child thinking level: minimal | low | medium | high | xhigh | max\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\ttools: Type.Optional(\n\t\t\t\tType.Array(Type.String(), {\n\t\t\t\t\tdescription: \"Tool allowlist intersected with the inherited tool set ([] gives the child no tools)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\twriteScope: Type.Optional(\n\t\t\t\tType.Array(Type.String(), {\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Relative write-path globs for edit/write (POSIX separators; [] denies all writes; absent = unrestricted)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tmode: Type.Optional(\n\t\t\t\tType.Union([Type.Literal(\"readonly\"), Type.Literal(\"full-control\")], {\n\t\t\t\t\tdescription: \"Narrow-only session mode: readonly never widens a readonly parent\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\twebSearch: Type.Optional(\n\t\t\t\tType.Union([Type.Literal(\"off\"), Type.Literal(\"auto\")], {\n\t\t\t\t\tdescription: \"Provider-native web search for this child (auto requires model metadata webSearch.native)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tsystemPromptAppend: Type.Optional(\n\t\t\t\tType.String({ description: \"Text appended to the child system prompt (never replaces inherited content)\" }),\n\t\t\t),\n\t\t\tparentView: Type.Optional(\n\t\t\t\tType.Boolean({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Give the child a bounded projection of the parent goal/tools (parent history stays hidden)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentRoleSetResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_role type \"set\"');\n\t\t\tconst id = input.id;\n\t\t\tif (typeof id !== \"string\" || !ROLE_ID_PATTERN.test(id)) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_role type \"set\" id must match ${String(ROLE_ID_PATTERN)} (lowercase letters, digits, \"-\" and \"_\", ` +\n\t\t\t\t\t\t`at most 32 chars), got ${JSON.stringify(id)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (const key of Object.keys(input)) {\n\t\t\t\tif (key === \"id\" || (ROLE_KNOWN_KEYS as readonly string[]).includes(key)) continue;\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_role type \"set\" has unknown parameter ${JSON.stringify(key)} (known: id, ${ROLE_KNOWN_KEYS.join(\", \")})`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst definition: Record<string, unknown> = {};\n\t\t\tfor (const key of ROLE_KNOWN_KEYS) {\n\t\t\t\tif (input[key] !== undefined) definition[key] = input[key];\n\t\t\t}\n\t\t\tlet role: SubagentDelegateRoleV1 | undefined;\n\t\t\ttry {\n\t\t\t\trole = validateRoleDefinition(id, definition, `subagent_role type \"set\" \"${id}\"`);\n\t\t\t} catch (error) {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", errorText(error));\n\t\t\t}\n\t\t\tif (role === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_role type \"set\" could not build role ${JSON.stringify(id)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\t// 磁盘角色是用户资产:与**当前可见**磁盘角色撞名的新注册结构化拒绝,不隐式改写\n\t\t\t// 其含义。已有会话数据条目(装载期被磁盘遮蔽的影子角色)走正常 upsert 路径:\n\t\t\t// 更新的是会话文件里的数据,视图仍由磁盘角色当值。\n\t\t\tif (diskRoles.has(id) && !sessionRoles.has(id)) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_role_conflict\",\n\t\t\t\t\t`subagent role ${JSON.stringify(id)} is a disk role declared by this suite; a session role cannot shadow it — ` +\n\t\t\t\t\t\t\"pick another id or edit the role file\",\n\t\t\t\t);\n\t\t\t}\n\t\t\t// 预算检查(暴露预算:可用集 + 新角色,磁盘+会话合并计算):超限结构化拒绝并提示精简。\n\t\t\tconst prospective = new Map(roles);\n\t\t\tprospective.set(id, role);\n\t\t\tconst quota = roleQuotaViolation(prospective);\n\t\t\tif (quota !== undefined) throw new SubagentDelegateError(\"subagent_role_quota\", quota);\n\t\t\t// 写入顺序:先 appendEntry(失败原样抛出,注册即失败),成功后才提交内存——\n\t\t\t// 内存与文件不背离。快照是 append-only 全量形态,写的是**数据表**(含未暴露项,\n\t\t\t// 视图收窄不抹掉数据)。\n\t\t\tconst status = sessionRoles.has(id) ? (\"updated\" as const) : (\"created\" as const);\n\t\t\tconst nextSessionRoles = new Map(sessionRoles);\n\t\t\tnextSessionRoles.set(id, role);\n\t\t\tpersistSessionRoles(nextSessionRoles.values());\n\t\t\tsessionRoles.set(id, role);\n\t\t\t// 视图提交:磁盘角色优先——影子 id 只更新数据,不改变可用集。\n\t\t\tif (!diskRoles.has(id)) roles.set(id, role);\n\t\t\trefreshRunTool();\n\t\t\treturn { id, status, roles: [...roles.keys()].sort() };\n\t\t},\n\t});\n\n\tconst roleListSpec = toolSpec({\n\t\tname: \"subagent_role.list\",\n\t\tlabel: \"List subagent roles\",\n\t\tdescription:\n\t\t\t\"List the subagent roles available in this session: id, origin (disk = shared role file, session = registered \" +\n\t\t\t'here with subagent_role type \"set\"), description, and whether the role narrows the child (hasProfile) or enables the ' +\n\t\t\t\"bounded parent projection (hasParentView). Pass an id to get one role's full definition, including its \" +\n\t\t\t'instructions and narrowing fields, to read, modify and re-register with subagent_role (type \"set\").',\n\t\tparameters: Type.Object({\n\t\t\tid: Type.Optional(Type.String({ description: \"Role id; omit to list every available role\" })),\n\t\t}),\n\t\texecute: async (\n\t\t\tfirst: unknown,\n\t\t\tsecond?: unknown,\n\t\t): Promise<SubagentRoleListResultV1 | SubagentRoleViewResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_role type \"list\"');\n\t\t\tconst requested = input.id;\n\t\t\tif (requested !== undefined && (typeof requested !== \"string\" || requested.trim() === \"\")) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_role type \"list\" id must be a non-empty string when present',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst originOf = (roleId: string): \"disk\" | \"session\" => (diskRoles.has(roleId) ? \"disk\" : \"session\");\n\t\t\tif (requested === undefined) {\n\t\t\t\tconst entries: SubagentRoleListEntryV1[] = [...roles.values()]\n\t\t\t\t\t.sort((left, right) => (left.id < right.id ? -1 : 1))\n\t\t\t\t\t.map((role) => ({\n\t\t\t\t\t\tid: role.id,\n\t\t\t\t\t\torigin: originOf(role.id),\n\t\t\t\t\t\tdescription: role.description,\n\t\t\t\t\t\thasProfile: hasNarrowingProfile(role),\n\t\t\t\t\t\thasParentView: role.parentView === true,\n\t\t\t\t\t}));\n\t\t\t\treturn { roles: entries };\n\t\t\t}\n\t\t\tconst role = roles.get(requested);\n\t\t\tif (role === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_unknown_role\", unknownRoleMessage(requested, roles));\n\t\t\t}\n\t\t\treturn { role: { ...toSessionRoleRecord(role), origin: originOf(role.id) } };\n\t\t},\n\t});\n\n\tconst roleRemoveSpec = toolSpec({\n\t\tname: \"subagent_role.remove\",\n\t\tlabel: \"Remove a session subagent role\",\n\t\tdescription:\n\t\t\t'Remove one session-scoped subagent role (one registered with subagent_role type \"set\") from this session. The removal ' +\n\t\t\t\"is persisted in the session file and takes effect for the next subagent_run call. Disk roles cannot be removed \" +\n\t\t\t\"here — they live in the shared roles directory and are changed by editing their file; such a call is rejected \" +\n\t\t\t\"with a structured error.\",\n\t\tparameters: Type.Object({\n\t\t\tid: Type.String({ description: \"Session role id to remove\" }),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentRoleRemoveResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_role type \"remove\"');\n\t\t\tconst id = input.id;\n\t\t\tif (typeof id !== \"string\" || id.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", 'subagent_role type \"remove\" requires a role id');\n\t\t\t}\n\t\t\t// 会话数据条目优先:被磁盘遮蔽的影子角色也能删(删的是会话文件里的数据,\n\t\t\t// 磁盘角色本身不受影响);没有会话数据时才按\"纯磁盘角色\"结构化拒绝。\n\t\t\tif (!sessionRoles.has(id)) {\n\t\t\t\tif (diskRoles.has(id)) {\n\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\"subagent_role_conflict\",\n\t\t\t\t\t\t`subagent role ${JSON.stringify(id)} is a disk role; disk roles are changed by editing their file, ` +\n\t\t\t\t\t\t\t\"not removed from a session\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_unknown_role\", unknownRoleMessage(id, roles));\n\t\t\t}\n\t\t\t// 同样的写入顺序:先全量快照落盘,成功后才提交内存与刷新工具面。\n\t\t\tconst nextSessionRoles = new Map(sessionRoles);\n\t\t\tnextSessionRoles.delete(id);\n\t\t\tpersistSessionRoles(nextSessionRoles.values());\n\t\t\tsessionRoles.delete(id);\n\t\t\t// 视图提交:磁盘角色优先——删掉影子数据后磁盘角色仍是可用集的当值项。\n\t\t\tif (!diskRoles.has(id)) roles.delete(id);\n\t\t\trefreshRunTool();\n\t\t\treturn { id, status: \"removed\", roles: [...roles.keys()].sort() };\n\t\t},\n\t});\n\n\t/**\n\t * 角色三工具合并为 `subagent_role`(2026-10-21 用户裁决:大类型一个工具,\n\t * `type` + 参数区分)。子操作定义仍是上面的三个 spec,派发前按 type 做\n\t * fail-closed 参数校验——跨 type 传参不会被静默忽略。\n\t */\n\tconst roleTool = api.registerTool({\n\t\tname: \"subagent_role\",\n\t\tlabel: \"Subagent roles\",\n\t\tdescription:\n\t\t\t'Manage session-scoped subagent roles. type=\"set\": register or update a role (id, description, instructions ' +\n\t\t\t'required; optional fields narrow the child); type=\"list\": list the roles available in this session, or one ' +\n\t\t\t'role\\'s full definition when id is given; type=\"remove\": remove one session-scoped role. Disk roles are ' +\n\t\t\t\"read-only here — edit their file instead.\",\n\t\tparameters: Type.Object({\n\t\t\ttype: Type.Union([Type.Literal(\"set\"), Type.Literal(\"list\"), Type.Literal(\"remove\")], {\n\t\t\t\tdescription: \"Operation: set | list | remove\",\n\t\t\t}),\n\t\t\t...optionalParams(\n\t\t\t\troleSetSpec.parameters.properties,\n\t\t\t\troleListSpec.parameters.properties,\n\t\t\t\troleRemoveSpec.parameters.properties,\n\t\t\t),\n\t\t\t// Shared key across the three operations: give one neutral description\n\t\t\t// instead of whichever spec happened to be merged last.\n\t\t\tid: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tpattern: \"^[a-z0-9][a-z0-9_-]{0,31}$\",\n\t\t\t\t\tdescription: \"Role id: set/remove target, or one role to view for list\",\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, \"subagent_role\");\n\t\t\tconst type = readDiscriminator(input, \"subagent_role\", [\"set\", \"list\", \"remove\"]);\n\t\t\tif (type === \"set\") {\n\t\t\t\trejectForeignParams(input, \"subagent_role\", type, [\"id\", ...ROLE_KNOWN_KEYS]);\n\t\t\t\treturn roleSetSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"list\") {\n\t\t\t\trejectForeignParams(input, \"subagent_role\", type, [\"id\"]);\n\t\t\t\treturn roleListSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\trejectForeignParams(input, \"subagent_role\", type, [\"id\"]);\n\t\t\treturn roleRemoveSpec.execute(withoutDiscriminator(input), second);\n\t\t},\n\t});\n\n\t/**\n\t * `/roles` 视图(D-081 用户面):数据源只有上面的三个闭包表(实时值)——可用集\n\t * `roles`(按来源分区,磁盘 `diskRoles` 优先)、数据表 `sessionRoles`(诊断里\n\t * \"数据仍在会话文件里\"的判据)、水合诊断 `hydratedRoles` 与目录解析诊断\n\t * `roleCatalog.dangling`。分区/诊断行仅在非空时出现,列表按 id 排序。\n\t */\n\tconst renderRolesOverview = (): string => {\n\t\t// roles.agentDir 是角色目录(<agentDir>/roles/)的来源;没有它就没有磁盘角色面,\n\t\t// 路径提示也就无从谈起(未见关联的会话不引导用户去丢文件)。\n\t\tconst roleAgentDir = options?.roles?.agentDir;\n\t\tconst sorted = [...roles.values()].sort((left, right) => (left.id < right.id ? -1 : 1));\n\t\tconst disk = sorted.filter((role) => diskRoles.has(role.id));\n\t\tconst session = sorted.filter((role) => !diskRoles.has(role.id));\n\t\tconst lines: string[] = [];\n\t\tif (sorted.length === 0) {\n\t\t\tlines.push(\n\t\t\t\t'No subagent roles are available in this session. Register one with subagent_role type \"set\"' +\n\t\t\t\t\t(roleAgentDir === undefined\n\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t: `, or drop a role file into ${join(roleAgentDir, ROLE_CATALOG_DIR)}/ and associate its id in the suite.`),\n\t\t\t);\n\t\t} else {\n\t\t\tlines.push(`Subagent roles available in this session: ${sorted.length}`);\n\t\t\tif (disk.length > 0 || session.length > 0) lines.push(\"\");\n\t\t\tif (disk.length > 0) {\n\t\t\t\tlines.push(\"disk:\");\n\t\t\t\tfor (const role of disk) lines.push(` ${role.id} — ${role.description}`);\n\t\t\t}\n\t\t\tif (session.length > 0) {\n\t\t\t\tlines.push(\"session:\");\n\t\t\t\tfor (const role of session) lines.push(` ${role.id} — ${role.description}`);\n\t\t\t}\n\t\t}\n\t\t// 诊断区(仅非空时显示):影子/超预算条目按数据表过滤——已被 remove 的旧诊断\n\t\t// 不再声称\"数据仍保留\";悬空关联只列 id,有角色目录时附逐 id 修复提示。\n\t\tconst shadowed = [...hydratedRoles.shadowedByDisk].filter((id) => sessionRoles.has(id)).sort();\n\t\tconst overBudget = [...hydratedRoles.droppedForQuota].filter((id) => sessionRoles.has(id)).sort();\n\t\tconst dangling = [...roleCatalog.dangling].sort();\n\t\tif (shadowed.length > 0 || overBudget.length > 0) {\n\t\t\tlines.push(\"\", \"Not exposed (data kept in this session file):\");\n\t\t\tif (shadowed.length > 0) lines.push(` shadowed by a visible disk role: ${shadowed.join(\", \")}`);\n\t\t\tif (overBudget.length > 0) {\n\t\t\t\tlines.push(\n\t\t\t\t\t` over the menu budget (${ROLE_COUNT_LIMIT} roles / ${ROLE_MENU_CHARS} chars): ${overBudget.join(\", \")}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (dangling.length > 0) {\n\t\t\tlines.push(\"\", `Suite associations without a role file (unavailable): ${dangling.join(\", \")}`);\n\t\t\tif (roleAgentDir !== undefined) {\n\t\t\t\tfor (const id of dangling) {\n\t\t\t\t\tlines.push(` create ${subagentRoleCatalogPath(roleAgentDir, id)} or drop the association`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn lines.join(\"\\n\");\n\t};\n\n\t/** `/roles <id>` 视图:单角色完整定义(收窄字段存在才显示,parentView 仅 true 显示)。 */\n\tconst renderRoleDefinitionView = (role: SubagentDelegateRoleV1): string => {\n\t\tconst lines = [\n\t\t\t`id: ${role.id}`,\n\t\t\t`origin: ${diskRoles.has(role.id) ? \"disk\" : \"session\"}`,\n\t\t\t`description: ${role.description}`,\n\t\t\t\"instructions:\",\n\t\t\trole.instructions,\n\t\t];\n\t\tconst profile = role.profile;\n\t\tif (profile?.model !== undefined) lines.push(`model: ${profile.model}`);\n\t\tif (profile?.thinkingLevel !== undefined) lines.push(`thinkingLevel: ${profile.thinkingLevel}`);\n\t\tif (profile?.tools !== undefined) lines.push(`tools: ${profile.tools.join(\", \")}`);\n\t\tif (profile?.writeScope !== undefined) lines.push(`writeScope: ${profile.writeScope.join(\", \")}`);\n\t\tif (profile?.mode !== undefined) lines.push(`mode: ${profile.mode}`);\n\t\tif (profile?.webSearch !== undefined) lines.push(`webSearch: ${profile.webSearch}`);\n\t\tif (profile?.systemPromptAppend !== undefined) lines.push(\"systemPromptAppend:\", profile.systemPromptAppend);\n\t\tif (role.parentView === true) lines.push(\"parentView: true\");\n\t\treturn lines.join(\"\\n\");\n\t};\n\n\t/**\n\t * `/roles` 斜杠命令(D-081 用户面):与角色工具同一注册分支(委派面存在才注册),\n\t * 句柄随插件 dispose。只读视图——不改状态、不引入新配置键;未知 id 是正常结果\n\t * (error + 可用 id 列表),任何异常都收敛为 `{ status: \"error\" }`,命令不崩宿主。\n\t */\n\tconst rolesCommand = api.registerCommand({\n\t\tname: \"roles\",\n\t\tdescription:\n\t\t\t\"List the subagent roles available in this session (disk + session), or show one role's full definition\",\n\t\targumentHint: \"[id]\",\n\t\texecute: async (args: string) => {\n\t\t\ttry {\n\t\t\t\tconst requested = args.trim();\n\t\t\t\tif (requested === \"\") {\n\t\t\t\t\treturn { status: \"success\" as const, message: renderRolesOverview() };\n\t\t\t\t}\n\t\t\t\tconst role = roles.get(requested);\n\t\t\t\tif (role === undefined) {\n\t\t\t\t\treturn { status: \"error\" as const, message: unknownRoleMessage(requested, roles) };\n\t\t\t\t}\n\t\t\t\treturn { status: \"success\" as const, message: renderRoleDefinitionView(role) };\n\t\t\t} catch (error) {\n\t\t\t\t// A slash command must not crash the host (memory /promote precedent).\n\t\t\t\treturn { status: \"error\" as const, message: errorText(error) };\n\t\t\t}\n\t\t},\n\t});\n\n\t/**\n\t * 只读回读工具(D-060 S3):按 `taskId` 或 `sessionId` 取回**有界**的子会话片段。\n\t * - `taskId` → 调度记录(内存/durable,owner+parent 作用域);\n\t * - `sessionId` → 持久化 transcript(宿主注入的会话回读器;未注入时结构化报错)。\n\t * 返回默认只给最后 N 条(可调),并如实报告条数/字节/截断——绝不默认回灌全文。\n\t */\n\tconst resultSpec = toolSpec({\n\t\tname: \"subagent_task.result\",\n\t\tlabel: \"Read subagent result\",\n\t\tdescription:\n\t\t\t\"Read back a bounded slice of a subagent's session: pass the taskId from subagent_run, or the child's sessionId \" +\n\t\t\t\"to read its persisted transcript. Returns at most `maxMessages` trailing entries (default 20) plus counts, \" +\n\t\t\t\"byte size and a truncated flag; it never returns the whole transcript by default.\",\n\t\tparameters: Type.Object({\n\t\t\ttaskId: Type.Optional(Type.String({ description: \"Task id from subagent_run (scheduler record read)\" })),\n\t\t\tsessionId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Child session id (persisted transcript read; requires a host session reader)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tmaxMessages: Type.Optional(\n\t\t\t\tType.Integer({ description: \"Trailing entries to return (1..50, default 20)\", minimum: 1, maximum: 50 }),\n\t\t\t),\n\t\t\twaitMs: Type.Optional(\n\t\t\t\tType.Integer({\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"Bounded wait for a background task to settle, in ms (0..120000, default 0 = check once; \" +\n\t\t\t\t\t\t\"unsettled tasks come back with knownTask/taskStatus instead of the transcript)\",\n\t\t\t\t\tminimum: 0,\n\t\t\t\t\tmaximum: 120000,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentResultReadResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"result\"');\n\t\t\tconst taskId = typeof input.taskId === \"string\" && input.taskId.trim() !== \"\" ? input.taskId : undefined;\n\t\t\tconst sessionId =\n\t\t\t\ttypeof input.sessionId === \"string\" && input.sessionId.trim() !== \"\" ? input.sessionId : undefined;\n\t\t\tconst requested = input.maxMessages === undefined ? RESULT_READ_DEFAULT_MESSAGES : Number(input.maxMessages);\n\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > RESULT_READ_MAX_MESSAGES) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_task type \"result\" maxMessages must be an integer in 1..${RESULT_READ_MAX_MESSAGES}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst waitMs = input.waitMs === undefined ? 0 : Number(input.waitMs);\n\t\t\tif (!Number.isInteger(waitMs) || waitMs < 0 || waitMs > RESULT_READ_MAX_WAIT_MS) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t`subagent_task type \"result\" waitMs must be an integer in 0..${RESULT_READ_MAX_WAIT_MS}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (taskId === undefined && sessionId === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_task type \"result\" requires taskId (scheduler record) or sessionId (persisted transcript)',\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (taskId !== undefined) {\n\t\t\t\tconst requester = {\n\t\t\t\t\towner: capabilityManifest.id,\n\t\t\t\t\tparentSessionId: session.getSessionId(),\n\t\t\t\t};\n\t\t\t\t// 后台委派(D-060 S6):waitMs > 0 时有界等待结算;否则查一次。\n\t\t\t\tconst record =\n\t\t\t\t\twaitMs > 0 ? await runtime.wait(taskId, waitMs, requester) : await runtime.result(taskId, requester);\n\t\t\t\tif (record === undefined) {\n\t\t\t\t\t// 未结算与不存在分开表达:已知任务回当前状态,模型可稍后再取。\n\t\t\t\t\tconst known = runtime.peek(taskId, requester);\n\t\t\t\t\treturn known === undefined\n\t\t\t\t\t\t? { found: false, source: \"record\", taskId }\n\t\t\t\t\t\t: { found: false, source: \"record\", taskId, knownTask: true, taskStatus: known.status };\n\t\t\t\t}\n\t\t\t\tconst messages = record.messages.slice(-requested);\n\t\t\t\t// escalate 上抛(D-060 S4):按子会话 id 取走并随信封返回(取后即清)。\n\t\t\t\tconst escalations = wiring?.drainEscalations?.(record.sessionId) ?? [];\n\t\t\t\tconst siblingTraffic = wiring?.readSiblingTraffic?.(record.sessionId, SIBLING_TRAFFIC_EXCERPTS) ?? [];\n\t\t\t\treturn {\n\t\t\t\t\tfound: true,\n\t\t\t\t\tsource: \"record\",\n\t\t\t\t\ttaskId: record.taskId,\n\t\t\t\t\tsessionId: record.sessionId,\n\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t\t\t\t...(record.reason === undefined ? {} : { reason: record.reason }),\n\t\t\t\t\tmessageCount: record.messages.length,\n\t\t\t\t\treturnedMessages: messages.length,\n\t\t\t\t\tbytes: utf8ByteLength(JSON.stringify(record.messages)),\n\t\t\t\t\ttruncated: record.truncated || messages.length < record.messages.length,\n\t\t\t\t\tmessages: messages.map((message) => detachedSessionSnapshot(message)),\n\t\t\t\t\t...(record.taskOutcome === undefined ? {} : { taskOutcome: record.taskOutcome }),\n\t\t\t\t\t...(record.refusalReason === undefined ? {} : { refusalReason: record.refusalReason }),\n\t\t\t\t\t...(escalations.length === 0 ? {} : { escalations }),\n\t\t\t\t\t...(siblingTraffic.length === 0 ? {} : { siblingTraffic }),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst reader = agents?.session;\n\t\t\tif (reader === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_profile_not_applied\",\n\t\t\t\t\t\"this host exposes no session reader; pass taskId instead (or run on a host that injects one)\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst view = await reader(sessionId as string);\n\t\t\tif (view === undefined) return { found: false, source: \"session\", sessionId };\n\t\t\tconst entries = view.entries.slice(-requested);\n\t\t\tconst escalations = wiring?.drainEscalations?.(view.sessionId) ?? [];\n\t\t\tconst siblingTraffic = wiring?.readSiblingTraffic?.(view.sessionId, SIBLING_TRAFFIC_EXCERPTS) ?? [];\n\t\t\treturn {\n\t\t\t\tfound: true,\n\t\t\t\tsource: \"session\",\n\t\t\t\tsessionId: view.sessionId,\n\t\t\t\t...(view.agentRole === undefined ? {} : { roleId: view.agentRole }),\n\t\t\t\tentryCount: view.entryCount,\n\t\t\t\treturnedMessages: entries.length,\n\t\t\t\tbytes: view.bytes,\n\t\t\t\ttruncated: view.truncated || entries.length < view.entryCount,\n\t\t\t\tmessages: entries.map((entry) => detachedSessionSnapshot(entry)),\n\t\t\t\t...(escalations.length === 0 ? {} : { escalations }),\n\t\t\t\t...(siblingTraffic.length === 0 ? {} : { siblingTraffic }),\n\t\t\t};\n\t\t},\n\t});\n\n\t// steer 的模型面(D-060 裁决 13,2026-10-02 用户裁决):`subagent_task` type `steer` 随\n\t// background 面注册。原 S4 裁决\"steer 不设模型面工具\"的前提——前台阻塞 drain 下\n\t// 父模型无\"运行中窗口\"——在 background 默认开后失效(提交即返回票据,运行中窗口\n\t// 存在),该论证保留为背景说明。语义对齐主流取证(codex v2 send_message /\n\t// ZCode SendMessage 均为模型面排队投递):不打断子代理当前回合,在其下一个模型\n\t// 请求前生效。程序面(agents 桥的 steer 与本调度器的 steer/findBySession 原语)\n\t// 保持不变,供编排插件组合。\n\t// `subagent_task` type `cancel`(S4 补充裁决,2026-10-01):原\"仅 background 委派启用时注册\"\n\t// 的前提(前台 drain 下父模型在 subagent_run 阻塞中不存在运行中窗口)保留为\n\t// 背景说明——cancel 只在 background 委派返回票据后才有可达窗口。\n\t// cancel/steer 操作自 D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst cancelSpec = toolSpec({\n\t\tname: \"subagent_task.cancel\",\n\t\tlabel: \"Cancel a background subagent\",\n\t\tdescription:\n\t\t\t\"Cancel a running background subagent task by its taskId (the ticket returned by subagent_run with \" +\n\t\t\t\"background: true). Only background delegation tickets are cancellable: a foreground subagent_run call \" +\n\t\t\t\"blocks until its tasks finish, so it never leaves a running task behind. Terminal statuses (including a \" +\n\t\t\t\"task cancelled by something else) come back as already_terminal; unknown taskIds as not_found.\",\n\t\tparameters: Type.Object({\n\t\t\ttaskId: Type.String({ description: \"Task id from a background subagent_run ticket\" }),\n\t\t\treason: Type.Optional(Type.String({ description: \"Short reason recorded on the cancellation fence\" })),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentCancelResultV1> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"cancel\"');\n\t\t\tconst taskId = typeof input.taskId === \"string\" ? input.taskId : \"\";\n\t\t\tif (taskId.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_invalid_input\", 'subagent_task type \"cancel\" requires a taskId');\n\t\t\t}\n\t\t\tconst reason = typeof input.reason === \"string\" && input.reason.trim() !== \"\" ? input.reason : undefined;\n\t\t\tconst result = await runtime.cancelById(\n\t\t\t\ttaskId,\n\t\t\t\t{ owner: capabilityManifest.id, parentSessionId: session.getSessionId() },\n\t\t\t\treason,\n\t\t\t);\n\t\t\treturn result.outcome === \"not_found\"\n\t\t\t\t? { outcome: \"not_found\", taskId }\n\t\t\t\t: { outcome: result.outcome, taskId, status: result.status };\n\t\t},\n\t});\n\n\t// `subagent_task` type `steer`(D-060 裁决 13):与 cancelTool 同属 background 面——有界引导消息\n\t// 投递给运行中的后台子任务(排队语义),需要硬终止时模型仍走 `subagent_task` type `cancel`。\n\t// D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst steerSpec = toolSpec({\n\t\tname: \"subagent_task.steer\",\n\t\tlabel: \"Steer a background subagent\",\n\t\tdescription:\n\t\t\t\"Deliver one bounded steering message to a running background subagent task by its taskId (the ticket \" +\n\t\t\t\"returned by subagent_run with background: true). Queued delivery: it does NOT interrupt the subagent's \" +\n\t\t\t\"current turn — it takes effect before the task's next model request. Use it when user feedback or new \" +\n\t\t\t'information should change the subtask\\'s direction. Use subagent_task with type \"cancel\" when the task must stop instead.',\n\t\tparameters: Type.Object({\n\t\t\ttaskId: Type.String({ description: \"Task id from a background subagent_run ticket\" }),\n\t\t\ttext: Type.String({\n\t\t\t\tminLength: 1,\n\t\t\t\tdescription: `Bounded steering message (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes), delivered before the task's next model request`,\n\t\t\t}),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown): Promise<{ delivered: true; taskId: string }> => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"steer\"');\n\t\t\tconst taskId = typeof input.taskId === \"string\" ? input.taskId : \"\";\n\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\tif (taskId.trim() === \"\" || text.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_task type \"steer\" requires a taskId and non-empty text',\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (Buffer.byteLength(text, \"utf8\") > SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_message_too_large\",\n\t\t\t\t\t`subagent_task type \"steer\" text exceeds ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait runtime.steer(taskId, text, {\n\t\t\t\t\towner: capabilityManifest.id,\n\t\t\t\t\tparentSessionId: session.getSessionId(),\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tmapCommunicationError(error);\n\t\t\t}\n\t\t\treturn { delivered: true, taskId };\n\t\t},\n\t});\n\n\t/**\n\t * 父→子续跑(D-060 S4):对**已终态且已落盘**的子会话按 sessionId 继续提交一轮\n\t * 任务(同一份 JSONL 续写,多轮子任务)。血缘作用域由宿主会话回读器判定,活跃\n\t * 任务占用以 `subagent_session_busy` 拒绝。shared 与 pooled 都支持——pooled 下\n\t * resume 键随 metadata 过线,runner 打开既有会话文件续写。\n\t * D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\t */\n\tconst resumeSpec = toolSpec({\n\t\tname: \"subagent_task.resume\",\n\t\tlabel: \"Resume a subagent\",\n\t\tdescription:\n\t\t\t\"Continue a finished subagent session by its sessionId: submit one more prompt into the same persisted \" +\n\t\t\t\"transcript (multi-turn subtask) and get the bounded terminal projection, like subagent_run for one task.\",\n\t\tparameters: Type.Object({\n\t\t\tsessionId: Type.String({ description: \"Child session id of a finished subagent task\" }),\n\t\t\tprompt: Type.String({ minLength: 1, description: \"Follow-up prompt for the continued session\" }),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, 'subagent_task type \"resume\"');\n\t\t\tconst sessionId = typeof input.sessionId === \"string\" ? input.sessionId : \"\";\n\t\t\tconst prompt = typeof input.prompt === \"string\" ? input.prompt : \"\";\n\t\t\tif (sessionId === \"\" || prompt.trim() === \"\") {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t'subagent_task type \"resume\" requires sessionId and prompt',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst reader = agents?.session;\n\t\t\tif (reader === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_profile_not_applied\",\n\t\t\t\t\t\"this host exposes no session reader; resume cannot verify the session scope\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst view = await reader(sessionId);\n\t\t\tif (view === undefined) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_unknown_session\",\n\t\t\t\t\t`no child session ${sessionId} under this parent`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst requester = { owner: capabilityManifest.id, parentSessionId: session.getSessionId() };\n\t\t\tconst active = runtime.findBySession(sessionId, requester);\n\t\t\tif (active !== undefined && !active.settled) {\n\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\"subagent_session_busy\",\n\t\t\t\t\t`session ${sessionId} still has an unsettled task (${active.taskId}); steer or wait instead`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet handle: SubagentTaskHandleV1;\n\t\t\ttry {\n\t\t\t\thandle = await runtime.submit({\n\t\t\t\t\tprompt,\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t[AGENT_TASK_PARENT_SESSION_KEY]: session.getSessionId(),\n\t\t\t\t\t\t[AGENT_TASK_RESUME_SESSION_KEY]: sessionId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow new SubagentDelegateError(\"subagent_submit_rejected\", errorText(error));\n\t\t\t}\n\t\t\tconst record = await handle.drain({ timeoutMs: taskTimeoutMs });\n\t\t\treturn { tasks: [projectRecord(record)] };\n\t\t},\n\t});\n\n\t/**\n\t * 子会话盘点(D-060 模型面):列出**本会话自己的**子代理会话(最近活动倒序、\n\t * 有界),并用调度器记录富化活跃/终态信息。宿主注入 `agents.list` 才注册;\n\t * 读的是落盘目录,父会话跨进程重启后仍能找回自己的子代理。返回的 sessionId\n\t * 可直接用于 `subagent_task` 的 `result` / `resume`。\n\t */\n\tconst listSpec =\n\t\tagents?.list === undefined\n\t\t\t? undefined\n\t\t\t: toolSpec({\n\t\t\t\t\tname: \"subagent_task.list\",\n\t\t\t\t\tlabel: \"List subagent sessions\",\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"List this session's own subagent sessions (newest activity first) with role, timestamps and transcript \" +\n\t\t\t\t\t\t\"size; tasks still in flight are marked active, settled ones carry their terminal status. Read-only. \" +\n\t\t\t\t\t\t'Use a listed sessionId with subagent_task type \"result\" or \"resume\".',\n\t\t\t\t\tparameters: Type.Object({\n\t\t\t\t\t\tlimit: Type.Optional(\n\t\t\t\t\t\t\tType.Integer({\n\t\t\t\t\t\t\t\tdescription: \"Max entries to return (1..50, default 20)\",\n\t\t\t\t\t\t\t\tminimum: 1,\n\t\t\t\t\t\t\t\tmaximum: 50,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t\texecute: async (first: unknown, second?: unknown): Promise<SubagentSessionListResultV1> => {\n\t\t\t\t\t\tconst input = objectInput(first, second, 'subagent_task type \"list\"');\n\t\t\t\t\t\tconst requested = input.limit === undefined ? 20 : Number(input.limit);\n\t\t\t\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > 50) {\n\t\t\t\t\t\t\tthrow new SubagentDelegateError(\n\t\t\t\t\t\t\t\t\"subagent_invalid_input\",\n\t\t\t\t\t\t\t\t'subagent_task type \"list\" limit must be an integer in 1..50',\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst summaries = (await agents.list?.()) ?? [];\n\t\t\t\t\t\tconst requester = { owner: capabilityManifest.id, parentSessionId: session.getSessionId() };\n\t\t\t\t\t\tconst sessions = [];\n\t\t\t\t\t\tfor (const summary of summaries.slice(0, requested)) {\n\t\t\t\t\t\t\tconst live = runtime.findBySession(summary.sessionId, requester);\n\t\t\t\t\t\t\tif (live !== undefined && !live.settled) {\n\t\t\t\t\t\t\t\tsessions.push({ ...summary, active: true as const });\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (live !== undefined) {\n\t\t\t\t\t\t\t\tconst record = await runtime.result(live.taskId, requester);\n\t\t\t\t\t\t\t\tif (record !== undefined) {\n\t\t\t\t\t\t\t\t\tsessions.push({\n\t\t\t\t\t\t\t\t\t\t...summary,\n\t\t\t\t\t\t\t\t\t\tstatus: record.status,\n\t\t\t\t\t\t\t\t\t\t...(record.reasonCode === undefined ? {} : { reasonCode: record.reasonCode }),\n\t\t\t\t\t\t\t\t\t\t...(record.reason === undefined ? {} : { reason: record.reason }),\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// 无内存记录(父重启前的旧子会话):只回摘要,transcript 仍在盘上。\n\t\t\t\t\t\t\tsessions.push(summary);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { count: sessions.length, sessions };\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t/**\n\t * 任务面合并为 `subagent_task`(2026-10-21 用户裁决:大类型一个工具,\n\t * `type` + 参数区分)。`subagent_run` 保持独立:它是唯一带动态角色枚举与\n\t * 专用渲染的入口,合并进来只会让最常用的调用多背一层判别。\n\t */\n\tconst taskOps = [\"result\", \"cancel\", \"steer\", \"resume\", ...(listSpec === undefined ? [] : [\"list\"])];\n\tconst taskTool = api.registerTool({\n\t\tname: \"subagent_task\",\n\t\tlabel: \"Subagent tasks\",\n\t\tdescription:\n\t\t\t\"Inspect and steer subagent tasks. \" +\n\t\t\t[\n\t\t\t\t'type=\"result\": read a bounded slice of a task record or child session (taskId or sessionId)',\n\t\t\t\t'type=\"cancel\": cancel a running background task by taskId',\n\t\t\t\t'type=\"steer\": queue a bounded steering message to a running background task',\n\t\t\t\t'type=\"resume\": continue a finished child session with one more prompt',\n\t\t\t\t...(listSpec === undefined ? [] : [`type=\"list\": list this session's own subagent sessions`]),\n\t\t\t].join(\"; \") +\n\t\t\t\". Task creation stays in subagent_run.\",\n\t\tparameters: Type.Object({\n\t\t\ttype: Type.Union(\n\t\t\t\ttaskOps.map((op) => Type.Literal(op)),\n\t\t\t\t{\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t`Operation: ${taskOps.join(\" | \")}. Per-operation contract: ` +\n\t\t\t\t\t\t'\"result\" needs taskId or sessionId (optional maxMessages, waitMs); ' +\n\t\t\t\t\t\t'\"cancel\" needs taskId (optional reason); ' +\n\t\t\t\t\t\t'\"steer\" needs taskId and non-empty text; ' +\n\t\t\t\t\t\t'\"resume\" needs sessionId and prompt; ' +\n\t\t\t\t\t\t'\"list\" takes only limit. ' +\n\t\t\t\t\t\t\"Parameters belonging to another operation are rejected, and a missing required parameter is an error\",\n\t\t\t\t},\n\t\t\t),\n\t\t\t...optionalParams(\n\t\t\t\tresultSpec.parameters.properties,\n\t\t\t\tcancelSpec.parameters.properties,\n\t\t\t\tsteerSpec.parameters.properties,\n\t\t\t\tresumeSpec.parameters.properties,\n\t\t\t\tlistSpec?.parameters.properties,\n\t\t\t),\n\t\t\t// Shared keys across operations: neutral descriptions instead of the\n\t\t\t// last merged spec's operation-specific wording.\n\t\t\ttaskId: Type.Optional(\n\t\t\t\tType.String({\n\t\t\t\t\tdescription: \"Task id from subagent_run (required for result without sessionId, cancel, steer)\",\n\t\t\t\t}),\n\t\t\t),\n\t\t\tsessionId: Type.Optional(\n\t\t\t\tType.String({ description: \"Child session id (required for resume; alternative to taskId for result)\" }),\n\t\t\t),\n\t\t}),\n\t\texecute: async (first: unknown, second?: unknown) => {\n\t\t\tconst input = objectInput(first, second, \"subagent_task\");\n\t\t\tconst type = readDiscriminator(input, \"subagent_task\", taskOps);\n\t\t\tif (type === \"result\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"taskId\", \"sessionId\", \"maxMessages\", \"waitMs\"]);\n\t\t\t\treturn resultSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"cancel\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"taskId\", \"reason\"]);\n\t\t\t\treturn cancelSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"steer\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"taskId\", \"text\"]);\n\t\t\t\treturn steerSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\tif (type === \"resume\") {\n\t\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"sessionId\", \"prompt\"]);\n\t\t\t\treturn resumeSpec.execute(withoutDiscriminator(input), second);\n\t\t\t}\n\t\t\trejectForeignParams(input, \"subagent_task\", type, [\"limit\"]);\n\t\t\treturn listSpec?.execute(withoutDiscriminator(input), second);\n\t\t},\n\t});\n\n\treturn [\n\t\t// 刷新句柄:释放时以最新一次 subagent_run 注册为准(旧句柄 dispose 因表项被接手而失效)。\n\t\tcreateDisposableRegistration(\n\t\t\t\"subagent-delegate.tool.subagent_run\",\n\t\t\t() => void runTool.current.dispose(),\n\t\t\t`registration:${capabilityManifest.id}:refreshable:tool:subagent_run`,\n\t\t),\n\t\ttaskTool,\n\t\troleTool,\n\t\trolesCommand,\n\t\t// 子侧通信面(D-060 S4/S5):获准自建会话两面并存(向下委派 + 向父上抛/兄弟消息)。\n\t\t...childTools,\n\t\tcreateDisposableRegistration(\n\t\t\t\"subagent-delegate.runtime\",\n\t\t\t// 调度器释放是有界的 async 过程(cancel fence + 有界 drain),但 embedded\n\t\t\t// builtin 走同步 loader(loadCapabilityPluginSync -> disposePluginSync 拒绝\n\t\t\t// 异步 cleanup),因此登记处同步发起、观察 promise,不返回 Promise。\n\t\t\t() => {\n\t\t\t\tfor (const unsubscribe of progressUnsubscribes) unsubscribe();\n\t\t\t\tprogressUnsubscribes.clear();\n\t\t\t\t// 生产 tick 驱动必随 dispose 停止(不允许隐藏定时器活过调度器)。\n\t\t\t\tstopDeadlineTicker();\n\t\t\t\t// 先释放调度器(任务终态落定),再回收 runner 池(先释放任务再杀进程)。\n\t\t\t\t// dispose 的 reject 通道在 durable results store persist 失败时打开(durable\n\t\t\t\t// replay assembly 启用后真实存在):释放失败的收尾错误已由 runtime 内部按\n\t\t\t\t// 任务暴露,同步 cleanup 路径无法再抛,这里只保证不产生未处理的 rejection。\n\t\t\t\tvoid runtime\n\t\t\t\t\t.dispose()\n\t\t\t\t\t.then(() => pool?.shutdown())\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t// 释放失败的收尾错误已由 runtime 内部按任务暴露;同步 cleanup 路径\n\t\t\t\t\t\t// 无法再抛,这里只保证不产生未处理的 rejection。\n\t\t\t\t\t});\n\t\t\t},\n\t\t\t`registration:${capabilityManifest.id}:runtime`,\n\t\t),\n\t\t// 公共调度器能力(P1b):排在 runtime 之后,逆序 dispose 先摘能力再释放调度器。\n\t\tschedulerRegistration,\n\t];\n}\n"]}