@ai-agent-forge/plugin-subagent-delegate 0.88.11 → 0.88.12

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),\n * and this consumer has no tick driver of its own, so the tool exposes no\n * `deadlineMs` parameter: a bound that nothing enforces would be a false\n * affordance. Wait bounds are `taskTimeoutMs` (drain) and the host's\n * `limits.drainTimeoutMs` inside the 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\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 } from \"typebox\";\nimport {\n\tcreatePooledAgentTaskAdapterV1,\n\ttype SubagentRunnerPoolV1,\n\ttype SubagentRunnerSpawnHandleV1,\n} from \"./runner-pool.ts\";\nimport { createNodeSubagentRunnerSpawnerV1 } from \"./runner-spawn.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\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\tmaxConcurrentSubagents: 8,\n\t\tmaxQueueDepth: 200,\n\t\tmaxPromptBytes: 65536,\n\t\tmaxMetadataBytes: 16384,\n\t\tmaxResultBytes: 524288,\n\t\tmaxMessages: 2000,\n\t\tdrainTimeoutMs: 30000,\n\t\tmaxRetainedRecords: 256,\n\t\tmaxTasksPerCall: 4,\n\t\ttaskTimeoutMs: 300000,\n\t\t// pooled 模式(D-045):0 = 关闭(默认,shared 形态,零额外进程)。\n\t\trunnerMaxProcesses: 0,\n\t\trunnerMaxSessionsPerRunner: 8,\n\t\trunnerIdleTimeoutMs: 300000,\n\t\trunnerSweepIntervalMs: 60000,\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/** 单次工具调用的并行任务上限(默认 4)与单任务 drain 超时(默认 300000ms)。 */\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}\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_result`),父回合不被打断;无积压时省略。\n\t */\n\treadonly escalations?: readonly 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_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_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 是视觉保底角色(2026-10-04 用户裁决\n * \"术有专攻、角色隔离\",见 docs/plans/视觉保底角色设计注记.md):readonly + 只读工具档案收窄,\n * 结构上不能写代码、不能改文件;指令内嵌保底资产(失败模式清单 + 兜底纪律 + 评审维度与\n * 动线)。失败模式与裁决顺序两角色逐字共享;兜底纪律在提案侧是正向结构约束、在评审侧是\n * 同尺反向指认(同语义、镜像措辞),保证提案与评审用同一把尺。兜底只收抽象纪律,不写死具体\n * 颜色或样式——底色深浅、色相、渐变、容器等具体选择由主题与风格宣言推导(2026-10-08\n * 用户裁决\"美的定义去个人化\",见 docs/plans/study/视觉美学通用原理.md §9-§11)。\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【产出契约】按以下六节输出:\n1. 风格宣言:用 1-2 个词命名设计方向,再用 3-5 句话覆盖空间与形式、色彩与材质、构图与平衡。观念先行,后面的具体选择必须能从宣言推导。\n2. 配色角色表:按 背景、主色、强调色、中性阶(语义色按需)列出每个角色的定位与面积占比,并用相对档位表达明度与饱和度(如\"高明度低饱和\"或\"深底中高对比\");底色深浅与色相由主题推导,浅色、深色皆合法,不预设。不必给具体色值,给色值时注明仅示意。需要层次区分时用主色的深浅变体,不新增色相。\n3. 布局与层级策略:每个画面只允许一个第一焦点;重要性只用四个杠杆编码(尺寸、字重与深浅、位置、隔离度);分组首选邻近与间距,容器是备选手段,采用时须成体系、同类同待遇;间距值成阶梯。\n4. 文案密度预算:主动砍字,给每个区域的文字量上限(如\"标题不超过 12 字、正文每块不超过 3 行\")。把\"堆描述\"当作必须对抗的默认倾向。\n5. 验收清单:交给视觉审核者的可检查清单,逐条映射评审维度(层级、焦点、对齐、间距、密度、对比、一致性、平衡、色彩秩序、动线、收口),每条写成可判真假的陈述。\n6. 明确不做项:列出本轮刻意回避的选择及理由;想加新元素时先问\"如何让已有的更好\"——反加法本能,默认做减法。\n\n【失败模式(逐条自查,普适的丑)】平=无层级、无入口;挤=无留白、密度超载;花=色彩/字体/形状来源过多、各自抢戏;歪=该对齐的没对齐;噪=无理由的装饰变化;脏=低对比灰、浑浊配色、透明滥用。\n\n【兜底纪律】保底不限定风格与具体选择——底色深浅、色相、渐变、容器、装饰本身无对错,被约束的是选择的结构。选择有理由:任何颜色、效果、容器、装饰须服务层级或语义,且能从风格宣言推导;色相由主题、品牌与内容推导,不采用无主题依据的\"默认安全色\"(哪个色相都不例外),说不出理由的选择不做。色彩有角色:主导/次级/强调/中性各司其职,大面积低差异、小面积高对比;层级与可读性由明度差承载,灰度检查须成立;色相数量克制(3 个以内起步,增加须有语义理由)。分组有结构:邻近、间距、字重是第一分组手段,容器是备选且同类同待遇。密度有预算:文字量主动砍、每区域设上限;信息密度越高,装饰越退后。来源有纪律:字体族不超过 2 个,图标一套风格,阴影与描边成体系。\n\n【通用原理】统一中的变化:全是秩序则无聊,全是变化则混乱。重复造统一,对比造趣味,每个对比必须有理由;对比要单纯——用大小对比就只用大小;要么一致,要么明显不同,微差最伤质感。\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: \"视觉审核者:只读评审渲染图与 TUI 文本帧,按维度证据化指认问题;不审代码功能,不修改文件\",\n\t\tinstructions: `你是视觉审核者,只读评审渲染出来的视觉产物(截图、渲染图、TUI 文本帧日志)。你与写代码的角色彼此隔离:不审代码功能正确性,不修改任何文件;判定只对画面负责,不因实现者是谁而放行或苛责。\n\n【输入】待审产物(渲染图截图,或 TUI 文本帧日志)的文件路径与任务背景;若有设计提案,一并提供作为对照基准。约束:\n- 只评审真实读到的内容。图像路径缺失、文件不存在、或当前会话的模型无法真实读取图像内容时,明确报告\"无法执行视觉评审\"及原因——禁止凭想象评审。\n- 多张同类产物(多屏、多页)除逐张结论外,追加跨张一致性检查(间距、配色、字级、组件待遇)。\n\n【评审动线(按序执行,先整体后局部)】\n1. 一瞥测试:第一眼落在哪里?落点应唯一且是最重要的元素;不是则层级失败。\n2. 眯眼测试:模糊细节后画面是否还剩清晰的结构团块(大/中/小、深/中/浅);只剩均匀一片即\"平\"。\n3. 灰度检查:去掉颜色后层级与可读性是否仍成立;不成立即色彩在代偿结构缺陷。\n4. 维度走查:按下方维度逐项检查。\n5. 细节收口:错位、光学对齐、边缘溢出、\"差一点\"问题。\n\n【评审维度】层级(重要性是否被可见编码);焦点(第一眼落点是否唯一且正确);对齐(是否落到共同边缘或轴线);间距(组内距小于组间距、间距成阶梯);密度(信息量与文字密度是否超载);对比(差异是否充分、是否有理由);一致性(同类元素是否同待遇);平衡(视觉重量分布是否有意);色彩秩序(色相数量、角色分配、明度结构);动线(扫视顺序是否与重要性一致);收口(像素级细节)。\n\n【失败模式(命中即问题)】平=无层级无入口;挤=贴边、无呼吸、密度超载;花=色彩/字体/形状来源过多;歪=对齐不成体系;噪=无理由的装饰变化;脏=低对比灰、浑浊配色、透明滥用。\n\n【兜底纪律(指认依据)】不因具体颜色或样式本身指认——深底、浅底、渐变、任一色相、卡片、色条都不是问题;判定落在结构与理由上:色彩无角色分配即\"花\";效果不服务层级或语义、说不出来由即\"噪\";明度差撑不起可读性即\"脏\";分组可靠近却套容器、或同类容器不同待遇即\"噪/花\";密度超载即\"挤\";来源不成体系(字体族、图标风格、阴影描边混杂)即\"花\"。有设计提案时先对照提案:宣言承诺的选择必须在画面兑现,宣言之外临时发挥的效果按上述纪律指认。\n\n【TUI 文本帧评审(介质变体)】待审产物是终端界面的文本帧(如镜像日志)时,评审动线与维度照用,但只判文本可辨的版式维度——对齐(列与框线是否成列)、截断(行尾省略号/溢出)、密度(留白行与信息行的节奏)、层级(标题/正文/辅助文本的标记差异)、一致性(同类界面的边距与对齐口径);文本帧不携带色彩,色彩秩序维度跳过并注明。判定依据不足(帧数太少、缺少同类界面对照)照实标 Unverified。\n\n【输出协议】先给总结论 pass 或 fail(任一维度被违反即 fail),再逐条列问题,每条包含:维度、位置(哪个元素)、为什么(违反了什么)、最小改法。规范:\n- 只报告能说出具体问题的条目;禁止\"感觉不好、不够精致\"这类空判,禁止发明像素值,禁止泛泛的美化建议。\n- 无问题的维度不必逐条表扬,但结尾列出本次已检查的维度清单。\n- 图像过小看不清或信息不足的项标 Unverified,不猜测。\n\n【裁决顺序】可读/功能 > 层级 > 一致性 > 美感偏好。冲突时高层胜出:新颖但读不清=fail;朴素但层级清晰=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\"mode\",\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 [\"model\", \"thinkingLevel\", \"tools\", \"mode\", \"systemPromptAppend\"] 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/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.mode !== 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_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/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 mode?: \"readonly\" | \"full-control\";\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_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_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_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_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?.mode === undefined ? {} : { mode: profile.mode }),\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 [\"model\", \"thinkingLevel\", \"tools\", \"mode\", \"systemPromptAppend\"] 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};\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\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_result` 默认/上限返回条数(有界回读,绝不默认回灌全文)。 */\nconst RESULT_READ_DEFAULT_MESSAGES = 20;\nconst RESULT_READ_MAX_MESSAGES = 50;\n/** `subagent_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_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/** taskId 已知但尚未结算(后台委派):稍后再取或带 waitMs 等待。 */\n\treadonly knownTask?: true;\n\t/** 未结算任务的当前调度器状态(queued/admitted/running)。 */\n\treadonly taskStatus?: string;\n}\n\n/** `subagent_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 = 4;\nconst DEFAULT_TASK_TIMEOUT_MS = 300_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\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};\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\tif (wiring?.postEscalate !== undefined) {\n\t\tchildTools.push(\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_escalate\",\n\t\t\t\tlabel: \"Escalate to parent\",\n\t\t\t\tdescription:\n\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\"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\tparameters: Type.Object({\n\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\tminLength: 1,\n\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}),\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);\n\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\tif (text.trim() === \"\") {\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\"subagent_escalate requires non-empty text\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\twiring.postEscalate?.(text);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t}\n\t\t\t\t\treturn { delivered: true, note: \"the parent reads this with its next task result\" };\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\tif (wiring?.sendSibling !== undefined) {\n\t\tchildTools.push(\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_send\",\n\t\t\t\tlabel: \"Message a sibling\",\n\t\t\t\tdescription:\n\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\"Cross-family addressing is rejected. This channel is for data and intermediate artifacts only: task \" +\n\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\"(audited as excerpts with task results).\",\n\t\t\t\tparameters: Type.Object({\n\t\t\t\t\tto: Type.String({ description: \"Recipient child session id\" }),\n\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\tdescription: `Message (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes)`,\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);\n\t\t\t\t\tconst to = typeof input.to === \"string\" ? input.to : \"\";\n\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\tif (to === \"\" || text.trim() === \"\") {\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\"subagent_send requires to and non-empty text\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\twiring.sendSibling?.(to, text);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t}\n\t\t\t\t\treturn { delivered: true };\n\t\t\t\t},\n\t\t\t}),\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_inbox\",\n\t\t\t\tlabel: \"Read sibling inbox\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Read and clear the earliest bounded messages your siblings sent you (subagent_send). Messages are \" +\n\t\t\t\t\t\"consumed by this call; poll it when coordination is expected. The sibling channel carries data and \" +\n\t\t\t\t\t\"intermediate artifacts only — assignment and acceptance stay with the parent, which can audit this traffic.\",\n\t\t\t\tparameters: Type.Object({\n\t\t\t\t\tlimit: Type.Optional(\n\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),\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);\n\t\t\t\t\tconst requested = input.limit === undefined ? 10 : Number(input.limit);\n\t\t\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > 20) {\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\"subagent_inbox limit must be an integer in 1..20\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst messages = wiring.drainInbox?.(requested) ?? [];\n\t\t\t\t\treturn { messages };\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、每池 8 会话);不可解析则保持共享模式。\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// 否则池化容量小于默认并发(8)会被静默容忍,直到运行期才以 capacity 错误暴露。\n\t\tconst effectiveMaxConcurrent = options?.limits?.maxConcurrentSubagents ?? limits?.maxConcurrentSubagents ?? 8;\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 侧的深度上限同一默认(2 层)。\n\tconst maxNestedDepth = resolveInt(undefined, configInt(api, \"maxNestedDepth\", 1), 2, 1, \"maxNestedDepth\");\n\t// 每父级累计可创建的子代理总量(承载退役切片 2,Option A;与 S5 shared 侧同一默认\n\t// 100):对**非 resume** 的每次 submit 计数,超限按 `subagent_child_quota` 拒绝。\n\tconst maxTotalPerParent = resolveInt(undefined, configInt(api, \"maxTotalPerParent\", 0), 100, 0, \"maxTotalPerParent\");\n\tlet createdSubagentCount = 0;\n\t// background 配置键已移除(D-060 裁决 15,2026-10-03):后台委派是功能基本面,\n\t// 无条件注册(`subagent_run` 的 background 参数与 subagent_cancel / subagent_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\t...(baseAdapter.dispose === undefined\n\t\t\t? {}\n\t\t\t: { dispose: async (): Promise<void> => void (await baseAdapter.dispose?.()) }),\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});\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\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_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(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/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. Pointers only — children still read the real files.\",\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. Roles frame the task; a role may also narrow the child's \" +\n\t\t\t\t\t\t\t\t\t\"tools/mode/model (verified after creation).\",\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_result (optionally waiting).\",\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// 嵌套深度硬限(退役切片 2,Option A):沿 S2 血缘头回溯本会话层级,已达\n\t\t// maxNestedDepth 层时整次调用结构化拒绝——递归的兜底边界(不依赖模型自觉)。\n\t\t// resume 不涉深度(S5 裁定:续写既有会话不计新层级,走 subagent_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> }[] = [];\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\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_list/subagent_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}),\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\tconst sink = options?.backgroundDigestSink;\n\t\t\t\t\tif (sink !== undefined) {\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):注册/列出/删除。注册是\"先落盘再提交内存\"——持久化条目\n\t * 写在会话文件里(customType `subagent.roles.state`),下次打开同一会话仍在;会话\n\t * 角色不写 `<agentDir>/roles/`、不跨会话共享、子代理不继承。三工具未声明 readonlySafe,\n\t * readonly 会话沿用既有\"未声明即不激活\"语义,不做特殊分支。\n\t */\n\tconst roleSetTool = api.registerTool({\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/mode/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\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\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_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_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_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_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_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 roleListTool = api.registerTool({\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_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_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_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_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 roleRemoveTool = api.registerTool({\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_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_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_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 * `/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_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?.mode !== undefined) lines.push(`mode: ${profile.mode}`);\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 resultTool = api.registerTool({\n\t\tname: \"subagent_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);\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_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_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_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...(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_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_cancel(S4 补充裁决,2026-10-01):原\"仅 background 委派启用时注册\"\n\t// 的前提(前台 drain 下父模型在 subagent_run 阻塞中不存在运行中窗口)保留为\n\t// 背景说明——cancel 只在 background 委派返回票据后才有可达窗口。\n\t// 两个工具自 D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst cancelTool = api.registerTool({\n\t\tname: \"subagent_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);\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_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_steer(D-060 裁决 13):与 cancelTool 同属 background 面——有界引导消息\n\t// 投递给运行中的后台子任务(排队语义),需要硬终止时模型仍走 subagent_cancel。\n\t// D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst steerTool = api.registerTool({\n\t\tname: \"subagent_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_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);\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_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_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 resumeTool = api.registerTool({\n\t\tname: \"subagent_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);\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(\"subagent_invalid_input\", \"subagent_resume requires sessionId and prompt\");\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_result` / `subagent_resume`。\n\t */\n\tconst listTool =\n\t\tagents?.list === undefined\n\t\t\t? undefined\n\t\t\t: api.registerTool({\n\t\t\t\t\tname: \"subagent_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_result or subagent_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);\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_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\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\tresultTool,\n\t\tcancelTool,\n\t\tsteerTool,\n\t\tresumeTool,\n\t\troleSetTool,\n\t\troleListTool,\n\t\troleRemoveTool,\n\t\trolesCommand,\n\t\t...(listTool === undefined ? [] : [listTool]),\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// 先释放调度器(任务终态落定),再回收 runner 池(先释放任务再杀进程)。\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];\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 } from \"typebox\";\nimport {\n\tcreatePooledAgentTaskAdapterV1,\n\ttype SubagentRunnerPoolV1,\n\ttype SubagentRunnerSpawnHandleV1,\n} from \"./runner-pool.ts\";\nimport { createNodeSubagentRunnerSpawnerV1 } from \"./runner-spawn.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\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\tmaxConcurrentSubagents: 8,\n\t\tmaxQueueDepth: 200,\n\t\tmaxPromptBytes: 65536,\n\t\tmaxMetadataBytes: 16384,\n\t\tmaxResultBytes: 524288,\n\t\tmaxMessages: 2000,\n\t\tdrainTimeoutMs: 30000,\n\t\tmaxRetainedRecords: 256,\n\t\tmaxTasksPerCall: 4,\n\t\ttaskTimeoutMs: 300000,\n\t\t// pooled 模式(D-045):0 = 关闭(默认,shared 形态,零额外进程)。\n\t\trunnerMaxProcesses: 0,\n\t\trunnerMaxSessionsPerRunner: 8,\n\t\trunnerIdleTimeoutMs: 300000,\n\t\trunnerSweepIntervalMs: 60000,\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/** 单次工具调用的并行任务上限(默认 4)与单任务 drain 超时(默认 300000ms)。 */\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_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_result`),父回合不被打断;无积压时省略。\n\t */\n\treadonly escalations?: readonly 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_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_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 是视觉保底角色(2026-10-04 用户裁决\n * \"术有专攻、角色隔离\",见 docs/plans/视觉保底角色设计注记.md):readonly + 只读工具档案收窄,\n * 结构上不能写代码、不能改文件;指令内嵌保底资产(失败模式清单 + 兜底纪律 + 评审维度与\n * 动线)。失败模式与裁决顺序两角色逐字共享;兜底纪律在提案侧是正向结构约束、在评审侧是\n * 同尺反向指认(同语义、镜像措辞),保证提案与评审用同一把尺。兜底只收抽象纪律,不写死具体\n * 颜色或样式——底色深浅、色相、渐变、容器等具体选择由主题与风格宣言推导(2026-10-08\n * 用户裁决\"美的定义去个人化\",见 docs/plans/study/视觉美学通用原理.md §9-§11)。\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【产出契约】按以下六节输出:\n1. 风格宣言:用 1-2 个词命名设计方向,再用 3-5 句话覆盖空间与形式、色彩与材质、构图与平衡。观念先行,后面的具体选择必须能从宣言推导。\n2. 配色角色表:按 背景、主色、强调色、中性阶(语义色按需)列出每个角色的定位与面积占比,并用相对档位表达明度与饱和度(如\"高明度低饱和\"或\"深底中高对比\");底色深浅与色相由主题推导,浅色、深色皆合法,不预设。不必给具体色值,给色值时注明仅示意。需要层次区分时用主色的深浅变体,不新增色相。\n3. 布局与层级策略:每个画面只允许一个第一焦点;重要性只用四个杠杆编码(尺寸、字重与深浅、位置、隔离度);分组首选邻近与间距,容器是备选手段,采用时须成体系、同类同待遇;间距值成阶梯。\n4. 文案密度预算:主动砍字,给每个区域的文字量上限(如\"标题不超过 12 字、正文每块不超过 3 行\")。把\"堆描述\"当作必须对抗的默认倾向。\n5. 验收清单:交给视觉审核者的可检查清单,逐条映射评审维度(层级、焦点、对齐、间距、密度、对比、一致性、平衡、色彩秩序、动线、收口),每条写成可判真假的陈述。\n6. 明确不做项:列出本轮刻意回避的选择及理由;想加新元素时先问\"如何让已有的更好\"——反加法本能,默认做减法。\n\n【失败模式(逐条自查,普适的丑)】平=无层级、无入口;挤=无留白、密度超载;花=色彩/字体/形状来源过多、各自抢戏;歪=该对齐的没对齐;噪=无理由的装饰变化;脏=低对比灰、浑浊配色、透明滥用。\n\n【兜底纪律】保底不限定风格与具体选择——底色深浅、色相、渐变、容器、装饰本身无对错,被约束的是选择的结构。选择有理由:任何颜色、效果、容器、装饰须服务层级或语义,且能从风格宣言推导;色相由主题、品牌与内容推导,不采用无主题依据的\"默认安全色\"(哪个色相都不例外),说不出理由的选择不做。色彩有角色:主导/次级/强调/中性各司其职,大面积低差异、小面积高对比;层级与可读性由明度差承载,灰度检查须成立;色相数量克制(3 个以内起步,增加须有语义理由)。分组有结构:邻近、间距、字重是第一分组手段,容器是备选且同类同待遇。密度有预算:文字量主动砍、每区域设上限;信息密度越高,装饰越退后。来源有纪律:字体族不超过 2 个,图标一套风格,阴影与描边成体系。\n\n【通用原理】统一中的变化:全是秩序则无聊,全是变化则混乱。重复造统一,对比造趣味,每个对比必须有理由;对比要单纯——用大小对比就只用大小;要么一致,要么明显不同,微差最伤质感。\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: \"视觉审核者:只读评审渲染图与 TUI 文本帧,按维度证据化指认问题;不审代码功能,不修改文件\",\n\t\tinstructions: `你是视觉审核者,只读评审渲染出来的视觉产物(截图、渲染图、TUI 文本帧日志)。你与写代码的角色彼此隔离:不审代码功能正确性,不修改任何文件;判定只对画面负责,不因实现者是谁而放行或苛责。\n\n【输入】待审产物(渲染图截图,或 TUI 文本帧日志)的文件路径与任务背景;若有设计提案,一并提供作为对照基准。约束:\n- 只评审真实读到的内容。图像路径缺失、文件不存在、或当前会话的模型无法真实读取图像内容时,明确报告\"无法执行视觉评审\"及原因——禁止凭想象评审。\n- 多张同类产物(多屏、多页)除逐张结论外,追加跨张一致性检查(间距、配色、字级、组件待遇)。\n\n【评审动线(按序执行,先整体后局部)】\n1. 一瞥测试:第一眼落在哪里?落点应唯一且是最重要的元素;不是则层级失败。\n2. 眯眼测试:模糊细节后画面是否还剩清晰的结构团块(大/中/小、深/中/浅);只剩均匀一片即\"平\"。\n3. 灰度检查:去掉颜色后层级与可读性是否仍成立;不成立即色彩在代偿结构缺陷。\n4. 维度走查:按下方维度逐项检查。\n5. 细节收口:错位、光学对齐、边缘溢出、\"差一点\"问题。\n\n【评审维度】层级(重要性是否被可见编码);焦点(第一眼落点是否唯一且正确);对齐(是否落到共同边缘或轴线);间距(组内距小于组间距、间距成阶梯);密度(信息量与文字密度是否超载);对比(差异是否充分、是否有理由);一致性(同类元素是否同待遇);平衡(视觉重量分布是否有意);色彩秩序(色相数量、角色分配、明度结构);动线(扫视顺序是否与重要性一致);收口(像素级细节)。\n\n【失败模式(命中即问题)】平=无层级无入口;挤=贴边、无呼吸、密度超载;花=色彩/字体/形状来源过多;歪=对齐不成体系;噪=无理由的装饰变化;脏=低对比灰、浑浊配色、透明滥用。\n\n【兜底纪律(指认依据)】不因具体颜色或样式本身指认——深底、浅底、渐变、任一色相、卡片、色条都不是问题;判定落在结构与理由上:色彩无角色分配即\"花\";效果不服务层级或语义、说不出来由即\"噪\";明度差撑不起可读性即\"脏\";分组可靠近却套容器、或同类容器不同待遇即\"噪/花\";密度超载即\"挤\";来源不成体系(字体族、图标风格、阴影描边混杂)即\"花\"。有设计提案时先对照提案:宣言承诺的选择必须在画面兑现,宣言之外临时发挥的效果按上述纪律指认。\n\n【TUI 文本帧评审(介质变体)】待审产物是终端界面的文本帧(如镜像日志)时,评审动线与维度照用,但只判文本可辨的版式维度——对齐(列与框线是否成列)、截断(行尾省略号/溢出)、密度(留白行与信息行的节奏)、层级(标题/正文/辅助文本的标记差异)、一致性(同类界面的边距与对齐口径);文本帧不携带色彩,色彩秩序维度跳过并注明。判定依据不足(帧数太少、缺少同类界面对照)照实标 Unverified。\n\n【输出协议】先给总结论 pass 或 fail(任一维度被违反即 fail),再逐条列问题,每条包含:维度、位置(哪个元素)、为什么(违反了什么)、最小改法。规范:\n- 只报告能说出具体问题的条目;禁止\"感觉不好、不够精致\"这类空判,禁止发明像素值,禁止泛泛的美化建议。\n- 无问题的维度不必逐条表扬,但结尾列出本次已检查的维度清单。\n- 图像过小看不清或信息不足的项标 Unverified,不猜测。\n\n【裁决顺序】可读/功能 > 层级 > 一致性 > 美感偏好。冲突时高层胜出:新颖但读不清=fail;朴素但层级清晰=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\"mode\",\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 [\"model\", \"thinkingLevel\", \"tools\", \"mode\", \"systemPromptAppend\"] 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/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.mode !== 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_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/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 mode?: \"readonly\" | \"full-control\";\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_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_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_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_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?.mode === undefined ? {} : { mode: profile.mode }),\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 [\"model\", \"thinkingLevel\", \"tools\", \"mode\", \"systemPromptAppend\"] 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};\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\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_result` 默认/上限返回条数(有界回读,绝不默认回灌全文)。 */\nconst RESULT_READ_DEFAULT_MESSAGES = 20;\nconst RESULT_READ_MAX_MESSAGES = 50;\n/** `subagent_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_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/** taskId 已知但尚未结算(后台委派):稍后再取或带 waitMs 等待。 */\n\treadonly knownTask?: true;\n\t/** 未结算任务的当前调度器状态(queued/admitted/running)。 */\n\treadonly taskStatus?: string;\n}\n\n/** `subagent_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 = 4;\nconst DEFAULT_TASK_TIMEOUT_MS = 300_000;\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\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};\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\tif (wiring?.postEscalate !== undefined) {\n\t\tchildTools.push(\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_escalate\",\n\t\t\t\tlabel: \"Escalate to parent\",\n\t\t\t\tdescription:\n\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\"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\tparameters: Type.Object({\n\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\tminLength: 1,\n\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}),\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);\n\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\tif (text.trim() === \"\") {\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\"subagent_escalate requires non-empty text\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\twiring.postEscalate?.(text);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t}\n\t\t\t\t\treturn { delivered: true, note: \"the parent reads this with its next task result\" };\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n\tif (wiring?.sendSibling !== undefined) {\n\t\tchildTools.push(\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_send\",\n\t\t\t\tlabel: \"Message a sibling\",\n\t\t\t\tdescription:\n\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\"Cross-family addressing is rejected. This channel is for data and intermediate artifacts only: task \" +\n\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\"(audited as excerpts with task results).\",\n\t\t\t\tparameters: Type.Object({\n\t\t\t\t\tto: Type.String({ description: \"Recipient child session id\" }),\n\t\t\t\t\ttext: Type.String({\n\t\t\t\t\t\tminLength: 1,\n\t\t\t\t\t\tdescription: `Message (at most ${SUBAGENT_MAILBOX_MAX_MESSAGE_BYTES} utf-8 bytes)`,\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);\n\t\t\t\t\tconst to = typeof input.to === \"string\" ? input.to : \"\";\n\t\t\t\t\tconst text = typeof input.text === \"string\" ? input.text : \"\";\n\t\t\t\t\tif (to === \"\" || text.trim() === \"\") {\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\"subagent_send requires to and non-empty text\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttry {\n\t\t\t\t\t\twiring.sendSibling?.(to, text);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmapCommunicationError(error);\n\t\t\t\t\t}\n\t\t\t\t\treturn { delivered: true };\n\t\t\t\t},\n\t\t\t}),\n\t\t\tapi.registerTool({\n\t\t\t\tname: \"subagent_inbox\",\n\t\t\t\tlabel: \"Read sibling inbox\",\n\t\t\t\tdescription:\n\t\t\t\t\t\"Read and clear the earliest bounded messages your siblings sent you (subagent_send). Messages are \" +\n\t\t\t\t\t\"consumed by this call; poll it when coordination is expected. The sibling channel carries data and \" +\n\t\t\t\t\t\"intermediate artifacts only — assignment and acceptance stay with the parent, which can audit this traffic.\",\n\t\t\t\tparameters: Type.Object({\n\t\t\t\t\tlimit: Type.Optional(\n\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),\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);\n\t\t\t\t\tconst requested = input.limit === undefined ? 10 : Number(input.limit);\n\t\t\t\t\tif (!Number.isInteger(requested) || requested < 1 || requested > 20) {\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\"subagent_inbox limit must be an integer in 1..20\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst messages = wiring.drainInbox?.(requested) ?? [];\n\t\t\t\t\treturn { messages };\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、每池 8 会话);不可解析则保持共享模式。\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// 否则池化容量小于默认并发(8)会被静默容忍,直到运行期才以 capacity 错误暴露。\n\t\tconst effectiveMaxConcurrent = options?.limits?.maxConcurrentSubagents ?? limits?.maxConcurrentSubagents ?? 8;\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 侧的深度上限同一默认(2 层)。\n\tconst maxNestedDepth = resolveInt(undefined, configInt(api, \"maxNestedDepth\", 1), 2, 1, \"maxNestedDepth\");\n\t// 每父级累计可创建的子代理总量(承载退役切片 2,Option A;与 S5 shared 侧同一默认\n\t// 100):对**非 resume** 的每次 submit 计数,超限按 `subagent_child_quota` 拒绝。\n\tconst maxTotalPerParent = resolveInt(undefined, configInt(api, \"maxTotalPerParent\", 0), 100, 0, \"maxTotalPerParent\");\n\tlet createdSubagentCount = 0;\n\t// background 配置键已移除(D-060 裁决 15,2026-10-03):后台委派是功能基本面,\n\t// 无条件注册(`subagent_run` 的 background 参数与 subagent_cancel / subagent_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// ---------------------------------------------------------------------------\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\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_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// 死线兜底(设计 §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/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. Pointers only — children still read the real files.\",\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. Roles frame the task; a role may also narrow the child's \" +\n\t\t\t\t\t\t\t\t\t\"tools/mode/model (verified after creation).\",\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_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). A background task still running when its ` +\n\t\t\t\t\t\t\"deadline passes is force-settled timed_out (reason deadline_passed).\",\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_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_list/subagent_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):注册/列出/删除。注册是\"先落盘再提交内存\"——持久化条目\n\t * 写在会话文件里(customType `subagent.roles.state`),下次打开同一会话仍在;会话\n\t * 角色不写 `<agentDir>/roles/`、不跨会话共享、子代理不继承。三工具未声明 readonlySafe,\n\t * readonly 会话沿用既有\"未声明即不激活\"语义,不做特殊分支。\n\t */\n\tconst roleSetTool = api.registerTool({\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/mode/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\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\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_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_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_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_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_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 roleListTool = api.registerTool({\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_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_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_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_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 roleRemoveTool = api.registerTool({\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_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_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_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 * `/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_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?.mode !== undefined) lines.push(`mode: ${profile.mode}`);\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 resultTool = api.registerTool({\n\t\tname: \"subagent_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);\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_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_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_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...(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_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_cancel(S4 补充裁决,2026-10-01):原\"仅 background 委派启用时注册\"\n\t// 的前提(前台 drain 下父模型在 subagent_run 阻塞中不存在运行中窗口)保留为\n\t// 背景说明——cancel 只在 background 委派返回票据后才有可达窗口。\n\t// 两个工具自 D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst cancelTool = api.registerTool({\n\t\tname: \"subagent_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);\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_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_steer(D-060 裁决 13):与 cancelTool 同属 background 面——有界引导消息\n\t// 投递给运行中的后台子任务(排队语义),需要硬终止时模型仍走 subagent_cancel。\n\t// D-060 裁决 15(2026-10-03)起无条件注册(开关形态退役)。\n\tconst steerTool = api.registerTool({\n\t\tname: \"subagent_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_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);\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_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_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 resumeTool = api.registerTool({\n\t\tname: \"subagent_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);\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(\"subagent_invalid_input\", \"subagent_resume requires sessionId and prompt\");\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_result` / `subagent_resume`。\n\t */\n\tconst listTool =\n\t\tagents?.list === undefined\n\t\t\t? undefined\n\t\t\t: api.registerTool({\n\t\t\t\t\tname: \"subagent_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_result or subagent_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);\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_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\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\tresultTool,\n\t\tcancelTool,\n\t\tsteerTool,\n\t\tresumeTool,\n\t\troleSetTool,\n\t\troleListTool,\n\t\troleRemoveTool,\n\t\trolesCommand,\n\t\t...(listTool === undefined ? [] : [listTool]),\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];\n}\n"]}